LyoKICogQ29weXJpZ2h0IKkgMjAxNyBWSVZBTlRFIENvcnBvcmF0aW9uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKICogbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCiAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICovCgojaWZuZGVmIF9fVklWTkFURV9EUk1fSF9fCiNkZWZpbmUgX19WSVZOQVRFX0RSTV9IX18KCiNpbmNsdWRlIDxkcm0uaD4KCiNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQpleHRlcm4gIkMiIHsKI2VuZGlmCgpzdHJ1Y3QgZHJtX3Zpdl9nZW1fY3JlYXRlIHsKICAgIF9fdTY0IHNpemU7ICAgICAgICAgLyogaW4gKi8KICAgIF9fdTMyIGZsYWdzOyAgICAgICAgLyogaW4gKi8KICAgIF9fdTMyIGhhbmRsZTsgICAgICAgLyogb3V0ICovCn07CgpzdHJ1Y3QgZHJtX3Zpdl9nZW1fbG9jayB7CiAgICBfX3UzMiBoYW5kbGU7CiAgICBfX3UzMiBjYWNoZWFibGU7CiAgICBfX3UzMiBncHVfdmE7CiAgICBfX3U2NCBjcHVfdmE7Cn07CgpzdHJ1Y3QgZHJtX3Zpdl9nZW1fdW5sb2NrIHsKICAgIF9fdTMyIGhhbmRsZTsKfTsKCnN0cnVjdCBkcm1fdml2X2dlbV9jYWNoZSB7CiAgICBfX3UzMiBoYW5kbGU7CiAgICBfX3UzMiBvcDsKICAgIF9fdTY0IGxvZ2ljYWw7CiAgICBfX3U2NCBieXRlczsKfTsKCnN0cnVjdCBkcm1fdml2X2dlbV9nZXRpbmZvIHsKICAgIF9fdTMyIGhhbmRsZTsKICAgIF9fdTMyIHBhcmFtOwogICAgX191NjQgdmFsdWU7Cn07CgojZGVmaW5lIERSTV9WSVZfR0VNX0NSRUFURSAgICAgICAgICAweDAwCiNkZWZpbmUgRFJNX1ZJVl9HRU1fTE9DSyAgICAgICAgICAgIDB4MDEKI2RlZmluZSBEUk1fVklWX0dFTV9VTkxPQ0sgICAgICAgICAgMHgwMgojZGVmaW5lIERSTV9WSVZfR0VNX0NBQ0hFICAgICAgICAgICAweDAzCiNkZWZpbmUgRFJNX1ZJVl9HRU1fR0VUSU5GTyAgICAgICAgIDB4MDQKI2RlZmluZSBEUk1fVklWX05VTV9JT0NUTFMgICAgICAgICAgMHgwNQoKI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9DUkVBVEUgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX0NSRUFURSwgICAgIHN0cnVjdCBkcm1fdml2X2dlbV9jcmVhdGUpCiNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fTE9DSyAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9MT0NLLCAgICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fbG9jaykKI2RlZmluZSBEUk1fSU9DVExfVklWX0dFTV9VTkxPQ0sgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WSVZfR0VNX1VOTE9DSywgICAgIHN0cnVjdCBkcm1fdml2X2dlbV91bmxvY2spCiNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fQ0FDSEUgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9DQUNIRSwgICAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fY2FjaGUpCiNkZWZpbmUgRFJNX0lPQ1RMX1ZJVl9HRU1fR0VUSU5GTyAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVklWX0dFTV9HRVRJTkZPLCAgICBzdHJ1Y3QgZHJtX3Zpdl9nZW1fZ2V0aW5mbykKCiNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQp9CiNlbmRpZgoKI2VuZGlmIC8qIF9fVklWTkFURV9EUk1fSF9fICovCg==