LyoKICogQ29weXJpZ2h0IKkgMjAwNi0yMDA3IEludGVsIENvcnBvcmF0aW9uCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCiAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CiAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICogU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqCiAqIEF1dGhvcnM6CiAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CiAqLwoKLyoqCiAqIEBmaWxlIFNEVk8gY29tbWFuZCBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4KICovCgojZGVmaW5lIFNEVk9fT1VUUFVUX0ZJUlNUICAgKDApCiNkZWZpbmUgU0RWT19PVVRQVVRfVE1EUzAgICAoMSA8PCAwKQojZGVmaW5lIFNEVk9fT1VUUFVUX1JHQjAgICAgKDEgPDwgMSkKI2RlZmluZSBTRFZPX09VVFBVVF9DVkJTMCAgICgxIDw8IDIpCiNkZWZpbmUgU0RWT19PVVRQVVRfU1ZJRDAgICAoMSA8PCAzKQojZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMCAgKDEgPDwgNCkKI2RlZmluZSBTRFZPX09VVFBVVF9TQ0FSVDAgICgxIDw8IDUpCiNkZWZpbmUgU0RWT19PVVRQVVRfTFZEUzAgICAoMSA8PCA2KQojZGVmaW5lIFNEVk9fT1VUUFVUX1RNRFMxICAgKDEgPDwgOCkKI2RlZmluZSBTRFZPX09VVFBVVF9SR0IxICAgICgxIDw8IDkpCiNkZWZpbmUgU0RWT19PVVRQVVRfQ1ZCUzEgICAoMSA8PCAxMCkKI2RlZmluZSBTRFZPX09VVFBVVF9TVklEMSAgICgxIDw8IDExKQojZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMSAgKDEgPDwgMTIpCiNkZWZpbmUgU0RWT19PVVRQVVRfU0NBUlQxICAoMSA8PCAxMykKI2RlZmluZSBTRFZPX09VVFBVVF9MVkRTMSAgICgxIDw8IDE0KQojZGVmaW5lIFNEVk9fT1VUUFVUX0xBU1QgICAgKDE0KQoKc3RydWN0IGludGVsX3Nkdm9fY2FwcyB7Cgl1OCB2ZW5kb3JfaWQ7Cgl1OCBkZXZpY2VfaWQ7Cgl1OCBkZXZpY2VfcmV2X2lkOwoJdTggc2R2b192ZXJzaW9uX21ham9yOwoJdTggc2R2b192ZXJzaW9uX21pbm9yOwoJdW5zaWduZWQgaW50IHNkdm9faW5wdXRzX21hc2s6MjsKCXVuc2lnbmVkIGludCBzbW9vdGhfc2NhbGluZzoxOwoJdW5zaWduZWQgaW50IHNoYXJwX3NjYWxpbmc6MTsKCXVuc2lnbmVkIGludCB1cF9zY2FsaW5nOjE7Cgl1bnNpZ25lZCBpbnQgZG93bl9zY2FsaW5nOjE7Cgl1bnNpZ25lZCBpbnQgc3RhbGxfc3VwcG9ydDoxOwoJdW5zaWduZWQgaW50IHBhZDoxOwoJdTE2IG91dHB1dF9mbGFnczsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIE5vdGU6IFNEVk8gZGV0YWlsZWQgdGltaW5nIGZsYWdzIG1hdGNoIEVESUQgbWlzYyBmbGFncy4gKi8KI2RlZmluZSBEVERfRkxBR19IU1lOQ19QT1NJVElWRSAoMSA8PCAxKQojZGVmaW5lIERURF9GTEFHX1ZTWU5DX1BPU0lUSVZFICgxIDw8IDIpCiNkZWZpbmUgRFREX0ZMQUdfSU5URVJMQUNFCSgxIDw8IDcpCgovKiogVGhpcyBtYXRjaGVzIHRoZSBFRElEIERURCBzdHJ1Y3R1cmUsIG1vcmUgb3IgbGVzcyAqLwpzdHJ1Y3QgaW50ZWxfc2R2b19kdGQgewoJc3RydWN0IHsKCQl1MTYgY2xvY2s7CS8qKjwgcGl4ZWwgY2xvY2ssIGluIDEwa0h6IHVuaXRzICovCgkJdTggaF9hY3RpdmU7CS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICovCgkJdTggaF9ibGFuazsJLyoqPCBsb3dlciA4IGJpdHMgKHBpeGVscykgKi8KCQl1OCBoX2hpZ2g7CS8qKjwgdXBwZXIgNCBiaXRzIGVhY2ggaF9hY3RpdmUsIGhfYmxhbmsgKi8KCQl1OCB2X2FjdGl2ZTsJLyoqPCBsb3dlciA4IGJpdHMgKGxpbmVzKSAqLwoJCXU4IHZfYmxhbms7CS8qKjwgbG93ZXIgOCBiaXRzIChsaW5lcykgKi8KCQl1OCB2X2hpZ2g7CS8qKjwgdXBwZXIgNCBiaXRzIGVhY2ggdl9hY3RpdmUsIHZfYmxhbmsgKi8KCX0gcGFydDE7CgoJc3RydWN0IHsKCQl1OCBoX3N5bmNfb2ZmOwkvKio8IGxvd2VyIDggYml0cywgZnJvbSBoYmxhbmsgc3RhcnQgKi8KCQl1OCBoX3N5bmNfd2lkdGg7CS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICovCgkJLyoqIGxvd2VyIDQgYml0cyBlYWNoIHZzeW5jIG9mZnNldCwgdnN5bmMgd2lkdGggKi8KCQl1OCB2X3N5bmNfb2ZmX3dpZHRoOwoJCS8qKgoJCSogMiBoaWdoIGJpdHMgb2YgaHN5bmMgb2Zmc2V0LCAyIGhpZ2ggYml0cyBvZiBoc3luYyB3aWR0aCwKCQkqIGJpdHMgNC01IG9mIHZzeW5jIG9mZnNldCwgYW5kIDIgaGlnaCBiaXRzIG9mIHZzeW5jIHdpZHRoLgoJCSovCgkJdTggc3luY19vZmZfd2lkdGhfaGlnaDsKCQl1OCBkdGRfZmxhZ3M7CgkJdTggc2R2b19mbGFnczsKCQkvKiogYml0cyA2LTcgb2YgdnN5bmMgb2Zmc2V0IGF0IGJpdHMgNi03ICovCgkJdTggdl9zeW5jX29mZl9oaWdoOwoJCXU4IHJlc2VydmVkOwoJfSBwYXJ0MjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCnN0cnVjdCBpbnRlbF9zZHZvX3BpeGVsX2Nsb2NrX3JhbmdlIHsKCXUxNiBtaW47CS8qKjwgcGl4ZWwgY2xvY2ssIGluIDEwa0h6IHVuaXRzICovCgl1MTYgbWF4OwkvKio8IHBpeGVsIGNsb2NrLCBpbiAxMGtIeiB1bml0cyAqLwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKc3RydWN0IGludGVsX3Nkdm9fcHJlZmVycmVkX2lucHV0X3RpbWluZ19hcmdzIHsKCXUxNiBjbG9jazsKCXUxNiB3aWR0aDsKCXUxNiBoZWlnaHQ7Cgl1OAlpbnRlcmxhY2U6MTsKCXU4CXNjYWxlZDoxOwoJdTgJcGFkOjY7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgovKiBJMkMgcmVnaXN0ZXJzIGZvciBTRFZPICovCiNkZWZpbmUgU0RWT19JMkNfQVJHXzAJCQkJMHgwNwojZGVmaW5lIFNEVk9fSTJDX0FSR18xCQkJCTB4MDYKI2RlZmluZSBTRFZPX0kyQ19BUkdfMgkJCQkweDA1CiNkZWZpbmUgU0RWT19JMkNfQVJHXzMJCQkJMHgwNAojZGVmaW5lIFNEVk9fSTJDX0FSR180CQkJCTB4MDMKI2RlZmluZSBTRFZPX0kyQ19BUkdfNQkJCQkweDAyCiNkZWZpbmUgU0RWT19JMkNfQVJHXzYJCQkJMHgwMQojZGVmaW5lIFNEVk9fSTJDX0FSR183CQkJCTB4MDAKI2RlZmluZSBTRFZPX0kyQ19PUENPREUJCQkJMHgwOAojZGVmaW5lIFNEVk9fSTJDX0NNRF9TVEFUVVMJCQkweDA5CiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzAJCQkweDBhCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzEJCQkweDBiCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzIJCQkweDBjCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzMJCQkweDBkCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzQJCQkweDBlCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzUJCQkweDBmCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzYJCQkweDEwCiNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzcJCQkweDExCiNkZWZpbmUgU0RWT19JMkNfVkVORE9SX0JFR0lOCQkJMHgyMAoKLyogU3RhdHVzIHJlc3VsdHMgKi8KI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfUE9XRVJfT04JCTB4MAojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTCQkJMHgxCiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX05PVFNVUFAJCQkweDIKI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfSU5WQUxJRF9BUkcJCTB4MwojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HCQkJMHg0CiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1RBUkdFVF9OT1RfU1BFQ0lGSUVECTB4NQojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQCTB4NgoKLyogU0RWTyBjb21tYW5kcywgYXJndW1lbnQvcmVzdWx0IHJlZ2lzdGVycyAqLwoKI2RlZmluZSBTRFZPX0NNRF9SRVNFVAkJCQkJMHgwMQoKLyoqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19jYXBzICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0RFVklDRV9DQVBTCQkJMHgwMgoKI2RlZmluZSBTRFZPX0NNRF9HRVRfRklSTVdBUkVfUkVWCQkJMHg4NgojIGRlZmluZSBTRFZPX0RFVklDRV9GSVJNV0FSRV9NSU5PUgkJCVNEVk9fSTJDX1JFVFVSTl8wCiMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX01BSk9SCQkJU0RWT19JMkNfUkVUVVJOXzEKIyBkZWZpbmUgU0RWT19ERVZJQ0VfRklSTVdBUkVfUEFUQ0gJCQlTRFZPX0kyQ19SRVRVUk5fMgoKLyoqCiAqIFJlcG9ydHMgd2hpY2ggaW5wdXRzIGFyZSB0cmFpbmVkIChtYW5hZ2VkIHRvIHN5bmMpLgogKgogKiBEZXZpY2VzIG11c3QgaGF2ZSB0cmFpbmVkIHdpdGhpbiAyIHZzeW5jcyBvZiBhIG1vZGUgY2hhbmdlLgogKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfVFJBSU5FRF9JTlBVVFMJCQkweDAzCnN0cnVjdCBpbnRlbF9zZHZvX2dldF90cmFpbmVkX2lucHV0c19yZXNwb25zZSB7Cgl1bnNpZ25lZCBpbnQgaW5wdXQwX3RyYWluZWQ6MTsKCXVuc2lnbmVkIGludCBpbnB1dDFfdHJhaW5lZDoxOwoJdW5zaWduZWQgaW50IHBhZDo2Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyoqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2YgYWN0aXZlIG91dHB1dHMuICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0FDVElWRV9PVVRQVVRTCQkJMHgwNAoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgc2V0IG9mIGFjdGl2ZSBvdXRwdXRzLgogKgogKiBUYWtlcyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncy4gIE11c3QgYmUgcHJlY2VkZWQgYnkgYSBTRVRfSU5fT1VUX01BUAogKiBvbiBtdWx0aS1vdXRwdXQgZGV2aWNlcy4KICovCiNkZWZpbmUgU0RWT19DTURfU0VUX0FDVElWRV9PVVRQVVRTCQkJMHgwNQoKLyoqCiAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWFwcGluZyBvZiBTRFZPIGlucHV0cyB0byBvdXRwdXRzIG9uIHRoZSBkZXZpY2UuCiAqCiAqIFJldHVybnMgdHdvIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBzdHJ1Y3R1cmVzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5fT1VUX01BUAkJCQkweDA2CnN0cnVjdCBpbnRlbF9zZHZvX2luX291dF9tYXAgewoJdTE2IGluMCwgaW4xOwp9OwoKLyoqCiAqIFNldHMgdGhlIGN1cnJlbnQgbWFwcGluZyBvZiBTRFZPIGlucHV0cyB0byBvdXRwdXRzIG9uIHRoZSBkZXZpY2UuCiAqCiAqIFRha2VzIHR3byBzdHJ1Y3QgaTM4MF9zZHZvX291dHB1dF9mbGFncyBzdHJ1Y3R1cmVzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfSU5fT1VUX01BUAkJCQkweDA3CgovKioKICogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiBhdHRhY2hlZCBkaXNwbGF5cy4KICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0FUVEFDSEVEX0RJU1BMQVlTCQkJMHgwYgoKLyoqCiAqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXB0dXRfZmxhZ3Mgb2YgZGlzcGxheXMgc3VwcG9ydGluZyBob3QgcGx1Z2dpbmcuCiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9IT1RfUExVR19TVVBQT1JUCQkJMHgwYwoKLyoqCiAqIFRha2VzIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfQUNUSVZFX0hPVF9QTFVHCQkJMHgwZAoKLyoqCiAqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2YgZGlzcGxheXMgd2l0aCBob3QgcGx1ZwogKiBpbnRlcnJ1cHRzIGVuYWJsZWQuCiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9BQ1RJVkVfSE9UX1BMVUcJCQkweDBlCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9JTlRFUlJVUFRfRVZFTlRfU09VUkNFCQkweDBmCnN0cnVjdCBpbnRlbF9zZHZvX2dldF9pbnRlcnJ1cHRfZXZlbnRfc291cmNlX3Jlc3BvbnNlIHsKCXUxNiBpbnRlcnJ1cHRfc3RhdHVzOwoJdW5zaWduZWQgaW50IGFtYmllbnRfbGlnaHRfaW50ZXJydXB0OjE7Cgl1bnNpZ25lZCBpbnQgaGRtaV9hdWRpb19lbmNyeXB0X2NoYW5nZToxOwoJdW5zaWduZWQgaW50IHBhZDo2Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyoqCiAqIFNlbGVjdHMgd2hpY2ggaW5wdXQgaXMgYWZmZWN0ZWQgYnkgZnV0dXJlIGlucHV0IGNvbW1hbmRzLgogKgogKiBDb21tYW5kcyBhZmZlY3RlZCBpbmNsdWRlIFNFVF9JTlBVVF9USU1JTkdTX1BBUlRbMTJdLAogKiBHRVRfSU5QVVRfVElNSU5HU19QQVJUWzEyXSwgR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdTX1BBUlRbMTJdLAogKiBHRVRfSU5QVVRfUElYRUxfQ0xPQ0tfUkFOR0UsIGFuZCBDUkVBVEVfUFJFRkVSUkVEX0lOUFVUX1RJTUlOR1MuCiAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9UQVJHRVRfSU5QVVQJCQkweDEwCnN0cnVjdCBpbnRlbF9zZHZvX3NldF90YXJnZXRfaW5wdXRfYXJncyB7Cgl1bnNpZ25lZCBpbnQgdGFyZ2V0XzE6MTsKCXVuc2lnbmVkIGludCBwYWQ6NzsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qKgogKiBUYWtlcyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiB3aGljaCBvdXRwdXRzIGFyZSB0YXJnZXRlZCBieQogKiBmdXR1cmUgb3V0cHV0IGNvbW1hbmRzLgogKgogKiBBZmZlY3RlZCBjb21tYW5kcyBpbmNsdWUgU0VUX09VVFBVVF9USU1JTkdTX1BBUlRbMTJdLAogKiBHRVRfT1VUUFVUX1RJTUlOR1NfUEFSVFsxMl0sIGFuZCBHRVRfT1VUUFVUX1BJWEVMX0NMT0NLX1JBTkdFLgogKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfVEFSR0VUX09VVFBVVAkJCTB4MTEKCiNkZWZpbmUgU0RWT19DTURfR0VUX0lOUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTIKI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMgkJMHgxMwojZGVmaW5lIFNEVk9fQ01EX1NFVF9JTlBVVF9USU1JTkdTX1BBUlQxCQkweDE0CiNkZWZpbmUgU0RWT19DTURfU0VUX0lOUFVUX1RJTUlOR1NfUEFSVDIJCTB4MTUKI2RlZmluZSBTRFZPX0NNRF9TRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTYKI2RlZmluZSBTRFZPX0NNRF9TRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDIJCTB4MTcKI2RlZmluZSBTRFZPX0NNRF9HRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTgKI2RlZmluZSBTRFZPX0NNRF9HRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDIJCTB4MTkKLyogUGFydCAxICovCiMgZGVmaW5lIFNEVk9fRFREX0NMT0NLX0xPVwkJCQlTRFZPX0kyQ19BUkdfMAojIGRlZmluZSBTRFZPX0RURF9DTE9DS19ISUdICQkJCVNEVk9fSTJDX0FSR18xCiMgZGVmaW5lIFNEVk9fRFREX0hfQUNUSVZFCQkJCVNEVk9fSTJDX0FSR18yCiMgZGVmaW5lIFNEVk9fRFREX0hfQkxBTksJCQkJU0RWT19JMkNfQVJHXzMKIyBkZWZpbmUgU0RWT19EVERfSF9ISUdICQkJCVNEVk9fSTJDX0FSR180CiMgZGVmaW5lIFNEVk9fRFREX1ZfQUNUSVZFCQkJCVNEVk9fSTJDX0FSR181CiMgZGVmaW5lIFNEVk9fRFREX1ZfQkxBTksJCQkJU0RWT19JMkNfQVJHXzYKIyBkZWZpbmUgU0RWT19EVERfVl9ISUdICQkJCVNEVk9fSTJDX0FSR183Ci8qIFBhcnQgMiAqLwojIGRlZmluZSBTRFZPX0RURF9IU1lOQ19PRkYJCQkJU0RWT19JMkNfQVJHXzAKIyBkZWZpbmUgU0RWT19EVERfSFNZTkNfV0lEVEgJCQkJU0RWT19JMkNfQVJHXzEKIyBkZWZpbmUgU0RWT19EVERfVlNZTkNfT0ZGX1dJRFRICQkJU0RWT19JMkNfQVJHXzIKIyBkZWZpbmUgU0RWT19EVERfU1lOQ19PRkZfV0lEVEhfSElHSAkJCVNEVk9fSTJDX0FSR18zCiMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHUwkJCQlTRFZPX0kyQ19BUkdfNAojIGRlZmluZSBTRFZPX0RURF9EVERfRkxBR19JTlRFUkxBQ0VECQkJCSgxIDw8IDcpCiMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX1NURVJFT19NQVNLCQkJCSgzIDw8IDUpCiMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX0lOUFVUX01BU0sJCQkJKDMgPDwgMykKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfU1lOQ19NQVNLCQkJCSgzIDw8IDEpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBUwkJCQlTRFZPX0kyQ19BUkdfNQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU1RBTEwJCQkJKDEgPDwgNykKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX0NFTlRFUkVECQkJCSgwIDw8IDYpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19VUFBFUl9MRUZUCQkJCSgxIDw8IDYpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TQ0FMSU5HX01BU0sJCQkoMyA8PCA0KQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU0NBTElOR19OT05FCQkJKDAgPDwgNCkKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NDQUxJTkdfU0hBUlAJCQkoMSA8PCA0KQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU0NBTElOR19TTU9PVEgJCQkoMiA8PCA0KQojIGRlZmluZSBTRFZPX0RURF9WU1lOQ19PRkZfSElHSAkJCVNEVk9fSTJDX0FSR182CgovKioKICogR2VuZXJhdGVzIGEgRFREIGJhc2VkIG9uIHRoZSBnaXZlbiB3aWR0aCwgaGVpZ2h0LCBhbmQgZmxhZ3MuCiAqCiAqIFRoaXMgd2lsbCBiZSBzdXBwb3J0ZWQgYnkgYW55IGRldmljZSBzdXBwb3J0aW5nIHNjYWxpbmcgb3IgaW50ZXJsYWNlZAogKiBtb2Rlcy4KICovCiNkZWZpbmUgU0RWT19DTURfQ1JFQVRFX1BSRUZFUlJFRF9JTlBVVF9USU1JTkcJCTB4MWEKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0NMT0NLX0xPVwkJU0RWT19JMkNfQVJHXzAKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0NMT0NLX0hJR0gJCVNEVk9fSTJDX0FSR18xCiMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19XSURUSF9MT1cJCVNEVk9fSTJDX0FSR18yCiMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19XSURUSF9ISUdICQlTRFZPX0kyQ19BUkdfMwojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfSEVJR0hUX0xPVwkJU0RWT19JMkNfQVJHXzQKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0hFSUdIVF9ISUdICVNEVk9fSTJDX0FSR181CiMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19GTEFHUwkJU0RWT19JMkNfQVJHXzYKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTX0lOVEVSTEFDRUQJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19GTEFHU19TQ0FMRUQJCSgxIDw8IDEpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HX1BBUlQxCTB4MWIKI2RlZmluZSBTRFZPX0NNRF9HRVRfUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19QQVJUMgkweDFjCgovKiogUmV0dXJucyBhIHN0cnVjdCBpbnRlbF9zZHZvX3BpeGVsX2Nsb2NrX3JhbmdlICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0lOUFVUX1BJWEVMX0NMT0NLX1JBTkdFCQkweDFkCi8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fcGl4ZWxfY2xvY2tfcmFuZ2UgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfT1VUUFVUX1BJWEVMX0NMT0NLX1JBTkdFCQkweDFlCgovKiogUmV0dXJucyBhIGJ5dGUgYml0ZmllbGQgY29udGFpbmluZyBTRFZPX0NMT0NLX1JBVEVfTVVMVF8qIGZsYWdzICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9DTE9DS19SQVRFX01VTFRTCQkweDFmCgovKiogUmV0dXJucyBhIGJ5dGUgY29udGFpbmluZyBhIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXyogZmxhZyAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9DTE9DS19SQVRFX01VTFQJCQkweDIwCi8qKiBUYWtlcyBhIGJ5dGUgY29udGFpbmluZyBhIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXyogZmxhZyAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9DTE9DS19SQVRFX01VTFQJCQkweDIxCiMgZGVmaW5lIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXzFYCQkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXzJYCQkJCSgxIDw8IDEpCiMgZGVmaW5lIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXzRYCQkJCSgxIDw8IDMpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQT1JURURfVFZfRk9STUFUUwkJMHgyNwovKiogNiBieXRlcyBvZiBiaXQgZmxhZ3MgZm9yIFRWIGZvcm1hdHMgc2hhcmVkIGJ5IGFsbCBUViBmb3JtYXQgZnVuY3Rpb25zICovCnN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCB7Cgl1bnNpZ25lZCBpbnQgbnRzY19tOjE7Cgl1bnNpZ25lZCBpbnQgbnRzY19qOjE7Cgl1bnNpZ25lZCBpbnQgbnRzY180NDM6MTsKCXVuc2lnbmVkIGludCBwYWxfYjoxOwoJdW5zaWduZWQgaW50IHBhbF9kOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX2c6MTsKCXVuc2lnbmVkIGludCBwYWxfaDoxOwoJdW5zaWduZWQgaW50IHBhbF9pOjE7CgoJdW5zaWduZWQgaW50IHBhbF9tOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX246MTsKCXVuc2lnbmVkIGludCBwYWxfbmM6MTsKCXVuc2lnbmVkIGludCBwYWxfNjA6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9iOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fZDoxOwoJdW5zaWduZWQgaW50IHNlY2FtX2c6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9rOjE7CgoJdW5zaWduZWQgaW50IHNlY2FtX2sxOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fbDoxOwoJdW5zaWduZWQgaW50IHNlY2FtXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjQwbV8xMDgwaV81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI0MG1fMTA4MGlfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNjBtXzEwODBpXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjYwbV8xMDgwaV82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MGlfNTA6MTsKCgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MGlfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzIzOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yNDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjU6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzI5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8zMDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfNTA6MTsKCgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTVtXzEwODBpXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk1bV8xMDgwcF81MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5Nm1fNzIwcF81OToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5Nm1fNzIwcF82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5Nm1fNzIwcF81MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5M21fNDgwcF81OToxOwoKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8xNzBtXzQ4MGlfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9pdHVyYnQ2MDFfNTc2aV81MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX2l0dXJidDYwMV81NzZwXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfZWlhXzc3MDJhXzQ4MGlfNjA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9laWFfNzcwMmFfNDgwcF82MDoxOwoJdW5zaWduZWQgaW50IHBhZDozOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKI2RlZmluZSBTRFZPX0NNRF9HRVRfVFZfRk9STUFUCQkJCTB4MjgKCiNkZWZpbmUgU0RWT19DTURfU0VUX1RWX0ZPUk1BVAkJCQkweDI5CgovKiogUmV0dXJucyB0aGUgcmVzb2x1dGlvc24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBnaXZlbiBUViBmb3JtYXQgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfU0RUVl9SRVNPTFVUSU9OX1NVUFBPUlQJCTB4ODMKc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcXVlc3QgewoJdW5zaWduZWQgaW50IG50c2NfbToxOwoJdW5zaWduZWQgaW50IG50c2NfajoxOwoJdW5zaWduZWQgaW50IG50c2NfNDQzOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX2I6MTsKCXVuc2lnbmVkIGludCBwYWxfZDoxOwoJdW5zaWduZWQgaW50IHBhbF9nOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX2g6MTsKCXVuc2lnbmVkIGludCBwYWxfaToxOwoKCXVuc2lnbmVkIGludCBwYWxfbToxOwoJdW5zaWduZWQgaW50IHBhbF9uOjE7Cgl1bnNpZ25lZCBpbnQgcGFsX25jOjE7Cgl1bnNpZ25lZCBpbnQgcGFsXzYwOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fYjoxOwoJdW5zaWduZWQgaW50IHNlY2FtX2Q6MTsKCXVuc2lnbmVkIGludCBzZWNhbV9nOjE7Cgl1bnNpZ25lZCBpbnQgc2VjYW1fazoxOwoKCXVuc2lnbmVkIGludCBzZWNhbV9rMToxOwoJdW5zaWduZWQgaW50IHNlY2FtX2w6MTsKCXVuc2lnbmVkIGludCBzZWNhbV82MDoxOwoJdW5zaWduZWQgaW50IHBhZDo1Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcGx5IHsKCXVuc2lnbmVkIGludCByZXNfMzIweDIwMDoxOwoJdW5zaWduZWQgaW50IHJlc18zMjB4MjQwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzQwMHgzMDA6MTsKCXVuc2lnbmVkIGludCByZXNfNjQweDM1MDoxOwoJdW5zaWduZWQgaW50IHJlc182NDB4NDAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzY0MHg0ODA6MTsKCXVuc2lnbmVkIGludCByZXNfNzA0eDQ4MDoxOwoJdW5zaWduZWQgaW50IHJlc183MDR4NTc2OjE7CgoJdW5zaWduZWQgaW50IHJlc183MjB4MzUwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzcyMHg0MDA6MTsKCXVuc2lnbmVkIGludCByZXNfNzIweDQ4MDoxOwoJdW5zaWduZWQgaW50IHJlc183MjB4NTQwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzcyMHg1NzY6MTsKCXVuc2lnbmVkIGludCByZXNfNzY4eDU3NjoxOwoJdW5zaWduZWQgaW50IHJlc184MDB4NjAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzgzMng2MjQ6MTsKCgl1bnNpZ25lZCBpbnQgcmVzXzkyMHg3NjY6MTsKCXVuc2lnbmVkIGludCByZXNfMTAyNHg3Njg6MTsKCXVuc2lnbmVkIGludCByZXNfMTI4MHgxMDI0OjE7Cgl1bnNpZ25lZCBpbnQgcGFkOjU7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgovKiBHZXQgc3VwcG9ydGVkIHJlc29sdXRpb24gd2l0aCBzcXVpcmUgcGl4ZWwgYXNwZWN0IHJhdGlvIHRoYXQgY2FuIGJlCiAgIHNjYWxlZCBmb3IgdGhlIHJlcXVlc3RlZCBIRFRWIGZvcm1hdCAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9TQ0FMRURfSERUVl9SRVNPTFVUSU9OX1NVUFBPUlQJCTB4ODUKCnN0cnVjdCBpbnRlbF9zZHZvX2hkdHZfcmVzb2x1dGlvbl9yZXF1ZXN0IHsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNDBtXzEwODBpXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjQwbV8xMDgwaV82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI2MG1fMTA4MGlfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNjBtXzEwODBpXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV81MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MGlfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBpXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yMzoxOwoKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzI0OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yNToxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzMwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF81MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfNTk6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk1bV8xMDgwaV81MDoxOwoKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTVtXzEwODBwXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzYwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzUwOjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjkzbV80ODBwXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMTcwbV80ODBpXzU5OjE7Cgl1bnNpZ25lZCBpbnQgaGR0dl9zdGRfaXR1cmJ0NjAxXzU3NmlfNTA6MTsKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9pdHVyYnQ2MDFfNTc2cF81MDoxOwoKCXVuc2lnbmVkIGludCBoZHR2X3N0ZF9laWFfNzcwMmFfNDgwaV82MDoxOwoJdW5zaWduZWQgaW50IGhkdHZfc3RkX2VpYV83NzAyYV80ODBwXzYwOjE7Cgl1bnNpZ25lZCBpbnQgcGFkOjY7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgpzdHJ1Y3QgaW50ZWxfc2R2b19oZHR2X3Jlc29sdXRpb25fcmVwbHkgewoJdW5zaWduZWQgaW50IHJlc182NDB4NDgwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzgwMHg2MDA6MTsKCXVuc2lnbmVkIGludCByZXNfMTAyNHg3Njg6MTsKCXVuc2lnbmVkIGludCByZXNfMTI4MHg5NjA6MTsKCXVuc2lnbmVkIGludCByZXNfMTQwMHgxMDUwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzE2MDB4MTIwMDoxOwoJdW5zaWduZWQgaW50IHJlc18xOTIweDE0NDA6MTsKCXVuc2lnbmVkIGludCByZXNfMjA0OHgxNTM2OjE7CgoJdW5zaWduZWQgaW50IHJlc18yNTYweDE5MjA6MTsKCXVuc2lnbmVkIGludCByZXNfMzIwMHgyNDAwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzM4NDB4Mjg4MDoxOwoJdW5zaWduZWQgaW50IHBhZDE6NTsKCgl1bnNpZ25lZCBpbnQgcmVzXzg0OHg0ODA6MTsKCXVuc2lnbmVkIGludCByZXNfMTA2NHg2MDA6MTsKCXVuc2lnbmVkIGludCByZXNfMTI4MHg3MjA6MTsKCXVuc2lnbmVkIGludCByZXNfMTM2MHg3Njg6MTsKCXVuc2lnbmVkIGludCByZXNfMTcwNHg5NjA6MTsKCXVuc2lnbmVkIGludCByZXNfMTg2NHgxMDUwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzE5MjB4MTA4MDoxOwoJdW5zaWduZWQgaW50IHJlc18yMTI4eDEyMDA6MTsKCgl1bnNpZ25lZCBpbnQgcmVzXzI1NjB4MTQwMDoxOwoJdW5zaWduZWQgaW50IHJlc18yNzI4eDE1MzY6MTsKCXVuc2lnbmVkIGludCByZXNfMzQwOHgxOTIwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzQyNjR4MjQwMDoxOwoJdW5zaWduZWQgaW50IHJlc181MTIweDI4ODA6MTsKCXVuc2lnbmVkIGludCBwYWQyOjM7CgoJdW5zaWduZWQgaW50IHJlc183Njh4NDgwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzk2MHg2MDA6MTsKCXVuc2lnbmVkIGludCByZXNfMTE1Mng3MjA6MTsKCXVuc2lnbmVkIGludCByZXNfMTEyNHg3Njg6MTsKCXVuc2lnbmVkIGludCByZXNfMTUzNng5NjA6MTsKCXVuc2lnbmVkIGludCByZXNfMTY4MHgxMDUwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzE3Mjh4MTA4MDoxOwoJdW5zaWduZWQgaW50IHJlc18xOTIweDEyMDA6MTsKCgl1bnNpZ25lZCBpbnQgcmVzXzIzMDR4MTQ0MDoxOwoJdW5zaWduZWQgaW50IHJlc18yNDU2eDE1MzY6MTsKCXVuc2lnbmVkIGludCByZXNfMzA3MngxOTIwOjE7Cgl1bnNpZ25lZCBpbnQgcmVzXzM4NDB4MjQwMDoxOwoJdW5zaWduZWQgaW50IHJlc180NjA4eDI4ODA6MTsKCXVuc2lnbmVkIGludCBwYWQzOjM7CgoJdW5zaWduZWQgaW50IHJlc18xMjgweDEwMjQ6MTsKCXVuc2lnbmVkIGludCBwYWQ0Ojc7CgoJdW5zaWduZWQgaW50IHJlc18xMjgweDc2ODoxOwoJdW5zaWduZWQgaW50IHBhZDU6NzsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIEdldCBzdXBwb3J0ZWQgcG93ZXIgc3RhdGUgcmV0dXJucyBpbmZvIGZvciBlbmNvZGVyIGFuZCBtb25pdG9yLCByZWx5IG9uCiAgIGxhc3QgU2V0VGFyZ2V0SW5wdXQgYW5kIFNldFRhcmdldE91dHB1dCBjYWxscyAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQT1JURURfUE9XRVJfU1RBVEVTCQkweDJhCi8qIEdldCBwb3dlciBzdGF0ZSByZXR1cm5zIGluZm8gZm9yIGVuY29kZXIgYW5kIG1vbml0b3IsIHJlbHkgb24gbGFzdAogICBTZXRUYXJnZXRJbnB1dCBhbmQgU2V0VGFyZ2V0T3V0cHV0IGNhbGxzICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1BPV0VSX1NUQVRFCQkJMHgyYgojZGVmaW5lIFNEVk9fQ01EX0dFVF9FTkNPREVSX1BPV0VSX1NUQVRFCQkweDJiCiNkZWZpbmUgU0RWT19DTURfU0VUX0VOQ09ERVJfUE9XRVJfU1RBVEUJCTB4MmMKIyBkZWZpbmUgU0RWT19FTkNPREVSX1NUQVRFX09OCQkJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfU1RBTkRCWQkJCQkoMSA8PCAxKQojIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfU1VTUEVORAkJCQkoMSA8PCAyKQojIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfT0ZGCQkJCQkoMSA8PCAzKQojIGRlZmluZSBTRFZPX01PTklUT1JfU1RBVEVfT04JCQkJCSgxIDw8IDQpCiMgZGVmaW5lIFNEVk9fTU9OSVRPUl9TVEFURV9TVEFOREJZCQkJCSgxIDw8IDUpCiMgZGVmaW5lIFNEVk9fTU9OSVRPUl9TVEFURV9TVVNQRU5ECQkJCSgxIDw8IDYpCiMgZGVmaW5lIFNEVk9fTU9OSVRPUl9TVEFURV9PRkYJCQkJCSgxIDw8IDcpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfUEFORUxfUE9XRVJfU0VRVUVOQ0lORwkJMHgyZAojZGVmaW5lIFNEVk9fQ01EX0dFVF9QQU5FTF9QT1dFUl9TRVFVRU5DSU5HCQkweDJlCiNkZWZpbmUgU0RWT19DTURfU0VUX1BBTkVMX1BPV0VSX1NFUVVFTkNJTkcJCTB4MmYKLyoqCiAqIFRoZSBwYW5lbCBwb3dlciBzZXF1ZW5jaW5nIHBhcmFtZXRlcnMgYXJlIGluIHVuaXRzIG9mIG1pbGxpc2Vjb25kcy4KICogVGhlIGhpZ2ggZmllbGRzIGFyZSBiaXRzIDg6OSBvZiB0aGUgMTAtYml0IHZhbHVlcy4KICovCnN0cnVjdCBzZHZvX3BhbmVsX3Bvd2VyX3NlcXVlbmNpbmcgewoJdTggdDA7Cgl1OCB0MTsKCXU4IHQyOwoJdTggdDM7Cgl1OCB0NDsKCgl1bnNpZ25lZCBpbnQgdDBfaGlnaDoyOwoJdW5zaWduZWQgaW50IHQxX2hpZ2g6MjsKCXVuc2lnbmVkIGludCB0Ml9oaWdoOjI7Cgl1bnNpZ25lZCBpbnQgdDNfaGlnaDoyOwoKCXVuc2lnbmVkIGludCB0NF9oaWdoOjI7Cgl1bnNpZ25lZCBpbnQgcGFkOjY7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfQkFDS0xJR0hUX0xFVkVMCQkweDMwCnN0cnVjdCBzZHZvX21heF9iYWNrbGlnaHRfcmVwbHkgewoJdTggbWF4X3ZhbHVlOwoJdTggZGVmYXVsdF92YWx1ZTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCiNkZWZpbmUgU0RWT19DTURfR0VUX0JBQ0tMSUdIVF9MRVZFTAkJCTB4MzEKI2RlZmluZSBTRFZPX0NNRF9TRVRfQkFDS0xJR0hUX0xFVkVMCQkJMHgzMgoKI2RlZmluZSBTRFZPX0NNRF9HRVRfQU1CSUVOVF9MSUdIVAkJCTB4MzMKc3RydWN0IHNkdm9fZ2V0X2FtYmllbnRfbGlnaHRfcmVwbHkgewoJdTE2IHRyaXBfbG93OwoJdTE2IHRyaXBfaGlnaDsKCXUxNiB2YWx1ZTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKI2RlZmluZSBTRFZPX0NNRF9TRVRfQU1CSUVOVF9MSUdIVAkJCTB4MzQKc3RydWN0IHNkdm9fc2V0X2FtYmllbnRfbGlnaHRfcmVwbHkgewoJdTE2IHRyaXBfbG93OwoJdTE2IHRyaXBfaGlnaDsKCXVuc2lnbmVkIGludCBlbmFibGU6MTsKCXVuc2lnbmVkIGludCBwYWQ6NzsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIFNldCBkaXNwbGF5IHBvd2VyIHN0YXRlICovCiNkZWZpbmUgU0RWT19DTURfU0VUX0RJU1BMQVlfUE9XRVJfU1RBVEUJCTB4N2QKIyBkZWZpbmUgU0RWT19ESVNQTEFZX1NUQVRFX09OCQkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fRElTUExBWV9TVEFURV9TVEFOREJZCQkJKDEgPDwgMSkKIyBkZWZpbmUgU0RWT19ESVNQTEFZX1NUQVRFX1NVU1BFTkQJCQkoMSA8PCAyKQojIGRlZmluZSBTRFZPX0RJU1BMQVlfU1RBVEVfT0ZGCQkJCSgxIDw8IDMpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQT1JURURfRU5IQU5DRU1FTlRTCQkweDg0CnN0cnVjdCBpbnRlbF9zZHZvX2VuaGFuY2VtZW50c19yZXBseSB7Cgl1bnNpZ25lZCBpbnQgZmxpY2tlcl9maWx0ZXI6MTsKCXVuc2lnbmVkIGludCBmbGlja2VyX2ZpbHRlcl9hZGFwdGl2ZToxOwoJdW5zaWduZWQgaW50IGZsaWNrZXJfZmlsdGVyXzJkOjE7Cgl1bnNpZ25lZCBpbnQgc2F0dXJhdGlvbjoxOwoJdW5zaWduZWQgaW50IGh1ZToxOwoJdW5zaWduZWQgaW50IGJyaWdodG5lc3M6MTsKCXVuc2lnbmVkIGludCBjb250cmFzdDoxOwoJdW5zaWduZWQgaW50IG92ZXJzY2FuX2g6MTsKCgl1bnNpZ25lZCBpbnQgb3ZlcnNjYW5fdjoxOwoJdW5zaWduZWQgaW50IGhwb3M6MTsKCXVuc2lnbmVkIGludCB2cG9zOjE7Cgl1bnNpZ25lZCBpbnQgc2hhcnBuZXNzOjE7Cgl1bnNpZ25lZCBpbnQgZG90X2NyYXdsOjE7Cgl1bnNpZ25lZCBpbnQgZGl0aGVyOjE7Cgl1bnNpZ25lZCBpbnQgdHZfY2hyb21hX2ZpbHRlcjoxOwoJdW5zaWduZWQgaW50IHR2X2x1bWFfZmlsdGVyOjE7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgovKiBQaWN0dXJlIGVuaGFuY2VtZW50IGxpbWl0cyBiZWxvdyBhcmUgZGVwZW5kZW50IG9uIHRoZSBjdXJyZW50IFRWIGZvcm1hdCwKICogYW5kIHRodXMgbmVlZCB0byBiZSBxdWVyaWVkIGFuZCBzZXQgYWZ0ZXIgaXQuCiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfRkxJQ0tFUl9GSUxURVIJCQkweDRkCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9GTElDS0VSX0ZJTFRFUl9BREFQVElWRQkweDdiCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9GTElDS0VSX0ZJTFRFUl8yRAkJMHg1MgojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfU0FUVVJBVElPTgkJCTB4NTUKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0hVRQkJCQkweDU4CiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9CUklHSFRORVNTCQkJMHg1YgojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfQ09OVFJBU1QJCQkweDVlCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9PVkVSU0NBTl9ICQkJMHg2MQojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfT1ZFUlNDQU5fVgkJCTB4NjQKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0hQT1MJCQkJMHg2NwojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfVlBPUwkJCQkweDZhCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9TSEFSUE5FU1MJCQkweDZkCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9UVl9DSFJPTUFfRklMVEVSCQkweDc0CiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9UVl9MVU1BX0ZJTFRFUgkJCTB4NzcKc3RydWN0IGludGVsX3Nkdm9fZW5oYW5jZW1lbnRfbGltaXRzX3JlcGx5IHsKCXUxNiBtYXhfdmFsdWU7Cgl1MTYgZGVmYXVsdF92YWx1ZTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCiNkZWZpbmUgU0RWT19DTURfR0VUX0xWRFNfUEFORUxfSU5GT1JNQVRJT04JCTB4N2YKI2RlZmluZSBTRFZPX0NNRF9TRVRfTFZEU19QQU5FTF9JTkZPUk1BVElPTgkJMHg4MAojIGRlZmluZSBTRFZPX0xWRFNfQ09MT1JfREVQVEhfMTgJCQkoMCA8PCAwKQojIGRlZmluZSBTRFZPX0xWRFNfQ09MT1JfREVQVEhfMjQJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0xWRFNfQ09OTkVDVE9SX1NQV0cJCQkoMCA8PCAyKQojIGRlZmluZSBTRFZPX0xWRFNfQ09OTkVDVE9SX09QRU5MREkJCQkoMSA8PCAyKQojIGRlZmluZSBTRFZPX0xWRFNfU0lOR0xFX0NIQU5ORUwJCQkoMCA8PCA0KQojIGRlZmluZSBTRFZPX0xWRFNfRFVBTF9DSEFOTkVMCQkJCSgxIDw8IDQpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9GTElDS0VSX0ZJTFRFUgkJCTB4NGUKI2RlZmluZSBTRFZPX0NNRF9TRVRfRkxJQ0tFUl9GSUxURVIJCQkweDRmCiNkZWZpbmUgU0RWT19DTURfR0VUX0ZMSUNLRVJfRklMVEVSX0FEQVBUSVZFCQkweDUwCiNkZWZpbmUgU0RWT19DTURfU0VUX0ZMSUNLRVJfRklMVEVSX0FEQVBUSVZFCQkweDUxCiNkZWZpbmUgU0RWT19DTURfR0VUX0ZMSUNLRVJfRklMVEVSXzJECQkJMHg1MwojZGVmaW5lIFNEVk9fQ01EX1NFVF9GTElDS0VSX0ZJTFRFUl8yRAkJCTB4NTQKI2RlZmluZSBTRFZPX0NNRF9HRVRfU0FUVVJBVElPTgkJCQkweDU2CiNkZWZpbmUgU0RWT19DTURfU0VUX1NBVFVSQVRJT04JCQkJMHg1NwojZGVmaW5lIFNEVk9fQ01EX0dFVF9IVUUJCQkJMHg1OQojZGVmaW5lIFNEVk9fQ01EX1NFVF9IVUUJCQkJMHg1YQojZGVmaW5lIFNEVk9fQ01EX0dFVF9CUklHSFRORVNTCQkJCTB4NWMKI2RlZmluZSBTRFZPX0NNRF9TRVRfQlJJR0hUTkVTUwkJCQkweDVkCiNkZWZpbmUgU0RWT19DTURfR0VUX0NPTlRSQVNUCQkJCTB4NWYKI2RlZmluZSBTRFZPX0NNRF9TRVRfQ09OVFJBU1QJCQkJMHg2MAojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVkVSU0NBTl9ICQkJCTB4NjIKI2RlZmluZSBTRFZPX0NNRF9TRVRfT1ZFUlNDQU5fSAkJCQkweDYzCiNkZWZpbmUgU0RWT19DTURfR0VUX09WRVJTQ0FOX1YJCQkJMHg2NQojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVkVSU0NBTl9WCQkJCTB4NjYKI2RlZmluZSBTRFZPX0NNRF9HRVRfSFBPUwkJCQkweDY4CiNkZWZpbmUgU0RWT19DTURfU0VUX0hQT1MJCQkJMHg2OQojZGVmaW5lIFNEVk9fQ01EX0dFVF9WUE9TCQkJCTB4NmIKI2RlZmluZSBTRFZPX0NNRF9TRVRfVlBPUwkJCQkweDZjCiNkZWZpbmUgU0RWT19DTURfR0VUX1NIQVJQTkVTUwkJCQkweDZlCiNkZWZpbmUgU0RWT19DTURfU0VUX1NIQVJQTkVTUwkJCQkweDZmCiNkZWZpbmUgU0RWT19DTURfR0VUX1RWX0NIUk9NQV9GSUxURVIJCQkweDc1CiNkZWZpbmUgU0RWT19DTURfU0VUX1RWX0NIUk9NQV9GSUxURVIJCQkweDc2CiNkZWZpbmUgU0RWT19DTURfR0VUX1RWX0xVTUFfRklMVEVSCQkJMHg3OAojZGVmaW5lIFNEVk9fQ01EX1NFVF9UVl9MVU1BX0ZJTFRFUgkJCTB4NzkKc3RydWN0IGludGVsX3Nkdm9fZW5oYW5jZW1lbnRzX2FyZyB7Cgl1MTYgdmFsdWU7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgojZGVmaW5lIFNEVk9fQ01EX0dFVF9ET1RfQ1JBV0wJCQkJMHg3MAojZGVmaW5lIFNEVk9fQ01EX1NFVF9ET1RfQ1JBV0wJCQkJMHg3MQojIGRlZmluZSBTRFZPX0RPVF9DUkFXTF9PTgkJCQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19ET1RfQ1JBV0xfREVGQVVMVF9PTgkJCQkoMSA8PCAxKQoKI2RlZmluZSBTRFZPX0NNRF9HRVRfRElUSEVSCQkJCTB4NzIKI2RlZmluZSBTRFZPX0NNRF9TRVRfRElUSEVSCQkJCTB4NzMKIyBkZWZpbmUgU0RWT19ESVRIRVJfT04JCQkJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0RJVEhFUl9ERUZBVUxUX09OCQkJCQkoMSA8PCAxKQoKI2RlZmluZSBTRFZPX0NNRF9TRVRfQ09OVFJPTF9CVVNfU1dJVENICQkJMHg3YQojIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX1BST00JCQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19DT05UUk9MX0JVU19EREMxCQkJCSgxIDw8IDEpCiMgZGVmaW5lIFNEVk9fQ09OVFJPTF9CVVNfRERDMgkJCQkoMSA8PCAyKQojIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzMJCQkJKDEgPDwgMykKCi8qIEhETUkgb3AgY29kZXMgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfU1VQUF9FTkNPREUJMHg5ZAojZGVmaW5lIFNEVk9fQ01EX0dFVF9FTkNPREUJCTB4OWUKI2RlZmluZSBTRFZPX0NNRF9TRVRfRU5DT0RFCQkweDlmCiAgI2RlZmluZSBTRFZPX0VOQ09ERV9EVkkJMHgwCiAgI2RlZmluZSBTRFZPX0VOQ09ERV9IRE1JCTB4MQojZGVmaW5lIFNEVk9fQ01EX1NFVF9QSVhFTF9SRVBMSQkweDhiCiNkZWZpbmUgU0RWT19DTURfR0VUX1BJWEVMX1JFUExJCTB4OGMKI2RlZmluZSBTRFZPX0NNRF9HRVRfQ09MT1JJTUVUUllfQ0FQCTB4OGQKI2RlZmluZSBTRFZPX0NNRF9TRVRfQ09MT1JJTUVUUlkJMHg4ZQogICNkZWZpbmUgU0RWT19DT0xPUklNRVRSWV9SR0IyNTYgICAweDAKICAjZGVmaW5lIFNEVk9fQ09MT1JJTUVUUllfUkdCMjIwICAgMHgxCiAgI2RlZmluZSBTRFZPX0NPTE9SSU1FVFJZX1lDckNiNDIyIDB4MwogICNkZWZpbmUgU0RWT19DT0xPUklNRVRSWV9ZQ3JDYjQ0NCAweDQKI2RlZmluZSBTRFZPX0NNRF9HRVRfQ09MT1JJTUVUUlkJMHg4ZgojZGVmaW5lIFNEVk9fQ01EX0dFVF9BVURJT19FTkNSWVBUX1BSRUZFUiAweDkwCiNkZWZpbmUgU0RWT19DTURfU0VUX0FVRElPX1NUQVQJCTB4OTEKI2RlZmluZSBTRFZPX0NNRF9HRVRfQVVESU9fU1RBVAkJMHg5MgojZGVmaW5lIFNEVk9fQ01EX1NFVF9IQlVGX0lOREVYCQkweDkzCiNkZWZpbmUgU0RWT19DTURfR0VUX0hCVUZfSU5ERVgJCTB4OTQKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9JTkZPCQkweDk1CiNkZWZpbmUgU0RWT19DTURfU0VUX0hCVUZfQVZfU1BMSVQJMHg5NgojZGVmaW5lIFNEVk9fQ01EX0dFVF9IQlVGX0FWX1NQTElUCTB4OTcKI2RlZmluZSBTRFZPX0NNRF9TRVRfSEJVRl9EQVRBCQkweDk4CiNkZWZpbmUgU0RWT19DTURfR0VUX0hCVUZfREFUQQkJMHg5OQojZGVmaW5lIFNEVk9fQ01EX1NFVF9IQlVGX1RYUkFURQkweDlhCiNkZWZpbmUgU0RWT19DTURfR0VUX0hCVUZfVFhSQVRFCTB4OWIKICAjZGVmaW5lIFNEVk9fSEJVRl9UWF9ESVNBQkxFRAkoMCA8PCA2KQogICNkZWZpbmUgU0RWT19IQlVGX1RYX09OQ0UJKDIgPDwgNikKICAjZGVmaW5lIFNEVk9fSEJVRl9UWF9WU1lOQwkoMyA8PCA2KQojZGVmaW5lIFNEVk9fQ01EX0dFVF9BVURJT19UWF9JTkZPCTB4OWMKI2RlZmluZSBTRFZPX05FRURfVE9fU1RBTEwgICgxIDw8IDcpCgpzdHJ1Y3QgaW50ZWxfc2R2b19lbmNvZGUgewoJdTggZHZpX3JldjsKCXU4IGhkbWlfcmV2Owp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsK