LyogdmJ1c2hlbHBlci5oCiAqCiAqIENvcHlyaWdodCCpIDIwMTEgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCiAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqLwoKI2lmbmRlZiBfX1ZCVVNIRUxQRVJfSF9fCiNkZWZpbmUgX19WQlVTSEVMUEVSX0hfXwoKI2luY2x1ZGUgInZidXNkZXZpY2VpbmZvLmgiCgovKiBUQVJHRVRfSE9TVE5BTUUgc3BlY2lmaWVkIGFzIC1EVEFSR0VUX0hPU1ROQU1FPVwidGhlbmFtZVwiIG9uIHRoZQogKiBjb21tYW5kIGxpbmUgKi8KCiNkZWZpbmUgVEFSR0VUX0hPU1ROQU1FICJsaW51eGd1ZXN0IgoKc3RhdGljIGlubGluZSB2b2lkCkJ1c0RldmljZUluZm9fSW5pdChVTFRSQV9WQlVTX0RFVklDRUlORk8gKnBCdXNEZXZpY2VJbmZvLAoJCSAgIGNvbnN0IGNoYXIgKmRldmljZVR5cGUsIGNvbnN0IGNoYXIgKmRyaXZlck5hbWUsCgkJICAgY29uc3QgY2hhciAqdmVyLCBjb25zdCBjaGFyICp2ZXJUYWcsCgkJICAgY29uc3QgY2hhciAqYnVpbGREYXRlLCBjb25zdCBjaGFyICpidWlsZFRpbWUpCnsKCW1lbXNldChwQnVzRGV2aWNlSW5mbywgMCwgc2l6ZW9mKFVMVFJBX1ZCVVNfREVWSUNFSU5GTykpOwoJc25wcmludGYocEJ1c0RldmljZUluZm8tPmRldlR5cGUsIHNpemVvZihwQnVzRGV2aWNlSW5mby0+ZGV2VHlwZSksCgkJICIlcyIsIChkZXZpY2VUeXBlKSA/IGRldmljZVR5cGUgOiAidW5rbm93blR5cGUiKTsKCXNucHJpbnRmKHBCdXNEZXZpY2VJbmZvLT5kcnZOYW1lLCBzaXplb2YocEJ1c0RldmljZUluZm8tPmRydk5hbWUpLAoJCSAiJXMiLCAoZHJpdmVyTmFtZSkgPyBkcml2ZXJOYW1lIDogInVua25vd25Ecml2ZXIiKTsKCXNucHJpbnRmKHBCdXNEZXZpY2VJbmZvLT5pbmZvU3RyaW5ncywKCQkgc2l6ZW9mKHBCdXNEZXZpY2VJbmZvLT5pbmZvU3RyaW5ncyksICIlc1x0JXNcdCVzICVzXHQlcyIsCgkJICh2ZXIpID8gdmVyIDogInVua25vd25WZXIiLAoJCSAodmVyVGFnKSA/IHZlclRhZyA6ICJ1bmtub3duVmVyVGFnIiwKCQkgKGJ1aWxkRGF0ZSkgPyBidWlsZERhdGUgOiAibm9CdWlsZERhdGUiLAoJCSAoYnVpbGRUaW1lKSA/IGJ1aWxkVGltZSA6ICJub2J1aWxkVGltZSIsIFRBUkdFVF9IT1NUTkFNRSk7Cn0KCiNlbmRpZgo=