ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXNTdHJpbmcuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXNTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjE3N2ExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Bc1N0cmluZy5oCkBAIC0wLDAgKzEsOTQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKiBOT1RFOiBUaGlzIGZpbGUgY29udGFpbnMgc2V2ZXJhbCBzZWN0aW9ucyBmb3IgaW5kaXZpZHVhbCBPTVggaW5jbHVkZSBmaWxlcy4KKyAgIEVhY2ggc2VjdGlvbiBoYXMgaXRzIG93biBpbmNsdWRlIGd1YXJkLiAgVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBBRlRFUgorICAgdGhlIE9NWCBpbmNsdWRlIGZpbGVzLiAqLworCisjaWZkZWYgT01YX0F1ZGlvX2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX0F1ZGlvLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfQVVESU9fSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9BVURJT19ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0NPRElOR1RZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdVbnVzZWQ6ICAgICByZXR1cm4gIlVudXNlZCI7ICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0F1dG9EZXRlY3Q6IHJldHVybiAiQXV0b0RldGVjdCI7ICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUENNOiAgICAgICAgcmV0dXJuICJQQ00iOworICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdBRFBDTTogICAgICByZXR1cm4gIkFEUENNIjsgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0FNUjogICAgICAgIHJldHVybiAiQU1SIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nR1NNRlI6ICAgICAgcmV0dXJuICJHU01GUiI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0dTTUVGUjogICAgIHJldHVybiAiR1NNRUZSIjsgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nR1NNSFI6ICAgICAgcmV0dXJuICJHU01IUiI7ICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdQRENGUjogICAgICByZXR1cm4gIlBEQ0ZSIjsgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ1BEQ0VGUjogICAgIHJldHVybiAiUERDRUZSIjsgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUERDSFI6ICAgICAgcmV0dXJuICJQRENIUiI7ICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdURE1BRlI6ICAgICByZXR1cm4gIlRETUFGUiI7ICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ1RETUFFRlI6ICAgIHJldHVybiAiVERNQUVGUiI7ICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUUNFTFA4OiAgICAgcmV0dXJuICJRQ0VMUDgiOyAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdRQ0VMUDEzOiAgICByZXR1cm4gIlFDRUxQMTMiOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0VWUkM6ICAgICAgIHJldHVybiAiRVZSQyI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nU01WOiAgICAgICAgcmV0dXJuICJTTVYiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdHNzExOiAgICAgICByZXR1cm4gIkc3MTEiOworICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdHNzIzOiAgICAgICByZXR1cm4gIkc3MjMiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0c3MjY6ICAgICAgIHJldHVybiAiRzcyNiI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nRzcyOTogICAgICAgcmV0dXJuICJHNzI5IjsgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdBQUM6ICAgICAgICByZXR1cm4gIkFBQyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ01QMzogICAgICAgIHJldHVybiAiTVAzIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nU0JDOiAgICAgICAgcmV0dXJuICJTQkMiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdWT1JCSVM6ICAgICByZXR1cm4gIlZPUkJJUyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ1dNQTogICAgICAgIHJldHVybiAiV01BIjsgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUkE6ICAgICAgICAgcmV0dXJuICJSQSI7ICAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdNSURJOiAgICAgICByZXR1cm4gIk1JREkiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0ZMQUM6ICAgICAgIHJldHVybiAiRkxBQyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19QQ01NT0RFVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0FVRElPX1BDTU1vZGVMaW5lYXI6IHJldHVybiAiTGluZWFyIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fUENNTW9kZUFMYXc6ICAgcmV0dXJuICJBTGF3IjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fUENNTW9kZU1VTGF3OiAgcmV0dXJuICJNVUxhdyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19DSEFOTkVMVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxOb25lOiByZXR1cm4gIk5vbmUiOyAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxMRjogICByZXR1cm4gIkxGIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbFJGOiAgIHJldHVybiAiUkYiOworICAgICAgICBjYXNlIE9NWF9BVURJT19DaGFubmVsQ0Y6ICAgcmV0dXJuICJDRiI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxMUzogICByZXR1cm4gIkxTIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbFJTOiAgIHJldHVybiAiUlMiOworICAgICAgICBjYXNlIE9NWF9BVURJT19DaGFubmVsTEZFOiAgcmV0dXJuICJMRkUiOworICAgICAgICBjYXNlIE9NWF9BVURJT19DaGFubmVsQ1M6ICAgcmV0dXJuICJDUyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxMUjogICByZXR1cm4gIkxSIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbFJSOiAgIHJldHVybiAiUlIiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxNb2RlU3RlcmVvOiAgICAgIHJldHVybiAiU3RlcmVvIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbE1vZGVKb2ludFN0ZXJlbzogcmV0dXJuICJKb2ludFN0ZXJlbyI7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxNb2RlRHVhbDogICAgICAgIHJldHVybiAiRHVhbCI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxNb2RlTW9ubzogICAgICAgIHJldHVybiAiTW9ubyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19BQUNTVFJFQU1GT1JNQVRUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVAyQURUUzogcmV0dXJuICJNUDJBRFRTIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0QURUUzogcmV0dXJuICJNUDRBRFRTIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0TE9BUzogcmV0dXJuICJNUDRMT0FTIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0TEFUTTogcmV0dXJuICJNUDRMQVRNIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0QURJRjogICAgcmV0dXJuICJBRElGIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0RkY6ICAgcmV0dXJuICJNUDRGRiI7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFJBVzogICAgIHJldHVybiAiUkFXIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0Q29uZm9ybWFuY2U6IHJldHVybiAiQ29uZm9ybWFuY2UiOworLy8gICAgICBjYXNlIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElGMTogICAgICAgICByZXR1cm4gIklGMSI7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SUYyOiAgICAgICAgIHJldHVybiAiSUYyIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRGU0Y6ICAgICAgICAgcmV0dXJuICJGU0YiOworLy8gICAgICBjYXNlIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdFJUUFBheWxvYWQ6ICByZXR1cm4gIlJUUFBheWxvYWQiOworLy8gICAgICBjYXNlIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElUVTogICAgICAgICByZXR1cm4gIklUVSI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19BTVJCQU5ETU9ERVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVVudXNlZDogcmV0dXJuICJVbnVzZWQiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMDogICAgcmV0dXJuICJOQjAiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMTogICAgcmV0dXJuICJOQjEiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMjogICAgcmV0dXJuICJOQjIiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMzogICAgcmV0dXJuICJOQjMiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNDogICAgcmV0dXJuICJOQjQiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNTogICAgcmV0dXJuICJOQjUiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNjogICAgcmV0dXJuICJOQjYiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNzogICAgcmV0dXJuICJOQjciOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMDogICAgcmV0dXJuICJXQjAiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMTogICAgcmV0dXJuICJXQjEiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMjogICAgcmV0dXJuICJXQjIiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMzogICAgcmV0dXJuICJXQjMiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNDogICAgcmV0dXJuICJXQjQiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNTogICAgcmV0dXJuICJXQjUiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNjogICAgcmV0dXJuICJXQjYiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNzogICAgcmV0dXJuICJXQjciOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCODogICAgcmV0dXJuICJXQjgiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0FNUkRUWE1PREVUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9mZjogICAgcmV0dXJuICJNb2RlT2ZmIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9uVkFEMTogcmV0dXJuICJNb2RlT25WQUQxIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9uVkFEMjogcmV0dXJuICJNb2RlT25WQUQyIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9uQXV0bzogcmV0dXJuICJNb2RlT25BdXRvIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYYXNFRlI6ICAgICAgcmV0dXJuICJhc0VGUiI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCisjZW5kaWYgLy8gQVNfU1RSSU5HX0ZPUl9PTVhfQVVESU9fSAorCisjZW5kaWYgLy8gT01YX0F1ZGlvX2gKKworI2lmZGVmIE9NWF9BdWRpb0V4dF9oCisvKiBhc1N0cmluZyBkZWZpbml0aW9ucyBpZiBtZWRpYS9vcGVubWF4L09NWF9BdWRpb0V4dC5oIHdhcyBpbmNsdWRlZCAqLworCisjaWZuZGVmIEFTX1NUUklOR19GT1JfT01YX0FVRElPRVhUX0gKKyNkZWZpbmUgQVNfU1RSSU5HX0ZPUl9PTVhfQVVESU9FWFRfSAorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19DT0RJTkdFWFRUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nQW5kcm9pZEFDMzogIHJldHVybiAiQW5kcm9pZEFDMyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0FuZHJvaWRPUFVTOiByZXR1cm4gIkFuZHJvaWRPUFVTIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZygoT01YX0FVRElPX0NPRElOR1RZUEUpaSwgZGVmKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9BVURJT0VYVF9ICisKKyNlbmRpZiAvLyBPTVhfQXVkaW9FeHRfaAorCisjaWZkZWYgT01YX0NvbXBvbmVudF9oCisvKiBhc1N0cmluZyBkZWZpbml0aW9ucyBpZiBtZWRpYS9vcGVubWF4L09NWF9Db21wb25lbnQuaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9DT01QT05FTlRfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9DT01QT05FTlRfSAorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9QT1JURE9NQUlOVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1BvcnREb21haW5BdWRpbzogcmV0dXJuICJBdWRpbyI7CisgICAgICAgIGNhc2UgT01YX1BvcnREb21haW5WaWRlbzogcmV0dXJuICJWaWRlbyI7CisgICAgICAgIGNhc2UgT01YX1BvcnREb21haW5JbWFnZTogcmV0dXJuICJJbWFnZSI7CisvLyAgICAgIGNhc2UgT01YX1BvcnREb21haW5PdGhlcjogcmV0dXJuICJPdGhlciI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9DT01QT05FTlRfSAorCisjZW5kaWYgLy8gT01YX0NvbXBvbmVudF9oCisKKyNpZmRlZiBPTVhfQ29yZV9oCisvKiBhc1N0cmluZyBkZWZpbml0aW9ucyBpZiBtZWRpYS9vcGVubWF4L09NWF9Db3JlLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfQ09SRV9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX0NPUkVfSAorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9DT01NQU5EVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRTdGF0ZVNldDogICAgcmV0dXJuICJTdGF0ZVNldCI7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRGbHVzaDogICAgICAgcmV0dXJuICJGbHVzaCI7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRQb3J0RGlzYWJsZTogcmV0dXJuICJQb3J0RGlzYWJsZSI7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRQb3J0RW5hYmxlOiAgcmV0dXJuICJQb3J0RW5hYmxlIjsKKy8vICAgICAgY2FzZSBPTVhfQ29tbWFuZE1hcmtCdWZmZXI6ICByZXR1cm4gIk1hcmtCdWZmZXIiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9TVEFURVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9TdGF0ZUludmFsaWQ6ICAgICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAgICAgIGNhc2UgT01YX1N0YXRlTG9hZGVkOiAgICAgICAgICAgcmV0dXJuICJMb2FkZWQiOworICAgICAgICBjYXNlIE9NWF9TdGF0ZUlkbGU6ICAgICAgICAgICAgIHJldHVybiAiSWRsZSI7CisgICAgICAgIGNhc2UgT01YX1N0YXRlRXhlY3V0aW5nOiAgICAgICAgcmV0dXJuICJFeGVjdXRpbmciOworLy8gICAgICBjYXNlIE9NWF9TdGF0ZVBhdXNlOiAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOworLy8gICAgICBjYXNlIE9NWF9TdGF0ZVdhaXRGb3JSZXNvdXJjZXM6IHJldHVybiAiV2FpdEZvclJlc291cmNlcyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0VSUk9SVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0Vycm9yTm9uZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJOb25lIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JJbnN1ZmZpY2llbnRSZXNvdXJjZXM6ICAgICAgICAgICAgICByZXR1cm4gIkluc3VmZmljaWVudFJlc291cmNlcyI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yVW5kZWZpbmVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJVbmRlZmluZWQiOworICAgICAgICBjYXNlIE9NWF9FcnJvckludmFsaWRDb21wb25lbnROYW1lOiAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZENvbXBvbmVudE5hbWUiOworICAgICAgICBjYXNlIE9NWF9FcnJvckNvbXBvbmVudE5vdEZvdW5kOiAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29tcG9uZW50Tm90Rm91bmQiOworICAgICAgICBjYXNlIE9NWF9FcnJvckludmFsaWRDb21wb25lbnQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZENvbXBvbmVudCI7ICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckJhZFBhcmFtZXRlcjogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQmFkUGFyYW1ldGVyIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JOb3RJbXBsZW1lbnRlZDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5vdEltcGxlbWVudGVkIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JVbmRlcmZsb3c6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlVuZGVyZmxvdyI7ICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JPdmVyZmxvdzogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk92ZXJmbG93IjsgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JIYXJkd2FyZTogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkhhcmR3YXJlIjsgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JJbnZhbGlkU3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkludmFsaWRTdGF0ZSI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yU3RyZWFtQ29ycnVwdDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJTdHJlYW1Db3JydXB0IjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JQb3J0c05vdENvbXBhdGlibGU6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBvcnRzTm90Q29tcGF0aWJsZSI7ICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JSZXNvdXJjZXNMb3N0OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlJlc291cmNlc0xvc3QiOworICAgICAgICBjYXNlIE9NWF9FcnJvck5vTW9yZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiTm9Nb3JlIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JWZXJzaW9uTWlzbWF0Y2g6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlZlcnNpb25NaXNtYXRjaCI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JOb3RSZWFkeTogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5vdFJlYWR5IjsgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JUaW1lb3V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlRpbWVvdXQiOyAgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JTYW1lU3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlNhbWVTdGF0ZSI7ICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JSZXNvdXJjZXNQcmVlbXB0ZWQ6ICAgICAgICAgICAgICAgICByZXR1cm4gIlJlc291cmNlc1ByZWVtcHRlZCI7ICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JQb3J0VW5yZXNwb25zaXZlRHVyaW5nQWxsb2NhdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiUG9ydFVucmVzcG9uc2l2ZUR1cmluZ0FsbG9jYXRpb24iOyAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JQb3J0VW5yZXNwb25zaXZlRHVyaW5nRGVhbGxvY2F0aW9uOgorICAgICAgICAgICAgcmV0dXJuICJQb3J0VW5yZXNwb25zaXZlRHVyaW5nRGVhbGxvY2F0aW9uIjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdTdG9wOgorICAgICAgICAgICAgcmV0dXJuICJQb3J0VW5yZXNwb25zaXZlRHVyaW5nU3RvcCI7ICAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckluY29ycmVjdFN0YXRlVHJhbnNpdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiSW5jb3JyZWN0U3RhdGVUcmFuc2l0aW9uIjsgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JJbmNvcnJlY3RTdGF0ZU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiSW5jb3JyZWN0U3RhdGVPcGVyYXRpb24iOyAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JVbnN1cHBvcnRlZFNldHRpbmc6ICAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3VwcG9ydGVkU2V0dGluZyI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yVW5zdXBwb3J0ZWRJbmRleDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJVbnN1cHBvcnRlZEluZGV4IjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JCYWRQb3J0SW5kZXg6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkJhZFBvcnRJbmRleCI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yUG9ydFVucG9wdWxhdGVkOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQb3J0VW5wb3B1bGF0ZWQiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yQ29tcG9uZW50U3VzcGVuZGVkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJDb21wb25lbnRTdXNwZW5kZWQiOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yRHluYW1pY1Jlc291cmNlc1VuYXZhaWxhYmxlOgorICAgICAgICAgICAgcmV0dXJuICJEeW5hbWljUmVzb3VyY2VzVW5hdmFpbGFibGUiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvck1iRXJyb3JzSW5GcmFtZTogICAgICAgICAgICAgICAgICAgIHJldHVybiAiTWJFcnJvcnNJbkZyYW1lIjsgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckZvcm1hdE5vdERldGVjdGVkOiAgICAgICAgICAgICAgICAgIHJldHVybiAiRm9ybWF0Tm90RGV0ZWN0ZWQiOyAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckNvbnRlbnRQaXBlT3BlbkZhaWxlZDogICAgICAgICAgICAgIHJldHVybiAiQ29udGVudFBpcGVPcGVuRmFpbGVkIjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckNvbnRlbnRQaXBlQ3JlYXRpb25GYWlsZWQ6CisgICAgICAgICAgICByZXR1cm4gIkNvbnRlbnRQaXBlQ3JlYXRpb25GYWlsZWQiOyAgICAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yU2VwZXJhdGVUYWJsZXNVc2VkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJTZXBlcmF0ZVRhYmxlc1VzZWQiOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yVHVubmVsaW5nVW5zdXBwb3J0ZWQ6ICAgICAgICAgICAgICAgcmV0dXJuICJUdW5uZWxpbmdVbnN1cHBvcnRlZCI7ICAgLy8gdW51c2VkCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0VWRU5UVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0V2ZW50Q21kQ29tcGxldGU6ICAgICAgICAgICAgICAgcmV0dXJuICJDbWRDb21wbGV0ZSI7CisgICAgICAgIGNhc2UgT01YX0V2ZW50RXJyb3I6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJFcnJvciI7CisvLyAgICAgIGNhc2UgT01YX0V2ZW50TWFyazogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJNYXJrIjsKKyAgICAgICAgY2FzZSBPTVhfRXZlbnRQb3J0U2V0dGluZ3NDaGFuZ2VkOiAgICAgICByZXR1cm4gIlBvcnRTZXR0aW5nc0NoYW5nZWQiOworICAgICAgICBjYXNlIE9NWF9FdmVudEJ1ZmZlckZsYWc6ICAgICAgICAgICAgICAgIHJldHVybiAiQnVmZmVyRmxhZyI7CisvLyAgICAgIGNhc2UgT01YX0V2ZW50UmVzb3VyY2VzQWNxdWlyZWQ6ICAgICAgICAgcmV0dXJuICJSZXNvdXJjZXNBY3F1aXJlZCI7CisvLyAgICAgIGNhc2UgT01YX0V2ZW50Q29tcG9uZW50UmVzdW1lZDogICAgICAgICAgcmV0dXJuICJDb21wb25lbnRSZXN1bWVkIjsKKy8vICAgICAgY2FzZSBPTVhfRXZlbnREeW5hbWljUmVzb3VyY2VzQXZhaWxhYmxlOiByZXR1cm4gIkR5bmFtaWNSZXNvdXJjZXNBdmFpbGFibGUiOworLy8gICAgICBjYXNlIE9NWF9FdmVudFBvcnRGb3JtYXREZXRlY3RlZDogICAgICAgIHJldHVybiAiUG9ydEZvcm1hdERldGVjdGVkIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX0NPUkVfSAorCisjZW5kaWYgLy8gT01YX0NvcmVfaAorCisjaWZkZWYgT01YX0ltYWdlX2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX0ltYWdlLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfSU1BR0VfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9JTUFHRV9ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0lNQUdFX0NPRElOR1RZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQ6ICAgICByZXR1cm4gIlVudXNlZCI7CisgICAgICAgIGNhc2UgT01YX0lNQUdFX0NvZGluZ0F1dG9EZXRlY3Q6IHJldHVybiAiQXV0b0RldGVjdCI7ICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nSlBFRzogICAgICAgcmV0dXJuICJKUEVHIjsKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nSlBFRzJLOiAgICAgcmV0dXJuICJKUEVHMksiOyAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9JTUFHRV9Db2RpbmdFWElGOiAgICAgICByZXR1cm4gIkVYSUYiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0lNQUdFX0NvZGluZ1RJRkY6ICAgICAgIHJldHVybiAiVElGRiI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nR0lGOiAgICAgICAgcmV0dXJuICJHSUYiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9JTUFHRV9Db2RpbmdQTkc6ICAgICAgICByZXR1cm4gIlBORyI7ICAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0lNQUdFX0NvZGluZ0xaVzogICAgICAgIHJldHVybiAiTFpXIjsgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nQk1QOiAgICAgICAgcmV0dXJuICJCTVAiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX0lNQUdFX0gKKworI2VuZGlmIC8vIE9NWF9JbWFnZV9oCisKKyNpZmRlZiBPTVhfSW5kZXhfaAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfSW5kZXguaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9JTkRFWF9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX0lOREVYX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfSU5ERVhUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVByaW9yaXR5TWdtdDogICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1Qcmlvcml0eU1nbXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9Jbml0OiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvSW5pdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1JbWFnZUluaXQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtSW1hZ2VJbml0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvSW5pdDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0luaXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtT3RoZXJJbml0OiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbU90aGVySW5pdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1OdW1BdmFpbGFibGVTdHJlYW1zOiAgICAgICAgICAgICByZXR1cm4gIlBhcmFtTnVtQXZhaWxhYmxlU3RyZWFtcyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BY3RpdmVTdHJlYW06ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQWN0aXZlU3RyZWFtIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVN1c3BlbnNpb25Qb2xpY3k6ICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1TdXNwZW5zaW9uUG9saWN5IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUNvbXBvbmVudFN1c3BlbmRlZDogICAgICAgICAgICAgIHJldHVybiAiUGFyYW1Db21wb25lbnRTdXNwZW5kZWQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NhcHR1cmluZzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDYXB0dXJpbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NhcHR1cmVNb2RlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDYXB0dXJlTW9kZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4QXV0b1BhdXNlQWZ0ZXJDYXB0dXJlOiAgICAgICAgICAgICAgICByZXR1cm4gIkF1dG9QYXVzZUFmdGVyQ2FwdHVyZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db250ZW50VVJJOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29udGVudFVSSSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1DdXN0b21Db250ZW50UGlwZTogICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ3VzdG9tQ29udGVudFBpcGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtRGlzYWJsZVJlc291cmNlQ29uY2VhbG1lbnQ6CisvLyAgICAgICAgICByZXR1cm4gIlBhcmFtRGlzYWJsZVJlc291cmNlQ29uY2VhbG1lbnQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ01ldGFkYXRhSXRlbUNvdW50OiAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdNZXRhZGF0YUl0ZW1Db3VudCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29udGFpbmVyTm9kZUNvdW50OiAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbnRhaW5lck5vZGVDb3VudCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnTWV0YWRhdGFJdGVtOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ01ldGFkYXRhSXRlbSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ291bnRlck5vZGVJRDogICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvdW50ZXJOb2RlSUQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtTWV0YWRhdGFGaWx0ZXJUeXBlOiAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbU1ldGFkYXRhRmlsdGVyVHlwZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1NZXRhZGF0YUtleUZpbHRlcjogICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtTWV0YWRhdGFLZXlGaWx0ZXIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1ByaW9yaXR5TWdtdDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdQcmlvcml0eU1nbXQiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtU3RhbmRhcmRDb21wb25lbnRSb2xlOiAgICAgICAgICAgcmV0dXJuICJQYXJhbVN0YW5kYXJkQ29tcG9uZW50Um9sZSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Qb3J0RGVmaW5pdGlvbjogICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtUG9ydERlZmluaXRpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQ29tcEJ1ZmZlclN1cHBsaWVyOiAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUNvbXBCdWZmZXJTdXBwbGllciI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1BvcnRGb3JtYXQ6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9Qb3J0Rm9ybWF0IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUGNtOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1BjbSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0FhYzogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9BYWMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9SYTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvUmEiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9NcDM6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvTXAzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvQWRwY206ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0FkcGNtIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvRzcyMzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0c3MjMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9HNzI5OiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvRzcyOSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0FtcjogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9BbXIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9XbWE6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvV21hIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvU2JjOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1NiYyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb01pZGk6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9NaWRpIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvR3NtX0ZSOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0dzbV9GUiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb01pZGlMb2FkVXNlclNvdW5kOiAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9NaWRpTG9hZFVzZXJTb3VuZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0c3MjY6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9HNzI2IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvR3NtX0VGUjogICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0dzbV9FRlIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9Hc21fSFI6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvR3NtX0hSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUGRjX0ZSOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1BkY19GUiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1BkY19FRlI6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9QZGNfRUZSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUGRjX0hSOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1BkY19IUiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1RkbWFfRlI6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9UZG1hX0ZSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvVGRtYV9FRlI6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1RkbWFfRUZSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUWNlbHA4OiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1FjZWxwOCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1FjZWxwMTM6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9RY2VscDEzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvRXZyYzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0V2cmMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9TbXY6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvU212IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvVm9yYmlzOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1ZvcmJpcyI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0ZsYWM6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9GbGFjIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlJbW1lZGlhdGVFdmVudDogICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpSW1tZWRpYXRlRXZlbnQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaUNvbnRyb2w6ICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb01pZGlDb250cm9sIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlTb3VuZEJhbmtQcm9ncmFtOgorLy8gICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb01pZGlTb3VuZEJhbmtQcm9ncmFtIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlTdGF0dXM6ICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpU3RhdHVzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlNZXRhRXZlbnQ6ICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpTWV0YUV2ZW50IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlNZXRhRXZlbnREYXRhOiAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpTWV0YUV2ZW50RGF0YSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9Wb2x1bWU6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvVm9sdW1lIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb0JhbGFuY2U6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9CYWxhbmNlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb0NoYW5uZWxNdXRlOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9DaGFubmVsTXV0ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9NdXRlOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvTXV0ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9Mb3VkbmVzczogICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvTG91ZG5lc3MiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvRWNob0NhbmNlbGF0aW9uOiAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb0VjaG9DYW5jZWxhdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9Ob2lzZVJlZHVjdGlvbjogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvTm9pc2VSZWR1Y3Rpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvQmFzczogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb0Jhc3MiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvVHJlYmxlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb1RyZWJsZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9TdGVyZW9XaWRlbmluZzogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvU3RlcmVvV2lkZW5pbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvQ2hvcnVzOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb0Nob3J1cyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9FcXVhbGl6ZXI6ICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvRXF1YWxpemVyIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb1JldmVyYmVyYXRpb246ICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9SZXZlcmJlcmF0aW9uIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb0NoYW5uZWxWb2x1bWU6ICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9DaGFubmVsVm9sdW1lIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUltYWdlUG9ydEZvcm1hdDogICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1JbWFnZVBvcnRGb3JtYXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtRmxhc2hDb250cm9sOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUZsYXNoQ29udHJvbCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnRm9jdXNDb250cm9sOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0ZvY3VzQ29udHJvbCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1RRmFjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtUUZhY3RvciI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1RdWFudGl6YXRpb25UYWJsZTogICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtUXVhbnRpemF0aW9uVGFibGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtSHVmZm1hblRhYmxlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUh1ZmZtYW5UYWJsZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnRmxhc2hDb250cm9sOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0ZsYXNoQ29udHJvbCI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb1BvcnRGb3JtYXQ6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9Qb3J0Rm9ybWF0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvUXVhbnRpemF0aW9uOiAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb1F1YW50aXphdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0Zhc3RVcGRhdGU6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9GYXN0VXBkYXRlIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvQml0cmF0ZTogICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0JpdHJhdGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9Nb3Rpb25WZWN0b3I6ICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTW90aW9uVmVjdG9yIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvSW50cmFSZWZyZXNoOiAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0ludHJhUmVmcmVzaCI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0Vycm9yQ29ycmVjdGlvbjogICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9FcnJvckNvcnJlY3Rpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9WQlNNQzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvVkJTTUMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9NcGVnMjogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTXBlZzIiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9NcGVnNDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTXBlZzQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9XbXY6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvV212IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvUnY6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb1J2IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvQXZjOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0F2YyI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0gyNjM6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9IMjYzIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvUHJvZmlsZUxldmVsUXVlcnlTdXBwb3J0ZWQ6CisgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxRdWVyeVN1cHBvcnRlZCI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb1Byb2ZpbGVMZXZlbEN1cnJlbnQ6ICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxDdXJyZW50IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb0JpdHJhdGU6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVmlkZW9CaXRyYXRlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb0ZyYW1lcmF0ZTogICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVmlkZW9GcmFtZXJhdGUiOworICAgICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1ZpZGVvSW50cmFWT1BSZWZyZXNoOiAgICAgICAgICAgcmV0dXJuICJDb25maWdWaWRlb0ludHJhVk9QUmVmcmVzaCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVmlkZW9JbnRyYU1CUmVmcmVzaDogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1ZpZGVvSW50cmFNQlJlZnJlc2giOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1ZpZGVvTUJFcnJvclJlcG9ydGluZzogICAgICAgICAgcmV0dXJuICJDb25maWdWaWRlb01CRXJyb3JSZXBvcnRpbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9NYWNyb2Jsb2Nrc1BlckZyYW1lOiAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTWFjcm9ibG9ja3NQZXJGcmFtZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVmlkZW9NYWNyb0Jsb2NrRXJyb3JNYXA6ICAgICAgICByZXR1cm4gIkNvbmZpZ1ZpZGVvTWFjcm9CbG9ja0Vycm9yTWFwIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvU2xpY2VGTU86ICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb1NsaWNlRk1PIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb0FWQ0ludHJhUGVyaW9kOiAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVmlkZW9BVkNJbnRyYVBlcmlvZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVmlkZW9OYWxTaXplOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1ZpZGVvTmFsU2l6ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db21tb25EZWJsb2NraW5nOiAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29tbW9uRGVibG9ja2luZyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db21tb25TZW5zb3JNb2RlOiAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29tbW9uU2Vuc29yTW9kZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db21tb25JbnRlcmxlYXZlOiAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29tbW9uSW50ZXJsZWF2ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29sb3JGb3JtYXRDb252ZXJzaW9uOgorLy8gICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25Db2xvckZvcm1hdENvbnZlcnNpb24iOworICAgICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vblNjYWxlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25TY2FsZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uSW1hZ2VGaWx0ZXI6ICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkltYWdlRmlsdGVyIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25Db2xvckVuaGFuY2VtZW50OiAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uQ29sb3JFbmhhbmNlbWVudCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29sb3JLZXk6ICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkNvbG9yS2V5IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25Db2xvckJsZW5kOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uQ29sb3JCbGVuZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uRnJhbWVTdGFiaWxpc2F0aW9uOiAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkZyYW1lU3RhYmlsaXNhdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uUm90YXRlOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vblJvdGF0ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uTWlycm9yOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbk1pcnJvciI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uT3V0cHV0UG9zaXRpb246ICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbk91dHB1dFBvc2l0aW9uIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25JbnB1dENyb3A6ICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uSW5wdXRDcm9wIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25PdXRwdXRDcm9wOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uT3V0cHV0Q3JvcCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uRGlnaXRhbFpvb206ICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkRpZ2l0YWxab29tIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25PcHRpY2FsWm9vbTogICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uT3B0aWNhbFpvb20iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbldoaXRlQmFsYW5jZTogICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25XaGl0ZUJhbGFuY2UiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbkV4cG9zdXJlOiAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25FeHBvc3VyZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29udHJhc3Q6ICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkNvbnRyYXN0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25CcmlnaHRuZXNzOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uQnJpZ2h0bmVzcyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQmFja2xpZ2h0OiAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkJhY2tsaWdodCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uR2FtbWE6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkdhbW1hIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25TYXR1cmF0aW9uOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uU2F0dXJhdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uTGlnaHRuZXNzOiAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkxpZ2h0bmVzcyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uRXhjbHVzaW9uUmVjdDogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkV4Y2x1c2lvblJlY3QiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbkRpdGhlcmluZzogICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25EaXRoZXJpbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vblBsYW5lQmxlbmQ6ICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25QbGFuZUJsZW5kIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25FeHBvc3VyZVZhbHVlOiAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uRXhwb3N1cmVWYWx1ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uT3V0cHV0U2l6ZTogICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbk91dHB1dFNpemUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQ29tbW9uRXh0cmFRdWFudERhdGE6ICAgICAgICAgICAgcmV0dXJuICJQYXJhbUNvbW1vbkV4dHJhUXVhbnREYXRhIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25Gb2N1c1JlZ2lvbjogICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uRm9jdXNSZWdpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbkZvY3VzU3RhdHVzOiAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25Gb2N1c1N0YXR1cyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uVHJhbnNpdGlvbkVmZmVjdDogICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vblRyYW5zaXRpb25FZmZlY3QiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtT3RoZXJQb3J0Rm9ybWF0OiAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbU90aGVyUG9ydEZvcm1hdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnT3RoZXJQb3dlcjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ090aGVyUG93ZXIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ090aGVyU3RhdHM6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdPdGhlclN0YXRzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdUaW1lU2NhbGU6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVGltZVNjYWxlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdUaW1lQ2xvY2tTdGF0ZTogICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVGltZUNsb2NrU3RhdGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVBY3RpdmVSZWZDbG9jazogICAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lQWN0aXZlUmVmQ2xvY2siOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50TWVkaWFUaW1lOiAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lQ3VycmVudE1lZGlhVGltZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRXYWxsVGltZTogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDdXJyZW50V2FsbFRpbWUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2U6CisvLyAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2U6CisvLyAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2UiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVNZWRpYVRpbWVSZXF1ZXN0OiAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lTWVkaWFUaW1lUmVxdWVzdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZTogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVQb3NpdGlvbjogICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lUG9zaXRpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVTZWVrTW9kZTogICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lU2Vla01vZGUiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9JTkRFWF9ICisKKyNlbmRpZiAvLyBPTVhfSW5kZXhfaAorCisjaWZkZWYgT01YX0luZGV4RXh0X2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX0luZGV4RXh0Lmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfSU5ERVhFWFRfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9JTkRFWEVYVF9ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0lOREVYRVhUVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ2FsbGJhY2tSZXF1ZXN0OiAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ2FsbGJhY2tSZXF1ZXN0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21taXRNb2RlOiAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21taXRNb2RlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21taXQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21taXQiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9BbmRyb2lkQWMzOiAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9BbmRyb2lkQWMzIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvQW5kcm9pZE9wdXM6ICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvQW5kcm9pZE9wdXMiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9BbmRyb2lkQWFjUHJlc2VudGF0aW9uOiByZXR1cm4gIlBhcmFtQXVkaW9BbmRyb2lkQWFjUHJlc2VudGF0aW9uIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbU5hbFN0cmVhbUZvcm1hdFN1cHBvcnRlZDogICAgcmV0dXJuICJQYXJhbU5hbFN0cmVhbUZvcm1hdFN1cHBvcnRlZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1OYWxTdHJlYW1Gb3JtYXQ6ICAgICAgICAgICAgIHJldHVybiAiUGFyYW1OYWxTdHJlYW1Gb3JtYXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtTmFsU3RyZWFtRm9ybWF0U2VsZWN0OiAgICAgICByZXR1cm4gIlBhcmFtTmFsU3RyZWFtRm9ybWF0U2VsZWN0IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvVnA4OiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvVnA4IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lOiAgICAgcmV0dXJuICJDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lVHlwZTogcmV0dXJuICJDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lVHlwZSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0FuZHJvaWRWcDhFbmNvZGVyOiAgICAgIHJldHVybiAiUGFyYW1WaWRlb0FuZHJvaWRWcDhFbmNvZGVyIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvSGV2YzogICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvSGV2YyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1TbGljZVNlZ21lbnRzOiAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1TbGljZVNlZ21lbnRzIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdXRvRnJhbWVyYXRlQ29udmVyc2lvbjogICAgcmV0dXJuICJDb25maWdBdXRvRnJhbWVyYXRlQ29udmVyc2lvbiI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZygoT01YX0lOREVYVFlQRSlpLCBkZWYpOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX0lOREVYRVhUX0gKKworI2VuZGlmIC8vIE9NWF9JbmRleEV4dF9oCisKKyNpZmRlZiBPTVhfSVZDb21tb25faAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfSVZDb21tb24uaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9JVkNPTU1PTl9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX0lWQ09NTU9OX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfQ09MT1JfRk9STUFUVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFVudXNlZDoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0VW51c2VkIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TW9ub2Nocm9tZToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0TW9ub2Nocm9tZSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDhiaXRSR0IzMzI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDhiaXRSR0IzMzIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxMmJpdFJHQjQ0NDoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MTJiaXRSR0I0NDQiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxNmJpdEFSR0I0NDQ0OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxNmJpdEFSR0I0NDQ0IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MTZiaXRBUkdCMTU1NToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MTZiaXRBUkdCMTU1NSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE2Yml0UkdCNTY1OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxNmJpdFJHQjU2NSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE2Yml0QkdSNTY1OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxNmJpdEJHUjU2NSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE4Yml0UkdCNjY2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxOGJpdFJHQjY2NiI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE4Yml0QVJHQjE2NjU6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDE4Yml0QVJHQjE2NjUiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxOWJpdEFSR0IxNjY2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxOWJpdEFSR0IxNjY2IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRiaXRSR0I4ODg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDI0Yml0UkdCODg4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRiaXRCR1I4ODg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDI0Yml0QkdSODg4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRiaXRBUkdCMTg4NzoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MjRiaXRBUkdCMTg4NyI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDI1Yml0QVJHQjE4ODg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDI1Yml0QVJHQjE4ODgiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQzMmJpdEJHUkE4ODg4OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQzMmJpdEJHUkE4ODg4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MzJiaXRBUkdCODg4ODoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MzJiaXRBUkdCODg4OCI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQxMVBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDExUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDExUGFja2VkUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZVVY0MTFQYWNrZWRQbGFuYXIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMlBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIyUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIyUGFja2VkUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZVVY0MjJQYWNrZWRQbGFuYXIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjJTZW1pUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZVVY0MjJTZW1pUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WUNiWUNyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZQ2JZQ3IiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZQ3JZQ2I6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFlDcllDYiI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdENiWUNyWToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0Q2JZQ3JZIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0Q3JZQ2JZOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRDcllDYlkiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0NDRJbnRlcmxlYXZlZDoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDQ0SW50ZXJsZWF2ZWQiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFJhd0JheWVyOGJpdCI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFJhd0JheWVyMTBiaXQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFJhd0JheWVyMTBiaXQiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXRjb21wcmVzc2VkOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXRjb21wcmVzc2VkIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEwyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEw0IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEw4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDE2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRMMTYiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRMMjQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEwyNCI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdEwzMjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0TDMyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hciI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMlBhY2tlZFNlbWlQbGFuYXI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFlVVjQyMlBhY2tlZFNlbWlQbGFuYXIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxOEJpdEJHUjY2NjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MThCaXRCR1I2NjYiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQyNEJpdEFSR0I2NjY2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQyNEJpdEFSR0I2NjY2IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRCaXRBQkdSNjY2NjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MjRCaXRBQkdSNjY2NiI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdEFuZHJvaWRPcGFxdWU6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEFuZHJvaWRPcGFxdWUiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBGbGV4aWJsZToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwRmxleGlibGUiOworICAgICAgICBjYXNlIE9NWF9USV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJUSV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfUUNPTV9DT0xPUl9Gb3JtYXRZVlU0MjBTZW1pUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJRQ09NX0NPTE9SX0Zvcm1hdFlWVTQyMFNlbWlQbGFuYXIiOworLy8gICAgICBjYXNlIE9NWF9RQ09NX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYToKKy8vICAgICAgICAgIHJldHVybiAiUUNPTV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04a2EiOworLy8gICAgICBjYXNlIE9NWF9TRUNfQ09MT1JfRm9ybWF0TlYxMlRpbGVkOgorLy8gICAgICAgICAgcmV0dXJuICJTRUNfQ09MT1JfRm9ybWF0TlYxMlRpbGVkIjsKKy8vICAgICAgY2FzZSBPTVhfUUNPTV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtOgorLy8gICAgICAgICAgcmV0dXJuICJRQ09NX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0iOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9JVkNPTU1PTl9ICisKKyNlbmRpZiAvLyBPTVhfSVZDb21tb25faAorCisjaWZkZWYgT01YX1R5cGVzX2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX1R5cGVzLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfVFlQRVNfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9UWVBFU19ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0JPT0wgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9GQUxTRTogcmV0dXJuICJGQUxTRSI7CisgICAgICAgIGNhc2UgT01YX1RSVUU6ICByZXR1cm4gIlRSVUUiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0RJUlRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9EaXJJbnB1dDogIHJldHVybiAiSW5wdXQiOworICAgICAgICBjYXNlIE9NWF9EaXJPdXRwdXQ6IHJldHVybiAiT3V0cHV0IjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfRU5ESUFOVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0VuZGlhbkJpZzogICAgcmV0dXJuICJCaWciOworLy8gICAgICBjYXNlIE9NWF9FbmRpYW5MaXR0bGU6IHJldHVybiAiTGl0dGxlIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfTlVNRVJJQ0FMREFUQVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9OdW1lcmljYWxEYXRhU2lnbmVkOiAgIHJldHVybiAiU2lnbmVkIjsKKy8vICAgICAgY2FzZSBPTVhfTnVtZXJpY2FsRGF0YVVuc2lnbmVkOiByZXR1cm4gIlVuc2lnbmVkIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX1RZUEVTX0gKKworI2VuZGlmIC8vIE9NWF9UeXBlc19oCisKKyNpZmRlZiBPTVhfVmlkZW9faAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfVmlkZW8uaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9WSURFT19ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX1ZJREVPX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fQ09ESU5HVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ1VudXNlZDogICAgIHJldHVybiAiVW51c2VkIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nQXV0b0RldGVjdDogcmV0dXJuICJBdXRvRGV0ZWN0IjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9WSURFT19Db2RpbmdNUEVHMjogICAgICByZXR1cm4gIk1QRUcyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nSDI2MzogICAgICAgcmV0dXJuICJIMjYzIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nTVBFRzQ6ICAgICAgcmV0dXJuICJNUEVHNCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ1dNVjogICAgICAgIHJldHVybiAiV01WIjsgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nUlY6ICAgICAgICAgcmV0dXJuICJSViI7ICAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9WSURFT19Db2RpbmdBVkM6ICAgICAgICByZXR1cm4gIkFWQyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ01KUEVHOiAgICAgIHJldHVybiAiTUpQRUciOyAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nVlA4OiAgICAgICAgcmV0dXJuICJWUDgiOworICAgICAgICBjYXNlIE9NWF9WSURFT19Db2RpbmdWUDk6ICAgICAgICByZXR1cm4gIlZQOSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ0hFVkM6ICAgICAgIHJldHVybiAiSEVWQyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworLy8gICAgICBjYXNlIE9NWF9WaWRlb19Db250cm9sUmF0ZURpc2FibGU6ICAgICAgICAgICAgcmV0dXJuICJEaXNhYmxlIjsKKyAgICAgICAgY2FzZSBPTVhfVmlkZW9fQ29udHJvbFJhdGVWYXJpYWJsZTogICAgICAgICAgIHJldHVybiAiVmFyaWFibGUiOworICAgICAgICBjYXNlIE9NWF9WaWRlb19Db250cm9sUmF0ZUNvbnN0YW50OiAgICAgICAgICAgcmV0dXJuICJDb25zdGFudCI7CisvLyAgICAgIGNhc2UgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmFyaWFibGVTa2lwRnJhbWVzOiByZXR1cm4gIlZhcmlhYmxlU2tpcEZyYW1lcyI7CisvLyAgICAgIGNhc2UgT01YX1ZpZGVvX0NvbnRyb2xSYXRlQ29uc3RhbnRTa2lwRnJhbWVzOiByZXR1cm4gIkNvbnN0YW50U2tpcEZyYW1lcyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fSU5UUkFSRUZSRVNIVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0ludHJhUmVmcmVzaEN5Y2xpYzogICByZXR1cm4gIkN5Y2xpYyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0ludHJhUmVmcmVzaEFkYXB0aXZlOiByZXR1cm4gIkFkYXB0aXZlIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSW50cmFSZWZyZXNoQm90aDogICAgIHJldHVybiAiQm90aCI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fSDI2M1BST0ZJTEVUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVCYXNlbGluZTogICAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzUHJvZmlsZUgzMjBDb2Rpbmc6ICAgICAgICAgcmV0dXJuICJIMzIwQ29kaW5nIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVCYWNrd2FyZENvbXBhdGlibGU6IHJldHVybiAiQmFja3dhcmRDb21wYXRpYmxlIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVJU1dWMjogICAgICAgICAgICAgIHJldHVybiAiSVNXVjIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzUHJvZmlsZUlTV1YzOiAgICAgICAgICAgICAgcmV0dXJuICJJU1dWMyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uOiAgICByZXR1cm4gIkhpZ2hDb21wcmVzc2lvbiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNQcm9maWxlSW50ZXJuZXQ6ICAgICAgICAgICByZXR1cm4gIkludGVybmV0IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcmxhY2U6ICAgICAgICAgIHJldHVybiAiSW50ZXJsYWNlIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVIaWdoTGF0ZW5jeTogICAgICAgIHJldHVybiAiSGlnaExhdGVuY3kiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzTGV2ZWwxMDogcmV0dXJuICJMZXZlbDEwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M0xldmVsMjA6IHJldHVybiAiTGV2ZWwyMCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNMZXZlbDMwOiByZXR1cm4gIkxldmVsMzAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzTGV2ZWw0MDogcmV0dXJuICJMZXZlbDQwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M0xldmVsNDU6IHJldHVybiAiTGV2ZWw0NSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNMZXZlbDUwOiByZXR1cm4gIkxldmVsNTAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzTGV2ZWw2MDogcmV0dXJuICJMZXZlbDYwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M0xldmVsNzA6IHJldHVybiAiTGV2ZWw3MCI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fUElDVFVSRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZUk6ICByZXR1cm4gIkkiOworICAgICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZVA6ICByZXR1cm4gIlAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZUI6ICByZXR1cm4gIkIiOworLy8gICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZVNJOiByZXR1cm4gIlNJIjsKKy8vICAgICAgY2FzZSBPTVhfVklERU9fUGljdHVyZVR5cGVTUDogcmV0dXJuICJTUCI7CisvLyAgICAgIGNhc2UgT01YX1ZJREVPX1BpY3R1cmVUeXBlRUk6IHJldHVybiAiRUkiOworLy8gICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZUVQOiByZXR1cm4gIkVQIjsKKy8vICAgICAgY2FzZSBPTVhfVklERU9fUGljdHVyZVR5cGVTOiAgcmV0dXJuICJTIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGU6ICAgICAgICAgICByZXR1cm4gIlNpbXBsZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZVNjYWxhYmxlOiAgIHJldHVybiAiU2ltcGxlU2NhbGFibGUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlOiAgICAgICAgICAgICByZXR1cm4gIkNvcmUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVNYWluOiAgICAgICAgICAgICByZXR1cm4gIk1haW4iOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVOYml0OiAgICAgICAgICAgICByZXR1cm4gIk5iaXQiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTY2FsYWJsZVRleHR1cmU6ICByZXR1cm4gIlNjYWxhYmxlVGV4dHVyZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZhY2U6ICAgICAgIHJldHVybiAiU2ltcGxlRmFjZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZCQTogICAgICAgIHJldHVybiAiU2ltcGxlRkJBIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRQcm9maWxlQmFzaWNBbmltYXRlZDogICAgcmV0dXJuICJCYXNpY0FuaW1hdGVkIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRQcm9maWxlSHlicmlkOiAgICAgICAgICAgcmV0dXJuICJIeWJyaWQiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZFJlYWxUaW1lOiByZXR1cm4gIkFkdmFuY2VkUmVhbFRpbWUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlU2NhbGFibGU6ICAgICByZXR1cm4gIkNvcmVTY2FsYWJsZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkQ29kaW5nOiAgIHJldHVybiAiQWR2YW5jZWRDb2RpbmciOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZENvcmU6ICAgICByZXR1cm4gIkFkdmFuY2VkQ29yZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkU2NhbGFibGU6IHJldHVybiAiQWR2YW5jZWRTY2FsYWJsZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkU2ltcGxlOiAgIHJldHVybiAiQWR2YW5jZWRTaW1wbGUiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fTVBFRzRMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsMDogIHJldHVybiAiTGV2ZWwwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRMZXZlbDBiOiByZXR1cm4gIkxldmVsMGIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsMTogIHJldHVybiAiTGV2ZWwxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRMZXZlbDI6ICByZXR1cm4gIkxldmVsMiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0TGV2ZWwzOiAgcmV0dXJuICJMZXZlbDMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsNDogIHJldHVybiAiTGV2ZWw0IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRMZXZlbDRhOiByZXR1cm4gIkxldmVsNGEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsNTogIHJldHVybiAiTGV2ZWw1IjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fQVZDUFJPRklMRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNQcm9maWxlQmFzZWxpbmU6IHJldHVybiAiQmFzZWxpbmUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNQcm9maWxlTWFpbjogICAgIHJldHVybiAiTWFpbiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ1Byb2ZpbGVFeHRlbmRlZDogcmV0dXJuICJFeHRlbmRlZCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoOiAgICAgcmV0dXJuICJIaWdoIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2gxMDogICByZXR1cm4gIkhpZ2gxMCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoNDIyOiAgcmV0dXJuICJIaWdoNDIyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2g0NDQ6ICByZXR1cm4gIkhpZ2g0NDQiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19BVkNMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDE6ICByZXR1cm4gIkxldmVsMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMWI6IHJldHVybiAiTGV2ZWwxYiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMTE6IHJldHVybiAiTGV2ZWwxMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMTI6IHJldHVybiAiTGV2ZWwxMiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMTM6IHJldHVybiAiTGV2ZWwxMyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMjogIHJldHVybiAiTGV2ZWwyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWwyMTogcmV0dXJuICJMZXZlbDIxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWwyMjogcmV0dXJuICJMZXZlbDIyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWwzOiAgcmV0dXJuICJMZXZlbDMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDMxOiByZXR1cm4gIkxldmVsMzEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDMyOiByZXR1cm4gIkxldmVsMzIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDQ6ICByZXR1cm4gIkxldmVsNCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsNDE6IHJldHVybiAiTGV2ZWw0MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsNDI6IHJldHVybiAiTGV2ZWw0MiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsNTogIHJldHVybiAiTGV2ZWw1IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWw1MTogcmV0dXJuICJMZXZlbDUxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWw1MjogcmV0dXJuICJMZXZlbDUyIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX0FWQ0xPT1BGSUxURVJUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTG9vcEZpbHRlckVuYWJsZTogICAgICAgICAgICAgICByZXR1cm4gIkVuYWJsZSI7CisvLyAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJEaXNhYmxlOiAgICAgICAgICAgICAgcmV0dXJuICJEaXNhYmxlIjsKKy8vICAgICAgY2FzZSBPTVhfVklERU9fQVZDTG9vcEZpbHRlckRpc2FibGVTbGljZUJvdW5kYXJ5OiByZXR1cm4gIkRpc2FibGVTbGljZUJvdW5kYXJ5IjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX1ZJREVPX0gKKworI2VuZGlmIC8vIE9NWF9WaWRlb19oCisKKyNpZmRlZiBPTVhfVmlkZW9FeHRfaAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfVmlkZW9FeHQuaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9WSURFT0VYVF9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX1ZJREVPRVhUX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fVlA4UFJPRklMRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIiEhIikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhQcm9maWxlTWFpbjogICAgcmV0dXJuICJNYWluIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fVlA4UHJvZmlsZVVua25vd246IHJldHVybiAiVW5rbm93biI7ICAvLyB1bnVzZWQKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19WUDhMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIiEhIikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMDogcmV0dXJuICJfVmVyc2lvbjAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMTogcmV0dXJuICJfVmVyc2lvbjEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMjogcmV0dXJuICJfVmVyc2lvbjIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMzogcmV0dXJuICJfVmVyc2lvbjMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbFVua25vd246ICAgcmV0dXJuICJVbmtub3duIjsgICAgLy8gdW51c2VkCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZygKKyAgICAgICAgT01YX1ZJREVPX0FORFJPSURfVlBYVEVNUE9SQUxMQVlFUlBBVFRFUk5UWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fVlBYVGVtcG9yYWxMYXllclBhdHRlcm5Ob25lOiAgIHJldHVybiAiVlBYVGVtcG9yYWxMYXllclBhdHRlcm5Ob25lIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fVlBYVGVtcG9yYWxMYXllclBhdHRlcm5XZWJSVEM6IHJldHVybiAiVlBYVGVtcG9yYWxMYXllclBhdHRlcm5XZWJSVEMiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX0hFVkNQUk9GSUxFVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiISEiKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNQcm9maWxlVW5rbm93bjogcmV0dXJuICJVbmtub3duIjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDUHJvZmlsZU1haW46ICAgIHJldHVybiAiTWFpbiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNQcm9maWxlTWFpbjEwOiAgcmV0dXJuICJNYWluMTAiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19IRVZDTEVWRUxUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICIhISIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ0xldmVsVW5rbm93bjogICAgcmV0dXJuICJMZXZlbFVua25vd24iOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNNYWluVGllckxldmVsMTogIHJldHVybiAiTWFpblRpZXJMZXZlbDEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDE6ICByZXR1cm4gIkhpZ2hUaWVyTGV2ZWwxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWwyOiAgcmV0dXJuICJNYWluVGllckxldmVsMiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMjogIHJldHVybiAiSGlnaFRpZXJMZXZlbDIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDIxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWwyMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMjE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDIxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWwzOiAgcmV0dXJuICJNYWluVGllckxldmVsMyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMzogIHJldHVybiAiSGlnaFRpZXJMZXZlbDMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDMxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWwzMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMzE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDMxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw0OiAgcmV0dXJuICJNYWluVGllckxldmVsNCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNDogIHJldHVybiAiSGlnaFRpZXJMZXZlbDQiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDQxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWw0MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNDE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDQxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw1OiAgcmV0dXJuICJNYWluVGllckxldmVsNSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNTogIHJldHVybiAiSGlnaFRpZXJMZXZlbDUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDUxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWw1MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNTE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDUxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw1MjogcmV0dXJuICJNYWluVGllckxldmVsNTIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDUyOiByZXR1cm4gIkhpZ2hUaWVyTGV2ZWw1MiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNNYWluVGllckxldmVsNjogIHJldHVybiAiTWFpblRpZXJMZXZlbDYiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDY6ICByZXR1cm4gIkhpZ2hUaWVyTGV2ZWw2IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw2MTogcmV0dXJuICJNYWluVGllckxldmVsNjEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDYxOiByZXR1cm4gIkhpZ2hUaWVyTGV2ZWw2MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNNYWluVGllckxldmVsNjI6IHJldHVybiAiTWFpblRpZXJMZXZlbDYyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ0hpZ2hUaWVyTGV2ZWw2MjogcmV0dXJuICJIaWdoVGllckxldmVsNjIiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX1ZJREVPRVhUX0gKKworI2VuZGlmIC8vIE9NWF9WaWRlb0V4dF9oCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0F1ZGlvLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0F1ZGlvLmgKaW5kZXggZjRjYjY0My4uYTBjYmQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9BdWRpby5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXVkaW8uaApAQCAtMTYsMjUgKzE2LDI1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLSAqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKLSAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAotICogCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgogICovCiAKQEAgLTUwLDEwICs1MCw5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCi0KIC8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKICAqICBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKLSAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseQogICovCiAKICNpbmNsdWRlIDxPTVhfQ29yZS5oPgpAQCAtNjEsNyArNjAsNyBAQAogLyoqIEBkZWZncm91cCBtaWRpIE1JREkKICAqIEBpbmdyb3VwIGF1ZGlvCiAgKi8KLSAKKwogLyoqIEBkZWZncm91cCBlZmZlY3RzIEF1ZGlvIGVmZmVjdHMKICAqIEBpbmdyb3VwIGF1ZGlvCiAgKi8KQEAgLTcxLDEwICs3MCwxMCBAQAogICogQHsKICAqLwogCi0vKiogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGF1ZGlvIGNvZGluZ3MuICAKLSAqICBJZiAiT01YX0FVRElPX0NvZGluZ1VudXNlZCIgaXMgc2VsZWN0ZWQsIHRoZSBjb2Rpbmcgc2VsZWN0aW9uIG11c3QgCi0gKiAgYmUgZG9uZSBpbiBhIHZlbmRvciBzcGVjaWZpYyB3YXkuICBTaW5jZSB0aGlzIGlzIGZvciBhbiBhdWRpbyAKLSAqICBwcm9jZXNzaW5nIGVsZW1lbnQgdGhpcyBlbnVtIGlzIHJlbGV2YW50LiAgSG93ZXZlciwgZm9yIGFub3RoZXIgCisvKiogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGF1ZGlvIGNvZGluZ3MuCisgKiAgSWYgIk9NWF9BVURJT19Db2RpbmdVbnVzZWQiIGlzIHNlbGVjdGVkLCB0aGUgY29kaW5nIHNlbGVjdGlvbiBtdXN0CisgKiAgYmUgZG9uZSBpbiBhIHZlbmRvciBzcGVjaWZpYyB3YXkuICBTaW5jZSB0aGlzIGlzIGZvciBhbiBhdWRpbworICogIHByb2Nlc3NpbmcgZWxlbWVudCB0aGlzIGVudW0gaXMgcmVsZXZhbnQuICBIb3dldmVyLCBmb3IgYW5vdGhlcgogICogIHR5cGUgb2YgY29tcG9uZW50IG90aGVyIGVudW1zIHdvdWxkIGJlIGluIHRoaXMgYXJlYS4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19DT0RJTkdUWVBFIHsKQEAgLTEwNywxNCArMTA2LDE0IEBACiAgICAgT01YX0FVRElPX0NvZGluZ1JBLCAgICAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFJBIGVuY29kZWQgZGF0YSAqLwogICAgIE9NWF9BVURJT19Db2RpbmdNSURJLCAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBNSURJIGVuY29kZWQgZGF0YSAqLwogICAgIE9NWF9BVURJT19Db2RpbmdGTEFDLCAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBGTEFDIGVuY29kZWQgZGF0YSAqLwotICAgIE9NWF9BVURJT19Db2RpbmdLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0NvZGluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19Db2RpbmdWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19Db2RpbmdNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19DT0RJTkdUWVBFOwogCiAKLS8qKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKLSAqICBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCBhdWRpbyAKKy8qKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycworICogIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IGF1ZGlvCiAgKiAgcGF0aC4gIElmIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHRvIGRlZmluZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUKICAqICBwb3J0IChzdWNoIGFzIGZyZXF1ZW5jeSksIGFkZGl0aW9uYWwgc3RydWN0dXJlcyBtdXN0IGJlIHNlbnQgc3VjaCBhcyB0aGUKICAqICBPTVhfQVVESU9fUEFSQU1fUENNTU9ERVRZUEUgc3RydWN0dXJlIHRvIHN1cHBseSB0aGUgZXh0cmEgcGFyYW1ldGVycyBmb3IgdGhlIHBvcnQuCkBAIC0xMjIsMTEgKzEyMSwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BPUlRERUZJTklUSU9OVFlQRSB7CiAgICAgT01YX1NUUklORyBjTUlNRVR5cGU7ICAgICAgICAgICAgLyoqPCBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQgKi8KICAgICBPTVhfTkFUSVZFX0RFVklDRVRZUEUgcE5hdGl2ZVJlbmRlcjsgLyoqIDwgcGxhdGZvcm0gc3BlY2lmaWMgcmVmZXJlbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBvdXRwdXQgZGV2aWNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIG91dHB1dCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDAgKi8KLSAgICBPTVhfQk9PTCBiRmxhZ0Vycm9yQ29uY2VhbG1lbnQ7ICAvKio8IFR1cm5zIG9uIGVycm9yIGNvbmNlYWxtZW50IGlmIGl0IGlzIAorICAgIE9NWF9CT09MIGJGbGFnRXJyb3JDb25jZWFsbWVudDsgIC8qKjwgVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGUgT01YIGNvbXBvbmVudCAqLwotICAgIE9NWF9BVURJT19DT0RJTkdUWVBFIGVFbmNvZGluZzsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIAorICAgIE9NWF9BVURJT19DT0RJTkdUWVBFIGVFbmNvZGluZzsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0IChlLmcuIFBDTSwgQU1SLCBNUDMsIGV0YykgKi8KIH0gT01YX0FVRElPX1BPUlRERUZJTklUSU9OVFlQRTsKIApAQCAtMTQzLDE1ICsxNDIsMTUgQEAKIH0gT01YX0FVRElPX1BBUkFNX1BPUlRGT1JNQVRUWVBFOwogCiAKLS8qKiBQQ00gbW9kZSB0eXBlICAqLyAKLXR5cGVkZWYgZW51bSBPTVhfQVVESU9fUENNTU9ERVRZUEUgeyAKLSAgICBPTVhfQVVESU9fUENNTW9kZUxpbmVhciA9IDAsICAvKio8IExpbmVhciBQQ00gZW5jb2RlZCBkYXRhICovIAotICAgIE9NWF9BVURJT19QQ01Nb2RlQUxhdywgICAgICAgIC8qKjwgQSBsYXcgUENNIGVuY29kZWQgZGF0YSAoRy43MTEpICovIAotICAgIE9NWF9BVURJT19QQ01Nb2RlTVVMYXcsICAgICAgIC8qKjwgTXUgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAgKi8gCi0gICAgT01YX0FVRElPX1BDTU1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisvKiogUENNIG1vZGUgdHlwZSAgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fUENNTU9ERVRZUEUgeworICAgIE9NWF9BVURJT19QQ01Nb2RlTGluZWFyID0gMCwgIC8qKjwgTGluZWFyIFBDTSBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fUENNTW9kZUFMYXcsICAgICAgICAvKio8IEEgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAqLworICAgIE9NWF9BVURJT19QQ01Nb2RlTVVMYXcsICAgICAgIC8qKjwgTXUgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAgKi8KKyAgICBPTVhfQVVESU9fUENNTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19QQ01Nb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfQVVESU9fUENNTW9kZU1heCA9IDB4N0ZGRkZGRkYgCi19IE9NWF9BVURJT19QQ01NT0RFVFlQRTsgCisgICAgT01YX0FVRElPX1BDTU1vZGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19QQ01NT0RFVFlQRTsKIAogCiB0eXBlZGVmIGVudW0gT01YX0FVRElPX0NIQU5ORUxUWVBFIHsKQEAgLTE2NSw0NSArMTY0LDQ1IEBACiAgICAgT01YX0FVRElPX0NoYW5uZWxDUyAgID0gMHg3LCAgICAvKio8IEJhY2sgc3Vycm91bmQgKi8KICAgICBPTVhfQVVESU9fQ2hhbm5lbExSICAgPSAweDgsICAgIC8qKjwgTGVmdCByZWFyLiAqLwogICAgIE9NWF9BVURJT19DaGFubmVsUlIgICA9IDB4OSwgICAgLyoqPCBSaWdodCByZWFyLiAqLwotICAgIE9NWF9BVURJT19DaGFubmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19DaGFubmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0NoYW5uZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9BVURJT19DaGFubmVsTWF4ICA9IDB4N0ZGRkZGRkYgCisgICAgT01YX0FVRElPX0NoYW5uZWxNYXggID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fQ0hBTk5FTFRZUEU7CiAKICNkZWZpbmUgT01YX0FVRElPX01BWENIQU5ORUxTIDE2ICAvKio8IG1heGltdW0gbnVtYmVyIGRpc3RpbmN0IGF1ZGlvIGNoYW5uZWxzIHRoYXQgYSBidWZmZXIgbWF5IGNvbnRhaW4gKi8KICNkZWZpbmUgT01YX01JTl9QQ01QQVlMT0FEX01TRUMgNSAvKio8IE1pbmltdW0gYXVkaW8gYnVmZmVyIHBheWxvYWQgc2l6ZSBmb3IgdW5jb21wcmVzc2VkIChQQ00pIGF1ZGlvICovCiAKLS8qKiBQQ00gZm9ybWF0IGRlc2NyaXB0aW9uICovIAotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1BDTU1PREVUWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSwgaW4gQnl0ZXMgKi8gCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLyAKLSAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgKGUuZy4gMiBmb3Igc3RlcmVvKSAqLyAKLSAgICBPTVhfTlVNRVJJQ0FMREFUQVRZUEUgZU51bURhdGE7ICAgLyoqPCBpbmRpY2F0ZXMgUENNIGRhdGEgYXMgc2lnbmVkIG9yIHVuc2lnbmVkICovIAotICAgIE9NWF9FTkRJQU5UWVBFIGVFbmRpYW47ICAgICAgICAgICAvKio8IGluZGljYXRlcyBQQ00gZGF0YSBhcyBsaXR0bGUgb3IgYmlnIGVuZGlhbiAqLyAKLSAgICBPTVhfQk9PTCBiSW50ZXJsZWF2ZWQ7ICAgICAgICAgICAgLyoqPCBUcnVlIGZvciBub3JtYWwgaW50ZXJsZWF2ZWQgZGF0YTsgZmFsc2UgZm9yIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1pbnRlcmxlYXZlZCBkYXRhIChlLmcuIGJsb2NrIGRhdGEpICovIAotICAgIE9NWF9VMzIgbkJpdFBlclNhbXBsZTsgICAgICAgICAgICAvKio8IEJpdCBwZXIgc2FtcGxlICovIAotICAgIE9NWF9VMzIgblNhbXBsaW5nUmF0ZTsgICAgICAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhLiAgVXNlIDAgZm9yIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9yIHVua25vd24gc2FtcGxpbmcgcmF0ZS4gKi8gCi0gICAgT01YX0FVRElPX1BDTU1PREVUWVBFIGVQQ01Nb2RlOyAgIC8qKjwgUENNIG1vZGUgZW51bWVyYXRpb24gKi8gCisvKiogUENNIGZvcm1hdCBkZXNjcmlwdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1BDTU1PREVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyAoZS5nLiAyIGZvciBzdGVyZW8pICovCisgICAgT01YX05VTUVSSUNBTERBVEFUWVBFIGVOdW1EYXRhOyAgIC8qKjwgaW5kaWNhdGVzIFBDTSBkYXRhIGFzIHNpZ25lZCBvciB1bnNpZ25lZCAqLworICAgIE9NWF9FTkRJQU5UWVBFIGVFbmRpYW47ICAgICAgICAgICAvKio8IGluZGljYXRlcyBQQ00gZGF0YSBhcyBsaXR0bGUgb3IgYmlnIGVuZGlhbiAqLworICAgIE9NWF9CT09MIGJJbnRlcmxlYXZlZDsgICAgICAgICAgICAvKio8IFRydWUgZm9yIG5vcm1hbCBpbnRlcmxlYXZlZCBkYXRhOyBmYWxzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24taW50ZXJsZWF2ZWQgZGF0YSAoZS5nLiBibG9jayBkYXRhKSAqLworICAgIE9NWF9VMzIgbkJpdFBlclNhbXBsZTsgICAgICAgICAgICAvKio8IEJpdCBwZXIgc2FtcGxlICovCisgICAgT01YX1UzMiBuU2FtcGxpbmdSYXRlOyAgICAgICAgICAgIC8qKjwgU2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEuICBVc2UgMCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvciB1bmtub3duIHNhbXBsaW5nIHJhdGUuICovCisgICAgT01YX0FVRElPX1BDTU1PREVUWVBFIGVQQ01Nb2RlOyAgIC8qKjwgUENNIG1vZGUgZW51bWVyYXRpb24gKi8KICAgICBPTVhfQVVESU9fQ0hBTk5FTFRZUEUgZUNoYW5uZWxNYXBwaW5nW09NWF9BVURJT19NQVhDSEFOTkVMU107IC8qKjwgU2xvdCBpIGNvbnRhaW5zIGNoYW5uZWwgZGVmaW5lZCBieSBlQ2hhbm5lbE1hcFtpXSAqLwogCi19IE9NWF9BVURJT19QQVJBTV9QQ01NT0RFVFlQRTsgCit9IE9NWF9BVURJT19QQVJBTV9QQ01NT0RFVFlQRTsKIAogCiAvKiogQXVkaW8gY2hhbm5lbCBtb2RlLiAgVGhpcyBpcyB1c2VkIGJ5IGJvdGggQUFDIGFuZCBNUDMsIGFsdGhvdWdoIHRoZSBuYW1lcyBhcmUgbW9yZSBhcHByb3ByaWF0ZQotICogZm9yIHRoZSBNUDMuICBGb3IgZXhhbXBsZSwgSm9pbnRTdGVyZW8gZm9yIE1QMyBpcyBDb3VwbGluZ0NoYW5uZWxzIGZvciBBQUMuIAorICogZm9yIHRoZSBNUDMuICBGb3IgZXhhbXBsZSwgSm9pbnRTdGVyZW8gZm9yIE1QMyBpcyBDb3VwbGluZ0NoYW5uZWxzIGZvciBBQUMuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfQVVESU9fQ0hBTk5FTE1PREVUWVBFIHsKLSAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVTdGVyZW8gPSAwLCAgLyoqPCAyIGNoYW5uZWxzLCB0aGUgYml0cmF0ZSBhbGxvY2F0aW9uIGJldHdlZW4gdGhvc2UgCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlU3RlcmVvID0gMCwgIC8qKjwgMiBjaGFubmVscywgdGhlIGJpdHJhdGUgYWxsb2NhdGlvbiBiZXR3ZWVuIHRob3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gY2hhbm5lbHMgY2hhbmdlcyBhY2NvcmRpbmdseSB0byBlYWNoIGNoYW5uZWwgaW5mb3JtYXRpb24gKi8KLSAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVKb2ludFN0ZXJlbywgLyoqPCBtb2RlIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIHdoYXQgaXMgY29tbW9uIGJldHdlZW4gCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlSm9pbnRTdGVyZW8sIC8qKjwgbW9kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB3aGF0IGlzIGNvbW1vbiBiZXR3ZWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBjaGFubmVscyBmb3IgaGlnaGVyIGNvbXByZXNzaW9uIGdhaW4gKi8KLSAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVEdWFsLCAgICAgICAgLyoqPCAyIG1vbm8tY2hhbm5lbHMsIGVhY2ggY2hhbm5lbCBpcyBlbmNvZGVkIHdpdGggaGFsZiAKKyAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVEdWFsLCAgICAgICAgLyoqPCAyIG1vbm8tY2hhbm5lbHMsIGVhY2ggY2hhbm5lbCBpcyBlbmNvZGVkIHdpdGggaGFsZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiaXRyYXRlIG9mIHRoZSBvdmVyYWxsIGJpdHJhdGUgKi8KICAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVNb25vLCAgICAgICAgLyoqPCBNb25vIGNoYW5uZWwgbW9kZSAqLwotICAgIE9NWF9BVURJT19DaGFubmVsTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19DaGFubmVsTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRTsKQEAgLTIxMyw3ICsyMTIsNyBAQAogICAgIE9NWF9BVURJT19NUDNTdHJlYW1Gb3JtYXRNUDFMYXllcjMgPSAwLCAvKio8IE1QMyBBdWRpbyBNUEVHIDEgTGF5ZXIgMyBTdHJlYW0gZm9ybWF0ICovCiAgICAgT01YX0FVRElPX01QM1N0cmVhbUZvcm1hdE1QMkxheWVyMywgICAgIC8qKjwgTVAzIEF1ZGlvIE1QRUcgMiBMYXllciAzIFN0cmVhbSBmb3JtYXQgKi8KICAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0TVAyXzVMYXllcjMsICAgLyoqPCBNUDMgQXVkaW8gTVBFRzIuNSBMYXllciAzIFN0cmVhbSBmb3JtYXQgKi8KLSAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19NUDNTdHJlYW1Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fTVAzU1RSRUFNRk9STUFUVFlQRTsKQEAgLTI0Myw3ICsyNDIsNyBAQAogICAgIE9NWF9BVURJT19BQUNTdHJlYW1Gb3JtYXRBRElGLCAgICAgICAgLyoqPCBBQUMgQXVkaW8gRGF0YSBJbnRlcmNoYW5nZSBGb3JtYXQgKi8KICAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0RkYsICAgICAgIC8qKjwgQUFDIGluc2lkZSBNUEVHLTQvSVNPIEZpbGUgRm9ybWF0ICovCiAgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFJBVywgICAgICAgICAvKio8IEFBQyBSYXcgRm9ybWF0ICovCi0gICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0FBQ1NUUkVBTUZPUk1BVFRZUEU7CkBAIC0zMjksMTYgKzMyOCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvciB1bmtub3duIHNhbXBsaW5nIHJhdGUuICovCiAgICAgT01YX1UzMiBuQXVkaW9CYW5kV2lkdGg7ICAvKio8IEF1ZGlvIGJhbmQgd2lkdGggKGluIEh6KSB0byB3aGljaCBhbiBlbmNvZGVyIHNob3VsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCB0aGUgYXVkaW8gc2lnbmFsLiBVc2UgMCB0byBsZXQgZW5jb2RlciBkZWNpZGUgKi8KLSAgICBPTVhfUzMyIG5RdWFsaXR5OwkJICAvKio8IFNldHMgZW5jb2RpbmcgcXVhbGl0eSB0byBuLCBiZXR3ZWVuIC0xIChsb3cpIGFuZCAxMCAoaGlnaCkuCisgICAgT01YX1MzMiBuUXVhbGl0eTsgICAgICAgICAvKio8IFNldHMgZW5jb2RpbmcgcXVhbGl0eSB0byBuLCBiZXR3ZWVuIC0xIChsb3cpIGFuZCAxMCAoaGlnaCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBkZWZhdWx0IG1vZGUgb2Ygb3BlcmF0aW9uLCB0ZWggcXVhbGl0eSBsZXZlbCBpcyAzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgcXVhbGl0eSByYW5nZSBpcyAwIC0gMTAuICovCi0gICAgT01YX0JPT0wgYk1hbmFnZWQ7CQkgIC8qKjwgU2V0ICBiaXRyYXRlICBtYW5hZ2VtZW50ICBtb2RlLiBUaGlzIHR1cm5zIG9mZiB0aGUKKyAgICBPTVhfQk9PTCBiTWFuYWdlZDsgICAgICAgIC8qKjwgU2V0ICBiaXRyYXRlICBtYW5hZ2VtZW50ICBtb2RlLiBUaGlzIHR1cm5zIG9mZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIFZCUiBlbmNvZGluZywgYnV0IGFsbG93cyBoYXJkIG9yIHNvZnQgYml0cmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cyB0byBiZSBlbmZvcmNlZCBieSB0aGUgZW5jb2Rlci4gVGhpcyBtb2RlIGNhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzbG93ZXIsIGFuZCBtYXkgYWxzbyBiZSBsb3dlciBxdWFsaXR5LiBJdCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJpbHkgdXNlZnVsIGZvciBzdHJlYW1pbmcuICovCi0gICAgT01YX0JPT0wgYkRvd25taXg7CQkgIC8qKjwgRG93bm1peCBpbnB1dCBmcm9tIHN0ZXJlbyB0byBtb25vIChoYXMgbm8gZWZmZWN0IG9uIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tc3RlcmVvIHN0cmVhbXMpLiBVc2VmdWwgZm9yIGxvd2VyLWJpdHJhdGUgZW5jb2RpbmcuICovICAgICAKKyAgICBPTVhfQk9PTCBiRG93bm1peDsgICAgICAgIC8qKjwgRG93bm1peCBpbnB1dCBmcm9tIHN0ZXJlbyB0byBtb25vIChoYXMgbm8gZWZmZWN0IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1zdGVyZW8gc3RyZWFtcykuIFVzZWZ1bCBmb3IgbG93ZXItYml0cmF0ZSBlbmNvZGluZy4gKi8KIH0gT01YX0FVRElPX1BBUkFNX1ZPUkJJU1RZUEU7CiAKIApAQCAtMzYxLDcgKzM2MCw3IEBACiAgIE9NWF9BVURJT19XTUFGb3JtYXQ3LCAgICAgICAgICAvKio8IFdpbmRvd3MgTWVkaWEgQXVkaW8gZm9ybWF0IDcgKi8KICAgT01YX0FVRElPX1dNQUZvcm1hdDgsICAgICAgICAgIC8qKjwgV2luZG93cyBNZWRpYSBBdWRpbyBmb3JtYXQgOCAqLwogICBPTVhfQVVESU9fV01BRm9ybWF0OSwgICAgICAgICAgLyoqPCBXaW5kb3dzIE1lZGlhIEF1ZGlvIGZvcm1hdCA5ICovCi0gIE9NWF9BVURJT19XTUFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgIE9NWF9BVURJT19XTUFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgT01YX0FVRElPX1dNQUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19XTUFGb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19XTUFGT1JNQVRUWVBFOwpAQCAtMzczLDcgKzM3Miw3IEBACiAgIE9NWF9BVURJT19XTUFQcm9maWxlTDEsICAgICAgICAgIC8qKjwgV2luZG93cyBNZWRpYSBhdWRpbyB2ZXJzaW9uIDkgcHJvZmlsZSBMMSAqLwogICBPTVhfQVVESU9fV01BUHJvZmlsZUwyLCAgICAgICAgICAvKio8IFdpbmRvd3MgTWVkaWEgYXVkaW8gdmVyc2lvbiA5IHByb2ZpbGUgTDIgKi8KICAgT01YX0FVRElPX1dNQVByb2ZpbGVMMywgICAgICAgICAgLyoqPCBXaW5kb3dzIE1lZGlhIGF1ZGlvIHZlcnNpb24gOSBwcm9maWxlIEwzICovCi0gIE9NWF9BVURJT19XTUFQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICBPTVhfQVVESU9fV01BUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICBPTVhfQVVESU9fV01BUHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19XTUFQcm9maWxlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fV01BUFJPRklMRVRZUEU7CkBAIC0zODgsMTQgKzM4NywxNCBAQAogICAgIE9NWF9VMzIgbkJpdFJhdGU7ICAgICAgICAgLyoqPCBCaXQgcmF0ZSBvZiB0aGUgaW5wdXQgZGF0YS4gIFVzZSAwIGZvciB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlIG9yIHVua25vd24gYml0IHJhdGVzICovCiAgICAgT01YX0FVRElPX1dNQUZPUk1BVFRZUEUgZUZvcm1hdDsgLyoqPCBWZXJzaW9uIG9mIFdNQSBzdHJlYW0gLyBkYXRhICovCi0JT01YX0FVRElPX1dNQVBST0ZJTEVUWVBFIGVQcm9maWxlOyAgLyoqPCBQcm9maWxlIG9mIFdNQSBzdHJlYW0gLyBkYXRhICovCisgICAgT01YX0FVRElPX1dNQVBST0ZJTEVUWVBFIGVQcm9maWxlOyAgLyoqPCBQcm9maWxlIG9mIFdNQSBzdHJlYW0gLyBkYXRhICovCiAgICAgT01YX1UzMiBuU2FtcGxpbmdSYXRlOyAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhICovCiAgICAgT01YX1UxNiBuQmxvY2tBbGlnbjsgICAgICAvKio8IGlzIHRoZSBibG9jayBhbGlnbm1lbnQsIG9yIGJsb2NrIHNpemUsIGluIGJ5dGVzIG9mIHRoZSBhdWRpbyBjb2RlYyAqLwogICAgIE9NWF9VMTYgbkVuY29kZU9wdGlvbnM7ICAgLyoqPCBXTUEgVHlwZS1zcGVjaWZpYyBkYXRhICovCiAgICAgT01YX1UzMiBuU3VwZXJCbG9ja0FsaWduOyAvKio8IFdNQSBUeXBlLXNwZWNpZmljIGRhdGEgKi8KIH0gT01YX0FVRElPX1BBUkFNX1dNQVRZUEU7CiAKLS8qKiAKKy8qKgogICogUmVhbEF1ZGlvIGZvcm1hdAogICovCiB0eXBlZGVmIGVudW0gT01YX0FVRElPX1JBRk9STUFUVFlQRSB7CkBAIC00MDcsMzIgKzQwNiwzMiBAQAogICAgIE9NWF9BVURJT19SQTEwX0xPU1NMRVNTLCAgICAgIC8qKjwgUmVhbEF1ZGlvIExvc3NsZXNzICovCiAgICAgT01YX0FVRElPX1JBMTBfTVVMVElDSEFOTkVMLCAgLyoqPCBSZWFsQXVkaW8gTXVsdGljaGFubmVsICovCiAgICAgT01YX0FVRElPX1JBMTBfVk9JQ0UsICAgICAgICAgLyoqPCBSZWFsQXVkaW8gVm9pY2UgZm9yIGJpdHJhdGVzIGJlbG93IDE1IGticHMgKi8KLSAgICBPTVhfQVVESU9fUkFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX1JBRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX1JBRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fUkFGb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19SQUZPUk1BVFRZUEU7CiAKLS8qKiBSQSAoUmVhbCBBdWRpbykgcGFyYW1zICovIAotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1JBVFlQRSB7IAotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIGluIEJ5dGVzICovIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzICovIAotICAgIE9NWF9VMzIgblNhbXBsaW5nUmF0ZTsgICAgICAvKio8IGlzIHRoZSBzYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YSAqLyAKLSAgICBPTVhfVTMyIG5CaXRzUGVyRnJhbWU7ICAgICAgLyoqPCBpcyB0aGUgdmFsdWUgZm9yIGJpdHMgcGVyIGZyYW1lICAqLyAKLSAgICBPTVhfVTMyIG5TYW1wbGVQZXJGcmFtZTsgICAgLyoqPCBpcyB0aGUgdmFsdWUgZm9yIHNhbXBsZXMgcGVyIGZyYW1lICovIAotICAgIE9NWF9VMzIgbkNvdXBsaW5nUXVhbnRCaXRzOyAvKio8IGlzIHRoZSBudW1iZXIgb2YgY291cGxpbmcgcXVhbnRpemF0aW9uIGJpdHMgaW4gdGhlIHN0cmVhbSAqLyAKLSAgICBPTVhfVTMyIG5Db3VwbGluZ1N0YXJ0UmVnaW9uOyAgIC8qKjwgaXMgdGhlIGNvdXBsaW5nIHN0YXJ0IHJlZ2lvbiBpbiB0aGUgc3RyZWFtICAqLyAKLSAgICBPTVhfVTMyIG5OdW1SZWdpb25zOyAgICAgICAgLyoqPCBpcyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdmFsdWUgKi8gCisvKiogUkEgKFJlYWwgQXVkaW8pIHBhcmFtcyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1JBVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSwgaW4gQnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgICBPTVhfVTMyIG5TYW1wbGluZ1JhdGU7ICAgICAgLyoqPCBpcyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEgKi8KKyAgICBPTVhfVTMyIG5CaXRzUGVyRnJhbWU7ICAgICAgLyoqPCBpcyB0aGUgdmFsdWUgZm9yIGJpdHMgcGVyIGZyYW1lICAqLworICAgIE9NWF9VMzIgblNhbXBsZVBlckZyYW1lOyAgICAvKio8IGlzIHRoZSB2YWx1ZSBmb3Igc2FtcGxlcyBwZXIgZnJhbWUgKi8KKyAgICBPTVhfVTMyIG5Db3VwbGluZ1F1YW50Qml0czsgLyoqPCBpcyB0aGUgbnVtYmVyIG9mIGNvdXBsaW5nIHF1YW50aXphdGlvbiBiaXRzIGluIHRoZSBzdHJlYW0gKi8KKyAgICBPTVhfVTMyIG5Db3VwbGluZ1N0YXJ0UmVnaW9uOyAgIC8qKjwgaXMgdGhlIGNvdXBsaW5nIHN0YXJ0IHJlZ2lvbiBpbiB0aGUgc3RyZWFtICAqLworICAgIE9NWF9VMzIgbk51bVJlZ2lvbnM7ICAgICAgICAvKio8IGlzIHRoZSBudW1iZXIgb2YgcmVnaW9ucyB2YWx1ZSAqLwogICAgIE9NWF9BVURJT19SQUZPUk1BVFRZUEUgZUZvcm1hdDsgLyoqPCBpcyB0aGUgUmVhbEF1ZGlvIGF1ZGlvIGZvcm1hdCAqLwotfSBPTVhfQVVESU9fUEFSQU1fUkFUWVBFOyAKK30gT01YX0FVRElPX1BBUkFNX1JBVFlQRTsKIAogCiAvKiogU0JDIEFsbG9jYXRpb24gTWV0aG9kIFR5cGUgKi8KIHR5cGVkZWYgZW51bSBPTVhfQVVESU9fU0JDQUxMT0NNRVRIT0RUWVBFIHsKICAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kTG91ZG5lc3MsIC8qKjwgTG91ZG5lc3MgYWxsb2NhdGlvbiBtZXRob2QgKi8KICAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kU05SLCAgICAgIC8qKjwgU05SIGFsbG9jYXRpb24gbWV0aG9kICovCi0gIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX1NCQ0FMTE9DTUVUSE9EVFlQRTsKQEAgLTQ1NywxOCArNDU2LDE4IEBACiB9IE9NWF9BVURJT19QQVJBTV9TQkNUWVBFOwogCiAKLS8qKiBBRFBDTSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8gCi10eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovIAotICAgIE9NWF9VMzIgbkJpdHNQZXJTYW1wbGU7ICAgICAvKio8IE51bWJlciBvZiBiaXRzIGluIGVhY2ggc2FtcGxlICovIAotICAgIE9NWF9VMzIgblNhbXBsZVJhdGU7ICAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhLiAgVXNlIDAgZm9yIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLyAKLX0gT01YX0FVRElPX1BBUkFNX0FEUENNVFlQRTsgCisvKiogQURQQ00gc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovCisgICAgT01YX1UzMiBuQml0c1BlclNhbXBsZTsgICAgIC8qKjwgTnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBzYW1wbGUgKi8KKyAgICBPTVhfVTMyIG5TYW1wbGVSYXRlOyAgICAgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YS4gIFVzZSAwIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLworfSBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFOwogCiAKIC8qKiBHNzIzIHJhdGUgKi8KQEAgLTQ3NiwyNSArNDc1LDI1IEBACiAgICAgT01YX0FVRElPX0c3MjNNb2RlVW51c2VkID0gMCwgIC8qKjwgQU1STkIgTW9kZSB1bnVzZWQgLyB1bmtub3duICovCiAgICAgT01YX0FVRElPX0c3MjNNb2RlTG93LCAgICAgICAgIC8qKjwgNTMwMCBicHMgKi8KICAgICBPTVhfQVVESU9fRzcyM01vZGVIaWdoLCAgICAgICAgLyoqPCA2MzAwIGJwcyAqLwotICAgIE9NWF9BVURJT19HNzIzTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fRzcyM01vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fRzcyM01vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19HNzIzTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0c3MjNSQVRFOwogCiAKIC8qKiBHNzIzIC0gU2FtcGxlIHJhdGUgbXVzdCBiZSA4IEtIeiAqLwotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0c3MjNUWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8gCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovIAotICAgIE9NWF9CT09MIGJEVFg7ICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzc2lvbiAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9HNzIzVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLworICAgIE9NWF9CT09MIGJEVFg7ICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzc2lvbiAqLwogICAgIE9NWF9BVURJT19HNzIzUkFURSBlQml0UmF0ZTsgIC8qKjwgdG9kbzogU2hvdWxkIHRoaXMgYmUgbW92ZWQgdG8gYSBjb25maWc/ICovCi0gICAgT01YX0JPT0wgYkhpUGFzc0ZpbHRlcjsgICAgICAgLyoqPCBFbmFibGUgSGlnaCBQYXNzIEZpbHRlciAqLyAKLSAgICBPTVhfQk9PTCBiUG9zdEZpbHRlcjsgICAgICAgICAvKio8IEVuYWJsZSBQb3N0IEZpbHRlciAqLyAKLX0gT01YX0FVRElPX1BBUkFNX0c3MjNUWVBFOyAKKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCisgICAgT01YX0JPT0wgYlBvc3RGaWx0ZXI7ICAgICAgICAgLyoqPCBFbmFibGUgUG9zdCBGaWx0ZXIgKi8KK30gT01YX0FVRElPX1BBUkFNX0c3MjNUWVBFOwogCiAKIC8qKiBJVFUgRzcyNiAoQURQQ00pIHJhdGUgKi8KQEAgLTUwNCwyMiArNTAzLDIyIEBACiAgICAgT01YX0FVRElPX0c3MjZNb2RlMjQsICAgICAgICAgIC8qKjwgMjQga2JwcyAqLwogICAgIE9NWF9BVURJT19HNzI2TW9kZTMyLCAgICAgICAgICAvKio8IDMyIGticHMsIG1vc3QgY29tbW9uIHJhdGUsIGFsc28gRzcyMSAqLwogICAgIE9NWF9BVURJT19HNzI2TW9kZTQwLCAgICAgICAgICAvKio8IDQwIGticHMgKi8KLSAgICBPTVhfQVVESU9fRzcyNk1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0c3MjZNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0c3MjZNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fRzcyNk1vZGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19HNzI2TU9ERTsKIAogCi0vKiogRy43MjYgc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzIC0gbXVzdCBiZSBhdCA4S0h6ICovIAotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0c3MjZUWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovIAorLyoqIEcuNzI2IHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAtIG11c3QgYmUgYXQgOEtIeiAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0c3MjZUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovCiAgICAgIE9NWF9BVURJT19HNzI2TU9ERSBlRzcyNk1vZGU7Ci19IE9NWF9BVURJT19QQVJBTV9HNzI2VFlQRTsgCit9IE9NWF9BVURJT19QQVJBTV9HNzI2VFlQRTsKIAogCiAvKiogRzcyOSBjb2RlciB0eXBlICovCkBAIC01MjgsNyArNTI3LDcgQEAKICAgICBPTVhfQVVESU9fRzcyOUEsICAgICAgICAgICAgICAvKio8IElUVSBHLjcyOSBhbm5leCBBICBlbmNvZGVkIGRhdGEgKi8KICAgICBPTVhfQVVESU9fRzcyOUIsICAgICAgICAgICAgICAvKio8IElUVSBHLjcyOSB3aXRoIGFubmV4IEIgZW5jb2RlZCBkYXRhICovCiAgICAgT01YX0FVRElPX0c3MjlBQiwgICAgICAgICAgICAgLyoqPCBJVFUgRy43MjkgYW5uZXhlcyBBIGFuZCBCIGVuY29kZWQgZGF0YSAqLwotICAgIE9NWF9BVURJT19HNzI5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19HNzI5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0c3MjlWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19HNzI5TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fRzcyOVRZUEU7CkBAIC01NDcsMjMgKzU0NiwyMyBAQAogfSBPTVhfQVVESU9fUEFSQU1fRzcyOVRZUEU7CiAKIAotLyoqIEFNUiBGcmFtZSBmb3JtYXQgKi8gCi10eXBlZGVmIGVudW0gT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRSB7IAotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdENvbmZvcm1hbmNlID0gMCwgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIEFNUiBDb25mb3JtYW5jZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdGFuZGFyZCkgRm9ybWF0ICovIAotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElGMSwgICAgICAgICAgICAgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIEFNUiBJbnRlcmZhY2UgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQgMSAqLyAKLSAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRJRjIsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgSW50ZXJmYWNlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0IDIqLyAKLSAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRGU0YsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgRmlsZSBTdG9yYWdlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0ICovIAotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdFJUUFBheWxvYWQsICAgICAgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIEFNUiBSZWFsLVRpbWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgUHJvdG9jb2wgUGF5bG9hZCBGb3JtYXQgKi8gCi0gICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SVRVLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgSVRVIEZvcm1hdCAoYWRkZWQgYXQgTW90b3JvbGEgcmVxdWVzdCkgKi8gCi0gICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorLyoqIEFNUiBGcmFtZSBmb3JtYXQgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fQU1SRlJBTUVGT1JNQVRUWVBFIHsKKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRDb25mb3JtYW5jZSA9IDAsICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgQ29uZm9ybWFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdGFuZGFyZCkgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SUYxLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0IDEgKi8KKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRJRjIsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQgMiovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0RlNGLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIEZpbGUgU3RvcmFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0UlRQUGF5bG9hZCwgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIFJlYWwtVGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IFByb3RvY29sIFBheWxvYWQgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SVRVLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgSVRVIEZvcm1hdCAoYWRkZWQgYXQgTW90b3JvbGEgcmVxdWVzdCkgKi8KKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYgCi19IE9NWF9BVURJT19BTVJGUkFNRUZPUk1BVFRZUEU7IAorICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRTsKIAogCiAvKiogQU1SIGJhbmQgbW9kZSAqLwpAQCAtNTcxLDcgKzU3MCw3IEBACiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlVW51c2VkID0gMCwgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIHVudXNlZCAvIHVua25vd24gKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjAsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgMCA9ICA0NzUwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMSwgICAgICAgICAgICAgICAgIC8qKjwgQU1STkIgTW9kZSAxID0gIDUxNTAgYnBzICovCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkIyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDIgPSAgNTkwMCBicHMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkIyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDIgPSAgNTkwMCBicHMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjMsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgMyA9ICA2NzAwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNCwgICAgICAgICAgICAgICAgIC8qKjwgQU1STkIgTW9kZSA0ID0gIDc0MDAgYnBzICovCiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkI1LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDUgPSAgNzk1MCBicHMgKi8KQEAgLTU3OSwzNiArNTc4LDM2IEBACiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkI3LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDcgPSAxMjIwMCBicHMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjAsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgMCA9ICA2NjAwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMSwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSAxID0gIDg4NTAgYnBzICovCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDIgPSAxMjY1MCBicHMgKi8gCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IzLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDMgPSAxNDI1MCBicHMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDIgPSAxMjY1MCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjMsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgMyA9IDE0MjUwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNCwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSA0ID0gMTU4NTAgYnBzICovCiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I1LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDUgPSAxODI1MCBicHMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjYsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgNiA9IDE5ODUwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNywgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSA3ID0gMjMwNTAgYnBzICovCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I4LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDggPSAyMzg1MCBicHMgKi8gICAgICAKLSAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I4LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDggPSAyMzg1MCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0FNUkJBTkRNT0RFVFlQRTsKLSAgICAgCiAKLS8qKiBBTVIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gbW9kZSAqLyAKLXR5cGVkZWYgZW51bSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEUgeyAKLSAgICBPTVhfQVVESU9fQU1SRFRYTW9kZU9mZiA9IDAsICAgICAgICAvKio8IEFNUiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBNb2RlIGlzIGRpc2FibGVkICovIAotICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25WQUQxLCAgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgdXNpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2ljZSBBY3Rpdml0eSBEZXRlY3RvciAxIChWQUQxKSBpcyBlbmFibGVkICovIAotICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25WQUQyLCAgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgdXNpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2ljZSBBY3Rpdml0eSBEZXRlY3RvciAyIChWQUQyKSBpcyBlbmFibGVkICovICAgICAgIAotICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25BdXRvLCAgICAgICAgIC8qKjwgVGhlIGNvZGVjIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgYmV0d2VlbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZiwgVkFEMSBvciBWQUQyIG1vZGVzICovIAorCisvKiogQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIG1vZGUgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEUgeworICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT2ZmID0gMCwgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgaXMgZGlzYWJsZWQgKi8KKyAgICBPTVhfQVVESU9fQU1SRFRYTW9kZU9uVkFEMSwgICAgICAgICAvKio8IEFNUiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBNb2RlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2ljZSBBY3Rpdml0eSBEZXRlY3RvciAxIChWQUQxKSBpcyBlbmFibGVkICovCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVPblZBRDIsICAgICAgICAgLyoqPCBBTVIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gTW9kZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVm9pY2UgQWN0aXZpdHkgRGV0ZWN0b3IgMiAoVkFEMikgaXMgZW5hYmxlZCAqLworICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25BdXRvLCAgICAgICAgIC8qKjwgVGhlIGNvZGVjIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2ZmLCBWQUQxIG9yIFZBRDIgbW9kZXMgKi8KIAogICAgIE9NWF9BVURJT19BTVJEVFhhc0VGUiwgICAgICAgICAgICAgLyoqPCBEVFggYXMgRUZSIGluc3RlYWQgb2YgQU1SIHN0YW5kYXJkICgzR1BQIDI2LjEwMSwgZnJhbWUgdHlwZSA9OCw5LDEwKSAqLwogCi0gICAgT01YX0FVRElPX0FNUkRUWE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQU1SRFRYTW9kZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCi0gICAgT01YX0FVRElPX0FNUkRUWE1vZGVNYXggPSAweDdGRkZGRkZGIAotfSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEU7IAotIAorICAgIE9NWF9BVURJT19BTVJEVFhNb2RlTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEU7CisKIAogLyoqIEFNUiBwYXJhbXMgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9BTVJUWVBFIHsKQEAgLTYxNyw3ICs2MTYsNyBAQAogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzICovCiAgICAgT01YX1UzMiBuQml0UmF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQml0IHJhdGUgcmVhZCBvbmx5IGZpZWxkICovCi0gICAgT01YX0FVRElPX0FNUkJBTkRNT0RFVFlQRSBlQU1SQmFuZE1vZGU7IC8qKjwgQU1SIEJhbmQgTW9kZSBlbnVtZXJhdGlvbiAqLyAKKyAgICBPTVhfQVVESU9fQU1SQkFORE1PREVUWVBFIGVBTVJCYW5kTW9kZTsgLyoqPCBBTVIgQmFuZCBNb2RlIGVudW1lcmF0aW9uICovCiAgICAgT01YX0FVRElPX0FNUkRUWE1PREVUWVBFICBlQU1SRFRYTW9kZTsgIC8qKjwgQU1SIERUWCBNb2RlIGVudW1lcmF0aW9uICovCiAgICAgT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRSBlQU1SRnJhbWVGb3JtYXQ7IC8qKjwgQU1SIGZyYW1lIGZvcm1hdCBlbnVtZXJhdGlvbiAqLwogfSBPTVhfQVVESU9fUEFSQU1fQU1SVFlQRTsKQEAgLTcyNSw3ICs3MjQsNyBAQAogICAgIE9NWF9BVURJT19DRE1BUmF0ZVF1YXJ0ZXIsICAgICAgICAgICAgLyoqPCBDRE1BIGVuY29kZWQgZnJhbWUgaW4gcXVhcnRlciByYXRlICovCiAgICAgT01YX0FVRElPX0NETUFSYXRlRWlnaHRoLCAgICAgICAgICAgICAvKio8IENETUEgZW5jb2RlZCBmcmFtZSBpbiBlaWdodGggcmF0ZSAoRFRYKSovCiAgICAgT01YX0FVRElPX0NETUFSYXRlRXJhc3VyZSwgICAgICAgICAgICAvKio8IENETUEgZXJhc3VyZSBmcmFtZSAqLwotICAgIE9NWF9BVURJT19DRE1BUmF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQ0RNQVJhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQ0RNQVJhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19DRE1BUmF0ZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0NETUFSQVRFVFlQRTsKQEAgLTc5Nyw3ICs3OTYsNyBAQAogfSBPTVhfQVVESU9fUEFSQU1fU01WVFlQRTsKIAogCi0vKiogTUlESSBGb3JtYXQgCisvKiogTUlESSBGb3JtYXQKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19NSURJRk9STUFUVFlQRQpAQCAtODEwLDMzICs4MDksMzMgQEAKICAgICBPTVhfQVVESU9fTUlESUZvcm1hdFhNRjAsICAgICAgICAvKio8IGVYdGVuc2libGUgTXVzaWMgRm9ybWF0IHR5cGUgMCAqLwogICAgIE9NWF9BVURJT19NSURJRm9ybWF0WE1GMSwgICAgICAgIC8qKjwgZVh0ZW5zaWJsZSBNdXNpYyBGb3JtYXQgdHlwZSAxICovCiAgICAgT01YX0FVRElPX01JRElGb3JtYXRNb2JpbGVYTUYsICAgLyoqPCBNb2JpbGUgWE1GIChlWHRlbnNpYmxlIE11c2ljIEZvcm1hdCB0eXBlIDIpICovCi0gICAgT01YX0FVRElPX01JRElGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX01JRElGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fTUlESUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX01JRElGb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19NSURJRk9STUFUVFlQRTsKIAogCi0vKiogTUlESSBwYXJhbXMgCisvKiogTUlESSBwYXJhbXMKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX01JRElUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KLSAgICBPTVhfVTMyIG5GaWxlU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBNSURJIGZpbGUgaW4gYnl0ZXMsIHdoZXJlIHRoZSBlbnRpcmUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlESSBmaWxlIHBhc3NlZCBpbiwgb3RoZXJ3aXNlIGlmIDB4MCwgdGhlIE1JREkgZGF0YSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBtZXJnZWQgYW5kIHN0cmVhbWVkIChpbnN0ZWFkIG9mIHBhc3NlZCBhcyBhbiAKKyAgICBPTVhfVTMyIG5GaWxlU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBNSURJIGZpbGUgaW4gYnl0ZXMsIHdoZXJlIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSURJIGZpbGUgcGFzc2VkIGluLCBvdGhlcndpc2UgaWYgMHgwLCB0aGUgTUlESSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbWVyZ2VkIGFuZCBzdHJlYW1lZCAoaW5zdGVhZCBvZiBwYXNzZWQgYXMgYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpcmUgTUlESSBmaWxlKSAqLwotICAgIE9NWF9CVTMyIHNNYXhQb2x5cGhvbnk7ICAgICAgICAvKio8IFNwZWNpZmllcyB0aGUgbWF4aW11bSBzaW11bHRhbmVvdXMgcG9seXBob25pYyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2ljZXMuIEEgdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2x5cGhvbnkgb2YgdGhlIGRldmljZSBpcyB1c2VkICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9CT09MIGJMb2FkRGVmYXVsdFNvdW5kOyAgICAvKio8IFdoZXRoZXIgdG8gbG9hZCBkZWZhdWx0IHNvdW5kIAorICAgIE9NWF9CVTMyIHNNYXhQb2x5cGhvbnk7ICAgICAgICAvKio8IFNwZWNpZmllcyB0aGUgbWF4aW11bSBzaW11bHRhbmVvdXMgcG9seXBob25pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWNlcy4gQSB2YWx1ZSBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seXBob255IG9mIHRoZSBkZXZpY2UgaXMgdXNlZCAgKi8KKyAgICBPTVhfQk9PTCBiTG9hZERlZmF1bHRTb3VuZDsgICAgLyoqPCBXaGV0aGVyIHRvIGxvYWQgZGVmYXVsdCBzb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmsgYXQgaW5pdGlhbGl6YXRpb24gKi8KLSAgICBPTVhfQVVESU9fTUlESUZPUk1BVFRZUEUgZU1pZGlGb3JtYXQ7IC8qKjwgVmVyc2lvbiBvZiB0aGUgTUlESSBmaWxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgT01YX0FVRElPX01JRElGT1JNQVRUWVBFIGVNaWRpRm9ybWF0OyAvKio8IFZlcnNpb24gb2YgdGhlIE1JREkgZmlsZSAqLwogfSBPTVhfQVVESU9fUEFSQU1fTUlESVRZUEU7CiAKIAotLyoqIFR5cGUgb2YgdGhlIE1JREkgc291bmQgYmFuayAKKy8qKiBUeXBlIG9mIHRoZSBNSURJIHNvdW5kIGJhbmsKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19NSURJU09VTkRCQU5LVFlQRSB7CkBAIC04NDUsMTMgKzg0NCwxMyBAQAogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rRExTMiwgICAgICAgICAgICAgICAgIC8qKjwgRExTIHZlcnNpb24gMiAqLwogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTW9iaWxlRExTQmFzZSwgICAgICAgIC8qKjwgTW9iaWxlIERMUywgdXNpbmcgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eSAqLwogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTW9iaWxlRExTUGx1c09wdGlvbnMsIC8qKjwgTW9iaWxlIERMUywgdXNpbmcgdGhlIHNwZWNpZmljYXRpb24tZGVmaW5lZCBvcHRpb25hbCBmZWF0dXJlIHNldCAqLwotICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fTUlESVNPVU5EQkFOS1RZUEU7CiAKIAotLyoqIEJhbmsgTGF5b3V0IGRlc2NyaWJlcyBob3cgYmFuayBNU0IgJiBMU0IgYXJlIHVzZWQgaW4gdGhlIERMUyBpbnN0cnVtZW50IGRlZmluaXRpb25zIHNvdW5kIGJhbmsgCisvKiogQmFuayBMYXlvdXQgZGVzY3JpYmVzIGhvdyBiYW5rIE1TQiAmIExTQiBhcmUgdXNlZCBpbiB0aGUgRExTIGluc3RydW1lbnQgZGVmaW5pdGlvbnMgc291bmQgYmFuawogICogQGluZ3JvdXAgbWlkaQogICovCiB0eXBlZGVmIGVudW0gT01YX0FVRElPX01JRElTT1VOREJBTktMQVlPVVRUWVBFIHsKQEAgLTg1OSwxMyArODU4LDEzIEBACiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dEdNLCAgICAgICAgICAgLyoqPCBHUyBsYXlvdXQgKGJhc2VkIG9uIGJhbmsgTVNCIDB4MDApICovCiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dEdNMiwgICAgICAgICAgLyoqPCBHZW5lcmFsIE1JREkgMiBsYXlvdXQgKHVzaW5nIE1TQiAweDc4LzB4NzksIExTQiAweDAwKSAqLwogICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtMYXlvdXRVc2VyLCAgICAgICAgIC8qKjwgRG9lcyBub3QgY29uZm9ybSB0byBhbnkgYmFuayBudW1iZXJpbmcgc3RhbmRhcmRzICovCi0gICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTGF5b3V0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX01JRElTT1VOREJBTktMQVlPVVRUWVBFOwogCiAKLS8qKiBNSURJIHBhcmFtcyB0byBsb2FkL3VubG9hZCB1c2VyIHNvdW5kYmFuayAKKy8qKiBNSURJIHBhcmFtcyB0byBsb2FkL3VubG9hZCB1c2VyIHNvdW5kYmFuawogICogQGluZ3JvdXAgbWlkaQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fTUlESUxPQURVU0VSU09VTkRUWVBFIHsKQEAgLTg4MCw4ICs4NzksOCBAQAogfSBPTVhfQVVESU9fUEFSQU1fTUlESUxPQURVU0VSU09VTkRUWVBFOwogCiAKLS8qKiBTdHJ1Y3R1cmUgZm9yIExpdmUgTUlESSBldmVudHMgYW5kIE1JUCBtZXNzYWdlcy4gCi0gKiAoTUlQID0gTWF4aW11bSBJbnN0YW50YW5lb3VzIFBvbHlwaG9ueTsgcGFydCBvZiB0aGUgU1AtTUlESSBzdGFuZGFyZC4pIAorLyoqIFN0cnVjdHVyZSBmb3IgTGl2ZSBNSURJIGV2ZW50cyBhbmQgTUlQIG1lc3NhZ2VzLgorICogKE1JUCA9IE1heGltdW0gSW5zdGFudGFuZW91cyBQb2x5cGhvbnk7IHBhcnQgb2YgdGhlIFNQLU1JREkgc3RhbmRhcmQuKQogICogQGluZ3JvdXAgbWlkaQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElJTU1FRElBVEVFVkVOVFRZUEUgewpAQCAtODkwLDEyICs4ODksMTIgQEAKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgICBPTVhfVTMyIG5NaWRpRXZlbnRTaXplOyAgIC8qKjwgU2l6ZSBvZiBpbW1lZGlhdGUgTUlESSBldmVudHMgb3IgTUlQIG1lc3NhZ2UgaW4gYnl0ZXMgICovCiAgICAgT01YX1U4IG5NaWRpRXZlbnRzWzFdOyAgICAvKio8IE1JREkgZXZlbnQgYXJyYXkgdG8gYmUgcmVuZGVyZWQgaW1tZWRpYXRlbHksIG9yIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGZvciB0aGUgTUlQIG1lc3NhZ2UgYnVmZmVyLCB3aGVyZSB0aGUgc2l6ZSBpcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgZm9yIHRoZSBNSVAgbWVzc2FnZSBidWZmZXIsIHdoZXJlIHRoZSBzaXplIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlZCBieSBuTWlkaUV2ZW50U2l6ZSAqLwogfSBPTVhfQVVESU9fQ09ORklHX01JRElJTU1FRElBVEVFVkVOVFRZUEU7CiAKIAotLyoqIE1JREkgc291bmQgYmFuay8gcHJvZ3JhbSBwYWlyIGluIGEgZ2l2ZW4gY2hhbm5lbCAKKy8qKiBNSURJIHNvdW5kIGJhbmsvIHByb2dyYW0gcGFpciBpbiBhIGdpdmVuIGNoYW5uZWwKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJU09VTkRCQU5LUFJPR1JBTVRZUEUgewpAQCAtOTA1LDI5ICs5MDQsMjkgQEAKICAgICBPTVhfVTMyIG5DaGFubmVsOyAgICAgICAgICAgLyoqPCBWYWxpZCBjaGFubmVsIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gMTYgKi8KICAgICBPTVhfVTE2IG5JRFByb2dyYW07ICAgICAgICAgLyoqPCBWYWxpZCBwcm9ncmFtIElEIHJhbmdlIGlzIDEgdG8gMTI4ICovCiAgICAgT01YX1UxNiBuSURTb3VuZEJhbms7ICAgICAgIC8qKjwgU291bmQgYmFuayBJRCAqLwotICAgIE9NWF9VMzIgblVzZXJTb3VuZEJhbmtJbmRleDsvKio8IFVzZXIgc291bmRiYW5rIGluZGV4LCBlYXNpZXIgdG8gYWNjZXNzIHNvdW5kYmFua3MgCisgICAgT01YX1UzMiBuVXNlclNvdW5kQmFua0luZGV4Oy8qKjwgVXNlciBzb3VuZGJhbmsgaW5kZXgsIGVhc2llciB0byBhY2Nlc3Mgc291bmRiYW5rcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGluZGV4IGlmIG11bHRpcGxlIGJhbmtzIGFyZSBwcmVzZW50ICovCiB9IE9NWF9BVURJT19DT05GSUdfTUlESVNPVU5EQkFOS1BST0dSQU1UWVBFOwogCiAKLS8qKiBNSURJIGNvbnRyb2wgCisvKiogTUlESSBjb250cm9sCiAgKiBAaW5ncm91cCBtaWRpCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfTUlESUNPTlRST0xUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KLSAgICBPTVhfQlMzMiBzUGl0Y2hUcmFuc3Bvc2l0aW9uOyAvKio8IFBpdGNoIHRyYW5zcG9zaXRpb24gaW4gc2VtaXRvbmVzLCBzdG9yZWQgYXMgUTIyLjEwIAorICAgIE9NWF9CUzMyIHNQaXRjaFRyYW5zcG9zaXRpb247IC8qKjwgUGl0Y2ggdHJhbnNwb3NpdGlvbiBpbiBzZW1pdG9uZXMsIHN0b3JlZCBhcyBRMjIuMTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBiYXNlZCBvbiBKQVZBIE1NQVBJIChKU1ItMTM1KSByZXF1aXJlbWVudCAqLwogICAgIE9NWF9CVTMyIHNQbGF5QmFja1JhdGU7ICAgICAgIC8qKjwgUmVsYXRpdmUgcGxheWJhY2sgcmF0ZSwgc3RvcmVkIGFzIFExNC4xNyBmaXhlZC1wb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJhc2VkIG9uIEpTUi0xMzUgcmVxdWlyZW1lbnQgKi8KLSAgICBPTVhfQlUzMiBzVGVtcG8gOyAgICAgICAgICAgICAvKio8IFRlbXBvIGluIGJlYXRzIHBlciBtaW51dGUgKEJQTSksIHN0b3JlZCBhcyBRMjIuMTAgCisgICAgT01YX0JVMzIgc1RlbXBvIDsgICAgICAgICAgICAgLyoqPCBUZW1wbyBpbiBiZWF0cyBwZXIgbWludXRlIChCUE0pLCBzdG9yZWQgYXMgUTIyLjEwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZC1wb2ludCBudW1iZXIgYmFzZWQgb24gSlNSLTEzNSByZXF1aXJlbWVudCAqLwotICAgIE9NWF9VMzIgbk1heFBvbHlwaG9ueTsgICAgICAgIC8qKjwgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpbXVsdGFuZW91cyBwb2x5cGhvbmljIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VzLiBBIHZhbHVlIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGRlZmF1bHQgCisgICAgT01YX1UzMiBuTWF4UG9seXBob255OyAgICAgICAgLyoqPCBTcGVjaWZpZXMgdGhlIG1heGltdW0gc2ltdWx0YW5lb3VzIHBvbHlwaG9uaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWNlcy4gQSB2YWx1ZSBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2x5cGhvbnkgb2YgdGhlIGRldmljZSBpcyB1c2VkICAqLwogICAgIE9NWF9VMzIgbk51bVJlcGVhdDsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBwbGF5YmFjayAqLwotICAgIE9NWF9VMzIgblN0b3BUaW1lOyAgICAgICAgICAgIC8qKjwgVGltZSBpbiBtaWxsaXNlY29uZHMgdG8gaW5kaWNhdGUgd2hlbiBwbGF5YmFjayAKKyAgICBPTVhfVTMyIG5TdG9wVGltZTsgICAgICAgICAgICAvKio8IFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIGluZGljYXRlIHdoZW4gcGxheWJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgc3RvcCBhdXRvbWF0aWNhbGx5LiAgU2V0IHRvIHplcm8gaWYgbm90IHVzZWQgKi8KICAgICBPTVhfVTE2IG5DaGFubmVsTXV0ZU1hc2s7ICAgICAvKio8IDE2IGJpdCBtYXNrIGZvciBjaGFubmVsIG11dGUgc3RhdHVzICovCiAgICAgT01YX1UxNiBuQ2hhbm5lbFNvbG9NYXNrOyAgICAgLyoqPCAxNiBiaXQgbWFzayBmb3IgY2hhbm5lbCBzb2xvIHN0YXR1cyAqLwpAQCAtOTM5LDIyICs5MzgsMjIgQEAKIH0gT01YX0FVRElPX0NPTkZJR19NSURJQ09OVFJPTFRZUEU7CiAKIAotLyoqIE1JREkgUGxheWJhY2sgU3RhdGVzIAorLyoqIE1JREkgUGxheWJhY2sgU3RhdGVzCiAgKiBAaW5ncm91cCBtaWRpCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfQVVESU9fTUlESVBMQVlCQUNLU1RBVEVUWVBFIHsKLSAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlVW5rbm93biA9IDAsICAgICAgLyoqPCBVbmtub3duIHN0YXRlIG9yIHN0YXRlIGRvZXMgbm90IG1hcCB0byAKLSAgCQkJCQkJCQkJCQkJCW90aGVyIGRlZmluZWQgc3RhdGVzICovCi0gIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZUNsb3NlZEVuZ2FnZWQsICAgIC8qKjwgTm8gTUlESSByZXNvdXJjZSBpcyBjdXJyZW50bHkgb3Blbi4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE1JREkgZW5naW5lIGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIAorICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVVbmtub3duID0gMCwgICAgICAvKio8IFVua25vd24gc3RhdGUgb3Igc3RhdGUgZG9lcyBub3QgbWFwIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZGVmaW5lZCBzdGF0ZXMgKi8KKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlQ2xvc2VkRW5nYWdlZCwgICAgLyoqPCBObyBNSURJIHJlc291cmNlIGlzIGN1cnJlbnRseSBvcGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JREkgZXZlbnRzLiAqLwotICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVQYXJzaW5nLCAgICAgICAgICAvKio8IEEgTUlESSByZXNvdXJjZSBpcyBvcGVuIGFuZCBpcyBiZWluZyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltZWQuIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkgCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZVBhcnNpbmcsICAgICAgICAgIC8qKjwgQSBNSURJIHJlc291cmNlIGlzIG9wZW4gYW5kIGlzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWVkLiBUaGUgTUlESSBlbmdpbmUgaXMgY3VycmVudGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBNSURJIGV2ZW50cy4gKi8KLSAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlT3BlbkVuZ2FnZWQsICAgICAgLyoqPCBBIE1JREkgcmVzb3VyY2UgaXMgb3BlbiBhbmQgcHJpbWVkIGJ1dCAKKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlT3BlbkVuZ2FnZWQsICAgICAgLyoqPCBBIE1JREkgcmVzb3VyY2UgaXMgb3BlbiBhbmQgcHJpbWVkIGJ1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwbGF5aW5nLiBUaGUgTUlESSBlbmdpbmUgaXMgY3VycmVudGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBNSURJIGV2ZW50cy4gVGhlIHRyYW5zaXRpb24gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHN0YXRlIGlzIG9ubHkgcG9zc2libGUgZnJvbSB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzdGF0ZSBpcyBvbmx5IHBvc3NpYmxlIGZyb20gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlUGxheWluZyBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSAncGxheWJhY2sgaGVhZCcgcmVhY2hlcyB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWVkaWEgZGF0YSBvciB0aGUgcGxheWJhY2sgc3RvcHMgZHVlCkBAIC05NjksOTUgKzk2OCw5NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGF1ZGlibGUgTUlESSBjb250ZW50IGR1cmluZyBwbGF5YmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseS4gVGhlIHNpdHVhdGlvbiBtYXkgY2hhbmdlIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzIGFyZSBmcmVlZCBsYXRlci4qLwotICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19NSURJUExBWUJBQ0tTVEFURVRZUEU7CiAKIAotLyoqIE1JREkgc3RhdHVzIAorLyoqIE1JREkgc3RhdHVzCiAgKiBAaW5ncm91cCBtaWRpCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfTUlESVNUQVRVU1RZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwotICAgIE9NWF9VMTYgbk51bVRyYWNrczsgICAgICAgICAvKio8IE51bWJlciBvZiBNSURJIHRyYWNrcyBpbiB0aGUgZmlsZSwgcmVhZCBvbmx5IGZpZWxkLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUgdW50aWwgdGhlIGVudGlyZSAKKyAgICBPTVhfVTE2IG5OdW1UcmFja3M7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgTUlESSB0cmFja3MgaW4gdGhlIGZpbGUsIHJlYWQgb25seSBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUgdW50aWwgdGhlIGVudGlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gICovCi0gICAgT01YX1UzMiBuRHVyYXRpb247ICAgICAgICAgIC8qKjwgVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudGx5IG9wZW4gTUlESSByZXNvdXJjZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtaWxsaXNlY29uZHMuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gICovICAKLSAgICBPTVhfVTMyIG5Qb3NpdGlvbjsgICAgICAgICAgLyoqPCBDdXJyZW50IFBvc2l0aW9uIG9mIHRoZSBNSURJIHJlc291cmNlIGJlaW5nIHBsYXllZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICBPTVhfQk9PTCBiVmlicmE7ICAgICAgICAgICAgLyoqPCBEb2VzIFZpYnJhIHRyYWNrIGV4aXN0PyBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdW50aWwgdGhlIGVudGlyZSBmaWxlIGlzIHBhcnNlZCBhbmQgYnVmZmVyZWQuICovCi0gICAgT01YX1UzMiBuTnVtTWV0YUV2ZW50czsgICAgIC8qKjwgVG90YWwgbnVtYmVyIG9mIE1JREkgTWV0YSBFdmVudHMgaW4gdGhlIGN1cnJlbnRseSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuIE1JREkgcmVzb3VyY2UuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSAKKyAgICBPTVhfVTMyIG5EdXJhdGlvbjsgICAgICAgICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50bHkgb3BlbiBNSURJIHJlc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWlsbGlzZWNvbmRzLiBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gICovCi0gICAgT01YX1UzMiBuTnVtQWN0aXZlVm9pY2VzOyAgIC8qKjwgTnVtYmVyIG9mIGFjdGl2ZSB2b2ljZXMgaW4gdGhlIGN1cnJlbnRseSBwbGF5aW5nIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JREkgcmVzb3VyY2UuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSB1bnRpbCAKKyAgICBPTVhfVTMyIG5Qb3NpdGlvbjsgICAgICAgICAgLyoqPCBDdXJyZW50IFBvc2l0aW9uIG9mIHRoZSBNSURJIHJlc291cmNlIGJlaW5nIHBsYXllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1pbGxpc2Vjb25kcyAqLworICAgIE9NWF9CT09MIGJWaWJyYTsgICAgICAgICAgICAvKio8IERvZXMgVmlicmEgdHJhY2sgZXhpc3Q/IE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHVudGlsIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAqLworICAgIE9NWF9VMzIgbk51bU1ldGFFdmVudHM7ICAgICAvKio8IFRvdGFsIG51bWJlciBvZiBNSURJIE1ldGEgRXZlbnRzIGluIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuIE1JREkgcmVzb3VyY2UuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAgKi8KKyAgICBPTVhfVTMyIG5OdW1BY3RpdmVWb2ljZXM7ICAgLyoqPCBOdW1iZXIgb2YgYWN0aXZlIHZvaWNlcyBpbiB0aGUgY3VycmVudGx5IHBsYXlpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSURJIHJlc291cmNlLiBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUgdW50aWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gKi8KICAgICBPTVhfQVVESU9fTUlESVBMQVlCQUNLU1RBVEVUWVBFIGVNSURJUGxheUJhY2tTdGF0ZTsgIC8qKjwgTUlESSBwbGF5YmFjayBzdGF0ZSBlbnVtZXJhdGlvbiwgcmVhZCBvbmx5IGZpZWxkICovCiB9IE9NWF9BVURJT19DT05GSUdfTUlESVNUQVRVU1RZUEU7CiAKIAogLyoqIE1JREkgTWV0YSBFdmVudCBzdHJ1Y3R1cmUgb25lIHBlciBNZXRhIEV2ZW50LgotICogIE1JREkgTWV0YSBFdmVudHMgYXJlIGxpa2UgYXVkaW8gbWV0YWRhdGEsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGludGVyc3BlcnNlZCAKLSAqICB3aXRoIHRoZSBNSURJIGNvbnRlbnQgdGhyb3VnaG91dCB0aGUgZmlsZSBhbmQgYXJlIG5vdCBsb2NhbGl6ZWQgaW4gdGhlIGhlYWRlci4gCi0gKiAgQXMgc3VjaCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIE1ldGEgRXZlbnRzIGZyb20gCi0gKiAgdGhlIGVuZ2luZSwgYXMgaXQgZW5jb3VudGVycyB0aGVzZSBNZXRhIEV2ZW50cyB3aXRoaW4gdGhlIE1JREkgY29udGVudC4gCi0gKiAgRm9yIGV4YW1wbGUsIFNNRiBmaWxlcyBjYW4gaGF2ZSB1cCB0byAxNCB0eXBlcyBvZiBNSURJIE1ldGEgRXZlbnRzIChjb3B5cmlnaHQsIAotICogIGF1dGhvciwgZGVmYXVsdCB0ZW1wbywgZXRjLikgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIGZpbGUuIAorICogIE1JREkgTWV0YSBFdmVudHMgYXJlIGxpa2UgYXVkaW8gbWV0YWRhdGEsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGludGVyc3BlcnNlZAorICogIHdpdGggdGhlIE1JREkgY29udGVudCB0aHJvdWdob3V0IHRoZSBmaWxlIGFuZCBhcmUgbm90IGxvY2FsaXplZCBpbiB0aGUgaGVhZGVyLgorICogIEFzIHN1Y2gsIGl0IGlzIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBNZXRhIEV2ZW50cyBmcm9tCisgKiAgdGhlIGVuZ2luZSwgYXMgaXQgZW5jb3VudGVycyB0aGVzZSBNZXRhIEV2ZW50cyB3aXRoaW4gdGhlIE1JREkgY29udGVudC4KKyAqICBGb3IgZXhhbXBsZSwgU01GIGZpbGVzIGNhbiBoYXZlIHVwIHRvIDE0IHR5cGVzIG9mIE1JREkgTWV0YSBFdmVudHMgKGNvcHlyaWdodCwKKyAqICBhdXRob3IsIGRlZmF1bHQgdGVtcG8sIGV0Yy4pIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBmaWxlLgogICogIEBpbmdyb3VwIG1pZGkKICAqLwotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UVFlQRXsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8gCi0gICAgT01YX1U4IG5NZXRhRXZlbnRUeXBlOyAgICAvKio8IE1ldGEgRXZlbnQgVHlwZSwgN2JpdHMgKGkuZS4gMCAtIDEyNykgKi8gCi0gICAgT01YX1UzMiBuTWV0YUV2ZW50U2l6ZTsgICAvKio8IHNpemUgb2YgdGhlIE1ldGEgRXZlbnQgaW4gYnl0ZXMgKi8gCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlRUWVBFeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkluZGV4OyAgICAgICAgICAgLyoqPCBJbmRleCBvZiBNZXRhIEV2ZW50ICovCisgICAgT01YX1U4IG5NZXRhRXZlbnRUeXBlOyAgICAvKio8IE1ldGEgRXZlbnQgVHlwZSwgN2JpdHMgKGkuZS4gMCAtIDEyNykgKi8KKyAgICBPTVhfVTMyIG5NZXRhRXZlbnRTaXplOyAgIC8qKjwgc2l6ZSBvZiB0aGUgTWV0YSBFdmVudCBpbiBieXRlcyAqLwogICAgIE9NWF9VMzIgblRyYWNrOyAgICAgICAgICAgLyoqPCB0cmFjayBudW1iZXIgZm9yIHRoZSBtZXRhIGV2ZW50ICovCiAgICAgT01YX1UzMiBuUG9zaXRpb247ICAgICAgICAvKio8IFBvc2l0aW9uIG9mIHRoZSBtZXRhLWV2ZW50IGluIG1pbGxpc2Vjb25kcyAqLwotfSBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlRUWVBFOyAKK30gT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UVFlQRTsKIAogCi0vKiogTUlESSBNZXRhIEV2ZW50IERhdGEgc3RydWN0dXJlIC0gb25lIHBlciBNZXRhIEV2ZW50LiAKKy8qKiBNSURJIE1ldGEgRXZlbnQgRGF0YSBzdHJ1Y3R1cmUgLSBvbmUgcGVyIE1ldGEgRXZlbnQuCiAgKiBAaW5ncm91cCBtaWRpCi0gKi8gCi10eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlREQVRBVFlQRXsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8gCi0gICAgT01YX1UzMiBuTWV0YUV2ZW50U2l6ZTsgICAvKio8IHNpemUgb2YgdGhlIE1ldGEgRXZlbnQgaW4gYnl0ZXMgKi8gCi0gICAgT01YX1U4IG5EYXRhWzFdOyAgICAgICAgICAvKio8IGFycmF5IG9mIG9uZSBvciBtb3JlIGJ5dGVzIG9mIG1ldGEgZGF0YSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBuTWV0YUV2ZW50U2l6ZSBmaWVsZCAqLyAKLX0gT01YX0FVRElPX0NPTkZJR19fTUlESU1FVEFFVkVOVERBVEFUWVBFOyAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UREFUQVRZUEV7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8KKyAgICBPTVhfVTMyIG5NZXRhRXZlbnRTaXplOyAgIC8qKjwgc2l6ZSBvZiB0aGUgTWV0YSBFdmVudCBpbiBieXRlcyAqLworICAgIE9NWF9VOCBuRGF0YVsxXTsgICAgICAgICAgLyoqPCBhcnJheSBvZiBvbmUgb3IgbW9yZSBieXRlcyBvZiBtZXRhIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBuTWV0YUV2ZW50U2l6ZSBmaWVsZCAqLworfSBPTVhfQVVESU9fQ09ORklHX19NSURJTUVUQUVWRU5UREFUQVRZUEU7CiAKIAogLyoqIEF1ZGlvIFZvbHVtZSBhZGp1c3RtZW50IGZvciBhIHBvcnQgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfVk9MVU1FVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyB2b2x1bWUuICBTZWxlY3QgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3QgdGhhdCBwb3J0J3Mgdm9sdW1lLiAgU2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lLiAqLwotICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIAorICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbG9nYXJpdGhtaWMgc2NhbGUgKG1CKSAqLwogICAgIE9NWF9CUzMyIHNWb2x1bWU7ICAgICAgICAgICAvKio8IFZvbHVtZSBsaW5lYXIgc2V0dGluZyBpbiB0aGUgMC4uMTAwIHJhbmdlLCBPUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZSBsb2dhcml0aG1pYyBzZXR0aW5nIGZvciB0aGlzIHBvcnQuICBUaGUgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZvbHVtZSBhcmUgaW4gbUIgKG1pbGxpYmVscyA9IDEvMTAwIGRCKSByZWxhdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZ2FpbiBvZiAxIChlLmcuIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxldmVsKS4gIFZhbHVlcyBhcmUgaW4gbUIgZnJvbSBuTWF4IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZ2FpbiBvZiAxIChlLmcuIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbGV2ZWwpLiAgVmFsdWVzIGFyZSBpbiBtQiBmcm9tIG5NYXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgdGhlIHZvbHVtZSBpcyAidm9sdGFnZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGEgInBvd2VyIiwgaXQgdGFrZXMgYSBzZXR0aW5nIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYwMCBtQiB0byBkZWNyZWFzZSB0aGUgdm9sdW1lIGJ5IDEvMi4gIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wb25lbnQgY2Fubm90IGFjY3VyYXRlbHkgc2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBvbmVudCBjYW5ub3QgYWNjdXJhdGVseSBzZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIGl0IG11c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZvbHVtZSB0byB0aGUgY2xvc2VzdCB2YWx1ZSBCRUxPVwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgdmFsdWUuICBXaGVuIGdldHRpbmcgdGhlCkBAIC0xMDcwLDI3ICsxMDY5LDI3IEBACiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0NIQU5ORUxWT0xVTUVUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIHZvbHVtZS4gIFNlbGVjdCB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIgCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuICBTZWxlY3QgdGhlIGlucHV0IHBvcnQgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyB2b2x1bWUuICBTZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWUuICovCi0gICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwgCisgICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBPTVhfQUxMIHRvIGFwcGx5IHZvbHVtZSBzZXR0aW5ncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbCBjaGFubmVscyAqLwotICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIG9yIAorICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nYXJpdGhtaWMgc2NhbGUgKG1CKSAqLwogICAgIE9NWF9CUzMyIHNWb2x1bWU7ICAgICAgICAgICAvKio8IFZvbHVtZSBsaW5lYXIgc2V0dGluZyBpbiB0aGUgMC4uMTAwIHJhbmdlLCBPUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZSBsb2dhcml0aG1pYyBzZXR0aW5nIGZvciB0aGlzIHBvcnQuICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWVzIGZvciB2b2x1bWUgYXJlIGluIG1CIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZSBsb2dhcml0aG1pYyBzZXR0aW5nIGZvciB0aGlzIHBvcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBmb3Igdm9sdW1lIGFyZSBpbiBtQgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaWxsaWJlbHMgPSAxLzEwMCBkQikgcmVsYXRpdmUgdG8gYSBnYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgMSAoZS5nLiB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsZXZlbCkuICBWYWx1ZXMgYXJlIGluIG1CIGZyb20gbk1heCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiAxIChlLmcuIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbGV2ZWwpLiAgVmFsdWVzIGFyZSBpbiBtQiBmcm9tIG5NYXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgdGhlIHZvbHVtZSBpcyAidm9sdGFnZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGEgInBvd2VyIiwgaXQgdGFrZXMgYSBzZXR0aW5nIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYwMCBtQiB0byBkZWNyZWFzZSB0aGUgdm9sdW1lIGJ5IDEvMi4gIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wb25lbnQgY2Fubm90IGFjY3VyYXRlbHkgc2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBvbmVudCBjYW5ub3QgYWNjdXJhdGVseSBzZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIGl0IG11c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZvbHVtZSB0byB0aGUgY2xvc2VzdCB2YWx1ZSBCRUxPVwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgdmFsdWUuICBXaGVuIGdldHRpbmcgdGhlCkBAIC0xMTA1LDEyICsxMTA0LDEyIEBACiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0JBTEFOQ0VUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIGJhbGFuY2UuICBTZWxlY3QgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3QgdGhhdCBwb3J0J3MgYmFsYW5jZS4gIFNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgcG9ydCB0byBhZGp1c3QgdGhlIG1hc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2UuICovCi0gICAgT01YX1MzMiBuQmFsYW5jZTsgICAgICAgICAgIC8qKjwgYmFsYW5jZSBzZXR0aW5nIGZvciB0aGlzIHBvcnQgCisgICAgT01YX1MzMiBuQmFsYW5jZTsgICAgICAgICAgIC8qKjwgYmFsYW5jZSBzZXR0aW5nIGZvciB0aGlzIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEwMCB0byAxMDAsIHdoZXJlIC0xMDAgaW5kaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGxlZnQsIGFuZCBubyByaWdodCAqLwogfSBPTVhfQVVESU9fQ09ORklHX0JBTEFOQ0VUWVBFOwpAQCAtMTEyMCwxMCArMTExOSwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NVVRFVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyBtdXRlLiAgU2VsZWN0IHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgcG9ydCB0byBhZGp1c3QgdGhlIG1hc3RlciAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBQb3J0IGluZGV4IGluZGljYXRpbmcgd2hpY2ggcG9ydCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIG11dGUuICBTZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRlLiAqLwogICAgIE9NWF9CT09MIGJNdXRlOyAgICAgICAgICAgICAvKio8IE11dGUgc2V0dGluZyBmb3IgdGhpcyBwb3J0ICovCiB9IE9NWF9BVURJT19DT05GSUdfTVVURVRZUEU7CkBAIC0xMTM0LDIwICsxMTMzLDIwIEBACiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCi0gICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwgCisgICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBPTVhfQUxMIHRvIGFwcGx5IG11dGUgc2V0dGluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhbGwgY2hhbm5lbHMgKi8KICAgICBPTVhfQk9PTCBiTXV0ZTsgICAgICAgICAgICAgLyoqPCBNdXRlIHNldHRpbmcgZm9yIHRoaXMgY2hhbm5lbCAqLwogICAgIE9NWF9CT09MIGJJc01JREk7ICAgICAgICAgICAvKio8IFRSVUUgaWYgbkNoYW5uZWwgcmVmZXJzIHRvIGEgTUlESSBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIG90aGVyd2lzZSAqLyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBvdGhlcndpc2UgKi8KIH0gT01YX0FVRElPX0NPTkZJR19DSEFOTkVMTVVURVRZUEU7CiAKIAogCi0vKiogRW5hYmxlIC8gRGlzYWJsZSBmb3IgbG91ZG5lc3MgY29udHJvbCwgd2hpY2ggYm9vc3RzIGJhc3MgYW5kIHRvIGEgCisvKiogRW5hYmxlIC8gRGlzYWJsZSBmb3IgbG91ZG5lc3MgY29udHJvbCwgd2hpY2ggYm9vc3RzIGJhc3MgYW5kIHRvIGEKICAqICBzbWFsbGVyIGV4dGVudCBoaWdoIGVuZCBmcmVxdWVuY2llcyB0byBjb21wZW5zYXRlIGZvciBoZWFyaW5nCiAgKiAgYWJpbGl0eSBhdCB0aGUgZXh0cmVtZSBlbmRzIG9mIHRoZSBhdWRpbyBzcGVjdHJ1bQotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0xPVURORVNTVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KQEAgLTExNTcsMzMgKzExNTYsMzMgQEAKIAogCiAvKiogRW5hYmxlIC8gRGlzYWJsZSBmb3IgYmFzcywgd2hpY2ggY29udHJvbHMgbG93IGZyZXF1ZW5jaWVzCi0gKi8gCisgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfQkFTU1RZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGJhc3MgY29udHJvbCAqLwotICAgIE9NWF9TMzIgbkJhc3M7ICAgICAgICAgICAgIC8qKjwgYmFzcyBzZXR0aW5nIGZvciB0aGUgcG9ydCwgYXMgYSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMCAgCisgICAgT01YX1MzMiBuQmFzczsgICAgICAgICAgICAgLyoqPCBiYXNzIHNldHRpbmcgZm9yIHRoZSBwb3J0LCBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzIHZhbHVlIGZyb20gLTEwMCB0byAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG1lYW5zIG5vIGNoYW5nZSBpbiBiYXNzIGxldmVsKSovCiB9IE9NWF9BVURJT19DT05GSUdfQkFTU1RZUEU7CiAKIAogLyoqIEVuYWJsZSAvIERpc2FibGUgZm9yIHRyZWJsZSwgd2hpY2ggY29udHJvbHMgaGlnaCBmcmVxdWVuY2llcyB0b25lcwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX1RSRUJMRVRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIHRyZWJsZSBjb250cm9sICovCiAgICAgT01YX1MzMiAgblRyZWJsZTsgICAgICAgICAgLyoqPCB0cmVibGUgc2V0dGluZyBmb3IgdGhlIHBvcnQsIGFzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzIHZhbHVlIGZyb20gLTEwMCB0byAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG1lYW5zIG5vIGNoYW5nZSBpbiB0cmVibGUgbGV2ZWwpICovCiB9IE9NWF9BVURJT19DT05GSUdfVFJFQkxFVFlQRTsKIAogCi0vKiogQW4gZXF1YWxpemVyIGlzIHR5cGljYWxseSB1c2VkIGZvciB0d28gcmVhc29uczogdG8gY29tcGVuc2F0ZSBmb3IgYW4gCi0gKiAgc3ViLW9wdGltYWwgZnJlcXVlbmN5IHJlc3BvbnNlIG9mIGEgc3lzdGVtIHRvIG1ha2UgaXQgc291bmQgbW9yZSBuYXR1cmFsIAorLyoqIEFuIGVxdWFsaXplciBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgdHdvIHJlYXNvbnM6IHRvIGNvbXBlbnNhdGUgZm9yIGFuCisgKiAgc3ViLW9wdGltYWwgZnJlcXVlbmN5IHJlc3BvbnNlIG9mIGEgc3lzdGVtIHRvIG1ha2UgaXQgc291bmQgbW9yZSBuYXR1cmFsCiAgKiAgb3IgdG8gY3JlYXRlIGludGVudGlvbmFsbHkgc29tZSB1bm5hdHVyYWwgY29sb3JpbmcgdG8gdGhlIHNvdW5kIHRvIGNyZWF0ZQogICogIGFuIGVmZmVjdC4KICAqICBAaW5ncm91cCBlZmZlY3RzCkBAIC0xMTkzLDMzICsxMTkyLDMzIEBACiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGVxdWFsaXplciAqLwotICAgIE9NWF9CVTMyIHNCYW5kSW5kZXg7ICAgICAgIC8qKjwgQmFuZCBudW1iZXIgdG8gYmUgc2V0LiAgVXBwZXIgTGltaXQgaXMgCisgICAgT01YX0JVMzIgc0JhbmRJbmRleDsgICAgICAgLyoqPCBCYW5kIG51bWJlciB0byBiZSBzZXQuICBVcHBlciBMaW1pdCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTi0xLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgYmFuZHMsIGxvd2VyIGxpbWl0IGlzIDAgKi8KICAgICBPTVhfQlUzMiBzQ2VudGVyRnJlcTsgICAgICAvKio8IENlbnRlciBmcmVxdWVjaWVzIGluIEh6LiAgVGhpcyBpcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkIG9ubHkgZWxlbWVudCBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG93ZXIsIGNlbnRlciBhbmQgdXBwZXIgZnJlcXVlbmN5IG9mIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBvbmx5IGVsZW1lbnQgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG93ZXIsIGNlbnRlciBhbmQgdXBwZXIgZnJlcXVlbmN5IG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJhbmQuICAqLwogICAgIE9NWF9CUzMyIHNCYW5kTGV2ZWw7ICAgICAgIC8qKjwgYmFuZCBsZXZlbCBpbiBtaWxsaWJlbHMgKi8KIH0gT01YX0FVRElPX0NPTkZJR19FUVVBTElaRVJUWVBFOwogCiAKLS8qKiBTdGVyZW8gd2lkZW5pbmcgbW9kZSB0eXBlIAorLyoqIFN0ZXJlbyB3aWRlbmluZyBtb2RlIHR5cGUKICAqIEBpbmdyb3VwIGVmZmVjdHMKLSAqLyAKKyAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19TVEVSRU9XSURFTklOR1RZUEUgewogICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ0hlYWRwaG9uZXMsICAgIC8qKjwgU3RlcmVvIHdpZGVuaW5nIGZvciBsb3Vkc3BlYWtlcnMgKi8KICAgICBPTVhfQVVESU9fU3RlcmVvV2lkZW5pbmdMb3Vkc3BlYWtlcnMsICAvKio8IFN0ZXJlbyB3aWRlbmluZyBmb3IgY2xvc2VseSBzcGFjZWQgbG91ZHNwZWFrZXJzICovCi0gICAgT01YX0FVRElPX1N0ZXJlb1dpZGVuaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX1N0ZXJlb1dpZGVuaW5nTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fU1RFUkVPV0lERU5JTkdUWVBFOwogCiAKIC8qKiBDb250cm9sIGZvciBzdGVyZW8gd2lkZW5pbmcsIHdoaWNoIGlzIGEgc3BlY2lhbCAyLWNoYW5uZWwKLSAqICBjYXNlIG9mIHRoZSBhdWRpbyB2aXJ0dWFsaXplciBlZmZlY3QuIEZvciBleGFtcGxlLCBmb3IgNS4xLWNoYW5uZWwgCi0gKiAgb3V0cHV0LCBpdCB0cmFuc2xhdGVzIHRvIHZpcnR1YWwgc3Vycm91bmQgc291bmQuIAorICogIGNhc2Ugb2YgdGhlIGF1ZGlvIHZpcnR1YWxpemVyIGVmZmVjdC4gRm9yIGV4YW1wbGUsIGZvciA1LjEtY2hhbm5lbAorICogIG91dHB1dCwgaXQgdHJhbnNsYXRlcyB0byB2aXJ0dWFsIHN1cnJvdW5kIHNvdW5kLgogICogQGluZ3JvdXAgZWZmZWN0cwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX1NURVJFT1dJREVOSU5HVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KQEAgLTEyMzIsMTAgKzEyMzEsMTAgQEAKIAogCiAvKiogVGhlIGNob3J1cyBlZmZlY3QgKG9yIGBgY2hvcmFsaXplcicnKSBpcyBhbnkgc2lnbmFsIHByb2Nlc3NvciB3aGljaCBtYWtlcwotICogIG9uZSBzb3VuZCBzb3VyY2UgKHN1Y2ggYXMgYSB2b2ljZSkgc291bmQgbGlrZSBtYW55IHN1Y2ggc291cmNlcyBzaW5naW5nIAotICogIChvciBwbGF5aW5nKSBpbiB1bmlzb24uIFNpbmNlIHBlcmZvcm1hbmNlIGluIHVuaXNvbiBpcyBuZXZlciBleGFjdCwgY2hvcnVzIAotICogIGVmZmVjdHMgc2ltdWxhdGUgdGhpcyBieSBtYWtpbmcgaW5kZXBlbmRlbnRseSBtb2RpZmllZCBjb3BpZXMgb2YgdGhlIGlucHV0IAotICogIHNpZ25hbC4gTW9kaWZpY2F0aW9ucyBtYXkgaW5jbHVkZSAoMSkgZGVsYXksICgyKSBmcmVxdWVuY3kgc2hpZnQsIGFuZCAKKyAqICBvbmUgc291bmQgc291cmNlIChzdWNoIGFzIGEgdm9pY2UpIHNvdW5kIGxpa2UgbWFueSBzdWNoIHNvdXJjZXMgc2luZ2luZworICogIChvciBwbGF5aW5nKSBpbiB1bmlzb24uIFNpbmNlIHBlcmZvcm1hbmNlIGluIHVuaXNvbiBpcyBuZXZlciBleGFjdCwgY2hvcnVzCisgKiAgZWZmZWN0cyBzaW11bGF0ZSB0aGlzIGJ5IG1ha2luZyBpbmRlcGVuZGVudGx5IG1vZGlmaWVkIGNvcGllcyBvZiB0aGUgaW5wdXQKKyAqICBzaWduYWwuIE1vZGlmaWNhdGlvbnMgbWF5IGluY2x1ZGUgKDEpIGRlbGF5LCAoMikgZnJlcXVlbmN5IHNoaWZ0LCBhbmQKICAqICAoMykgYW1wbGl0dWRlIG1vZHVsYXRpb24uCiAgKiBAaW5ncm91cCBlZmZlY3RzCiAgKi8KQEAgLTEyNDYsMTYgKzEyNDUsMTYgQEAKICAgICBPTVhfQk9PTCBiRW5hYmxlOyAgICAgICAgICAvKio8IEVuYWJsZS9kaXNhYmxlIGZvciBjaG9ydXMgKi8KICAgICBPTVhfQlUzMiBzRGVsYXk7ICAgICAgICAgICAvKio8IGF2ZXJhZ2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzICovCiAgICAgT01YX0JVMzIgc01vZHVsYXRpb25SYXRlOyAgLyoqPCByYXRlIG9mIG1vZHVsYXRpb24gaW4gbWlsbGloZXJ0eiAqLwotICAgIE9NWF9VMzIgbk1vZHVsYXRpb25EZXB0aDsgIC8qKjwgZGVwdGggb2YgbW9kdWxhdGlvbiBhcyBhIHBlcmNlbnRhZ2Ugb2YgCisgICAgT01YX1UzMiBuTW9kdWxhdGlvbkRlcHRoOyAgLyoqPCBkZXB0aCBvZiBtb2R1bGF0aW9uIGFzIGEgcGVyY2VudGFnZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgKGkuZS4gMCB0byAxMDApICovCiAgICAgT01YX0JVMzIgbkZlZWRiYWNrOyAgICAgICAgLyoqPCBGZWVkYmFjayBmcm9tIGNob3J1cyBvdXRwdXQgdG8gaW5wdXQgaW4gcGVyY2VudGFnZSAqLwogfSBPTVhfQVVESU9fQ09ORklHX0NIT1JVU1RZUEU7CiAKIAotLyoqIFJldmVyYmVyYXRpb24gaXMgcGFydCBvZiB0aGUgcmVmbGVjdGVkIHNvdW5kIHRoYXQgZm9sbG93cyB0aGUgZWFybHkgCi0gKiAgcmVmbGVjdGlvbnMuIEluIGEgdHlwaWNhbCByb29tLCB0aGlzIGNvbnNpc3RzIG9mIGEgZGVuc2Ugc3VjY2Vzc2lvbiBvZiAKLSAqICBlY2hvZXMgd2hvc2UgZW5lcmd5IGRlY2F5cyBleHBvbmVudGlhbGx5LiBUaGUgcmV2ZXJiZXJhdGlvbiBlZmZlY3Qgc3RydWN0dXJlIAotICogIGFzIGRlZmluZWQgaGVyZSBpbmNsdWRlcyBib3RoIChlYXJseSkgcmVmbGVjdGlvbnMgYXMgd2VsbCBhcyAobGF0ZSkgcmV2ZXJiZXJhdGlvbnMuIAorLyoqIFJldmVyYmVyYXRpb24gaXMgcGFydCBvZiB0aGUgcmVmbGVjdGVkIHNvdW5kIHRoYXQgZm9sbG93cyB0aGUgZWFybHkKKyAqICByZWZsZWN0aW9ucy4gSW4gYSB0eXBpY2FsIHJvb20sIHRoaXMgY29uc2lzdHMgb2YgYSBkZW5zZSBzdWNjZXNzaW9uIG9mCisgKiAgZWNob2VzIHdob3NlIGVuZXJneSBkZWNheXMgZXhwb25lbnRpYWxseS4gVGhlIHJldmVyYmVyYXRpb24gZWZmZWN0IHN0cnVjdHVyZQorICogIGFzIGRlZmluZWQgaGVyZSBpbmNsdWRlcyBib3RoIChlYXJseSkgcmVmbGVjdGlvbnMgYXMgd2VsbCBhcyAobGF0ZSkgcmV2ZXJiZXJhdGlvbnMuCiAgKiBAaW5ncm91cCBlZmZlY3RzCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfUkVWRVJCRVJBVElPTlRZUEUgewpAQCAtMTI2Myw0OCArMTI2Miw0OCBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgICBPTVhfQk9PTCBiRW5hYmxlOyAgICAgICAgICAgICAvKio8IEVuYWJsZS9kaXNhYmxlIGZvciByZXZlcmJlcmF0aW9uIGNvbnRyb2wgKi8KLSAgICBPTVhfQlMzMiBzUm9vbUxldmVsOyAgICAgICAgICAvKio8IEludGVuc2l0eSBsZXZlbCBmb3IgdGhlIHdob2xlIHJvb20gZWZmZWN0IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gYm90aCBlYXJseSByZWZsZWN0aW9ucyBhbmQgbGF0ZSAKKyAgICBPTVhfQlMzMiBzUm9vbUxldmVsOyAgICAgICAgICAvKio8IEludGVuc2l0eSBsZXZlbCBmb3IgdGhlIHdob2xlIHJvb20gZWZmZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBib3RoIGVhcmx5IHJlZmxlY3Rpb25zIGFuZCBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcmJlcmF0aW9uKSBpbiBtaWxsaWJlbHMgKi8KICAgICBPTVhfQlMzMiBzUm9vbUhpZ2hGcmVxTGV2ZWw7ICAvKio8IEF0dGVudWF0aW9uIGF0IGhpZ2ggZnJlcXVlbmNpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBpbnRlbnNpdHkgYXQgbG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY2llcyBpbiBtaWxsaWJlbHMgKi8KICAgICBPTVhfQlMzMiBzUmVmbGVjdGlvbnNMZXZlbDsgICAvKio8IEludGVuc2l0eSBsZXZlbCBvZiBlYXJseSByZWZsZWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbGF0aXZlIHRvIHJvb20gdmFsdWUpLCBpbiBtaWxsaWJlbHMgKi8KLSAgICBPTVhfQlUzMiBzUmVmbGVjdGlvbnNEZWxheTsgICAvKio8IERlbGF5IHRpbWUgb2YgdGhlIGZpcnN0IHJlZmxlY3Rpb24gcmVsYXRpdmUgCisgICAgT01YX0JVMzIgc1JlZmxlY3Rpb25zRGVsYXk7ICAgLyoqPCBEZWxheSB0aW1lIG9mIHRoZSBmaXJzdCByZWZsZWN0aW9uIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZGlyZWN0IHBhdGgsIGluIG1pbGxpc2Vjb25kcyAqLwogICAgIE9NWF9CUzMyIHNSZXZlcmJMZXZlbDsgICAgICAgIC8qKjwgSW50ZW5zaXR5IGxldmVsIG9mIGxhdGUgcmV2ZXJiZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgdG8gcm9vbSBsZXZlbCwgaW4gbWlsbGliZWxzICovCi0gICAgT01YX0JVMzIgc1JldmVyYkRlbGF5OyAgICAgICAgLyoqPCBUaW1lIGRlbGF5IGZyb20gdGhlIGZpcnN0IGVhcmx5IHJlZmxlY3Rpb24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXRlIHJldmVyYmVyYXRpb24gCisgICAgT01YX0JVMzIgc1JldmVyYkRlbGF5OyAgICAgICAgLyoqPCBUaW1lIGRlbGF5IGZyb20gdGhlIGZpcnN0IGVhcmx5IHJlZmxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxhdGUgcmV2ZXJiZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgaW4gbWlsbGlzZWNvbmRzICovCiAgICAgT01YX0JVMzIgc0RlY2F5VGltZTsgICAgICAgICAgLyoqPCBMYXRlIHJldmVyYmVyYXRpb24gZGVjYXkgdGltZSBhdCBsb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jaWVzLCBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICBPTVhfQlUzMiBuRGVjYXlIaWdoRnJlcVJhdGlvOyAvKio8IFJhdGlvIG9mIGhpZ2ggZnJlcXVlbmN5IGRlY2F5IHRpbWUgcmVsYXRpdmUgCisgICAgT01YX0JVMzIgbkRlY2F5SGlnaEZyZXFSYXRpbzsgLyoqPCBSYXRpbyBvZiBoaWdoIGZyZXF1ZW5jeSBkZWNheSB0aW1lIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBsb3cgZnJlcXVlbmN5IGRlY2F5IHRpbWUgaW4gcGVyY2VudCAgKi8KICAgICBPTVhfVTMyIG5EZW5zaXR5OyAgICAgICAgICAgICAvKio8IE1vZGFsIGRlbnNpdHkgaW4gdGhlIGxhdGUgcmV2ZXJiZXJhdGlvbiBkZWNheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHBlcmNlbnQgKGkuZS4gMCAtIDEwMCkgKi8KICAgICBPTVhfVTMyIG5EaWZmdXNpb247ICAgICAgICAgICAvKio8IEVjaG8gZGVuc2l0eSBpbiB0aGUgbGF0ZSByZXZlcmJlcmF0aW9uIGRlY2F5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcGVyY2VudCAoaS5lLiAwIC0gMTAwKSAqLwotICAgIE9NWF9CVTMyIHNSZWZlcmVuY2VIaWdoRnJlcTsgIC8qKjwgUmVmZXJlbmNlIGhpZ2ggZnJlcXVlbmN5IGluIEhlcnR6LiBUaGlzIGlzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZXF1ZW5jeSB1c2VkIGFzIHRoZSByZWZlcmVuY2UgZm9yIGFsbCAKKyAgICBPTVhfQlUzMiBzUmVmZXJlbmNlSGlnaEZyZXE7ICAvKio8IFJlZmVyZW5jZSBoaWdoIGZyZXF1ZW5jeSBpbiBIZXJ0ei4gVGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZXF1ZW5jeSB1c2VkIGFzIHRoZSByZWZlcmVuY2UgZm9yIGFsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhpZ2gtZnJlcXVlbmN5IHNldHRpbmdzIGFib3ZlICovCiAKIH0gT01YX0FVRElPX0NPTkZJR19SRVZFUkJFUkFUSU9OVFlQRTsKIAogCi0vKiogUG9zc2libGUgc2V0dGluZ3MgZm9yIHRoZSBFY2hvIENhbmNlbGF0aW9uIHN0cnVjdHVyZSB0byB1c2UgCisvKiogUG9zc2libGUgc2V0dGluZ3MgZm9yIHRoZSBFY2hvIENhbmNlbGF0aW9uIHN0cnVjdHVyZSB0byB1c2UKICAqIEBpbmdyb3VwIGVmZmVjdHMKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19FQ0hPQ0FOVFlQRSB7CiAgICBPTVhfQVVESU9fRWNob0Nhbk9mZiA9IDAsICAgIC8qKjwgRWNobyBDYW5jZWxsYXRpb24gaXMgZGlzYWJsZWQgKi8KLSAgIE9NWF9BVURJT19FY2hvQ2FuTm9ybWFsLCAgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBub3JtYWwgb3BlcmF0aW9uIC0gCisgICBPTVhfQVVESU9fRWNob0Nhbk5vcm1hbCwgICAgIC8qKjwgRWNobyBDYW5jZWxsYXRpb24gbm9ybWFsIG9wZXJhdGlvbiAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBmcm9tIHBsYXN0aWNzIGFuZCBmYWNlICovCi0gICBPTVhfQVVESU9fRWNob0NhbkhGcmVlLCAgICAgIC8qKjwgRWNobyBDYW5jZWxsYXRpb24gb3B0aW1pemVkIGZvciAKKyAgIE9NWF9BVURJT19FY2hvQ2FuSEZyZWUsICAgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBvcHRpbWl6ZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZHMgRnJlZSBvcGVyYXRpb24gKi8KLSAgIE9NWF9BVURJT19FY2hvQ2FuQ2FyS2l0LCAgICAvKio8IEVjaG8gQ2FuY2VsbGF0aW9uIG9wdGltaXplZCBmb3IgCisgICBPTVhfQVVESU9fRWNob0NhbkNhcktpdCwgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBvcHRpbWl6ZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyIEtpdCAobG9uZ2VyIGVjaG8pICovCi0gICBPTVhfQVVESU9fRWNob0Nhbktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgIE9NWF9BVURJT19FY2hvQ2FuS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fRWNob0NhblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fRWNob0Nhbk1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0VDSE9DQU5UWVBFOwpAQCAtMTMxMyw3ICsxMzEyLDcgQEAKIC8qKiBFbmFibGUgLyBEaXNhYmxlIGZvciBlY2hvIGNhbmNlbGF0aW9uLCB3aGljaCByZW1vdmVzIHVuZGVzaXJlZCBlY2hvJ3MKICAqICBmcm9tIHRoZSBhdWRpbwogICogQGluZ3JvdXAgZWZmZWN0cwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0VDSE9DQU5DRUxBVElPTlRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCkBAIC0xMzI1LDcgKzEzMjQsNyBAQAogLyoqIEVuYWJsZSAvIERpc2FibGUgZm9yIG5vaXNlIHJlZHVjdGlvbiwgd2hpY2ggdW5kZXNpcmVkIG5vaXNlIGZyb20KICAqIHRoZSBhdWRpbwogICogQGluZ3JvdXAgZWZmZWN0cwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX05PSVNFUkVEVUNUSU9OVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29tcG9uZW50LmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbXBvbmVudC5oCmluZGV4IGI1Yjc4NGUuLjBkYzJjNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29tcG9uZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db21wb25lbnQuaApAQCAtMTYsMjUgKzE2LDI1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLSAqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKLSAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAotICogCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgogICovCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogLyogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQogICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAotICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5CiAgKi8KIAogI2luY2x1ZGUgPE9NWF9BdWRpby5oPgpAQCAtNjQsMTIgKzY0LDEyIEBACiAjaW5jbHVkZSA8T01YX090aGVyLmg+CiAKIC8qKiBAaW5ncm91cCBjb21wICovCi10eXBlZGVmIGVudW0gT01YX1BPUlRET01BSU5UWVBFIHsgCi0gICAgT01YX1BvcnREb21haW5BdWRpbywgCi0gICAgT01YX1BvcnREb21haW5WaWRlbywgCi0gICAgT01YX1BvcnREb21haW5JbWFnZSwgCit0eXBlZGVmIGVudW0gT01YX1BPUlRET01BSU5UWVBFIHsKKyAgICBPTVhfUG9ydERvbWFpbkF1ZGlvLAorICAgIE9NWF9Qb3J0RG9tYWluVmlkZW8sCisgICAgT01YX1BvcnREb21haW5JbWFnZSwKICAgICBPTVhfUG9ydERvbWFpbk90aGVyLAotICAgIE9NWF9Qb3J0RG9tYWluS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9Qb3J0RG9tYWluS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1BvcnREb21haW5WZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9Qb3J0RG9tYWluTWF4ID0gMHg3ZmZmZmZmCiB9IE9NWF9QT1JURE9NQUlOVFlQRTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGRpc2FibGVkIGEgcG9ydCBpcyB1bnBvcHVsYXRlZC4gQSBkaXNhYmxlZCBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IHBvcHVsYXRlZCB3aXRoIGJ1ZmZlcnMgb24gYSB0cmFuc2l0aW9uIHRvIElETEUuICovCiAgICAgT01YX0JPT0wgYlBvcHVsYXRlZDsgICAgICAgICAgIC8qKjwgUG9ydCBpcyBwb3B1bGF0ZWQgd2l0aCBhbGwgb2YgaXRzIGJ1ZmZlcnMgYXMgaW5kaWNhdGVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbkJ1ZmZlckNvdW50QWN0dWFsLiBBIGRpc2FibGVkIHBvcnQgaXMgYWx3YXlzIHVucG9wdWxhdGVkLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQnVmZmVyQ291bnRBY3R1YWwuIEEgZGlzYWJsZWQgcG9ydCBpcyBhbHdheXMgdW5wb3B1bGF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gZW5hYmxlZCBwb3J0IGlzIHBvcHVsYXRlZCBvbiBhIHRyYW5zaXRpb24gdG8gT01YX1N0YXRlSWRsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1bnBvcHVsYXRlZCBvbiBhIHRyYW5zaXRpb24gdG8gbG9hZGVkLiAqLwogICAgIE9NWF9QT1JURE9NQUlOVFlQRSBlRG9tYWluOyAgICAvKio8IERvbWFpbiBvZiB0aGUgcG9ydC4gRGV0ZXJtaW5lcyB0aGUgY29udGVudHMgb2YgbWV0YWRhdGEgYmVsb3cuICovCkBAIC0xMDMsMjYgKzEwMywyNiBAQAogfSBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFOwogCiAvKiogQGluZ3JvdXAgY29tcCAqLwotdHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1UzMlRZUEUgeyAKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1UzMlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIGluIEJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICAgT01YX1UzMiBuVTMyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgVTMyIHZhbHVlICovCiB9IE9NWF9QQVJBTV9VMzJUWVBFOwogCiAvKiogQGluZ3JvdXAgcnBtICovCiB0eXBlZGVmIGVudW0gT01YX1NVU1BFTlNJT05QT0xJQ1lUWVBFIHsKICAgICBPTVhfU3VzcGVuc2lvbkRpc2FibGVkLCAvKio8IE5vIHN1c3BlbnNpb247IHYxLjAgYmVoYXZpb3IgKi8KLSAgICBPTVhfU3VzcGVuc2lvbkVuYWJsZWQsICAvKio8IFN1c3BlbnNpb24gYWxsb3dlZCAqLyAgIAotICAgIE9NWF9TdXNwZW5zaW9uUG9saWN5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9TdXNwZW5zaW9uRW5hYmxlZCwgIC8qKjwgU3VzcGVuc2lvbiBhbGxvd2VkICovCisgICAgT01YX1N1c3BlbnNpb25Qb2xpY3lLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfU3VzcGVuc2lvblBvbGljeVN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1N1c3BlbnNpb25Qb2xpY3lNYXggPSAweDdmZmZmZmZmCiB9IE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRTsKIAogLyoqIEBpbmdyb3VwIHJwbSAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NVU1BFTlNJT05QT0xJQ1lUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRSBlUG9saWN5OwogfSBPTVhfUEFSQU1fU1VTUEVOU0lPTlBPTElDWVRZUEU7CiAKQEAgLTEzMCwyMiArMTMwLDIyIEBACiB0eXBlZGVmIGVudW0gT01YX1NVU1BFTlNJT05UWVBFIHsKICAgICBPTVhfTm90U3VzcGVuZGVkLCAvKio8IGNvbXBvbmVudCBpcyBub3Qgc3VzcGVuZGVkICovCiAgICAgT01YX1N1c3BlbmRlZCwgICAgLyoqPCBjb21wb25lbnQgaXMgc3VzcGVuZGVkICovCi0gICAgT01YX1N1c3BlbnNpb25LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1N1c3BlbnNpb25LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfU3VzcGVuc2lvblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1N1c3BlbmRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9TVVNQRU5TSU9OVFlQRTsKIAogLyoqIEBpbmdyb3VwIHJwbSAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NVU1BFTlNJT05UWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgCi0gICAgT01YX1NVU1BFTlNJT05UWVBFIGVUeXBlOyAgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfU1VTUEVOU0lPTlRZUEUgZVR5cGU7CiB9IE9NWF9QQVJBTV9TVVNQRU5TSU9OVFlQRSA7CiAKIHR5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQk9PTEVBTlRZUEUgewogICAgIE9NWF9VMzIgblNpemU7CiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwotICAgIE9NWF9CT09MIGJFbmFibGVkOyAgICAKKyAgICBPTVhfQk9PTCBiRW5hYmxlZDsKIH0gT01YX0NPTkZJR19CT09MRUFOVFlQRTsKIAogLyogUGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIGNvbnRlbnQgdXJpIHRvIHVzZS4gKi8KQEAgLTE3MSw5ICsxNzEsOSBAQAogdHlwZWRlZiBzdHJ1Y3QgT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9CT09MIGJSZXNvdXJjZUNvbmNlYWxtZW50Rm9yYmlkZGVuOyAvKio8IGRpc2FsbG93IHRoZSB1c2Ugb2YgcmVzb3VyY2UgY29uY2VhbG1lbnQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgKGxpa2UgZGVncmFkaW5nIGFsZ29yaXRobSBxdWFsaXR5IHRvIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlciByZXNvdXJjZSBjb25zdW1wdGlvbiBvciBmdW5jdGlvbmFsIGJ5cGFzcykgCisgICAgT01YX0JPT0wgYlJlc291cmNlQ29uY2VhbG1lbnRGb3JiaWRkZW47IC8qKjwgZGlzYWxsb3cgdGhlIHVzZSBvZiByZXNvdXJjZSBjb25jZWFsbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzIChsaWtlIGRlZ3JhZGluZyBhbGdvcml0aG0gcXVhbGl0eSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlciByZXNvdXJjZSBjb25zdW1wdGlvbiBvciBmdW5jdGlvbmFsIGJ5cGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYSBjb21wb25lbnQgYXMgYSByZXNvbHV0aW9uIHRvIHJlc291cmNlIGNvbmZsaWN0cy4gKi8KIH0gT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFOwogCkBAIC0xODgsNyArMTg4LDcgQEAKICAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SmF2YUNvbmZvcm1hbnRVVEY4LAogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRVVEY3LAogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJbWFwVVRGNywKLSAgICBPTVhfTWV0YWRhdGFDaGFyc2V0VVRGMTZMRSwgCisgICAgT01YX01ldGFkYXRhQ2hhcnNldFVURjE2TEUsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldFVURjE2QkUsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldEdCMTIzNDUsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldEhaR0IyMzEyLApAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgT01YX01ldGFkYXRhQ2hhcnNldElTTzIwMjJKUDEsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldElTT0VVQ0pQLAogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRTTVM3Qml0LAotICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRUeXBlTWF4PSAweDdGRkZGRkZGCiB9IE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgT01YX01ldGFkYXRhU2NvcGVUb3BMZXZlbCwKICAgICBPTVhfTWV0YWRhdGFTY29wZVBvcnRMZXZlbCwKICAgICBPTVhfTWV0YWRhdGFTY29wZU5vZGVMZXZlbCwKLSAgICBPTVhfTWV0YWRhdGFTY29wZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfTWV0YWRhdGFTY29wZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9NZXRhZGF0YVNjb3BlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfTWV0YWRhdGFTY29wZVR5cGVNYXggPSAweDdmZmZmZmZmCiB9IE9NWF9NRVRBREFUQVNDT1BFVFlQRTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgIE9NWF9NZXRhZGF0YVNlYXJjaFZhbHVlU2l6ZUJ5SW5kZXgsCiAgICAgT01YX01ldGFkYXRhU2VhcmNoSXRlbUJ5SW5kZXgsCiAgICAgT01YX01ldGFkYXRhU2VhcmNoTmV4dEl0ZW1CeUtleSwKLSAgICBPTVhfTWV0YWRhdGFTZWFyY2hLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX01ldGFkYXRhU2VhcmNoS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX01ldGFkYXRhU2VhcmNoVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfTWV0YWRhdGFTZWFyY2hUeXBlTWF4ID0gMHg3ZmZmZmZmZgogfSBPTVhfTUVUQURBVEFTRUFSQ0hNT0RFVFlQRTsKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfTUVUQURBVEFTQ09QRVRZUEUgZVNjb3BlTW9kZTsKICAgICBPTVhfVTMyIG5TY29wZVNwZWNpZmllcjsKLSAgICBPTVhfVTMyIG5NZXRhZGF0YUl0ZW1JbmRleDsgIAorICAgIE9NWF9VMzIgbk1ldGFkYXRhSXRlbUluZGV4OwogICAgIE9NWF9NRVRBREFUQVNFQVJDSE1PREVUWVBFIGVTZWFyY2hNb2RlOwogICAgIE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFIGVLZXlDaGFyc2V0OwogICAgIE9NWF9VOCBuS2V5U2l6ZVVzZWQ7CkBAIC0yODcsMzAgKzI4NywzMCBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfQk9PTCBiQWxsS2V5czsKICAgICBPTVhfVTMyIG5QYXJlbnROb2RlSUQ7Ci0gICAgT01YX1UzMiBuTm9kZUluZGV4OyAKLSAgICBPTVhfVTMyIG5Ob2RlSUQ7IAorICAgIE9NWF9VMzIgbk5vZGVJbmRleDsKKyAgICBPTVhfVTMyIG5Ob2RlSUQ7CiAgICAgT01YX1NUUklORyBjTm9kZU5hbWU7CiAgICAgT01YX0JPT0wgYklzTGVhZlR5cGU7CiB9IE9NWF9DT05GSUdfQ09OVEFJTkVSTk9ERUlEVFlQRTsKIAogLyoqIEBpbmdyb3VwIG1ldGFkYXRhICovCi10eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fTUVUQURBVEFGSUxURVJUWVBFIAoteyAKLSAgICBPTVhfVTMyIG5TaXplOyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IAotICAgIE9NWF9CT09MIGJBbGxLZXlzOwkvKiBpZiB0cnVlIHRoZW4gdGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGFsbCBrZXlzIGFuZCAKK3R5cGVkZWYgc3RydWN0IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEUKK3sKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfQk9PTCBiQWxsS2V5czsgIC8qIGlmIHRydWUgdGhlbiB0aGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gYWxsIGtleXMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgdGhyZWUga2V5IGZpZWxkcyBiZWxvdyBhcmUgaWdub3JlZCAqLwogICAgIE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFIGVLZXlDaGFyc2V0OwotICAgIE9NWF9VMzIgbktleVNpemVVc2VkOyAKLSAgICBPTVhfVTggICBuS2V5IFsxMjhdOyAKKyAgICBPTVhfVTMyIG5LZXlTaXplVXNlZDsKKyAgICBPTVhfVTggICBuS2V5IFsxMjhdOwogICAgIE9NWF9VMzIgbkxhbmd1YWdlQ291bnRyeVNpemVVc2VkOwogICAgIE9NWF9VOCBuTGFuZ3VhZ2VDb3VudHJ5WzEyOF07Ci0gICAgT01YX0JPT0wgYkVuYWJsZWQ7CS8qIGlmIHRydWUgdGhlbiBrZXkgaXMgcGFydCBvZiBmaWx0ZXIgKGUuZy4gCisgICAgT01YX0JPT0wgYkVuYWJsZWQ7ICAvKiBpZiB0cnVlIHRoZW4ga2V5IGlzIHBhcnQgb2YgZmlsdGVyIChlLmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXRhaW5lZCBmb3IgcXVlcnkgbGF0ZXIpLiBJZiBmYWxzZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBrZXkgaXMgbm90IHBhcnQgb2YgZmlsdGVyICovCi19IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEU7IAorfSBPTVhfUEFSQU1fTUVUQURBVEFGSUxURVJUWVBFOwogCi0vKiogVGhlIE9NWF9IQU5ETEVUWVBFIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBjb21wb25lbnQgaGFuZGxlLiAgVGhlIGNvbXBvbmVudCAKKy8qKiBUaGUgT01YX0hBTkRMRVRZUEUgc3RydWN0dXJlIGRlZmluZXMgdGhlIGNvbXBvbmVudCBoYW5kbGUuICBUaGUgY29tcG9uZW50CiAgKiAgaGFuZGxlIGlzIHVzZWQgdG8gYWNjZXNzIGFsbCBvZiB0aGUgY29tcG9uZW50J3MgcHVibGljIG1ldGhvZHMgYW5kIGFsc28KICAqICBjb250YWlucyBwb2ludGVycyB0byB0aGUgY29tcG9uZW50J3MgcHJpdmF0ZSBkYXRhIGFyZWEuICBUaGUgY29tcG9uZW50CiAgKiAgaGFuZGxlIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBPTVggY29yZSAod2l0aCBoZWxwIGZyb20gdGhlIGNvbXBvbmVudCkKQEAgLTMxOCw3ICszMTgsNyBAQAogICogIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGFjY2VzcyBhbnkgb2YgdGhlCiAgKiAgY29tcG9uZW50J3MgcHVibGljIGZ1bmN0aW9ucyAoYWx0aG91Z2ggc29tZSBtYXkgcmV0dXJuIGFuIGVycm9yIGJlY2F1c2UKICAqICB0aGUgc3RhdGUgaXMgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGFjY2VzcykuCi0gKiAKKyAqCiAgKiAgQGluZ3JvdXAgY29tcAogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQ09NUE9ORU5UVFlQRQpAQCAtMzI5LDI2ICszMjksMjYgQEAKICAgICAgICAgZnVuY3Rpb24gd2lsbCBmaWxsIGluIHRoaXMgdmFsdWUuICovCiAgICAgT01YX1UzMiBuU2l6ZTsKIAotICAgIC8qKiBuVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT01YIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgc3RydWN0dXJlIAotICAgICAgICBpcyBidWlsdCBhZ2FpbnN0LiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjcmVhdG9yIG9mIHRoaXMgCi0gICAgICAgIHN0cnVjdHVyZSB0byBpbml0aWFsaXplIHRoaXMgdmFsdWUgYW5kIGV2ZXJ5IHVzZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgCi0gICAgICAgIHNob3VsZCB2ZXJpZnkgdGhhdCBpdCBrbm93cyBob3cgdG8gdXNlIHRoZSBleGFjdCB2ZXJzaW9uIG9mIAorICAgIC8qKiBuVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT01YIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgc3RydWN0dXJlCisgICAgICAgIGlzIGJ1aWx0IGFnYWluc3QuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNyZWF0b3Igb2YgdGhpcworICAgICAgICBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhbHVlIGFuZCBldmVyeSB1c2VyIG9mIHRoaXMgc3RydWN0dXJlCisgICAgICAgIHNob3VsZCB2ZXJpZnkgdGhhdCBpdCBrbm93cyBob3cgdG8gdXNlIHRoZSBleGFjdCB2ZXJzaW9uIG9mCiAgICAgICAgIHRoaXMgc3RydWN0dXJlIGZvdW5kIGhlcmVpbi4gKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAKLSAgICAvKiogcENvbXBvbmVudFByaXZhdGUgaXMgYSBwb2ludGVyIHRvIHRoZSBjb21wb25lbnQgcHJpdmF0ZSBkYXRhIGFyZWEuICAKLSAgICAgICAgVGhpcyBtZW1iZXIgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY29tcG9uZW50IHdoZW4gdGhlIAotICAgICAgICBjb21wb25lbnQgaXMgZmlyc3QgbG9hZGVkLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYWNjZXNzIHRoaXMgCisgICAgLyoqIHBDb21wb25lbnRQcml2YXRlIGlzIGEgcG9pbnRlciB0byB0aGUgY29tcG9uZW50IHByaXZhdGUgZGF0YSBhcmVhLgorICAgICAgICBUaGlzIG1lbWJlciBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjb21wb25lbnQgd2hlbiB0aGUKKyAgICAgICAgY29tcG9uZW50IGlzIGZpcnN0IGxvYWRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGFjY2VzcyB0aGlzCiAgICAgICAgIGRhdGEgYXJlYS4gKi8KICAgICBPTVhfUFRSIHBDb21wb25lbnRQcml2YXRlOwogCi0gICAgLyoqIHBBcHBsaWNhdGlvblByaXZhdGUgaXMgYSBwb2ludGVyIHRoYXQgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIAotICAgICAgICBPTVhfR2V0SGFuZGxlIG1ldGhvZCwgYW5kIGNvbnRhaW5zIGFuIGFwcGxpY2F0aW9uIHByaXZhdGUgdmFsdWUgCi0gICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBJTCBjbGllbnQuICBUaGlzIGFwcGxpY2F0aW9uIHByaXZhdGUgZGF0YSBpcyAKKyAgICAvKiogcEFwcGxpY2F0aW9uUHJpdmF0ZSBpcyBhIHBvaW50ZXIgdGhhdCBpcyBhIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgT01YX0dldEhhbmRsZSBtZXRob2QsIGFuZCBjb250YWlucyBhbiBhcHBsaWNhdGlvbiBwcml2YXRlIHZhbHVlCisgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBJTCBjbGllbnQuICBUaGlzIGFwcGxpY2F0aW9uIHByaXZhdGUgZGF0YSBpcwogICAgICAgICByZXR1cm5lZCB0byB0aGUgSUwgQ2xpZW50IGJ5IE9NWCBpbiBhbGwgY2FsbGJhY2tzICovCiAgICAgT01YX1BUUiBwQXBwbGljYXRpb25Qcml2YXRlOwogCi0gICAgLyoqIHJlZmVyIHRvIE9NWF9HZXRDb21wb25lbnRWZXJzaW9uIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX0dldENvbXBvbmVudFZlcnNpb24gaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldENvbXBvbmVudFZlcnNpb24gbWV0aG9kLgogICAgICAqLwogICAgIE9NWF9FUlJPUlRZUEUgKCpHZXRDb21wb25lbnRWZXJzaW9uKSgKQEAgLTM1OCw3ICszNTgsNyBAQAogICAgICAgICAgICAgT01YX09VVCBPTVhfVkVSU0lPTlRZUEUqIHBTcGVjVmVyc2lvbiwKICAgICAgICAgICAgIE9NWF9PVVQgT01YX1VVSURUWVBFKiBwQ29tcG9uZW50VVVJRCk7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX1NlbmRDb21tYW5kIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX1NlbmRDb21tYW5kIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBTZW5kQ29tbWFuZCBtZXRob2QuCiAgICAgICovCiAgICAgT01YX0VSUk9SVFlQRSAoKlNlbmRDb21tYW5kKSgKQEAgLTM2Nyw0MyArMzY3LDQzIEBACiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBhcmFtMSwKICAgICAgICAgICAgIE9NWF9JTiAgT01YX1BUUiBwQ21kRGF0YSk7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX0dldFBhcmFtZXRlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgLyoqIHJlZmVyIHRvIE9NWF9HZXRQYXJhbWV0ZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldFBhcmFtZXRlciBtZXRob2QuCiAgICAgICovCiAgICAgT01YX0VSUk9SVFlQRSAoKkdldFBhcmFtZXRlcikoCi0gICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsIAotICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5QYXJhbUluZGV4LCAgCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9JTkRFWFRZUEUgblBhcmFtSW5kZXgsCiAgICAgICAgICAgICBPTVhfSU5PVVQgT01YX1BUUiBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKTsKIAogCi0gICAgLyoqIHJlZmVyIHRvIE9NWF9TZXRQYXJhbWV0ZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfU2V0UGFyYW1ldGVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBTZXRQYXJhbWV0ZXIgbWV0aG9kLgogICAgICAqLwogICAgIE9NWF9FUlJPUlRZUEUgKCpTZXRQYXJhbWV0ZXIpKAotICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LCAKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKICAgICAgICAgICAgIE9NWF9JTiAgT01YX0lOREVYVFlQRSBuSW5kZXgsCiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9QVFIgcENvbXBvbmVudFBhcmFtZXRlclN0cnVjdHVyZSk7CiAKIAotICAgIC8qKiByZWZlciB0byBPTVhfR2V0Q29uZmlnIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX0dldENvbmZpZyBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwKICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgR2V0Q29uZmlnIG1ldGhvZC4KICAgICAgKi8KICAgICBPTVhfRVJST1JUWVBFICgqR2V0Q29uZmlnKSgKICAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKLSAgICAgICAgICAgIE9NWF9JTiAgT01YX0lOREVYVFlQRSBuSW5kZXgsIAorICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5JbmRleCwKICAgICAgICAgICAgIE9NWF9JTk9VVCBPTVhfUFRSIHBDb21wb25lbnRDb25maWdTdHJ1Y3R1cmUpOwogCiAKLSAgICAvKiogcmVmZXIgdG8gT01YX1NldENvbmZpZyBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgLyoqIHJlZmVyIHRvIE9NWF9TZXRDb25maWcgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIFNldENvbmZpZyBtZXRob2QuCiAgICAgICovCiAgICAgT01YX0VSUk9SVFlQRSAoKlNldENvbmZpZykoCiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCi0gICAgICAgICAgICBPTVhfSU4gIE9NWF9JTkRFWFRZUEUgbkluZGV4LCAKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0lOREVYVFlQRSBuSW5kZXgsCiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9QVFIgcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZSk7CiAKIAotICAgIC8qKiByZWZlciB0byBPTVhfR2V0RXh0ZW5zaW9uSW5kZXggaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfR2V0RXh0ZW5zaW9uSW5kZXggaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldEV4dGVuc2lvbkluZGV4IG1ldGhvZC4KICAgICAgKi8KICAgICBPTVhfRVJST1JUWVBFICgqR2V0RXh0ZW5zaW9uSW5kZXgpKApAQCAtNDEyLDUwICs0MTIsNTAgQEAKICAgICAgICAgICAgIE9NWF9PVVQgT01YX0lOREVYVFlQRSogcEluZGV4VHlwZSk7CiAKIAotICAgIC8qKiByZWZlciB0byBPTVhfR2V0U3RhdGUgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfR2V0U3RhdGUgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldFN0YXRlIG1ldGhvZC4KICAgICAgKi8KICAgICBPTVhfRVJST1JUWVBFICgqR2V0U3RhdGUpKAogICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAogICAgICAgICAgICAgT01YX09VVCBPTVhfU1RBVEVUWVBFKiBwU3RhdGUpOwogCi0gICAgCisKICAgICAvKiogVGhlIENvbXBvbmVudFR1bm5lbFJlcXVlc3QgbWV0aG9kIHdpbGwgaW50ZXJhY3Qgd2l0aCBhbm90aGVyIE9NWAogICAgICAgICBjb21wb25lbnQgdG8gZGV0ZXJtaW5lIGlmIHR1bm5lbGluZyBpcyBwb3NzaWJsZSBhbmQgdG8gc2V0dXAgdGhlCi0gICAgICAgIHR1bm5lbGluZy4gIFRoZSByZXR1cm4gY29kZXMgZm9yIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIAorICAgICAgICB0dW5uZWxpbmcuICBUaGUgcmV0dXJuIGNvZGVzIGZvciB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0bwogICAgICAgICBkZXRlcm1pbmUgaWYgdHVubmVsaW5nIGlzIG5vdCBwb3NzaWJsZSwgb3IgaWYgdHVubmVsaW5nIGlzIG5vdAotICAgICAgICBzdXBwb3J0ZWQuICAKLSAgICAgICAgCi0gICAgICAgIEJhc2UgcHJvZmlsZSBjb21wb25lbnRzIChpLmUuIG5vbi1pbnRlcm9wKSBkbyBub3Qgc3VwcG9ydCB0aGlzCi0gICAgICAgIG1ldGhvZCBhbmQgc2hvdWxkIHJldHVybiBPTVhfRXJyb3JOb3RJbXBsZW1lbnRlZCAKKyAgICAgICAgc3VwcG9ydGVkLgogCi0gICAgICAgIFRoZSBpbnRlcm9wIHByb2ZpbGUgY29tcG9uZW50IE1VU1Qgc3VwcG9ydCB0dW5uZWxpbmcgdG8gYW5vdGhlciAKLSAgICAgICAgaW50ZXJvcCBwcm9maWxlIGNvbXBvbmVudCB3aXRoIGEgY29tcGF0aWJsZSBwb3J0IHBhcmFtZXRlcnMuICAKKyAgICAgICAgQmFzZSBwcm9maWxlIGNvbXBvbmVudHMgKGkuZS4gbm9uLWludGVyb3ApIGRvIG5vdCBzdXBwb3J0IHRoaXMKKyAgICAgICAgbWV0aG9kIGFuZCBzaG91bGQgcmV0dXJuIE9NWF9FcnJvck5vdEltcGxlbWVudGVkCisKKyAgICAgICAgVGhlIGludGVyb3AgcHJvZmlsZSBjb21wb25lbnQgTVVTVCBzdXBwb3J0IHR1bm5lbGluZyB0byBhbm90aGVyCisgICAgICAgIGludGVyb3AgcHJvZmlsZSBjb21wb25lbnQgd2l0aCBhIGNvbXBhdGlibGUgcG9ydCBwYXJhbWV0ZXJzLgogICAgICAgICBBIGNvbXBvbmVudCBtYXkgYWxzbyBzdXBwb3J0IHByb3ByaWV0YXJ5IGNvbW11bmljYXRpb24uCi0gICAgICAgIAotICAgICAgICBJZiBwcm9wcmlldGFyeSBjb21tdW5pY2F0aW9uIGlzIHN1cHBvcnRlZCB0aGUgbmVnb3RpYXRpb24gb2YgCi0gICAgICAgIHByb3ByaWV0YXJ5IGNvbW11bmljYXRpb24gaXMgZG9uZSBvdXRzaWRlIG9mIE9NWCBpbiBhIHZlbmRvciAKLSAgICAgICAgc3BlY2lmaWMgd2F5LiBJdCBpcyBvbmx5IHJlcXVpcmVkIHRoYXQgdGhlIHByb3BlciByZXN1bHQgYmUgCi0gICAgICAgIHJldHVybmVkIGFuZCB0aGUgZGV0YWlscyBvZiBob3cgdGhlIHNldHVwIGlzIGRvbmUgaXMgbGVmdCAKLSAgICAgICAgdG8gdGhlIGNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbi4gIAotICAgIAorCisgICAgICAgIElmIHByb3ByaWV0YXJ5IGNvbW11bmljYXRpb24gaXMgc3VwcG9ydGVkIHRoZSBuZWdvdGlhdGlvbiBvZgorICAgICAgICBwcm9wcmlldGFyeSBjb21tdW5pY2F0aW9uIGlzIGRvbmUgb3V0c2lkZSBvZiBPTVggaW4gYSB2ZW5kb3IKKyAgICAgICAgc3BlY2lmaWMgd2F5LiBJdCBpcyBvbmx5IHJlcXVpcmVkIHRoYXQgdGhlIHByb3BlciByZXN1bHQgYmUKKyAgICAgICAgcmV0dXJuZWQgYW5kIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgc2V0dXAgaXMgZG9uZSBpcyBsZWZ0CisgICAgICAgIHRvIHRoZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24uCisKICAgICAgICAgV2hlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gblBvcnQgaW4gYW4gb3V0cHV0IHBvcnQsIHRoZQogICAgICAgICBjb21wb25lbnQgd2lsbDoKLSAgICAgICAgMS4gIFBvcHVsYXRlIHRoZSBwVHVubmVsU2V0dXAgc3RydWN0dXJlIHdpdGggdGhlIG91dHB1dCBwb3J0J3MgCisgICAgICAgIDEuICBQb3B1bGF0ZSB0aGUgcFR1bm5lbFNldHVwIHN0cnVjdHVyZSB3aXRoIHRoZSBvdXRwdXQgcG9ydCdzCiAgICAgICAgICAgICByZXF1aXJlbWVudHMgYW5kIGNvbnN0cmFpbnRzIGZvciB0aGUgdHVubmVsLgogCiAgICAgICAgIFdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCB3aGVuIG5Qb3J0IGluIGFuIGlucHV0IHBvcnQsIHRoZQogICAgICAgICBjb21wb25lbnQgd2lsbDoKLSAgICAgICAgMS4gIFF1ZXJ5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBvdXRwdXQgcG9ydCB0byAKKyAgICAgICAgMS4gIFF1ZXJ5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBvdXRwdXQgcG9ydCB0bwogICAgICAgICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBwb3J0cyBhcmUgY29tcGF0aWJsZSBmb3IgdHVubmVsaW5nCiAgICAgICAgIDIuICBJZiB0aGUgcG9ydHMgYXJlIGNvbXBhdGlibGUsIHRoZSBjb21wb25lbnQgc2hvdWxkIHN0b3JlCiAgICAgICAgICAgICB0aGUgdHVubmVsIHN0ZXAgcHJvdmlkZWQgYnkgdGhlIG91dHB1dCBwb3J0CiAgICAgICAgIDMuICBEZXRlcm1pbmUgd2hpY2ggcG9ydCAoZWl0aGVyIGlucHV0IG9yIG91dHB1dCkgaXMgdGhlIGJ1ZmZlcgogICAgICAgICAgICAgc3VwcGxpZXIsIGFuZCBjYWxsIE9NWF9TZXRQYXJhbWV0ZXIgb24gdGhlIG91dHB1dCBwb3J0IHRvCiAgICAgICAgICAgICBpbmRpY2F0ZSB0aGlzIHNlbGVjdGlvbi4KLSAgICAgICAgCisKICAgICAgICAgVGhlIGNvbXBvbmVudCB3aWxsIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgotICAgIAorCiAgICAgICAgIEBwYXJhbSBbaW5dIGhDb21wCiAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIG1ldGhvZC4KQEAgLTQ2Myw3ICs0NjMsNyBAQAogICAgICAgICAgICAgblBvcnQgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHBvcnQgb24gdGhlIGNvbXBvbmVudCB0byBiZSB1c2VkCiAgICAgICAgICAgICBmb3IgdHVubmVsaW5nLgogICAgICAgICBAcGFyYW0gW2luXSBoVHVubmVsZWRDb21wCi0gICAgICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byB0dW5uZWwgd2l0aC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCAKKyAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIHR1bm5lbCB3aXRoLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgbWV0aG9kLiAgV2hlbgogICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgMHgwIHRoZSBjb21wb25lbnQgc2hvdWxkIHNldHVwIHRoZSBwb3J0IGZvcgogICAgICAgICAgICAgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIENsaWVudC4KQEAgLTQ4Niw5ICs0ODYsOSBAQAogICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnQsCiAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaFR1bm5lbGVkQ29tcCwKICAgICAgICAgT01YX0lOICBPTVhfVTMyIG5UdW5uZWxlZFBvcnQsCi0gICAgICAgIE9NWF9JTk9VVCAgT01YX1RVTk5FTFNFVFVQVFlQRSogcFR1bm5lbFNldHVwKTsgCisgICAgICAgIE9NWF9JTk9VVCAgT01YX1RVTk5FTFNFVFVQVFlQRSogcFR1bm5lbFNldHVwKTsKIAotICAgIC8qKiByZWZlciB0byBPTVhfVXNlQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX1VzZUJ1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwKICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgVXNlQnVmZmVyIG1ldGhvZC4KICAgICAgICAgQGluZ3JvdXAgYnVmCiAgICAgICovCkBAIC01MDAsNyArNTAwLDcgQEAKICAgICAgICAgICAgIE9NWF9JTiBPTVhfVTMyIG5TaXplQnl0ZXMsCiAgICAgICAgICAgICBPTVhfSU4gT01YX1U4KiBwQnVmZmVyKTsKIAotICAgIC8qKiByZWZlciB0byBPTVhfQWxsb2NhdGVCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfQWxsb2NhdGVCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEFsbG9jYXRlQnVmZmVyIG1ldGhvZC4KICAgICAgICAgQGluZ3JvdXAgYnVmCiAgICAgICovCkBAIC01MTEsNyArNTExLDcgQEAKICAgICAgICAgICAgIE9NWF9JTiBPTVhfUFRSIHBBcHBQcml2YXRlLAogICAgICAgICAgICAgT01YX0lOIE9NWF9VMzIgblNpemVCeXRlcyk7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX0ZyZWVCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfRnJlZUJ1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwKICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgRnJlZUJ1ZmZlciBtZXRob2QuCiAgICAgICAgIEBpbmdyb3VwIGJ1ZgogICAgICAqLwpAQCAtNTIwLDcgKzUyMCw3IEBACiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnRJbmRleCwKICAgICAgICAgICAgIE9NWF9JTiAgT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOwogCi0gICAgLyoqIHJlZmVyIHRvIE9NWF9FbXB0eVRoaXNCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfRW1wdHlUaGlzQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBFbXB0eVRoaXNCdWZmZXIgbWV0aG9kLgogICAgICAgICBAaW5ncm91cCBidWYKICAgICAgKi8KQEAgLTUyOCw3ICs1MjgsNyBAQAogICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAogICAgICAgICAgICAgT01YX0lOICBPTVhfQlVGRkVSSEVBREVSVFlQRSogcEJ1ZmZlcik7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX0ZpbGxUaGlzQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX0ZpbGxUaGlzQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBGaWxsVGhpc0J1ZmZlciBtZXRob2QuCiAgICAgICAgIEBpbmdyb3VwIGJ1ZgogICAgICAqLwpAQCAtNTQzLDEwICs1NDMsMTAgQEAKICAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIEdldEhhbmRsZSBmdW5jdGlvbi4KICAgICAgICAgQHBhcmFtIFtpbl0gcENhbGxiYWNrcwotICAgICAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQ0FMTEJBQ0tUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHByb3ZpZGUgdGhlIAorICAgICAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQ0FMTEJBQ0tUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHByb3ZpZGUgdGhlCiAgICAgICAgICAgICBjYWxsYmFjayBpbmZvcm1hdGlvbiB0byB0aGUgY29tcG9uZW50CiAgICAgICAgIEBwYXJhbSBbaW5dIHBBcHBEYXRhCi0gICAgICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUuICBJdCBpcyBhbnRpY2lwYXRlZCB0aGF0IAorICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlLiAgSXQgaXMgYW50aWNpcGF0ZWQgdGhhdAogICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcGFzcyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSBvciBhICJ0aGlzCiAgICAgICAgICAgICBwb2ludGVyIiBpbiB0aGlzIGFyZWEgdG8gYWxsb3cgdGhlIGNhbGxiYWNrIChpbiB0aGUgYXBwbGljYXRpb24pCiAgICAgICAgICAgICB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGwKQEAgLTU1Niw3ICs1NTYsNyBAQAogICAgICAqLwogICAgIE9NWF9FUlJPUlRZUEUgKCpTZXRDYWxsYmFja3MpKAogICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAotICAgICAgICAgICAgT01YX0lOICBPTVhfQ0FMTEJBQ0tUWVBFKiBwQ2FsbGJhY2tzLCAKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0NBTExCQUNLVFlQRSogcENhbGxiYWNrcywKICAgICAgICAgICAgIE9NWF9JTiAgT01YX1BUUiBwQXBwRGF0YSk7CiAKICAgICAvKiogQ29tcG9uZW50RGVJbml0IG1ldGhvZCBpcyB1c2VkIHRvIGRlaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50CkBAIC01ODMsOCArNTgzLDggQEAKIAogICAgIE9NWF9FUlJPUlRZUEUgKCpDb21wb25lbnRSb2xlRW51bSkoCiAgICAgICAgIE9NWF9JTiBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAotCQlPTVhfT1VUIE9NWF9VOCAqY1JvbGUsCi0JCU9NWF9JTiBPTVhfVTMyIG5JbmRleCk7CisgICAgICAgIE9NWF9PVVQgT01YX1U4ICpjUm9sZSwKKyAgICAgICAgT01YX0lOIE9NWF9VMzIgbkluZGV4KTsKIAogfSBPTVhfQ09NUE9ORU5UVFlQRTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db250ZW50UGlwZS5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db250ZW50UGlwZS5oCmluZGV4IGVlOWU0ZGIuLjAyMjRjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29udGVudFBpcGUuaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbnRlbnRQaXBlLmgKQEAgLTE2LDI1ICsxNiwyNSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwogCkBAIC04MSw4MyArODEsODMgQEAKIAogLyoqIE1hcCB0eXBlcyBmcm9tIE9NWCBzdGFuZGFyZCB0eXBlcyBvbmx5IGhlcmUgc28gaW50ZXJmYWNlIGlzIGFzIGdlbmVyaWMgYXMgcG9zc2libGUuICovCiB0eXBlZGVmIE9NWF9VMzIgICAgQ1ByZXN1bHQ7Ci10eXBlZGVmIGNoYXIgKiAgICAgQ1BzdHJpbmc7ICAKK3R5cGVkZWYgY2hhciAqICAgICBDUHN0cmluZzsKIHR5cGVkZWYgdm9pZCAqICAgICBDUGhhbmRsZTsKIHR5cGVkZWYgT01YX1UzMiAgICBDUHVpbnQ7Ci10eXBlZGVmIE9NWF9TMzIgICAgQ1BpbnQ7ICAKLXR5cGVkZWYgY2hhciAgICAgICBDUGJ5dGU7ICAKK3R5cGVkZWYgT01YX1MzMiAgICBDUGludDsKK3R5cGVkZWYgY2hhciAgICAgICBDUGJ5dGU7CiB0eXBlZGVmIE9NWF9CT09MICAgQ1Bib29sOwogCi0vKiogZW51bWVyYXRpb24gb2Ygb3JpZ2luIHR5cGVzIHVzZWQgaW4gdGhlIENQX1BJUEVUWVBFJ3MgU2VlayBmdW5jdGlvbiAKKy8qKiBlbnVtZXJhdGlvbiBvZiBvcmlnaW4gdHlwZXMgdXNlZCBpbiB0aGUgQ1BfUElQRVRZUEUncyBTZWVrIGZ1bmN0aW9uCiAgKiBAaW5ncm91cCBjcAogICovCiB0eXBlZGVmIGVudW0gQ1BfT1JJR0lOVFlQRSB7Ci0gICAgQ1BfT3JpZ2luQmVnaW4sICAgICAgCi0gICAgQ1BfT3JpZ2luQ3VyLCAgICAgIAotICAgIENQX09yaWdpbkVuZCwgICAgICAKLSAgICBDUF9PcmlnaW5LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgQ1BfT3JpZ2luQmVnaW4sCisgICAgQ1BfT3JpZ2luQ3VyLAorICAgIENQX09yaWdpbkVuZCwKKyAgICBDUF9PcmlnaW5LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBDUF9PcmlnaW5WZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIENQX09yaWdpbk1heCA9IDBYN0ZGRkZGRkYKIH0gQ1BfT1JJR0lOVFlQRTsKIAotLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRhY3QgYWNjZXNzIHR5cGVzIHVzZWQgaW4gdGhlIENQX1BJUEVUWVBFJ3MgT3BlbiBmdW5jdGlvbiAKKy8qKiBlbnVtZXJhdGlvbiBvZiBjb250YWN0IGFjY2VzcyB0eXBlcyB1c2VkIGluIHRoZSBDUF9QSVBFVFlQRSdzIE9wZW4gZnVuY3Rpb24KICAqIEBpbmdyb3VwIGNwCiAgKi8KIHR5cGVkZWYgZW51bSBDUF9BQ0NFU1NUWVBFIHsKLSAgICBDUF9BY2Nlc3NSZWFkLCAgICAgIAotICAgIENQX0FjY2Vzc1dyaXRlLCAgCi0gICAgQ1BfQWNjZXNzUmVhZFdyaXRlICwgIAotICAgIENQX0FjY2Vzc0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBDUF9BY2Nlc3NSZWFkLAorICAgIENQX0FjY2Vzc1dyaXRlLAorICAgIENQX0FjY2Vzc1JlYWRXcml0ZSwKKyAgICBDUF9BY2Nlc3NLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBDUF9BY2Nlc3NWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIENQX0FjY2Vzc01heCA9IDBYN0ZGRkZGRkYKIH0gQ1BfQUNDRVNTVFlQRTsKIAotLyoqIGVudW1lcmF0aW9uIG9mIHJlc3VsdHMgcmV0dXJuZWQgYnkgdGhlIENQX1BJUEVUWVBFJ3MgQ2hlY2tBdmFpbGFibGVCeXRlcyBmdW5jdGlvbiAKKy8qKiBlbnVtZXJhdGlvbiBvZiByZXN1bHRzIHJldHVybmVkIGJ5IHRoZSBDUF9QSVBFVFlQRSdzIENoZWNrQXZhaWxhYmxlQnl0ZXMgZnVuY3Rpb24KICAqIEBpbmdyb3VwIGNwCiAgKi8KIHR5cGVkZWYgZW51bSBDUF9DSEVDS0JZVEVTUkVTVUxUVFlQRQogewotICAgIENQX0NoZWNrQnl0ZXNPaywgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlcmUgYXJlIGF0IGxlYXN0IHRoZSByZXF1ZXN0IG51bWJlciAKKyAgICBDUF9DaGVja0J5dGVzT2ssICAgICAgICAgICAgICAgICAgICAvKio8IFRoZXJlIGFyZSBhdCBsZWFzdCB0aGUgcmVxdWVzdCBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBieXRlcyBhdmFpbGFibGUgKi8KLSAgICBDUF9DaGVja0J5dGVzTm90UmVhZHksICAgICAgICAgICAgICAvKio8IFRoZSBwaXBlIGlzIHN0aWxsIHJldHJpZXZpbmcgYnl0ZXMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByZXNlbnRseSBsYWNrcyBzdWZmaWNpZW50IGJ5dGVzLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGV5IGFyZSAKKyAgICBDUF9DaGVja0J5dGVzTm90UmVhZHksICAgICAgICAgICAgICAvKio8IFRoZSBwaXBlIGlzIHN0aWxsIHJldHJpZXZpbmcgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJlc2VudGx5IGxhY2tzIHN1ZmZpY2llbnQgYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhleSBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUuICovCi0gICAgQ1BfQ2hlY2tCeXRlc0luc3VmZmljaWVudEJ5dGVzICAsICAgICAvKio8IFRoZSBwaXBlIGhhcyByZXRyaWV2ZWQgYWxsIGJ5dGVzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aG9zZSBhdmFpbGFibGUgYXJlIGxlc3MgdGhhbiB0aG9zZSAKKyAgICBDUF9DaGVja0J5dGVzSW5zdWZmaWNpZW50Qnl0ZXMsICAgICAvKio8IFRoZSBwaXBlIGhhcyByZXRyaWV2ZWQgYWxsIGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRob3NlIGF2YWlsYWJsZSBhcmUgbGVzcyB0aGFuIHRob3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkICovCiAgICAgQ1BfQ2hlY2tCeXRlc0F0RW5kT2ZTdHJlYW0sICAgICAgICAgLyoqPCBUaGUgcGlwZSBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHN0cmVhbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubyBtb3JlIGJ5dGVzIGFyZSBhdmFpbGFibGUuICovCiAgICAgQ1BfQ2hlY2tCeXRlc091dE9mQnVmZmVycywgICAgICAgICAgLyoqPCBBbGwgcmVhZC93cml0ZSBidWZmZXJzIGFyZSBjdXJyZW50bHkgaW4gdXNlLiAqLwotICAgIENQX0NoZWNrQnl0ZXNLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgQ1BfQ2hlY2tCeXRlc0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIENQX0NoZWNrQnl0ZXNWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIENQX0NoZWNrQnl0ZXNNYXggPSAwWDdGRkZGRkZGCiB9IENQX0NIRUNLQllURVNSRVNVTFRUWVBFOwogCi0vKiogZW51bWVyYXRpb24gb2YgY29udGVudCBwaXBlIGV2ZW50cyBzZW50IHRvIHRoZSBjbGllbnQgY2FsbGJhY2suIAorLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRlbnQgcGlwZSBldmVudHMgc2VudCB0byB0aGUgY2xpZW50IGNhbGxiYWNrLgogICogQGluZ3JvdXAgY3AKICAqLwogdHlwZWRlZiBlbnVtIENQX0VWRU5UVFlQRXsKLSAgICBDUF9CeXRlc0F2YWlsYWJsZSwgICAgICAJICAgIC8qKiBieXRlcyByZXF1ZXN0ZWQgaW4gYSBDaGVja0F2YWlsYWJsZUJ5dGVzIGNhbGwgYXJlIG5vdyBhdmFpbGFibGUqLwotICAgIENQX092ZXJmbG93LCAgCQkgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCi0gICAgQ1BfUGlwZURpc2Nvbm5lY3RlZCAgLCAgCQkgICAgLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRlbnQgcGlwZSBldmVudHMgc2VudCB0byB0aGUgY2xpZW50IGNhbGxiYWNrKi8KLSAgICBDUF9FdmVudEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBDUF9CeXRlc0F2YWlsYWJsZSwgICAgICAgICAgICAgICAgICAgICAgLyoqIGJ5dGVzIHJlcXVlc3RlZCBpbiBhIENoZWNrQXZhaWxhYmxlQnl0ZXMgY2FsbCBhcmUgbm93IGF2YWlsYWJsZSovCisgICAgQ1BfT3ZlcmZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCisgICAgQ1BfUGlwZURpc2Nvbm5lY3RlZCwgICAgICAgICAgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCisgICAgQ1BfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBDUF9FdmVudFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgQ1BfRXZlbnRNYXggPSAwWDdGRkZGRkZGCiB9IENQX0VWRU5UVFlQRTsKIAotLyoqIGNvbnRlbnQgcGlwZSBkZWZpbml0aW9uIAorLyoqIGNvbnRlbnQgcGlwZSBkZWZpbml0aW9uCiAgKiBAaW5ncm91cCBjcAogICovCiB0eXBlZGVmIHN0cnVjdCBDUF9QSVBFVFlQRQogewotICAgIC8qKiBPcGVuIGEgY29udGVudCBzdHJlYW0gZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gKi8gCisgICAgLyoqIE9wZW4gYSBjb250ZW50IHN0cmVhbSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiAqLwogICAgIENQcmVzdWx0ICgqT3BlbikoIENQaGFuZGxlKiBoQ29udGVudCwgQ1BzdHJpbmcgc3pVUkksIENQX0FDQ0VTU1RZUEUgZUFjY2VzcyApOwogCi0gICAgLyoqIENsb3NlIGEgY29udGVudCBzdHJlYW0uICovIAorICAgIC8qKiBDbG9zZSBhIGNvbnRlbnQgc3RyZWFtLiAqLwogICAgIENQcmVzdWx0ICgqQ2xvc2UpKCBDUGhhbmRsZSBoQ29udGVudCApOwogCi0gICAgLyoqIENyZWF0ZSBhIGNvbnRlbnQgc291cmNlIGFuZCBvcGVuIGl0IGZvciB3cml0aW5nLiAqLyAKKyAgICAvKiogQ3JlYXRlIGEgY29udGVudCBzb3VyY2UgYW5kIG9wZW4gaXQgZm9yIHdyaXRpbmcuICovCiAgICAgQ1ByZXN1bHQgKCpDcmVhdGUpKCBDUGhhbmRsZSAqaENvbnRlbnQsIENQc3RyaW5nIHN6VVJJICk7CiAKICAgICAvKiogQ2hlY2sgdGhlIHRoYXQgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgKGRlcGVuZGluZyBvbiBhY2Nlc3MgdHlwZSkuKi8KQEAgLTE3MSwxOSArMTcxLDE5IEBACiAKICAgICAvKiogUmV0cmlldmUgZGF0YSBvZiB0aGUgc3BlY2lmaWVkIHNpemUgZnJvbSB0aGUgY29udGVudCBzdHJlYW0gKGFkdmFuY2UgY29udGVudCBwb2ludGVyIGJ5IHNpemUgb2YgZGF0YSkuCiAgICAgICAgTm90ZTogcGlwZSBjbGllbnQgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3Igc21hbGwgaGlnaCBmcmVxdWVuY3kgcmVhZHMuICovCi0gICAgQ1ByZXN1bHQgKCpSZWFkKSggQ1BoYW5kbGUgaENvbnRlbnQsIENQYnl0ZSAqcERhdGEsIENQdWludCBuU2l6ZSk7IAorICAgIENQcmVzdWx0ICgqUmVhZCkoIENQaGFuZGxlIGhDb250ZW50LCBDUGJ5dGUgKnBEYXRhLCBDUHVpbnQgblNpemUpOwogCi0gICAgLyoqIFJldHJpZXZlIGEgYnVmZmVyIGFsbG9jYXRlZCBieSB0aGUgcGlwZSB0aGF0IGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLiAKKyAgICAvKiogUmV0cmlldmUgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHRoZSBwaXBlIHRoYXQgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCiAgICAgICAgQnVmZmVyIGNvbnRhaW5zIHRoZSBuZXh0IGJsb2NrIG9mIGJ5dGVzLCBhcyBzcGVjaWZpZWQgYnkgblNpemUsIG9mIHRoZSBjb250ZW50LiBuU2l6ZSBhbHNvCi0gICAgICAgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgYWN0dWFsbHkgcmVhZC4gQ29udGVudCBwb2ludGVyIGFkdmFuY2VzIHRoZSBieSB0aGUgcmV0dXJuZWQgc2l6ZS4gCi0gICAgICAgTm90ZTogcGlwZSBwcm92aWRlcyBwb2ludGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGFwcHJvcHJpYXRlIGZvciBsYXJnZSByZWFkcy4gVGhlIGNsaWVudCBtdXN0IGNhbGwgCi0gICAgICAgUmVsZWFzZVJlYWRCdWZmZXIgd2hlbiBkb25lIHdpdGggYnVmZmVyLiAKKyAgICAgICByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBibG9jayBhY3R1YWxseSByZWFkLiBDb250ZW50IHBvaW50ZXIgYWR2YW5jZXMgdGhlIGJ5IHRoZSByZXR1cm5lZCBzaXplLgorICAgICAgIE5vdGU6IHBpcGUgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3IgbGFyZ2UgcmVhZHMuIFRoZSBjbGllbnQgbXVzdCBjYWxsCisgICAgICAgUmVsZWFzZVJlYWRCdWZmZXIgd2hlbiBkb25lIHdpdGggYnVmZmVyLgogCiAgICAgICAgSW4gc29tZSBjYXNlcyB0aGUgcmVxdWVzdGVkIGJsb2NrIG1heSBub3QgcmVzaWRlIGluIGNvbnRpZ3VvdXMgbWVtb3J5IHdpdGhpbiB0aGUKLSAgICAgICBwaXBlIGltcGxlbWVudGF0aW9uLiBGb3IgaW5zdGFuY2UgaWYgdGhlIHBpcGUgbGV2ZXJhZ2VzIGEgY2lyY3VsYXIgYnVmZmVyIHRoZW4gdGhlIHJlcXVlc3RlZCAKLSAgICAgICBibG9jayBtYXkgc3RyYWRkbGUgdGhlIGJvdW5kYXJ5IG9mIHRoZSBjaXJjdWxhciBidWZmZXIuIEJ5IGRlZmF1bHQgYSBwaXBlIGltcGxlbWVudGF0aW9uIAorICAgICAgIHBpcGUgaW1wbGVtZW50YXRpb24uIEZvciBpbnN0YW5jZSBpZiB0aGUgcGlwZSBsZXZlcmFnZXMgYSBjaXJjdWxhciBidWZmZXIgdGhlbiB0aGUgcmVxdWVzdGVkCisgICAgICAgYmxvY2sgbWF5IHN0cmFkZGxlIHRoZSBib3VuZGFyeSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyLiBCeSBkZWZhdWx0IGEgcGlwZSBpbXBsZW1lbnRhdGlvbgogICAgICAgIHBlcmZvcm1zIGEgY29weSBpbiB0aGlzIGNhc2UgdG8gcHJvdmlkZSB0aGUgYmxvY2sgdG8gdGhlIHBpcGUgY2xpZW50IGluIG9uZSBjb250aWd1b3VzIGJ1ZmZlci4KLSAgICAgICBJZiwgaG93ZXZlciwgdGhlIGNsaWVudCBzZXRzIGJGb3JiaWRDb3B5LCB0aGVuIHRoZSBwaXBlIHJldHVybnMgb25seSB0aG9zZSBieXRlcyBwcmVjZWRpbmcgdGhlIG1lbW9yeSAKKyAgICAgICBJZiwgaG93ZXZlciwgdGhlIGNsaWVudCBzZXRzIGJGb3JiaWRDb3B5LCB0aGVuIHRoZSBwaXBlIHJldHVybnMgb25seSB0aG9zZSBieXRlcyBwcmVjZWRpbmcgdGhlIG1lbW9yeQogICAgICAgIGJvdW5kYXJ5LiBIZXJlIHRoZSBjbGllbnQgbWF5IHJldHJpZXZlIHRoZSBkYXRhIGluIHNlZ21lbnRzIG92ZXIgc3VjY2Vzc2l2ZSBjYWxscy4gKi8KICAgICBDUHJlc3VsdCAoKlJlYWRCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICoqcHBCdWZmZXIsIENQdWludCAqblNpemUsIENQYm9vbCBiRm9yYmlkQ29weSk7CiAKQEAgLTE5MiwxNCArMTkyLDE0IEBACiAKICAgICAvKiogV3JpdGUgZGF0YSBvZiB0aGUgc3BlY2lmaWVkIHNpemUgdG8gdGhlIGNvbnRlbnQgKGFkdmFuY2UgY29udGVudCBwb2ludGVyIGJ5IHNpemUgb2YgZGF0YSkuCiAgICAgICAgTm90ZTogcGlwZSBjbGllbnQgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3Igc21hbGwgaGlnaCBmcmVxdWVuY3kgd3JpdGVzLiAqLwotICAgIENQcmVzdWx0ICgqV3JpdGUpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpkYXRhLCBDUHVpbnQgblNpemUpOyAKKyAgICBDUHJlc3VsdCAoKldyaXRlKSggQ1BoYW5kbGUgaENvbnRlbnQsIENQYnl0ZSAqZGF0YSwgQ1B1aW50IG5TaXplKTsKIAotICAgIC8qKiBSZXRyaWV2ZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdGhlIHBpcGUgdXNlZCB0byB3cml0ZSBkYXRhIHRvIHRoZSBjb250ZW50LiAKKyAgICAvKiogUmV0cmlldmUgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHRoZSBwaXBlIHVzZWQgdG8gd3JpdGUgZGF0YSB0byB0aGUgY29udGVudC4KICAgICAgICBDbGllbnQgd2lsbCBmaWxsIGJ1ZmZlciB3aXRoIG91dHB1dCBkYXRhLiBOb3RlOiBwaXBlIHByb3ZpZGVzIHBvaW50ZXIuIFRoaXMgZnVuY3Rpb24gaXMgYXBwcm9wcmlhdGUKICAgICAgICBmb3IgbGFyZ2Ugd3JpdGVzLiBUaGUgY2xpZW50IG11c3QgY2FsbCBXcml0ZUJ1ZmZlciB3aGVuIGRvbmUgaXQgaGFzIGZpbGxlZCB0aGUgYnVmZmVyIHdpdGggZGF0YS4qLwogICAgIENQcmVzdWx0ICgqR2V0V3JpdGVCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICoqcHBCdWZmZXIsIENQdWludCBuU2l6ZSk7CiAKLSAgICAvKiogRGVsaXZlciBhIGJ1ZmZlciBvYnRhaW5lZCB2aWEgR2V0V3JpdGVCdWZmZXIgdG8gdGhlIHBpcGUuIFBpcGUgd2lsbCB3cml0ZSB0aGUgCisgICAgLyoqIERlbGl2ZXIgYSBidWZmZXIgb2J0YWluZWQgdmlhIEdldFdyaXRlQnVmZmVyIHRvIHRoZSBwaXBlLiBQaXBlIHdpbGwgd3JpdGUgdGhlCiAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgdG8gY29udGVudCBhbmQgYWR2YW5jZSBjb250ZW50IHBvaW50ZXIgYnkgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAqLwogICAgIENQcmVzdWx0ICgqV3JpdGVCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpwQnVmZmVyLCBDUHVpbnQgbkZpbGxlZFNpemUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvcmUuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCmluZGV4IDlmYjBmNmYuLjEyZjJiM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCkBAIC0xNiwyNSArMTYsMjUgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuIAotICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAotICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCi0gKiAKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQogICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCi0gKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KIApAQCAtNTMsMTQgKzUzLDE0IEBACiAKIC8qIEVhY2ggT01YIGhlYWRlciBzaGFsbCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlCiAgKiAgaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCi0gKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCisgKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkKICAqLwogCiAjaW5jbHVkZSA8T01YX0luZGV4Lmg+CiAKIAogLyoqIFRoZSBPTVhfQ09NTUFORFRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBhY3Rpb24gaW4gdGhlCi0gKiAgT01YX1NlbmRDb21tYW5kIG1hY3JvLiAgCisgKiAgT01YX1NlbmRDb21tYW5kIG1hY3JvLgogICogIEBpbmdyb3VwIGNvcmUKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9DT01NQU5EVFlQRQpAQCAtNzAsNyArNzAsNyBAQAogICAgIE9NWF9Db21tYW5kUG9ydERpc2FibGUsIC8qKjwgRGlzYWJsZSBhIHBvcnQgb24gYSBjb21wb25lbnQuICovCiAgICAgT01YX0NvbW1hbmRQb3J0RW5hYmxlLCAgLyoqPCBFbmFibGUgYSBwb3J0IG9uIGEgY29tcG9uZW50LiAqLwogICAgIE9NWF9Db21tYW5kTWFya0J1ZmZlciwgIC8qKjwgTWFyayBhIGNvbXBvbmVudC9idWZmZXIgZm9yIG9ic2VydmF0aW9uICovCi0gICAgT01YX0NvbW1hbmRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0NvbW1hbmRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQ29tbWFuZFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0NvbW1hbmRNYXggPSAwWDdGRkZGRkZGCiB9IE9NWF9DT01NQU5EVFlQRTsKQEAgLTkzLDI4ICs5MywyOCBAQAogICogIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGFuZCB3aWxsIHRyYW5zaXRpb24gdG8gdGhlIGlkbGUgc3RhdGUgaWYgdGhlCiAgKiAgYWxsb2NhdGlvbiBpcyBzdWNjZXNzZnVsLiAgSWYgdGhlIGNvbXBvbmVudCBjYW5ub3Qgc3VjY2Vzc2Z1bGx5CiAgKiAgdHJhbnNpdGlvbiB0byB0aGUgaWRsZSBzdGF0ZSBmb3IgYW55IHJlYXNvbiwgdGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQKLSAqICBzaGFsbCBiZSBmdWxseSByb2xsZWQgYmFjayB0byB0aGUgTG9hZGVkIHN0YXRlIChlLmcuIGFsbCBhbGxvY2F0ZWQgCisgKiAgc2hhbGwgYmUgZnVsbHkgcm9sbGVkIGJhY2sgdG8gdGhlIExvYWRlZCBzdGF0ZSAoZS5nLiBhbGwgYWxsb2NhdGVkCiAgKiAgcmVzb3VyY2VzIHNoYWxsIGJlIHJlbGVhc2VkKS4gIFdoZW4gdGhlIGNvbXBvbmVudCByZWNlaXZlcyB0aGUgY29tbWFuZAogICogIHRvIGdvIHRvIHRoZSBFeGVjdXRpbmcgc3RhdGUsIGl0IHNoYWxsIGJlZ2luIHByb2Nlc3NpbmcgYnVmZmVycyBieQogICogIHNlbmRpbmcgYWxsIGlucHV0IGJ1ZmZlcnMgaXQgaG9sZHMgdG8gdGhlIGFwcGxpY2F0aW9uLiAgV2hpbGUKICAqICB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBJZGxlIHN0YXRlLCB0aGUgYXBwbGljYXRpb24gbWF5IGFsc28gc2VuZCB0aGUKICAqICBQYXVzZSBjb21tYW5kLiAgSWYgdGhlIGNvbXBvbmVudCByZWNlaXZlcyB0aGUgcGF1c2UgY29tbWFuZCB3aGlsZSBpbiB0aGUKLSAqICBJZGxlIHN0YXRlLCB0aGUgY29tcG9uZW50IHNoYWxsIHNlbmQgYWxsIGlucHV0IGJ1ZmZlcnMgaXQgaG9sZHMgdG8gdGhlIAorICogIElkbGUgc3RhdGUsIHRoZSBjb21wb25lbnQgc2hhbGwgc2VuZCBhbGwgaW5wdXQgYnVmZmVycyBpdCBob2xkcyB0byB0aGUKICAqICBhcHBsaWNhdGlvbiwgYnV0IHNoYWxsIG5vdCBiZWdpbiBwcm9jZXNzaW5nIGJ1ZmZlcnMuICBUaGlzIHdpbGwgYWxsb3cgdGhlCiAgKiAgYXBwbGljYXRpb24gdG8gcHJlZmlsbCBidWZmZXJzLgotICogCisgKgogICogIEBpbmdyb3VwIGNvbXAKICAqLwogCiB0eXBlZGVmIGVudW0gT01YX1NUQVRFVFlQRQogewotICAgIE9NWF9TdGF0ZUludmFsaWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIHRoYXQgaXQncyBpbnRlcm5hbCBkYXRhIAorICAgIE9NWF9TdGF0ZUludmFsaWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIHRoYXQgaXQncyBpbnRlcm5hbCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYXJlIGNvcnJ1cHRlZCB0byB0aGUgcG9pbnQgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYW5ub3QgZGV0ZXJtaW5lIGl0J3Mgc3RhdGUgcHJvcGVybHkgKi8KICAgICBPTVhfU3RhdGVMb2FkZWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGJlZW4gbG9hZGVkIGJ1dCBoYXMgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4gIFRoZSBPTVhfU2V0UGFyYW1ldGVyIG1hY3JvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgT01YX0dldFBhcmFtZXRlciBtYWNybyBhcmUgdGhlIG9ubHkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG1hY3JvcyBhbGxvd2VkIHRvIGJlIHNlbnQgdG8gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE9NWF9HZXRQYXJhbWV0ZXIgbWFjcm8gYXJlIHRoZSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG1hY3JvcyBhbGxvd2VkIHRvIGJlIHNlbnQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCBpbiB0aGlzIHN0YXRlLiAqLwogICAgIE9NWF9TdGF0ZUlkbGUsICAgICAgICAvKio8IGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUgY29tcG9uZW50IGlzIHJlYWR5IHRvCkBAIC0xMjIsMTcgKzEyMiwxNyBAQAogICAgIE9NWF9TdGF0ZUV4ZWN1dGluZywgICAvKio8IGNvbXBvbmVudCBoYXMgYWNjZXB0ZWQgdGhlIHN0YXJ0IGNvbW1hbmQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHByb2Nlc3NpbmcgZGF0YSAoaWYgZGF0YSBpcyBhdmFpbGFibGUpICovCiAgICAgT01YX1N0YXRlUGF1c2UsICAgICAgIC8qKjwgY29tcG9uZW50IGhhcyByZWNlaXZlZCBwYXVzZSBjb21tYW5kICovCi0gICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcywgLyoqPCBjb21wb25lbnQgaXMgd2FpdGluZyBmb3IgcmVzb3VyY2VzLCBlaXRoZXIgYWZ0ZXIgCisgICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcywgLyoqPCBjb21wb25lbnQgaXMgd2FpdGluZyBmb3IgcmVzb3VyY2VzLCBlaXRoZXIgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdGlvbiBvciBiZWZvcmUgaXQgZ2V0cyB0aGUgcmVzb3VyY2VzIHJlcXVlc3RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHNwZWNpZmljYXRpb24gZm9yIGNvbXBsZXRlIGRldGFpbHMuICovCi0gICAgT01YX1N0YXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9TdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9TdGF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1N0YXRlTWF4ID0gMFg3RkZGRkZGRgogfSBPTVhfU1RBVEVUWVBFOwogCi0vKiogVGhlIE9NWF9FUlJPUlRZUEUgZW51bWVyYXRpb24gZGVmaW5lcyB0aGUgc3RhbmRhcmQgT01YIEVycm9ycy4gIFRoZXNlIAotICogIGVycm9ycyBzaG91bGQgY292ZXIgbW9zdCBvZiB0aGUgY29tbW9uIGZhaWx1cmUgY2FzZXMuICBIb3dldmVyLCAKLSAqICB2ZW5kb3JzIGFyZSBmcmVlIHRvIGFkZCBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIG9mIHRoZWlyIG93biBhcyAKKy8qKiBUaGUgT01YX0VSUk9SVFlQRSBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGFuZGFyZCBPTVggRXJyb3JzLiAgVGhlc2UKKyAqICBlcnJvcnMgc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhlIGNvbW1vbiBmYWlsdXJlIGNhc2VzLiAgSG93ZXZlciwKKyAqICB2ZW5kb3JzIGFyZSBmcmVlIHRvIGFkZCBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIG9mIHRoZWlyIG93biBhcwogICogIGxvbmcgYXMgdGhleSBmb2xsb3cgdGhlc2UgcnVsZXM6CiAgKiAgMS4gIFZlbmRvciBlcnJvciBtZXNzYWdlcyBzaGFsbCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMHg5MDAwMDAwMCB0bwogICogICAgICAweDkwMDBGRkZGLgpAQCAtMjAzLDI1ICsyMDMsMjUgQEAKICAgLyoqIFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIHRyYW5zaXRpb24gaW50byB0aGUgc3RhdGUgeW91IGFyZSBhbHJlYWR5IGluICovCiAgIE9NWF9FcnJvclNhbWVTdGF0ZSA9IChPTVhfUzMyKSAweDgwMDAxMDEyLAogCi0gIC8qKiBSZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGFuIGV4ZWN1dGluZyBvciBwYXVzZWQgY29tcG9uZW50IGhhdmUgYmVlbiAKKyAgLyoqIFJlc291cmNlcyBhbGxvY2F0ZWQgdG8gYW4gZXhlY3V0aW5nIG9yIHBhdXNlZCBjb21wb25lbnQgaGF2ZSBiZWVuCiAgICAgICBwcmVlbXB0ZWQsIGNhdXNpbmcgdGhlIGNvbXBvbmVudCB0byByZXR1cm4gdG8gdGhlIGlkbGUgc3RhdGUgKi8KLSAgT01YX0Vycm9yUmVzb3VyY2VzUHJlZW1wdGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMTMsIAorICBPTVhfRXJyb3JSZXNvdXJjZXNQcmVlbXB0ZWQgPSAoT01YX1MzMikgMHg4MDAwMTAxMywKIAotICAvKiogQSBub24tc3VwcGxpZXIgcG9ydCBzZW5kcyB0aGlzIGVycm9yIHRvIHRoZSBJTCBjbGllbnQgKHZpYSB0aGUgRXZlbnRIYW5kbGVyIGNhbGxiYWNrKSAKKyAgLyoqIEEgbm9uLXN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykKICAgICAgIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBvZiBidWZmZXJzIChvbiBhIHRyYW5zaXRpb24gZnJvbSB0aGUgTE9BREVEIHRvIHRoZSBJRExFIHN0YXRlIG9yCi0gICAgICBvbiBhIHBvcnQgcmVzdGFydCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IgdGhlIHN1cHBsaWVyIAorICAgICAgb24gYSBwb3J0IHJlc3RhcnQpIHdoZW4gaXQgZGVlbXMgdGhhdCBpdCBoYXMgd2FpdGVkIGFuIHVudXN1YWxseSBsb25nIHRpbWUgZm9yIHRoZSBzdXBwbGllcgogICAgICAgdG8gc2VuZCBpdCBhbiBhbGxvY2F0ZWQgYnVmZmVyIHZpYSBhIFVzZUJ1ZmZlciBjYWxsLiAqLwogICBPTVhfRXJyb3JQb3J0VW5yZXNwb25zaXZlRHVyaW5nQWxsb2NhdGlvbiA9IChPTVhfUzMyKSAweDgwMDAxMDE0LAogCi0gIC8qKiBBIG5vbi1zdXBwbGllciBwb3J0IHNlbmRzIHRoaXMgZXJyb3IgdG8gdGhlIElMIGNsaWVudCAodmlhIHRoZSBFdmVudEhhbmRsZXIgY2FsbGJhY2spIAotICAgICAgZHVyaW5nIHRoZSBkZWFsbG9jYXRpb24gb2YgYnVmZmVycyAob24gYSB0cmFuc2l0aW9uIGZyb20gdGhlIElETEUgdG8gTE9BREVEIHN0YXRlIG9yIAotICAgICAgb24gYSBwb3J0IHN0b3ApIHdoZW4gaXQgZGVlbXMgdGhhdCBpdCBoYXMgd2FpdGVkIGFuIHVudXN1YWxseSBsb25nIHRpbWUgZm9yIHRoZSBzdXBwbGllciAKKyAgLyoqIEEgbm9uLXN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykKKyAgICAgIGR1cmluZyB0aGUgZGVhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKG9uIGEgdHJhbnNpdGlvbiBmcm9tIHRoZSBJRExFIHRvIExPQURFRCBzdGF0ZSBvcgorICAgICAgb24gYSBwb3J0IHN0b3ApIHdoZW4gaXQgZGVlbXMgdGhhdCBpdCBoYXMgd2FpdGVkIGFuIHVudXN1YWxseSBsb25nIHRpbWUgZm9yIHRoZSBzdXBwbGllcgogICAgICAgdG8gcmVxdWVzdCB0aGUgZGVhbGxvY2F0aW9uIG9mIGEgYnVmZmVyIGhlYWRlciB2aWEgYSBGcmVlQnVmZmVyIGNhbGwuICovCiAgIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdEZWFsbG9jYXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxNSwKIAotICAvKiogQSBzdXBwbGllciBwb3J0IHNlbmRzIHRoaXMgZXJyb3IgdG8gdGhlIElMIGNsaWVudCAodmlhIHRoZSBFdmVudEhhbmRsZXIgY2FsbGJhY2spIAotICAgICAgZHVyaW5nIHRoZSBzdG9wcGluZyBvZiBhIHBvcnQgKGVpdGhlciBvbiBhIHRyYW5zaXRpb24gZnJvbSB0aGUgSURMRSB0byBMT0FERUQgCi0gICAgICBzdGF0ZSBvciBhIHBvcnQgc3RvcCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IgCisgIC8qKiBBIHN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykKKyAgICAgIGR1cmluZyB0aGUgc3RvcHBpbmcgb2YgYSBwb3J0IChlaXRoZXIgb24gYSB0cmFuc2l0aW9uIGZyb20gdGhlIElETEUgdG8gTE9BREVECisgICAgICBzdGF0ZSBvciBhIHBvcnQgc3RvcCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IKICAgICAgIHRoZSBub24tc3VwcGxpZXIgdG8gcmV0dXJuIGEgYnVmZmVyIHZpYSBhbiBFbXB0eVRoaXNCdWZmZXIgb3IgRmlsbFRoaXNCdWZmZXIgY2FsbC4gKi8KICAgT01YX0Vycm9yUG9ydFVucmVzcG9uc2l2ZUR1cmluZ1N0b3AgPSAoT01YX1MzMikgMHg4MDAwMTAxNiwKIApAQCAtMjI5LDcgKzIyOSw3IEBACiAgIE9NWF9FcnJvckluY29ycmVjdFN0YXRlVHJhbnNpdGlvbiA9IChPTVhfUzMyKSAweDgwMDAxMDE3LAogCiAgIC8qIEF0dGVtcHRpbmcgYSBjb21tYW5kIHRoYXQgaXMgbm90IGFsbG93ZWQgZHVyaW5nIHRoZSBwcmVzZW50IHN0YXRlLiAqLwotICBPTVhfRXJyb3JJbmNvcnJlY3RTdGF0ZU9wZXJhdGlvbiA9IChPTVhfUzMyKSAweDgwMDAxMDE4LCAKKyAgT01YX0Vycm9ySW5jb3JyZWN0U3RhdGVPcGVyYXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxOCwKIAogICAvKiogVGhlIHZhbHVlcyBlbmNhcHN1bGF0ZWQgaW4gdGhlIHBhcmFtZXRlciBvciBjb25maWcgc3RydWN0dXJlIGFyZSBub3Qgc3VwcG9ydGVkLiAqLwogICBPTVhfRXJyb3JVbnN1cHBvcnRlZFNldHRpbmcgPSAoT01YX1MzMikgMHg4MDAwMTAxOSwKQEAgLTI0OSwxMiArMjQ5LDEyIEBACiAgIC8qKiBDb21wb25lbnQgc3VzcGVuZGVkIGR1ZSB0byBhbiBpbmFiaWxpdHkgdG8gYWNxdWlyZSBkeW5hbWljIHJlc291cmNlcyAqLwogICBPTVhfRXJyb3JEeW5hbWljUmVzb3VyY2VzVW5hdmFpbGFibGUgPSAoT01YX1MzMikgMHg4MDAwMTAxRSwKIAotICAvKiogV2hlbiB0aGUgbWFjcm9ibG9jayBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCB0aGUgY29tcG9uZW50IHJldHVybnMgbmV3IGVycm9yIAorICAvKiogV2hlbiB0aGUgbWFjcm9ibG9jayBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCB0aGUgY29tcG9uZW50IHJldHVybnMgbmV3IGVycm9yCiAgIGZvciBldmVyeSBmcmFtZSB0aGF0IGhhcyBlcnJvcnMgKi8KICAgT01YX0Vycm9yTWJFcnJvcnNJbkZyYW1lID0gKE9NWF9TMzIpIDB4ODAwMDEwMUYsCiAKICAgLyoqIEEgY29tcG9uZW50IHJlcG9ydHMgdGhpcyBlcnJvciB3aGVuIGl0IGNhbm5vdCBwYXJzZSBvciBkZXRlcm1pbmUgdGhlIGZvcm1hdCBvZiBhbiBpbnB1dCBzdHJlYW0uICovCi0gIE9NWF9FcnJvckZvcm1hdE5vdERldGVjdGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMjAsIAorICBPTVhfRXJyb3JGb3JtYXROb3REZXRlY3RlZCA9IChPTVhfUzMyKSAweDgwMDAxMDIwLAogCiAgIC8qKiBUaGUgY29udGVudCBvcGVuIG9wZXJhdGlvbiBmYWlsZWQuICovCiAgIE9NWF9FcnJvckNvbnRlbnRQaXBlT3BlbkZhaWxlZCA9IChPTVhfUzMyKSAweDgwMDAxMDIxLApAQCAtMjY4LDcgKzI2OCw3IEBACiAgIC8qKiBUdW5uZWxpbmcgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudCovCiAgIE9NWF9FcnJvclR1bm5lbGluZ1Vuc3VwcG9ydGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMjQsCiAKLSAgT01YX0Vycm9yS2hyb25vc0V4dGVuc2lvbnMgPSAoT01YX1MzMikweDhGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICBPTVhfRXJyb3JLaHJvbm9zRXh0ZW5zaW9ucyA9IChPTVhfUzMyKTB4OEYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgT01YX0Vycm9yVmVuZG9yU3RhcnRVbnVzZWQgPSAoT01YX1MzMikweDkwMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgT01YX0Vycm9yTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfRVJST1JUWVBFOwpAQCAtMzA0LDY5ICszMDQsNjkgQEAKICAgICBPTVhfVTggY1JvbGVbT01YX01BWF9TVFJJTkdOQU1FX1NJWkVdOyAgLyoqPCBuYW1lIG9mIHN0YW5kYXJkIGNvbXBvbmVudCB3aGljaCBkZWZpbmVzIGNvbXBvbmVudCByb2xlICovCiB9IE9NWF9QQVJBTV9DT01QT05FTlRST0xFVFlQRTsKIAotLyoqIEVuZCBvZiBTdHJlYW0gQnVmZmVyIEZsYWc6IAorLyoqIEVuZCBvZiBTdHJlYW0gQnVmZmVyIEZsYWc6CiAgICoKLSAgKiBBIGNvbXBvbmVudCBzZXRzIEVPUyB3aGVuIGl0IGhhcyBubyBtb3JlIGRhdGEgdG8gZW1pdCBvbiBhIHBhcnRpY3VsYXIgCi0gICogb3V0cHV0IHBvcnQuIFRodXMgYW4gb3V0cHV0IHBvcnQgc2hhbGwgc2V0IEVPUyBvbiB0aGUgbGFzdCBidWZmZXIgaXQgCi0gICogZW1pdHMuIEEgY29tcG9uZW50J3MgZGV0ZXJtaW5hdGlvbiBvZiB3aGVuIGFuIG91dHB1dCBwb3J0IHNob3VsZCAKKyAgKiBBIGNvbXBvbmVudCBzZXRzIEVPUyB3aGVuIGl0IGhhcyBubyBtb3JlIGRhdGEgdG8gZW1pdCBvbiBhIHBhcnRpY3VsYXIKKyAgKiBvdXRwdXQgcG9ydC4gVGh1cyBhbiBvdXRwdXQgcG9ydCBzaGFsbCBzZXQgRU9TIG9uIHRoZSBsYXN0IGJ1ZmZlciBpdAorICAqIGVtaXRzLiBBIGNvbXBvbmVudCdzIGRldGVybWluYXRpb24gb2Ygd2hlbiBhbiBvdXRwdXQgcG9ydCBzaG91bGQKICAgKiBjZWFzZSBzZW5kaW5nIGRhdGEgaXMgaW1wbGVtZW5hdGlvbiBzcGVjaWZpYy4KICAgKiBAaW5ncm91cCBidWYKICAgKi8KIAotI2RlZmluZSBPTVhfQlVGRkVSRkxBR19FT1MgMHgwMDAwMDAwMSAKKyNkZWZpbmUgT01YX0JVRkZFUkZMQUdfRU9TIDB4MDAwMDAwMDEKIAotLyoqIFN0YXJ0IFRpbWUgQnVmZmVyIEZsYWc6IAorLyoqIFN0YXJ0IFRpbWUgQnVmZmVyIEZsYWc6CiAgKgogICogVGhlIHNvdXJjZSBvZiBhIHN0cmVhbSAoZS5nLiBhIGRlbXV4IGNvbXBvbmVudCkgc2V0cyB0aGUgU1RBUlRUSU1FCiAgKiBmbGFnIG9uIHRoZSBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgc3RhcnRpbmcgdGltZXN0YW1wIGZvciB0aGUKICAqIHN0cmVhbS4gVGhlIHN0YXJ0aW5nIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgZGF0YSB0aGF0CiAgKiBzaG91bGQgYmUgZGlzcGxheWVkIGF0IHN0YXJ0dXAgb3IgYWZ0ZXIgYSBzZWVrLgogICogVGhlIGZpcnN0IHRpbWVzdGFtcCBvZiB0aGUgc3RyZWFtIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc3RhcnQgdGltZS4KLSAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIGNhc2Ugb2YgYSBzZWVrIHRvIGEgcGFydGljdWxhciB2aWRlbyBmcmFtZSwgCi0gKiB0aGUgdGFyZ2V0IGZyYW1lIG1heSBiZSBhbiBpbnRlcmZyYW1lLiBUaHVzIHRoZSBmaXJzdCBidWZmZXIgb2YgCisgKiBGb3IgaW5zdGFuY2UsIGluIHRoZSBjYXNlIG9mIGEgc2VlayB0byBhIHBhcnRpY3VsYXIgdmlkZW8gZnJhbWUsCisgKiB0aGUgdGFyZ2V0IGZyYW1lIG1heSBiZSBhbiBpbnRlcmZyYW1lLiBUaHVzIHRoZSBmaXJzdCBidWZmZXIgb2YKICAqIHRoZSBzdHJlYW0gd2lsbCBiZSB0aGUgaW50cmEtZnJhbWUgcHJlY2VkaW5nIHRoZSB0YXJnZXQgZnJhbWUgYW5kCiAgKiB0aGUgc3RhcnR0aW1lIHdpbGwgb2NjdXIgd2l0aCB0aGUgdGFyZ2V0IGZyYW1lICh3aXRoIGFueSBvdGhlcgogICogcmVxdWlyZWQgZnJhbWVzIHJlcXVpcmVkIHRvIHJlY29uc3RydWN0IHRoZSB0YXJnZXQgaW50ZXJ2ZW5pbmcpLgogICoKLSAqIFRoZSBTVEFSVFRJTUUgZmxhZyBpcyBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcidzIAotICogdGltZXN0YW1wICcgdGh1cyBpdHMgYXNzb2NpYXRpb24gdG8gYnVmZmVyIGRhdGEgYW5kIGl0cyAKKyAqIFRoZSBTVEFSVFRJTUUgZmxhZyBpcyBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcidzCisgKiB0aW1lc3RhbXAgJyB0aHVzIGl0cyBhc3NvY2lhdGlvbiB0byBidWZmZXIgZGF0YSBhbmQgaXRzCiAgKiBwcm9wYWdhdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIHRpbWVzdGFtcCdzLgogICoKLSAqIFdoZW4gYSBTeW5jIENvbXBvbmVudCBjbGllbnQgcmVjZWl2ZXMgYSBidWZmZXIgd2l0aCB0aGUgCi0gKiBTVEFSVFRJTUUgZmxhZyBpdCBzaGFsbCBwZXJmb3JtIGEgU2V0Q29uZmlnIG9uIGl0cyBzeW5jIHBvcnQgCisgKiBXaGVuIGEgU3luYyBDb21wb25lbnQgY2xpZW50IHJlY2VpdmVzIGEgYnVmZmVyIHdpdGggdGhlCisgKiBTVEFSVFRJTUUgZmxhZyBpdCBzaGFsbCBwZXJmb3JtIGEgU2V0Q29uZmlnIG9uIGl0cyBzeW5jIHBvcnQKICAqIHVzaW5nIE9NWF9Db25maWdUaW1lQ2xpZW50U3RhcnRUaW1lIGFuZCBwYXNzaW5nIHRoZSBidWZmZXIncwogICogdGltZXN0YW1wLgotICogCisgKgogICogQGluZ3JvdXAgYnVmCiAgKi8KIAogI2RlZmluZSBPTVhfQlVGRkVSRkxBR19TVEFSVFRJTUUgMHgwMDAwMDAwMgogCi0gCiAKLS8qKiBEZWNvZGUgT25seSBCdWZmZXIgRmxhZzogCisKKy8qKiBEZWNvZGUgT25seSBCdWZmZXIgRmxhZzoKICAqCiAgKiBUaGUgc291cmNlIG9mIGEgc3RyZWFtIChlLmcuIGEgZGVtdXggY29tcG9uZW50KSBzZXRzIHRoZSBERUNPREVPTkxZCiAgKiBmbGFnIG9uIGFueSBidWZmZXIgdGhhdCBzaG91bGQgc2hhbGwgYmUgZGVjb2RlZCBidXQgc2hvdWxkIG5vdCBiZQotICogZGlzcGxheWVkLiBUaGlzIGZsYWcgaXMgdXNlZCwgZm9yIGluc3RhbmNlLCB3aGVuIGEgc291cmNlIHNlZWtzIHRvIAotICogYSB0YXJnZXQgaW50ZXJmcmFtZSB0aGF0IHJlcXVpcmVzIHRoZSBkZWNvZGUgb2YgZnJhbWVzIHByZWNlZGluZyB0aGUgCi0gKiB0YXJnZXQgdG8gZmFjaWxpdGF0ZSB0aGUgdGFyZ2V0J3MgcmVjb25zdHJ1Y3Rpb24uIEluIHRoaXMgY2FzZSB0aGUgCi0gKiBzb3VyY2Ugd291bGQgZW1pdCB0aGUgZnJhbWVzIHByZWNlZGluZyB0aGUgdGFyZ2V0IGRvd25zdHJlYW0gCisgKiBkaXNwbGF5ZWQuIFRoaXMgZmxhZyBpcyB1c2VkLCBmb3IgaW5zdGFuY2UsIHdoZW4gYSBzb3VyY2Ugc2Vla3MgdG8KKyAqIGEgdGFyZ2V0IGludGVyZnJhbWUgdGhhdCByZXF1aXJlcyB0aGUgZGVjb2RlIG9mIGZyYW1lcyBwcmVjZWRpbmcgdGhlCisgKiB0YXJnZXQgdG8gZmFjaWxpdGF0ZSB0aGUgdGFyZ2V0J3MgcmVjb25zdHJ1Y3Rpb24uIEluIHRoaXMgY2FzZSB0aGUKKyAqIHNvdXJjZSB3b3VsZCBlbWl0IHRoZSBmcmFtZXMgcHJlY2VkaW5nIHRoZSB0YXJnZXQgZG93bnN0cmVhbQogICogYnV0IG1hcmsgdGhlbSBhcyBkZWNvZGUgb25seS4KICAqCi0gKiBUaGUgREVDT0RFT05MWSBpcyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyIGRhdGEgYW5kIHByb3BhZ2F0ZWQgaW4gYSAKKyAqIFRoZSBERUNPREVPTkxZIGlzIGFzc29jaWF0ZWQgd2l0aCBidWZmZXIgZGF0YSBhbmQgcHJvcGFnYXRlZCBpbiBhCiAgKiBtYW5uZXIgaWRlbnRpY2FsIHRvIHRoZSBidWZmZXIgdGltZXN0YW1wLgogICoKLSAqIEEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBkYXRhIHNob3VsZCBpZ25vcmUgYWxsIGJ1ZmZlcnMgd2l0aCAKKyAqIEEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBkYXRhIHNob3VsZCBpZ25vcmUgYWxsIGJ1ZmZlcnMgd2l0aAogICogdGhlIERFQ09ERU9OTFkgZmxhZyBzZXQuCi0gKiAKKyAqCiAgKiBAaW5ncm91cCBidWYKICAqLwogCiAjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0RFQ09ERU9OTFkgMHgwMDAwMDAwNAogCiAKLS8qIERhdGEgQ29ycnVwdCBGbGFnOiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIElMIGNsaWVudCBiZWxpZXZlcyB0aGUgZGF0YSBpbiB0aGUgYXNzb2NpYXRlZCBidWZmZXIgaXMgY29ycnVwdCAKKy8qIERhdGEgQ29ycnVwdCBGbGFnOiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIElMIGNsaWVudCBiZWxpZXZlcyB0aGUgZGF0YSBpbiB0aGUgYXNzb2NpYXRlZCBidWZmZXIgaXMgY29ycnVwdAogICogQGluZ3JvdXAgYnVmCiAgKi8KIApAQCAtMzc0LDI5ICszNzQsMjkgQEAKIAogLyogRW5kIG9mIEZyYW1lOiBUaGUgYnVmZmVyIGNvbnRhaW5zIGV4YWN0bHkgb25lIGVuZCBvZiBmcmFtZSBhbmQgbm8gZGF0YQogICogIG9jY3VycyBhZnRlciB0aGUgZW5kIG9mIGZyYW1lLiBUaGlzIGZsYWcgaXMgYW4gb3B0aW9uYWwgaGludC4gVGhlIGFic2VuY2UKLSAqICBvZiB0aGlzIGZsYWcgZG9lcyBub3QgaW1wbHkgdGhlIGFic2VuY2Ugb2YgYW4gZW5kIG9mIGZyYW1lIHdpdGhpbiB0aGUgYnVmZmVyLiAKKyAqICBvZiB0aGlzIGZsYWcgZG9lcyBub3QgaW1wbHkgdGhlIGFic2VuY2Ugb2YgYW4gZW5kIG9mIGZyYW1lIHdpdGhpbiB0aGUgYnVmZmVyLgogICogQGluZ3JvdXAgYnVmCiAqLwogI2RlZmluZSBPTVhfQlVGRkVSRkxBR19FTkRPRkZSQU1FIDB4MDAwMDAwMTAKIAotLyogU3luYyBGcmFtZSBGbGFnOiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIGJ1ZmZlciBjb250ZW50IGNvbnRhaW5zIGEgY29kZWQgc3luYyBmcmFtZSAnIAotICogIGEgZnJhbWUgdGhhdCBoYXMgbm8gZGVwZW5kZW5jeSBvbiBhbnkgb3RoZXIgZnJhbWUgaW5mb3JtYXRpb24gCisvKiBTeW5jIEZyYW1lIEZsYWc6IFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB0aGUgYnVmZmVyIGNvbnRlbnQgY29udGFpbnMgYSBjb2RlZCBzeW5jIGZyYW1lICcKKyAqICBhIGZyYW1lIHRoYXQgaGFzIG5vIGRlcGVuZGVuY3kgb24gYW55IG90aGVyIGZyYW1lIGluZm9ybWF0aW9uCiAgKiAgQGluZ3JvdXAgYnVmCiAgKi8KICNkZWZpbmUgT01YX0JVRkZFUkZMQUdfU1lOQ0ZSQU1FIDB4MDAwMDAwMjAKIAogLyogRXh0cmEgZGF0YSBwcmVzZW50IGZsYWc6IHRoZXJlIGlzIGV4dHJhIGRhdGEgYXBwZW5kZWQgdG8gdGhlIGRhdGEgc3RyZWFtCi0gKiByZXNpZGluZyBpbiB0aGUgYnVmZmVyIAotICogQGluZ3JvdXAgYnVmICAKKyAqIHJlc2lkaW5nIGluIHRoZSBidWZmZXIKKyAqIEBpbmdyb3VwIGJ1ZgogICovCiAjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0VYVFJBREFUQSAweDAwMDAwMDQwCiAKLS8qKiBDb2RlYyBDb25maWcgQnVmZmVyIEZsYWc6IAorLyoqIENvZGVjIENvbmZpZyBCdWZmZXIgRmxhZzoKICogT01YX0JVRkZFUkZMQUdfQ09ERUNDT05GSUcgaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IGlzIHNldCBieSBhbgogKiBvdXRwdXQgcG9ydCB3aGVuIGFsbCBieXRlcyBpbiB0aGUgYnVmZmVyIGZvcm0gcGFydCBvciBhbGwgb2YgYSBzZXQgb2YKICogY29kZWMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkYXRhLiAgRXhhbXBsZXMgaW5jbHVkZSBTUFMvUFBTIG5hbCB1bml0cwogKiBmb3IgT01YX1ZJREVPX0NvZGluZ0FWQyBvciBBdWRpb1NwZWNpZmljQ29uZmlnIGRhdGEgZm9yCi0qIE9NWF9BVURJT19Db2RpbmdBQUMuICBBbnkgY29tcG9uZW50IHRoYXQgZm9yIGEgZ2l2ZW4gc3RyZWFtIHNldHMgCisqIE9NWF9BVURJT19Db2RpbmdBQUMuICBBbnkgY29tcG9uZW50IHRoYXQgZm9yIGEgZ2l2ZW4gc3RyZWFtIHNldHMKICogT01YX0JVRkZFUkZMQUdfQ09ERUNDT05GSUcgc2hhbGwgbm90IG1peCBjb2RlYyBjb25maWd1cmF0aW9uIGJ5dGVzCiAqIHdpdGggZnJhbWUgZGF0YSBpbiB0aGUgc2FtZSBidWZmZXIsIGFuZCBzaGFsbCBzZW5kIGFsbCBidWZmZXJzCiAqIGNvbnRhaW5pbmcgY29kZWMgY29uZmlndXJhdGlvbiBieXRlcyBiZWZvcmUgYW55IGJ1ZmZlcnMgY29udGFpbmluZwpAQCAtNDE2LDUwICs0MTYsNTAgQEAKIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1U4KiBwQnVmZmVyOyAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byBhY3R1YWwgYmxvY2sgb2YgbWVtb3J5IAorICAgIE9NWF9VOCogcEJ1ZmZlcjsgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gYWN0dWFsIGJsb2NrIG9mIG1lbW9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgYWN0aW5nIGFzIHRoZSBidWZmZXIgKi8KICAgICBPTVhfVTMyIG5BbGxvY0xlbjsgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBidWZmZXIgYWxsb2NhdGVkLCBpbiBieXRlcyAqLwotICAgIE9NWF9VMzIgbkZpbGxlZExlbjsgICAgICAgICAvKio8IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIAorICAgIE9NWF9VMzIgbkZpbGxlZExlbjsgICAgICAgICAvKio8IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICovCiAgICAgT01YX1UzMiBuT2Zmc2V0OyAgICAgICAgICAgIC8qKjwgc3RhcnQgb2Zmc2V0IG9mIHZhbGlkIGRhdGEgaW4gYnl0ZXMgZnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyICovCiAgICAgT01YX1BUUiBwQXBwUHJpdmF0ZTsgICAgICAgIC8qKjwgcG9pbnRlciB0byBhbnkgZGF0YSB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50cyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGJ1ZmZlciAqLwogICAgIE9NWF9QVFIgcFBsYXRmb3JtUHJpdmF0ZTsgICAvKio8IHBvaW50ZXIgdG8gYW55IGRhdGEgdGhlIHBsYXRmb3JtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8KICAgICBPTVhfUFRSIHBJbnB1dFBvcnRQcml2YXRlOyAgLyoqPCBwb2ludGVyIHRvIGFueSBkYXRhIHRoZSBpbnB1dCBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8KICAgICBPTVhfUFRSIHBPdXRwdXRQb3J0UHJpdmF0ZTsgLyoqPCBwb2ludGVyIHRvIGFueSBkYXRhIHRoZSBvdXRwdXQgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgYnVmZmVyICovCi0gICAgT01YX0hBTkRMRVRZUEUgaE1hcmtUYXJnZXRDb21wb25lbnQ7IC8qKjwgVGhlIGNvbXBvbmVudCB0aGF0IHdpbGwgZ2VuZXJhdGUgYSAKKyAgICBPTVhfSEFORExFVFlQRSBoTWFya1RhcmdldENvbXBvbmVudDsgLyoqPCBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBnZW5lcmF0ZSBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyayBldmVudCB1cG9uIHByb2Nlc3NpbmcgdGhpcyBidWZmZXIuICovCi0gICAgT01YX1BUUiBwTWFya0RhdGE7ICAgICAgICAgIC8qKjwgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGggCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmsgc2VudCBvbiBhIG1hcmsgZXZlbnQgdG8gZGlzYW1iaWd1YXRlIAorICAgIE9NWF9QVFIgcE1hcmtEYXRhOyAgICAgICAgICAvKio8IEFwcGxpY2F0aW9uIHNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmsgc2VudCBvbiBhIG1hcmsgZXZlbnQgdG8gZGlzYW1iaWd1YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYXJrIGZyb20gb3RoZXJzLiAqLwogICAgIE9NWF9VMzIgblRpY2tDb3VudDsgICAgICAgICAvKio8IE9wdGlvbmFsIGVudHJ5IHRoYXQgdGhlIGNvbXBvbmVudCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBjYW4gdXBkYXRlIHdpdGggYSB0aWNrIGNvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGV5IGFjY2VzcyB0aGUgY29tcG9uZW50LiAgVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHNob3VsZCBiZSBpbiBtaWNyb3NlY29uZHMuICBTaW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSB2YWx1ZSByZWxhdGl2ZSB0byBhbiBhcmJpdHJhcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBwb2ludCwgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgdXNlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBwb2ludCwgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRldGVybWluZSBhYnNvbHV0ZSB0aW1lLiAgVGhpcyBpcyBhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGVudHJ5IGFuZCBub3QgYWxsIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHVwZGF0ZSBpdC4qLwotIE9NWF9USUNLUyBuVGltZVN0YW1wOyAgICAgICAgICAvKio8IFRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzYW1wbGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGxvZ2ljYWwgc2FtcGxlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5IGluIHRoZSBidWZmZXIuIFRpbWVzdGFtcHMgb2YgCisgT01YX1RJQ0tTIG5UaW1lU3RhbXA7ICAgICAgICAgIC8qKjwgVGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBsb2dpY2FsIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5IGluIHRoZSBidWZmZXIuIFRpbWVzdGFtcHMgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlIHNhbXBsZXMgd2l0aGluIHRoZSBidWZmZXIgbWF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5mZXJyZWQgYnkgYWRkaW5nIHRoZSBkdXJhdGlvbiBvZiB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5mZXJyZWQgYnkgYWRkaW5nIHRoZSBkdXJhdGlvbiBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcHJlY2VkaW5nIGJ1ZmZlciB0byB0aGUgdGltZXN0YW1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHByZWNlZGluZyBidWZmZXIuKi8KICAgT01YX1UzMiAgICAgbkZsYWdzOyAgICAgICAgICAgLyoqPCBidWZmZXIgc3BlY2lmaWMgZmxhZ3MgKi8KLSAgT01YX1UzMiBuT3V0cHV0UG9ydEluZGV4OyAgICAgLyoqPCBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBwb3J0IChpZiBhbnkpIHVzaW5nIAorICBPTVhfVTMyIG5PdXRwdXRQb3J0SW5kZXg7ICAgICAvKio8IFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IHBvcnQgKGlmIGFueSkgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJ1ZmZlciAqLwogICBPTVhfVTMyIG5JbnB1dFBvcnRJbmRleDsgICAgICAvKio8IFRoZSBpbmRleCBvZiB0aGUgaW5wdXQgcG9ydCAoaWYgYW55KSB1c2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgYnVmZmVyICovCiB9IE9NWF9CVUZGRVJIRUFERVJUWVBFOwogCi0vKiogVGhlIE9NWF9FWFRSQURBVEFUWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSAKKy8qKiBUaGUgT01YX0VYVFJBREFUQVRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBkZWZpbmUgdGhlCiAgKiBwb3NzaWJsZSBleHRyYSBkYXRhIHBheWxvYWQgdHlwZXMuCiAgKiBOQjogdGhpcyBlbnVtIGlzIGJpbmFyeSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cwogICogT01YX0VYVFJBREFUQV9RVUFOVCBkZWZpbmUuICBUaGlzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCkBAIC00NjcsOSArNDY3LDkgQEAKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9FWFRSQURBVEFUWVBFCiB7Ci0gICBPTVhfRXh0cmFEYXRhTm9uZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEluZGljYXRlcyB0aGF0IG5vIG1vcmUgZXh0cmEgZGF0YSBzZWN0aW9ucyBmb2xsb3cgKi8gICAgICAgIAorICAgT01YX0V4dHJhRGF0YU5vbmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbmRpY2F0ZXMgdGhhdCBubyBtb3JlIGV4dHJhIGRhdGEgc2VjdGlvbnMgZm9sbG93ICovCiAgICBPTVhfRXh0cmFEYXRhUXVhbnRpemF0aW9uLCAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBkYXRhIHBheWxvYWQgY29udGFpbnMgcXVhbnRpemF0aW9uIGRhdGEgKi8KLSAgIE9NWF9FeHRyYURhdGFLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfRXh0cmFEYXRhS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICBPTVhfRXh0cmFEYXRhVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9FeHRyYURhdGFNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9FWFRSQURBVEFUWVBFOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAKIHR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9FWFRSQURBVEFUWVBFICB7CiAgICAgT01YX1UzMiBuU2l6ZTsKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAgICAgCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICBPTVhfRVhUUkFEQVRBVFlQRSBlVHlwZTsgICAgICAgLyogRXh0cmEgRGF0YSB0eXBlICovCiAgICAgT01YX1UzMiBuRGF0YVNpemU7ICAgLyogU2l6ZSBvZiB0aGUgc3VwcG9ydGluZyBkYXRhIHRvIGZvbGxvdyAqLwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRzOyAgICAgICAgICAgICAvKio8IFRoZSBudW1iZXIgb2YgcG9ydHMgZm9yIHRoaXMgY29tcG9uZW50ICovCiAgICAgT01YX1UzMiBuU3RhcnRQb3J0TnVtYmVyOyAgIC8qKiBmaXJzdCBwb3J0IG51bWJlciBmb3IgdGhpcyB0eXBlIG9mIHBvcnQgKi8KLX0gT01YX1BPUlRfUEFSQU1fVFlQRTsgCit9IE9NWF9QT1JUX1BBUkFNX1RZUEU7CiAKIC8qKiBAaW5ncm91cCBjb21wICovCiB0eXBlZGVmIGVudW0gT01YX0VWRU5UVFlQRQpAQCAtNDk5LDE0ICs0OTksMTQgQEAKICAgICBPTVhfRXZlbnRFcnJvciwgICAgICAgICAgICAgICAvKio8IGNvbXBvbmVudCBoYXMgZGV0ZWN0ZWQgYW4gZXJyb3IgY29uZGl0aW9uICovCiAgICAgT01YX0V2ZW50TWFyaywgICAgICAgICAgICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIGEgYnVmZmVyIG1hcmsgKi8KICAgICBPTVhfRXZlbnRQb3J0U2V0dGluZ3NDaGFuZ2VkLCAvKio8IGNvbXBvbmVudCBpcyByZXBvcnRlZCBhIHBvcnQgc2V0dGluZ3MgY2hhbmdlICovCi0gICAgT01YX0V2ZW50QnVmZmVyRmxhZywgICAgICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIGFuIEVPUyAqLyAKKyAgICBPTVhfRXZlbnRCdWZmZXJGbGFnLCAgICAgICAgICAvKio8IGNvbXBvbmVudCBoYXMgZGV0ZWN0ZWQgYW4gRU9TICovCiAgICAgT01YX0V2ZW50UmVzb3VyY2VzQWNxdWlyZWQsICAgLyoqPCBjb21wb25lbnQgaGFzIGJlZW4gZ3JhbnRlZCByZXNvdXJjZXMgYW5kIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHN0YXJ0aW5nIHRoZSBzdGF0ZSBjaGFuZ2UgZnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcyB0byBPTVhfU3RhdGVJZGxlLiAqLwogICAgT01YX0V2ZW50Q29tcG9uZW50UmVzdW1lZCwgICAgIC8qKjwgQ29tcG9uZW50IHJlc3VtZWQgZHVlIHRvIHJlYWNxdWlzaXRpb24gb2YgcmVzb3VyY2VzICovCiAgICBPTVhfRXZlbnREeW5hbWljUmVzb3VyY2VzQXZhaWxhYmxlLCAvKio8IENvbXBvbmVudCBoYXMgYWNxdWlyZWQgcHJldmlvdXNseSB1bmF2YWlsYWJsZSBkeW5hbWljIHJlc291cmNlcyAqLwogICAgT01YX0V2ZW50UG9ydEZvcm1hdERldGVjdGVkLCAgICAgIC8qKjwgQ29tcG9uZW50IGhhcyBkZXRlY3RlZCBhIHN1cHBvcnRlZCBmb3JtYXQuICovCi0gICBPTVhfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9FdmVudFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICBPTVhfRXZlbnRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9FVkVOVFRZUEU7CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgZXZlbnQgb2YgaW50ZXJlc3Qgb2NjdXJzLiAgRXZlbnRzIGFyZSBkZWZpbmVkIGluIHRoZSBPTVhfRVZFTlRUWVBFCiAgICAgICAgIGVudW1lcmF0aW9uLiAgUGxlYXNlIHNlZSB0aGF0IGVudW1lcmF0aW9uIGZvciBkZXRhaWxzIG9mIHdoYXQgd2lsbAogICAgICAgICBiZSByZXR1cm5lZCBmb3IgZWFjaCB0eXBlIG9mIGV2ZW50LiBDYWxsYmFja3Mgc2hvdWxkIG5vdCByZXR1cm4KLSAgICAgICAgYW4gZXJyb3IgdG8gdGhlIGNvbXBvbmVudCwgc28gaWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgIGFuIGVycm9yIHRvIHRoZSBjb21wb25lbnQsIHNvIGlmIGFuIGVycm9yIG9jY3VycywgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIHNoYWxsIGhhbmRsZSBpdCBpbnRlcm5hbGx5LiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCiAKICAgICAgICAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYyB0byBhdm9pZApAQCAtNTI3LDE0ICs1MjcsMTQgQEAKICAgICAgICAgICAgIGhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGFjY2Vzcy4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgICAgIEBwYXJhbSBwQXBwRGF0YQotICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIHRoYXQgd2FzIHByb3ZpZGVkIGluIHRoZSAKKyAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUKICAgICAgICAgICAgIHBBcHBEYXRhIHBhcmFtZXRlciB0byB0aGUgT01YX0dldEhhbmRsZSBtZXRob2QgZm9yIHRoZSBjb21wb25lbnQuCi0gICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgIGNhbiBoYXZlIGEgY29tcG9uZW50IHNwZWNpZmljIGNvbnRleHQgd2hlbiByZWNlaXZpbmcgdGhlIGNhbGxiYWNrLgogICAgICAgICBAcGFyYW0gZUV2ZW50CiAgICAgICAgICAgICBFdmVudCB0aGF0IHRoZSBjb21wb25lbnQgd2FudHMgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiBhYm91dC4KICAgICAgICAgQHBhcmFtIG5EYXRhMQotICAgICAgICAgICAgbkRhdGEgd2lsbCBiZSB0aGUgT01YX0VSUk9SVFlQRSBmb3IgYW4gZXJyb3IgZXZlbnQgYW5kIHdpbGwgYmUgCisgICAgICAgICAgICBuRGF0YSB3aWxsIGJlIHRoZSBPTVhfRVJST1JUWVBFIGZvciBhbiBlcnJvciBldmVudCBhbmQgd2lsbCBiZQogICAgICAgICAgICAgYW4gT01YX0NPTU1BTkRUWVBFIGZvciBhIGNvbW1hbmQgY29tcGxldGUgZXZlbnQgYW5kIE9NWF9JTkRFWFRZUEUgZm9yIGEgT01YX1BvcnRTZXR0aW5nc0NoYW5nZWQgZXZlbnQuCiAgICAgICAgICBAcGFyYW0gbkRhdGEyCiAgICAgICAgICAgICBuRGF0YTIgd2lsbCBob2xkIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZXZlbnQuIENhbiBiZSBPTVhfU1RBVEVUWVBFIGZvcgpAQCAtNTUzLDIxICs1NTMsMjEgQEAKICAgICAgICAgT01YX0lOIE9NWF9QVFIgcEV2ZW50RGF0YSk7CiAKICAgICAvKiogVGhlIEVtcHR5QnVmZmVyRG9uZSBtZXRob2QgaXMgdXNlZCB0byByZXR1cm4gZW1wdGllZCBidWZmZXJzIGZyb20gYW4KLSAgICAgICAgaW5wdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgcmV1c2UuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbCAKKyAgICAgICAgaW5wdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgcmV1c2UuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbAogICAgICAgICBzbyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHJlZmlsbCB0aGUgYnVmZmVycyBkdXJpbmcgdGhpcwogICAgICAgICBjYWxsLCBidXQgc2hvdWxkIHF1ZXVlIHRoZW0gYW5kIHJlZmlsbCB0aGVtIGluIGFub3RoZXIgdGhyZWFkLiAgVGhlcmUKICAgICAgICAgaXMgbm8gZXJyb3IgcmV0dXJuLCBzbyB0aGUgYXBwbGljYXRpb24gc2hhbGwgaGFuZGxlIGFueSBlcnJvcnMgZ2VuZXJhdGVkCi0gICAgICAgIGludGVybmFsbHkuICAKLSAgICAgICAgCisgICAgICAgIGludGVybmFsbHkuCisKICAgICAgICAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAgICAgCisKICAgICAgICAgQHBhcmFtIGhDb21wb25lbnQKICAgICAgICAgICAgIGhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGFjY2Vzcy4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgICAgIEBwYXJhbSBwQXBwRGF0YQotICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIHRoYXQgd2FzIHByb3ZpZGVkIGluIHRoZSAKKyAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUKICAgICAgICAgICAgIHBBcHBEYXRhIHBhcmFtZXRlciB0byB0aGUgT01YX0dldEhhbmRsZSBtZXRob2QgZm9yIHRoZSBjb21wb25lbnQuCi0gICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgIGNhbiBoYXZlIGEgY29tcG9uZW50IHNwZWNpZmljIGNvbnRleHQgd2hlbiByZWNlaXZpbmcgdGhlIGNhbGxiYWNrLgogICAgICAgICBAcGFyYW0gcEJ1ZmZlcgogICAgICAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHdpdGggVXNlQnVmZmVyCkBAIC01ODAsMjMgKzU4MCwyMyBAQAogICAgICAgICBPTVhfSU4gT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOwogCiAgICAgLyoqIFRoZSBGaWxsQnVmZmVyRG9uZSBtZXRob2QgaXMgdXNlZCB0byByZXR1cm4gZmlsbGVkIGJ1ZmZlcnMgZnJvbSBhbgotICAgICAgICBvdXRwdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgZW1wdHlpbmcgYW5kIHRoZW4gcmV1c2UuICAKLSAgICAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwgc28gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYXR0ZW1wdCB0byAKLSAgICAgICAgZW1wdHkgdGhlIGJ1ZmZlcnMgZHVyaW5nIHRoaXMgY2FsbCwgYnV0IHNob3VsZCBxdWV1ZSB0aGUgYnVmZmVycyAKLSAgICAgICAgYW5kIGVtcHR5IHRoZW0gaW4gYW5vdGhlciB0aHJlYWQuICBUaGVyZSBpcyBubyBlcnJvciByZXR1cm4sIHNvIAotICAgICAgICB0aGUgYXBwbGljYXRpb24gc2hhbGwgaGFuZGxlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIGludGVybmFsbHkuICBUaGUgCisgICAgICAgIG91dHB1dCBwb3J0IGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIGZvciBlbXB0eWluZyBhbmQgdGhlbiByZXVzZS4KKyAgICAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwgc28gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYXR0ZW1wdCB0bworICAgICAgICBlbXB0eSB0aGUgYnVmZmVycyBkdXJpbmcgdGhpcyBjYWxsLCBidXQgc2hvdWxkIHF1ZXVlIHRoZSBidWZmZXJzCisgICAgICAgIGFuZCBlbXB0eSB0aGVtIGluIGFub3RoZXIgdGhyZWFkLiAgVGhlcmUgaXMgbm8gZXJyb3IgcmV0dXJuLCBzbworICAgICAgICB0aGUgYXBwbGljYXRpb24gc2hhbGwgaGFuZGxlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIGludGVybmFsbHkuICBUaGUKICAgICAgICAgYXBwbGljYXRpb24gc2hhbGwgYWxzbyB1cGRhdGUgdGhlIGJ1ZmZlciBoZWFkZXIgdG8gaW5kaWNhdGUgdGhlCi0gICAgICAgIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byB0aGUgYnVmZmVyLiAgCisgICAgICAgIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byB0aGUgYnVmZmVyLgogCiAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgICAgIAorCiAgICAgICAgIEBwYXJhbSBoQ29tcG9uZW50CiAgICAgICAgICAgICBoYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBhY2Nlc3MuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgR2V0SGFuZGxlIGZ1bmN0aW9uLgogICAgICAgICBAcGFyYW0gcEFwcERhdGEKLSAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUgCisgICAgICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlCiAgICAgICAgICAgICBwQXBwRGF0YSBwYXJhbWV0ZXIgdG8gdGhlIE9NWF9HZXRIYW5kbGUgbWV0aG9kIGZvciB0aGUgY29tcG9uZW50LgotICAgICAgICAgICAgVGhpcyBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIAorICAgICAgICAgICAgVGhpcyBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICBjYW4gaGF2ZSBhIGNvbXBvbmVudCBzcGVjaWZpYyBjb250ZXh0IHdoZW4gcmVjZWl2aW5nIHRoZSBjYWxsYmFjay4KICAgICAgICAgQHBhcmFtIHBCdWZmZXIKICAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIGFsbG9jYXRlZCB3aXRoIFVzZUJ1ZmZlcgpAQCAtNjIwLDEzICs2MjAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkb24ndCBjYXJlICovCiAgICAgT01YX0J1ZmZlclN1cHBseUlucHV0LCAgICAgICAgICAgICAvKio8IGlucHV0IHBvcnQgc3VwcGxpZXMgdGhlIGJ1ZmZlcnMgKi8KICAgICBPTVhfQnVmZmVyU3VwcGx5T3V0cHV0LCAgICAgICAgICAgIC8qKjwgb3V0cHV0IHBvcnQgc3VwcGxpZXMgdGhlIGJ1ZmZlcnMgKi8KLSAgICBPTVhfQnVmZmVyU3VwcGx5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9CdWZmZXJTdXBwbHlLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQnVmZmVyU3VwcGx5VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQnVmZmVyU3VwcGx5TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQlVGRkVSU1VQUExJRVJUWVBFOwogCiAKLS8qKiBidWZmZXIgc3VwcGxpZXIgcGFyYW1ldGVyIAorLyoqIGJ1ZmZlciBzdXBwbGllciBwYXJhbWV0ZXIKICAqIEBpbmdyb3VwIHR1bgogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fQlVGRkVSU1VQUExJRVJUWVBFIHsKQEAgLTYzNyw2MSArNjM3LDYxIEBACiB9IE9NWF9QQVJBTV9CVUZGRVJTVVBQTElFUlRZUEU7CiAKIAotLyoqPCBpbmRpY2F0ZXMgdGhhdCBidWZmZXJzIHJlY2VpdmVkIGJ5IGFuIGlucHV0IHBvcnQgb2YgYSB0dW5uZWwgCi0gICAgIG1heSBub3QgbW9kaWZ5IHRoZSBkYXRhIGluIHRoZSBidWZmZXJzIAorLyoqPCBpbmRpY2F0ZXMgdGhhdCBidWZmZXJzIHJlY2VpdmVkIGJ5IGFuIGlucHV0IHBvcnQgb2YgYSB0dW5uZWwKKyAgICAgbWF5IG5vdCBtb2RpZnkgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlcnMKICAgICAgQGluZ3JvdXAgdHVuCiAgKi8KLSNkZWZpbmUgT01YX1BPUlRUVU5ORUxGTEFHX1JFQURPTkxZIDB4MDAwMDAwMDEgCisjZGVmaW5lIE9NWF9QT1JUVFVOTkVMRkxBR19SRUFET05MWSAweDAwMDAwMDAxCiAKIAogLyoqIFRoZSBPTVhfVFVOTkVMU0VUVVBUWVBFIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSBmcm9tIGFuIG91dHB1dAogICAgIHBvcnQgdG8gYW4gaW5wdXQgcG9ydCBhcyBwYXJ0IHRoZSB0d28gQ29tcG9uZW50VHVubmVsUmVxdWVzdCBjYWxscwotICAgIHJlc3VsdGluZyBmcm9tIGEgT01YX1NldHVwVHVubmVsIGNhbGwgZnJvbSB0aGUgSUwgQ2xpZW50LiAKKyAgICByZXN1bHRpbmcgZnJvbSBhIE9NWF9TZXR1cFR1bm5lbCBjYWxsIGZyb20gdGhlIElMIENsaWVudC4KICAgICBAaW5ncm91cCB0dW4KLSAqLyAgIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVFVOTkVMU0VUVVBUWVBFCiB7CiAgICAgT01YX1UzMiBuVHVubmVsRmxhZ3M7ICAgICAgICAgICAgIC8qKjwgYml0IGZsYWdzIGZvciB0dW5uZWxpbmcgKi8KICAgICBPTVhfQlVGRkVSU1VQUExJRVJUWVBFIGVTdXBwbGllcjsgLyoqPCBzdXBwbGllciBwcmVmZXJlbmNlICovCi19IE9NWF9UVU5ORUxTRVRVUFRZUEU7IAorfSBPTVhfVFVOTkVMU0VUVVBUWVBFOwogCiAvKiBPTVggQ29tcG9uZW50IGhlYWRlcnMgaXMgaW5jbHVkZWQgdG8gZW5hYmxlIHRoZSBjb3JlIHRvIHVzZQotICAgbWFjcm9zIGZvciBmdW5jdGlvbnMgaW50byB0aGUgY29tcG9uZW50IGZvciBPTVggcmVsZWFzZSAxLjAuICAKKyAgIG1hY3JvcyBmb3IgZnVuY3Rpb25zIGludG8gdGhlIGNvbXBvbmVudCBmb3IgT01YIHJlbGVhc2UgMS4wLgogICAgRGV2ZWxvcGVycyBzaG91bGQgbm90IGFjY2VzcyBhbnkgc3RydWN0dXJlcyBvciBkYXRhIGZyb20gd2l0aGluCiAgICB0aGUgY29tcG9uZW50IGhlYWRlciBkaXJlY3RseSAqLwogLyogVE8gQkUgUkVNT1ZFRCAtICNpbmNsdWRlIDxPTVhfQ29tcG9uZW50Lmg+ICovCiAKLS8qKiBHZXRDb21wb25lbnRWZXJzaW9uIHdpbGwgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wb25lbnQuICAKKy8qKiBHZXRDb21wb25lbnRWZXJzaW9uIHdpbGwgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wb25lbnQuCiAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICBUaGlzIG1hY3JvIHdpbGwgZ28gZGlyZWN0bHkgZnJvbSB0aGUKICAgICBhcHBsaWNhdGlvbiB0byB0aGUgY29tcG9uZW50ICh2aWEgYSBjb3JlIG1hY3JvKS4gIFRoZQogICAgIGNvbXBvbmVudCB3aWxsIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgaGFuZGxlIG9mIGNvbXBvbmVudCB0byBleGVjdXRlIHRoZSBjb21tYW5kCiAgICAgQHBhcmFtIFtvdXRdIHBDb21wb25lbnROYW1lCi0gICAgICAgIHBvaW50ZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9mIGxlbmd0aCAxMjggYnl0ZXMuICBUaGUgY29tcG9uZW50IAotICAgICAgICB3aWxsIHdyaXRlIGl0cyBuYW1lIGludG8gdGhpcyBzdHJpbmcuICBUaGUgbmFtZSB3aWxsIGJlIAotICAgICAgICB0ZXJtaW5hdGVkIGJ5IGEgc2luZ2xlIHplcm8gYnl0ZS4gIFRoZSBuYW1lIG9mIGEgY29tcG9uZW50IHdpbGwgCi0gICAgICAgIGJlIDEyNyBieXRlcyBvciBsZXNzIHRvIGxlYXZlIHJvb20gZm9yIHRoZSB0cmFpbGluZyB6ZXJvIGJ5dGUuICAKKyAgICAgICAgcG9pbnRlciB0byBhbiBlbXB0eSBzdHJpbmcgb2YgbGVuZ3RoIDEyOCBieXRlcy4gIFRoZSBjb21wb25lbnQKKyAgICAgICAgd2lsbCB3cml0ZSBpdHMgbmFtZSBpbnRvIHRoaXMgc3RyaW5nLiAgVGhlIG5hbWUgd2lsbCBiZQorICAgICAgICB0ZXJtaW5hdGVkIGJ5IGEgc2luZ2xlIHplcm8gYnl0ZS4gIFRoZSBuYW1lIG9mIGEgY29tcG9uZW50IHdpbGwKKyAgICAgICAgYmUgMTI3IGJ5dGVzIG9yIGxlc3MgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIHRyYWlsaW5nIHplcm8gYnl0ZS4KICAgICAgICAgQW4gZXhhbXBsZSBvZiBhIHZhbGlkIGNvbXBvbmVudCBuYW1lIGlzICJPTVguQUJDLkNoYW5uZWxNaXhlclwwIi4KICAgICBAcGFyYW0gW291dF0gcENvbXBvbmVudFZlcnNpb24KLSAgICAgICAgcG9pbnRlciB0byBhbiBPTVggVmVyc2lvbiBzdHJ1Y3R1cmUgdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgZmlsbCAKLSAgICAgICAgaW4uICBUaGUgY29tcG9uZW50IHdpbGwgZmlsbCBpbiBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSAKLSAgICAgICAgY29tcG9uZW50IHZlcnNpb24uICBOT1RFOiB0aGUgY29tcG9uZW50IHZlcnNpb24gaXMgTk9UIHRoZSBzYW1lIAotICAgICAgICBhcyB0aGUgT01YIFNwZWNpZmljYXRpb24gdmVyc2lvbiAoZm91bmQgaW4gYWxsIHN0cnVjdHVyZXMpLiAgVGhlIAotICAgICAgICBjb21wb25lbnQgdmVyc2lvbiBpcyBkZWZpbmVkIGJ5IHRoZSB2ZW5kb3Igb2YgdGhlIGNvbXBvbmVudCBhbmQgCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YIFZlcnNpb24gc3RydWN0dXJlIHRoYXQgdGhlIGNvbXBvbmVudCB3aWxsIGZpbGwKKyAgICAgICAgaW4uICBUaGUgY29tcG9uZW50IHdpbGwgZmlsbCBpbiBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZQorICAgICAgICBjb21wb25lbnQgdmVyc2lvbi4gIE5PVEU6IHRoZSBjb21wb25lbnQgdmVyc2lvbiBpcyBOT1QgdGhlIHNhbWUKKyAgICAgICAgYXMgdGhlIE9NWCBTcGVjaWZpY2F0aW9uIHZlcnNpb24gKGZvdW5kIGluIGFsbCBzdHJ1Y3R1cmVzKS4gIFRoZQorICAgICAgICBjb21wb25lbnQgdmVyc2lvbiBpcyBkZWZpbmVkIGJ5IHRoZSB2ZW5kb3Igb2YgdGhlIGNvbXBvbmVudCBhbmQKICAgICAgICAgaXRzIHZhbHVlIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb21wb25lbnQgdmVuZG9yLgogICAgIEBwYXJhbSBbb3V0XSBwU3BlY1ZlcnNpb24KLSAgICAgICAgcG9pbnRlciB0byBhbiBPTVggVmVyc2lvbiBzdHJ1Y3R1cmUgdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgZmlsbCAKLSAgICAgICAgaW4uICBUaGUgU3BlY1ZlcnNpb24gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgCi0gICAgICAgIGNvbXBvbmVudCB3YXMgYnVpbHQgYWdhaW5zdC4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyB2YWx1ZSBtYXkgb3IgCi0gICAgICAgIG1heSBub3QgbWF0Y2ggdGhlIHN0cnVjdHVyZSdzIHZlcnNpb24uICBGb3IgZXhhbXBsZSwgaWYgdGhlIAotICAgICAgICBjb21wb25lbnQgd2FzIGJ1aWx0IGFnYWluc3QgdGhlIDIuMCBzcGVjaWZpY2F0aW9uLCBidXQgdGhlIAotICAgICAgICBhcHBsaWNhdGlvbiAod2hpY2ggY3JlYXRlcyB0aGUgc3RydWN0dXJlIGlzIGJ1aWx0IGFnYWluc3QgdGhlIAorICAgICAgICBwb2ludGVyIHRvIGFuIE9NWCBWZXJzaW9uIHN0cnVjdHVyZSB0aGF0IHRoZSBjb21wb25lbnQgd2lsbCBmaWxsCisgICAgICAgIGluLiAgVGhlIFNwZWNWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uIHRoYXQgdGhlCisgICAgICAgIGNvbXBvbmVudCB3YXMgYnVpbHQgYWdhaW5zdC4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyB2YWx1ZSBtYXkgb3IKKyAgICAgICAgbWF5IG5vdCBtYXRjaCB0aGUgc3RydWN0dXJlJ3MgdmVyc2lvbi4gIEZvciBleGFtcGxlLCBpZiB0aGUKKyAgICAgICAgY29tcG9uZW50IHdhcyBidWlsdCBhZ2FpbnN0IHRoZSAyLjAgc3BlY2lmaWNhdGlvbiwgYnV0IHRoZQorICAgICAgICBhcHBsaWNhdGlvbiAod2hpY2ggY3JlYXRlcyB0aGUgc3RydWN0dXJlIGlzIGJ1aWx0IGFnYWluc3QgdGhlCiAgICAgICAgIDEuMCBzcGVjaWZpY2F0aW9uIHRoZSB2ZXJzaW9ucyB3b3VsZCBiZSBkaWZmZXJlbnQuCiAgICAgQHBhcmFtIFtvdXRdIHBDb21wb25lbnRVVUlECi0gICAgICAgIHBvaW50ZXIgdG8gdGhlIFVVSUQgb2YgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGJlIGZpbGxlZCBpbiBieSAKLSAgICAgICAgdGhlIGNvbXBvbmVudC4gIFRoZSBVVUlEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBpcyBzZXQgYXQgCi0gICAgICAgIFJVTiB0aW1lIGZvciB0aGUgY29tcG9uZW50IGFuZCBpcyB1bmlxdWUgdG8gZWFjaCBpbnN0YW50aW9uIG9mIAorICAgICAgICBwb2ludGVyIHRvIHRoZSBVVUlEIG9mIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gYnkKKyAgICAgICAgdGhlIGNvbXBvbmVudC4gIFRoZSBVVUlEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBpcyBzZXQgYXQKKyAgICAgICAgUlVOIHRpbWUgZm9yIHRoZSBjb21wb25lbnQgYW5kIGlzIHVuaXF1ZSB0byBlYWNoIGluc3RhbnRpb24gb2YKICAgICAgICAgdGhlIGNvbXBvbmVudC4KICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQpAQCAtNzE0LDQ2ICs3MTQsNDYgQEAKIAogLyoqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjb21wb25lbnQuICBUaGlzIGNhbGwgaXMgYSBub24tYmxvY2tpbmcgY2FsbC4KICAgICBUaGUgY29tcG9uZW50IHNob3VsZCBjaGVjayB0aGUgcGFyYW1ldGVycyBhbmQgdGhlbiBxdWV1ZSB0aGUgY29tbWFuZAotICAgIHRvIHRoZSBjb21wb25lbnQgdGhyZWFkIHRvIGJlIGV4ZWN1dGVkLiAgVGhlIGNvbXBvbmVudCB0aHJlYWQgc2hhbGwgCi0gICAgc2VuZCB0aGUgRXZlbnRIYW5kbGVyKCkgY2FsbGJhY2sgYXQgdGhlIGNvbmNsdXNpb24gb2YgdGhlIGNvbW1hbmQuIAorICAgIHRvIHRoZSBjb21wb25lbnQgdGhyZWFkIHRvIGJlIGV4ZWN1dGVkLiAgVGhlIGNvbXBvbmVudCB0aHJlYWQgc2hhbGwKKyAgICBzZW5kIHRoZSBFdmVudEhhbmRsZXIoKSBjYWxsYmFjayBhdCB0aGUgY29uY2x1c2lvbiBvZiB0aGUgY29tbWFuZC4KICAgICBUaGlzIG1hY3JvIHdpbGwgZ28gZGlyZWN0bHkgZnJvbSB0aGUgYXBwbGljYXRpb24gdG8gdGhlIGNvbXBvbmVudCAodmlhCiAgICAgYSBjb3JlIG1hY3JvKS4gIFRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kU3RhdGVTZXQiIHRoZSBjb21wb25lbnQgd2lsbCBxdWV1ZSBhCiAgICAgc3RhdGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IHN0YXRlIGlkZW5maWVkIGluIG5QYXJhbS4KLSAgICAKKwogICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kRmx1c2giLCB0byBmbHVzaCBhIHBvcnQncyBidWZmZXIgcXVldWVzLAotICAgIHRoZSBjb21tYW5kIHdpbGwgZm9yY2UgdGhlIGNvbXBvbmVudCB0byByZXR1cm4gYWxsIGJ1ZmZlcnMgTk9UIENVUlJFTlRMWSAKLSAgICBCRUlORyBQUk9DRVNTRUQgdG8gdGhlIGFwcGxpY2F0aW9uLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGJ1ZmZlcnMgCisgICAgdGhlIGNvbW1hbmQgd2lsbCBmb3JjZSB0aGUgY29tcG9uZW50IHRvIHJldHVybiBhbGwgYnVmZmVycyBOT1QgQ1VSUkVOVExZCisgICAgQkVJTkcgUFJPQ0VTU0VEIHRvIHRoZSBhcHBsaWNhdGlvbiwgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBidWZmZXJzCiAgICAgd2VyZSByZWNlaXZlZC4KLSAgICAKLSAgICBXaGVuIHRoZSBjb21tYW5kIGlzICJPTVhfQ29tbWFuZFBvcnREaXNhYmxlIiBvciAKKworICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kUG9ydERpc2FibGUiIG9yCiAgICAgIk9NWF9Db21tYW5kUG9ydEVuYWJsZSIsIHRoZSBjb21wb25lbnQncyBwb3J0IChnaXZlbiBieSB0aGUgdmFsdWUgb2YKLSAgICBuUGFyYW0pIHdpbGwgYmUgc3RvcHBlZCBvciByZXN0YXJ0ZWQuIAotICAgIAorICAgIG5QYXJhbSkgd2lsbCBiZSBzdG9wcGVkIG9yIHJlc3RhcnRlZC4KKwogICAgIFdoZW4gdGhlIGNvbW1hbmQgIk9NWF9Db21tYW5kTWFya0J1ZmZlciIgaXMgdXNlZCB0byBtYXJrIGEgYnVmZmVyLCB0aGUKICAgICBwQ21kRGF0YSB3aWxsIHBvaW50IHRvIGEgT01YX01BUktUWVBFIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBjb21wb25lbnQKICAgICBoYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBleGFtaW5lIHRoZSBidWZmZXIgY2hhaW4gZm9yIHRoZSBtYXJrLiAgblBhcmFtMQogICAgIGNvbnRhaW5zIHRoZSBpbmRleCBvZiB0aGUgcG9ydCBvbiB3aGljaCB0aGUgYnVmZmVyIG1hcmsgaXMgYXBwbGllZC4KIAotICAgIFNwZWNpZmljYXRpb24gdGV4dCBmb3IgbW9yZSBkZXRhaWxzLiAKLSAgICAKKyAgICBTcGVjaWZpY2F0aW9uIHRleHQgZm9yIG1vcmUgZGV0YWlscy4KKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgaGFuZGxlIG9mIGNvbXBvbmVudCB0byBleGVjdXRlIHRoZSBjb21tYW5kCiAgICAgQHBhcmFtIFtpbl0gQ21kCiAgICAgICAgIENvbW1hbmQgZm9yIHRoZSBjb21wb25lbnQgdG8gZXhlY3V0ZQogICAgIEBwYXJhbSBbaW5dIG5QYXJhbQotICAgICAgICBQYXJhbWV0ZXIgZm9yIHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLiAgV2hlbiBDbWQgaGFzIHRoZSB2YWx1ZSAKLSAgICAgICAgT01YX0NvbW1hbmRTdGF0ZVNldCwgdmFsdWUgaXMgYSBtZW1iZXIgb2YgT01YX1NUQVRFVFlQRS4gIFdoZW4gQ21kIGhhcyAKLSAgICAgICAgdGhlIHZhbHVlIE9NWF9Db21tYW5kRmx1c2gsIHZhbHVlIG9mIG5QYXJhbSBpbmRpY2F0ZXMgd2hpY2ggcG9ydChzKSAKLSAgICAgICAgdG8gZmx1c2guIC0xIGlzIHVzZWQgdG8gZmx1c2ggYWxsIHBvcnRzIGEgc2luZ2xlIHBvcnQgaW5kZXggd2lsbCAKKyAgICAgICAgUGFyYW1ldGVyIGZvciB0aGUgY29tbWFuZCB0byBiZSBleGVjdXRlZC4gIFdoZW4gQ21kIGhhcyB0aGUgdmFsdWUKKyAgICAgICAgT01YX0NvbW1hbmRTdGF0ZVNldCwgdmFsdWUgaXMgYSBtZW1iZXIgb2YgT01YX1NUQVRFVFlQRS4gIFdoZW4gQ21kIGhhcworICAgICAgICB0aGUgdmFsdWUgT01YX0NvbW1hbmRGbHVzaCwgdmFsdWUgb2YgblBhcmFtIGluZGljYXRlcyB3aGljaCBwb3J0KHMpCisgICAgICAgIHRvIGZsdXNoLiAtMSBpcyB1c2VkIHRvIGZsdXNoIGFsbCBwb3J0cyBhIHNpbmdsZSBwb3J0IGluZGV4IHdpbGwKICAgICAgICAgb25seSBmbHVzaCB0aGF0IHBvcnQuICBXaGVuIENtZCBoYXMgdGhlIHZhbHVlICJPTVhfQ29tbWFuZFBvcnREaXNhYmxlIgotICAgICAgICBvciAiT01YX0NvbW1hbmRQb3J0RW5hYmxlIiwgdGhlIGNvbXBvbmVudCdzIHBvcnQgaXMgZ2l2ZW4gYnkgCisgICAgICAgIG9yICJPTVhfQ29tbWFuZFBvcnRFbmFibGUiLCB0aGUgY29tcG9uZW50J3MgcG9ydCBpcyBnaXZlbiBieQogICAgICAgICB0aGUgdmFsdWUgb2YgblBhcmFtLiAgV2hlbiBDbWQgaGFzIHRoZSB2YWx1ZSAiT01YX0NvbW1hbmRNYXJrQnVmZmVyIgogICAgICAgICB0aGUgY29tcG9uZW50cyBwb3QgaXMgZ2l2ZW4gYnkgdGhlIHZhbHVlIG9mIG5QYXJhbS4KICAgICBAcGFyYW0gW2luXSBwQ21kRGF0YQogICAgICAgICBQYXJhbWV0ZXIgcG9pbnRpbmcgdG8gdGhlIE9NWF9NQVJLVFlQRSBzdHJ1Y3R1cmUgd2hlbiBDbWQgaGFzIHRoZSB2YWx1ZQotICAgICAgICAiT01YX0NvbW1hbmRNYXJrQnVmZmVyIi4gICAgIAorICAgICAgICAiT01YX0NvbW1hbmRNYXJrQnVmZmVyIi4KICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQogICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KQEAgLTc3MSwyMSArNzcxLDIxIEBACiAgICAgICAgICBwQ21kRGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLwogCiAKLS8qKiBUaGUgT01YX0dldFBhcmFtZXRlciBtYWNybyB3aWxsIGdldCBvbmUgb2YgdGhlIGN1cnJlbnQgcGFyYW1ldGVyIAotICAgIHNldHRpbmdzIGZyb20gdGhlIGNvbXBvbmVudC4gIFRoaXMgbWFjcm8gY2Fubm90IG9ubHkgYmUgaW52b2tlZCB3aGVuIAorLyoqIFRoZSBPTVhfR2V0UGFyYW1ldGVyIG1hY3JvIHdpbGwgZ2V0IG9uZSBvZiB0aGUgY3VycmVudCBwYXJhbWV0ZXIKKyAgICBzZXR0aW5ncyBmcm9tIHRoZSBjb21wb25lbnQuICBUaGlzIG1hY3JvIGNhbm5vdCBvbmx5IGJlIGludm9rZWQgd2hlbgogICAgIHRoZSBjb21wb25lbnQgaXMgaW4gdGhlIE9NWF9TdGF0ZUludmFsaWQgc3RhdGUuICBUaGUgblBhcmFtSW5kZXgKICAgICBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBzdHJ1Y3R1cmUgaXMgYmVpbmcgcmVxdWVzdGVkIGZyb20KLSAgICB0aGUgY29tcG9uZW50LiAgVGhlIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSAKLSAgICBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIAorICAgIHRoZSBjb21wb25lbnQuICBUaGUgYXBwbGljYXRpb24gc2hhbGwgYWxsb2NhdGUgdGhlIGNvcnJlY3Qgc3RydWN0dXJlCisgICAgYW5kIHNoYWxsIGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBzaXplIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGJlZm9yZQogICAgIGludm9raW5nIHRoaXMgbWFjcm8uICBXaGVuIHRoZSBwYXJhbWV0ZXIgYXBwbGllcyB0byBhIHBvcnQsIHRoZQogICAgIGNhbGxlciBzaGFsbCBmaWxsIGluIHRoZSBhcHByb3ByaWF0ZSBuUG9ydEluZGV4IHZhbHVlIGluZGljYXRpbmcgdGhlCi0gICAgcG9ydCBvbiB3aGljaCB0aGUgcGFyYW1ldGVyIGFwcGxpZXMuIElmIHRoZSBjb21wb25lbnQgaGFzIG5vdCBoYWQgCi0gICAgYW55IHNldHRpbmdzIGNoYW5nZWQsIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIAotICAgIHZhbGlkIERFRkFVTFQgIHBhcmFtZXRlcnMgZm9yIHRoZSBjb21wb25lbnQuICBUaGlzIGlzIGEgYmxvY2tpbmcgCi0gICAgY2FsbC4gIAotICAgIAorICAgIHBvcnQgb24gd2hpY2ggdGhlIHBhcmFtZXRlciBhcHBsaWVzLiBJZiB0aGUgY29tcG9uZW50IGhhcyBub3QgaGFkCisgICAgYW55IHNldHRpbmdzIGNoYW5nZWQsIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mCisgICAgdmFsaWQgREVGQVVMVCAgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gIFRoaXMgaXMgYSBibG9ja2luZworICAgIGNhbGwuCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KQEAgLTc5Myw3ICs3OTMsNyBAQAogICAgICAgICBJbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gIFRoaXMgdmFsdWUgaXMgZnJvbSB0aGUKICAgICAgICAgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbi4KICAgICBAcGFyYW0gW2luLG91dF0gcENvbXBvbmVudFBhcmFtZXRlclN0cnVjdHVyZQotICAgICAgICBQb2ludGVyIHRvIGFwcGxpY2F0aW9uIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGJ5IHRoZSAKKyAgICAgICAgUG9pbnRlciB0byBhcHBsaWNhdGlvbiBhbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBieSB0aGUKICAgICAgICAgY29tcG9uZW50LgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCkBAIC04MTQsMTcgKzgxNCwxNyBAQAogICAgIHN0cnVjdHVyZSB0byBhIGNvbXBvbmVudC4gIEVhY2ggc3RydWN0dXJlIHNoYWxsIGJlIHNlbnQgb25lIGF0IGEgdGltZSwKICAgICBpbiBhIHNlcGFyYXRlIGludm9jYXRpb24gb2YgdGhlIG1hY3JvLiAgVGhpcyBtYWNybyBjYW4gb25seSBiZQogICAgIGludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBPTVhfU3RhdGVMb2FkZWQgc3RhdGUsIG9yIHRoZQotICAgIHBvcnQgaXMgZGlzYWJsZWQgKHdoZW4gdGhlIHBhcmFtZXRlciBhcHBsaWVzIHRvIGEgcG9ydCkuIFRoZSAKKyAgICBwb3J0IGlzIGRpc2FibGVkICh3aGVuIHRoZSBwYXJhbWV0ZXIgYXBwbGllcyB0byBhIHBvcnQpLiBUaGUKICAgICBuUGFyYW1JbmRleCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBzdHJ1Y3R1cmUgaXMgYmVpbmcKLSAgICBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gIFRoZSBhcHBsaWNhdGlvbiBzaGFsbCBhbGxvY2F0ZSB0aGUgCi0gICAgY29ycmVjdCBzdHJ1Y3R1cmUgYW5kIHNoYWxsIGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBzaXplIGFuZCB2ZXJzaW9uIAorICAgIHBhc3NlZCB0byB0aGUgY29tcG9uZW50LiAgVGhlIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZQorICAgIGNvcnJlY3Qgc3RydWN0dXJlIGFuZCBzaGFsbCBmaWxsIGluIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgdmVyc2lvbgogICAgIGluZm9ybWF0aW9uIChhcyB3ZWxsIGFzIHRoZSBhY3R1YWwgZGF0YSkgYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uCiAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIGZyZWUgdG8gZGlzcG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBhZnRlciB0aGUgY2FsbAotICAgIGFzIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQgdG8gY29weSBhbnkgZGF0YSBpdCBzaGFsbCByZXRhaW4uICBUaGlzIAotICAgIGlzIGEgYmxvY2tpbmcgY2FsbC4gIAotICAgIAorICAgIGFzIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQgdG8gY29weSBhbnkgZGF0YSBpdCBzaGFsbCByZXRhaW4uICBUaGlzCisgICAgaXMgYSBibG9ja2luZyBjYWxsLgorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCkBAIC04NDksMTggKzg0OSwxOCBAQAogICAgICAgICBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKSAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9HZXRDb25maWcgbWFjcm8gd2lsbCBnZXQgb25lIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgCi0gICAgZnJvbSBhIGNvbXBvbmVudC4gIFRoaXMgbWFjcm8gY2FuIGJlIGludm9rZWQgYW55dGltZSBhZnRlciB0aGUgCi0gICAgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBuUGFyYW1JbmRleCBjYWxsIHBhcmFtZXRlciBpcyB1c2VkIHRvIAotICAgIGluZGljYXRlIHdoaWNoIHN0cnVjdHVyZSBpcyBiZWluZyByZXF1ZXN0ZWQgZnJvbSB0aGUgY29tcG9uZW50LiAgVGhlIAotICAgIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgCi0gICAgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uICAKLSAgICBJZiB0aGUgY29tcG9uZW50IGhhcyBub3QgaGFkIHRoaXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgc2VudCBiZWZvcmUsIAotICAgIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIHZhbGlkIERFRkFVTFQgdmFsdWVzIGZvciB0aGUgCi0gICAgY29tcG9uZW50LiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICAKLSAgICAKKy8qKiBUaGUgT01YX0dldENvbmZpZyBtYWNybyB3aWxsIGdldCBvbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcworICAgIGZyb20gYSBjb21wb25lbnQuICBUaGlzIG1hY3JvIGNhbiBiZSBpbnZva2VkIGFueXRpbWUgYWZ0ZXIgdGhlCisgICAgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBuUGFyYW1JbmRleCBjYWxsIHBhcmFtZXRlciBpcyB1c2VkIHRvCisgICAgaW5kaWNhdGUgd2hpY2ggc3RydWN0dXJlIGlzIGJlaW5nIHJlcXVlc3RlZCBmcm9tIHRoZSBjb21wb25lbnQuICBUaGUKKyAgICBhcHBsaWNhdGlvbiBzaGFsbCBhbGxvY2F0ZSB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUgYW5kIHNoYWxsIGZpbGwgaW4gdGhlCisgICAgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uCisgICAgSWYgdGhlIGNvbXBvbmVudCBoYXMgbm90IGhhZCB0aGlzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHNlbnQgYmVmb3JlLAorICAgIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIHZhbGlkIERFRkFVTFQgdmFsdWVzIGZvciB0aGUKKyAgICBjb21wb25lbnQuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbC4KKwogICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCkBAIC04NjgsMTMgKzg2OCwxMyBAQAogICAgICAgICBJbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gIFRoaXMgdmFsdWUgaXMgZnJvbSB0aGUKICAgICAgICAgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbi4KICAgICBAcGFyYW0gW2luLG91dF0gcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZQotICAgICAgICBwb2ludGVyIHRvIGFwcGxpY2F0aW9uIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGJ5IHRoZSAKKyAgICAgICAgcG9pbnRlciB0byBhcHBsaWNhdGlvbiBhbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBieSB0aGUKICAgICAgICAgY29tcG9uZW50LgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgogICAgIEBpbmdyb3VwIGNvbXAKLSovICAgICAgICAKKyovCiAjZGVmaW5lIE9NWF9HZXRDb25maWcoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIG5Db25maWdJbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04ODUsMTggKzg4NSwxOCBAQAogICAgICAgICBwQ29tcG9uZW50Q29uZmlnU3RydWN0dXJlKSAgICAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9TZXRDb25maWcgbWFjcm8gd2lsbCBzZW5kIG9uZSBvZiB0aGUgY29uZmlndXJhdGlvbiAKKy8qKiBUaGUgT01YX1NldENvbmZpZyBtYWNybyB3aWxsIHNlbmQgb25lIG9mIHRoZSBjb25maWd1cmF0aW9uCiAgICAgc3RydWN0dXJlcyB0byBhIGNvbXBvbmVudC4gIEVhY2ggc3RydWN0dXJlIHNoYWxsIGJlIHNlbnQgb25lIGF0IGEgdGltZSwKLSAgICBlYWNoIGluIGEgc2VwYXJhdGUgaW52b2NhdGlvbiBvZiB0aGUgbWFjcm8uICBUaGlzIG1hY3JvIGNhbiBiZSBpbnZva2VkIAotICAgIGFueXRpbWUgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBsb2FkZWQuICBUaGUgYXBwbGljYXRpb24gc2hhbGwgCi0gICAgYWxsb2NhdGUgdGhlIGNvcnJlY3Qgc3RydWN0dXJlIGFuZCBzaGFsbCBmaWxsIGluIHRoZSBzdHJ1Y3R1cmUgc2l6ZSAKLSAgICBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoYXMgd2VsbCBhcyB0aGUgYWN0dWFsIGRhdGEpIGJlZm9yZSBpbnZva2luZyAKLSAgICB0aGlzIG1hY3JvLiAgVGhlIGFwcGxpY2F0aW9uIGlzIGZyZWUgdG8gZGlzcG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBhZnRlciAKLSAgICB0aGUgY2FsbCBhcyB0aGUgY29tcG9uZW50IGlzIHJlcXVpcmVkIHRvIGNvcHkgYW55IGRhdGEgaXQgc2hhbGwgcmV0YWluLiAgCi0gICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICAKLSAgICAKKyAgICBlYWNoIGluIGEgc2VwYXJhdGUgaW52b2NhdGlvbiBvZiB0aGUgbWFjcm8uICBUaGlzIG1hY3JvIGNhbiBiZSBpbnZva2VkCisgICAgYW55dGltZSBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaGFsbAorICAgIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgc3RydWN0dXJlIHNpemUKKyAgICBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoYXMgd2VsbCBhcyB0aGUgYWN0dWFsIGRhdGEpIGJlZm9yZSBpbnZva2luZworICAgIHRoaXMgbWFjcm8uICBUaGUgYXBwbGljYXRpb24gaXMgZnJlZSB0byBkaXNwb3NlIG9mIHRoaXMgc3RydWN0dXJlIGFmdGVyCisgICAgdGhlIGNhbGwgYXMgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZCB0byBjb3B5IGFueSBkYXRhIGl0IHNoYWxsIHJldGFpbi4KKyAgICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbC4KKwogICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCkBAIC05MjEsMjIgKzkyMSwyMiBAQAogICAgICAgICBwQ29tcG9uZW50Q29uZmlnU3RydWN0dXJlKSAgICAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9HZXRFeHRlbnNpb25JbmRleCBtYWNybyB3aWxsIGludm9rZSBhIGNvbXBvbmVudCB0byB0cmFuc2xhdGUgCi0gICAgYSB2ZW5kb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvciBwYXJhbWV0ZXIgc3RyaW5nIGludG8gYW4gT01YIAotICAgIHN0cnVjdHVyZSBpbmRleC4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUgdmVuZG9yIHRvIHN1cHBvcnQgCi0gICAgdGhpcyBjb21tYW5kIGZvciB0aGUgaW5kZXhlcyBhbHJlYWR5IGZvdW5kIGluIHRoZSBPTVhfSU5ERVhUWVBFIAotICAgIGVudW1lcmF0aW9uICh0aGlzIGlzIGRvbmUgdG8gc2F2ZSBzcGFjZSBpbiBzbWFsbCBjb21wb25lbnRzKS4gIFRoZSAKKy8qKiBUaGUgT01YX0dldEV4dGVuc2lvbkluZGV4IG1hY3JvIHdpbGwgaW52b2tlIGEgY29tcG9uZW50IHRvIHRyYW5zbGF0ZQorICAgIGEgdmVuZG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgcGFyYW1ldGVyIHN0cmluZyBpbnRvIGFuIE9NWAorICAgIHN0cnVjdHVyZSBpbmRleC4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUgdmVuZG9yIHRvIHN1cHBvcnQKKyAgICB0aGlzIGNvbW1hbmQgZm9yIHRoZSBpbmRleGVzIGFscmVhZHkgZm91bmQgaW4gdGhlIE9NWF9JTkRFWFRZUEUKKyAgICBlbnVtZXJhdGlvbiAodGhpcyBpcyBkb25lIHRvIHNhdmUgc3BhY2UgaW4gc21hbGwgY29tcG9uZW50cykuICBUaGUKICAgICBjb21wb25lbnQgc2hhbGwgc3VwcG9ydCBhbGwgdmVuZG9yIHN1cHBsaWVkIGV4dGVuc2lvbiBpbmRleGVzIG5vdCBmb3VuZAotICAgIGluIHRoZSBtYXN0ZXIgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbi4gIFRoaXMgaXMgYSBibG9ja2luZyBjYWxsLiAgCi0gICAgCisgICAgaW4gdGhlIG1hc3RlciBPTVhfSU5ERVhUWVBFIGVudW1lcmF0aW9uLiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgQHBhcmFtIFtpbl0gY1BhcmFtZXRlck5hbWUKICAgICAgICAgT01YX1NUUklORyB0aGF0IHNoYWxsIGJlIGxlc3MgdGhhbiAxMjggY2hhcmFjdGVycyBsb25nIGluY2x1ZGluZwotICAgICAgICB0aGUgdHJhaWxpbmcgbnVsbCBieXRlLiAgVGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBnZXQgCisgICAgICAgIHRoZSB0cmFpbGluZyBudWxsIGJ5dGUuICBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGdldAogICAgICAgICB0cmFuc2xhdGVkIGJ5IHRoZSBjb21wb25lbnQgaW50byBhIGNvbmZpZ3VyYXRpb24gaW5kZXguCiAgICAgQHBhcmFtIFtvdXRdIHBJbmRleFR5cGUKICAgICAgICAgYSBwb2ludGVyIHRvIGEgT01YX0lOREVYVFlQRSB0byByZWNlaXZlIHRoZSBpbmRleCB2YWx1ZS4KQEAgLTk1NSwxOCArOTU1LDE4IEBACiAgICAgICAgIHBJbmRleFR5cGUpICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gRW5kICovCiAKIAotLyoqIFRoZSBPTVhfR2V0U3RhdGUgbWFjcm8gd2lsbCBpbnZva2UgdGhlIGNvbXBvbmVudCB0byBnZXQgdGhlIGN1cnJlbnQgCisvKiogVGhlIE9NWF9HZXRTdGF0ZSBtYWNybyB3aWxsIGludm9rZSB0aGUgY29tcG9uZW50IHRvIGdldCB0aGUgY3VycmVudAogICAgIHN0YXRlIG9mIHRoZSBjb21wb25lbnQgYW5kIHBsYWNlIHRoZSBzdGF0ZSB2YWx1ZSBpbnRvIHRoZSBsb2NhdGlvbgotICAgIHBvaW50ZWQgdG8gYnkgcFN0YXRlLiAgCi0gICAgCisgICAgcG9pbnRlZCB0byBieSBwU3RhdGUuCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgogICAgIEBwYXJhbSBbb3V0XSBwU3RhdGUKICAgICAgICAgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gdG8gcmVjZWl2ZSB0aGUgc3RhdGUuICBUaGUgdmFsdWUgcmV0dXJuZWQKLSAgICAgICAgaXMgb25lIG9mIHRoZSBPTVhfU1RBVEVUWVBFIG1lbWJlcnMgCisgICAgICAgIGlzIG9uZSBvZiB0aGUgT01YX1NUQVRFVFlQRSBtZW1iZXJzCiAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCiAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKICAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCkBAIC05ODEsMTcgKzk4MSwxNyBAQAogCiAKIC8qKiBUaGUgT01YX1VzZUJ1ZmZlciBtYWNybyB3aWxsIHJlcXVlc3QgdGhhdCB0aGUgY29tcG9uZW50IHVzZQotICAgIGEgYnVmZmVyIChhbmQgYWxsb2NhdGUgaXRzIG93biBidWZmZXIgaGVhZGVyKSBhbHJlYWR5IGFsbG9jYXRlZCAKLSAgICBieSBhbm90aGVyIGNvbXBvbmVudCwgb3IgYnkgdGhlIElMIENsaWVudC4gVGhpcyBpcyBhIGJsb2NraW5nIAorICAgIGEgYnVmZmVyIChhbmQgYWxsb2NhdGUgaXRzIG93biBidWZmZXIgaGVhZGVyKSBhbHJlYWR5IGFsbG9jYXRlZAorICAgIGJ5IGFub3RoZXIgY29tcG9uZW50LCBvciBieSB0aGUgSUwgQ2xpZW50LiBUaGlzIGlzIGEgYmxvY2tpbmcKICAgICBjYWxsLgotICAgIAorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgQHBhcmFtIFtvdXRdIHBwQnVmZmVyCi0gICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZSB0aGUgCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZSB0aGUKICAgICAgICAgcG9pbnRlciB0byB0aGUgYnVmZmVyIGhlYWRlcgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCkBAIC0xMDE1LDI1ICsxMDE1LDI1IEBACiAgICAgICAgICAgIHBCdWZmZXIpCiAKIAotLyoqIFRoZSBPTVhfQWxsb2NhdGVCdWZmZXIgbWFjcm8gd2lsbCByZXF1ZXN0IHRoYXQgdGhlIGNvbXBvbmVudCBhbGxvY2F0ZSAKLSAgICBhIG5ldyBidWZmZXIgYW5kIGJ1ZmZlciBoZWFkZXIuICBUaGUgY29tcG9uZW50IHdpbGwgYWxsb2NhdGUgdGhlIAotICAgIGJ1ZmZlciBhbmQgdGhlIGJ1ZmZlciBoZWFkZXIgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciAKKy8qKiBUaGUgT01YX0FsbG9jYXRlQnVmZmVyIG1hY3JvIHdpbGwgcmVxdWVzdCB0aGF0IHRoZSBjb21wb25lbnQgYWxsb2NhdGUKKyAgICBhIG5ldyBidWZmZXIgYW5kIGJ1ZmZlciBoZWFkZXIuICBUaGUgY29tcG9uZW50IHdpbGwgYWxsb2NhdGUgdGhlCisgICAgYnVmZmVyIGFuZCB0aGUgYnVmZmVyIGhlYWRlciBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyCiAgICAgaGVhZGVyLiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCi0gICAgCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgogICAgIEBwYXJhbSBbb3V0XSBwcEJ1ZmZlcgotICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9CVUZGRVJIRUFERVJUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHJlY2VpdmUgCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZQogICAgICAgICB0aGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIGhlYWRlcgogICAgIEBwYXJhbSBbaW5dIG5Qb3J0SW5kZXgKICAgICAgICAgblBvcnRJbmRleCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcG9ydCBvbiB0aGUgY29tcG9uZW50IHRoZSBidWZmZXIgd2lsbAogICAgICAgICBiZSB1c2VkIHdpdGguICBUaGUgcG9ydCBjYW4gYmUgZm91bmQgYnkgdXNpbmcgdGhlIG5Qb3J0SW5kZXgKICAgICAgICAgdmFsdWUgYXMgYW4gaW5kZXggaW50byB0aGUgUG9ydCBEZWZpbml0aW9uIGFycmF5IG9mIHRoZSBjb21wb25lbnQuCiAgICAgQHBhcmFtIFtpbl0gcEFwcFByaXZhdGUKLSAgICAgICAgcEFwcFByaXZhdGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwQXBwUHJpdmF0ZSBtZW1iZXIgb2YgdGhlIAorICAgICAgICBwQXBwUHJpdmF0ZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBBcHBQcml2YXRlIG1lbWJlciBvZiB0aGUKICAgICAgICAgYnVmZmVyIGhlYWRlciBzdHJ1Y3R1cmUuCiAgICAgQHBhcmFtIFtpbl0gblNpemVCeXRlcwogICAgICAgICBzaXplIG9mIHRoZSBidWZmZXIgdG8gYWxsb2NhdGUuICBVc2VkIHdoZW4gYkFsbG9jYXRlTmV3IGlzIHRydWUuCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgogICAgIEBpbmdyb3VwIGNvbXAgYnVmCi0gKi8gICAgCisgKi8KICNkZWZpbmUgT01YX0FsbG9jYXRlQnVmZmVyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcHBCdWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwNTcsMTMgKzEwNTcsMTMgQEAKIAogCiAvKiogVGhlIE9NWF9GcmVlQnVmZmVyIG1hY3JvIHdpbGwgcmVsZWFzZSBhIGJ1ZmZlciBoZWFkZXIgZnJvbSB0aGUgY29tcG9uZW50Ci0gICAgd2hpY2ggd2FzIGFsbG9jYXRlZCB1c2luZyBlaXRoZXIgT01YX0FsbG9jYXRlQnVmZmVyIG9yIE9NWF9Vc2VCdWZmZXIuIElmICAKLSAgICB0aGUgY29tcG9uZW50IGFsbG9jYXRlZCB0aGUgYnVmZmVyIChzZWUgdGhlIE9NWF9Vc2VCdWZmZXIgbWFjcm8pIHRoZW4gCi0gICAgdGhlIGNvbXBvbmVudCBzaGFsbCBmcmVlIHRoZSBidWZmZXIgYW5kIGJ1ZmZlciBoZWFkZXIuIFRoaXMgaXMgYSAKLSAgICBibG9ja2luZyBjYWxsLiAKLSAgICAKKyAgICB3aGljaCB3YXMgYWxsb2NhdGVkIHVzaW5nIGVpdGhlciBPTVhfQWxsb2NhdGVCdWZmZXIgb3IgT01YX1VzZUJ1ZmZlci4gSWYKKyAgICB0aGUgY29tcG9uZW50IGFsbG9jYXRlZCB0aGUgYnVmZmVyIChzZWUgdGhlIE9NWF9Vc2VCdWZmZXIgbWFjcm8pIHRoZW4KKyAgICB0aGUgY29tcG9uZW50IHNoYWxsIGZyZWUgdGhlIGJ1ZmZlciBhbmQgYnVmZmVyIGhlYWRlci4gVGhpcyBpcyBhCisgICAgYmxvY2tpbmcgY2FsbC4KKwogICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgpAQCAtMTA4OCwxNyArMTA4OCwxNyBAQAogICAgICAgICBwQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLwogCiAKLS8qKiBUaGUgT01YX0VtcHR5VGhpc0J1ZmZlciBtYWNybyB3aWxsIHNlbmQgYSBidWZmZXIgZnVsbCBvZiBkYXRhIHRvIGFuIAorLyoqIFRoZSBPTVhfRW1wdHlUaGlzQnVmZmVyIG1hY3JvIHdpbGwgc2VuZCBhIGJ1ZmZlciBmdWxsIG9mIGRhdGEgdG8gYW4KICAgICBpbnB1dCBwb3J0IG9mIGEgY29tcG9uZW50LiAgVGhlIGJ1ZmZlciB3aWxsIGJlIGVtcHRpZWQgYnkgdGhlIGNvbXBvbmVudAogICAgIGFuZCByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24gdmlhIHRoZSBFbXB0eUJ1ZmZlckRvbmUgY2FsbCBiYWNrLgogICAgIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgY2FsbCBpbiB0aGF0IHRoZSBjb21wb25lbnQgd2lsbCByZWNvcmQgdGhlIGJ1ZmZlcgotICAgIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIHRoZW4gZW1wdHkgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIgCi0gICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudCAKKyAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGVtcHR5IHRoZSBidWZmZXIsIGxhdGVyLCBhdCB0aGUgcHJvcGVyCisgICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudAogICAgIGlzIGluIHRoZSBPTVhfU3RhdGVFeGVjdXRpbmcuICBJZiBuUG9ydEluZGV4IGRvZXMgbm90IHNwZWNpZnkgYW4gaW5wdXQKLSAgICBwb3J0LCB0aGUgY29tcG9uZW50IHNoYWxsIHJldHVybiBhbiBlcnJvci4gIAotICAgIAorICAgIHBvcnQsIHRoZSBjb21wb25lbnQgc2hhbGwgcmV0dXJuIGFuIGVycm9yLgorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KQEAgLTExMTgsMTcgKzExMTgsMTcgQEAKICAgICAgICAgcEJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9GaWxsVGhpc0J1ZmZlciBtYWNybyB3aWxsIHNlbmQgYW4gZW1wdHkgYnVmZmVyIHRvIGFuIAorLyoqIFRoZSBPTVhfRmlsbFRoaXNCdWZmZXIgbWFjcm8gd2lsbCBzZW5kIGFuIGVtcHR5IGJ1ZmZlciB0byBhbgogICAgIG91dHB1dCBwb3J0IG9mIGEgY29tcG9uZW50LiAgVGhlIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCBieSB0aGUgY29tcG9uZW50CiAgICAgYW5kIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbiB2aWEgdGhlIEZpbGxCdWZmZXJEb25lIGNhbGwgYmFjay4KICAgICBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGNhbGwgaW4gdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgcmVjb3JkIHRoZSBidWZmZXIKLSAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZpbGwgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIgCi0gICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudCAKKyAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZpbGwgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIKKyAgICB0aW1lLiAgQXMgZXhwZWN0ZWQsIHRoaXMgbWFjcm8gbWF5IGJlIGludm9rZWQgb25seSB3aGlsZSB0aGUgY29tcG9uZW50CiAgICAgaXMgaW4gdGhlIE9NWF9FeGVjdXRpbmdTdGF0ZS4gIElmIG5Qb3J0SW5kZXggZG9lcyBub3Qgc3BlY2lmeSBhbiBvdXRwdXQKLSAgICBwb3J0LCB0aGUgY29tcG9uZW50IHNoYWxsIHJldHVybiBhbiBlcnJvci4gIAotICAgIAorICAgIHBvcnQsIHRoZSBjb21wb25lbnQgc2hhbGwgcmV0dXJuIGFuIGVycm9yLgorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KQEAgLTExNTIsMTQgKzExNTIsMTQgQEAKIC8qKiBUaGUgT01YX1VzZUVHTEltYWdlIG1hY3JvIHdpbGwgcmVxdWVzdCB0aGF0IHRoZSBjb21wb25lbnQgdXNlCiAgICAgYSBFR0xJbWFnZSBwcm92aWRlZCBieSBFR0wgKGFuZCBhbGxvY2F0ZSBpdHMgb3duIGJ1ZmZlciBoZWFkZXIpCiAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCi0gICAgCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KICAgICBAcGFyYW0gW291dF0gcHBCdWZmZXIKLSAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgdXNlZCB0byByZWNlaXZlIHRoZSAKKyAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgdXNlZCB0byByZWNlaXZlIHRoZQogICAgICAgICBwb2ludGVyIHRvIHRoZSBidWZmZXIgaGVhZGVyLiAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgbG9jYXRpb24gdXNlZAogICAgICAgICBmb3IgdGhpcyBidWZmZXIgaXMgTk9UIHZpc2libGUgdG8gdGhlIElMIENsaWVudC4KICAgICBAcGFyYW0gW2luXSBuUG9ydEluZGV4CkBAIC0xMTY3LDEzICsxMTY3LDEzIEBACiAgICAgICAgIGJlIHVzZWQgd2l0aC4gIFRoZSBwb3J0IGNhbiBiZSBmb3VuZCBieSB1c2luZyB0aGUgblBvcnRJbmRleAogICAgICAgICB2YWx1ZSBhcyBhbiBpbmRleCBpbnRvIHRoZSBQb3J0IERlZmluaXRpb24gYXJyYXkgb2YgdGhlIGNvbXBvbmVudC4KICAgICBAcGFyYW0gW2luXSBwQXBwUHJpdmF0ZQotICAgICAgICBwQXBwUHJpdmF0ZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBBcHBQcml2YXRlIG1lbWJlciBvZiB0aGUgCisgICAgICAgIHBBcHBQcml2YXRlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcEFwcFByaXZhdGUgbWVtYmVyIG9mIHRoZQogICAgICAgICBidWZmZXIgaGVhZGVyIHN0cnVjdHVyZS4KICAgICBAcGFyYW0gW2luXSBlZ2xJbWFnZQogICAgICAgICBlZ2xJbWFnZSBjb250YWlucyB0aGUgaGFuZGxlIG9mIHRoZSBFR0xJbWFnZSB0byB1c2UgYXMgYSBidWZmZXIgb24gdGhlCi0gICAgICAgIHNwZWNpZmllZCBwb3J0LiAgVGhlIGNvbXBvbmVudCBpcyBleHBlY3RlZCB0byB2YWxpZGF0ZSBwcm9wZXJ0aWVzIG9mIAorICAgICAgICBzcGVjaWZpZWQgcG9ydC4gIFRoZSBjb21wb25lbnQgaXMgZXhwZWN0ZWQgdG8gdmFsaWRhdGUgcHJvcGVydGllcyBvZgogICAgICAgICB0aGUgRUdMSW1hZ2UgYWdhaW5zdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCB0byBlbnN1cmUgdGhlIGNvbXBvbmVudAotICAgICAgICBjYW4gdXNlIHRoZSBFR0xJbWFnZSBhcyBhIGJ1ZmZlci4gICAgICAgICAgCisgICAgICAgIGNhbiB1c2UgdGhlIEVHTEltYWdlIGFzIGEgYnVmZmVyLgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgpAQCAtMTE5NCw4ICsxMTk0LDggQEAKIAogLyoqIFRoZSBPTVhfSW5pdCBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBPTVggY29yZS4gIEl0IHNoYWxsIGJlIHRoZQogICAgIGZpcnN0IGNhbGwgbWFkZSBpbnRvIE9NWCBhbmQgaXQgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgb25lIHRpbWUgd2l0aG91dAotICAgIGFuIGludGVydmllbmluZyBPTVhfRGVpbml0IGNhbGwuICAKLSAgICAKKyAgICBhbiBpbnRlcnZpZW5pbmcgT01YX0RlaW5pdCBjYWxsLgorCiAgICAgVGhlIGNvcmUgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KIAogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQpAQCAtMTIwNiwxMyArMTIwNiwxMyBAQAogT01YX0FQSSBPTVhfRVJST1JUWVBFIE9NWF9BUElFTlRSWSBPTVhfSW5pdCh2b2lkKTsKIAogCi0vKiogVGhlIE9NWF9EZWluaXQgbWV0aG9kIGlzIHVzZWQgdG8gZGVpbml0aWFsaXplIHRoZSBPTVggY29yZS4gIEl0IHNoYWxsIGJlIAotICAgIHRoZSBsYXN0IGNhbGwgbWFkZSBpbnRvIE9NWC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNvcmUgZGV0ZXJtaW5lcyB0aGF0IAotICAgIHRoYXJlIGFyZSBjb21wb25lbnRzIGxvYWRlZCB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlLCB0aGUgY29yZSBtYXkgcmV0dXJuIAorLyoqIFRoZSBPTVhfRGVpbml0IG1ldGhvZCBpcyB1c2VkIHRvIGRlaW5pdGlhbGl6ZSB0aGUgT01YIGNvcmUuICBJdCBzaGFsbCBiZQorICAgIHRoZSBsYXN0IGNhbGwgbWFkZSBpbnRvIE9NWC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNvcmUgZGV0ZXJtaW5lcyB0aGF0CisgICAgdGhhcmUgYXJlIGNvbXBvbmVudHMgbG9hZGVkIHdoZW4gdGhpcyBjYWxsIGlzIG1hZGUsIHRoZSBjb3JlIG1heSByZXR1cm4KICAgICB3aXRoIGFuIGVycm9yIHJhdGhlciB0aGFuIHRyeSB0byB1bmxvYWQgdGhlIGNvbXBvbmVudHMuCi0gICAgICAgIAorCiAgICAgVGhlIGNvcmUgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KLSAgICAKKwogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgpAQCAtMTIyOSwyMyArMTIyOSwyMyBAQAogICAgIGluc3RhbGxhdGlvbiBvZiBuZXcgY29tcG9uZW50cywgaXQgaXMgb25seSByZXF1cmllZCB0byBkZXRlY3QgbmV3bHkKICAgICBpbnN0YWxsZWQgY29tcG9uZW50cyB3aGVuIHRoZSBmaXJzdCBjYWxsIHRvIGVudW1lcmF0ZSBjb21wb25lbnQgbmFtZXMKICAgICBpcyBtYWRlIChpLmUuIHdoZW4gbkluZGV4IGlzIDB4MCkuCi0gICAgCisKICAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW291dF0gY0NvbXBvbmVudE5hbWUKICAgICAgICAgcG9pbnRlciB0byBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgd2l0aCB0aGUgY29tcG9uZW50IG5hbWUuICBUaGUKICAgICAgICAgbmFtZXMgb2YgdGhlIGNvbXBvbmVudHMgYXJlIHN0cmluZ3MgbGVzcyB0aGFuIDEyNyBieXRlcyBpbiBsZW5ndGgKLSAgICAgICAgcGx1cyB0aGUgdHJhaWxpbmcgbnVsbCBmb3IgYSBtYXhpbXVtIHNpemUgb2YgMTI4IGJ5dGVzLiAgQW4gZXhhbXBsZSAKLSAgICAgICAgb2YgYSB2YWxpZCBjb21wb25lbnQgbmFtZSBpcyAiT01YLlRJLkFVRElPLkRTUC5NSVhFUlwwIi4gIE5hbWVzIGFyZSAKLSAgICAgICAgYXNzaWduZWQgYnkgdGhlIHZlbmRvciwgYnV0IHNoYWxsIHN0YXJ0IHdpdGggIk9NWC4iIGFuZCB0aGVuIGhhdmUgCisgICAgICAgIHBsdXMgdGhlIHRyYWlsaW5nIG51bGwgZm9yIGEgbWF4aW11bSBzaXplIG9mIDEyOCBieXRlcy4gIEFuIGV4YW1wbGUKKyAgICAgICAgb2YgYSB2YWxpZCBjb21wb25lbnQgbmFtZSBpcyAiT01YLlRJLkFVRElPLkRTUC5NSVhFUlwwIi4gIE5hbWVzIGFyZQorICAgICAgICBhc3NpZ25lZCBieSB0aGUgdmVuZG9yLCBidXQgc2hhbGwgc3RhcnQgd2l0aCAiT01YLiIgYW5kIHRoZW4gaGF2ZQogICAgICAgICB0aGUgVmVuZG9yIGRlc2lnbmF0aW9uIG5leHQuCiAgICAgQHBhcmFtIFtpbl0gbk5hbWVMZW5ndGgKLSAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGNDb21wb25lbnROYW1lIHN0cmluZy4gIFdpdGggYWxsIAotICAgICAgICBjb21wb25lbnQgbmFtZSBzdHJpbmdzIHJlc3RyaWN0ZWQgdG8gbGVzcyB0aGFuIDEyOCBjaGFyYWN0ZXJzIAorICAgICAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgY0NvbXBvbmVudE5hbWUgc3RyaW5nLiAgV2l0aCBhbGwKKyAgICAgICAgY29tcG9uZW50IG5hbWUgc3RyaW5ncyByZXN0cmljdGVkIHRvIGxlc3MgdGhhbiAxMjggY2hhcmFjdGVycwogICAgICAgICAoaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsKSBpdCBpcyByZWNvbWVuZGVkIHRoYXQgdGhlIGNhbGxlcgogICAgICAgICBwcm92aWRlIGEgaW5wdXQgc3RyaW5nIGZvciB0aGUgY0NvbXBvbmVudE5hbWUgb2YgMTI4IGNoYXJhY3RlcnMuCiAgICAgQHBhcmFtIFtpbl0gbkluZGV4Ci0gICAgICAgIG51bWJlciBjb250YWluaW5nIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGNvbXBvbmVudC4gCisgICAgICAgIG51bWJlciBjb250YWluaW5nIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGNvbXBvbmVudC4KICAgICAgICAgTXVsdGlwbGUgY2FsbHMgdG8gT01YX0NvbXBvbmVudE5hbWVFbnVtIHdpdGggaW5jcmVhc2luZyB2YWx1ZXMKICAgICAgICAgb2YgbkluZGV4IHdpbGwgZW51bWVyYXRlIHRocm91Z2ggdGhlIGNvbXBvbmVudCBuYW1lcyBpbiB0aGUKICAgICAgICAgc3lzdGVtIHVudGlsIE9NWF9FcnJvck5vTW9yZSBpcyByZXR1cm5lZC4gIFRoZSB2YWx1ZSBvZiBuSW5kZXgKQEAgLTEyNTMsNyArMTI1Myw3IEBACiAgICAgICAgIGluIHRoZSBzeXN0ZW0uCiAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCiAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKLSAgICAgICAgT01YX0Vycm9yTm9uZS4gIFdoZW4gdGhlIHZhbHVlIG9mIG5JbmRleCBleGNlZWRzIHRoZSBudW1iZXIgb2YgCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBXaGVuIHRoZSB2YWx1ZSBvZiBuSW5kZXggZXhjZWVkcyB0aGUgbnVtYmVyIG9mCiAgICAgICAgIGNvbXBvbmVudHMgaW4gdGhlIHN5c3RlbSBtaW51cyAxLCBPTVhfRXJyb3JOb01vcmUgd2lsbCBiZQogICAgICAgICByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KICAgICBAaW5ncm91cCBjb3JlCkBAIC0xMjY2LDE4ICsxMjY2LDE4IEBACiAKIC8qKiBUaGUgT01YX0dldEhhbmRsZSBtZXRob2Qgd2lsbCBsb2NhdGUgdGhlIGNvbXBvbmVudCBzcGVjaWZpZWQgYnkgdGhlCiAgICAgY29tcG9uZW50IG5hbWUgZ2l2ZW4sIGxvYWQgdGhhdCBjb21wb25lbnQgaW50byBtZW1vcnkgYW5kIHRoZW4gaW52b2tlCi0gICAgdGhlIGNvbXBvbmVudCdzIG1ldGhvZHMgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQuICAKLSAgICAKKyAgICB0aGUgY29tcG9uZW50J3MgbWV0aG9kcyB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC4KKwogICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW291dF0gcEhhbmRsZQogICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9IQU5ETEVUWVBFIHBvaW50ZXIgdG8gYmUgZmlsbGVkIGluIGJ5IHRoaXMgbWV0aG9kLgogICAgIEBwYXJhbSBbaW5dIGNDb21wb25lbnROYW1lCiAgICAgICAgIHBvaW50ZXIgdG8gYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lLiAgVGhlCiAgICAgICAgIG5hbWVzIG9mIHRoZSBjb21wb25lbnRzIGFyZSBzdHJpbmdzIGxlc3MgdGhhbiAxMjcgYnl0ZXMgaW4gbGVuZ3RoCi0gICAgICAgIHBsdXMgdGhlIHRyYWlsaW5nIG51bGwgZm9yIGEgbWF4aW11bSBzaXplIG9mIDEyOCBieXRlcy4gIEFuIGV4YW1wbGUgCi0gICAgICAgIG9mIGEgdmFsaWQgY29tcG9uZW50IG5hbWUgaXMgIk9NWC5USS5BVURJTy5EU1AuTUlYRVJcMCIuICBOYW1lcyBhcmUgCi0gICAgICAgIGFzc2lnbmVkIGJ5IHRoZSB2ZW5kb3IsIGJ1dCBzaGFsbCBzdGFydCB3aXRoICJPTVguIiBhbmQgdGhlbiBoYXZlIAorICAgICAgICBwbHVzIHRoZSB0cmFpbGluZyBudWxsIGZvciBhIG1heGltdW0gc2l6ZSBvZiAxMjggYnl0ZXMuICBBbiBleGFtcGxlCisgICAgICAgIG9mIGEgdmFsaWQgY29tcG9uZW50IG5hbWUgaXMgIk9NWC5USS5BVURJTy5EU1AuTUlYRVJcMCIuICBOYW1lcyBhcmUKKyAgICAgICAgYXNzaWduZWQgYnkgdGhlIHZlbmRvciwgYnV0IHNoYWxsIHN0YXJ0IHdpdGggIk9NWC4iIGFuZCB0aGVuIGhhdmUKICAgICAgICAgdGhlIFZlbmRvciBkZXNpZ25hdGlvbiBuZXh0LgogICAgIEBwYXJhbSBbaW5dIHBBcHBEYXRhCiAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQKQEAgLTEyODUsMjQgKzEyODUsMjQgQEAKICAgICAgICAgb2YgdGhlIGNhbGxiYWNrLgogICAgIEBwYXJhbSBbaW5dIHBDYWxsQmFja3MKICAgICAgICAgcG9pbnRlciB0byBhIE9NWF9DQUxMQkFDS1RZUEUgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICAgICAgIGNvbXBvbmVudCB0byBpbml0aWFsaXplIGl0IHdpdGguICAKKyAgICAgICAgY29tcG9uZW50IHRvIGluaXRpYWxpemUgaXQgd2l0aC4KICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQogICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KICAgICBAaW5ncm91cCBjb3JlCiAgKi8KIE9NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfQVBJRU5UUlkgT01YX0dldEhhbmRsZSgKLSAgICBPTVhfT1VUIE9NWF9IQU5ETEVUWVBFKiBwSGFuZGxlLCAKKyAgICBPTVhfT1VUIE9NWF9IQU5ETEVUWVBFKiBwSGFuZGxlLAogICAgIE9NWF9JTiAgT01YX1NUUklORyBjQ29tcG9uZW50TmFtZSwKICAgICBPTVhfSU4gIE9NWF9QVFIgcEFwcERhdGEsCiAgICAgT01YX0lOICBPTVhfQ0FMTEJBQ0tUWVBFKiBwQ2FsbEJhY2tzKTsKIAogCi0vKiogVGhlIE9NWF9GcmVlSGFuZGxlIG1ldGhvZCB3aWxsIGZyZWUgYSBoYW5kbGUgYWxsb2NhdGVkIGJ5IHRoZSBPTVhfR2V0SGFuZGxlIAorLyoqIFRoZSBPTVhfRnJlZUhhbmRsZSBtZXRob2Qgd2lsbCBmcmVlIGEgaGFuZGxlIGFsbG9jYXRlZCBieSB0aGUgT01YX0dldEhhbmRsZQogICAgIG1ldGhvZC4gIElmIHRoZSBjb21wb25lbnQgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gemVybywgdGhlIGNvbXBvbmVudCB3aWxsCi0gICAgYmUgdW5sb2FkZWQgZnJvbSBtZW1vcnkuICAKLSAgICAKLSAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjIHdoZW4gdGhlIGNvbXBvbmVudCBpcyAKKyAgICBiZSB1bmxvYWRlZCBmcm9tIG1lbW9yeS4KKworICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMgd2hlbiB0aGUgY29tcG9uZW50IGlzCiAgICAgaW4gdGhlIE9NWF9TdGF0ZUxvYWRlZCBzdGF0ZS4KIAogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKQEAgLTEzMjEsMzQgKzEzMjEsMzQgQEAKIC8qKiBUaGUgT01YX1NldHVwVHVubmVsIG1ldGhvZCB3aWxsIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IGNhbGxzIHRvIHRoZSBjb21wb25lbnRzCiAgICAgdG8gc2V0dXAgdGhlIHNwZWNpZmllZCB0dW5uZWwgdGhlIHR3byBjb21wb25lbnRzLiAgTk9URTogVGhpcyBpcwogICAgIGFuIGFjdHVhbCBtZXRob2QgKG5vdCBhICNkZWZpbmUgbWFjcm8pLiAgVGhpcyBtZXRob2Qgd2lsbCBtYWtlIGNhbGxzIGludG8KLSAgICB0aGUgY29tcG9uZW50IENvbXBvbmVudFR1bm5lbFJlcXVlc3QgbWV0aG9kIHRvIGRvIHRoZSBhY3R1YWwgdHVubmVsIAotICAgIGNvbm5lY3Rpb24uICAKKyAgICB0aGUgY29tcG9uZW50IENvbXBvbmVudFR1bm5lbFJlcXVlc3QgbWV0aG9kIHRvIGRvIHRoZSBhY3R1YWwgdHVubmVsCisgICAgY29ubmVjdGlvbi4KIAotICAgIFRoZSBDb21wb25lbnRUdW5uZWxSZXF1ZXN0IG1ldGhvZCBvbiBib3RoIGNvbXBvbmVudHMgd2lsbCBiZSBjYWxsZWQuIAotICAgIFRoaXMgbWV0aG9kIHNoYWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzIHRoZSBjb21wb25lbnQgaXMgaW4gdGhlIAorICAgIFRoZSBDb21wb25lbnRUdW5uZWxSZXF1ZXN0IG1ldGhvZCBvbiBib3RoIGNvbXBvbmVudHMgd2lsbCBiZSBjYWxsZWQuCisgICAgVGhpcyBtZXRob2Qgc2hhbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgdGhlIGNvbXBvbmVudCBpcyBpbiB0aGUKICAgICBPTVhfU3RhdGVMb2FkZWQgc3RhdGUgZXhjZXB0IHdoZW4gdGhlIHBvcnRzIHVzZWQgZm9yIHRoZSB0dW5uZWwgYXJlCiAgICAgZGlzYWJsZWQuIEluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBtYXkgYmUgaW4gdGhlIE9NWF9TdGF0ZUV4ZWN1dGluZywKLSAgICBPTVhfU3RhdGVQYXVzZSwgb3IgT01YX1N0YXRlSWRsZSBzdGF0ZXMuIAorICAgIE9NWF9TdGF0ZVBhdXNlLCBvciBPTVhfU3RhdGVJZGxlIHN0YXRlcy4KIAogICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoT3V0cHV0CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgQWxzbyB0aGlzIGlzIHRoZSBoYW5kbGUKICAgICAgICAgb2YgdGhlIGNvbXBvbmVudCB3aG9zZSBwb3J0LCBzcGVjaWZpZWQgaW4gdGhlIG5Qb3J0T3V0cHV0IHBhcmFtZXRlcgogICAgICAgICB3aWxsIGJlIHVzZWQgdGhlIHNvdXJjZSBmb3IgdGhlIHR1bm5lbC4gVGhpcyBpcyB0aGUgY29tcG9uZW50IGhhbmRsZQotICAgICAgICByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4gIFRoZXJlIGlzIGEgCisgICAgICAgIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLiAgVGhlcmUgaXMgYQogICAgICAgICByZXF1aXJlbWVudCB0aGF0IGhPdXRwdXQgYmUgdGhlIHNvdXJjZSBmb3IgdGhlIGRhdGEgd2hlbgogICAgICAgICB0dW5lbGxpbmcgKGkuZS4gblBvcnRPdXRwdXQgaXMgYW4gb3V0cHV0IHBvcnQpLiAgSWYgMHgwLCB0aGUgY29tcG9uZW50CiAgICAgICAgIHNwZWNpZmllZCBpbiBoSW5wdXQgd2lsbCBoYXZlIGl0J3MgcG9ydCBzcGVjaWZpZWQgaW4gblBvcnRJbnB1dAogICAgICAgICBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIGNsaWVudC4KICAgICBAcGFyYW0gW2luXSBuUG9ydE91dHB1dAogICAgICAgICBuUG9ydE91dHB1dCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc291cmNlIHBvcnQgb24gY29tcG9uZW50IHRvIGJlCi0gICAgICAgIHVzZWQgaW4gdGhlIHR1bm5lbC4gCisgICAgICAgIHVzZWQgaW4gdGhlIHR1bm5lbC4KICAgICBAcGFyYW0gW2luXSBoSW5wdXQKICAgICAgICAgVGhpcyBpcyB0aGUgY29tcG9uZW50IHRvIHNldHVwIHRoZSB0dW5uZWwgd2l0aC4gVGhpcyBpcyB0aGUgaGFuZGxlCiAgICAgICAgIG9mIHRoZSBjb21wb25lbnQgd2hvc2UgcG9ydCwgc3BlY2lmaWVkIGluIHRoZSBuUG9ydElucHV0IHBhcmFtZXRlcgogICAgICAgICB3aWxsIGJlIHVzZWQgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgdHVubmVsLiBUaGlzIGlzIHRoZSBjb21wb25lbnQgaGFuZGxlCi0gICAgICAgIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLiAgVGhlcmUgaXMgYSAKKyAgICAgICAgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uICBUaGVyZSBpcyBhCiAgICAgICAgIHJlcXVpcmVtZW50IHRoYXQgaElucHV0IGJlIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGRhdGEgd2hlbgogICAgICAgICB0dW5lbGxpbmcgKGkuZS4gblBvcnRJbnV0IGlzIGFuIGlucHV0IHBvcnQpLiAgIElmIDB4MCwgdGhlIGNvbXBvbmVudAogICAgICAgICBzcGVjaWZpZWQgaW4gaE91dHB1dCB3aWxsIGhhdmUgaXQncyBwb3J0IHNwZWNpZmllZCBpbiBuUG9ydFBPdXRwdXQKQEAgLTEzNTksOSArMTM1OSw5IEBACiAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCiAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKICAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAgIFdoZW4gT01YX0Vycm9yTm90SW1wbGVtZW50ZWQgaXMgcmV0dXJuZWQsIG9uZSBvciBib3RoIGNvbXBvbmVudHMgaXMgCisgICAgICAgIFdoZW4gT01YX0Vycm9yTm90SW1wbGVtZW50ZWQgaXMgcmV0dXJuZWQsIG9uZSBvciBib3RoIGNvbXBvbmVudHMgaXMKICAgICAgICAgYSBub24taW50ZXJvcCBjb21wb25lbnQgYW5kIGRvZXMgbm90IHN1cHBvcnQgdHVubmVsaW5nLgotICAgICAgICAKKwogICAgICAgICBPbiBmYWlsdXJlLCB0aGUgcG9ydHMgb2YgYm90aCBjb21wb25lbnRzIGFyZSBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbgogICAgICAgICB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIENsaWVudC4KICAgICBAaW5ncm91cCBjb3JlIHR1bgpAQCAtMTM3MSw1MCArMTM3MSw1MCBAQAogICAgIE9NWF9JTiAgT01YX1UzMiBuUG9ydE91dHB1dCwKICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhJbnB1dCwKICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnRJbnB1dCk7Ci0gICAgCisKIC8qKiBAaW5ncm91cCBjcCAqLwogT01YX0FQSSBPTVhfRVJST1JUWVBFICAgT01YX0dldENvbnRlbnRQaXBlKAogICAgIE9NWF9PVVQgT01YX0hBTkRMRVRZUEUgKmhQaXBlLAogICAgIE9NWF9JTiBPTVhfU1RSSU5HIHN6VVJJKTsKIAogLyoqIFRoZSBPTVhfR2V0Q29tcG9uZW50c09mUm9sZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICByb2xlIGFuZCAoaWYgdGhlIGNvbXBOYW1lcyBmaWVsZCBpcyBub24tTlVMTCkgdGhlIG5hbWVzIG9mIHRob3NlIGNvbXBvbmVudHMuIFRoZSBjYWxsIHdpbGwgZmFpbCBpZiAKKyAgICByb2xlIGFuZCAoaWYgdGhlIGNvbXBOYW1lcyBmaWVsZCBpcyBub24tTlVMTCkgdGhlIG5hbWVzIG9mIHRob3NlIGNvbXBvbmVudHMuIFRoZSBjYWxsIHdpbGwgZmFpbCBpZgogICAgIGFuIGluc3VmZmljaWVudGx5IHNpemVkIGFycmF5IG9mIG5hbWVzIGlzIHN1cHBsaWVkLiBUbyBlbnN1cmUgdGhlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBzaXplZCB0aGUKICAgICBjbGllbnQgc2hvdWxkOgogICAgICAgICAqIGZpcnN0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBjb21wTmFtZXMgZmllbGQgTlVMTCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjb21wb25lbnQgbmFtZXMKLSAgICAgICAgKiBzZWNvbmQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGNvbXBOYW1lcyBmaWVsZCBwb2ludGluZyB0byBhbiBhcnJheSBvZiBuYW1lcyBhbGxvY2F0ZWQgCisgICAgICAgICogc2Vjb25kIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBjb21wTmFtZXMgZmllbGQgcG9pbnRpbmcgdG8gYW4gYXJyYXkgb2YgbmFtZXMgYWxsb2NhdGVkCiAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIGZpcnN0IGNhbGwuCiAKICAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSByb2xlCi0gICAgICAgIFRoaXMgaXMgZ2VuZXJpYyBzdGFuZGFyZCBjb21wb25lbnQgbmFtZSBjb25zaXN0aW5nIG9ubHkgb2YgY29tcG9uZW50IGNsYXNzIAorICAgICAgICBUaGlzIGlzIGdlbmVyaWMgc3RhbmRhcmQgY29tcG9uZW50IG5hbWUgY29uc2lzdGluZyBvbmx5IG9mIGNvbXBvbmVudCBjbGFzcwogICAgICAgICBuYW1lIGFuZCB0aGUgdHlwZSB3aXRoaW4gdGhhdCBjbGFzcyAoZS5nLiAnYXVkaW9fZGVjb2Rlci5hYWMnKS4KICAgICBAcGFyYW0gW2lub3V0XSBwTnVtQ29tcHMKLSAgICAgICAgVGhpcyBpcyB1c2VkIGJvdGggYXMgaW5wdXQgYW5kIG91dHB1dC4gCi0gCisgICAgICAgIFRoaXMgaXMgdXNlZCBib3RoIGFzIGlucHV0IGFuZCBvdXRwdXQuCisKICAgICAgICAgSWYgY29tcE5hbWVzIGlzIE5VTEwsIHRoZSBpbnB1dCBpcyBpZ25vcmVkIGFuZCB0aGUgb3V0cHV0IHNwZWNpZmllcyBob3cgbWFueSBjb21wb25lbnRzIHN1cHBvcnQKICAgICAgICAgdGhlIGdpdmVuIHJvbGUuCi0gICAgIAotICAgICAgICBJZiBjb21wTmFtZXMgaXMgbm90IE5VTEwsIG9uIGlucHV0IGl0IGJvdW5kcyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgc3RydWN0dXJlIGFuZCAKKworICAgICAgICBJZiBjb21wTmFtZXMgaXMgbm90IE5VTEwsIG9uIGlucHV0IGl0IGJvdW5kcyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgc3RydWN0dXJlIGFuZAogICAgICAgICBvbiBvdXRwdXQsIGl0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgc3RyaW5nIG5hbWVzIGxpc3RlZCB3aXRoaW4gdGhlIGNvbXBOYW1lcyBwYXJhbWV0ZXIuCiAgICAgQHBhcmFtIFtpbm91dF0gY29tcE5hbWVzCi0gICAgICAgIElmIE5VTEwgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLiBJZiBub24tTlVMTCB0aGlzIHBvaW50cyB0byBhbiBhcnJheSBvZiAxMjgtYnl0ZSBzdHJpbmdzIHdoaWNoIGFjY2VwdHMgCi0gICAgICAgIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgYWxsIHBoeXNpY2FsIGNvbXBvbmVudHMgdGhhdCBpbXBsZW1lbnQgdGhlIHNwZWNpZmllZCBzdGFuZGFyZCBjb21wb25lbnQgbmFtZS4gCisgICAgICAgIElmIE5VTEwgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLiBJZiBub24tTlVMTCB0aGlzIHBvaW50cyB0byBhbiBhcnJheSBvZiAxMjgtYnl0ZSBzdHJpbmdzIHdoaWNoIGFjY2VwdHMKKyAgICAgICAgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBhbGwgcGh5c2ljYWwgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCB0aGUgc3BlY2lmaWVkIHN0YW5kYXJkIGNvbXBvbmVudCBuYW1lLgogICAgICAgICBFYWNoIG5hbWUgaXMgTlVMTCB0ZXJtaW5hdGVkLiBudW1Db21wcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBuYW1lcy4KICAgICBAaW5ncm91cCBjb3JlCiAgKi8KLU9NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfR2V0Q29tcG9uZW50c09mUm9sZSAoIAotCU9NWF9JTiAgICAgIE9NWF9TVFJJTkcgcm9sZSwKK09NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfR2V0Q29tcG9uZW50c09mUm9sZSAoCisgICAgT01YX0lOICAgICAgT01YX1NUUklORyByb2xlLAogICAgIE9NWF9JTk9VVCAgIE9NWF9VMzIgKnBOdW1Db21wcywKICAgICBPTVhfSU5PVVQgICBPTVhfVTggICoqY29tcE5hbWVzKTsKIAogLyoqIFRoZSBPTVhfR2V0Um9sZXNPZkNvbXBvbmVudCBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiByb2xlcyBzdXBwb3J0ZWQgYnkgdGhlIGdpdmVuCi0gICAgY29tcG9uZW50IGFuZCAoaWYgdGhlIHJvbGVzIGZpZWxkIGlzIG5vbi1OVUxMKSB0aGUgbmFtZXMgb2YgdGhvc2Ugcm9sZXMuIFRoZSBjYWxsIHdpbGwgZmFpbCBpZiAKKyAgICBjb21wb25lbnQgYW5kIChpZiB0aGUgcm9sZXMgZmllbGQgaXMgbm9uLU5VTEwpIHRoZSBuYW1lcyBvZiB0aG9zZSByb2xlcy4gVGhlIGNhbGwgd2lsbCBmYWlsIGlmCiAgICAgYW4gaW5zdWZmaWNpZW50bHkgc2l6ZWQgYXJyYXkgb2YgbmFtZXMgaXMgc3VwcGxpZWQuIFRvIGVuc3VyZSB0aGUgYXJyYXkgaXMgc3VmZmljaWVudGx5IHNpemVkIHRoZQogICAgIGNsaWVudCBzaG91bGQ6CiAgICAgICAgICogZmlyc3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJvbGVzIGZpZWxkIE5VTEwgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygcm9sZSBuYW1lcwotICAgICAgICAqIHNlY29uZCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgcm9sZXMgZmllbGQgcG9pbnRpbmcgdG8gYW4gYXJyYXkgb2YgbmFtZXMgYWxsb2NhdGVkIAorICAgICAgICAqIHNlY29uZCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgcm9sZXMgZmllbGQgcG9pbnRpbmcgdG8gYW4gYXJyYXkgb2YgbmFtZXMgYWxsb2NhdGVkCiAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIGZpcnN0IGNhbGwuCiAKICAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCkBAIC0xNDIyLDIwICsxNDIyLDIwIEBACiAgICAgQHBhcmFtIFtpbl0gY29tcE5hbWUKICAgICAgICAgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY29tcG9uZW50IGJlaW5nIHF1ZXJpZWQgYWJvdXQuCiAgICAgQHBhcmFtIFtpbm91dF0gcE51bVJvbGVzCi0gICAgICAgIFRoaXMgaXMgdXNlZCBib3RoIGFzIGlucHV0IGFuZCBvdXRwdXQuIAotIAorICAgICAgICBUaGlzIGlzIHVzZWQgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0LgorCiAgICAgICAgIElmIHJvbGVzIGlzIE5VTEwsIHRoZSBpbnB1dCBpcyBpZ25vcmVkIGFuZCB0aGUgb3V0cHV0IHNwZWNpZmllcyBob3cgbWFueSByb2xlcyB0aGUgY29tcG9uZW50IHN1cHBvcnRzLgotICAgICAKLSAgICAgICAgSWYgY29tcE5hbWVzIGlzIG5vdCBOVUxMLCBvbiBpbnB1dCBpdCBib3VuZHMgdGhlIHNpemUgb2YgdGhlIGlucHV0IHN0cnVjdHVyZSBhbmQgCisKKyAgICAgICAgSWYgY29tcE5hbWVzIGlzIG5vdCBOVUxMLCBvbiBpbnB1dCBpdCBib3VuZHMgdGhlIHNpemUgb2YgdGhlIGlucHV0IHN0cnVjdHVyZSBhbmQKICAgICAgICAgb24gb3V0cHV0LCBpdCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb2xlcyBzdHJpbmcgbmFtZXMgbGlzdGVkIHdpdGhpbiB0aGUgcm9sZXMgcGFyYW1ldGVyLgogICAgIEBwYXJhbSBbb3V0XSByb2xlcwotICAgICAgICBJZiBOVUxMIHRoaXMgZmllbGQgaXMgaWdub3JlZC4gSWYgbm9uLU5VTEwgdGhpcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgMTI4LWJ5dGUgc3RyaW5ncyAKLSAgICAgICAgd2hpY2ggYWNjZXB0cyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGFuZGFyZCBjb21wb25lbnRzIHJvbGVzIGltcGxlbWVudGVkIG9uIHRoZSAKKyAgICAgICAgSWYgTlVMTCB0aGlzIGZpZWxkIGlzIGlnbm9yZWQuIElmIG5vbi1OVUxMIHRoaXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIDEyOC1ieXRlIHN0cmluZ3MKKyAgICAgICAgd2hpY2ggYWNjZXB0cyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGFuZGFyZCBjb21wb25lbnRzIHJvbGVzIGltcGxlbWVudGVkIG9uIHRoZQogICAgICAgICBzcGVjaWZpZWQgY29tcG9uZW50IG5hbWUuIG51bUNvbXBzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIG5hbWVzLgogICAgIEBpbmdyb3VwIGNvcmUKICAqLwotT01YX0FQSSBPTVhfRVJST1JUWVBFIE9NWF9HZXRSb2xlc09mQ29tcG9uZW50ICggCi0JT01YX0lOICAgICAgT01YX1NUUklORyBjb21wTmFtZSwgCitPTVhfQVBJIE9NWF9FUlJPUlRZUEUgT01YX0dldFJvbGVzT2ZDb21wb25lbnQgKAorICAgIE9NWF9JTiAgICAgIE9NWF9TVFJJTkcgY29tcE5hbWUsCiAgICAgT01YX0lOT1VUICAgT01YX1UzMiAqcE51bVJvbGVzLAogICAgIE9NWF9PVVQgICAgIE9NWF9VOCAqKnJvbGVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JVkNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JVkNvbW1vbi5oCmluZGV4IDVmOWU5YjYuLmE1YjlkMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSVZDb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0lWQ29tbW9uLmgKQEAgLTg0NSw3ICs4NDUsNyBAQAogdHlwZWRlZiBlbnVtIE9NWF9NRVRFUklOR1RZUEUgewogCiAgICAgT01YX01ldGVyaW5nTW9kZUF2ZXJhZ2UsICAgICAvKio8IENlbnRlci13ZWlnaHRlZCBhdmVyYWdlIG1ldGVyaW5nLiAqLwotICAgIE9NWF9NZXRlcmluZ01vZGVTcG90LCAgCSAgICAgIC8qKjwgU3BvdCAocGFydGlhbCkgbWV0ZXJpbmcuICovCisgICAgT01YX01ldGVyaW5nTW9kZVNwb3QsICAgICAgICAvKio8IFNwb3QgKHBhcnRpYWwpIG1ldGVyaW5nLiAqLwogICAgIE9NWF9NZXRlcmluZ01vZGVNYXRyaXgsICAgICAgLyoqPCBNYXRyaXggb3IgZXZhbHVhdGl2ZSBtZXRlcmluZy4gKi8KIAogICAgIE9NWF9NZXRlcmluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwpAQCAtODYwLDExICs4NjAsMTEgQEAKICAgICBPTVhfTUVURVJJTkdUWVBFIGVNZXRlcmluZzsKICAgICBPTVhfUzMyIHhFVkNvbXBlbnNhdGlvbjsgICAgICAvKio8IEZpeGVkIHBvaW50IHZhbHVlIHN0b3JlZCBhcyBRMTYgKi8KICAgICBPTVhfVTMyIG5BcGVydHVyZUZOdW1iZXI7ICAgICAvKio8IGUuZy4gbkFwZXJ0dXJlRk51bWJlciA9IDIgaW1wbGllcyAiZi8yIiAtIFExNiBmb3JtYXQgKi8KLSAgICBPTVhfQk9PTCBiQXV0b0FwZXJ0dXJlOwkJLyoqPCBXaGV0aGVyIGFwZXJ0dXJlIG51bWJlciBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KKyAgICBPTVhfQk9PTCBiQXV0b0FwZXJ0dXJlOyAgICAgICAvKio8IFdoZXRoZXIgYXBlcnR1cmUgbnVtYmVyIGlzIGRlZmluZWQgYXV0b21hdGljYWxseSAqLwogICAgIE9NWF9VMzIgblNodXR0ZXJTcGVlZE1zZWM7ICAgIC8qKjwgU2h1dHRlcnNwZWVkIGluIG1pbGxpc2Vjb25kcyAqLwotICAgIE9NWF9CT09MIGJBdXRvU2h1dHRlclNwZWVkOwkvKio8IFdoZXRoZXIgc2h1dHRlciBzcGVlZCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KKyAgICBPTVhfQk9PTCBiQXV0b1NodXR0ZXJTcGVlZDsgICAvKio8IFdoZXRoZXIgc2h1dHRlciBzcGVlZCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KICAgICBPTVhfVTMyIG5TZW5zaXRpdml0eTsgICAgICAgICAvKio8IGUuZy4gblNlbnNpdGl2aXR5ID0gMTAwIGltcGxpZXMgIklTTyAxMDAiICovCi0gICAgT01YX0JPT0wgYkF1dG9TZW5zaXRpdml0eTsJLyoqPCBXaGV0aGVyIHNlbnNpdGl2aXR5IGlzIGRlZmluZWQgYXV0b21hdGljYWxseSAqLworICAgIE9NWF9CT09MIGJBdXRvU2Vuc2l0aXZpdHk7ICAgIC8qKjwgV2hldGhlciBzZW5zaXRpdml0eSBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KIH0gT01YX0NPTkZJR19FWFBPU1VSRVZBTFVFVFlQRTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0ltYWdlLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0ltYWdlLmgKaW5kZXggNDJlMzllYy4uMjNhMDIwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbWFnZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSW1hZ2UuaApAQCAtMTYsMzAgKzE2LDMwIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLS8qKiAKKy8qKgogICogQGZpbGUgT01YX0ltYWdlLmggLSBPcGVuTWF4IElMIHZlcnNpb24gMS4xLjIKLSAqIFRoZSBzdHJ1Y3R1cmVzIG5lZWRlZCBieSBJbWFnZSBjb21wb25lbnRzIHRvIGV4Y2hhbmdlIHBhcmFtZXRlcnMgYW5kIAorICogVGhlIHN0cnVjdHVyZXMgbmVlZGVkIGJ5IEltYWdlIGNvbXBvbmVudHMgdG8gZXhjaGFuZ2UgcGFyYW1ldGVycyBhbmQKICAqIGNvbmZpZ3VyYXRpb24gZGF0YSB3aXRoIHRoZSBjb21wb25lbnRzLgogICovCiAjaWZuZGVmIE9NWF9JbWFnZV9oCkBAIC01MSw5ICs1MSw5IEBACiAKIAogLyoqCi0gKiBFYWNoIE9NWCBoZWFkZXIgbXVzdCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlIAotICogaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkICAKLSAqIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQorICogaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCisgKiBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseQogICovCiAKICNpbmNsdWRlIDxPTVhfSVZDb21tb24uaD4KQEAgLTY0LDggKzY0LDggQEAKICAqIEB7CiAgKi8KIAotLyoqIAotICogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGltYWdlIGNvbXByZXNzaW9uIGNvZGluZy4gCisvKioKKyAqIEVudW1lcmF0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSBwb3NzaWJsZSBpbWFnZSBjb21wcmVzc2lvbiBjb2RpbmcuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfSU1BR0VfQ09ESU5HVFlQRSB7CiAgICAgT01YX0lNQUdFX0NvZGluZ1VudXNlZCwgICAgICAvKio8IFZhbHVlIHdoZW4gZm9ybWF0IGlzIE4vQSAqLwpAQCAtNzgsNTkgKzc4LDU5IEBACiAgICAgT01YX0lNQUdFX0NvZGluZ1BORywgICAgICAgICAvKio8IFBORyBpbWFnZSBmb3JtYXQgKi8KICAgICBPTVhfSU1BR0VfQ29kaW5nTFpXLCAgICAgICAgIC8qKjwgTFpXIGltYWdlIGZvcm1hdCAqLwogICAgIE9NWF9JTUFHRV9Db2RpbmdCTVAsICAgICAgICAgLyoqPCBXaW5kb3dzIEJpdG1hcCBmb3JtYXQgKi8KLSAgICBPTVhfSU1BR0VfQ29kaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9JTUFHRV9Db2RpbmdLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfSU1BR0VfQ29kaW5nVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfSU1BR0VfQ29kaW5nTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfSU1BR0VfQ09ESU5HVFlQRTsKIAogCiAvKioKLSAqIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGFuIGltYWdlIHBhdGguIFRoZSBudW1iZXIgb2YgaW1hZ2UgcGF0aHMgCi0gKiBmb3IgaW5wdXQgYW5kIG91dHB1dCB3aWxsIHZhcnkgYnkgdHlwZSBvZiB0aGUgaW1hZ2UgY29tcG9uZW50LiAgCi0gKiAKKyAqIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGFuIGltYWdlIHBhdGguIFRoZSBudW1iZXIgb2YgaW1hZ2UgcGF0aHMKKyAqIGZvciBpbnB1dCBhbmQgb3V0cHV0IHdpbGwgdmFyeSBieSB0eXBlIG9mIHRoZSBpbWFnZSBjb21wb25lbnQuCisgKgogICogIElucHV0IChha2EgU291cmNlKSA6IFplcm8gSW5wdXRzLCBvbmUgT3V0cHV0LAogICogIFNwbGl0dGVyICAgICAgICAgICA6IE9uZSBJbnB1dCwgMiBvciBtb3JlIE91dHB1dHMsCiAgKiAgUHJvY2Vzc2luZyBFbGVtZW50IDogT25lIElucHV0LCBvbmUgb3V0cHV0LAogICogIE1peGVyICAgICAgICAgICAgICA6IDIgb3IgbW9yZSBpbnB1dHMsIG9uZSBvdXRwdXQsCiAgKiAgT3V0cHV0IChha2EgU2luaykgIDogT25lIElucHV0LCB6ZXJvIG91dHB1dHMuCi0gKiAKLSAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIAotICogbmVjZXNzYXJ5IGZvciB0aGUgY29tcGxpYW50IGNvbXBvbmVudCB0byBzZXR1cCBhbiBpbnB1dCBvciBhbiBvdXRwdXQgIAotICogaW1hZ2UgcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZCAgCi0gKiBiZSB0cmFuc21pdHRlZCB0byB0aGUgY29tcG9uZW50IHVzaW5nIHRoZSBDdXN0b21Db21tYW5kIGZ1bmN0aW9uLiAgIAotICogQ29tcGxpYW50IGNvbXBvbmVudHMgd2lsbCBwcmVwb3B1bGF0ZSB0aGlzIHN0cnVjdHVyZSB3aXRoIG9wdGltYWwgIAorICoKKyAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzCisgKiBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dAorICogaW1hZ2UgcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZAorICogYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIGNvbXBvbmVudCB1c2luZyB0aGUgQ3VzdG9tQ29tbWFuZCBmdW5jdGlvbi4KKyAqIENvbXBsaWFudCBjb21wb25lbnRzIHdpbGwgcHJlcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgd2l0aCBvcHRpbWFsCiAgKiB2YWx1ZXMgZHVyaW5nIHRoZSBPTVhfR2V0UGFyYW1ldGVyKCkgY29tbWFuZC4KICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBjTUlNRVR5cGUgICAgICAgICAgICAgOiBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQKLSAqICBwTmF0aXZlUmVuZGVyICAgICAgICAgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgZGlzcGxheSBpZiBhIAorICogIHBOYXRpdmVSZW5kZXIgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSBkaXNwbGF5IGlmIGEKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jLCBvdGhlcndpc2UgdGhpcyBmaWVsZCBpcyAwCi0gKiAgbkZyYW1lV2lkdGggICAgICAgICAgIDogV2lkdGggb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBwb3J0IGlmIAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gIFVzZSAwIGZvciAKKyAqICBuRnJhbWVXaWR0aCAgICAgICAgICAgOiBXaWR0aCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIHBvcnQgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuICBVc2UgMCBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLCBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCi0gKiAgbkZyYW1lSGVpZ2h0ICAgICAgICAgIDogSGVpZ2h0IG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gcG9ydCBpZiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciAKKyAqICBuRnJhbWVIZWlnaHQgICAgICAgICAgOiBIZWlnaHQgb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBwb3J0IGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkIGZvcm1hdCBpcyB1c2VkLiBVc2UgMCBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLCBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCi0gKiAgblN0cmlkZSAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIGJ5dGVzIHBlciBzcGFuIG9mIGFuIGltYWdlIChpLmUuIAorICogIG5TdHJpZGUgICAgICAgICAgICAgICA6IE51bWJlciBvZiBieXRlcyBwZXIgc3BhbiBvZiBhbiBpbWFnZSAoaS5lLgogICogICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldCBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiBOIHRvIHNwYW4gTisxLCB3aGVyZSBuZWdhdGl2ZSBzdHJpZGUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiBOIHRvIHNwYW4gTisxLCB3aGVyZSBuZWdhdGl2ZSBzdHJpZGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhlIGltYWdlIGlzIGJvdHRvbSB1cAogICogIG5TbGljZUhlaWdodCAgICAgICAgICA6IEhlaWdodCB1c2VkIHdoZW4gZW5jb2RpbmcgaW4gc2xpY2VzCi0gKiAgYkZsYWdFcnJvckNvbmNlYWxtZW50IDogVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMgc3VwcG9ydGVkIGJ5IAorICogIGJGbGFnRXJyb3JDb25jZWFsbWVudCA6IFR1cm5zIG9uIGVycm9yIGNvbmNlYWxtZW50IGlmIGl0IGlzIHN1cHBvcnRlZCBieQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPTVggY29tcG9uZW50Ci0gKiAgZUNvbXByZXNzaW9uRm9ybWF0ICAgIDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXBvbmVudC4gV2hlbiBPTVhfSU1BR0VfQ29kaW5nVW51c2VkIGlzIAorICogIGVDb21wcmVzc2lvbkZvcm1hdCAgICA6IENvbXByZXNzaW9uIGZvcm1hdCB1c2VkIGluIHRoaXMgaW5zdGFuY2Ugb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tcG9uZW50LiBXaGVuIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQgaXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGVDb2xvckZvcm1hdCBpcyB2YWxpZAogICogIGVDb2xvckZvcm1hdCAgICAgICAgICA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAotICogIHBOYXRpdmVXaW5kb3cgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSB3aW5kb3cgb2JqZWN0IGlmIGEgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBzaW5rICwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMHgwLiAKKyAqICBwTmF0aXZlV2luZG93ICAgICAgICAgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgd2luZG93IG9iamVjdCBpZiBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBzaW5rICwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMHgwLgogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfSU1BR0VfUE9SVERFRklOSVRJT05UWVBFIHsKICAgICBPTVhfU1RSSU5HIGNNSU1FVHlwZTsKICAgICBPTVhfTkFUSVZFX0RFVklDRVRZUEUgcE5hdGl2ZVJlbmRlcjsKLSAgICBPTVhfVTMyIG5GcmFtZVdpZHRoOyAKKyAgICBPTVhfVTMyIG5GcmFtZVdpZHRoOwogICAgIE9NWF9VMzIgbkZyYW1lSGVpZ2h0OwotICAgIE9NWF9TMzIgblN0cmlkZTsgICAgIAorICAgIE9NWF9TMzIgblN0cmlkZTsKICAgICBPTVhfVTMyIG5TbGljZUhlaWdodDsKICAgICBPTVhfQk9PTCBiRmxhZ0Vycm9yQ29uY2VhbG1lbnQ7CiAgICAgT01YX0lNQUdFX0NPRElOR1RZUEUgZUNvbXByZXNzaW9uRm9ybWF0OwpAQCAtMTM5LDE4ICsxMzksMTggQEAKIH0gT01YX0lNQUdFX1BPUlRERUZJTklUSU9OVFlQRTsKIAogCi0vKiogIAotICogUG9ydCBmb3JtYXQgcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnVtZXJhdGUgdGhlIHZhcmlvdXMgCisvKioKKyAqIFBvcnQgZm9ybWF0IHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW51bWVyYXRlIHRoZSB2YXJpb3VzCiAgKiBkYXRhIGlucHV0L291dHB1dCBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgotICogCisgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldAotICogIG5JbmRleCAgICAgICAgICAgICA6IEluZGljYXRlcyB0aGUgZW51bWVyYXRpb24gaW5kZXggZm9yIHRoZSBmb3JtYXQgZnJvbSAKKyAqICBuSW5kZXggICAgICAgICAgICAgOiBJbmRpY2F0ZXMgdGhlIGVudW1lcmF0aW9uIGluZGV4IGZvciB0aGUgZm9ybWF0IGZyb20KICAqICAgICAgICAgICAgICAgICAgICAgICAweDAgdG8gTi0xCi0gKiAgZUNvbXByZXNzaW9uRm9ybWF0IDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LiBXaGVuIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQgaXMgc3BlY2lmaWVkLCAKKyAqICBlQ29tcHJlc3Npb25Gb3JtYXQgOiBDb21wcmVzc2lvbiBmb3JtYXQgdXNlZCBpbiB0aGlzIGluc3RhbmNlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4gV2hlbiBPTVhfSU1BR0VfQ29kaW5nVW51c2VkIGlzIHNwZWNpZmllZCwKICAqICAgICAgICAgICAgICAgICAgICAgICBlQ29sb3JGb3JtYXQgaXMgdmFsaWQKICAqICBlQ29sb3JGb3JtYXQgICAgICAgOiBEZWNvbXByZXNzZWQgZm9ybWF0IHVzZWQgYnkgdGhpcyBjb21wb25lbnQKICAqLwpAQCAtMTY0LDggKzE2NCw4IEBACiB9IE9NWF9JTUFHRV9QQVJBTV9QT1JURk9STUFUVFlQRTsKIAogCi0vKiogCi0gKiBGbGFzaCBjb250cm9sIHR5cGUgCisvKioKKyAqIEZsYXNoIGNvbnRyb2wgdHlwZQogICoKICAqIEVOVU1TCiAgKiAgVG9yY2ggOiBGbGFzaCBmb3JjZWQgY29uc3RhbnRseSBvbgpAQCAtMTc3LDE0ICsxNzcsMTQgQEAKICAgICBPTVhfSU1BR0VfRmxhc2hDb250cm9sUmVkRXllUmVkdWN0aW9uLAogICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xGaWxsaW4sCiAgICAgT01YX0lNQUdFX0ZsYXNoQ29udHJvbFRvcmNoLAotICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0lNQUdFX0ZsYXNoQ29udHJvbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9JTUFHRV9GTEFTSENPTlRST0xUWVBFOwogCiAKLS8qKiAKLSAqIEZsYXNoIGNvbnRyb2wgY29uZmlndXJhdGlvbiAKKy8qKgorICogRmxhc2ggY29udHJvbCBjb25maWd1cmF0aW9uCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwpAQCAtMjAwLDI5ICsyMDAsMjkgQEAKIH0gT01YX0lNQUdFX1BBUkFNX0ZMQVNIQ09OVFJPTFRZUEU7CiAKIAotLyoqIAotICogRm9jdXMgY29udHJvbCB0eXBlIAorLyoqCisgKiBGb2N1cyBjb250cm9sIHR5cGUKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9JTUFHRV9GT0NVU0NPTlRST0xUWVBFIHsKICAgICBPTVhfSU1BR0VfRm9jdXNDb250cm9sT24gPSAwLAogICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xPZmYsCiAgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEF1dG8sCiAgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEF1dG9Mb2NrLAotICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9JTUFHRV9GT0NVU0NPTlRST0xUWVBFOwogCi0gCi0vKiogCi0gKiBGb2N1cyBjb250cm9sIGNvbmZpZ3VyYXRpb24gCisKKy8qKgorICogRm9jdXMgY29udHJvbCBjb25maWd1cmF0aW9uCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgZUZvY3VzQ29udHJvbCAgIDogRm9jdXMgY29udHJvbAotICogIG5Gb2N1c1N0ZXBzICAgICA6IEZvY3VzIGNhbiB0YWtlIG9uIHZhbHVlcyBmcm9tIDAgbW0gdG8gaW5maW5pdHkuIAorICogIG5Gb2N1c1N0ZXBzICAgICA6IEZvY3VzIGNhbiB0YWtlIG9uIHZhbHVlcyBmcm9tIDAgbW0gdG8gaW5maW5pdHkuCiAgKiAgICAgICAgICAgICAgICAgICAgSW50ZXJlc3QgaXMgb25seSBpbiBudW1iZXIgb2Ygc3RlcHMgb3ZlciB0aGlzIHJhbmdlLgogICogIG5Gb2N1c1N0ZXBJbmRleCA6IEN1cnJlbnQgZm9jdXMgc3RlcCBpbmRleAogICovCkBAIC0yMzYsMzAgKzIzNiwzMCBAQAogfSBPTVhfSU1BR0VfQ09ORklHX0ZPQ1VTQ09OVFJPTFRZUEU7CiAKIAotLyoqIAorLyoqCiAgKiBRIEZhY3RvciBmb3IgSlBFRyBjb21wcmVzc2lvbiwgd2hpY2ggY29udHJvbHMgdGhlIHRyYWRlb2ZmIGJldHdlZW4gaW1hZ2UKICAqIHF1YWxpdHkgYW5kIHNpemUuICBRIEZhY3RvciBwcm92aWRlcyBhIG1vcmUgc2ltcGxlIG1lYW5zIG9mIGNvbnRyb2xsaW5nCiAgKiBKUEVHIGNvbXByZXNzaW9uIHF1YWxpdHksIHdpdGhvdXQgZGlyZWN0bHkgcHJvZ3JhbW1pbmcgUXVhbnRpemF0aW9uCi0gKiB0YWJsZXMgZm9yIGNocm9tYSBhbmQgbHVtYSAKKyAqIHRhYmxlcyBmb3IgY2hyb21hIGFuZCBsdW1hCiAgKgogICogU1RSVUNUIE1FTUJFUlM6Ci0gKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAgICAgICAgIAotICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAotICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAKLSAqICBuUUZhY3RvciAgIDogSlBFRyBRIGZhY3RvciB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgMS0xMDAuIEEgZmFjdG9yIG9mIDEgCi0gKiAgICAgICAgICAgICAgIHByb2R1Y2VzIHRoZSBzbWFsbGVzdCwgd29yc3QgcXVhbGl0eSBpbWFnZXMsIGFuZCBhIGZhY3RvciAKLSAqICAgICAgICAgICAgICAgb2YgMTAwIHByb2R1Y2VzIHRoZSBsYXJnZXN0LCBiZXN0IHF1YWxpdHkgaW1hZ2VzLiAgQSAKLSAqICAgICAgICAgICAgICAgdHlwaWNhbCBkZWZhdWx0IGlzIDc1IGZvciBzbWFsbCBnb29kIHF1YWxpdHkgaW1hZ2VzICAgICAgICAgICAgICAgCisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgblFGYWN0b3IgICA6IEpQRUcgUSBmYWN0b3IgdmFsdWUgaW4gdGhlIHJhbmdlIG9mIDEtMTAwLiBBIGZhY3RvciBvZiAxCisgKiAgICAgICAgICAgICAgIHByb2R1Y2VzIHRoZSBzbWFsbGVzdCwgd29yc3QgcXVhbGl0eSBpbWFnZXMsIGFuZCBhIGZhY3RvcgorICogICAgICAgICAgICAgICBvZiAxMDAgcHJvZHVjZXMgdGhlIGxhcmdlc3QsIGJlc3QgcXVhbGl0eSBpbWFnZXMuICBBCisgKiAgICAgICAgICAgICAgIHR5cGljYWwgZGVmYXVsdCBpcyA3NSBmb3Igc21hbGwgZ29vZCBxdWFsaXR5IGltYWdlcwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfSU1BR0VfUEFSQU1fUUZBQ1RPUlRZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIAotICAgIE9NWF9VMzIgblFGYWN0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVTMyIG5RRmFjdG9yOwogfSBPTVhfSU1BR0VfUEFSQU1fUUZBQ1RPUlRZUEU7CiAKLS8qKiAKLSAqIFF1YW50aXphdGlvbiB0YWJsZSB0eXBlIAorLyoqCisgKiBRdWFudGl6YXRpb24gdGFibGUgdHlwZQogICovCiAKIHR5cGVkZWYgZW51bSBPTVhfSU1BR0VfUVVBTlRJWkFUSU9OVEFCTEVUWVBFIHsKQEAgLTI2NywyNyArMjY3LDI3IEBACiAgICAgT01YX0lNQUdFX1F1YW50aXphdGlvblRhYmxlQ2hyb21hLAogICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZUNocm9tYUNiLAogICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZUNocm9tYUNyLAotICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSU1BR0VfUXVhbnRpemF0aW9uVGFibGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfSU1BR0VfUXVhbnRpemF0aW9uVGFibGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0lNQUdFX1FVQU5USVpBVElPTlRBQkxFVFlQRTsKIAotLyoqIAorLyoqCiAgKiBKUEVHIHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIERDVCBjb21wcmVzc2lvbiBmb3IKLSAqIFlVViBkYXRhLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBzcGVjaWZ5aW5nIFEgZmFjdG9yLCBwcm92aWRpbmcgZXhhY3QgCi0gKiBjb250cm9sIG9mIGNvbXByZXNzaW9uIAorICogWVVWIGRhdGEsIGFzIGFuIGFsdGVybmF0aXZlIHRvIHNwZWNpZnlpbmcgUSBmYWN0b3IsIHByb3ZpZGluZyBleGFjdAorICogY29udHJvbCBvZiBjb21wcmVzc2lvbgogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAorICogIG5WZXJzaW9uICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBlUXVhbnRpemF0aW9uVGFibGUgICAgICA6IFF1YW50aXphdGlvbiB0YWJsZSB0eXBlCi0gKiAgblF1YW50aXphdGlvbk1hdHJpeFs2NF0gOiBKUEVHIHF1YW50aXphdGlvbiB0YWJsZSBvZiBjb2VmZmljaWVudHMgc3RvcmVkIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5jcmVhc2luZyBjb2x1bW5zIHRoZW4gYnkgcm93cyBvZiBkYXRhIChpLmUuIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93IDEsIC4uLiByb3cgOCkuIFF1YW50aXphdGlvbiB2YWx1ZXMgYXJlIGluIAorICogIG5RdWFudGl6YXRpb25NYXRyaXhbNjRdIDogSlBFRyBxdWFudGl6YXRpb24gdGFibGUgb2YgY29lZmZpY2llbnRzIHN0b3JlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5jcmVhc2luZyBjb2x1bW5zIHRoZW4gYnkgcm93cyBvZiBkYXRhIChpLmUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgMSwgLi4uIHJvdyA4KS4gUXVhbnRpemF0aW9uIHZhbHVlcyBhcmUgaW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByYW5nZSAwLTI1NSBhbmQgc3RvcmVkIGluIGxpbmVhciBvcmRlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gdGhlIGNvbXBvbmVudCB3aWxsIHppZy16YWcgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uIHRhYmxlIGRhdGEgaWYgcmVxdWlyZWQgaW50ZXJuYWxseSkgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUgY29tcG9uZW50IHdpbGwgemlnLXphZyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXphdGlvbiB0YWJsZSBkYXRhIGlmIHJlcXVpcmVkIGludGVybmFsbHkpCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9JTUFHRV9QQVJBTV9RVUFOVElaQVRJT05UQUJMRVRZUEUgewogICAgIE9NWF9VMzIgblNpemU7CkBAIC0yOTgsOSArMjk4LDkgQEAKIH0gT01YX0lNQUdFX1BBUkFNX1FVQU5USVpBVElPTlRBQkxFVFlQRTsKIAogCi0vKiogCi0gKiBIdWZmbWFuIHRhYmxlIHR5cGUsIHRoZSBzYW1lIEh1ZmZtYW4gdGFibGUgaXMgYXBwbGllZCBmb3IgY2hyb21hIGFuZCAKLSAqIGx1bWEgY29tcG9uZW50IAorLyoqCisgKiBIdWZmbWFuIHRhYmxlIHR5cGUsIHRoZSBzYW1lIEh1ZmZtYW4gdGFibGUgaXMgYXBwbGllZCBmb3IgY2hyb21hIGFuZAorICogbHVtYSBjb21wb25lbnQKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9JTUFHRV9IVUZGTUFOVEFCTEVUWVBFIHsKICAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlQUMgPSAwLApAQCAtMzA5LDIzICszMDksMjMgQEAKICAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlQUNDaHJvbWEsCiAgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZURDTHVtYSwKICAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlRENDaHJvbWEsCi0gICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0lNQUdFX0hVRkZNQU5UQUJMRVRZUEU7CiAKLS8qKiAKLSAqIEpQRUcgSHVmZm1hbiB0YWJsZSAKKy8qKgorICogSlBFRyBIdWZmbWFuIHRhYmxlCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKICAqICBuVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICAqICBuUG9ydEluZGV4ICAgICAgICAgICAgICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgZUh1ZmZtYW5UYWJsZSAgICAgICAgICAgICAgICAgICAgOiBIdWZmbWFuIHRhYmxlIHR5cGUKLSAqICBuTnVtYmVyT2ZIdWZmbWFuQ29kZU9mTGVuZ3RoWzE2XSA6IDAtMTYsIG51bWJlciBvZiBIdWZmbWFuIGNvZGVzIG9mIGVhY2ggCisgKiAgbk51bWJlck9mSHVmZm1hbkNvZGVPZkxlbmd0aFsxNl0gOiAwLTE2LCBudW1iZXIgb2YgSHVmZm1hbiBjb2RlcyBvZiBlYWNoCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSBsZW5ndGgKLSAqICBuSHVmZm1hblRhYmxlWzI1Nl0gICAgICAgICAgICAgICA6IDAtMjU1LCB0aGUgc2l6ZSB1c2VkIGZvciBBQyBhbmQgREMgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdWZmbWFuVGFibGUgYXJlIDE2IGFuZCAxNjIgCisgKiAgbkh1ZmZtYW5UYWJsZVsyNTZdICAgICAgICAgICAgICAgOiAwLTI1NSwgdGhlIHNpemUgdXNlZCBmb3IgQUMgYW5kIERDCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdWZmbWFuVGFibGUgYXJlIDE2IGFuZCAxNjIKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX0lNQUdFX1BBUkFNX0hVRkZNQU5UVEFCTEVUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleC5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleC5oCmluZGV4IGJlOWExYTYuLjFhMmE1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSW5kZXguaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0luZGV4LmgKQEAgLTE2LDI1ICsxNiwyNSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwogCkBAIC01MSwyNSArNTEsMjMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKLQogLyogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQogICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAotICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5CiAgKi8KICNpbmNsdWRlIDxPTVhfVHlwZXMuaD4KIAotCiAvKiogVGhlIE9NWF9JTkRFWFRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBzZWxlY3QgYSBzdHJ1Y3R1cmUgd2hlbiBlaXRoZXIKLSAqICBnZXR0aW5nIG9yIHNldHRpbmcgcGFyYW1ldGVycyBhbmQvb3IgY29uZmlndXJhdGlvbiBkYXRhLiAgRWFjaCBlbnRyeSBpbiAKLSAqICB0aGlzIGVudW1lcmF0aW9uIG1hcHMgdG8gYW4gT01YIHNwZWNpZmllZCBzdHJ1Y3R1cmUuICBXaGVuIHRoZSAKKyAqICBnZXR0aW5nIG9yIHNldHRpbmcgcGFyYW1ldGVycyBhbmQvb3IgY29uZmlndXJhdGlvbiBkYXRhLiAgRWFjaCBlbnRyeSBpbgorICogIHRoaXMgZW51bWVyYXRpb24gbWFwcyB0byBhbiBPTVggc3BlY2lmaWVkIHN0cnVjdHVyZS4gIFdoZW4gdGhlCiAgKiAgT01YX0dldFBhcmFtZXRlciwgT01YX1NldFBhcmFtZXRlciwgT01YX0dldENvbmZpZyBvciBPTVhfU2V0Q29uZmlnIG1ldGhvZHMKICAqICBhcmUgdXNlZCwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2lsbCBhbHdheXMgYmUgYW4gZW50cnkgZnJvbSB0aGlzIGVudW1lcmF0aW9uCiAgKiAgYW5kIHRoZSB0aGlyZCBlbnRyeSB3aWxsIGJlIHRoZSBzdHJ1Y3R1cmUgc2hvd24gaW4gdGhlIGNvbW1lbnRzIGZvciB0aGUgZW50cnkuCi0gKiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXppbmcgYSBjcm9wcGluZyBmdW5jdGlvbiwgdGhlIAotICogIE9NWF9TZXRDb25maWcgY29tbWFuZCB3b3VsZCBoYXZlIE9NWF9JbmRleENvbmZpZ0NvbW1vbklucHV0Q3JvcCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciAKLSAqICBhbmQgd291bGQgc2VuZCBhIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgT01YX1JFQ1RUWVBFIHN0cnVjdHVyZSBhcyB0aGUgCisgKiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXppbmcgYSBjcm9wcGluZyBmdW5jdGlvbiwgdGhlCisgKiAgT01YX1NldENvbmZpZyBjb21tYW5kIHdvdWxkIGhhdmUgT01YX0luZGV4Q29uZmlnQ29tbW9uSW5wdXRDcm9wIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyCisgKiAgYW5kIHdvdWxkIHNlbmQgYSBwb2ludGVyIHRvIGFuIGluaXRpYWxpemVkIE9NWF9SRUNUVFlQRSBzdHJ1Y3R1cmUgYXMgdGhlCiAgKiAgdGhpcmQgcGFyYW1ldGVyLgotICogIAorICoKICAqICBUaGUgZW51bWVyYXRpb24gZW50cmllcyBuYW1lZCB3aXRoIHRoZSBPTVhfQ29uZmlnIHByZWZpeCBhcmUgc2VudCB1c2luZwogICogIHRoZSBPTVhfU2V0Q29uZmlnIGNvbW1hbmQgYW5kIHRoZSBlbnVtZXJhdGlvbiBlbnRyaWVzIG5hbWVkIHdpdGggdGhlCiAgKiAgT01YX1BBUkFNXyBwcmVmaXggYXJlIHNlbnQgdXNpbmcgdGhlIE9NWF9TZXRQYXJhbWV0ZXIgY29tbWFuZC4KQEAgLTg2LDExICs4NCwxMSBAQAogICAgIE9NWF9JbmRleFBhcmFtQWN0aXZlU3RyZWFtLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX1UzMlRZUEUgKi8KICAgICBPTVhfSW5kZXhQYXJhbVN1c3BlbnNpb25Qb2xpY3ksICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9TVVNQRU5TSU9OUE9MSUNZVFlQRSAqLwogICAgIE9NWF9JbmRleFBhcmFtQ29tcG9uZW50U3VzcGVuZGVkLCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX1NVU1BFTlNJT05UWVBFICovCi0gICAgT01YX0luZGV4Q29uZmlnQ2FwdHVyaW5nLCAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0JPT0xFQU5UWVBFICovIAotICAgIE9NWF9JbmRleENvbmZpZ0NhcHR1cmVNb2RlLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DQVBUVVJFTU9ERVRZUEUgKi8gCi0gICAgT01YX0luZGV4QXV0b1BhdXNlQWZ0ZXJDYXB0dXJlLCAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0JPT0xFQU5UWVBFICovIAorICAgIE9NWF9JbmRleENvbmZpZ0NhcHR1cmluZywgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19CT09MRUFOVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NhcHR1cmVNb2RlLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DQVBUVVJFTU9ERVRZUEUgKi8KKyAgICBPTVhfSW5kZXhBdXRvUGF1c2VBZnRlckNhcHR1cmUsICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfQk9PTEVBTlRZUEUgKi8KICAgICBPTVhfSW5kZXhQYXJhbUNvbnRlbnRVUkksICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9DT05URU5UVVJJVFlQRSAqLwotICAgIE9NWF9JbmRleFBhcmFtQ3VzdG9tQ29udGVudFBpcGUsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX0NPTlRFTlRQSVBFVFlQRSAqLyAKKyAgICBPTVhfSW5kZXhQYXJhbUN1c3RvbUNvbnRlbnRQaXBlLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9DT05URU5UUElQRVRZUEUgKi8KICAgICBPTVhfSW5kZXhQYXJhbURpc2FibGVSZXNvdXJjZUNvbmNlYWxtZW50LCAvKio8IHJlZmVyZW5jZTogT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFICovCiAgICAgT01YX0luZGV4Q29uZmlnTWV0YWRhdGFJdGVtQ291bnQsICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX01FVEFEQVRBSVRFTUNPVU5UVFlQRSAqLwogICAgIE9NWF9JbmRleENvbmZpZ0NvbnRhaW5lck5vZGVDb3VudCwgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DT05UQUlORVJOT0RFQ09VTlRUWVBFICovCkBAIC0xMDMsNyArMTAxLDcgQEAKIAogICAgIE9NWF9JbmRleFBvcnRTdGFydFVudXNlZCA9IDB4MDIwMDAwMDAsCiAgICAgT01YX0luZGV4UGFyYW1Qb3J0RGVmaW5pdGlvbiwgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFICovCi0gICAgT01YX0luZGV4UGFyYW1Db21wQnVmZmVyU3VwcGxpZXIsICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fQlVGRkVSU1VQUExJRVJUWVBFICovIAorICAgIE9NWF9JbmRleFBhcmFtQ29tcEJ1ZmZlclN1cHBsaWVyLCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX0JVRkZFUlNVUFBMSUVSVFlQRSAqLwogICAgIE9NWF9JbmRleFJlc2VydmVkU3RhcnRVbnVzZWQgPSAweDAzMDAwMDAwLAogCiAgICAgLyogQXVkaW8gcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgKi8KQEAgLTI1NiwxMCArMjU0LDEwIEBACiAgICAgT01YX0luZGV4Q29uZmlnVGltZVNlZWtNb2RlLCAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFICovCiAKIAotICAgIE9NWF9JbmRleEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSW5kZXhLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICAvKiBWZW5kb3Igc3BlY2lmaWMgYXJlYSAqLwogICAgIE9NWF9JbmRleFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKLSAgICAvKiBWZW5kb3Igc3BlY2lmaWMgc3RydWN0dXJlcyBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIG9mIDB4N0YwMDAwMDAgCisgICAgLyogVmVuZG9yIHNwZWNpZmljIHN0cnVjdHVyZXMgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBvZiAweDdGMDAwMDAwCiAgICAgICAgdG8gMHg3RkZGRkZGRS4gIFRoaXMgcmFuZ2UgaXMgbm90IGJyb2tlbiBvdXQgYnkgdmVuZG9yLCBzbwogICAgICAgIHByaXZhdGUgaW5kZXhlcyBhcmUgbm90IGd1YXJhbnRlZWQgdW5pcXVlIGFuZCB0aGVyZWZvcmUgc2hvdWxkCiAgICAgICAgb25seSBiZSBzZW50IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21wb25lbnQuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX090aGVyLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX090aGVyLmgKaW5kZXggZWZiY2U4My4uNjA3MmVmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9PdGhlci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfT3RoZXIuaApAQCAtMTYsMjUgKzE2LDI1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLSAqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKLSAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAotICogCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgogICovCiAKQEAgLTUzLDQ2ICs1Myw0NiBAQAogCiAvKiBFYWNoIE9NWCBoZWFkZXIgbXVzdCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlCiAgKiAgaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCi0gKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCisgKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkKICAqLwogCiAjaW5jbHVkZSA8T01YX0NvcmUuaD4KIAogCi0vKiogCisvKioKICAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIGRhdGEgdHlwZXMgd2hpY2ggbWF0Y2ggdG8gbXVsdGlwbGUgZG9tYWlucyBvciBubwogICogZG9tYWluIGF0IGFsbC4gIEZvciB0eXBlcyB3aGljaCBhcmUgdmVuZG9yIHNwZWNpZmljLCBhIHZhbHVlIGFib3ZlCiAgKiBPTVhfT1RIRVJfVkVORE9SVFNUQVJUIHNob3VsZCBiZSB1c2VkLgogICovCiB0eXBlZGVmIGVudW0gT01YX09USEVSX0ZPUk1BVFRZUEUgewotICAgIE9NWF9PVEhFUl9Gb3JtYXRUaW1lID0gMCwgLyoqPCBUcmFuc21pc3Npb24gb2YgdmFyaW91cyB0aW1lc3RhbXBzLCBlbGFwc2VkIHRpbWUsIAorICAgIE9NWF9PVEhFUl9Gb3JtYXRUaW1lID0gMCwgLyoqPCBUcmFuc21pc3Npb24gb2YgdmFyaW91cyB0aW1lc3RhbXBzLCBlbGFwc2VkIHRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgZGVsdGFzLCBldGMgKi8KLSAgICBPTVhfT1RIRVJfRm9ybWF0UG93ZXIsICAgIC8qKjwgUGVyaGFwcyB1c2VkIGZvciBlbmFibGluZy9kaXNhYmxpbmcgcG93ZXIgCisgICAgT01YX09USEVSX0Zvcm1hdFBvd2VyLCAgICAvKio8IFBlcmhhcHMgdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHBvd2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQsIHNldHRpbmcgY2xvY2tzPyAqLwotICAgIE9NWF9PVEhFUl9Gb3JtYXRTdGF0cywgICAgLyoqPCBDb3VsZCBiZSB0aGluZ3Mgc3VjaCBhcyBmcmFtZSByYXRlLCBmcmFtZXMgCisgICAgT01YX09USEVSX0Zvcm1hdFN0YXRzLCAgICAvKio8IENvdWxkIGJlIHRoaW5ncyBzdWNoIGFzIGZyYW1lIHJhdGUsIGZyYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wcGVkLCBldGMgKi8KICAgICBPTVhfT1RIRVJfRm9ybWF0QmluYXJ5LCAgIC8qKjwgQXJiaXRyYXJ5IGJpbmFyeSBkYXRhICovCi0gICAgT01YX09USEVSX0Zvcm1hdFZlbmRvclJlc2VydmVkID0gMTAwMCwgLyoqPCBTdGFydGluZyB2YWx1ZSBmb3IgdmVuZG9yIHNwZWNpZmljIAorICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JSZXNlcnZlZCA9IDEwMDAsIC8qKjwgU3RhcnRpbmcgdmFsdWUgZm9yIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cyAqLwogCi0gICAgT01YX09USEVSX0Zvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfT1RIRVJfRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX09USEVSX0Zvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX09USEVSX0Zvcm1hdE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX09USEVSX0ZPUk1BVFRZUEU7CiAKLS8qKiAKKy8qKgogICogRW51bWVyYXRpb24gb2Ygc2VlayBtb2Rlcy4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9USU1FX1NFRUtNT0RFVFlQRSB7CiAgICAgT01YX1RJTUVfU2Vla01vZGVGYXN0ID0gMCwgLyoqPCBQcmVmZXIgc2Vla2luZyB0byBhbiBhcHByb3hpbWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uIG92ZXIgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24gb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBhY3R1YWwgc2VlayBwb3NpdGlvbiBpZiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3VsdHMgaW4gYSBmYXN0ZXIgc2Vlay4gKi8KLSAgICBPTVhfVElNRV9TZWVrTW9kZUFjY3VyYXRlLCAvKio8IFByZWZlciBzZWVraW5nIHRvIHRoZSBhY3R1YWwgc2VlayAKKyAgICBPTVhfVElNRV9TZWVrTW9kZUFjY3VyYXRlLCAvKio8IFByZWZlciBzZWVraW5nIHRvIHRoZSBhY3R1YWwgc2VlawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvc2l0aW9uIG92ZXIgYW4gYXBwcm94aW1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBldmVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgaXQgcmVzdWx0cyBpbiBhIHNsb3dlciBzZWVrLiAqLwotICAgIE9NWF9USU1FX1NlZWtNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9USU1FX1NlZWtNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1RJTUVfU2Vla01vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9USU1FX1NlZWtNb2RlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVElNRV9TRUVLTU9ERVRZUEU7CkBAIC0xMDQsNDIgKzEwNCw0MiBAQAogICAgIE9NWF9USU1FX1NFRUtNT0RFVFlQRSBlVHlwZTsgICAgLyoqPCBUaGUgc2VlayBtb2RlICovCiB9IE9NWF9USU1FX0NPTkZJR19TRUVLTU9ERVRZUEU7CiAKLS8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgdGltZSBzdGFtcCB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWdzIAorLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSB0aW1lIHN0YW1wIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3MKICAqIG9uIHRoZSBDbG9jayBDb21wb25lbnQgKENDKToKLSAqIAotICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRXYWxsVGltZTogcXVlcnkgb2YgdGhlIENDknMgY3VycmVudCB3YWxsICAKKyAqCisgKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudFdhbGxUaW1lOiBxdWVyeSBvZiB0aGUgQ0MncyBjdXJyZW50IHdhbGwKICAqICAgICB0aW1lCi0gKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudE1lZGlhVGltZTogcXVlcnkgb2YgdGhlIENDknMgY3VycmVudCBtZWRpYQorICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRNZWRpYVRpbWU6IHF1ZXJ5IG9mIHRoZSBDQydzIGN1cnJlbnQgbWVkaWEKICAqICAgICB0aW1lCi0gKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlIGFuZCAgCi0gKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudFZpZGVvUmVmZXJlbmNlOiBhdWRpby92aWRlbyByZWZlcmVuY2UgCisgKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlIGFuZAorICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZTogYXVkaW8vdmlkZW8gcmVmZXJlbmNlCiAgKiAgICAgY2xvY2sgc2VuZGluZyBTQyBpdHMgcmVmZXJlbmNlIHRpbWUKLSAqIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWU6IGEgQ2xvY2sgQ29tcG9uZW50IGNsaWVudCBzZW5kcyAKLSAqICAgICB0aGlzIHN0cnVjdHVyZSB0byB0aGUgQ2xvY2sgQ29tcG9uZW50IHZpYSBhIFNldENvbmZpZyBvbiBpdHMgCisgKiBPTVhfSW5kZXhDb25maWdUaW1lQ2xpZW50U3RhcnRUaW1lOiBhIENsb2NrIENvbXBvbmVudCBjbGllbnQgc2VuZHMKKyAqICAgICB0aGlzIHN0cnVjdHVyZSB0byB0aGUgQ2xvY2sgQ29tcG9uZW50IHZpYSBhIFNldENvbmZpZyBvbiBpdHMKICAqICAgICBjbGllbnQgcG9ydCB3aGVuIGl0IHJlY2VpdmVzIGEgYnVmZmVyIHdpdGgKICAqICAgICBPTVhfQlVGRkVSRkxBR19TVEFSVFRJTUUgc2V0LiBJdCBtdXN0IHVzZSB0aGUgdGltZXN0YW1wCi0gKiAgICAgc3BlY2lmaWVkIGJ5IHRoYXQgYnVmZmVyIGZvciBuU3RhcnRUaW1lc3RhbXAuIAorICogICAgIHNwZWNpZmllZCBieSB0aGF0IGJ1ZmZlciBmb3IgblN0YXJ0VGltZXN0YW1wLgogICoKLSAqIEl0knMgYWxzbyB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWcgb24gY29tcG9uZW50cyBpbiBnZW5lcmFsOgorICogSXQncyBhbHNvIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZyBvbiBjb21wb25lbnRzIGluIGdlbmVyYWw6CiAgKgotICogT01YX0luZGV4Q29uZmlnVGltZVBvc2l0aW9uOiBJTCBjbGllbnQgcXVlcnlpbmcgY29tcG9uZW50IHBvc2l0aW9uIAorICogT01YX0luZGV4Q29uZmlnVGltZVBvc2l0aW9uOiBJTCBjbGllbnQgcXVlcnlpbmcgY29tcG9uZW50IHBvc2l0aW9uCiAgKiAoR2V0Q29uZmlnKSBvciBjb21tYW5kaW5nIGEgY29tcG9uZW50IHRvIHNlZWsgdG8gdGhlIGdpdmVuIGxvY2F0aW9uCiAgKiAoU2V0Q29uZmlnKQotICovCQorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGluZm9ybWF0aW9uICovCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwotICAgIE9NWF9USUNLUyBuVGltZXN0YW1wOyAgCSAgICAgLyoqPCB0aW1lc3RhbXAgLiovIAotfSBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRTsgIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9USUNLUyBuVGltZXN0YW1wOyAgICAgICAgLyoqPCB0aW1lc3RhbXAgLiovCit9IE9NWF9USU1FX0NPTkZJR19USU1FU1RBTVBUWVBFOwogCiAvKiogRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVmZXJlbmNlIGNsb2NrcyB0byB0aGUgbWVkaWEgdGltZS4gKi8KIHR5cGVkZWYgZW51bSBPTVhfVElNRV9VUERBVEVUWVBFIHsKICAgICAgIE9NWF9USU1FX1VwZGF0ZVJlcXVlc3RGdWxmaWxsbWVudCwgICAgLyoqPCBVcGRhdGUgaXMgdGhlIGZ1bGZpbGxtZW50IG9mIGEgbWVkaWEgdGltZSByZXF1ZXN0LiAqLwotICAgICAgT01YX1RJTUVfVXBkYXRlU2NhbGVDaGFuZ2VkLAkgICAgICAgIC8qKjwgVXBkYXRlIHdhcyBnZW5lcmF0ZWQgYmVjYXVzZSB0aGUgc2NhbGUgY2hhZ25lZC4gKi8KKyAgICAgIE9NWF9USU1FX1VwZGF0ZVNjYWxlQ2hhbmdlZCwgICAgICAgICAgLyoqPCBVcGRhdGUgd2FzIGdlbmVyYXRlZCBiZWNhdXNlIHRoZSBzY2FsZSBjaGFnbmVkLiAqLwogICAgICAgT01YX1RJTUVfVXBkYXRlQ2xvY2tTdGF0ZUNoYW5nZWQsICAgICAvKio8IFVwZGF0ZSB3YXMgZ2VuZXJhdGVkIGJlY2F1c2UgdGhlIGNsb2NrIHN0YXRlIGNoYW5nZWQuICovCi0gICAgICBPTVhfVElNRV9VcGRhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgICBPTVhfVElNRV9VcGRhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICAgIE9NWF9USU1FX1VwZGF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgICBPTVhfVElNRV9VcGRhdGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9USU1FX1VQREFURVRZUEU7CkBAIC0xNDcsOSArMTQ3LDkgQEAKIC8qKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSByZWZlcmVuY2UgY2xvY2tzIHRvIHRoZSBtZWRpYSB0aW1lLiAqLwogdHlwZWRlZiBlbnVtIE9NWF9USU1FX1JFRkNMT0NLVFlQRSB7CiAgICAgICBPTVhfVElNRV9SZWZDbG9ja05vbmUsICAgIC8qKjwgVXNlIG5vIHJlZmVyZW5jZXMuICovCi0gICAgICBPTVhfVElNRV9SZWZDbG9ja0F1ZGlvLAkvKio8IFVzZSByZWZlcmVuY2VzIHNlbnQgdGhyb3VnaCBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlICovCisgICAgICBPTVhfVElNRV9SZWZDbG9ja0F1ZGlvLCAgIC8qKjwgVXNlIHJlZmVyZW5jZXMgc2VudCB0aHJvdWdoIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UgKi8KICAgICAgIE9NWF9USU1FX1JlZkNsb2NrVmlkZW8sICAgLyoqPCBVc2UgcmVmZXJlbmNlcyBzZW50IHRocm91Z2ggT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZSAqLwotICAgICAgT01YX1RJTUVfUmVmQ2xvY2tLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgICBPTVhfVElNRV9SZWZDbG9ja0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgICAgT01YX1RJTUVfUmVmQ2xvY2tWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgICAgT01YX1RJTUVfUmVmQ2xvY2tNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9USU1FX1JFRkNMT0NLVFlQRTsKQEAgLTE1NywxMSArMTU3LDExIEBACiAvKiogRW51bWVyYXRpb24gb2YgY2xvY2sgc3RhdGVzLiAqLwogdHlwZWRlZiBlbnVtIE9NWF9USU1FX0NMT0NLU1RBVEUgewogICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVJ1bm5pbmcsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgcnVubmluZy4gKi8KLSAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVXYWl0aW5nRm9yU3RhcnRUaW1lLCAvKio8IENsb2NrIHdhaXRpbmcgdW50aWwgdGhlIAorICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVdhaXRpbmdGb3JTdGFydFRpbWUsIC8qKjwgQ2xvY2sgd2FpdGluZyB1bnRpbCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHByZXNjcmliZWQgY2xpZW50cyBlbWl0IHRoZWlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBzdGFydCB0aW1lLiAqLwogICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVN0b3BwZWQsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgc3RvcHBlZC4gKi8KLSAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgICBPTVhfVElNRV9DbG9ja1N0YXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgICBPTVhfVElNRV9DbG9ja1N0YXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9USU1FX0NMT0NLU1RBVEU7CkBAIC0xNzEsMTggKzE3MSwxOCBAQAogICogIEEgY2xpZW50IGNvbXBvbmVudCBzZW5kcyB0aGlzIHN0cnVjdHVyZSB0byB0aGUgQ2xvY2sgQ29tcG9uZW50IHZpYSBhIFNldENvbmZpZwogICogIG9uIGl0cyBjbGllbnQgcG9ydCB0byBzcGVjaWZ5IGEgbWVkaWEgdGltZXN0YW1wIHRoZSBDbG9jayBDb21wb25lbnQKICAqICBzaG91bGQgZW1pdC4gIFRoZSBDbG9jayBDb21wb25lbnQgc2hvdWxkIGZ1bGZpbGwgdGhlIHJlcXVlc3QgYnkgc2VuZGluZyBhCi0gKiAgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB3aGVuIGl0cyBtZWRpYSBjbG9jayBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgCisgKiAgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB3aGVuIGl0cyBtZWRpYSBjbG9jayBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKICAqICB0aW1lc3RhbXAuCiAgKgogICogIFRoZSBjbGllbnQgbWF5IHJlcXVpcmUgYSBtZWRpYSB0aW1lIHJlcXVlc3QgYmUgZnVsZmlsbGVkIHNsaWdodGx5Ci0gKiAgZWFybGllciB0aGFuIHRoZSBtZWRpYSB0aW1lIHNwZWNpZmllZC4gSW4gdGhpcyBjYXNlIHRoZSBjbGllbnQgc3BlY2lmaWVzIAotICogIGFuIG9mZnNldCB3aGljaCBpcyBlcXVhbCB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdhbGwgdGltZSBjb3JyZXNwb25kaW5nIAotICogIHRvIHRoZSByZXF1ZXN0ZWQgbWVkaWEgdGltZSBhbmQgdGhlIHdhbGwgdGltZSB3aGVuIGl0IHdpbGwgYmUgCi0gKiAgZnVsZmlsbGVkLiAKKyAqICBlYXJsaWVyIHRoYW4gdGhlIG1lZGlhIHRpbWUgc3BlY2lmaWVkLiBJbiB0aGlzIGNhc2UgdGhlIGNsaWVudCBzcGVjaWZpZXMKKyAqICBhbiBvZmZzZXQgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3YWxsIHRpbWUgY29ycmVzcG9uZGluZworICogIHRvIHRoZSByZXF1ZXN0ZWQgbWVkaWEgdGltZSBhbmQgdGhlIHdhbGwgdGltZSB3aGVuIGl0IHdpbGwgYmUKKyAqICBmdWxmaWxsZWQuCiAgKgogICogIEEgY2xpZW50IGNvbXBvbmVudCBtYXkgdXNlcyB0aGVzZSByZXF1ZXN0cyBhbmQgdGhlIE9NWF9USU1FX01FRElBVElNRVRZUEUgdG8KICAqICB0aW1lIGV2ZW50cyBhY2NvcmRpbmcgdG8gdGltZXN0YW1wcy4gSWYgYSBjbGllbnQgbXVzdCBwZXJmb3JtIGFuIG9wZXJhdGlvbiBPIGF0Ci0gKiAgYSB0aW1lIFQgKGUuZy4gZGVsaXZlciBhIHZpZGVvIGZyYW1lIGF0IGl0cyBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCksIGl0IG1ha2VzIGEgCisgKiAgYSB0aW1lIFQgKGUuZy4gZGVsaXZlciBhIHZpZGVvIGZyYW1lIGF0IGl0cyBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCksIGl0IG1ha2VzIGEKICAqICBtZWRpYSB0aW1lIHJlcXVlc3QgYXQgVCAocGVyaGFwcyBzcGVjaWZ5aW5nIGFuIG9mZnNldCB0byBlbnN1cmUgdGhlIHJlcXVlc3QgZnVsZmlsbG1lbnQKICAqICBpcyBhIGxpdHRsZSBlYXJseSkuIFdoZW4gdGhlIGNsb2NrIGNvbXBvbmVudCBwYXNzZXMgdGhlIHJlc3VsdGluZyBPTVhfVElNRV9NRURJQVRJTUVUWVBFCiAgKiAgc3RydWN0dXJlIGJhY2sgdG8gdGhlIGNsaWVudCBjb21wb25lbnQsIHRoZSBjbGllbnQgbWF5IHBlcmZvcm0gb3BlcmF0aW9uIE8gKHBlcmhhcHMgaGF2aW5nCkBAIC0xOTMsNTIgKzE5Myw1MiBAQAogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwotICAgIE9NWF9QVFIgcENsaWVudFByaXZhdGU7ICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzIChlLmcuIHRoZSBudW1iZXIgb2YgdGhlIGZyYW1lIHRvIGRlbGl2ZXIpLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBEdXBsaWNhdGVkIGluIHRoZSBtZWRpYSB0aW1lIHN0cnVjdHVyZSB0aGF0IGZ1bGZpbGxzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHRoaXMgcmVxdWVzdC4gQSB2YWx1ZSBvZiB6ZXJvIGlzIHJlc2VydmVkIGZvciB0aW1lIHNjYWxlIAorICAgIE9NWF9QVFIgcENsaWVudFByaXZhdGU7ICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgZnJvbSBvdGhlcnMgKGUuZy4gdGhlIG51bWJlciBvZiB0aGUgZnJhbWUgdG8gZGVsaXZlcikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgRHVwbGljYXRlZCBpbiB0aGUgbWVkaWEgdGltZSBzdHJ1Y3R1cmUgdGhhdCBmdWxmaWxscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHRoaXMgcmVxdWVzdC4gQSB2YWx1ZSBvZiB6ZXJvIGlzIHJlc2VydmVkIGZvciB0aW1lIHNjYWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdXBkYXRlcy4gKi8KLSAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgLyoqPCBNZWRpYSB0aW1lc3RhbXAgcmVxdWVzdGVkLiovIAorICAgIE9NWF9USUNLUyBuTWVkaWFUaW1lc3RhbXA7ICAvKio8IE1lZGlhIHRpbWVzdGFtcCByZXF1ZXN0ZWQuKi8KICAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBBbW91bnQgb2Ygd2FsbCBjbG9jayB0aW1lIGJ5IHdoaWNoIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICByZXF1ZXN0IHNob3VsZCBiZSBmdWxmaWxsZWQgZWFybHkgKi8KIH0gT01YX1RJTUVfQ09ORklHX01FRElBVElNRVJFUVVFU1RUWVBFOwogCi0vKio8IFN0cnVjdHVyZSBzZW50IGZyb20gdGhlIGNsb2NrIGNvbXBvbmVudCBjbGllbnQgZWl0aGVyIHdoZW4gZnVsZmlsbGluZyAKLSAqICAgYSBtZWRpYSB0aW1lIHJlcXVlc3Qgb3Igd2hlbiB0aGUgdGltZSBzY2FsZSBoYXMgY2hhbmdlZC4gCisvKio8IFN0cnVjdHVyZSBzZW50IGZyb20gdGhlIGNsb2NrIGNvbXBvbmVudCBjbGllbnQgZWl0aGVyIHdoZW4gZnVsZmlsbGluZworICogICBhIG1lZGlhIHRpbWUgcmVxdWVzdCBvciB3aGVuIHRoZSB0aW1lIHNjYWxlIGhhcyBjaGFuZ2VkLgogICoKLSAqICAgSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBDbG9jayBDb21wb25lbnQgZmlsbHMgdGhpcyBzdHJ1Y3R1cmUgYW5kIHRpbWVzIGl0cyBlbWlzc2lvbiAKLSAqICAgdG8gYSBjbGllbnQgY29tcG9uZW50ICh2aWEgdGhlIGNsaWVudCBwb3J0KSBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbWVkaWEgCisgKiAgIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGZpbGxzIHRoaXMgc3RydWN0dXJlIGFuZCB0aW1lcyBpdHMgZW1pc3Npb24KKyAqICAgdG8gYSBjbGllbnQgY29tcG9uZW50ICh2aWEgdGhlIGNsaWVudCBwb3J0KSBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbWVkaWEKICAqICAgdGltZSByZXF1ZXN0IHNlbnQgYnkgdGhlIGNsaWVudC4gVGhlIENsb2NrIENvbXBvbmVudCBzaG91bGQgdGltZSB0aGUgZW1pc3Npb24gdG8gb2NjdXIKLSAqICAgd2hlbiB0aGUgcmVxdWVzdGVkIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBDbG9jayBDb21wb25lbnQncyBtZWRpYSB0aW1lIGJ1dCBhbHNvIHRoZSAKLSAqICAgcHJlc2NyaWJlZCBvZmZzZXQgZWFybHkuIAorICogICB3aGVuIHRoZSByZXF1ZXN0ZWQgdGltZXN0YW1wIG1hdGNoZXMgdGhlIENsb2NrIENvbXBvbmVudCdzIG1lZGlhIHRpbWUgYnV0IGFsc28gdGhlCisgKiAgIHByZXNjcmliZWQgb2Zmc2V0IGVhcmx5LgogICoKICAqICAgVXBvbiBzY2FsZSBjaGFuZ2VzIHRoZSBjbG9jayBjb21wb25lbnQgY2xlYXJzIHRoZSBuQ2xpZW50UHJpdmF0ZSBkYXRhLCBzZW5kcyB0aGUgY3VycmVudAotICogICBtZWRpYSB0aW1lIGFuZCBzZXRzIHRoZSBuU2NhbGUgdG8gdGhlIG5ldyBzY2FsZSB2aWEgdGhlIGNsaWVudCBwb3J0LiBJdCBlbWl0cyBhIAotICogICBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHRvIGFsbCBjbGllbnRzIGluZGVwZW5kZW50IG9mIGFueSByZXF1ZXN0cy4gVGhpcyBhbGxvd3MgY2xpZW50cyB0byAKLSAqICAgYWx0ZXIgcHJvY2Vzc2luZyB0byBhY2NvbW9kYXRlIHNjYWxpbmcuIEZvciBpbnN0YW5jZSBhIHZpZGVvIGNvbXBvbmVudCBtaWdodCBza2lwIGludGVyLWZyYW1lcyAKLSAqICAgaW4gdGhlIGNhc2Ugb2YgZXh0cmVtZSBmYXN0Zm9yd2FyZC4gTGlrZXdpc2UgYW4gYXVkaW8gY29tcG9uZW50IG1pZ2h0IGFkZCBvciByZW1vdmUgc2FtcGxlcyAKLSAqICAgZnJvbSBhbiBhdWRpbyBmcmFtZSB0byBzY2FsZSBhdWRpbyBkYXRhLiAKKyAqICAgbWVkaWEgdGltZSBhbmQgc2V0cyB0aGUgblNjYWxlIHRvIHRoZSBuZXcgc2NhbGUgdmlhIHRoZSBjbGllbnQgcG9ydC4gSXQgZW1pdHMgYQorICogICBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHRvIGFsbCBjbGllbnRzIGluZGVwZW5kZW50IG9mIGFueSByZXF1ZXN0cy4gVGhpcyBhbGxvd3MgY2xpZW50cyB0bworICogICBhbHRlciBwcm9jZXNzaW5nIHRvIGFjY29tb2RhdGUgc2NhbGluZy4gRm9yIGluc3RhbmNlIGEgdmlkZW8gY29tcG9uZW50IG1pZ2h0IHNraXAgaW50ZXItZnJhbWVzCisgKiAgIGluIHRoZSBjYXNlIG9mIGV4dHJlbWUgZmFzdGZvcndhcmQuIExpa2V3aXNlIGFuIGF1ZGlvIGNvbXBvbmVudCBtaWdodCBhZGQgb3IgcmVtb3ZlIHNhbXBsZXMKKyAqICAgZnJvbSBhbiBhdWRpbyBmcmFtZSB0byBzY2FsZSBhdWRpbyBkYXRhLgogICoKICAqICAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBzb21lIGNsb2NrIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBhYmxlIHRvIGZ1bGZpbGwgcmVxdWVzdHMKLSAqICAgYXQgZXhhY3RseSB0aGUgcHJlc2NyaWJlZCB0aW1lLiBUaGlzIGlzIGFjY2VwdGFibGUgc28gbG9uZyBhcyB0aGUgcmVxdWVzdCBpcyAKLSAqICAgZnVsZmlsbGVkIGF0IGxlYXN0IGFzIGVhcmx5IGFzIGRlc2NyaWJlZCBhbmQgbm90IGxhdGVyLiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyAKKyAqICAgYXQgZXhhY3RseSB0aGUgcHJlc2NyaWJlZCB0aW1lLiBUaGlzIGlzIGFjY2VwdGFibGUgc28gbG9uZyBhcyB0aGUgcmVxdWVzdCBpcworICogICBmdWxmaWxsZWQgYXQgbGVhc3QgYXMgZWFybHkgYXMgZGVzY3JpYmVkIGFuZCBub3QgbGF0ZXIuIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzCiAgKiAgIGZpZWxkcyB0aGUgY2xpZW50IG1heSB1c2UgdG8gd2FpdCBmb3IgdGhlIHJlbWFpbmluZyB0aW1lLgogICoKLSAqICAgVGhlIGNsaWVudCBtYXkgdXNlIGVpdGhlciB0aGUgbk9mZnNldCBvciBuV2FsbFRpbWVBdE1lZGlhIGZpZWxkcyB0byBkZXRlcm1pbmUgdGhlIAorICogICBUaGUgY2xpZW50IG1heSB1c2UgZWl0aGVyIHRoZSBuT2Zmc2V0IG9yIG5XYWxsVGltZUF0TWVkaWEgZmllbGRzIHRvIGRldGVybWluZSB0aGUKICAqICAgd2FsbCB0aW1lIHVudGlsIHRoZSBuTWVkaWFUaW1lc3RhbXAgYWN0dWFsbHkgb2NjdXJzLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlCiAgKiAgIGNsaWVudCBjYW4gZ2V0IGEgbW9yZSBhY2N1cmF0ZSB2YWx1ZSBmb3Igb2Zmc2V0IGJ5IGdldHRpbmcgdGhlIGN1cnJlbnQgd2FsbAotICogICBmcm9tIHRoZSBjbG9jIGNvbXBvbmVudCBhbmQgc3VidHJhY3RpbmcgaXQgZnJvbSBuV2FsbFRpbWVBdE1lZGlhLiAKKyAqICAgZnJvbSB0aGUgY2xvYyBjb21wb25lbnQgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gbldhbGxUaW1lQXRNZWRpYS4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSAgICBPTVhfVTMyIG5DbGllbnRQcml2YXRlOyAgICAgICAgIC8qKjwgQ2xpZW50IHByaXZhdGUgZGF0YSB0byBkaXNhYmlndWF0ZSB0aGlzIG1lZGlhIHRpbWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzLiBDb3BpZWQgZnJvbSB0aGUgbWVkaWEgdGltZSByZXF1ZXN0LiAKKyAgICBPTVhfVTMyIG5DbGllbnRQcml2YXRlOyAgICAgICAgIC8qKjwgQ2xpZW50IHByaXZhdGUgZGF0YSB0byBkaXNhYmlndWF0ZSB0aGlzIG1lZGlhIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgZnJvbSBvdGhlcnMuIENvcGllZCBmcm9tIHRoZSBtZWRpYSB0aW1lIHJlcXVlc3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEEgdmFsdWUgb2YgemVybyBpcyByZXNlcnZlZCBmb3IgdGltZSBzY2FsZSB1cGRhdGVzLiAqLwogICAgIE9NWF9USU1FX1VQREFURVRZUEUgZVVwZGF0ZVR5cGU7IC8qKjwgUmVhc29uIGZvciB0aGUgdXBkYXRlICovCi0gICAgT01YX1RJQ0tTIG5NZWRpYVRpbWVzdGFtcDsgICAgICAvKio8IE1lZGlhIHRpbWUgcmVxdWVzdGVkLiBJZiBubyBtZWRpYSB0aW1lIHdhcyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcmVxdWVzdGVkIHRoZW4gdGhpcyBpcyB0aGUgY3VycmVudCBtZWRpYSB0aW1lLiAqLyAKKyAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgICAgIC8qKjwgTWVkaWEgdGltZSByZXF1ZXN0ZWQuIElmIG5vIG1lZGlhIHRpbWUgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3RlZCB0aGVuIHRoaXMgaXMgdGhlIGN1cnJlbnQgbWVkaWEgdGltZS4gKi8KICAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgICAgIC8qKjwgQW1vdW50IG9mIHdhbGwgY2xvY2sgdGltZSBieSB3aGljaCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3Qgd2FzIGFjdHVhbGx5IGZ1bGZpbGxlZCBlYXJseSAqLwogCkBAIC0yNTAsMjEgKzI1MCwyMSBAQAogICAgIE9NWF9TMzIgeFNjYWxlOyAgICAgICAgICAgICAgICAgLyoqPCBDdXJyZW50IG1lZGlhIHRpbWUgc2NhbGUgaW4gUTE2IGZvcm1hdC4gKi8KICAgICBPTVhfVElNRV9DTE9DS1NUQVRFIGVTdGF0ZTsgICAgIC8qIFNlZWtpbmcgQ2hhbmdlLiBBZGRlZCA3LzEyLiovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRlIG9mIHRoZSBtZWRpYSB0aW1lLiAqLwotfSBPTVhfVElNRV9NRURJQVRJTUVUWVBFOyAgCit9IE9NWF9USU1FX01FRElBVElNRVRZUEU7CiAKLS8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IG1lZGlhIHRpbWUgc2NhbGUgZmFjdG9yLiBBcHBsaWNhYmxlIG9ubHkgdG8gY2xvY2sgCisvKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtZWRpYSB0aW1lIHNjYWxlIGZhY3Rvci4gQXBwbGljYWJsZSBvbmx5IHRvIGNsb2NrCiAgKiAgY29tcG9uZW50LCBvdGhlciBjb21wb25lbnRzIHNlZSBzY2FsZSBjaGFuZ2VzIHZpYSBPTVhfVElNRV9NRURJQVRJTUVUWVBFIGJ1ZmZlcnMgc2VudCB2aWEKLSAqICB0aGUgY2xvY2sgY29tcG9uZW50IGNsaWVudCBwb3J0cy4gVXBvbiByZWNpZXZpbmcgdGhpcyBjb25maWcgdGhlIGNsb2NrIGNvbXBvbmVudCBjaGFuZ2VzIAotICogIHRoZSByYXRlIGJ5IHdoaWNoIHRoZSBtZWRpYSB0aW1lIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgZWZmZWN0aXZlbHkgaW1wbGVtZW50aW5nIHRyaWNrIG1vZGVzLiAKLSAqLyAKKyAqICB0aGUgY2xvY2sgY29tcG9uZW50IGNsaWVudCBwb3J0cy4gVXBvbiByZWNpZXZpbmcgdGhpcyBjb25maWcgdGhlIGNsb2NrIGNvbXBvbmVudCBjaGFuZ2VzCisgKiAgdGhlIHJhdGUgYnkgd2hpY2ggdGhlIG1lZGlhIHRpbWUgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBlZmZlY3RpdmVseSBpbXBsZW1lbnRpbmcgdHJpY2sgbW9kZXMuCisgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19TQ0FMRVRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9TMzIgeFNjYWxlOyAgICAgICAgICAgICAgICAgLyoqPCBUaGlzIGlzIGEgdmFsdWUgaW4gUTE2IGZvcm1hdCB3aGljaCBpcyB1c2VkIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2NhbGluZyB0aGUgbWVkaWEgdGltZSAqLwogfSBPTVhfVElNRV9DT05GSUdfU0NBTEVUWVBFOwotIAotLyoqIEJpdHMgdXNlZCB0byBpZGVudGlmeSBhIGNsb2NrIHBvcnQuIFVzZWQgaW4gT01YX1RJTUVfQ09ORklHX0NMT0NLU1RBVEVUWVBFknMgbldhaXRNYXNrIGZpZWxkICovCisKKy8qKiBCaXRzIHVzZWQgdG8gaWRlbnRpZnkgYSBjbG9jayBwb3J0LiBVc2VkIGluIE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRSdzIG5XYWl0TWFzayBmaWVsZCAqLwogI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMCAweDAwMDAwMDAxCiAjZGVmaW5lIE9NWF9DTE9DS1BPUlQxIDB4MDAwMDAwMDIKICNkZWZpbmUgT01YX0NMT0NLUE9SVDIgMHgwMDAwMDAwNApAQCAtMjc0LDM4ICsyNzQsMzggQEAKICNkZWZpbmUgT01YX0NMT0NLUE9SVDYgMHgwMDAwMDA0MAogI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNyAweDAwMDAwMDgwCiAKLS8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IG1vZGUgb2YgdGhlIG1lZGlhIGNsb2NrLiAKLSAqICBJTCBDbGllbnQgdXNlcyB0aGlzIGNvbmZpZyB0byBjaGFuZ2Ugb3IgcXVlcnkgdGhlIG1vZGUgb2YgdGhlIAorLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbW9kZSBvZiB0aGUgbWVkaWEgY2xvY2suCisgKiAgSUwgQ2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZSBtb2RlIG9mIHRoZQogICogIG1lZGlhIGNsb2NrIG9mIHRoZSBjbG9jayBjb21wb25lbnQuIEFwcGxpY2FibGUgb25seSB0byBjbG9jawotICogIGNvbXBvbmVudC4gCi0gKiAgCisgKiAgY29tcG9uZW50LgorICoKICAqICBPbiBhIFNldENvbmZpZyBpZiBlU3RhdGUgaXMgT01YX1RJTUVfQ2xvY2tTdGF0ZVJ1bm5pbmcgbWVkaWEgdGltZQogICogIHN0YXJ0cyBpbW1lZGlhdGVseSBhdCB0aGUgcHJlc2NyaWJlZCBzdGFydCB0aW1lLiBJZgogICogIE9NWF9USU1FX0Nsb2NrU3RhdGVXYWl0aW5nRm9yU3RhcnRUaW1lIHRoZSBDbG9jayBDb21wb25lbnQgaWdub3JlcwotICogIHRoZSBnaXZlbiBuU3RhcnRUaW1lIGFuZCB3YWl0cyBmb3IgYWxsIGNsaWVudHMgc3BlY2lmaWVkIGluIHRoZSAKLSAqICBuV2FpdE1hc2sgdG8gc2VuZCBzdGFydHRpbWVzICh2aWEgCi0gKiAgT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZSkuIFRoZSBDbG9jayBDb21wb25lbnQgdGhlbiBzdGFydHMgCi0gKiAgdGhlIG1lZGlhIGNsb2NrIHVzaW5nIHRoZSBlYXJsaWVzdCBzdGFydCB0aW1lIHN1cHBsaWVkLiAqLyAgICAKKyAqICB0aGUgZ2l2ZW4gblN0YXJ0VGltZSBhbmQgd2FpdHMgZm9yIGFsbCBjbGllbnRzIHNwZWNpZmllZCBpbiB0aGUKKyAqICBuV2FpdE1hc2sgdG8gc2VuZCBzdGFydHRpbWVzICh2aWEKKyAqICBPTVhfSW5kZXhDb25maWdUaW1lQ2xpZW50U3RhcnRUaW1lKS4gVGhlIENsb2NrIENvbXBvbmVudCB0aGVuIHN0YXJ0cworICogIHRoZSBtZWRpYSBjbG9jayB1c2luZyB0aGUgZWFybGllc3Qgc3RhcnQgdGltZSBzdXBwbGllZC4gKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiAKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgaW5mb3JtYXRpb24gKi8KICAgICBPTVhfVElNRV9DTE9DS1NUQVRFIGVTdGF0ZTsgLyoqPCBTdGF0ZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KICAgICBPTVhfVElDS1MgblN0YXJ0VGltZTsgICAgICAgLyoqPCBTdGFydCB0aW1lIG9mIHRoZSBtZWRpYSB0aW1lLiAqLwotICAgIE9NWF9USUNLUyBuT2Zmc2V0OyAgICAgICAgICAvKio8IFRpbWUgdG8gb2Zmc2V0IHRoZSBtZWRpYSB0aW1lIGJ5IAorICAgIE9NWF9USUNLUyBuT2Zmc2V0OyAgICAgICAgICAvKio8IFRpbWUgdG8gb2Zmc2V0IHRoZSBtZWRpYSB0aW1lIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChlLmcuIHByZXJvbGwpLiBNZWRpYSB0aW1lIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVwb3J0ZWQgdG8gYmUgbk9mZnNldCB0aWNrcyBlYXJsaWVyLiAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlcG9ydGVkIHRvIGJlIG5PZmZzZXQgdGlja3MgZWFybGllci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgT01YX1UzMiBuV2FpdE1hc2s7ICAgICAgICAgIC8qKjwgTWFzayBvZiBPTVhfQ0xPQ0tQT1JUIHZhbHVlcy4gKi8KIH0gT01YX1RJTUVfQ09ORklHX0NMT0NLU1RBVEVUWVBFOwogCiAvKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgcmVmZXJlbmNlIGNsb2NrIGN1cnJlbnRseSBiZWluZyB1c2VkIHRvCi0gKiAgY29tcHV0ZSBtZWRpYSB0aW1lLiBJTCBjbGllbnQgdXNlcyB0aGlzIGNvbmZpZyB0byBjaGFuZ2Ugb3IgcXVlcnkgdGhlIAorICogIGNvbXB1dGUgbWVkaWEgdGltZS4gSUwgY2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZQogICogIGNsb2NrIGNvbXBvbmVudCdzIGFjdGl2ZSByZWZlcmVuY2UgY2xvY2sgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19BQ1RJVkVSRUZDTE9DS1RZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9USU1FX1JFRkNMT0NLVFlQRSBlQ2xvY2s7ICAgLyoqPCBSZWZlcmVuY2UgY2xvY2sgdXNlZCB0byBjb21wdXRlIG1lZGlhIHRpbWUgKi8gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBPTVhfVElNRV9SRUZDTE9DS1RZUEUgZUNsb2NrOyAgIC8qKjwgUmVmZXJlbmNlIGNsb2NrIHVzZWQgdG8gY29tcHV0ZSBtZWRpYSB0aW1lICovCiB9IE9NWF9USU1FX0NPTkZJR19BQ1RJVkVSRUZDTE9DS1RZUEU7CiAKIC8qKiBEZXNjcmlwdG9yIGZvciBzZXR0aW5nIHNwZWNpZmljcyBvZiBwb3dlciB0eXBlLgpAQCAtMzI3LDggKzMyNyw4IEBACiAKIAogLyoqCi0gKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKLSAqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IG90aGVyIAorICogVGhlIFBvcnREZWZpbml0aW9uIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlZmluZSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMKKyAqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IG90aGVyCiAgKiBwYXRoLgogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfT1RIRVJfUE9SVERFRklOSVRJT05UWVBFIHsKQEAgLTM0NCw3ICszNDQsNyBAQAogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgLyoqPCBJbmRpY2F0ZXMgd2hpY2ggcG9ydCB0byBzZXQgKi8KICAgICBPTVhfVTMyIG5JbmRleDsgLyoqPCBJbmRpY2F0ZXMgdGhlIGVudW1lcmF0aW9uIGluZGV4IGZvciB0aGUgZm9ybWF0IGZyb20gMHgwIHRvIE4tMSAqLwogICAgIE9NWF9PVEhFUl9GT1JNQVRUWVBFIGVGb3JtYXQ7IC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIGNoYW5uZWwgKi8KLX0gT01YX09USEVSX1BBUkFNX1BPUlRGT1JNQVRUWVBFOyAKK30gT01YX09USEVSX1BBUkFNX1BPUlRGT1JNQVRUWVBFOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfVHlwZXMuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfVHlwZXMuaAppbmRleCA3MWUzNDZhLi41YWZhYmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1R5cGVzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9UeXBlcy5oCkBAIC0xNiwzMiArMTYsMzIgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuIAotICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAotICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCi0gKiAKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQogICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCi0gKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KIAogLyoqIE9NWF9UeXBlcy5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCi0gKiAgVGhlIE9NWF9UeXBlcyBoZWFkZXIgZmlsZSBjb250YWlucyB0aGUgcHJpbWl0aXZlIHR5cGUgZGVmaW5pdGlvbnMgdXNlZCBieSAKKyAqICBUaGUgT01YX1R5cGVzIGhlYWRlciBmaWxlIGNvbnRhaW5zIHRoZSBwcmltaXRpdmUgdHlwZSBkZWZpbml0aW9ucyB1c2VkIGJ5CiAgKiAgdGhlIGNvcmUsIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIGNvbXBvbmVudC4gIFRoaXMgZmlsZSBtYXkgbmVlZCB0byBiZQotICogIG1vZGlmaWVkIHRvIGJlIHVzZWQgb24gc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlICJjaGFyIiBzZXQgdG8gOCBiaXRzLCAKKyAqICBtb2RpZmllZCB0byBiZSB1c2VkIG9uIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSAiY2hhciIgc2V0IHRvIDggYml0cywKICAqICAic2hvcnQiIHNldCB0byAxNiBiaXRzIGFuZCAibG9uZyIgc2V0IHRvIDMyIGJpdHMuCiAgKi8KIApAQCAtNTcsMTIgKzU3LDEyIEBACiAvKiogVGhlIE9NWF9BUEkgYW5kIE9NWF9BUElFTlRSWSBhcmUgcGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMgdXNlZAogICogIHRvIGRlY2xhcmUgT01YIGZ1bmN0aW9uIHByb3RvdHlwZXMuICBUaGV5IGFyZSBtb2RpZmllZCB0byBtZWV0IHRoZQogICogIHJlcXVpcmVtZW50cyBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtICovCi0jaWZkZWYgX19TWU1CSUFOMzJfXyAgIAorI2lmZGVmIF9fU1lNQklBTjMyX18KICMgICBpZmRlZiBfX09NWF9FWFBPUlRTCiAjICAgICAgIGRlZmluZSBPTVhfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQogIyAgIGVsc2UKICMgICAgICAgaWZkZWYgX1dJTjMyCi0jICAgICAgICAgICBkZWZpbmUgT01YX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgCisjICAgICAgICAgICBkZWZpbmUgT01YX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKICMgICAgICAgZWxzZQogIyAgICAgICAgICAgZGVmaW5lIE9NWF9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCiAjICAgICAgIGVuZGlmCkBAIC04NSwxOCArODUsMTggQEAKICNlbmRpZgogCiAjaWZuZGVmIE9NWF9BUElFTlRSWQotI2RlZmluZSBPTVhfQVBJRU5UUlkgCi0jZW5kaWYgCisjZGVmaW5lIE9NWF9BUElFTlRSWQorI2VuZGlmCiAKLS8qKiBPTVhfSU4gaXMgdXNlZCB0byBpZGVudGlmeSBpbnB1dHMgdG8gYW4gT01YIGZ1bmN0aW9uLiAgVGhpcyBkZXNpZ25hdGlvbiAKLSAgICB3aWxsIGFsc28gYmUgdXNlZCBpbiB0aGUgY2FzZSBvZiBhIHBvaW50ZXIgdGhhdCBwb2ludHMgdG8gYSBwYXJhbWV0ZXIgCisvKiogT01YX0lOIGlzIHVzZWQgdG8gaWRlbnRpZnkgaW5wdXRzIHRvIGFuIE9NWCBmdW5jdGlvbi4gIFRoaXMgZGVzaWduYXRpb24KKyAgICB3aWxsIGFsc28gYmUgdXNlZCBpbiB0aGUgY2FzZSBvZiBhIHBvaW50ZXIgdGhhdCBwb2ludHMgdG8gYSBwYXJhbWV0ZXIKICAgICB0aGF0IGlzIHVzZWQgYXMgYW4gb3V0cHV0LiAqLwogI2lmbmRlZiBPTVhfSU4KICNkZWZpbmUgT01YX0lOCiAjZW5kaWYKIAotLyoqIE9NWF9PVVQgaXMgdXNlZCB0byBpZGVudGlmeSBvdXRwdXRzIGZyb20gYW4gT01YIGZ1bmN0aW9uLiAgVGhpcyAKLSAgICBkZXNpZ25hdGlvbiB3aWxsIGFsc28gYmUgdXNlZCBpbiB0aGUgY2FzZSBvZiBhIHBvaW50ZXIgdGhhdCBwb2ludHMgCisvKiogT01YX09VVCBpcyB1c2VkIHRvIGlkZW50aWZ5IG91dHB1dHMgZnJvbSBhbiBPTVggZnVuY3Rpb24uICBUaGlzCisgICAgZGVzaWduYXRpb24gd2lsbCBhbHNvIGJlIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYSBwb2ludGVyIHRoYXQgcG9pbnRzCiAgICAgdG8gYSBwYXJhbWV0ZXIgdGhhdCBpcyB1c2VkIGFzIGFuIGlucHV0LiAqLwogI2lmbmRlZiBPTVhfT1VUCiAjZGVmaW5lIE9NWF9PVVQKQEAgLTEwNCw4ICsxMDQsOCBAQAogCiAKIC8qKiBPTVhfSU5PVVQgaXMgdXNlZCB0byBpZGVudGlmeSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGVpdGhlciBpbnB1dHMgb3IKLSAgICBvdXRwdXRzIGZyb20gYW4gT01YIGZ1bmN0aW9uIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGRlc2lnbmF0aW9uIHdpbGwgCi0gICAgYWxzbyBiZSB1c2VkIGluIHRoZSBjYXNlIG9mIGEgcG9pbnRlciB0aGF0ICBwb2ludHMgdG8gYSBwYXJhbWV0ZXIgdGhhdCAKKyAgICBvdXRwdXRzIGZyb20gYW4gT01YIGZ1bmN0aW9uIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGRlc2lnbmF0aW9uIHdpbGwKKyAgICBhbHNvIGJlIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYSBwb2ludGVyIHRoYXQgIHBvaW50cyB0byBhIHBhcmFtZXRlciB0aGF0CiAgICAgaXMgdXNlZCBib3RoIGFzIGFuIGlucHV0IGFuZCBhbiBvdXRwdXQuICovCiAjaWZuZGVmIE9NWF9JTk9VVAogI2RlZmluZSBPTVhfSU5PVVQKQEAgLTEyMywzMSArMTIzLDMxIEBACiAvKiogQGRlZmdyb3VwIGNvcmUgT3Blbk1BWCBJTCBjb3JlCiAgKiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoZSBPTVggSUwgY29yZQogICovCi0gCisKICAvKiogQGRlZmdyb3VwIGNvbXAgT3Blbk1BWCBJTCBjb21wb25lbnQKICAqIEZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlIHJlbGF0ZWQgdG8gdGhlIE9NWCBJTCBjb21wb25lbnQKICAqLwotIAotLyoqIEBkZWZncm91cCBycG0gUmVzb3VyY2UgYW5kIFBvbGljeSBNYW5hZ2VtZW50IAorCisvKiogQGRlZmdyb3VwIHJwbSBSZXNvdXJjZSBhbmQgUG9saWN5IE1hbmFnZW1lbnQKICAqIFN0cnVjdHVyZXMgZm9yIHJlc291cmNlIGFuZCBwb2xpY3kgbWFuYWdlbWVudCBvZiBjb21wb25lbnRzCiAgKi8KIAogLyoqIEBkZWZncm91cCBidWYgQnVmZmVyIE1hbmFnZW1lbnQKICAqIEJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMKICAqLwotICAKKwogLyoqIEBkZWZncm91cCB0dW4gVHVubmVsaW5nCiAgKiBAaW5ncm91cCBjb3JlIGNvbXAKICAqIFN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdHVubmVscyBhbW9uZyBjb21wb25lbnQgcG9ydHMKICAqLwotIAorCiAvKiogQGRlZmdyb3VwIGNwIENvbnRlbnQgUGlwZXMKICAqICBAaW5ncm91cCBjb3JlCiAgKi8KLSAKKwogIC8qKiBAZGVmZ3JvdXAgbWV0YWRhdGEgTWV0YWRhdGEgaGFuZGxpbmcKLSAgKiAKLSAgKi8gCisgICoKKyAgKi8KIAogLyoqIE9NWF9VOCBpcyBhbiA4IGJpdCB1bnNpZ25lZCBxdWFudGl0eSB0aGF0IGlzIGJ5dGUgYWxpZ25lZCAqLwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIE9NWF9VODsKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAKIC8qIFVzZXJzIHdpdGggY29tcGlsZXJzIHRoYXQgY2Fubm90IGFjY2VwdCB0aGUgImxvbmcgbG9uZyIgZGVzaWduYXRpb24gc2hvdWxkCi0gICBkZWZpbmUgdGhlIE9NWF9TS0lQNjRCSVQgbWFjcm8uICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIG1heSBjYXVzZSAKKyAgIGRlZmluZSB0aGUgT01YX1NLSVA2NEJJVCBtYWNyby4gIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoaXMgbWF5IGNhdXNlCiAgICBzb21lIGNvbXBvbmVudHMgdG8gZmFpbCB0byBjb21waWxlIGlmIHRoZSBjb21wb25lbnQgd2FzIHdyaXR0ZW4gdG8gcmVxdWlyZQogICAgNjQgYml0IGludGVncmFsIHR5cGVzLiAgSG93ZXZlciwgdGhlc2UgY29tcG9uZW50cyB3b3VsZCBOT1QgY29tcGlsZSBhbnl3YXkKICAgIHNpbmNlIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB3YXkgdGhlIGNvbXBvbmVudCB3YXMgd3JpdHRlbi4KQEAgLTE4NCw3ICsxODQsNyBAQAogCiAjZWxpZiBkZWZpbmVkKFdJTjMyKQogCi0vKiogT01YX1U2NCBpcyBhIDY0IGJpdCB1bnNpZ25lZCBxdWFudGl0eSB0aGF0IGlzIDY0IGJpdCB3b3JkIGFsaWduZWQgKi8gICAKKy8qKiBPTVhfVTY0IGlzIGEgNjQgYml0IHVuc2lnbmVkIHF1YW50aXR5IHRoYXQgaXMgNjQgYml0IHdvcmQgYWxpZ25lZCAqLwogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICBPTVhfVTY0OwogCiAvKiogT01YX1M2NCBpcyBhIDY0IGJpdCBzaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovCkBAIC0yMDIsNyArMjAyLDcgQEAKICNlbmRpZgogCiAKLS8qKiBUaGUgT01YX0JPT0wgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBhIHRydWUgb3IgYSBmYWxzZSAKKy8qKiBUaGUgT01YX0JPT0wgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBhIHRydWUgb3IgYSBmYWxzZQogICAgIHZhbHVlIHdoZW4gcGFzc2luZyBwYXJhbWV0ZXJzIHRvIGFuZCBmcm9tIHRoZSBPTVggY29yZSBhbmQgY29tcG9uZW50cy4gIFRoZQogICAgIE9NWF9CT09MIGlzIGEgMzIgYml0IHF1YW50aXR5IGFuZCBpcyBhbGlnbmVkIG9uIGEgMzIgYml0IHdvcmQgYm91bmRhcnkuCiAgKi8KQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgIE9NWF9GQUxTRSA9IDAsCiAgICAgT01YX1RSVUUgPSAhT01YX0ZBTFNFLAogICAgIE9NWF9CT09MX01BWCA9IDB4N0ZGRkZGRkYKLX0gT01YX0JPT0w7IAorfSBPTVhfQk9PTDsKIAogLyoKICAqIFRlbXBvcmFyeSBBbmRyb2lkIDY0IGJpdCBtb2RpZmljYXRpb24KQEAgLTIzNywxNCArMjM3LDE0IEBACiB0eXBlZGVmIHZvaWQqIE9NWF9QVFI7CiAKIC8qKiBUaGUgT01YX1NUUklORyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcGFzcyAiQyIgdHlwZSBzdHJpbmdzIGJldHdlZW4KLSAgICB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBjb3JlIGFuZCBjb21wb25lbnQuICBUaGUgT01YX1NUUklORyB0eXBlIGlzIGEgMzIgCi0gICAgYml0IHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiAgVGhlICBwb2ludGVyIGlzIHdvcmQgYWxpZ25lZCBhbmQgCi0gICAgdGhlIHN0cmluZyBpcyBieXRlIGFsaWduZWQuICAKKyAgICB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBjb3JlIGFuZCBjb21wb25lbnQuICBUaGUgT01YX1NUUklORyB0eXBlIGlzIGEgMzIKKyAgICBiaXQgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcuICBUaGUgIHBvaW50ZXIgaXMgd29yZCBhbGlnbmVkIGFuZAorICAgIHRoZSBzdHJpbmcgaXMgYnl0ZSBhbGlnbmVkLgogICovCiB0eXBlZGVmIGNoYXIqIE9NWF9TVFJJTkc7CiAKIC8qKiBUaGUgT01YX0JZVEUgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHBhc3MgYXJyYXlzIG9mIGJ5dGVzIHN1Y2ggYXMKLSAgICBidWZmZXJzIGJldHdlZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY29tcG9uZW50IGFuZCBjb3JlLiAgVGhlIE9NWF9CWVRFIAorICAgIGJ1ZmZlcnMgYmV0d2VlbiB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBjb21wb25lbnQgYW5kIGNvcmUuICBUaGUgT01YX0JZVEUKICAgICB0eXBlIGlzIGEgMzIgYml0IHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiAgVGhlICBwb2ludGVyIGlzIHdvcmQKICAgICBhbGlnbmVkIGFuZCB0aGUgc3RyaW5nIGlzIGJ5dGUgYWxpZ25lZC4KICAqLwpAQCAtMjU5LDcgKzI1OSw3IEBACiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgT01YX1VVSURUWVBFWzEyOF07CiAKIC8qKiBUaGUgT01YX0RJUlRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiBhIHBvcnQgaXMgYW4gaW5wdXQgb3IKLSAgICBhbiBvdXRwdXQgcG9ydC4gIFRoaXMgZW51bWVyYXRpb24gaXMgY29tbW9uIGFjcm9zcyBhbGwgY29tcG9uZW50IHR5cGVzLiAgICAKKyAgICBhbiBvdXRwdXQgcG9ydC4gIFRoaXMgZW51bWVyYXRpb24gaXMgY29tbW9uIGFjcm9zcyBhbGwgY29tcG9uZW50IHR5cGVzLgogICovCiB0eXBlZGVmIGVudW0gT01YX0RJUlRZUEUKIHsKQEAgLTI2OCw4ICsyNjgsOCBAQAogICAgIE9NWF9EaXJNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9ESVJUWVBFOwogCi0vKiogVGhlIE9NWF9FTkRJQU5UWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGJpdCBvcmRlcmluZyAKLSAgICBmb3IgbnVtZXJpY2FsIGRhdGEgKGkuZS4gYmlnIGVuZGlhbiwgb3IgbGl0dGxlIGVuZGlhbikuICAgIAorLyoqIFRoZSBPTVhfRU5ESUFOVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBiaXQgb3JkZXJpbmcKKyAgICBmb3IgbnVtZXJpY2FsIGRhdGEgKGkuZS4gYmlnIGVuZGlhbiwgb3IgbGl0dGxlIGVuZGlhbikuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfRU5ESUFOVFlQRQogewpAQCAtMjc5LDcgKzI3OSw3IEBACiB9IE9NWF9FTkRJQU5UWVBFOwogCiAKLS8qKiBUaGUgT01YX05VTUVSSUNBTERBVEFUWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgaWYgZGF0YSAKKy8qKiBUaGUgT01YX05VTUVSSUNBTERBVEFUWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgaWYgZGF0YQogICAgIGlzIHNpZ25lZCBvciB1bnNpZ25lZAogICovCiB0eXBlZGVmIGVudW0gT01YX05VTUVSSUNBTERBVEFUWVBFCkBAIC0zMDcsMTYgKzMwNywxNiBAQAogCiAKIC8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHNvbWUgdGltZSBvciBkdXJhdGlvbiBpbiBtaWNyb3NlY29uZHMuIFRoaXMgc3RydWN0dXJlCi0gICogIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzaWduZWQgNjQgYml0IHZhbHVlLiBUaGUgcXVhbnRpdHkgaXMgc2lnbmVkIHRvIGFjY29tbW9kYXRlIAotICAqICBuZWdhdGl2ZSBkZWx0YXMgYW5kIHByZXJvbGwgc2NlbmFyaW9zLiBUaGUgcXVhbnRpdHkgaXMgcmVwcmVzZW50ZWQgaW4gbWljcm9zZWNvbmRzIAorICAqICBtdXN0IGJlIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS4gVGhlIHF1YW50aXR5IGlzIHNpZ25lZCB0byBhY2NvbW1vZGF0ZQorICAqICBuZWdhdGl2ZSBkZWx0YXMgYW5kIHByZXJvbGwgc2NlbmFyaW9zLiBUaGUgcXVhbnRpdHkgaXMgcmVwcmVzZW50ZWQgaW4gbWljcm9zZWNvbmRzCiAgICogIHRvIGFjY29tb2RhdGUgaGlnaCByZXNvbHV0aW9uIHRpbWVzdGFtcHMgKGUuZy4gRFZEIHByZXNlbnRhdGlvbiB0aW1lc3RhbXBzIGJhc2VkCi0gICogIG9uIGEgOTBrSHogY2xvY2spIGFuZCB0byBhbGxvdyBtb3JlIGFjY3VyYXRlIGFuZCBzeW5jaHJvbml6ZWQgZGVsaXZlcnkgKGUuZy4gCi0gICogIGluZGl2aWR1YWwgYXVkaW8gc2FtcGxlcyBkZWxpdmVyZWQgYXQgMTkyIGtIeikuIFRoZSBxdWFudGl0eSBpcyA2NCBiaXQgdG8gCisgICogIG9uIGEgOTBrSHogY2xvY2spIGFuZCB0byBhbGxvdyBtb3JlIGFjY3VyYXRlIGFuZCBzeW5jaHJvbml6ZWQgZGVsaXZlcnkgKGUuZy4KKyAgKiAgaW5kaXZpZHVhbCBhdWRpbyBzYW1wbGVzIGRlbGl2ZXJlZCBhdCAxOTIga0h6KS4gVGhlIHF1YW50aXR5IGlzIDY0IGJpdCB0bwogICAqICBhY2NvbW1vZGF0ZSBhIGxhcmdlIGR5bmFtaWMgcmFuZ2UgKHNpZ25lZCAzMiBiaXQgdmFsdWVzIHdvdWxkIGFsbG93IG9ubHkgZm9yIHBsdXMKICAgKiAgb3IgbWludXMgMzUgbWludXRlcykuCiAgICoKLSAgKiAgSW1wbGVtZW50YXRpb25zIHdpdGggbGltaXRlZCBwcmVjaXNpb24gbWF5IGNvbnZlcnQgdGhlIHNpZ25lZCA2NCBiaXQgdmFsdWUgdG8gCi0gICogIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZSBpbnRlcm5hbGx5IGJ1dCByaXNrIGxvc3Mgb2YgcHJlY2lzaW9uLiAgCisgICogIEltcGxlbWVudGF0aW9ucyB3aXRoIGxpbWl0ZWQgcHJlY2lzaW9uIG1heSBjb252ZXJ0IHRoZSBzaWduZWQgNjQgYml0IHZhbHVlIHRvCisgICogIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZSBpbnRlcm5hbGx5IGJ1dCByaXNrIGxvc3Mgb2YgcHJlY2lzaW9uLgogICAqLwogI2lmbmRlZiBPTVhfU0tJUDY0QklUCiB0eXBlZGVmIE9NWF9TNjQgT01YX1RJQ0tTOwpAQCAtMzM2LDE3ICszMzYsMTcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgT01YX01BUktUWVBFCiB7Ci0gICAgT01YX0hBTkRMRVRZUEUgaE1hcmtUYXJnZXRDb21wb25lbnQ7ICAgLyoqPCBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgbWFyayBldmVudCB1cG9uIAorICAgIE9NWF9IQU5ETEVUWVBFIGhNYXJrVGFyZ2V0Q29tcG9uZW50OyAgIC8qKjwgVGhlIGNvbXBvbmVudCB0aGF0IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgbWFyayBldmVudCB1cG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIHRoZSBtYXJrLiAqLwotICAgIE9NWF9QVFIgcE1hcmtEYXRhOyAgIC8qKjwgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGggCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFyayBzZW50IG9uIGEgbWFyayBldmVudCB0byBkaXNhbWJpZ3VhdGUgCisgICAgT01YX1BUUiBwTWFya0RhdGE7ICAgLyoqPCBBcHBsaWNhdGlvbiBzcGVjaWZpYyBkYXRhIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmsgc2VudCBvbiBhIG1hcmsgZXZlbnQgdG8gZGlzYW1iaWd1YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1hcmsgZnJvbSBvdGhlcnMuICovCiB9IE9NWF9NQVJLVFlQRTsKIAogCiAvKiogT01YX05BVElWRV9ERVZJQ0VUWVBFIGlzIHVzZWQgdG8gbWFwIGEgT01YIHZpZGVvIHBvcnQgdG8gdGhlCi0gKiAgcGxhdGZvcm0gJiBvcGVyYXRpbmcgc3BlY2lmaWMgb2JqZWN0IHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkaXNwbGF5IAorICogIHBsYXRmb3JtICYgb3BlcmF0aW5nIHNwZWNpZmljIG9iamVjdCB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgZGlzcGxheQogICogIG9yIGNhbiBiZSB1c2VkIGJ5IGEgYXVkaW8gcG9ydCBmb3IgbmF0aXZlIGF1ZGlvIHJlbmRlcmluZyAqLwogdHlwZWRlZiBPTVhfUFRSIE9NWF9OQVRJVkVfREVWSUNFVFlQRTsKIApAQCAtMzU3LDcgKzM1Nyw3IEBACiAvKiogVGhlIE9NWF9WRVJTSU9OVFlQRSB1bmlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHZlcnNpb24gZm9yCiAgICAgYSBzdHJ1Y3R1cmUgb3IgY29tcG9uZW50LiAgRm9yIGEgY29tcG9uZW50LCB0aGUgdmVyc2lvbiBpcyBlbnRpcmVseQogICAgIHNwZWNpZmllZCBieSB0aGUgY29tcG9uZW50IHZlbmRvci4gIENvbXBvbmVudHMgZG9pbmcgdGhlIHNhbWUgZnVuY3Rpb24KLSAgICBmcm9tIGRpZmZlcmVudCB2ZW5kb3JzIG1heSBvciBtYXkgbm90IGhhdmUgdGhlIHNhbWUgdmVyc2lvbi4gIEZvciAKKyAgICBmcm9tIGRpZmZlcmVudCB2ZW5kb3JzIG1heSBvciBtYXkgbm90IGhhdmUgdGhlIHNhbWUgdmVyc2lvbi4gIEZvcgogICAgIHN0cnVjdHVyZXMsIHRoZSB2ZXJzaW9uIHNoYWxsIGJlIHNldCBieSB0aGUgZW50aXR5IHRoYXQgYWxsb2NhdGVzIHRoZQogICAgIHN0cnVjdHVyZS4gIEZvciBzdHJ1Y3R1cmVzIHNwZWNpZmllZCBpbiB0aGUgT01YIDEuMSBzcGVjaWZpY2F0aW9uLCB0aGUKICAgICB2YWx1ZSBvZiB0aGUgdmVyc2lvbiBzaGFsbCBiZSBzZXQgdG8gMS4xLjAuMCBpbiBhbGwgY2FzZXMuICBBY2Nlc3MgdG8gdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1ZpZGVvLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1ZpZGVvLmgKaW5kZXggODk0MjVlMC4uZGVjYzQxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9WaWRlby5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfVmlkZW8uaApAQCAtMTYsMzEgKzE2LDMxIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwogCi0vKiogCisvKioKICAqICBAZmlsZSBPTVhfVmlkZW8uaCAtIE9wZW5NYXggSUwgdmVyc2lvbiAxLjEuMgotICogIFRoZSBzdHJ1Y3R1cmVzIGlzIG5lZWRlZCBieSBWaWRlbyBjb21wb25lbnRzIHRvIGV4Y2hhbmdlIHBhcmFtZXRlcnMgCisgKiAgVGhlIHN0cnVjdHVyZXMgaXMgbmVlZGVkIGJ5IFZpZGVvIGNvbXBvbmVudHMgdG8gZXhjaGFuZ2UgcGFyYW1ldGVycwogICogIGFuZCBjb25maWd1cmF0aW9uIGRhdGEgd2l0aCBPTVggY29tcG9uZW50cy4KICAqLwogI2lmbmRlZiBPTVhfVmlkZW9faApAQCAtNjAsMTkgKzYwLDE5IEBACiAvKioKICAqIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKICAqIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAotICogZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCisgKiBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseQogICovCiAKICNpbmNsdWRlIDxPTVhfSVZDb21tb24uaD4KIAogCiAvKioKLSAqIEVudW1lcmF0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSBwb3NzaWJsZSB2aWRlbyBjb21wcmVzc2lvbiBjb2RpbmdzLiAgCi0gKiBOT1RFOiAgVGhpcyBlc3NlbnRpYWxseSByZWZlcnMgdG8gZmlsZSBleHRlbnNpb25zLiBJZiB0aGUgY29kaW5nIGlzIAotICogICAgICAgIGJlaW5nIHVzZWQgdG8gc3BlY2lmeSB0aGUgRU5DT0RFIHR5cGUsIHRoZW4gYWRkaXRpb25hbCB3b3JrIAotICogICAgICAgIG11c3QgYmUgZG9uZSB0byBjb25maWd1cmUgdGhlIGV4YWN0IGZsYXZvciBvZiB0aGUgY29tcHJlc3Npb24gCi0gKiAgICAgICAgdG8gYmUgdXNlZC4gIEZvciBkZWNvZGUgY2FzZXMgd2hlcmUgdGhlIHVzZXIgYXBwbGljYXRpb24gY2FuIAotICogICAgICAgIG5vdCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gTVBFRy00IGFuZCBILjI2NCBiaXQgc3RyZWFtcywgaXQgaXMgCisgKiBFbnVtZXJhdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgcG9zc2libGUgdmlkZW8gY29tcHJlc3Npb24gY29kaW5ncy4KKyAqIE5PVEU6ICBUaGlzIGVzc2VudGlhbGx5IHJlZmVycyB0byBmaWxlIGV4dGVuc2lvbnMuIElmIHRoZSBjb2RpbmcgaXMKKyAqICAgICAgICBiZWluZyB1c2VkIHRvIHNwZWNpZnkgdGhlIEVOQ09ERSB0eXBlLCB0aGVuIGFkZGl0aW9uYWwgd29yaworICogICAgICAgIG11c3QgYmUgZG9uZSB0byBjb25maWd1cmUgdGhlIGV4YWN0IGZsYXZvciBvZiB0aGUgY29tcHJlc3Npb24KKyAqICAgICAgICB0byBiZSB1c2VkLiAgRm9yIGRlY29kZSBjYXNlcyB3aGVyZSB0aGUgdXNlciBhcHBsaWNhdGlvbiBjYW4KKyAqICAgICAgICBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIE1QRUctNCBhbmQgSC4yNjQgYml0IHN0cmVhbXMsIGl0IGlzCiAgKiAgICAgICAgdXAgdG8gdGhlIGNvZGVjIHRvIGhhbmRsZSB0aGlzLgogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX0NPRElOR1RZUEUgewpAQCAtODgsNTggKzg4LDU4IEBACiAgICAgT01YX1ZJREVPX0NvZGluZ1ZQOCwgICAgICAgIC8qKjwgR29vZ2xlIFZQOCwgZm9ybWVybHkga25vd24gYXMgT24yIFZQOCAqLwogICAgIE9NWF9WSURFT19Db2RpbmdWUDksICAgICAgICAvKio8IEdvb2dsZSBWUDkgKi8KICAgICBPTVhfVklERU9fQ29kaW5nSEVWQywgICAgICAgLyoqPCBJVFUgSC4yNjUvSEVWQyAqLwotICAgIE9NWF9WSURFT19Db2RpbmdLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0NvZGluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19Db2RpbmdWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19Db2RpbmdNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19DT0RJTkdUWVBFOwogCiAKIC8qKgotICogRGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBkZWZpbmUgYSB2aWRlbyBwYXRoLiAgVGhlIG51bWJlciBvZiBWaWRlbyBwYXRocyBmb3IgCi0gKiBpbnB1dCBhbmQgb3V0cHV0IHdpbGwgdmFyeSBieSB0eXBlIG9mIHRoZSBWaWRlbyBjb21wb25lbnQuICAKLSAqIAorICogRGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBkZWZpbmUgYSB2aWRlbyBwYXRoLiAgVGhlIG51bWJlciBvZiBWaWRlbyBwYXRocyBmb3IKKyAqIGlucHV0IGFuZCBvdXRwdXQgd2lsbCB2YXJ5IGJ5IHR5cGUgb2YgdGhlIFZpZGVvIGNvbXBvbmVudC4KKyAqCiAgKiAgICBJbnB1dCAoYWthIFNvdXJjZSkgOiB6ZXJvIElucHV0cywgb25lIE91dHB1dCwKICAqICAgIFNwbGl0dGVyICAgICAgICAgICA6IG9uZSBJbnB1dCwgMiBvciBtb3JlIE91dHB1dHMsCiAgKiAgICBQcm9jZXNzaW5nIEVsZW1lbnQgOiBvbmUgSW5wdXQsIG9uZSBvdXRwdXQsCiAgKiAgICBNaXhlciAgICAgICAgICAgICAgOiAyIG9yIG1vcmUgaW5wdXRzLCBvbmUgb3V0cHV0LAogICogICAgT3V0cHV0IChha2EgU2luaykgIDogb25lIElucHV0LCB6ZXJvIG91dHB1dHMuCi0gKiAKLSAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIAotICogbmVjZXNzYXJ5IGZvciB0aGUgY29tcGxpYW50IGNvbXBvbmVudCB0byBzZXR1cCBhbiBpbnB1dCBvciBhbiBvdXRwdXQgdmlkZW8gCi0gKiBwYXRoLiAgSWYgYWRkaXRpb25hbCB2ZW5kb3Igc3BlY2lmaWMgZGF0YSBpcyByZXF1aXJlZCwgaXQgc2hvdWxkIGJlIAotICogdHJhbnNtaXR0ZWQgdG8gdGhlIGNvbXBvbmVudCB1c2luZyB0aGUgQ3VzdG9tQ29tbWFuZCBmdW5jdGlvbi4gIENvbXBsaWFudCAKLSAqIGNvbXBvbmVudHMgd2lsbCBwcmVwb3B1bGF0ZSB0aGlzIHN0cnVjdHVyZSB3aXRoIG9wdGltYWwgdmFsdWVzIGR1cmluZyB0aGUgCisgKgorICogVGhlIFBvcnREZWZpbml0aW9uIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlZmluZSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMKKyAqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IHZpZGVvCisgKiBwYXRoLiAgSWYgYWRkaXRpb25hbCB2ZW5kb3Igc3BlY2lmaWMgZGF0YSBpcyByZXF1aXJlZCwgaXQgc2hvdWxkIGJlCisgKiB0cmFuc21pdHRlZCB0byB0aGUgY29tcG9uZW50IHVzaW5nIHRoZSBDdXN0b21Db21tYW5kIGZ1bmN0aW9uLiAgQ29tcGxpYW50CisgKiBjb21wb25lbnRzIHdpbGwgcHJlcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgd2l0aCBvcHRpbWFsIHZhbHVlcyBkdXJpbmcgdGhlCiAgKiBHZXREZWZhdWx0SW5pdFBhcmFtcyBjb21tYW5kLgogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIGNNSU1FVHlwZSAgICAgICAgICAgICA6IE1JTUUgdHlwZSBvZiBkYXRhIGZvciB0aGUgcG9ydAotICogIHBOYXRpdmVSZW5kZXIgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSBkaXNwbGF5IGlmIGEgCisgKiAgcE5hdGl2ZVJlbmRlciAgICAgICAgIDogUGxhdGZvcm0gc3BlY2lmaWMgcmVmZXJlbmNlIGZvciBhIGRpc3BsYXkgaWYgYQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmMsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDAKLSAqICBuRnJhbWVXaWR0aCAgICAgICAgICAgOiBXaWR0aCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgCisgKiAgbkZyYW1lV2lkdGggICAgICAgICAgIDogV2lkdGggb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkIGZvcm1hdCBpcyB1c2VkLiAgVXNlIDAgZm9yIHVua25vd24sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgY2FyZSBvciB2YXJpYWJsZQotICogIG5GcmFtZUhlaWdodCAgICAgICAgICA6IEhlaWdodCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgCisgKiAgbkZyYW1lSGVpZ2h0ICAgICAgICAgIDogSGVpZ2h0IG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gY2hhbm5lbCBpZgogICogICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gVXNlIDAgZm9yIHVua25vd24sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgY2FyZSBvciB2YXJpYWJsZQotICogIG5TdHJpZGUgICAgICAgICAgICAgICA6IE51bWJlciBvZiBieXRlcyBwZXIgc3BhbiBvZiBhbiBpbWFnZSAKKyAqICBuU3RyaWRlICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgYnl0ZXMgcGVyIHNwYW4gb2YgYW4gaW1hZ2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBnZXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHNwYW4gTiB0byBzcGFuIE4rMSwgd2hlcmUgbmVnYXRpdmUgc3RyaWRlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoZSBpbWFnZSBpcyBib3R0b20gdXAKICAqICBuU2xpY2VIZWlnaHQgICAgICAgICAgOiBIZWlnaHQgdXNlZCB3aGVuIGVuY29kaW5nIGluIHNsaWNlcwotICogIG5CaXRyYXRlICAgICAgICAgICAgICA6IEJpdCByYXRlIG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gY2hhbm5lbCBpZiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkIGZvcm1hdCBpcyB1c2VkLiBVc2UgMCBmb3IgdW5rbm93biwgCisgKiAgbkJpdHJhdGUgICAgICAgICAgICAgIDogQml0IHJhdGUgb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gVXNlIDAgZm9yIHVua25vd24sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgY2FyZSBvciB2YXJpYWJsZQotICogIHhGcmFtZXJhdGUgICAgICAgICAgICA6IEZyYW1lIHJhdGUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmIHVuY29tcHJlc3NlZCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgaXMgdXNlZC4gVXNlIDAgZm9yIHVua25vd24sIGRvbid0IGNhcmUgb3IgCisgKiAgeEZyYW1lcmF0ZSAgICAgICAgICAgIDogRnJhbWUgcmF0ZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgdW5jb21wcmVzc2VkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciB1bmtub3duLCBkb24ndCBjYXJlIG9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuICBVbml0cyBhcmUgUTE2IGZyYW1lcyBwZXIgc2Vjb25kLgotICogIGJGbGFnRXJyb3JDb25jZWFsbWVudCA6IFR1cm5zIG9uIGVycm9yIGNvbmNlYWxtZW50IGlmIGl0IGlzIHN1cHBvcnRlZCBieSAKKyAqICBiRmxhZ0Vycm9yQ29uY2VhbG1lbnQgOiBUdXJucyBvbiBlcnJvciBjb25jZWFsbWVudCBpZiBpdCBpcyBzdXBwb3J0ZWQgYnkKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgT01YIGNvbXBvbmVudAotICogIGVDb21wcmVzc2lvbkZvcm1hdCAgICA6IENvbXByZXNzaW9uIGZvcm1hdCB1c2VkIGluIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4gV2hlbiBPTVhfVklERU9fQ29kaW5nVW51c2VkIGlzIAorICogIGVDb21wcmVzc2lvbkZvcm1hdCAgICA6IENvbXByZXNzaW9uIGZvcm1hdCB1c2VkIGluIHRoaXMgaW5zdGFuY2Ugb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LiBXaGVuIE9NWF9WSURFT19Db2RpbmdVbnVzZWQgaXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGVDb2xvckZvcm1hdCBpcyB1c2VkCiAgKiAgZUNvbG9yRm9ybWF0IDogRGVjb21wcmVzc2VkIGZvcm1hdCB1c2VkIGJ5IHRoaXMgY29tcG9uZW50Ci0gKiAgcE5hdGl2ZVdpbmRvdyA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSB3aW5kb3cgb2JqZWN0IGlmIGEgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBzaW5rICwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMHgwLiAKKyAqICBwTmF0aXZlV2luZG93IDogUGxhdGZvcm0gc3BlY2lmaWMgcmVmZXJlbmNlIGZvciBhIHdpbmRvdyBvYmplY3QgaWYgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgc2luayAsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDB4MC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BPUlRERUZJTklUSU9OVFlQRSB7CiAgICAgT01YX1NUUklORyBjTUlNRVR5cGU7CkBAIC0xNTYsMTkgKzE1NiwxOSBAQAogICAgIE9NWF9OQVRJVkVfV0lORE9XVFlQRSBwTmF0aXZlV2luZG93OwogfSBPTVhfVklERU9fUE9SVERFRklOSVRJT05UWVBFOwogCi0vKiogIAotICogUG9ydCBmb3JtYXQgcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnVtZXJhdGUgdGhlIHZhcmlvdXMgCisvKioKKyAqIFBvcnQgZm9ybWF0IHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW51bWVyYXRlIHRoZSB2YXJpb3VzCiAgKiBkYXRhIGlucHV0L291dHB1dCBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgotICogCisgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldAotICogIG5JbmRleCAgICAgICAgICAgICA6IEluZGljYXRlcyB0aGUgZW51bWVyYXRpb24gaW5kZXggZm9yIHRoZSBmb3JtYXQgZnJvbSAKKyAqICBuSW5kZXggICAgICAgICAgICAgOiBJbmRpY2F0ZXMgdGhlIGVudW1lcmF0aW9uIGluZGV4IGZvciB0aGUgZm9ybWF0IGZyb20KICAqICAgICAgICAgICAgICAgICAgICAgICAweDAgdG8gTi0xCi0gKiAgZUNvbXByZXNzaW9uRm9ybWF0IDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LiBXaGVuIE9NWF9WSURFT19Db2RpbmdVbnVzZWQgaXMgc3BlY2lmaWVkLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICBlQ29sb3JGb3JtYXQgaXMgdXNlZCAKKyAqICBlQ29tcHJlc3Npb25Gb3JtYXQgOiBDb21wcmVzc2lvbiBmb3JtYXQgdXNlZCBpbiB0aGlzIGluc3RhbmNlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4gV2hlbiBPTVhfVklERU9fQ29kaW5nVW51c2VkIGlzIHNwZWNpZmllZCwKKyAqICAgICAgICAgICAgICAgICAgICAgICBlQ29sb3JGb3JtYXQgaXMgdXNlZAogICogIGVDb2xvckZvcm1hdCAgICAgICA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAogICogIHhGcmFtZVJhdGUgICAgICAgICA6IEluZGljYXRlcyB0aGUgdmlkZW8gZnJhbWUgcmF0ZSBpbiBRMTYgZm9ybWF0CiAgKi8KQEAgLTE3NywxNCArMTc3LDE0IEBACiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICBPTVhfVTMyIG5JbmRleDsKLSAgICBPTVhfVklERU9fQ09ESU5HVFlQRSBlQ29tcHJlc3Npb25Gb3JtYXQ7IAorICAgIE9NWF9WSURFT19DT0RJTkdUWVBFIGVDb21wcmVzc2lvbkZvcm1hdDsKICAgICBPTVhfQ09MT1JfRk9STUFUVFlQRSBlQ29sb3JGb3JtYXQ7CiAgICAgT01YX1UzMiB4RnJhbWVyYXRlOwogfSBPTVhfVklERU9fUEFSQU1fUE9SVEZPUk1BVFRZUEU7CiAKIAogLyoqCi0gKiBUaGlzIGlzIGEgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyB2aWRlbyBjb21wcmVzc2lvbiBxdWFudGl6YXRpb24gCisgKiBUaGlzIGlzIGEgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyB2aWRlbyBjb21wcmVzc2lvbiBxdWFudGl6YXRpb24KICAqIHBhcmFtZXRlciB2YWx1ZXMuICBDb2RlY3MgbWF5IHN1cHBvcnQgZGlmZmVyZW50IFFQIHZhbHVlcyBmb3IgZGlmZmVyZW50CiAgKiBmcmFtZSB0eXBlcy4KICAqCkBAIC0xOTQsMTAgKzE5NCwxMCBAQAogICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogICogIG5RcEkgICAgICAgOiBRUCB2YWx1ZSB0byB1c2UgZm9yIGluZGV4IGZyYW1lcwogICogIG5RcFAgICAgICAgOiBRUCB2YWx1ZSB0byB1c2UgZm9yIFAgZnJhbWVzCi0gKiAgblFwQiAgICAgICA6IFFQIHZhbHVlcyB0byB1c2UgZm9yIGJpZGlyZWN0aW9uYWwgZnJhbWVzIAorICogIG5RcEIgICAgICAgOiBRUCB2YWx1ZXMgdG8gdXNlIGZvciBiaWRpcmVjdGlvbmFsIGZyYW1lcwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fUVVBTlRJWkFUSU9OVFlQRSB7Ci0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TaXplOwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICAgT01YX1UzMiBuUXBJOwpAQCAtMjA2LDMyICsyMDYsMzIgQEAKIH0gT01YX1ZJREVPX1BBUkFNX1FVQU5USVpBVElPTlRZUEU7CiAKIAotLyoqIAotICogU3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uIG9mIHZpZGVvIGZhc3QgdXBkYXRlIHBhcmFtZXRlcnMuIAotICogIAorLyoqCisgKiBTdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyYXRpb24gb2YgdmlkZW8gZmFzdCB1cGRhdGUgcGFyYW1ldGVycy4KKyAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mbyAKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvCiAgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgYkVuYWJsZVZGVSA6IEVuYWJsZS9EaXNhYmxlIHZpZGVvIGZhc3QgdXBkYXRlCiAgKiAgbkZpcnN0R09CICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBtYWNyb2Jsb2NrIHJvdwogICogIG5GaXJzdE1CICAgOiBzcGVjaWZpZXMgdGhlIGZpcnN0IE1CIHJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgZmlyc3QgR09CCi0gKiAgbk51bU1CcyAgICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIE1CcyB0byBiZSByZWZyZXNoZWQgZnJvbSBuRmlyc3RHT0IgCisgKiAgbk51bU1CcyAgICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIE1CcyB0byBiZSByZWZyZXNoZWQgZnJvbSBuRmlyc3RHT0IKICAqICAgICAgICAgICAgICAgYW5kIG5GaXJzdE1CCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9WSURFT0ZBU1RVUERBVEVUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAKLSAgICBPTVhfQk9PTCBiRW5hYmxlVkZVOyAgICAgIAotICAgIE9NWF9VMzIgbkZpcnN0R09COyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVTMyIG5GaXJzdE1COyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVTMyIG5OdW1NQnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfQk9PTCBiRW5hYmxlVkZVOworICAgIE9NWF9VMzIgbkZpcnN0R09COworICAgIE9NWF9VMzIgbkZpcnN0TUI7CisgICAgT01YX1UzMiBuTnVtTUJzOwogfSBPTVhfVklERU9fUEFSQU1fVklERU9GQVNUVVBEQVRFVFlQRTsKIAogCi0vKiogCi0gKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBiaXRyYXRlIGNvbnRyb2wgdHlwZXMgCisvKioKKyAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIGJpdHJhdGUgY29udHJvbCB0eXBlcwogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX0NPTlRST0xSQVRFVFlQRSB7CiAgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlRGlzYWJsZSwKQEAgLTIzOSwxNCArMjM5LDE0IEBACiAgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlQ29uc3RhbnQsCiAgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmFyaWFibGVTa2lwRnJhbWVzLAogICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZUNvbnN0YW50U2tpcEZyYW1lcywKLSAgICBPTVhfVmlkZW9fQ29udHJvbFJhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVmlkZW9fQ29udHJvbFJhdGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19DT05UUk9MUkFURVRZUEU7CiAKIAotLyoqIAotICogU3RydWN0dXJlIGZvciBjb25maWd1cmluZyBiaXRyYXRlIG1vZGUgb2YgYSBjb2RlYy4gCisvKioKKyAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgYml0cmF0ZSBtb2RlIG9mIGEgY29kZWMuCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3QgaW4gYnl0ZXMKQEAgLTI1NiwyMyArMjU2LDIzIEBACiAgKiAgblRhcmdldEJpdHJhdGUgOiBUYXJnZXQgYml0cmF0ZSB0byBlbmNvZGUgd2l0aAogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fQklUUkFURVRZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAgICAgCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgZUNvbnRyb2xSYXRlOyAKLSAgICBPTVhfVTMyIG5UYXJnZXRCaXRyYXRlOyAgICAgICAgICAgICAgICAgCisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgZUNvbnRyb2xSYXRlOworICAgIE9NWF9VMzIgblRhcmdldEJpdHJhdGU7CiB9IE9NWF9WSURFT19QQVJBTV9CSVRSQVRFVFlQRTsKIAogCi0vKiogCi0gKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBtb3Rpb24gdmVjdG9yIChNVikgdHlwZXMgCisvKioKKyAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG1vdGlvbiB2ZWN0b3IgKE1WKSB0eXBlcwogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX01PVElPTlZFQ1RPUlRZUEUgewogICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JQaXhlbCwKICAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9ySGFsZlBlbCwKICAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yUXVhcnRlclBlbCwKICAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yRWlnaHRoUGVsLAotICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZpZGVvX01vdGlvblZlY3Rvcktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19NT1RJT05WRUNUT1JUWVBFOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAvKioKICAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgdGhlIG51bWJlciBvZiBtb3Rpb24gdmVjdG9ycyB1c2VkIGFzIHdlbGwKICAqIGFzIHRoZWlyIGFjY3VyYWN5LgotICogCisgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdCBpbiBieXRlcwogICogIG5WZXJzaW9uICAgICAgICAgOiBPTVggc3BlYyB2ZXJzaW9uIGluZm8KQEAgLTMwNCwzMiArMzA0LDMyIEBACiB9IE9NWF9WSURFT19QQVJBTV9NT1RJT05WRUNUT1JUWVBFOwogCiAKLS8qKiAKLSAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIG1ldGhvZHMgdG8gdXNlIGZvciBJbnRyYSBSZWZyZXNoIAorLyoqCisgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBtZXRob2RzIHRvIHVzZSBmb3IgSW50cmEgUmVmcmVzaAogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX0lOVFJBUkVGUkVTSFRZUEUgewogICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hDeWNsaWMsCiAgICAgT01YX1ZJREVPX0ludHJhUmVmcmVzaEFkYXB0aXZlLAogICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hCb3RoLAotICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0ludHJhUmVmcmVzaEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19JTlRSQVJFRlJFU0hUWVBFOwogCiAKIC8qKgotICogU3RydWN0dXJlIGZvciBjb25maWd1cmluZyBpbnRyYSByZWZyZXNoIG1vZGUgCi0gKiAKKyAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgaW50cmEgcmVmcmVzaCBtb2RlCisgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgZVJlZnJlc2hNb2RlIDogQ3ljbGljLCBBZGFwdGl2ZSwgb3IgQm90aAotICogIG5BaXJNQnMgICAgICA6IE51bWJlciBvZiBpbnRyYSBtYWNyb2Jsb2NrcyB0byByZWZyZXNoIGluIGEgZnJhbWUgd2hlbiAKKyAqICBuQWlyTUJzICAgICAgOiBOdW1iZXIgb2YgaW50cmEgbWFjcm9ibG9ja3MgdG8gcmVmcmVzaCBpbiBhIGZyYW1lIHdoZW4KICAqICAgICAgICAgICAgICAgICBBSVIgaXMgZW5hYmxlZAotICogIG5BaXJSZWYgICAgICA6IE51bWJlciBvZiB0aW1lcyBhIG1vdGlvbiBtYXJrZWQgbWFjcm9ibG9jayBoYXMgdG8gYmUgIAorICogIG5BaXJSZWYgICAgICA6IE51bWJlciBvZiB0aW1lcyBhIG1vdGlvbiBtYXJrZWQgbWFjcm9ibG9jayBoYXMgdG8gYmUKICAqICAgICAgICAgICAgICAgICBpbnRyYSBjb2RlZAotICogIG5DaXJNQnMgICAgICA6IE51bWJlciBvZiBjb25zZWN1dGl2ZSBtYWNyb2Jsb2NrcyB0byBiZSBjb2RlZCBhcyAiaW50cmEiICAKKyAqICBuQ2lyTUJzICAgICAgOiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgbWFjcm9ibG9ja3MgdG8gYmUgY29kZWQgYXMgImludHJhIgogICogICAgICAgICAgICAgICAgIHdoZW4gQ0lSIGlzIGVuYWJsZWQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX0lOVFJBUkVGUkVTSFRZUEUgewpAQCAtMzQ0LDE5ICszNDQsMTkgQEAKIAogCiAvKioKLSAqIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgdmFyaW91cyBlcnJvciBjb3JyZWN0aW9uIG1ldGhvZHMgZm9yIHZpZGVvIAorICogU3RydWN0dXJlIGZvciBlbmFibGluZyB2YXJpb3VzIGVycm9yIGNvcnJlY3Rpb24gbWV0aG9kcyBmb3IgdmlkZW8KICAqIGNvbXByZXNzaW9uLgogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAotICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gCisgKiAgblZlcnNpb24gICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCAgICAgICAgICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogICogIGJFbmFibGVIRUMgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgaGVhZGVyIGV4dGVuc2lvbiBjb2RlcyAoSEVDKQogICogIGJFbmFibGVSZXN5bmMgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgcmVzeW5jaHJvbml6YXRpb24gbWFya2VycwotICogIG5SZXN5bmNoTWFya2VyU3BhY2luZyAgIDogUmVzeW5jaCBtYXJrZXJzIGludGVydmFsIChpbiBiaXRzKSB0byBiZSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQgaW4gdGhlIHN0cmVhbSAKLSAqICBiRW5hYmxlRGF0YVBhcnRpdGlvbmluZyA6IEVuYWJsZS9kaXNhYmxlIGRhdGEgcGFydGl0aW9uaW5nIAotICogIGJFbmFibGVSVkxDICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgcmV2ZXJzaWJsZSB2YXJpYWJsZSBsZW5ndGggCisgKiAgblJlc3luY2hNYXJrZXJTcGFjaW5nICAgOiBSZXN5bmNoIG1hcmtlcnMgaW50ZXJ2YWwgKGluIGJpdHMpIHRvIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIGluIHRoZSBzdHJlYW0KKyAqICBiRW5hYmxlRGF0YVBhcnRpdGlvbmluZyA6IEVuYWJsZS9kaXNhYmxlIGRhdGEgcGFydGl0aW9uaW5nCisgKiAgYkVuYWJsZVJWTEMgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSByZXZlcnNpYmxlIHZhcmlhYmxlIGxlbmd0aAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9FUlJPUkNPUlJFQ1RJT05UWVBFIHsKQEAgLTM3MSwxMiArMzcxLDEyIEBACiB9IE9NWF9WSURFT19QQVJBTV9FUlJPUkNPUlJFQ1RJT05UWVBFOwogCiAKLS8qKiAKLSAqIENvbmZpZ3VyYXRpb24gb2YgdmFyaWFibGUgYmxvY2stc2l6ZSBtb3Rpb24gY29tcGVuc2F0aW9uIChWQlNNQykgCi0gKiAKKy8qKgorICogQ29uZmlndXJhdGlvbiBvZiB2YXJpYWJsZSBibG9jay1zaXplIG1vdGlvbiBjb21wZW5zYXRpb24gKFZCU01DKQorICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKLSAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKKyAqICBuVmVyc2lvbiAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogICogIGIxNngxNiAgICAgOiBFbmFibGUgaW50ZXIgYmxvY2sgc2VhcmNoIDE2eDE2CiAgKiAgYjE2eDggICAgICA6IEVuYWJsZSBpbnRlciBibG9jayBzZWFyY2ggMTZ4OApAQCAtMzg3LDExICszODcsMTEgQEAKICAqICBiNHg0ICAgICAgIDogRW5hYmxlIGludGVyIGJsb2NrIHNlYXJjaCA0eDQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1ZCU01DVFlQRSB7Ci0gICAgT01YX1UzMiBuU2l6ZTsgCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIAotICAgIE9NWF9CT09MIGIxNngxNjsgCi0gICAgT01YX0JPT0wgYjE2eDg7IAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfQk9PTCBiMTZ4MTY7CisgICAgT01YX0JPT0wgYjE2eDg7CiAgICAgT01YX0JPT0wgYjh4MTY7CiAgICAgT01YX0JPT0wgYjh4ODsKICAgICBPTVhfQk9PTCBiOHg0OwpAQCAtNDAwLDY3ICs0MDAsNjcgQEAKIH0gT01YX1ZJREVPX1BBUkFNX1ZCU01DVFlQRTsKIAogCi0vKiogCi0gKiBILjI2MyBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgCisvKioKKyAqIEguMjYzIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cwogICogcGVyZm9ybWFuY2UgYm91bmRzIGFuZCBkaWZmZXJlbnQgYW5uZXhlcy4KICAqCiAgKiBFTlVNUzoKLSAqICBCYXNlbGluZSAgICAgICAgICAgOiBCYXNlbGluZSBQcm9maWxlOiBILjI2MyAoVjEpLCBubyBvcHRpb25hbCBtb2RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBIMzIwIENvZGluZyAgICAgICAgOiBILjMyMCBDb2RpbmcgRWZmaWNpZW5jeSBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IAorICogIEJhc2VsaW5lICAgICAgICAgICA6IEJhc2VsaW5lIFByb2ZpbGU6IEguMjYzIChWMSksIG5vIG9wdGlvbmFsIG1vZGVzCisgKiAgSDMyMCBDb2RpbmcgICAgICAgIDogSC4zMjAgQ29kaW5nIEVmZmljaWVuY3kgQmFja3dhcmQgQ29tcGF0aWJpbGl0eQogICogICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGU6IEguMjYzKyAoVjIpLCBpbmNsdWRlcyBhbm5leGVzIEksIEosIEwuNAogICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBUCi0gKiAgQmFja3dhcmRDb21wYXRpYmxlIDogQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBQcm9maWxlOiBILjI2MyAoVjEpLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBhbm5leCBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgSVNXVjIgICAgICAgICAgICAgIDogSW50ZXJhY3RpdmUgU3RyZWFtaW5nIFdpcmVsZXNzIFByb2ZpbGU6IEguMjYzKyAKLSAqICAgICAgICAgICAgICAgICAgICAgICAoVjIpLCBpbmNsdWRlcyBhbm5leGVzIEksIEosIEsgYW5kIFQgICAgICAgICAgICAgICAgIAotICogIElTV1YzICAgICAgICAgICAgICA6IEludGVyYWN0aXZlIFN0cmVhbWluZyBXaXJlbGVzcyBQcm9maWxlOiBILjI2MysrICAKLSAqICAgICAgICAgICAgICAgICAgICAgICAoVjMpLCBpbmNsdWRlcyBwcm9maWxlIDMgYW5kIGFubmV4ZXMgViBhbmQgVy42LjMuOCAgIAotICogIEhpZ2hDb21wcmVzc2lvbiAgICA6IENvbnZlcnNhdGlvbmFsIEhpZ2ggQ29tcHJlc3Npb24gUHJvZmlsZTogSC4yNjMrKyAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgKFYzKSwgaW5jbHVkZXMgcHJvZmlsZXMgMSAmIDIgYW5kIGFubmV4ZXMgRCBhbmQgVSAgIAotICogIEludGVybmV0ICAgICAgICAgICA6IENvbnZlcnNhdGlvbmFsIEludGVybmV0IFByb2ZpbGU6IEguMjYzKysgKFYzKSwgIAotICogICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHByb2ZpbGUgNSBhbmQgYW5uZXggSyAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgSW50ZXJsYWNlICAgICAgICAgIDogQ29udmVyc2F0aW9uYWwgSW50ZXJsYWNlIFByb2ZpbGU6IEguMjYzKysgKFYzKSwgIAotICogICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHByb2ZpbGUgNSBhbmQgYW5uZXggVy42LjMuMTEgICAgICAgICAgICAgICAKLSAqICBIaWdoTGF0ZW5jeSAgICAgICAgOiBIaWdoIExhdGVuY3kgUHJvZmlsZTogSC4yNjMrKyAoVjMpLCBpbmNsdWRlcyAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSA2IGFuZCBhbm5leGVzIE8uMSBhbmQgUC41ICAgICAgICAgICAgICAgICAgICAgICAKKyAqICBCYWNrd2FyZENvbXBhdGlibGUgOiBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IFByb2ZpbGU6IEguMjYzIChWMSksCisgKiAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYW5uZXggRgorICogIElTV1YyICAgICAgICAgICAgICA6IEludGVyYWN0aXZlIFN0cmVhbWluZyBXaXJlbGVzcyBQcm9maWxlOiBILjI2MysKKyAqICAgICAgICAgICAgICAgICAgICAgICAoVjIpLCBpbmNsdWRlcyBhbm5leGVzIEksIEosIEsgYW5kIFQKKyAqICBJU1dWMyAgICAgICAgICAgICAgOiBJbnRlcmFjdGl2ZSBTdHJlYW1pbmcgV2lyZWxlc3MgUHJvZmlsZTogSC4yNjMrKworICogICAgICAgICAgICAgICAgICAgICAgIChWMyksIGluY2x1ZGVzIHByb2ZpbGUgMyBhbmQgYW5uZXhlcyBWIGFuZCBXLjYuMy44CisgKiAgSGlnaENvbXByZXNzaW9uICAgIDogQ29udmVyc2F0aW9uYWwgSGlnaCBDb21wcmVzc2lvbiBQcm9maWxlOiBILjI2MysrCisgKiAgICAgICAgICAgICAgICAgICAgICAgKFYzKSwgaW5jbHVkZXMgcHJvZmlsZXMgMSAmIDIgYW5kIGFubmV4ZXMgRCBhbmQgVQorICogIEludGVybmV0ICAgICAgICAgICA6IENvbnZlcnNhdGlvbmFsIEludGVybmV0IFByb2ZpbGU6IEguMjYzKysgKFYzKSwKKyAqICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBwcm9maWxlIDUgYW5kIGFubmV4IEsKKyAqICBJbnRlcmxhY2UgICAgICAgICAgOiBDb252ZXJzYXRpb25hbCBJbnRlcmxhY2UgUHJvZmlsZTogSC4yNjMrKyAoVjMpLAorICogICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHByb2ZpbGUgNSBhbmQgYW5uZXggVy42LjMuMTEKKyAqICBIaWdoTGF0ZW5jeSAgICAgICAgOiBIaWdoIExhdGVuY3kgUHJvZmlsZTogSC4yNjMrKyAoVjMpLCBpbmNsdWRlcworICogICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgNiBhbmQgYW5uZXhlcyBPLjEgYW5kIFAuNQogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX0gyNjNQUk9GSUxFVFlQRSB7Ci0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlQmFzZWxpbmUgICAgICAgICAgICA9IDB4MDEsICAgICAgICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVIMzIwQ29kaW5nICAgICAgICAgID0gMHgwMiwgICAgICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlQmFja3dhcmRDb21wYXRpYmxlICA9IDB4MDQsICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJU1dWMiAgICAgICAgICAgICAgID0gMHgwOCwgICAgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJU1dWMyAgICAgICAgICAgICAgID0gMHgxMCwgICAgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVIaWdoQ29tcHJlc3Npb24gICAgID0gMHgyMCwgICAgIAotICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUludGVybmV0ICAgICAgICAgICAgPSAweDQwLCAgICAgICAgICAgIAotICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUludGVybGFjZSAgICAgICAgICAgPSAweDgwLCAgICAgICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaExhdGVuY3kgICAgICAgICA9IDB4MTAwLCAgICAgICAgIAotICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVCYXNlbGluZSAgICAgICAgICAgID0gMHgwMSwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVIMzIwQ29kaW5nICAgICAgICAgID0gMHgwMiwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVCYWNrd2FyZENvbXBhdGlibGUgID0gMHgwNCwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJU1dWMiAgICAgICAgICAgICAgID0gMHgwOCwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJU1dWMyAgICAgICAgICAgICAgID0gMHgxMCwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVIaWdoQ29tcHJlc3Npb24gICAgID0gMHgyMCwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcm5ldCAgICAgICAgICAgID0gMHg0MCwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcmxhY2UgICAgICAgICAgID0gMHg4MCwKKyAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVIaWdoTGF0ZW5jeSAgICAgICAgID0gMHgxMDAsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVNYXggICAgICAgICAgICAgICAgID0gMHg3RkZGRkZGRiAgCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlTWF4ICAgICAgICAgICAgICAgICA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX0gyNjNQUk9GSUxFVFlQRTsKIAogCi0vKiogCi0gKiBILjI2MyBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZSBzaXplcywgCisvKioKKyAqIEguMjYzIGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lIHNpemVzLAogICogYml0IHJhdGVzLCBkZWNvZGVyIGZyYW1lIHJhdGVzLgogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgewotICAgIE9NWF9WSURFT19IMjYzTGV2ZWwxMCAgPSAweDAxLCAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDIwICA9IDB4MDIsICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDMwICA9IDB4MDQsICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDQwICA9IDB4MDgsICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDQ1ICA9IDB4MTAsICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDUwICA9IDB4MjAsICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDYwICA9IDB4NDAsICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNMZXZlbDcwICA9IDB4ODAsIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDEwICA9IDB4MDEsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDIwICA9IDB4MDIsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDMwICA9IDB4MDQsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDQwICA9IDB4MDgsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDQ1ICA9IDB4MTAsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDUwICA9IDB4MjAsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDYwICA9IDB4NDAsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbDcwICA9IDB4ODAsCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19IMjYzTGV2ZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9WSURFT19IMjYzTGV2ZWxNYXggPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fSDI2M0xldmVsTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fSDI2M0xFVkVMVFlQRTsKIAogCi0vKiogCi0gKiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZS4gVGhlc2UgdmFsdWVzIHNob3VsZCBiZSBPUidkIHRvIHNpZ25hbCBhbGwgCisvKioKKyAqIFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlLiBUaGVzZSB2YWx1ZXMgc2hvdWxkIGJlIE9SJ2QgdG8gc2lnbmFsIGFsbAogICogcGljdHVyZXMgdHlwZXMgd2hpY2ggYXJlIGFsbG93ZWQuCiAgKgogICogRU5VTVM6CkBAIC00NzgsMzYgKzQ3OCwzNiBAQAogICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZUVJICA9IDB4MTEsCiAgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlRVAgID0gMHgxMiwKICAgICBPTVhfVklERU9fUGljdHVyZVR5cGVTICAgPSAweDE0LAotICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fUGljdHVyZVR5cGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fUGljdHVyZVR5cGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX1BJQ1RVUkVUWVBFOwogCiAKLS8qKiAKLSAqIEguMjYzIFBhcmFtcyAKKy8qKgorICogSC4yNjMgUGFyYW1zCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKKyAqICBuVmVyc2lvbiAgICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAgKiAgblBvcnRJbmRleCAgICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBuUEZyYW1lcyAgICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgUCBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUKICAqICBuQkZyYW1lcyAgICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgQiBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUKICAqICBlUHJvZmlsZSAgICAgICAgICAgICAgICAgOiBILjI2MyBwcm9maWxlKHMpIHRvIHVzZQogICogIGVMZXZlbCAgICAgICAgICAgICAgICAgICA6IEguMjYzIGxldmVsKHMpIHRvIHVzZQotICogIGJQTFVTUFRZUEVBbGxvd2VkICAgICAgICA6IEluZGljYXRpbmcgdGhhdCBpdCBpcyBhbGxvd2VkIHRvIHVzZSBQTFVTUFRZUEUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpZmllZCBpbiB0aGUgMTk5OCB2ZXJzaW9uIG9mIEguMjYzKSB0byAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZSBjdXN0b20gcGljdHVyZSBzaXplcyBvciBjbG9jayAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY2llcyAKLSAqICBuQWxsb3dlZFBpY3R1cmVUeXBlcyAgICAgOiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZXMgYWxsb3dlZCBpbiB0aGUgCisgKiAgYlBMVVNQVFlQRUFsbG93ZWQgICAgICAgIDogSW5kaWNhdGluZyB0aGF0IGl0IGlzIGFsbG93ZWQgdG8gdXNlIFBMVVNQVFlQRQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGVjaWZpZWQgaW4gdGhlIDE5OTggdmVyc2lvbiBvZiBILjI2MykgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZSBjdXN0b20gcGljdHVyZSBzaXplcyBvciBjbG9jaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jaWVzCisgKiAgbkFsbG93ZWRQaWN0dXJlVHlwZXMgICAgIDogU3BlY2lmaWVzIHRoZSBwaWN0dXJlIHR5cGVzIGFsbG93ZWQgaW4gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c3RyZWFtCi0gKiAgYkZvcmNlUm91bmRpbmdUeXBlVG9aZXJvIDogdmFsdWUgb2YgdGhlIFJUWVBFIGJpdCAoYml0IDYgb2YgTVBQVFlQRSkgaXMgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnN0cmFpbmVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBjaGFuZ2UgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBSVFlQRSBiaXQgZm9yIGVhY2ggcmVmZXJlbmNlIAorICogIGJGb3JjZVJvdW5kaW5nVHlwZVRvWmVybyA6IHZhbHVlIG9mIHRoZSBSVFlQRSBiaXQgKGJpdCA2IG9mIE1QUFRZUEUpIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnN0cmFpbmVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBjaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIFJUWVBFIGJpdCBmb3IgZWFjaCByZWZlcmVuY2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0dXJlIGluIGVycm9yLWZyZWUgY29tbXVuaWNhdGlvbgotICogIG5QaWN0dXJlSGVhZGVyUmVwZXRpdGlvbiA6IFNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IG9mIHBpY3R1cmUgaGVhZGVyIAorICogIG5QaWN0dXJlSGVhZGVyUmVwZXRpdGlvbiA6IFNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IG9mIHBpY3R1cmUgaGVhZGVyCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbgotICogIG5HT0JIZWFkZXJJbnRlcnZhbCAgICAgICA6IFNwZWNpZmllcyB0aGUgaW50ZXJ2YWwgb2Ygbm9uLWVtcHR5IEdPQiAgCisgKiAgbkdPQkhlYWRlckludGVydmFsICAgICAgIDogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBvZiBub24tZW1wdHkgR09CCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyBpbiB1bml0cyBvZiBHT0JzCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9IMjYzVFlQRSB7CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICBPTVhfVTMyIG5QRnJhbWVzOwogICAgIE9NWF9VMzIgbkJGcmFtZXM7CiAgICAgT01YX1ZJREVPX0gyNjNQUk9GSUxFVFlQRSBlUHJvZmlsZTsKLQlPTVhfVklERU9fSDI2M0xFVkVMVFlQRSBlTGV2ZWw7CisgICAgT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgZUxldmVsOwogICAgIE9NWF9CT09MIGJQTFVTUFRZUEVBbGxvd2VkOwogICAgIE9NWF9VMzIgbkFsbG93ZWRQaWN0dXJlVHlwZXM7CiAgICAgT01YX0JPT0wgYkZvcmNlUm91bmRpbmdUeXBlVG9aZXJvOwpAQCAtNTI2LDggKzUyNiw4IEBACiB9IE9NWF9WSURFT19QQVJBTV9IMjYzVFlQRTsKIAogCi0vKiogCi0gKiBNUEVHLTIgcHJvZmlsZSB0eXBlcywgZWFjaCBwcm9maWxlIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIAorLyoqCisgKiBNUEVHLTIgcHJvZmlsZSB0eXBlcywgZWFjaCBwcm9maWxlIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzCiAgKiBwZXJmb3JtYW5jZSBib3VuZHMgYW5kIGRpZmZlcmVudCBhbm5leGVzLgogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX01QRUcyUFJPRklMRVRZUEUgewpAQCAtNTM3LDI5ICs1MzcsMjkgQEAKICAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlU05SLCAgICAgICAgIC8qKjwgU05SIFByb2ZpbGUgKi8KICAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlU3BhdGlhbCwgICAgIC8qKjwgU3BhdGlhbCBQcm9maWxlICovCiAgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZUhpZ2gsICAgICAgICAvKio8IEhpZ2ggUHJvZmlsZSAqLwotICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVNYXggPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fTVBFRzJQUk9GSUxFVFlQRTsKIAogCi0vKiogCi0gKiBNUEVHLTIgbGV2ZWwgdHlwZXMsIGVhY2ggbGV2ZWwgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgZnJhbWUgCi0gKiBzaXplcywgYml0IHJhdGVzLCBkZWNvZGVyIGZyYW1lIHJhdGVzLiAgTm8gbmVlZCAKKy8qKgorICogTVBFRy0yIGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lCisgKiBzaXplcywgYml0IHJhdGVzLCBkZWNvZGVyIGZyYW1lIHJhdGVzLiAgTm8gbmVlZAogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX01QRUcyTEVWRUxUWVBFIHsKLSAgICBPTVhfVklERU9fTVBFRzJMZXZlbExMID0gMCwgIC8qKjwgTG93IExldmVsICovIAotICAgIE9NWF9WSURFT19NUEVHMkxldmVsTUwsICAgICAgLyoqPCBNYWluIExldmVsICovIAotICAgIE9NWF9WSURFT19NUEVHMkxldmVsSDE0LCAgICAgLyoqPCBIaWdoIDE0NDAgKi8gCi0gICAgT01YX1ZJREVPX01QRUcyTGV2ZWxITCwgICAgICAvKio8IEhpZ2ggTGV2ZWwgKi8gICAKLSAgICBPTVhfVklERU9fTVBFRzJMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fTVBFRzJMZXZlbExMID0gMCwgIC8qKjwgTG93IExldmVsICovCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxNTCwgICAgICAvKio8IE1haW4gTGV2ZWwgKi8KKyAgICBPTVhfVklERU9fTVBFRzJMZXZlbEgxNCwgICAgIC8qKjwgSGlnaCAxNDQwICovCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxITCwgICAgICAvKio8IEhpZ2ggTGV2ZWwgKi8KKyAgICBPTVhfVklERU9fTVBFRzJMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19NUEVHMkxldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fTVBFRzJMZXZlbE1heCA9IDB4N0ZGRkZGRkYgIAorICAgIE9NWF9WSURFT19NUEVHMkxldmVsTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fTVBFRzJMRVZFTFRZUEU7CiAKIAotLyoqIAotICogTVBFRy0yIHBhcmFtcyAKKy8qKgorICogTVBFRy0yIHBhcmFtcwogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKQEAgLTU3MSwyMCArNTcxLDIwIEBACiAgKiAgZUxldmVsICAgICA6IE1QRUctMiBsZXZlbHMocykgdG8gdXNlCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9NUEVHMlRZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TaXplOwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgCi0gICAgT01YX1UzMiBuUEZyYW1lczsgICAgICAgIAotICAgIE9NWF9VMzIgbkJGcmFtZXM7ICAgICAgICAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuUEZyYW1lczsKKyAgICBPTVhfVTMyIG5CRnJhbWVzOwogICAgIE9NWF9WSURFT19NUEVHMlBST0ZJTEVUWVBFIGVQcm9maWxlOwotCU9NWF9WSURFT19NUEVHMkxFVkVMVFlQRSBlTGV2ZWw7ICAgCisgICAgT01YX1ZJREVPX01QRUcyTEVWRUxUWVBFIGVMZXZlbDsKIH0gT01YX1ZJREVPX1BBUkFNX01QRUcyVFlQRTsKIAogCi0vKiogCi0gKiBNUEVHLTQgcHJvZmlsZSB0eXBlcywgZWFjaCBwcm9maWxlIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIAorLyoqCisgKiBNUEVHLTQgcHJvZmlsZSB0eXBlcywgZWFjaCBwcm9maWxlIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzCiAgKiBwZXJmb3JtYW5jZSBib3VuZHMgYW5kIGRpZmZlcmVudCBhbm5leGVzLgotICogCisgKgogICogRU5VTVM6CiAgKiAgLSBTaW1wbGUgUHJvZmlsZSwgTGV2ZWxzIDEtMwogICogIC0gU2ltcGxlIFNjYWxhYmxlIFByb2ZpbGUsIExldmVscyAxLTIKQEAgLTYwMyw0OCArNjAzLDQ4IEBACiAgKiAgLSBBZHZhbmNlZCBTY2FsYWJsZSBUZXh0dXJlLCBMZXZlbHMgMi0zCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfVklERU9fTVBFRzRQUk9GSUxFVFlQRSB7Ci0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZSAgICAgICAgICAgPSAweDAxLCAgICAgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZVNjYWxhYmxlICAgPSAweDAyLCAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQ29yZSAgICAgICAgICAgICA9IDB4MDQsICAgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTWFpbiAgICAgICAgICAgICA9IDB4MDgsICAgICAgICAgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVOYml0ICAgICAgICAgICAgID0gMHgxMCwgICAgICAgICAgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTY2FsYWJsZVRleHR1cmUgID0gMHgyMCwgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2ltcGxlRmFjZSAgICAgICA9IDB4NDAsICAgICAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2ltcGxlRkJBICAgICAgICA9IDB4ODAsICAgICAgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUJhc2ljQW5pbWF0ZWQgICAgPSAweDEwMCwgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVIeWJyaWQgICAgICAgICAgID0gMHgyMDAsICAgICAgICAgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkUmVhbFRpbWUgPSAweDQwMCwgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlU2NhbGFibGUgICAgID0gMHg4MDAsICAgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkQ29kaW5nICAgPSAweDEwMDAsICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZENvcmUgICAgID0gMHgyMDAwLCAgICAgIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGUgICAgICAgICAgID0gMHgwMSwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2ltcGxlU2NhbGFibGUgICA9IDB4MDIsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUNvcmUgICAgICAgICAgICAgPSAweDA0LAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVNYWluICAgICAgICAgICAgID0gMHgwOCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTmJpdCAgICAgICAgICAgICA9IDB4MTAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNjYWxhYmxlVGV4dHVyZSAgPSAweDIwLAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGVGYWNlICAgICAgID0gMHg0MCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2ltcGxlRkJBICAgICAgICA9IDB4ODAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUJhc2ljQW5pbWF0ZWQgICAgPSAweDEwMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlSHlicmlkICAgICAgICAgICA9IDB4MjAwLAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZFJlYWxUaW1lID0gMHg0MDAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUNvcmVTY2FsYWJsZSAgICAgPSAweDgwMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRDb2RpbmcgICA9IDB4MTAwMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRDb3JlICAgICA9IDB4MjAwMCwKICAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRTY2FsYWJsZSA9IDB4NDAwMCwKICAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRTaW1wbGUgICA9IDB4ODAwMCwKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTWF4ICAgICAgICAgICAgICA9IDB4N0ZGRkZGRkYgIAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVNYXggICAgICAgICAgICAgID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fTVBFRzRQUk9GSUxFVFlQRTsKIAogCi0vKiogCi0gKiBNUEVHLTQgbGV2ZWwgdHlwZXMsIGVhY2ggbGV2ZWwgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgZnJhbWUgCi0gKiBzaXplcywgYml0IHJhdGVzLCBkZWNvZGVyIGZyYW1lIHJhdGVzLiAgTm8gbmVlZCAKKy8qKgorICogTVBFRy00IGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lCisgKiBzaXplcywgYml0IHJhdGVzLCBkZWNvZGVyIGZyYW1lIHJhdGVzLiAgTm8gbmVlZAogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX01QRUc0TEVWRUxUWVBFIHsKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbDAgID0gMHgwMSwgICAvKio8IExldmVsIDAgKi8gICAKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbDBiID0gMHgwMiwgICAvKio8IExldmVsIDBiICovICAgCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWwxICA9IDB4MDQsICAgLyoqPCBMZXZlbCAxICovIAotICAgIE9NWF9WSURFT19NUEVHNExldmVsMiAgPSAweDA4LCAgIC8qKjwgTGV2ZWwgMiAqLyAKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbDMgID0gMHgxMCwgICAvKio8IExldmVsIDMgKi8gCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWw0ICA9IDB4MjAsICAgLyoqPCBMZXZlbCA0ICovICAKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbDRhID0gMHg0MCwgICAvKio8IExldmVsIDRhICovICAKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbDUgID0gMHg4MCwgICAvKio8IExldmVsIDUgKi8gIAotICAgIE9NWF9WSURFT19NUEVHNExldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHNExldmVsMCAgPSAweDAxLCAgIC8qKjwgTGV2ZWwgMCAqLworICAgIE9NWF9WSURFT19NUEVHNExldmVsMGIgPSAweDAyLCAgIC8qKjwgTGV2ZWwgMGIgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDEgID0gMHgwNCwgICAvKio8IExldmVsIDEgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDIgID0gMHgwOCwgICAvKio8IExldmVsIDIgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDMgID0gMHgxMCwgICAvKio8IExldmVsIDMgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDQgID0gMHgyMCwgICAvKio8IExldmVsIDQgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDRhID0gMHg0MCwgICAvKio8IExldmVsIDRhICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWw1ICA9IDB4ODAsICAgLyoqPCBMZXZlbCA1ICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fTVBFRzRMZXZlbFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWxNYXggPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX01QRUc0TEVWRUxUWVBFOwogCiAKLS8qKiAKKy8qKgogICogTVBFRy00IGNvbmZpZ3VyYXRpb24uICBUaGlzIHN0cnVjdHVyZSBoYW5kbGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwogICogd2hpY2ggYXJlIHNwZWNpZmljIHRvIE1QRUc0IGFsZ29yaXRobXMKICAqCkBAIC02NTIsMjQgKzY1MiwyNCBAQAogICogIG5TaXplICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAgKiAgblBvcnRJbmRleCAgICAgICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwotICogIG5TbGljZUhlYWRlclNwYWNpbmcgIDogTnVtYmVyIG9mIG1hY3JvYmxvY2tzIGJldHdlZW4gc2xpY2UgaGVhZGVyIChIMjYzKyAKKyAqICBuU2xpY2VIZWFkZXJTcGFjaW5nICA6IE51bWJlciBvZiBtYWNyb2Jsb2NrcyBiZXR3ZWVuIHNsaWNlIGhlYWRlciAoSDI2MysKICAqICAgICAgICAgICAgICAgICAgICAgICAgIEFubmV4IEspLiBQdXQgemVybyBpZiBub3QgdXNlZAogICogIGJTVkggICAgICAgICAgICAgICAgIDogRW5hYmxlIFNob3J0IFZpZGVvIEhlYWRlciBtb2RlCiAgKiAgYkdvdiAgICAgICAgICAgICAgICAgOiBGbGFnIHRvIGVuYWJsZSBHT1YKLSAqICBuUEZyYW1lcyAgICAgICAgICAgICA6IE51bWJlciBvZiBQIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZSAoYWxzbyBjYWxsZWQgCisgKiAgblBGcmFtZXMgICAgICAgICAgICAgOiBOdW1iZXIgb2YgUCBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUgKGFsc28gY2FsbGVkCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBHT1YgcGVyaW9kKQogICogIG5CRnJhbWVzICAgICAgICAgICAgIDogTnVtYmVyIG9mIEIgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lCiAgKiAgbklEQ1ZMQ1RocmVzaG9sZCAgICAgOiBWYWx1ZSBvZiBpbnRyYSBEQyBWTEMgdGhyZXNob2xkCiAgKiAgYkFDUHJlZCAgICAgICAgICAgICAgOiBGbGFnIHRvIHVzZSBhYyBwcmVkaWN0aW9uCiAgKiAgbk1heFBhY2tldFNpemUgICAgICAgOiBNYXhpbXVtIHNpemUgb2YgcGFja2V0IGluIGJ5dGVzLgotICogIG5UaW1lSW5jUmVzICAgICAgICAgIDogVXNlZCB0byBwYXNzIFZPUCB0aW1lIGluY3JlbWVudCByZXNvbHV0aW9uIGZvciBNUEVHNC4gCisgKiAgblRpbWVJbmNSZXMgICAgICAgICAgOiBVc2VkIHRvIHBhc3MgVk9QIHRpbWUgaW5jcmVtZW50IHJlc29sdXRpb24gZm9yIE1QRUc0LgogICogICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJwcmV0ZWQgYXMgZGVzY3JpYmVkIGluIE1QRUc0IHN0YW5kYXJkLgogICogIGVQcm9maWxlICAgICAgICAgICAgIDogTVBFRy00IHByb2ZpbGUocykgdG8gdXNlLgogICogIGVMZXZlbCAgICAgICAgICAgICAgIDogTVBFRy00IGxldmVsKHMpIHRvIHVzZS4KICAqICBuQWxsb3dlZFBpY3R1cmVUeXBlcyA6IFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlcyBhbGxvd2VkIGluIHRoZSBiaXRzdHJlYW0KICAqICBuSGVhZGVyRXh0ZW5zaW9uICAgICA6IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHZpZGVvIHBhY2tldAogICogICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyB3aXRoaW4gYSBWT1AKLSAqICBiUmV2ZXJzaWJsZVZMQyAgICAgICA6IFNwZWNpZmllcyB3aGV0aGVyIHJldmVyc2libGUgdmFyaWFibGUgbGVuZ3RoIGNvZGluZyAKKyAqICBiUmV2ZXJzaWJsZVZMQyAgICAgICA6IFNwZWNpZmllcyB3aGV0aGVyIHJldmVyc2libGUgdmFyaWFibGUgbGVuZ3RoIGNvZGluZwogICogICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW4gdXNlCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9NUEVHNFRZUEUgewpAQCAtNjkzLDIyICs2OTMsMjIgQEAKIH0gT01YX1ZJREVPX1BBUkFNX01QRUc0VFlQRTsKIAogCi0vKiogCi0gKiBXTVYgVmVyc2lvbnMgCisvKioKKyAqIFdNViBWZXJzaW9ucwogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX1dNVkZPUk1BVFRZUEUgewogICAgIE9NWF9WSURFT19XTVZGb3JtYXRVbnVzZWQgPSAweDAxLCAgIC8qKjwgRm9ybWF0IHVudXNlZCBvciB1bmtub3duICovCiAgICAgT01YX1ZJREVPX1dNVkZvcm1hdDcgICAgICA9IDB4MDIsICAgLyoqPCBXaW5kb3dzIE1lZGlhIFZpZGVvIGZvcm1hdCA3ICovCiAgICAgT01YX1ZJREVPX1dNVkZvcm1hdDggICAgICA9IDB4MDQsICAgLyoqPCBXaW5kb3dzIE1lZGlhIFZpZGVvIGZvcm1hdCA4ICovCiAgICAgT01YX1ZJREVPX1dNVkZvcm1hdDkgICAgICA9IDB4MDgsICAgLyoqPCBXaW5kb3dzIE1lZGlhIFZpZGVvIGZvcm1hdCA5ICovCi0gICAgT01YX1ZJREVPX1dNRkZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fV01GRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX1dNRkZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX1dNVkZvcm1hdE1heCAgICA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX1dNVkZPUk1BVFRZUEU7CiAKIAotLyoqIAotICogV01WIFBhcmFtcyAKKy8qKgorICogV01WIFBhcmFtcwogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKQEAgLTcxNywzMyArNzE3LDMzIEBACiAgKiAgZUZvcm1hdCAgICA6IFZlcnNpb24gb2YgV01WIHN0cmVhbSAvIGRhdGEKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1dNVlRZUEUgewotICAgIE9NWF9VMzIgblNpemU7IAorICAgIE9NWF9VMzIgblNpemU7CiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICBPTVhfVklERU9fV01WRk9STUFUVFlQRSBlRm9ybWF0OwogfSBPTVhfVklERU9fUEFSQU1fV01WVFlQRTsKIAogCi0vKiogCi0gKiBSZWFsIFZpZGVvIFZlcnNpb24gCisvKioKKyAqIFJlYWwgVmlkZW8gVmVyc2lvbgogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX1JWRk9STUFUVFlQRSB7CiAgICAgT01YX1ZJREVPX1JWRm9ybWF0VW51c2VkID0gMCwgLyoqPCBGb3JtYXQgdW51c2VkIG9yIHVua25vd24gKi8KICAgICBPTVhfVklERU9fUlZGb3JtYXQ4LCAgICAgICAgICAvKio8IFJlYWwgVmlkZW8gZm9ybWF0IDggKi8KICAgICBPTVhfVklERU9fUlZGb3JtYXQ5LCAgICAgICAgICAvKio8IFJlYWwgVmlkZW8gZm9ybWF0IDkgKi8KICAgICBPTVhfVklERU9fUlZGb3JtYXRHMiwgICAgICAgICAvKio8IFJlYWwgVmlkZW8gRm9ybWF0IEcyICovCi0gICAgT01YX1ZJREVPX1JWRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19SVkZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19SVkZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX1JWRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fUlZGT1JNQVRUWVBFOwogCiAKLS8qKiAKLSAqIFJlYWwgVmlkZW8gUGFyYW1zIAorLyoqCisgKiBSZWFsIFZpZGVvIFBhcmFtcwogICoKICAqIFNUVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKKyAqICBuVmVyc2lvbiAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAgKiAgblBvcnRJbmRleCAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBlRm9ybWF0ICAgICAgICAgICAgOiBWZXJzaW9uIG9mIFJWIHN0cmVhbSAvIGRhdGEKICAqICBuQml0c1BlclBpeGVsICAgICAgOiBCaXRzIHBlciBwaXhlbCBjb2RlZCBpbiB0aGUgZnJhbWUKQEAgLTc1NSwxMSArNzU1LDExIEBACiAgKiAgbk1heEVuY29kZUZyYW1lU2l6ZTogTWF4IGVuY29kZWQgZnJhbWUgc2l6ZQogICogIGJFbmFibGVQb3N0RmlsdGVyICA6IFR1cm4gb24vb2ZmIHBvc3QgZmlsdGVyCiAgKiAgYkVuYWJsZVRlbXBvcmFsSW50ZXJwb2xhdGlvbiA6IFR1cm4gb24vb2ZmIHRlbXBvcmFsIGludGVycG9sYXRpb24KLSAqICBiRW5hYmxlTGF0ZW5jeU1vZGUgOiBXaGVuIGVuYWJsZWQsIHRoZSBkZWNvZGVyIGRvZXMgbm90IGRpc3BsYXkgYSBkZWNvZGVkIAotICogICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIHVudGlsIGl0IGhhcyBkZXRlY3RlZCB0aGF0IG5vIGVuaGFuY2VtZW50IGxheWVyIAotICogIAkJCQkJIGZyYW1lcyBvciBkZXBlbmRlbnQgQiBmcmFtZXMgd2lsbCBiZSBjb21pbmcuIFRoaXMgCi0gKiAgCQkJCQkgZGV0ZWN0aW9uIHVzdWFsbHkgb2NjdXJzIHdoZW4gYSBzdWJzZXF1ZW50IG5vbi1CIAotICogIAkJCQkJIGZyYW1lIGlzIGVuY291bnRlcmVkIAorICogIGJFbmFibGVMYXRlbmN5TW9kZSA6IFdoZW4gZW5hYmxlZCwgdGhlIGRlY29kZXIgZG9lcyBub3QgZGlzcGxheSBhIGRlY29kZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSB1bnRpbCBpdCBoYXMgZGV0ZWN0ZWQgdGhhdCBubyBlbmhhbmNlbWVudCBsYXllcgorICogICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyBvciBkZXBlbmRlbnQgQiBmcmFtZXMgd2lsbCBiZSBjb21pbmcuIFRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3Rpb24gdXN1YWxseSBvY2N1cnMgd2hlbiBhIHN1YnNlcXVlbnQgbm9uLUIKKyAqICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBpcyBlbmNvdW50ZXJlZAogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fUlZUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOwpAQCAtNzc5LDggKzc3OSw4IEBACiB9IE9NWF9WSURFT19QQVJBTV9SVlRZUEU7CiAKIAotLyoqIAotICogQVZDIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyAKKy8qKgorICogQVZDIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cwogICogcGVyZm9ybWFuY2UgYm91bmRzIGFuZCBkaWZmZXJlbnQgYW5uZXhlcy4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19BVkNQUk9GSUxFVFlQRSB7CkBAIC03OTEsMTUgKzc5MSwxNSBAQAogICAgIE9NWF9WSURFT19BVkNQcm9maWxlSGlnaDEwICAgPSAweDEwLCAgIC8qKjwgSGlnaCAxMCBwcm9maWxlICovCiAgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoNDIyICA9IDB4MjAsICAgLyoqPCBIaWdoIDQ6MjoyIHByb2ZpbGUgKi8KICAgICBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2g0NDQgID0gMHg0MCwgICAvKio8IEhpZ2ggNDo0OjQgcHJvZmlsZSAqLwotICAgIE9NWF9WSURFT19BVkNQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19BVkNQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9WSURFT19BVkNQcm9maWxlTWF4ICAgICAgPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fQVZDUHJvZmlsZU1heCAgICAgID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fQVZDUFJPRklMRVRZUEU7CiAKIAotLyoqIAotICogQVZDIGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lIHNpemVzLCAKLSAqIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQgCisvKioKKyAqIEFWQyBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZSBzaXplcywKKyAqIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19BVkNMRVZFTFRZUEUgewogICAgIE9NWF9WSURFT19BVkNMZXZlbDEgICA9IDB4MDEsICAgICAvKio8IExldmVsIDEgKi8KQEAgLTgxOSwxNCArODE5LDE0IEBACiAgICAgT01YX1ZJREVPX0FWQ0xldmVsNSAgID0gMHg0MDAwLCAgIC8qKjwgTGV2ZWwgNSAqLwogICAgIE9NWF9WSURFT19BVkNMZXZlbDUxICA9IDB4ODAwMCwgICAvKio8IExldmVsIDUuMSAqLwogICAgIE9NWF9WSURFT19BVkNMZXZlbDUyICA9IDB4MTAwMDAsICAvKio8IExldmVsIDUuMiAqLwotICAgIE9NWF9WSURFT19BVkNMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fQVZDTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fQVZDTGV2ZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9WSURFT19BVkNMZXZlbE1heCA9IDB4N0ZGRkZGRkYgIAorICAgIE9NWF9WSURFT19BVkNMZXZlbE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX0FWQ0xFVkVMVFlQRTsKIAogCi0vKiogCi0gKiBBVkMgbG9vcCBmaWx0ZXIgbW9kZXMgCisvKioKKyAqIEFWQyBsb29wIGZpbHRlciBtb2RlcwogICoKICAqIE9NWF9WSURFT19BVkNMb29wRmlsdGVyRW5hYmxlICAgICAgICAgICAgICAgOiBFbmFibGUKICAqIE9NWF9WSURFT19BVkNMb29wRmlsdGVyRGlzYWJsZSAgICAgICAgICAgICAgOiBEaXNhYmxlCkBAIC04MzYsMjAgKzgzNiwyMCBAQAogICAgIE9NWF9WSURFT19BVkNMb29wRmlsdGVyRW5hYmxlID0gMCwKICAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlckRpc2FibGUsCiAgICAgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJEaXNhYmxlU2xpY2VCb3VuZGFyeSwKLSAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlcktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlcktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19BVkNMb29wRmlsdGVyVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlck1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX0FWQ0xPT1BGSUxURVJUWVBFOwogCiAKLS8qKiAKLSAqIEFWQyBwYXJhbXMgCisvKioKKyAqIEFWQyBwYXJhbXMKICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICAqICBuUG9ydEluZGV4ICAgICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KLSAqICBuU2xpY2VIZWFkZXJTcGFjaW5nICAgICAgIDogTnVtYmVyIG9mIG1hY3JvYmxvY2tzIGJldHdlZW4gc2xpY2UgaGVhZGVyLCBwdXQgIAorICogIG5TbGljZUhlYWRlclNwYWNpbmcgICAgICAgOiBOdW1iZXIgb2YgbWFjcm9ibG9ja3MgYmV0d2VlbiBzbGljZSBoZWFkZXIsIHB1dAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvIGlmIG5vdCB1c2VkCiAgKiAgblBGcmFtZXMgICAgICAgICAgICAgICAgICA6IE51bWJlciBvZiBQIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQogICogIG5CRnJhbWVzICAgICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgQiBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUKQEAgLTg2Miw4NSArODYyLDg1IEBACiAgKiAgblJlZklkeEZvcndhcmQgICAgICAgICAgICA6IFBpYyBwYXJhbSBzZXQgcmVmIGZyYW1lIGluZGV4IChpbmRleCBpbnRvIHJlZgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBidWZmZXIgb2YgZm9yd2FyZCBmcmFtZXMgbGlzdCksIEIgZnJhbWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydAotICogIGJFbmFibGVVRVAgICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSB1bmVxdWFsIGVycm9yIHByb3RlY3Rpb24uIFRoaXMgCisgKiAgYkVuYWJsZVVFUCAgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHVuZXF1YWwgZXJyb3IgcHJvdGVjdGlvbi4gVGhpcwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbmx5IHZhbGlkIG9mIGRhdGEgcGFydGl0aW9uaW5nIGlzIGVuYWJsZWQuCiAgKiAgYkVuYWJsZUZNTyAgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGZsZXhpYmxlIG1hY3JvYmxvY2sgb3JkZXJpbmcKICAqICBiRW5hYmxlQVNPICAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgYXJiaXRyYXJ5IHNsaWNlIG9yZGVyaW5nCiAgKiAgYkVuYWJsZVJTICAgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHNlbmRpbmcgb2YgcmVkdW5kYW50IHNsaWNlcwogICogIGVQcm9maWxlICAgICAgICAgICAgICAgICAgOiBBVkMgcHJvZmlsZShzKSB0byB1c2UKICAqICBlTGV2ZWwgICAgICAgICAgICAgICAgICAgIDogQVZDIGxldmVsKHMpIHRvIHVzZQotICogIG5BbGxvd2VkUGljdHVyZVR5cGVzICAgICAgOiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZXMgYWxsb3dlZCBpbiB0aGUgCisgKiAgbkFsbG93ZWRQaWN0dXJlVHlwZXMgICAgICA6IFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlcyBhbGxvd2VkIGluIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzdHJlYW0KLSAqICBiRnJhbWVNQnNPbmx5ICAgICAgICAgICAgIDogc3BlY2lmaWVzIHRoYXQgZXZlcnkgY29kZWQgcGljdHVyZSBvZiB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVkIHZpZGVvIHNlcXVlbmNlIGlzIGEgY29kZWQgZnJhbWUgCisgKiAgYkZyYW1lTUJzT25seSAgICAgICAgICAgICA6IHNwZWNpZmllcyB0aGF0IGV2ZXJ5IGNvZGVkIHBpY3R1cmUgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVkIHZpZGVvIHNlcXVlbmNlIGlzIGEgY29kZWQgZnJhbWUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyBvbmx5IGZyYW1lIG1hY3JvYmxvY2tzCi0gKiAgYk1CQUZGICAgICAgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHN3aXRjaGluZyBiZXR3ZWVuIGZyYW1lIGFuZCAKKyAqICBiTUJBRkYgICAgICAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgc3dpdGNoaW5nIGJldHdlZW4gZnJhbWUgYW5kCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIG1hY3JvYmxvY2tzIHdpdGhpbiBhIHBpY3R1cmUKLSAqICBiRW50cm9weUNvZGluZ0NBQkFDICAgICAgIDogRW50cm9weSBkZWNvZGluZyBtZXRob2QgdG8gYmUgYXBwbGllZCBmb3IgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXggZWxlbWVudHMgZm9yIHdoaWNoIHR3byBkZXNjcmlwdG9ycyBhcHBlYXIgCisgKiAgYkVudHJvcHlDb2RpbmdDQUJBQyAgICAgICA6IEVudHJvcHkgZGVjb2RpbmcgbWV0aG9kIHRvIGJlIGFwcGxpZWQgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXggZWxlbWVudHMgZm9yIHdoaWNoIHR3byBkZXNjcmlwdG9ycyBhcHBlYXIKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHN5bnRheCB0YWJsZXMKLSAqICBiV2VpZ2h0ZWRQUHJlZGljdGlvbiAgICAgIDogRW5hYmxlL2Rpc2FibGUgd2VpZ2h0ZWQgcHJlZGljdGlvbiBzaGFsbCBub3QgCisgKiAgYldlaWdodGVkUFByZWRpY3Rpb24gICAgICA6IEVuYWJsZS9kaXNhYmxlIHdlaWdodGVkIHByZWRpY3Rpb24gc2hhbGwgbm90CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGFwcGxpZWQgdG8gUCBhbmQgU1Agc2xpY2VzCi0gKiAgbldlaWdodGVkQmlwcmVkaWNpdG9uTW9kZSA6IERlZmF1bHQgd2VpZ2h0ZWQgcHJlZGljdGlvbiBpcyBhcHBsaWVkIHRvIEIgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlcyAKKyAqICBuV2VpZ2h0ZWRCaXByZWRpY2l0b25Nb2RlIDogRGVmYXVsdCB3ZWlnaHRlZCBwcmVkaWN0aW9uIGlzIGFwcGxpZWQgdG8gQgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZXMKICAqICBiY29uc3RJcHJlZCAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgaW50cmEgcHJlZGljdGlvbgotICogIGJEaXJlY3Q4eDhJbmZlcmVuY2UgICAgICAgOiBTcGVjaWZpZXMgdGhlIG1ldGhvZCB1c2VkIGluIHRoZSBkZXJpdmF0aW9uIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGZvciBsdW1hIG1vdGlvbiB2ZWN0b3JzIGZvciBCX1NraXAsIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCX0RpcmVjdF8xNngxNiBhbmQgQl9EaXJlY3RfOHg4IGFzIHNwZWNpZmllZCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDguNC4xLjIgb2YgdGhlIEFWQyBzcGVjIAorICogIGJEaXJlY3Q4eDhJbmZlcmVuY2UgICAgICAgOiBTcGVjaWZpZXMgdGhlIG1ldGhvZCB1c2VkIGluIHRoZSBkZXJpdmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgZm9yIGx1bWEgbW90aW9uIHZlY3RvcnMgZm9yIEJfU2tpcCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQl9EaXJlY3RfMTZ4MTYgYW5kIEJfRGlyZWN0Xzh4OCBhcyBzcGVjaWZpZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDguNC4xLjIgb2YgdGhlIEFWQyBzcGVjCiAgKiAgYkRpcmVjdFNwYXRpYWxUZW1wb3JhbCAgICA6IEZsYWcgaW5kaWNhdGluZyBzcGF0aWFsIG9yIHRlbXBvcmFsIGRpcmVjdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlIHVzZWQgaW4gQiBzbGljZSBjb2RpbmcgKHJlbGF0ZWQgdG8gCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJEaXJlY3Q4eDhJbmZlcmVuY2UpIC4gU3BhdGlhbCBkaXJlY3QgbW9kZSBpcyAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSB1c2VkIGluIEIgc2xpY2UgY29kaW5nIChyZWxhdGVkIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJEaXJlY3Q4eDhJbmZlcmVuY2UpIC4gU3BhdGlhbCBkaXJlY3QgbW9kZSBpcwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIGNvbW1vbiBhbmQgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LgogICogIG5DYWJhY0luaXRJZHggICAgICAgICAgICAgOiBJbmRleCB1c2VkIHRvIGluaXQgQ0FCQUMgY29udGV4dHMKICAqICBlTG9vcEZpbHRlck1vZGUgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgbG9vcCBmaWx0ZXIKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX0FWQ1RZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgIAotICAgIE9NWF9VMzIgblNsaWNlSGVhZGVyU3BhY2luZzsgIAotICAgIE9NWF9VMzIgblBGcmFtZXM7ICAgICAKLSAgICBPTVhfVTMyIG5CRnJhbWVzOyAgICAgCisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgblNsaWNlSGVhZGVyU3BhY2luZzsKKyAgICBPTVhfVTMyIG5QRnJhbWVzOworICAgIE9NWF9VMzIgbkJGcmFtZXM7CiAgICAgT01YX0JPT0wgYlVzZUhhZGFtYXJkOwotICAgIE9NWF9VMzIgblJlZkZyYW1lczsgIAotCU9NWF9VMzIgblJlZklkeDEwQWN0aXZlTWludXMxOwotCU9NWF9VMzIgblJlZklkeDExQWN0aXZlTWludXMxOwotICAgIE9NWF9CT09MIGJFbmFibGVVRVA7ICAKLSAgICBPTVhfQk9PTCBiRW5hYmxlRk1POyAgCi0gICAgT01YX0JPT0wgYkVuYWJsZUFTTzsgIAotICAgIE9NWF9CT09MIGJFbmFibGVSUzsgICAKKyAgICBPTVhfVTMyIG5SZWZGcmFtZXM7CisgICAgT01YX1UzMiBuUmVmSWR4MTBBY3RpdmVNaW51czE7CisgICAgT01YX1UzMiBuUmVmSWR4MTFBY3RpdmVNaW51czE7CisgICAgT01YX0JPT0wgYkVuYWJsZVVFUDsKKyAgICBPTVhfQk9PTCBiRW5hYmxlRk1POworICAgIE9NWF9CT09MIGJFbmFibGVBU087CisgICAgT01YX0JPT0wgYkVuYWJsZVJTOwogICAgIE9NWF9WSURFT19BVkNQUk9GSUxFVFlQRSBlUHJvZmlsZTsKLQlPTVhfVklERU9fQVZDTEVWRUxUWVBFIGVMZXZlbDsgCi0gICAgT01YX1UzMiBuQWxsb3dlZFBpY3R1cmVUeXBlczsgIAotCU9NWF9CT09MIGJGcmFtZU1Cc09ubHk7ICAgICAgICAJCQkJCQkJCQkKLSAgICBPTVhfQk9PTCBiTUJBRkY7ICAgICAgICAgICAgICAgCi0gICAgT01YX0JPT0wgYkVudHJvcHlDb2RpbmdDQUJBQzsgIAotICAgIE9NWF9CT09MIGJXZWlnaHRlZFBQcmVkaWN0aW9uOyAKLSAgICBPTVhfVTMyIG5XZWlnaHRlZEJpcHJlZGljaXRvbk1vZGU7IAorICAgIE9NWF9WSURFT19BVkNMRVZFTFRZUEUgZUxldmVsOworICAgIE9NWF9VMzIgbkFsbG93ZWRQaWN0dXJlVHlwZXM7CisgICAgT01YX0JPT0wgYkZyYW1lTUJzT25seTsKKyAgICBPTVhfQk9PTCBiTUJBRkY7CisgICAgT01YX0JPT0wgYkVudHJvcHlDb2RpbmdDQUJBQzsKKyAgICBPTVhfQk9PTCBiV2VpZ2h0ZWRQUHJlZGljdGlvbjsKKyAgICBPTVhfVTMyIG5XZWlnaHRlZEJpcHJlZGljaXRvbk1vZGU7CiAgICAgT01YX0JPT0wgYmNvbnN0SXByZWQgOwotICAgIE9NWF9CT09MIGJEaXJlY3Q4eDhJbmZlcmVuY2U7ICAKLQlPTVhfQk9PTCBiRGlyZWN0U3BhdGlhbFRlbXBvcmFsOwotCU9NWF9VMzIgbkNhYmFjSW5pdElkYzsKLQlPTVhfVklERU9fQVZDTE9PUEZJTFRFUlRZUEUgZUxvb3BGaWx0ZXJNb2RlOworICAgIE9NWF9CT09MIGJEaXJlY3Q4eDhJbmZlcmVuY2U7CisgICAgT01YX0JPT0wgYkRpcmVjdFNwYXRpYWxUZW1wb3JhbDsKKyAgICBPTVhfVTMyIG5DYWJhY0luaXRJZGM7CisgICAgT01YX1ZJREVPX0FWQ0xPT1BGSUxURVJUWVBFIGVMb29wRmlsdGVyTW9kZTsKIH0gT01YX1ZJREVPX1BBUkFNX0FWQ1RZUEU7CiAKIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9QUk9GSUxFTEVWRUxUWVBFIHsKLSAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAKLSAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAKLSAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAKLSAgIE9NWF9VMzIgZVByb2ZpbGU7ICAgICAgLyoqPCB0eXBlIGlzIE9NWF9WSURFT19BVkNQUk9GSUxFVFlQRSwgT01YX1ZJREVPX0gyNjNQUk9GSUxFVFlQRSwgCisgICBPTVhfVTMyIG5TaXplOworICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgT01YX1UzMiBlUHJvZmlsZTsgICAgICAvKio8IHR5cGUgaXMgT01YX1ZJREVPX0FWQ1BST0ZJTEVUWVBFLCBPTVhfVklERU9fSDI2M1BST0ZJTEVUWVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEUgZGVwZW5kaW5nIG9uIGNvbnRleHQgKi8KLSAgIE9NWF9VMzIgZUxldmVsOyAgICAgICAgLyoqPCB0eXBlIGlzIE9NWF9WSURFT19BVkNMRVZFTFRZUEUsIE9NWF9WSURFT19IMjYzTEVWRUxUWVBFLCAKKyAgIE9NWF9VMzIgZUxldmVsOyAgICAgICAgLyoqPCB0eXBlIGlzIE9NWF9WSURFT19BVkNMRVZFTFRZUEUsIE9NWF9WSURFT19IMjYzTEVWRUxUWVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEUgZGVwZW5kaW5nIG9uIGNvbnRleHQgKi8KICAgIE9NWF9VMzIgblByb2ZpbGVJbmRleDsgLyoqPCBVc2VkIHRvIHF1ZXJ5IGZvciBpbmRpdmlkdWFsIHByb2ZpbGUgc3VwcG9ydCBpbmZvcm1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9NWF9JbmRleFBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxRdWVyeVN1cHBvcnRlZCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYWxsIG90aGVyIGluZGljZXMgdGhpcyBwYXJhbWV0ZXIgaXMgdG8gYmUgaWdub3JlZC4gKi8KIH0gT01YX1ZJREVPX1BBUkFNX1BST0ZJTEVMRVZFTFRZUEU7CiAKLS8qKiAKLSAqIFN0cnVjdHVyZSBmb3IgZHluYW1pY2FsbHkgY29uZmlndXJpbmcgYml0cmF0ZSBtb2RlIG9mIGEgY29kZWMuIAorLyoqCisgKiBTdHJ1Y3R1cmUgZm9yIGR5bmFtaWNhbGx5IGNvbmZpZ3VyaW5nIGJpdHJhdGUgbW9kZSBvZiBhIGNvZGVjLgogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0IGluIGJ5dGVzCkBAIC05NDksMTggKzk0OSwxOCBAQAogICogIG5FbmNvZGVCaXRyYXRlIDogVGFyZ2V0IGF2ZXJhZ2UgYml0cmF0ZSB0byBiZSBnZW5lcmF0ZWQgaW4gYnBzCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19DT05GSUdfQklUUkFURVRZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAgICAgCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9VMzIgbkVuY29kZUJpdHJhdGU7ICAgICAgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX1UzMiBuRW5jb2RlQml0cmF0ZTsKIH0gT01YX1ZJREVPX0NPTkZJR19CSVRSQVRFVFlQRTsKIAotLyoqIAorLyoqCiAgKiBEZWZpbmVzIEVuY29kZXIgRnJhbWUgUmF0ZSBzZXR0aW5nCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwotICogIG5WZXJzaW9uICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAorICogIG5WZXJzaW9uICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAgKiAgblBvcnRJbmRleCAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgeEVuY29kZUZyYW1lcmF0ZSA6IEVuY29kaW5nIGZyYW1lcmF0ZSByZXByZXNlbnRlZCBpbiBRMTYgZm9ybWF0CiAgKi8KQEAgLTEwMDAsOCArMTAwMCw4IEBACiAgICAgT01YX1UzMiBuTWFjcm9ibG9ja3M7CiB9IE9NWF9QQVJBTV9NQUNST0JMT0NLU1RZUEU7CiAKLS8qKiAKLSAqIEFWQyBTbGljZSBNb2RlIG1vZGVzIAorLyoqCisgKiBBVkMgU2xpY2UgTW9kZSBtb2RlcwogICoKICAqIE9NWF9WSURFT19TTElDRU1PREVfQVZDRGVmYXVsdCAgIDogTm9ybWFsIGZyYW1lIGVuY29kaW5nLCBvbmUgc2xpY2UgcGVyIGZyYW1lCiAgKiBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ01CU2xpY2UgICA6IE5BTCBtb2RlLCBudW1iZXIgb2YgTUJzIHBlciBmcmFtZQpAQCAtMTAxMSwxMyArMTAxMSwxMyBAQAogICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDRGVmYXVsdCA9IDAsCiAgICAgT01YX1ZJREVPX1NMSUNFTU9ERV9BVkNNQlNsaWNlLAogICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDQnl0ZVNsaWNlLAotICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX1NMSUNFTU9ERV9BVkNWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDTGV2ZWxNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19BVkNTTElDRU1PREVUWVBFOwogCi0vKiogCi0gKiBBVkMgRk1PIFNsaWNlIE1vZGUgUGFyYW1zIAorLyoqCisgKiBBVkMgRk1PIFNsaWNlIE1vZGUgUGFyYW1zCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwpAQCAtMTAyOCw3ICsxMDI4LDcgQEAKICAqICBlU2xpY2VNb2RlIDogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHNsaWNlCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9BVkNTTElDRUZNTyB7Ci0gICAgT01YX1UzMiBuU2l6ZTsgCisgICAgT01YX1UzMiBuU2l6ZTsKICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgIE9NWF9VOCBuTnVtU2xpY2VHcm91cHM7CkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogICAgIE9NWF9WSURFT19BVkNTTElDRU1PREVUWVBFIGVTbGljZU1vZGU7CiB9IE9NWF9WSURFT19QQVJBTV9BVkNTTElDRUZNTzsKIAotLyoqIAorLyoqCiAgKiBBVkMgSURSIFBlcmlvZCBDb25maWdzCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CkBAIC0xMDQ3LDE0ICsxMDQ3LDE0IEBACiAgKiAgblBGcmFtZXMgOiBTcGVjaWZpZXMgaW50ZXJuYWwgb2YgY29kaW5nIEludHJhIGZyYW1lcwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fQ09ORklHX0FWQ0lOVFJBUEVSSU9EIHsKLSAgICBPTVhfVTMyIG5TaXplOyAKKyAgICBPTVhfVTMyIG5TaXplOwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICAgT01YX1UzMiBuSURSUGVyaW9kOwogICAgIE9NWF9VMzIgblBGcmFtZXM7CiB9IE9NWF9WSURFT19DT05GSUdfQVZDSU5UUkFQRVJJT0Q7CiAKLS8qKiAKKy8qKgogICogQVZDIE5BTCBTaXplIENvbmZpZ3MKICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAgKiAgbk5hbHVCeXRlcyA6IFNwZWNpZmllcyB0aGUgTkFMIHVuaXQgc2l6ZQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fQ09ORklHX05BTFNJWkUgewotICAgIE9NWF9VMzIgblNpemU7IAorICAgIE9NWF9VMzIgblNpemU7CiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICBPTVhfVTMyIG5OYWx1Qnl0ZXM7Cg==