ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDYxOGM5YmEuLjQwOTgxMDYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzIsNyArMzIsNyBAQAogIyBweXRob24gY29tcGlsZWQgb2JqZWN0cwogKi5weWMKIAotI2VjbGlwc2UgcHJvamVjdCBmaWxlcworIyBlY2xpcHNlIHByb2plY3QgZmlsZXMKIC5jcHJvamVjdAogLnByb2plY3QKIC5zZXR0aW5ncwpAQCAtMTExLDMgKzExMSw2IEBACiBiYXplbC1ncnBjCiBiYXplbC1vdXQKIGJhemVsLXRlc3Rsb2dzCisKKyMgRGVidWcgb3V0cHV0CitnZGIudHh0CmRpZmYgLS1naXQgYS9CVUlMRCBiL0JVSUxECmluZGV4IDVmMGQ1MGMuLjUwNTM4NjAgMTAwNjQ0Ci0tLSBhL0JVSUxECisrKyBiL0JVSUxECkBAIC00OTksNiArNDk5LDggQEAKICAgICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIiwKKyAgICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMiLAorICAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybi5jIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2FsYXJtLmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmMiLApAQCAtNTIwLDEyICs1MjIsMTMgQEAKICAgICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYyIsCiAgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYyIsCi0gICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYyIsCisgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYyIsCiAgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMiLAorICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMiLApAQCAtNTU1LDYgKzU1OCw3IEBACiAgICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnQuaCIsCiAgICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnRfcGFpci5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvci5oIiwKKyAgICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9ldl9wb2xsX3Bvc2l4LmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL2lvbWdyL2V2X3Bvc2l4LmgiLApAQCAtNjA3LDYgKzYxMSw3IEBACiAgICAgICAgICJzcmMvY29yZS9saWIvanNvbi9qc29uX3JlYWRlci5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9qc29uL2pzb25fd3JpdGVyLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuaCIsCisgICAgICAgICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5oIiwKQEAgLTYxOCwxNiArNjIzLDE5IEBACiAgICAgICAgICJzcmMvY29yZS9saWIvc3VyZmFjZS9jb21wbGV0aW9uX3F1ZXVlLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3N1cmZhY2UvZXZlbnRfc3RyaW5nLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3N1cmZhY2UvaW5pdC5oIiwKKyAgICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3N1cmZhY2UvbGFtZV9jbGllbnQuaCIsCiAgICAgICAgICJzcmMvY29yZS9saWIvc3VyZmFjZS9zZXJ2ZXIuaCIsCiAgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuaCIsCi0gICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuaCIsCisgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmgiLAorICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIsCiAgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5oIiwKICAgICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuaCIsCiAgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIsCisgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmgiLAogICAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuaCIsCiAgICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9pbXBsLmgiLApAQCAtODg2LDcgKzg5NCw2IEBACiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuYyIsCiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYyIsCiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jIiwKLSAgICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIiwKICAgICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbGlzdHMuYyIsCiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5jIiwKICAgICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuYyIsCkBAIC05MDYsMTEgKzkxMyw5IEBACiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfZW5jb2Rlci5oIiwKICAgICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19wYXJzZXIuaCIsCiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfdGFibGUuaCIsCi0gICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiLAogICAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmgiLAogICAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgiLAogICAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2ludGVybmFsLmgiLAotICAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgiLAogICAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuaCIsCiAgICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvdmFyaW50LmgiLAogICAgIF0sCmRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IGQwODNmMGQuLjViYTU5MTEgMTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC00ODIsNiArNDgyLDggQEAKICAgc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuYwogICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYwogICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMKKyAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYworICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMKICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMKICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvYWxhcm0uYwogICBzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYwpAQCAtNTAzLDEyICs1MDUsMTMgQEAKICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jCi0gIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jCisgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYworICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYwpAQCAtNTI5LDcgKzUzMiw2IEBACiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMKLSAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jCkBAIC03NzIsNiArNzc0LDggQEAKICAgc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuYwogICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYwogICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMKKyAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYworICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMKICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMKICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvYWxhcm0uYwogICBzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYwpAQCAtNzkzLDEyICs3OTcsMTMgQEAKICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jCi0gIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jCisgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYworICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYwpAQCAtODIyLDcgKzgyNyw2IEBACiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMKLSAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jCkBAIC0xMDUyLDYgKzEwNTYsOCBAQAogICBzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jCiAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jCiAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9idWZmZXIuYworICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jCisgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm4uYwogICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuYwogICBzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jCiAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5jCkBAIC0xMDczLDEyICsxMDc5LDEzIEBACiAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYwotICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYworICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMKKyAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMKQEAgLTEyNjcsNiArMTI3NCw4IEBACiAgIHNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmMKICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMKICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jCisgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMKKyAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybi5jCiAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jCiAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FsYXJtLmMKICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmMKQEAgLTEyODgsMTIgKzEyOTcsMTMgQEAKICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jCi0gIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jCisgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYworICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYwpAQCAtMTMxNSw3ICsxMzI1LDYgQEAKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3BhcnNpbmcuYwotICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYwogICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX2xpc3RzLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuYwogICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvdmFyaW50LmMKQEAgLTE2MTQsNiArMTYyMyw3IEBACiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgKICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oCisgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaAogICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmgKQEAgLTE3MTEsNyArMTcyMSw2IEBACiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMKLSAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jCiAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMKICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jCkBAIC0xODAwLDYgKzE4MDksOCBAQAogICBzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jCiAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jCiAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9idWZmZXIuYworICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jCisgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm4uYwogICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuYwogICBzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jCiAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5jCkBAIC0xODIxLDEyICsxODMyLDEzIEBACiAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYwotICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYworICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYwogICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMKKyAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jCiAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMKICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMKQEAgLTE5NTYsNiArMTk2OCw3IEBACiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgKICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oCisgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaAogICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmgKQEAgLTIyMjAsNiArMjIzMyw3IEBACiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgKICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oCisgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaAogICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmgKQEAgLTIzNzcsNiArMjM5MSw3IEBACiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgKICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oCisgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaAogICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oCiAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmgKQEAgLTQ5NzQsMzAgKzQ5ODksNiBAQAogZW5kaWYgKGdSUENfQlVJTERfVEVTVFMpCiBpZiAoZ1JQQ19CVUlMRF9URVNUUykKIAotYWRkX2V4ZWN1dGFibGUoY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QKLSAgdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvc3RhdHVzX2NvbnZlcnNpb25fdGVzdC5jCi0pCi0KLXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGNodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0Ci0gIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ci0gIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2luY2x1ZGUKLSAgUFJJVkFURSAke0JPUklOR1NTTF9ST09UX0RJUn0vaW5jbHVkZQotICBQUklWQVRFICR7UFJPVE9CVUZfUk9PVF9ESVJ9L3NyYwotICBQUklWQVRFICR7WkxJQl9ST09UX0RJUn0KLSAgUFJJVkFURSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGhpcmRfcGFydHkvemxpYgotICBQUklWQVRFICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS90aGlyZF9wYXJ0eS9nZmxhZ3MvaW5jbHVkZQotKQotCi10YXJnZXRfbGlua19saWJyYXJpZXMoY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QKLSAgZ3JwY190ZXN0X3V0aWwKLSAgZ3JwYwotICBncHJfdGVzdF91dGlsCi0gIGdwcgotKQotCi1lbmRpZiAoZ1JQQ19CVUlMRF9URVNUUykKLWlmIChnUlBDX0JVSUxEX1RFU1RTKQotCiBhZGRfZXhlY3V0YWJsZShjaHR0cDJfc3RyZWFtX21hcF90ZXN0CiAgIHRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL3N0cmVhbV9tYXBfdGVzdC5jCiApCkBAIC03MjkyLDYgKzcyODMsMzAgQEAKIGVuZGlmIChnUlBDX0JVSUxEX1RFU1RTKQogaWYgKGdSUENfQlVJTERfVEVTVFMpCiAKK2FkZF9leGVjdXRhYmxlKHN0YXR1c19jb252ZXJzaW9uX3Rlc3QKKyAgdGVzdC9jb3JlL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbl90ZXN0LmMKKykKKwordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoc3RhdHVzX2NvbnZlcnNpb25fdGVzdAorICBQUklWQVRFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfQorICBQUklWQVRFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbmNsdWRlCisgIFBSSVZBVEUgJHtCT1JJTkdTU0xfUk9PVF9ESVJ9L2luY2x1ZGUKKyAgUFJJVkFURSAke1BST1RPQlVGX1JPT1RfRElSfS9zcmMKKyAgUFJJVkFURSAke1pMSUJfUk9PVF9ESVJ9CisgIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L3RoaXJkX3BhcnR5L3psaWIKKyAgUFJJVkFURSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vdGhpcmRfcGFydHkvZ2ZsYWdzL2luY2x1ZGUKKykKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHN0YXR1c19jb252ZXJzaW9uX3Rlc3QKKyAgZ3JwY190ZXN0X3V0aWwKKyAgZ3JwYworICBncHJfdGVzdF91dGlsCisgIGdwcgorKQorCitlbmRpZiAoZ1JQQ19CVUlMRF9URVNUUykKK2lmIChnUlBDX0JVSUxEX1RFU1RTKQorCiBhZGRfZXhlY3V0YWJsZSh0Y3BfY2xpZW50X3Bvc2l4X3Rlc3QKICAgdGVzdC9jb3JlL2lvbWdyL3RjcF9jbGllbnRfcG9zaXhfdGVzdC5jCiApCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDljYWFmZDIuLjlkODE4ZTggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC05NSw1NiArOTUsNiBAQAogQ1BQRkxBR1Nfb3B0ID0gLU8yCiBERUZJTkVTX29wdCA9IE5ERUJVRwogCi1WQUxJRF9DT05GSUdfYXNhbi10cmFjZS1jbXAgPSAxCi1SRVFVSVJFX0NVU1RPTV9MSUJSQVJJRVNfYXNhbi10cmFjZS1jbXAgPSAxCi1DQ19hc2FuLXRyYWNlLWNtcCA9IGNsYW5nCi1DWFhfYXNhbi10cmFjZS1jbXAgPSBjbGFuZysrCi1MRF9hc2FuLXRyYWNlLWNtcCA9IGNsYW5nCi1MRFhYX2FzYW4tdHJhY2UtY21wID0gY2xhbmcrKwotQ1BQRkxBR1NfYXNhbi10cmFjZS1jbXAgPSAtTzAgLWZzYW5pdGl6ZS1jb3ZlcmFnZT1lZGdlIC1mc2FuaXRpemUtY292ZXJhZ2U9dHJhY2UtY21wIC1mc2FuaXRpemU9YWRkcmVzcyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtV25vLXVudXNlZC1jb21tYW5kLWxpbmUtYXJndW1lbnQgLURHUFJfTk9fRElSRUNUX1NZU0NBTExTCi1MREZMQUdTX2FzYW4tdHJhY2UtY21wID0gLWZzYW5pdGl6ZT1hZGRyZXNzCi1ERUZJTkVTX2FzYW4tdHJhY2UtY21wICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9MwotCi1WQUxJRF9DT05GSUdfZGJnID0gMQotQ0NfZGJnID0gJChERUZBVUxUX0NDKQotQ1hYX2RiZyA9ICQoREVGQVVMVF9DWFgpCi1MRF9kYmcgPSAkKERFRkFVTFRfQ0MpCi1MRFhYX2RiZyA9ICQoREVGQVVMVF9DWFgpCi1DUFBGTEFHU19kYmcgPSAtTzAKLURFRklORVNfZGJnID0gX0RFQlVHIERFQlVHCi0KLVZBTElEX0NPTkZJR19lYXNhbiA9IDEKLVJFUVVJUkVfQ1VTVE9NX0xJQlJBUklFU19lYXNhbiA9IDEKLUNDX2Vhc2FuID0gY2xhbmcKLUNYWF9lYXNhbiA9IGNsYW5nKysKLUxEX2Vhc2FuID0gY2xhbmcKLUxEWFhfZWFzYW4gPSBjbGFuZysrCi1DUFBGTEFHU19lYXNhbiA9IC1PMCAtZnNhbml0aXplLWNvdmVyYWdlPWVkZ2UgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCAtREdQUl9OT19ESVJFQ1RfU1lTQ0FMTFMKLUxERkxBR1NfZWFzYW4gPSAtZnNhbml0aXplPWFkZHJlc3MKLURFRklORVNfZWFzYW4gPSBfREVCVUcgREVCVUcgR1JQQ19FWEVDVVRJT05fQ09OVEVYVF9TQU5JVElaRVIKLURFRklORVNfZWFzYW4gKz0gR1JQQ19URVNUX1NMT1dET1dOX0JVSUxEX0ZBQ1RPUj0zCi0KLVZBTElEX0NPTkZJR19hc2FuID0gMQotUkVRVUlSRV9DVVNUT01fTElCUkFSSUVTX2FzYW4gPSAxCi1DQ19hc2FuID0gY2xhbmcKLUNYWF9hc2FuID0gY2xhbmcrKwotTERfYXNhbiA9IGNsYW5nCi1MRFhYX2FzYW4gPSBjbGFuZysrCi1DUFBGTEFHU19hc2FuID0gLU8wIC1mc2FuaXRpemUtY292ZXJhZ2U9ZWRnZSAtZnNhbml0aXplPWFkZHJlc3MgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50IC1ER1BSX05PX0RJUkVDVF9TWVNDQUxMUwotTERGTEFHU19hc2FuID0gLWZzYW5pdGl6ZT1hZGRyZXNzCi1ERUZJTkVTX2FzYW4gKz0gR1JQQ19URVNUX1NMT1dET1dOX0JVSUxEX0ZBQ1RPUj0zCi0KLVZBTElEX0NPTkZJR19tc2FuID0gMQotUkVRVUlSRV9DVVNUT01fTElCUkFSSUVTX21zYW4gPSAxCi1DQ19tc2FuID0gY2xhbmcKLUNYWF9tc2FuID0gY2xhbmcrKwotTERfbXNhbiA9IGNsYW5nCi1MRFhYX21zYW4gPSBjbGFuZysrCi1DUFBGTEFHU19tc2FuID0gLU8wIC1mc2FuaXRpemUtY292ZXJhZ2U9ZWRnZSAtZnNhbml0aXplPW1lbW9yeSAtZnNhbml0aXplLW1lbW9yeS10cmFjay1vcmlnaW5zIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1ER1RFU1RfSEFTX1RSMV9UVVBMRT0wIC1ER1RFU1RfVVNFX09XTl9UUjFfVFVQTEU9MSAtV25vLXVudXNlZC1jb21tYW5kLWxpbmUtYXJndW1lbnQgLWZQSUUgLXBpZSAtREdQUl9OT19ESVJFQ1RfU1lTQ0FMTFMKLUxERkxBR1NfbXNhbiA9IC1mc2FuaXRpemU9bWVtb3J5IC1ER1RFU1RfSEFTX1RSMV9UVVBMRT0wIC1ER1RFU1RfVVNFX09XTl9UUjFfVFVQTEU9MSAtZlBJRSAtcGllICQoaWYgJChKRU5LSU5TX0JVSUxEKSwtV2wkKGNvbW1hKS1UdGV4dC1zZWdtZW50PTB4N2UwMDAwMDAwMDAwLCkKLURFRklORVNfbXNhbiA9IE5ERUJVRwotREVGSU5FU19tc2FuICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9NAotCiBWQUxJRF9DT05GSUdfYmFzaWNwcm9mID0gMQogQ0NfYmFzaWNwcm9mID0gJChERUZBVUxUX0NDKQogQ1hYX2Jhc2ljcHJvZiA9ICQoREVGQVVMVF9DWFgpCkBAIC0xNzMsMjQgKzEyMyw2MCBAQAogTERGTEFHU19hc2FuLW5vbGVha3MgPSAtZnNhbml0aXplPWFkZHJlc3MKIERFRklORVNfYXNhbi1ub2xlYWtzICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9MwogCi1WQUxJRF9DT05GSUdfZWRiZyA9IDEKLUNDX2VkYmcgPSAkKERFRkFVTFRfQ0MpCi1DWFhfZWRiZyA9ICQoREVGQVVMVF9DWFgpCi1MRF9lZGJnID0gJChERUZBVUxUX0NDKQotTERYWF9lZGJnID0gJChERUZBVUxUX0NYWCkKLUNQUEZMQUdTX2VkYmcgPSAtTzAKLURFRklORVNfZWRiZyA9IF9ERUJVRyBERUJVRyBHUlBDX0VYRUNVVElPTl9DT05URVhUX1NBTklUSVpFUgorVkFMSURfQ09ORklHX2FzYW4tdHJhY2UtY21wID0gMQorUkVRVUlSRV9DVVNUT01fTElCUkFSSUVTX2FzYW4tdHJhY2UtY21wID0gMQorQ0NfYXNhbi10cmFjZS1jbXAgPSBjbGFuZworQ1hYX2FzYW4tdHJhY2UtY21wID0gY2xhbmcrKworTERfYXNhbi10cmFjZS1jbXAgPSBjbGFuZworTERYWF9hc2FuLXRyYWNlLWNtcCA9IGNsYW5nKysKK0NQUEZMQUdTX2FzYW4tdHJhY2UtY21wID0gLU8wIC1mc2FuaXRpemUtY292ZXJhZ2U9ZWRnZSAtZnNhbml0aXplLWNvdmVyYWdlPXRyYWNlLWNtcCAtZnNhbml0aXplPWFkZHJlc3MgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50IC1ER1BSX05PX0RJUkVDVF9TWVNDQUxMUworTERGTEFHU19hc2FuLXRyYWNlLWNtcCA9IC1mc2FuaXRpemU9YWRkcmVzcworREVGSU5FU19hc2FuLXRyYWNlLWNtcCArPSBHUlBDX1RFU1RfU0xPV0RPV05fQlVJTERfRkFDVE9SPTMKIAotVkFMSURfQ09ORklHX3Vic2FuID0gMQotUkVRVUlSRV9DVVNUT01fTElCUkFSSUVTX3Vic2FuID0gMQotQ0NfdWJzYW4gPSBjbGFuZwotQ1hYX3Vic2FuID0gY2xhbmcrKwotTERfdWJzYW4gPSBjbGFuZwotTERYWF91YnNhbiA9IGNsYW5nKysKLUNQUEZMQUdTX3Vic2FuID0gLU8wIC1mc2FuaXRpemUtY292ZXJhZ2U9ZWRnZSAtZnNhbml0aXplPXVuZGVmaW5lZCx1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCAtV3ZhcmFyZ3MKLUxERkxBR1NfdWJzYW4gPSAtZnNhbml0aXplPXVuZGVmaW5lZCx1bnNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93Ci1ERUZJTkVTX3Vic2FuID0gTkRFQlVHCi1ERUZJTkVTX3Vic2FuICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9MS41CitWQUxJRF9DT05GSUdfZGJnID0gMQorQ0NfZGJnID0gJChERUZBVUxUX0NDKQorQ1hYX2RiZyA9ICQoREVGQVVMVF9DWFgpCitMRF9kYmcgPSAkKERFRkFVTFRfQ0MpCitMRFhYX2RiZyA9ICQoREVGQVVMVF9DWFgpCitDUFBGTEFHU19kYmcgPSAtTzAKK0RFRklORVNfZGJnID0gX0RFQlVHIERFQlVHCisKK1ZBTElEX0NPTkZJR19zdGFwcHJvZiA9IDEKK0NDX3N0YXBwcm9mID0gJChERUZBVUxUX0NDKQorQ1hYX3N0YXBwcm9mID0gJChERUZBVUxUX0NYWCkKK0xEX3N0YXBwcm9mID0gJChERUZBVUxUX0NDKQorTERYWF9zdGFwcHJvZiA9ICQoREVGQVVMVF9DWFgpCitDUFBGTEFHU19zdGFwcHJvZiA9IC1PMiAtREdSUENfU1RBUF9QUk9GSUxFUgorREVGSU5FU19zdGFwcHJvZiA9IE5ERUJVRworCitWQUxJRF9DT05GSUdfZ2NvdiA9IDEKK0NDX2djb3YgPSBnY2MKK0NYWF9nY292ID0gZysrCitMRF9nY292ID0gZ2NjCitMRFhYX2djb3YgPSBnKysKK0NQUEZMQUdTX2djb3YgPSAtTzAgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIC1Xbm8tcmV0dXJuLXR5cGUKK0xERkxBR1NfZ2NvdiA9IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSAtcmR5bmFtaWMKK0RFRklORVNfZ2NvdiA9IF9ERUJVRyBERUJVRyBHUFJfR0NPVgorCitWQUxJRF9DT05GSUdfbWVtY2hlY2sgPSAxCitDQ19tZW1jaGVjayA9ICQoREVGQVVMVF9DQykKK0NYWF9tZW1jaGVjayA9ICQoREVGQVVMVF9DWFgpCitMRF9tZW1jaGVjayA9ICQoREVGQVVMVF9DQykKK0xEWFhfbWVtY2hlY2sgPSAkKERFRkFVTFRfQ1hYKQorQ1BQRkxBR1NfbWVtY2hlY2sgPSAtTzAKK0xERkxBR1NfbWVtY2hlY2sgPSAtcmR5bmFtaWMKK0RFRklORVNfbWVtY2hlY2sgPSBfREVCVUcgREVCVUcKK0RFRklORVNfbWVtY2hlY2sgKz0gR1JQQ19URVNUX1NMT1dET1dOX0JVSUxEX0ZBQ1RPUj0xMAorCitWQUxJRF9DT05GSUdfYXNhbiA9IDEKK1JFUVVJUkVfQ1VTVE9NX0xJQlJBUklFU19hc2FuID0gMQorQ0NfYXNhbiA9IGNsYW5nCitDWFhfYXNhbiA9IGNsYW5nKysKK0xEX2FzYW4gPSBjbGFuZworTERYWF9hc2FuID0gY2xhbmcrKworQ1BQRkxBR1NfYXNhbiA9IC1PMCAtZnNhbml0aXplLWNvdmVyYWdlPWVkZ2UgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCAtREdQUl9OT19ESVJFQ1RfU1lTQ0FMTFMKK0xERkxBR1NfYXNhbiA9IC1mc2FuaXRpemU9YWRkcmVzcworREVGSU5FU19hc2FuICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9MwogCiBWQUxJRF9DT05GSUdfdHNhbiA9IDEKIFJFUVVJUkVfQ1VTVE9NX0xJQlJBUklFU190c2FuID0gMQpAQCAtMjAzLDEzICsxODksMjcgQEAKIERFRklORVNfdHNhbiA9IEdSUENfVFNBTgogREVGSU5FU190c2FuICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9NQogCi1WQUxJRF9DT05GSUdfc3RhcHByb2YgPSAxCi1DQ19zdGFwcHJvZiA9ICQoREVGQVVMVF9DQykKLUNYWF9zdGFwcHJvZiA9ICQoREVGQVVMVF9DWFgpCi1MRF9zdGFwcHJvZiA9ICQoREVGQVVMVF9DQykKLUxEWFhfc3RhcHByb2YgPSAkKERFRkFVTFRfQ1hYKQotQ1BQRkxBR1Nfc3RhcHByb2YgPSAtTzIgLURHUlBDX1NUQVBfUFJPRklMRVIKLURFRklORVNfc3RhcHByb2YgPSBOREVCVUcKK1ZBTElEX0NPTkZJR191YnNhbiA9IDEKK1JFUVVJUkVfQ1VTVE9NX0xJQlJBUklFU191YnNhbiA9IDEKK0NDX3Vic2FuID0gY2xhbmcKK0NYWF91YnNhbiA9IGNsYW5nKysKK0xEX3Vic2FuID0gY2xhbmcKK0xEWFhfdWJzYW4gPSBjbGFuZysrCitDUFBGTEFHU191YnNhbiA9IC1PMCAtZnNhbml0aXplLWNvdmVyYWdlPWVkZ2UgLWZzYW5pdGl6ZT11bmRlZmluZWQsdW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtV25vLXVudXNlZC1jb21tYW5kLWxpbmUtYXJndW1lbnQgLVd2YXJhcmdzCitMREZMQUdTX3Vic2FuID0gLWZzYW5pdGl6ZT11bmRlZmluZWQsdW5zaWduZWQtaW50ZWdlci1vdmVyZmxvdworREVGSU5FU191YnNhbiA9IE5ERUJVRworREVGSU5FU191YnNhbiArPSBHUlBDX1RFU1RfU0xPV0RPV05fQlVJTERfRkFDVE9SPTEuNQorCitWQUxJRF9DT05GSUdfbXNhbiA9IDEKK1JFUVVJUkVfQ1VTVE9NX0xJQlJBUklFU19tc2FuID0gMQorQ0NfbXNhbiA9IGNsYW5nCitDWFhfbXNhbiA9IGNsYW5nKysKK0xEX21zYW4gPSBjbGFuZworTERYWF9tc2FuID0gY2xhbmcrKworQ1BQRkxBR1NfbXNhbiA9IC1PMCAtZnNhbml0aXplLWNvdmVyYWdlPWVkZ2UgLWZzYW5pdGl6ZT1tZW1vcnkgLWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtREdURVNUX0hBU19UUjFfVFVQTEU9MCAtREdURVNUX1VTRV9PV05fVFIxX1RVUExFPTEgLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50IC1mUElFIC1waWUgLURHUFJfTk9fRElSRUNUX1NZU0NBTExTCitMREZMQUdTX21zYW4gPSAtZnNhbml0aXplPW1lbW9yeSAtREdURVNUX0hBU19UUjFfVFVQTEU9MCAtREdURVNUX1VTRV9PV05fVFIxX1RVUExFPTEgLWZQSUUgLXBpZSAkKGlmICQoSkVOS0lOU19CVUlMRCksLVdsJChjb21tYSktVHRleHQtc2VnbWVudD0weDdlMDAwMDAwMDAwMCwpCitERUZJTkVTX21zYW4gPSBOREVCVUcKK0RFRklORVNfbXNhbiArPSBHUlBDX1RFU1RfU0xPV0RPV05fQlVJTERfRkFDVE9SPTQKIAogVkFMSURfQ09ORklHX211dHJhY2UgPSAxCiBDQ19tdXRyYWNlID0gJChERUZBVUxUX0NDKQpAQCAtMjIwLDM2ICsyMjAsNiBAQAogTERGTEFHU19tdXRyYWNlID0gLXJkeW5hbWljCiBERUZJTkVTX211dHJhY2UgPSBOREVCVUcKIAotVkFMSURfQ09ORklHX21lbWNoZWNrID0gMQotQ0NfbWVtY2hlY2sgPSAkKERFRkFVTFRfQ0MpCi1DWFhfbWVtY2hlY2sgPSAkKERFRkFVTFRfQ1hYKQotTERfbWVtY2hlY2sgPSAkKERFRkFVTFRfQ0MpCi1MRFhYX21lbWNoZWNrID0gJChERUZBVUxUX0NYWCkKLUNQUEZMQUdTX21lbWNoZWNrID0gLU8wCi1MREZMQUdTX21lbWNoZWNrID0gLXJkeW5hbWljCi1ERUZJTkVTX21lbWNoZWNrID0gX0RFQlVHIERFQlVHCi1ERUZJTkVTX21lbWNoZWNrICs9IEdSUENfVEVTVF9TTE9XRE9XTl9CVUlMRF9GQUNUT1I9MTAKLQotVkFMSURfQ09ORklHX2V0c2FuID0gMQotUkVRVUlSRV9DVVNUT01fTElCUkFSSUVTX2V0c2FuID0gMQotQ0NfZXRzYW4gPSBjbGFuZwotQ1hYX2V0c2FuID0gY2xhbmcrKwotTERfZXRzYW4gPSBjbGFuZwotTERYWF9ldHNhbiA9IGNsYW5nKysKLUNQUEZMQUdTX2V0c2FuID0gLU8wIC1mc2FuaXRpemU9dGhyZWFkIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCAtREdQUl9OT19ESVJFQ1RfU1lTQ0FMTFMKLUxERkxBR1NfZXRzYW4gPSAtZnNhbml0aXplPXRocmVhZAotREVGSU5FU19ldHNhbiA9IF9ERUJVRyBERUJVRyBHUlBDX0VYRUNVVElPTl9DT05URVhUX1NBTklUSVpFUgotREVGSU5FU19ldHNhbiArPSBHUlBDX1RFU1RfU0xPV0RPV05fQlVJTERfRkFDVE9SPTUKLQotVkFMSURfQ09ORklHX2djb3YgPSAxCi1DQ19nY292ID0gZ2NjCi1DWFhfZ2NvdiA9IGcrKwotTERfZ2NvdiA9IGdjYwotTERYWF9nY292ID0gZysrCi1DUFBGTEFHU19nY292ID0gLU8wIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSAtV25vLXJldHVybi10eXBlCi1MREZMQUdTX2djb3YgPSAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UgLXJkeW5hbWljCi1ERUZJTkVTX2djb3YgPSBfREVCVUcgREVCVUcgR1BSX0dDT1YKLQogCiAKICMgR2VuZXJhbCBzZXR0aW5ncy4KQEAgLTk0NCw3ICs5MTQsNiBAQAogY2Vuc3VzX3RyYWNlX2NvbnRleHRfdGVzdDogJChCSU5ESVIpLyQoQ09ORklHKS9jZW5zdXNfdHJhY2VfY29udGV4dF90ZXN0CiBjaGFubmVsX2NyZWF0ZV90ZXN0OiAkKEJJTkRJUikvJChDT05GSUcpL2NoYW5uZWxfY3JlYXRlX3Rlc3QKIGNodHRwMl9ocGFja19lbmNvZGVyX3Rlc3Q6ICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX2hwYWNrX2VuY29kZXJfdGVzdAotY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3Q6ICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QKIGNodHRwMl9zdHJlYW1fbWFwX3Rlc3Q6ICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX3N0cmVhbV9tYXBfdGVzdAogY2h0dHAyX3ZhcmludF90ZXN0OiAkKEJJTkRJUikvJChDT05GSUcpL2NodHRwMl92YXJpbnRfdGVzdAogY2xpZW50X2Z1enplcjogJChCSU5ESVIpLyQoQ09ORklHKS9jbGllbnRfZnV6emVyCkBAIC0xMDUzLDYgKzEwMjIsNyBAQAogc29ja2FkZHJfdXRpbHNfdGVzdDogJChCSU5ESVIpLyQoQ09ORklHKS9zb2NrYWRkcl91dGlsc190ZXN0CiBzb2NrZXRfdXRpbHNfdGVzdDogJChCSU5ESVIpLyQoQ09ORklHKS9zb2NrZXRfdXRpbHNfdGVzdAogc3NsX3NlcnZlcl9mdXp6ZXI6ICQoQklORElSKS8kKENPTkZJRykvc3NsX3NlcnZlcl9mdXp6ZXIKK3N0YXR1c19jb252ZXJzaW9uX3Rlc3Q6ICQoQklORElSKS8kKENPTkZJRykvc3RhdHVzX2NvbnZlcnNpb25fdGVzdAogdGNwX2NsaWVudF9wb3NpeF90ZXN0OiAkKEJJTkRJUikvJChDT05GSUcpL3RjcF9jbGllbnRfcG9zaXhfdGVzdAogdGNwX3Bvc2l4X3Rlc3Q6ICQoQklORElSKS8kKENPTkZJRykvdGNwX3Bvc2l4X3Rlc3QKIHRjcF9zZXJ2ZXJfcG9zaXhfdGVzdDogJChCSU5ESVIpLyQoQ09ORklHKS90Y3Bfc2VydmVyX3Bvc2l4X3Rlc3QKQEAgLTEzMDQsNyArMTI3NCw2IEBACiAgICQoQklORElSKS8kKENPTkZJRykvY2Vuc3VzX3RyYWNlX2NvbnRleHRfdGVzdCBcCiAgICQoQklORElSKS8kKENPTkZJRykvY2hhbm5lbF9jcmVhdGVfdGVzdCBcCiAgICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX2hwYWNrX2VuY29kZXJfdGVzdCBcCi0gICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QgXAogICAkKEJJTkRJUikvJChDT05GSUcpL2NodHRwMl9zdHJlYW1fbWFwX3Rlc3QgXAogICAkKEJJTkRJUikvJChDT05GSUcpL2NodHRwMl92YXJpbnRfdGVzdCBcCiAgICQoQklORElSKS8kKENPTkZJRykvY29tYmluZXJfdGVzdCBcCkBAIC0xMzk1LDYgKzEzNjQsNyBAQAogICAkKEJJTkRJUikvJChDT05GSUcpL3NvY2thZGRyX3Jlc29sdmVyX3Rlc3QgXAogICAkKEJJTkRJUikvJChDT05GSUcpL3NvY2thZGRyX3V0aWxzX3Rlc3QgXAogICAkKEJJTkRJUikvJChDT05GSUcpL3NvY2tldF91dGlsc190ZXN0IFwKKyAgJChCSU5ESVIpLyQoQ09ORklHKS9zdGF0dXNfY29udmVyc2lvbl90ZXN0IFwKICAgJChCSU5ESVIpLyQoQ09ORklHKS90Y3BfY2xpZW50X3Bvc2l4X3Rlc3QgXAogICAkKEJJTkRJUikvJChDT05GSUcpL3RjcF9wb3NpeF90ZXN0IFwKICAgJChCSU5ESVIpLyQoQ09ORklHKS90Y3Bfc2VydmVyX3Bvc2l4X3Rlc3QgXApAQCAtMTY1OCw4ICsxNjI4LDYgQEAKIAkkKFEpICQoQklORElSKS8kKENPTkZJRykvY2hhbm5lbF9jcmVhdGVfdGVzdCB8fCAoIGVjaG8gdGVzdCBjaGFubmVsX2NyZWF0ZV90ZXN0IGZhaWxlZCA7IGV4aXQgMSApCiAJJChFKSAiW1JVTl0gICAgIFRlc3RpbmcgY2h0dHAyX2hwYWNrX2VuY29kZXJfdGVzdCIKIAkkKFEpICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX2hwYWNrX2VuY29kZXJfdGVzdCB8fCAoIGVjaG8gdGVzdCBjaHR0cDJfaHBhY2tfZW5jb2Rlcl90ZXN0IGZhaWxlZCA7IGV4aXQgMSApCi0JJChFKSAiW1JVTl0gICAgIFRlc3RpbmcgY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QiCi0JJChRKSAkKEJJTkRJUikvJChDT05GSUcpL2NodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0IHx8ICggZWNobyB0ZXN0IGNodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0IGZhaWxlZCA7IGV4aXQgMSApCiAJJChFKSAiW1JVTl0gICAgIFRlc3RpbmcgY2h0dHAyX3N0cmVhbV9tYXBfdGVzdCIKIAkkKFEpICQoQklORElSKS8kKENPTkZJRykvY2h0dHAyX3N0cmVhbV9tYXBfdGVzdCB8fCAoIGVjaG8gdGVzdCBjaHR0cDJfc3RyZWFtX21hcF90ZXN0IGZhaWxlZCA7IGV4aXQgMSApCiAJJChFKSAiW1JVTl0gICAgIFRlc3RpbmcgY2h0dHAyX3ZhcmludF90ZXN0IgpAQCAtMTgxOCw2ICsxNzg2LDggQEAKIAkkKFEpICQoQklORElSKS8kKENPTkZJRykvc29ja2FkZHJfdXRpbHNfdGVzdCB8fCAoIGVjaG8gdGVzdCBzb2NrYWRkcl91dGlsc190ZXN0IGZhaWxlZCA7IGV4aXQgMSApCiAJJChFKSAiW1JVTl0gICAgIFRlc3Rpbmcgc29ja2V0X3V0aWxzX3Rlc3QiCiAJJChRKSAkKEJJTkRJUikvJChDT05GSUcpL3NvY2tldF91dGlsc190ZXN0IHx8ICggZWNobyB0ZXN0IHNvY2tldF91dGlsc190ZXN0IGZhaWxlZCA7IGV4aXQgMSApCisJJChFKSAiW1JVTl0gICAgIFRlc3Rpbmcgc3RhdHVzX2NvbnZlcnNpb25fdGVzdCIKKwkkKFEpICQoQklORElSKS8kKENPTkZJRykvc3RhdHVzX2NvbnZlcnNpb25fdGVzdCB8fCAoIGVjaG8gdGVzdCBzdGF0dXNfY29udmVyc2lvbl90ZXN0IGZhaWxlZCA7IGV4aXQgMSApCiAJJChFKSAiW1JVTl0gICAgIFRlc3RpbmcgdGNwX2NsaWVudF9wb3NpeF90ZXN0IgogCSQoUSkgJChCSU5ESVIpLyQoQ09ORklHKS90Y3BfY2xpZW50X3Bvc2l4X3Rlc3QgfHwgKCBlY2hvIHRlc3QgdGNwX2NsaWVudF9wb3NpeF90ZXN0IGZhaWxlZCA7IGV4aXQgMSApCiAJJChFKSAiW1JVTl0gICAgIFRlc3RpbmcgdGNwX3Bvc2l4X3Rlc3QiCkBAIC0yNzQ2LDYgKzI3MTYsOCBAQAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jIFwKICAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMgXAorICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMgXAorICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm4uYyBcCiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FsYXJtLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5jIFwKQEAgLTI3NjcsMTIgKzI3MzksMTMgQEAKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS92ZXJzaW9uLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYyBcCi0gICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmMgXAorICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5jIFwKKyAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYyBcCkBAIC0yNzkzLDcgKzI3NjYsNiBAQAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3BhcnNpbmcuYyBcCi0gICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbGlzdHMuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jIFwKQEAgLTMwNTIsNiArMzAyNCw4IEBACiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuYyBcCiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9idWZmZXIuYyBcCisgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYyBcCisgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybi5jIFwKICAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuYyBcCiAgICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvYWxhcm0uYyBcCiAgICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmMgXApAQCAtMzA3MywxMiArMzA0NywxMyBAQAogICAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9ieXRlX3N0cmVhbS5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jIFwKLSAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYyBcCisgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9waWRfY29udHJvbGxlci5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMgXAorICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jIFwKQEAgLTMxMDIsNyArMzA3Nyw2IEBACiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jIFwKLSAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvdmFyaW50LmMgXApAQCAtMzM0OCw2ICszMzIyLDggQEAKICAgICBzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jIFwKICAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYyBcCiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIFwKKyAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jIFwKKyAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIFwKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jIFwKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYyBcCkBAIC0zMzY5LDEyICszMzQ1LDEzIEBACiAgICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmMgXAotICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jIFwKKyAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc2VydmljZV9jb25maWcuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYyBcCisgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMgXApAQCAtMzU2OSw2ICszNTQ2LDggQEAKICAgICBzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jIFwKICAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYyBcCiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIFwKKyAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jIFwKKyAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIFwKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jIFwKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYyBcCkBAIC0zNTkwLDEyICszNTY5LDEzIEBACiAgICAgc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmMgXAotICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jIFwKKyAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc2VydmljZV9jb25maWcuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYyBcCisgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMgXApAQCAtMzYxNyw3ICszNTk3LDYgQEAKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMgXAotICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX2xpc3RzLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuYyBcCkBAIC0zOTI1LDYgKzM5MDQsNyBAQAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2ludGVyZmFjZS5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmljZV90eXBlLmggXAorICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzLmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfY29kZV9lbnVtLmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmggXApAQCAtNDA2OCw3ICs0MDQ4LDYgQEAKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMgXAotICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX2xpc3RzLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuYyBcCkBAIC00MTU3LDYgKzQxMzYsOCBAQAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jIFwKICAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMgXAorICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMgXAorICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm4uYyBcCiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FsYXJtLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5jIFwKQEAgLTQxNzgsMTIgKzQxNTksMTMgQEAKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS92ZXJzaW9uLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYyBcCi0gICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmMgXAorICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5jIFwKKyAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYyBcCkBAIC00Mjk0LDYgKzQyNzYsNyBAQAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2ludGVyZmFjZS5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmljZV90eXBlLmggXAorICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzLmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfY29kZV9lbnVtLmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmggXApAQCAtNDY1MSw2ICs0NjM0LDcgQEAKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2NvbnRleHQuaCBcCiAgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9pbnRlcmZhY2UuaCBcCiAgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oIFwKKyAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2xpY2UuaCBcCiAgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1cy5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oIFwKICAgICBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2hlbHBlci5oIFwKQEAgLTQ4MzEsNiArNDgxNSw3IEBACiAgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9jb250ZXh0LmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2aWNlX3R5cGUuaCBcCisgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NsaWNlLmggXAogICAgIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaCBcCiAgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1c19jb2RlX2VudW0uaCBcCiAgICAgaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1c19oZWxwZXIuaCBcCkBAIC04MjA4LDM4ICs4MTkzLDYgQEAKIGVuZGlmCiAKIAotQ0hUVFAyX1NUQVRVU19DT05WRVJTSU9OX1RFU1RfU1JDID0gXAotICAgIHRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL3N0YXR1c19jb252ZXJzaW9uX3Rlc3QuYyBcCi0KLUNIVFRQMl9TVEFUVVNfQ09OVkVSU0lPTl9URVNUX09CSlMgPSAkKGFkZHByZWZpeCAkKE9CSkRJUikvJChDT05GSUcpLywgJChhZGRzdWZmaXggLm8sICQoYmFzZW5hbWUgJChDSFRUUDJfU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9TUkMpKSkpCi1pZmVxICgkKE5PX1NFQ1VSRSksdHJ1ZSkKLQotIyBZb3UgY2FuJ3QgYnVpbGQgc2VjdXJlIHRhcmdldHMgaWYgeW91IGRvbid0IGhhdmUgT3BlblNTTC4KLQotJChCSU5ESVIpLyQoQ09ORklHKS9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdDogb3BlbnNzbF9kZXBfZXJyb3IKLQotZWxzZQotCi0KLQotJChCSU5ESVIpLyQoQ09ORklHKS9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdDogJChDSFRUUDJfU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9PQkpTKSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdycGNfdGVzdF91dGlsLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncnBjLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncHJfdGVzdF91dGlsLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncHIuYQotCSQoRSkgIltMRF0gICAgICBMaW5raW5nICRAIgotCSQoUSkgbWtkaXIgLXAgYGRpcm5hbWUgJEBgCi0JJChRKSAkKExEKSAkKExERkxBR1MpICQoQ0hUVFAyX1NUQVRVU19DT05WRVJTSU9OX1RFU1RfT0JKUykgJChMSUJESVIpLyQoQ09ORklHKS9saWJncnBjX3Rlc3RfdXRpbC5hICQoTElCRElSKS8kKENPTkZJRykvbGliZ3JwYy5hICQoTElCRElSKS8kKENPTkZJRykvbGliZ3ByX3Rlc3RfdXRpbC5hICQoTElCRElSKS8kKENPTkZJRykvbGliZ3ByLmEgJChMRExJQlMpICQoTERMSUJTX1NFQ1VSRSkgLW8gJChCSU5ESVIpLyQoQ09ORklHKS9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdAotCi1lbmRpZgotCi0kKE9CSkRJUikvJChDT05GSUcpL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL3N0YXR1c19jb252ZXJzaW9uX3Rlc3QubzogICQoTElCRElSKS8kKENPTkZJRykvbGliZ3JwY190ZXN0X3V0aWwuYSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdycGMuYSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdwcl90ZXN0X3V0aWwuYSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdwci5hCi0KLWRlcHNfY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3Q6ICQoQ0hUVFAyX1NUQVRVU19DT05WRVJTSU9OX1RFU1RfT0JKUzoubz0uZGVwKQotCi1pZm5lcSAoJChOT19TRUNVUkUpLHRydWUpCi1pZm5lcSAoJChOT19ERVBTKSx0cnVlKQotLWluY2x1ZGUgJChDSFRUUDJfU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9PQkpTOi5vPS5kZXApCi1lbmRpZgotZW5kaWYKLQotCiBDSFRUUDJfU1RSRUFNX01BUF9URVNUX1NSQyA9IFwKICAgICB0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9zdHJlYW1fbWFwX3Rlc3QuYyBcCiAKQEAgLTExNjk2LDYgKzExNjQ5LDM4IEBACiBlbmRpZgogCiAKK1NUQVRVU19DT05WRVJTSU9OX1RFU1RfU1JDID0gXAorICAgIHRlc3QvY29yZS90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb25fdGVzdC5jIFwKKworU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9PQkpTID0gJChhZGRwcmVmaXggJChPQkpESVIpLyQoQ09ORklHKS8sICQoYWRkc3VmZml4IC5vLCAkKGJhc2VuYW1lICQoU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9TUkMpKSkpCitpZmVxICgkKE5PX1NFQ1VSRSksdHJ1ZSkKKworIyBZb3UgY2FuJ3QgYnVpbGQgc2VjdXJlIHRhcmdldHMgaWYgeW91IGRvbid0IGhhdmUgT3BlblNTTC4KKworJChCSU5ESVIpLyQoQ09ORklHKS9zdGF0dXNfY29udmVyc2lvbl90ZXN0OiBvcGVuc3NsX2RlcF9lcnJvcgorCitlbHNlCisKKworCiskKEJJTkRJUikvJChDT05GSUcpL3N0YXR1c19jb252ZXJzaW9uX3Rlc3Q6ICQoU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9PQkpTKSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdycGNfdGVzdF91dGlsLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncnBjLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncHJfdGVzdF91dGlsLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncHIuYQorCSQoRSkgIltMRF0gICAgICBMaW5raW5nICRAIgorCSQoUSkgbWtkaXIgLXAgYGRpcm5hbWUgJEBgCisJJChRKSAkKExEKSAkKExERkxBR1MpICQoU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9PQkpTKSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdycGNfdGVzdF91dGlsLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncnBjLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncHJfdGVzdF91dGlsLmEgJChMSUJESVIpLyQoQ09ORklHKS9saWJncHIuYSAkKExETElCUykgJChMRExJQlNfU0VDVVJFKSAtbyAkKEJJTkRJUikvJChDT05GSUcpL3N0YXR1c19jb252ZXJzaW9uX3Rlc3QKKworZW5kaWYKKworJChPQkpESVIpLyQoQ09ORklHKS90ZXN0L2NvcmUvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QubzogICQoTElCRElSKS8kKENPTkZJRykvbGliZ3JwY190ZXN0X3V0aWwuYSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdycGMuYSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdwcl90ZXN0X3V0aWwuYSAkKExJQkRJUikvJChDT05GSUcpL2xpYmdwci5hCisKK2RlcHNfc3RhdHVzX2NvbnZlcnNpb25fdGVzdDogJChTVEFUVVNfQ09OVkVSU0lPTl9URVNUX09CSlM6Lm89LmRlcCkKKworaWZuZXEgKCQoTk9fU0VDVVJFKSx0cnVlKQoraWZuZXEgKCQoTk9fREVQUyksdHJ1ZSkKKy1pbmNsdWRlICQoU1RBVFVTX0NPTlZFUlNJT05fVEVTVF9PQkpTOi5vPS5kZXApCitlbmRpZgorZW5kaWYKKworCiBUQ1BfQ0xJRU5UX1BPU0lYX1RFU1RfU1JDID0gXAogICAgIHRlc3QvY29yZS9pb21nci90Y3BfY2xpZW50X3Bvc2l4X3Rlc3QuYyBcCiAKZGlmZiAtLWdpdCBhL2JpbmRpbmcuZ3lwIGIvYmluZGluZy5neXAKaW5kZXggOTMyOGEzMC4uZmU5YzQyNSAxMDA2NDQKLS0tIGEvYmluZGluZy5neXAKKysrIGIvYmluZGluZy5neXAKQEAgLTY4Niw2ICs2ODYsOCBAQAogICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMnLAorICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYycsCisgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMnLAogICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMnLAogICAgICAgICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvYWxhcm0uYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYycsCkBAIC03MDcsMTIgKzcwOSwxMyBAQAogICAgICAgICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jJywKICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jJywKLSAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jJywKKyAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMnLAogICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jJywKICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMnLAogICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYycsCisgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMnLAogICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMnLAogICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYycsCiAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYycsCkBAIC03MzMsNyArNzM2LDYgQEAKICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jJywKICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jJywKICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMnLAotICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMnLAogICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jJywKICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMnLAogICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jJywKQEAgLTg4NCw2ICs4ODYsNyBAQAogICAgICAgICAic3JjL25vZGUvZXh0L25vZGVfZ3JwYy5jYyIsCiAgICAgICAgICJzcmMvbm9kZS9leHQvc2VydmVyLmNjIiwKICAgICAgICAgInNyYy9ub2RlL2V4dC9zZXJ2ZXJfY3JlZGVudGlhbHMuY2MiLAorICAgICAgICAic3JjL25vZGUvZXh0L3NsaWNlLmNjIiwKICAgICAgICAgInNyYy9ub2RlL2V4dC90aW1ldmFsLmNjIiwKICAgICAgIF0sCiAgICAgICAiZGVwZW5kZW5jaWVzIjogWwpkaWZmIC0tZ2l0IGEvYnVpbGQueWFtbCBiL2J1aWxkLnlhbWwKaW5kZXggNWNjYmQwYS4uMjhkODIzYiAxMDA2NDQKLS0tIGEvYnVpbGQueWFtbAorKysgYi9idWlsZC55YW1sCkBAIC0xODgsNiArMTg4LDcgQEAKICAgLSBzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnQuaAogICAtIHNyYy9jb3JlL2xpYi9pb21nci9lbmRwb2ludF9wYWlyLmgKICAgLSBzcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaAorICAtIHNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oCiAgIC0gc3JjL2NvcmUvbGliL2lvbWdyL2V2X2Vwb2xsX2xpbnV4LmgKICAgLSBzcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9sbF9wb3NpeC5oCiAgIC0gc3JjL2NvcmUvbGliL2lvbWdyL2V2X3Bvc2l4LmgKQEAgLTI0MCw2ICsyNDEsNyBAQAogICAtIHNyYy9jb3JlL2xpYi9qc29uL2pzb25fcmVhZGVyLmgKICAgLSBzcmMvY29yZS9saWIvanNvbi9qc29uX3dyaXRlci5oCiAgIC0gc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuaAorICAtIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmgKICAgLSBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaAogICAtIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oCiAgIC0gc3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmgKQEAgLTI1MywxNCArMjU1LDE3IEBACiAgIC0gc3JjL2NvcmUvbGliL3N1cmZhY2UvaW5pdC5oCiAgIC0gc3JjL2NvcmUvbGliL3N1cmZhY2UvbGFtZV9jbGllbnQuaAogICAtIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5oCisgIC0gc3JjL2NvcmUvbGliL3N1cmZhY2UvdmFsaWRhdGVfbWV0YWRhdGEuaAogICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uaAogICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmgKLSAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuaAorICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuaAorICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgKICAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgKICAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmgKICAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmgKICAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmgKICAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oCisgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmgKICAgLSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5oCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfaW1wbC5oCkBAIC0zNDksNiArMzU0LDggQEAKICAgLSBzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jCiAgIC0gc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMKICAgLSBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMKKyAgLSBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jCisgIC0gc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybi5jCiAgIC0gc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMKICAgLSBzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jCiAgIC0gc3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmMKQEAgLTM3MCwxMiArMzc3LDEzIEBACiAgIC0gc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9ieXRlX3N0cmVhbS5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYwotICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jCisgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9waWRfY29udHJvbGxlci5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYworICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYwogICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jCiAgIC0gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYwogICAtIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jCkBAIC01OTQsMTEgKzYwMiw5IEBACiAgIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX2VuY29kZXIuaAogICAtIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19wYXJzZXIuaAogICAtIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oCi0gIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oCiAgIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmgKICAgLSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuaAogICAtIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbnRlcm5hbC5oCi0gIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKICAgLSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5oCiAgIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5oCiAgIHNyYzoKQEAgLTYxOCw3ICs2MjQsNiBAQAogICAtIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jCiAgIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmMKICAgLSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jCi0gIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMKICAgLSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX2xpc3RzLmMKICAgLSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5jCiAgIC0gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jCkBAIC04MjgsNiArODMzLDcgQEAKICAgLSBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2NvbnRleHQuaAogICAtIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgKICAgLSBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmljZV90eXBlLmgKKyAgLSBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2xpY2UuaAogICAtIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaAogICAtIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfY29kZV9lbnVtLmgKICAgLSBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2hlbHBlci5oCkBAIC0xNDk5LDE2ICsxNTA1LDYgQEAKICAgLSBncnBjCiAgIC0gZ3ByX3Rlc3RfdXRpbAogICAtIGdwcgotLSBuYW1lOiBjaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdAotICBidWlsZDogdGVzdAotICBsYW5ndWFnZTogYwotICBzcmM6Ci0gIC0gdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvc3RhdHVzX2NvbnZlcnNpb25fdGVzdC5jCi0gIGRlcHM6Ci0gIC0gZ3JwY190ZXN0X3V0aWwKLSAgLSBncnBjCi0gIC0gZ3ByX3Rlc3RfdXRpbAotICAtIGdwcgogLSBuYW1lOiBjaHR0cDJfc3RyZWFtX21hcF90ZXN0CiAgIGJ1aWxkOiB0ZXN0CiAgIGxhbmd1YWdlOiBjCkBAIC0yNjkxLDYgKzI2ODcsMTYgQEAKICAgY29ycHVzX2RpcnM6CiAgIC0gdGVzdC9jb3JlL3NlY3VyaXR5L2NvcnB1cy9zc2xfc2VydmVyX2NvcnB1cwogICBtYXhsZW46IDIwNDgKKy0gbmFtZTogc3RhdHVzX2NvbnZlcnNpb25fdGVzdAorICBidWlsZDogdGVzdAorICBsYW5ndWFnZTogYworICBzcmM6CisgIC0gdGVzdC9jb3JlL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbl90ZXN0LmMKKyAgZGVwczoKKyAgLSBncnBjX3Rlc3RfdXRpbAorICAtIGdycGMKKyAgLSBncHJfdGVzdF91dGlsCisgIC0gZ3ByCiAtIG5hbWU6IHRjcF9jbGllbnRfcG9zaXhfdGVzdAogICBjcHVfY29zdDogMC41CiAgIGJ1aWxkOiB0ZXN0CkBAIC0zNzgyLDM2ICszNzg4LDYgQEAKICAgZGJnOgogICAgIENQUEZMQUdTOiAtTzAKICAgICBERUZJTkVTOiBfREVCVUcgREVCVUcKLSAgZWFzYW46Ci0gICAgQ0M6IGNsYW5nCi0gICAgQ1BQRkxBR1M6IC1PMCAtZnNhbml0aXplLWNvdmVyYWdlPWVkZ2UgLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCi0gICAgICAtV25vLXVudXNlZC1jb21tYW5kLWxpbmUtYXJndW1lbnQgLURHUFJfTk9fRElSRUNUX1NZU0NBTExTCi0gICAgQ1hYOiBjbGFuZysrCi0gICAgREVGSU5FUzogX0RFQlVHIERFQlVHIEdSUENfRVhFQ1VUSU9OX0NPTlRFWFRfU0FOSVRJWkVSCi0gICAgTEQ6IGNsYW5nCi0gICAgTERGTEFHUzogLWZzYW5pdGl6ZT1hZGRyZXNzCi0gICAgTERYWDogY2xhbmcrKwotICAgIGNvbXBpbGVfdGhlX3dvcmxkOiB0cnVlCi0gICAgdGVzdF9lbnZpcm9uOgotICAgICAgQVNBTl9PUFRJT05TOiBkZXRlY3RfbGVha3M9MTpjb2xvcj1hbHdheXMKLSAgICAgIExTQU5fT1BUSU9OUzogc3VwcHJlc3Npb25zPXRvb2xzL2xzYW5fc3VwcHJlc3Npb25zLnR4dDpyZXBvcnRfb2JqZWN0cz0xCi0gICAgdGltZW91dF9tdWx0aXBsaWVyOiAzCi0gIGVkYmc6Ci0gICAgQ1BQRkxBR1M6IC1PMAotICAgIERFRklORVM6IF9ERUJVRyBERUJVRyBHUlBDX0VYRUNVVElPTl9DT05URVhUX1NBTklUSVpFUgotICBldHNhbjoKLSAgICBDQzogY2xhbmcKLSAgICBDUFBGTEFHUzogLU8wIC1mc2FuaXRpemU9dGhyZWFkIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudAotICAgICAgLURHUFJfTk9fRElSRUNUX1NZU0NBTExTCi0gICAgQ1hYOiBjbGFuZysrCi0gICAgREVGSU5FUzogX0RFQlVHIERFQlVHIEdSUENfRVhFQ1VUSU9OX0NPTlRFWFRfU0FOSVRJWkVSCi0gICAgTEQ6IGNsYW5nCi0gICAgTERGTEFHUzogLWZzYW5pdGl6ZT10aHJlYWQKLSAgICBMRFhYOiBjbGFuZysrCi0gICAgY29tcGlsZV90aGVfd29ybGQ6IHRydWUKLSAgICB0ZXN0X2Vudmlyb246Ci0gICAgICBUU0FOX09QVElPTlM6IHN1cHByZXNzaW9ucz10b29scy90c2FuX3N1cHByZXNzaW9ucy50eHQ6aGFsdF9vbl9lcnJvcj0xOnNlY29uZF9kZWFkbG9ja19zdGFjaz0xCi0gICAgdGltZW91dF9tdWx0aXBsaWVyOiA1CiAgIGdjb3Y6CiAgICAgQ0M6IGdjYwogICAgIENQUEZMQUdTOiAtTzAgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIC1Xbm8tcmV0dXJuLXR5cGUKQEAgLTM5MTAsNiArMzg4Niw3IEBACiAgIC0gc3JjL25vZGUvZXh0L2NvbXBsZXRpb25fcXVldWUuaAogICAtIHNyYy9ub2RlL2V4dC9zZXJ2ZXIuaAogICAtIHNyYy9ub2RlL2V4dC9zZXJ2ZXJfY3JlZGVudGlhbHMuaAorICAtIHNyYy9ub2RlL2V4dC9zbGljZS5oCiAgIC0gc3JjL25vZGUvZXh0L3RpbWV2YWwuaAogICBqczoKICAgLSBzcmMvbm9kZS9pbmRleC5qcwpAQCAtMzkzMSw2ICszOTA4LDcgQEAKICAgLSBzcmMvbm9kZS9leHQvbm9kZV9ncnBjLmNjCiAgIC0gc3JjL25vZGUvZXh0L3NlcnZlci5jYwogICAtIHNyYy9ub2RlL2V4dC9zZXJ2ZXJfY3JlZGVudGlhbHMuY2MKKyAgLSBzcmMvbm9kZS9leHQvc2xpY2UuY2MKICAgLSBzcmMvbm9kZS9leHQvdGltZXZhbC5jYwogb3BlbnNzbF9mYWxsYmFjazoKICAgYmFzZV91cmk6IGh0dHBzOi8vb3BlbnNzbC5vcmcvc291cmNlL29sZC8xLjAuMi8KZGlmZiAtLWdpdCBhL2NvbmZpZy5tNCBiL2NvbmZpZy5tNAppbmRleCA5YjJkODE5Li4yYTNiYTU1IDEwMDY0NAotLS0gYS9jb25maWcubTQKKysrIGIvY29uZmlnLm00CkBAIC0xNjUsNiArMTY1LDggQEAKICAgICBzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jIFwKICAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYyBcCiAgICAgc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIFwKKyAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jIFwKKyAgICBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMgXAogICAgIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIFwKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jIFwKICAgICBzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYyBcCkBAIC0xODYsMTIgKzE4OCwxMyBAQAogICAgIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9ieXRlX3N0cmVhbS5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jIFwKLSAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYyBcCisgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9waWRfY29udHJvbGxlci5jIFwKICAgICBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMgXAorICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYyBcCiAgICAgc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMgXAogICAgIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jIFwKQEAgLTIxMiw3ICsyMTUsNiBAQAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jIFwKICAgICBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3BhcnNpbmcuYyBcCi0gICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMgXAogICAgIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbGlzdHMuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuYyBcCiAgICAgc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jIFwKZGlmZiAtLWdpdCBhL2RvYy9zZXJ2aWNlX2NvbmZpZy5tZCBiL2RvYy9zZXJ2aWNlX2NvbmZpZy5tZAppbmRleCA3MzE4YjY5Li4yZGFiYjgzIDEwMDY0NAotLS0gYS9kb2Mvc2VydmljZV9jb25maWcubWQKKysrIGIvZG9jL3NlcnZpY2VfY29uZmlnLm1kCkBAIC05NSwxMCArOTUsNyBAQAogICAgICAgIyB3aWxsIG5vdCBiZSBzZW50IGFuZCB0aGUgY2xpZW50IHdpbGwgc2VlIGFuIGVycm9yLgogICAgICAgIyBOb3RlIHRoYXQgMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFuaW5nIHRoYXQgdGhlIHJlcXVlc3QgbWVzc2FnZSBtdXN0CiAgICAgICAjIGJlIGVtcHR5LgotICAgICAgIwotICAgICAgIyBUaGUgZm9ybWF0IG9mIHRoZSB2YWx1ZSBpcyB0aGF0IG9mIHRoZSAndWludDY0JyB0eXBlIGRlZmluZWQgaGVyZToKLSAgICAgICMgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uCi0gICAgICAnbWF4UmVxdWVzdE1lc3NhZ2VCeXRlcyc6IHN0cmluZywKKyAgICAgICdtYXhSZXF1ZXN0TWVzc2FnZUJ5dGVzJzogbnVtYmVyLAogCiAgICAgICAjIFRoZSBtYXhpbXVtIGFsbG93ZWQgcGF5bG9hZCBzaXplIGZvciBhbiBpbmRpdmlkdWFsIHJlc3BvbnNlIG9yIG9iamVjdAogICAgICAgIyBpbiBhIHN0cmVhbSAoc2VydmVyLT5jbGllbnQpIGluIGJ5dGVzLiBUaGUgc2l6ZSB3aGljaCBpcyBtZWFzdXJlZCBpcwpAQCAtMTE0LDEwICsxMTEsNyBAQAogICAgICAgIyB3aWxsIG5vdCBiZSBzZW50LCBhbmQgdGhlIGNsaWVudCB3aWxsIHNlZSBhbiBlcnJvci4KICAgICAgICMgTm90ZSB0aGF0IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbmluZyB0aGF0IHRoZSByZXNwb25zZSBtZXNzYWdlIG11c3QKICAgICAgICMgYmUgZW1wdHkuCi0gICAgICAjCi0gICAgICAjIFRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzIHRoYXQgb2YgdGhlICd1aW50NjQnIHR5cGUgZGVmaW5lZCBoZXJlOgotICAgICAgIyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb24KLSAgICAgICdtYXhSZXNwb25zZU1lc3NhZ2VCeXRlcyc6IHN0cmluZworICAgICAgJ21heFJlc3BvbnNlTWVzc2FnZUJ5dGVzJzogbnVtYmVyCiAgICAgfQogICBdCiB9CmRpZmYgLS1naXQgYS9nUlBDLUNvcmUucG9kc3BlYyBiL2dSUEMtQ29yZS5wb2RzcGVjCmluZGV4IGQ5ZDBmMTAuLjM5ZTBjMzQgMTAwNjQ0Ci0tLSBhL2dSUEMtQ29yZS5wb2RzcGVjCisrKyBiL2dSUEMtQ29yZS5wb2RzcGVjCkBAIC0yNzQsNiArMjc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2VuZHBvaW50LmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnRfcGFpci5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmgnLAorICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvaW9tZ3IvZXJyb3JfaW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2V2X3BvbGxfcG9zaXguaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9pb21nci9ldl9wb3NpeC5oJywKQEAgLTMyNiw2ICszMjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvanNvbi9qc29uX3JlYWRlci5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2pzb24vanNvbl93cml0ZXIuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmgnLAorICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5oJywKQEAgLTMzOSwxNCArMzQxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zdXJmYWNlL2luaXQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zdXJmYWNlL2xhbWVfY2xpZW50LmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc3VyZmFjZS9zZXJ2ZXIuaCcsCisgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5oJywKLSAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmgnLAorICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmgnLAorICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9waWRfY29udHJvbGxlci5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCcsCisgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X2ltcGwuaCcsCkBAIC0zNjMsMTEgKzM2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfdGFibGUuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL2FscG4vYWxwbi5oJywKQEAgLTUyMCw2ICs1MjMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMnLAorICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jJywKKyAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybi5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMnLAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc3VyZmFjZS9hbGFybS5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmMnLApAQCAtNTQxLDEyICs1NDYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9ieXRlX3N0cmVhbS5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jJywKKyAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9waWRfY29udHJvbGxlci5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYycsCisgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYycsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYycsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jJywKQEAgLTU2Nyw3ICs1NzMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuYycsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3BhcnNpbmcuYycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jJywKICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuYycsCiAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuYycsCkBAIC02OTIsNiArNjk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2VuZHBvaW50X3BhaXIuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvaW9tZ3IvZXZfZXBvbGxfbGludXguaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2V2X3BvbGxfcG9zaXguaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2lvbWdyL2V2X3Bvc2l4LmgnLApAQCAtNzQ0LDYgKzc1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2pzb24vanNvbl9yZWFkZXIuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL2pzb24vanNvbl93cml0ZXIuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuaCcsCkBAIC03NTcsMTQgKzc2NCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zdXJmYWNlL2luaXQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvbGFtZV9jbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3N1cmZhY2Uvc2VydmVyLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9pbXBsLmgnLApAQCAtNzgxLDExICs3OTEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19wYXJzZXIuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3RhYmxlLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvYWxwbi9hbHBuLmgnLApkaWZmIC0tZ2l0IGEvZ3JwYy5kZWYgYi9ncnBjLmRlZgppbmRleCBmZjg1NmU3Li41ZWY1OWFiIDEwMDY0NAotLS0gYS9ncnBjLmRlZgorKysgYi9ncnBjLmRlZgpAQCAtMTQxLDE3ICsxNDEsMzAgQEAKICAgICBncnBjX3NsaWNlX25ld193aXRoX3VzZXJfZGF0YQogICAgIGdycGNfc2xpY2VfbmV3X3dpdGhfbGVuCiAgICAgZ3JwY19zbGljZV9tYWxsb2MKKyAgICBncnBjX3NsaWNlX2ludGVybgogICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nCiAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIKICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZworICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyCiAgICAgZ3JwY19zbGljZV9zdWIKICAgICBncnBjX3NsaWNlX3N1Yl9ub19yZWYKICAgICBncnBjX3NsaWNlX3NwbGl0X3RhaWwKICAgICBncnBjX3NsaWNlX3NwbGl0X2hlYWQKLSAgICBncHJfZW1wdHlfc2xpY2UKKyAgICBncnBjX2VtcHR5X3NsaWNlCisgICAgZ3JwY19zbGljZV9kZWZhdWx0X2hhc2hfaW1wbAorICAgIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsCisgICAgZ3JwY19zbGljZV9lcQogICAgIGdycGNfc2xpY2VfY21wCiAgICAgZ3JwY19zbGljZV9zdHJfY21wCisgICAgZ3JwY19zbGljZV9idWZfY21wCisgICAgZ3JwY19zbGljZV9idWZfc3RhcnRfZXEKKyAgICBncnBjX3NsaWNlX3JjaHIKKyAgICBncnBjX3NsaWNlX2NocgorICAgIGdycGNfc2xpY2Vfc2xpY2UKKyAgICBncnBjX3NsaWNlX2hhc2gKICAgICBncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnQKKyAgICBncnBjX3NsaWNlX2R1cAorICAgIGdycGNfc2xpY2VfdG9fY19zdHJpbmcKICAgICBncnBjX3NsaWNlX2J1ZmZlcl9pbml0CiAgICAgZ3JwY19zbGljZV9idWZmZXJfZGVzdHJveQogICAgIGdycGNfc2xpY2VfYnVmZmVyX2FkZApkaWZmIC0tZ2l0IGEvZ3JwYy5nZW1zcGVjIGIvZ3JwYy5nZW1zcGVjCmluZGV4IDJkODQ2ODIuLjg3NGFmNmIgMTAwNzU1Ci0tLSBhL2dycGMuZ2Vtc3BlYworKysgYi9ncnBjLmdlbXNwZWMKQEAgLTE5MSw2ICsxOTEsNyBAQAogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnQuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9pb21nci9lbmRwb2ludF9wYWlyLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaCApCisgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL2lvbWdyL2V2X2Vwb2xsX2xpbnV4LmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9sbF9wb3NpeC5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL2lvbWdyL2V2X3Bvc2l4LmggKQpAQCAtMjQzLDYgKzI0NCw3IEBACiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9qc29uL2pzb25fcmVhZGVyLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvanNvbi9qc29uX3dyaXRlci5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuaCApCisgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmggKQpAQCAtMjU2LDE0ICsyNTgsMTcgQEAKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3N1cmZhY2UvaW5pdC5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3N1cmZhY2UvbGFtZV9jbGllbnQuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5oICkKKyAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3N1cmZhY2UvdmFsaWRhdGVfbWV0YWRhdGEuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmggKQotICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuaCApCisgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuaCApCisgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oICkKKyAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfaW1wbC5oICkKQEAgLTI4MCwxMSArMjg1LDkgQEAKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX2VuY29kZXIuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19wYXJzZXIuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oICkKLSAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuaCApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbnRlcm5hbC5oICkKLSAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmggKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5oICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvYWxwbi9hbHBuLmggKQpAQCAtNDM3LDYgKzQ0MCw4IEBACiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYyApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9idWZmZXIuYyApCisgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMgKQorICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuYyApCiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2xpYi9zdXJmYWNlL2FsYXJtLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYyApCkBAIC00NTgsMTIgKzQ2MywxMyBAQAogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvc3VyZmFjZS92ZXJzaW9uLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jICkKLSAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmMgKQorICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5jICkKKyAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5jICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMgKQpAQCAtNDg0LDcgKzQ5MCw2IEBACiAgIHMuZmlsZXMgKz0gJXcoIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jICkKLSAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX2xpc3RzLmMgKQogICBzLmZpbGVzICs9ICV3KCBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5jICkKICAgcy5maWxlcyArPSAldyggc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jYWxsLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vY2FsbC5oCmluZGV4IDZhYjAwNjEuLmExN2NkZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jYWxsLmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NhbGwuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vY29uZmlnLmg+CiAjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9jb3JlX2NvZGVnZW5faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9zZXJpYWxpemF0aW9uX3RyYWl0cy5oPgorI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vc2xpY2UuaD4KICNpbmNsdWRlIDxncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1cy5oPgogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2hlbHBlci5oPgogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vc3RyaW5nX3JlZi5oPgpAQCAtNjIsMTkgKzYzLDYgQEAKIGNsYXNzIENvbXBsZXRpb25RdWV1ZTsKIGV4dGVybiBDb3JlQ29kZWdlbkludGVyZmFjZSogZ19jb3JlX2NvZGVnZW5faW50ZXJmYWNlOwogCi1pbmxpbmUgdm9pZCBGaWxsTWV0YWRhdGFNYXAoCi0gICAgZ3JwY19tZXRhZGF0YV9hcnJheSogYXJyLAotICAgIHN0ZDo6bXVsdGltYXA8Z3JwYzo6c3RyaW5nX3JlZiwgZ3JwYzo6c3RyaW5nX3JlZj4qIG1ldGFkYXRhKSB7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyLT5jb3VudDsgaSsrKSB7Ci0gICAgLy8gVE9ETyh5YW5nZykgaGFuZGxlIGR1cGxpY2F0ZXM/Ci0gICAgbWV0YWRhdGEtPmluc2VydChzdGQ6OnBhaXI8Z3JwYzo6c3RyaW5nX3JlZiwgZ3JwYzo6c3RyaW5nX3JlZj4oCi0gICAgICAgIGFyci0+bWV0YWRhdGFbaV0ua2V5LCBncnBjOjpzdHJpbmdfcmVmKGFyci0+bWV0YWRhdGFbaV0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci0+bWV0YWRhdGFbaV0udmFsdWVfbGVuZ3RoKSkpOwotICB9Ci0gIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KGFycik7Ci0gIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3JwY19tZXRhZGF0YV9hcnJheV9pbml0KGFycik7Ci19Ci0KIC8vIFRPRE8oeWFuZ2cpIGlmIHRoZSBtYXAgaXMgY2hhbmdlZCBiZWZvcmUgd2Ugc2VuZCwgdGhlIHBvaW50ZXJzIHdpbGwgYmUgYQogLy8gbWVzcy4gTWFrZSBzdXJlIGl0IGRvZXMgbm90IGhhcHBlbi4KIGlubGluZSBncnBjX21ldGFkYXRhKiBGaWxsTWV0YWRhdGFBcnJheSgKQEAgLTg3LDkgKzc1LDggQEAKICAgICAgICAgICBtZXRhZGF0YS5zaXplKCkgKiBzaXplb2YoZ3JwY19tZXRhZGF0YSkpKTsKICAgc2l6ZV90IGkgPSAwOwogICBmb3IgKGF1dG8gaXRlciA9IG1ldGFkYXRhLmNiZWdpbigpOyBpdGVyICE9IG1ldGFkYXRhLmNlbmQoKTsgKytpdGVyLCArK2kpIHsKLSAgICBtZXRhZGF0YV9hcnJheVtpXS5rZXkgPSBpdGVyLT5maXJzdC5jX3N0cigpOwotICAgIG1ldGFkYXRhX2FycmF5W2ldLnZhbHVlID0gaXRlci0+c2Vjb25kLmNfc3RyKCk7Ci0gICAgbWV0YWRhdGFfYXJyYXlbaV0udmFsdWVfbGVuZ3RoID0gaXRlci0+c2Vjb25kLnNpemUoKTsKKyAgICBtZXRhZGF0YV9hcnJheVtpXS5rZXkgPSBTbGljZVJlZmVyZW5jaW5nU3RyaW5nKGl0ZXItPmZpcnN0KTsKKyAgICBtZXRhZGF0YV9hcnJheVtpXS52YWx1ZSA9IFNsaWNlUmVmZXJlbmNpbmdTdHJpbmcoaXRlci0+c2Vjb25kKTsKICAgfQogICByZXR1cm4gbWV0YWRhdGFfYXJyYXk7CiB9CkBAIC0xNzUsNyArMTYyLDcgQEAKIGNsYXNzIENhbGxOb09wIHsKICBwcm90ZWN0ZWQ6CiAgIHZvaWQgQWRkT3AoZ3JwY19vcCogb3BzLCBzaXplX3QqIG5vcHMpIHt9Ci0gIHZvaWQgRmluaXNoT3AoYm9vbCogc3RhdHVzLCBpbnQgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKSB7fQorICB2b2lkIEZpbmlzaE9wKGJvb2wqIHN0YXR1cykge30KIH07CiAKIGNsYXNzIENhbGxPcFNlbmRJbml0aWFsTWV0YWRhdGEgewpAQCAtMjEzLDcgKzIwMCw3IEBACiAgICAgb3AtPmRhdGEuc2VuZF9pbml0aWFsX21ldGFkYXRhLm1heWJlX2NvbXByZXNzaW9uX2xldmVsLmxldmVsID0KICAgICAgICAgbWF5YmVfY29tcHJlc3Npb25fbGV2ZWxfLmxldmVsOwogICB9Ci0gIHZvaWQgRmluaXNoT3AoYm9vbCogc3RhdHVzLCBpbnQgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKSB7CisgIHZvaWQgRmluaXNoT3AoYm9vbCogc3RhdHVzKSB7CiAgICAgaWYgKCFzZW5kXykgcmV0dXJuOwogICAgIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3ByX2ZyZWUoaW5pdGlhbF9tZXRhZGF0YV8pOwogICAgIHNlbmRfID0gZmFsc2U7CkBAIC0yNDksMTEgKzIzNiwxMSBAQAogICAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwogICAgIG9wLT5mbGFncyA9IHdyaXRlX29wdGlvbnNfLmZsYWdzKCk7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKLSAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSBzZW5kX2J1Zl87CisgICAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHNlbmRfYnVmXzsKICAgICAvLyBGbGFncyBhcmUgcGVyLW1lc3NhZ2U6IGNsZWFyIHRoZW0gYWZ0ZXIgdXNlLgogICAgIHdyaXRlX29wdGlvbnNfLkNsZWFyKCk7CiAgIH0KLSAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMsIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsKKyAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMpIHsKICAgICBpZiAob3duX2J1Zl8pIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHNlbmRfYnVmXyk7CiAgICAgc2VuZF9idWZfID0gbnVsbHB0cjsKICAgfQpAQCAtMjk4LDE3ICsyODUsMTUgQEAKICAgICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7Ci0gICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlY3ZfYnVmXzsKKyAgICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlY3ZfYnVmXzsKICAgfQogCi0gIHZvaWQgRmluaXNoT3AoYm9vbCogc3RhdHVzLCBpbnQgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKSB7CisgIHZvaWQgRmluaXNoT3AoYm9vbCogc3RhdHVzKSB7CiAgICAgaWYgKG1lc3NhZ2VfID09IG51bGxwdHIpIHJldHVybjsKICAgICBpZiAocmVjdl9idWZfKSB7CiAgICAgICBpZiAoKnN0YXR1cykgewogICAgICAgICBnb3RfbWVzc2FnZSA9ICpzdGF0dXMgPQotICAgICAgICAgICAgU2VyaWFsaXphdGlvblRyYWl0czxSPjo6RGVzZXJpYWxpemUocmVjdl9idWZfLCBtZXNzYWdlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSkKLSAgICAgICAgICAgICAgICAub2soKTsKKyAgICAgICAgICAgIFNlcmlhbGl6YXRpb25UcmFpdHM8Uj46OkRlc2VyaWFsaXplKHJlY3ZfYnVmXywgbWVzc2FnZV8pLm9rKCk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBnb3RfbWVzc2FnZSA9IGZhbHNlOwogICAgICAgICBnX2NvcmVfY29kZWdlbl9pbnRlcmZhY2UtPmdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZWN2X2J1Zl8pOwpAQCAtMzMxLDggKzMxNiw3IEBACiBuYW1lc3BhY2UgQ2FsbE9wR2VuZXJpY1JlY3ZNZXNzYWdlSGVscGVyIHsKIGNsYXNzIERlc2VyaWFsaXplRnVuYyB7CiAgcHVibGljOgotICB2aXJ0dWFsIFN0YXR1cyBEZXNlcmlhbGl6ZShncnBjX2J5dGVfYnVmZmVyKiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpID0gMDsKKyAgdmlydHVhbCBTdGF0dXMgRGVzZXJpYWxpemUoZ3JwY19ieXRlX2J1ZmZlciogYnVmKSA9IDA7CiAgIHZpcnR1YWwgfkRlc2VyaWFsaXplRnVuYygpIHt9CiB9OwogCkBAIC0zNDAsMTAgKzMyNCw4IEBACiBjbGFzcyBEZXNlcmlhbGl6ZUZ1bmNUeXBlIGZpbmFsIDogcHVibGljIERlc2VyaWFsaXplRnVuYyB7CiAgcHVibGljOgogICBEZXNlcmlhbGl6ZUZ1bmNUeXBlKFIqIG1lc3NhZ2UpIDogbWVzc2FnZV8obWVzc2FnZSkge30KLSAgU3RhdHVzIERlc2VyaWFsaXplKGdycGNfYnl0ZV9idWZmZXIqIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIG92ZXJyaWRlIHsKLSAgICByZXR1cm4gU2VyaWFsaXphdGlvblRyYWl0czxSPjo6RGVzZXJpYWxpemUoYnVmLCBtZXNzYWdlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKTsKKyAgU3RhdHVzIERlc2VyaWFsaXplKGdycGNfYnl0ZV9idWZmZXIqIGJ1Zikgb3ZlcnJpZGUgeworICAgIHJldHVybiBTZXJpYWxpemF0aW9uVHJhaXRzPFI+OjpEZXNlcmlhbGl6ZShidWYsIG1lc3NhZ2VfKTsKICAgfQogCiAgIH5EZXNlcmlhbGl6ZUZ1bmNUeXBlKCkgb3ZlcnJpZGUge30KQEAgLTM3OSwxNiArMzYxLDE1IEBACiAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwotICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZWN2X2J1Zl87CisgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZWN2X2J1Zl87CiAgIH0KIAotICB2b2lkIEZpbmlzaE9wKGJvb2wqIHN0YXR1cywgaW50IG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSkgeworICB2b2lkIEZpbmlzaE9wKGJvb2wqIHN0YXR1cykgewogICAgIGlmICghZGVzZXJpYWxpemVfKSByZXR1cm47CiAgICAgaWYgKHJlY3ZfYnVmXykgewogICAgICAgaWYgKCpzdGF0dXMpIHsKICAgICAgICAgZ290X21lc3NhZ2UgPSB0cnVlOwotICAgICAgICAqc3RhdHVzID0KLSAgICAgICAgICAgIGRlc2VyaWFsaXplXy0+RGVzZXJpYWxpemUocmVjdl9idWZfLCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpLm9rKCk7CisgICAgICAgICpzdGF0dXMgPSBkZXNlcmlhbGl6ZV8tPkRlc2VyaWFsaXplKHJlY3ZfYnVmXykub2soKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGdvdF9tZXNzYWdlID0gZmFsc2U7CiAgICAgICAgIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlY3ZfYnVmXyk7CkBAIC00MjIsNyArNDAzLDcgQEAKICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIH0KLSAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMsIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsgc2VuZF8gPSBmYWxzZTsgfQorICB2b2lkIEZpbmlzaE9wKGJvb2wqIHN0YXR1cykgeyBzZW5kXyA9IGZhbHNlOyB9CiAKICBwcml2YXRlOgogICBib29sIHNlbmRfOwpAQCAtNDUxLDEzICs0MzIsMTQgQEAKICAgICAgICAgdHJhaWxpbmdfbWV0YWRhdGFfY291bnRfOwogICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhID0gdHJhaWxpbmdfbWV0YWRhdGFfOwogICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IHNlbmRfc3RhdHVzX2NvZGVfOworICAgIHN0YXR1c19kZXRhaWxzX3NsaWNlXyA9IFNsaWNlUmVmZXJlbmNpbmdTdHJpbmcoc2VuZF9zdGF0dXNfZGV0YWlsc18pOwogICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0KLSAgICAgICAgc2VuZF9zdGF0dXNfZGV0YWlsc18uZW1wdHkoKSA/IG51bGxwdHIgOiBzZW5kX3N0YXR1c19kZXRhaWxzXy5jX3N0cigpOworICAgICAgICBzZW5kX3N0YXR1c19kZXRhaWxzXy5lbXB0eSgpID8gbnVsbHB0ciA6ICZzdGF0dXNfZGV0YWlsc19zbGljZV87CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICB9CiAKLSAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMsIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsKKyAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMpIHsKICAgICBpZiAoIXNlbmRfc3RhdHVzX2F2YWlsYWJsZV8pIHJldHVybjsKICAgICBnX2NvcmVfY29kZWdlbl9pbnRlcmZhY2UtPmdwcl9mcmVlKHRyYWlsaW5nX21ldGFkYXRhXyk7CiAgICAgc2VuZF9zdGF0dXNfYXZhaWxhYmxlXyA9IGZhbHNlOwpAQCAtNDY5LDM2ICs0NTEsMzYgQEAKICAgZ3JwYzo6c3RyaW5nIHNlbmRfc3RhdHVzX2RldGFpbHNfOwogICBzaXplX3QgdHJhaWxpbmdfbWV0YWRhdGFfY291bnRfOwogICBncnBjX21ldGFkYXRhKiB0cmFpbGluZ19tZXRhZGF0YV87CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHNfc2xpY2VfOwogfTsKIAogY2xhc3MgQ2FsbE9wUmVjdkluaXRpYWxNZXRhZGF0YSB7CiAgcHVibGljOgotICBDYWxsT3BSZWN2SW5pdGlhbE1ldGFkYXRhKCkgOiByZWN2X2luaXRpYWxfbWV0YWRhdGFfKG51bGxwdHIpIHt9CisgIENhbGxPcFJlY3ZJbml0aWFsTWV0YWRhdGEoKSA6IG1ldGFkYXRhX21hcF8obnVsbHB0cikge30KIAogICB2b2lkIFJlY3ZJbml0aWFsTWV0YWRhdGEoQ2xpZW50Q29udGV4dCogY29udGV4dCkgewogICAgIGNvbnRleHQtPmluaXRpYWxfbWV0YWRhdGFfcmVjZWl2ZWRfID0gdHJ1ZTsKLSAgICByZWN2X2luaXRpYWxfbWV0YWRhdGFfID0gJmNvbnRleHQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YV87CisgICAgbWV0YWRhdGFfbWFwXyA9ICZjb250ZXh0LT5yZWN2X2luaXRpYWxfbWV0YWRhdGFfOwogICB9CiAKICBwcm90ZWN0ZWQ6CiAgIHZvaWQgQWRkT3AoZ3JwY19vcCogb3BzLCBzaXplX3QqIG5vcHMpIHsKLSAgICBpZiAoIXJlY3ZfaW5pdGlhbF9tZXRhZGF0YV8pIHJldHVybjsKLSAgICBtZW1zZXQoJnJlY3ZfaW5pdGlhbF9tZXRhZGF0YV9hcnJfLCAwLCBzaXplb2YocmVjdl9pbml0aWFsX21ldGFkYXRhX2Fycl8pKTsKKyAgICBpZiAobWV0YWRhdGFfbWFwXyA9PSBudWxscHRyKSByZXR1cm47CiAgICAgZ3JwY19vcCogb3AgPSAmb3BzWygqbm9wcykrK107CiAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gICAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJnJlY3ZfaW5pdGlhbF9tZXRhZGF0YV9hcnJfOworICAgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSBtZXRhZGF0YV9tYXBfLT5hcnIoKTsKICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIH0KLSAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMsIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsKLSAgICBpZiAocmVjdl9pbml0aWFsX21ldGFkYXRhXyA9PSBudWxscHRyKSByZXR1cm47Ci0gICAgRmlsbE1ldGFkYXRhTWFwKCZyZWN2X2luaXRpYWxfbWV0YWRhdGFfYXJyXywgcmVjdl9pbml0aWFsX21ldGFkYXRhXyk7Ci0gICAgcmVjdl9pbml0aWFsX21ldGFkYXRhXyA9IG51bGxwdHI7CisKKyAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMpIHsKKyAgICBpZiAobWV0YWRhdGFfbWFwXyA9PSBudWxscHRyKSByZXR1cm47CisgICAgbWV0YWRhdGFfbWFwXy0+RmlsbE1hcCgpOworICAgIG1ldGFkYXRhX21hcF8gPSBudWxscHRyOwogICB9CiAKICBwcml2YXRlOgotICBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+KiByZWN2X2luaXRpYWxfbWV0YWRhdGFfOwotICBncnBjX21ldGFkYXRhX2FycmF5IHJlY3ZfaW5pdGlhbF9tZXRhZGF0YV9hcnJfOworICBNZXRhZGF0YU1hcCogbWV0YWRhdGFfbWFwXzsKIH07CiAKIGNsYXNzIENhbGxPcENsaWVudFJlY3ZTdGF0dXMgewpAQCAtNTA2LDQ2ICs0ODgsMzcgQEAKICAgQ2FsbE9wQ2xpZW50UmVjdlN0YXR1cygpIDogcmVjdl9zdGF0dXNfKG51bGxwdHIpIHt9CiAKICAgdm9pZCBDbGllbnRSZWN2U3RhdHVzKENsaWVudENvbnRleHQqIGNvbnRleHQsIFN0YXR1cyogc3RhdHVzKSB7Ci0gICAgcmVjdl90cmFpbGluZ19tZXRhZGF0YV8gPSAmY29udGV4dC0+dHJhaWxpbmdfbWV0YWRhdGFfOworICAgIG1ldGFkYXRhX21hcF8gPSAmY29udGV4dC0+dHJhaWxpbmdfbWV0YWRhdGFfOwogICAgIHJlY3Zfc3RhdHVzXyA9IHN0YXR1czsKICAgfQogCiAgcHJvdGVjdGVkOgogICB2b2lkIEFkZE9wKGdycGNfb3AqIG9wcywgc2l6ZV90KiBub3BzKSB7CiAgICAgaWYgKHJlY3Zfc3RhdHVzXyA9PSBudWxscHRyKSByZXR1cm47Ci0gICAgbWVtc2V0KCZyZWN2X3RyYWlsaW5nX21ldGFkYXRhX2Fycl8sIDAsCi0gICAgICAgICAgIHNpemVvZihyZWN2X3RyYWlsaW5nX21ldGFkYXRhX2Fycl8pKTsKLSAgICBzdGF0dXNfZGV0YWlsc18gPSBudWxscHRyOwotICAgIHN0YXR1c19kZXRhaWxzX2NhcGFjaXR5XyA9IDA7CiAgICAgZ3JwY19vcCogb3AgPSAmb3BzWygqbm9wcykrK107CiAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ7Ci0gICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0KLSAgICAgICAgJnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGFfYXJyXzsKKyAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSBtZXRhZGF0YV9tYXBfLT5hcnIoKTsKICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1c19jb2RlXzsKICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHNfOwotICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9Ci0gICAgICAgICZzdGF0dXNfZGV0YWlsc19jYXBhY2l0eV87CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICB9CiAKLSAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMsIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsKKyAgdm9pZCBGaW5pc2hPcChib29sKiBzdGF0dXMpIHsKICAgICBpZiAocmVjdl9zdGF0dXNfID09IG51bGxwdHIpIHJldHVybjsKLSAgICBGaWxsTWV0YWRhdGFNYXAoJnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGFfYXJyXywgcmVjdl90cmFpbGluZ19tZXRhZGF0YV8pOwotICAgICpyZWN2X3N0YXR1c18gPSBTdGF0dXMoCi0gICAgICAgIHN0YXRpY19jYXN0PFN0YXR1c0NvZGU+KHN0YXR1c19jb2RlXyksCi0gICAgICAgIHN0YXR1c19kZXRhaWxzXyA/IGdycGM6OnN0cmluZyhzdGF0dXNfZGV0YWlsc18pIDogZ3JwYzo6c3RyaW5nKCkpOwotICAgIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3ByX2ZyZWUoc3RhdHVzX2RldGFpbHNfKTsKKyAgICBtZXRhZGF0YV9tYXBfLT5GaWxsTWFwKCk7CisgICAgKnJlY3Zfc3RhdHVzXyA9IFN0YXR1cyhzdGF0aWNfY2FzdDxTdGF0dXNDb2RlPihzdGF0dXNfY29kZV8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwYzo6c3RyaW5nKEdSUENfU0xJQ0VfU1RBUlRfUFRSKHN0YXR1c19kZXRhaWxzXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TTElDRV9FTkRfUFRSKHN0YXR1c19kZXRhaWxzXykpKTsKKyAgICBnX2NvcmVfY29kZWdlbl9pbnRlcmZhY2UtPmdycGNfc2xpY2VfdW5yZWYoc3RhdHVzX2RldGFpbHNfKTsKICAgICByZWN2X3N0YXR1c18gPSBudWxscHRyOwogICB9CiAKICBwcml2YXRlOgotICBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+KiByZWN2X3RyYWlsaW5nX21ldGFkYXRhXzsKKyAgTWV0YWRhdGFNYXAqIG1ldGFkYXRhX21hcF87CiAgIFN0YXR1cyogcmVjdl9zdGF0dXNfOwotICBncnBjX21ldGFkYXRhX2FycmF5IHJlY3ZfdHJhaWxpbmdfbWV0YWRhdGFfYXJyXzsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXNfY29kZV87Ci0gIGNoYXIqIHN0YXR1c19kZXRhaWxzXzsKLSAgc2l6ZV90IHN0YXR1c19kZXRhaWxzX2NhcGFjaXR5XzsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlsc187CiB9OwogCiAvLy8gQW4gYWJzdHJhY3QgY29sbGVjdGlvbiBvZiBDYWxsT3BTZXQncywgdG8gYmUgdXNlZCB3aGVuZXZlcgpAQCAtNTY2LDIyICs1MzksMTcgQEAKIC8vLyBBUEkuCiBjbGFzcyBDYWxsT3BTZXRJbnRlcmZhY2UgOiBwdWJsaWMgQ29tcGxldGlvblF1ZXVlVGFnIHsKICBwdWJsaWM6Ci0gIENhbGxPcFNldEludGVyZmFjZSgpIDogbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplXygwKSB7fQorICBDYWxsT3BTZXRJbnRlcmZhY2UoKSB7fQogICAvLy8gRmlsbHMgaW4gZ3JwY19vcCwgc3RhcnRpbmcgZnJvbSBvcHNbKm5vcHNdIGFuZCBtb3ZpbmcKICAgLy8vIHVwd2FyZHMuCiAgIHZpcnR1YWwgdm9pZCBGaWxsT3BzKGdycGNfb3AqIG9wcywgc2l6ZV90KiBub3BzKSA9IDA7CiAKLSAgdm9pZCBzZXRfbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsKLSAgICBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfID0gbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplOwotICB9Ci0KICAgLy8vIE1hcmsgdGhpcyBhcyBiZWxvbmdpbmcgdG8gYSBjb2xsZWN0aW9uIGlmIG5lZWRlZAogICB2b2lkIFNldENvbGxlY3Rpb24oc3RkOjpzaGFyZWRfcHRyPENhbGxPcFNldENvbGxlY3Rpb25JbnRlcmZhY2U+IGNvbGxlY3Rpb24pIHsKICAgICBjb2xsZWN0aW9uXyA9IGNvbGxlY3Rpb247CiAgIH0KIAogIHByb3RlY3RlZDoKLSAgaW50IG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZV87CiAgIHN0ZDo6c2hhcmVkX3B0cjxDYWxsT3BTZXRDb2xsZWN0aW9uSW50ZXJmYWNlPiBjb2xsZWN0aW9uXzsKIH07CiAKQEAgLTYxMywxMiArNTgxLDEyIEBACiAgIH0KIAogICBib29sIEZpbmFsaXplUmVzdWx0KHZvaWQqKiB0YWcsIGJvb2wqIHN0YXR1cykgb3ZlcnJpZGUgewotICAgIHRoaXMtPk9wMTo6RmluaXNoT3Aoc3RhdHVzLCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfKTsKLSAgICB0aGlzLT5PcDI6OkZpbmlzaE9wKHN0YXR1cywgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplXyk7Ci0gICAgdGhpcy0+T3AzOjpGaW5pc2hPcChzdGF0dXMsIG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZV8pOwotICAgIHRoaXMtPk9wNDo6RmluaXNoT3Aoc3RhdHVzLCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfKTsKLSAgICB0aGlzLT5PcDU6OkZpbmlzaE9wKHN0YXR1cywgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplXyk7Ci0gICAgdGhpcy0+T3A2OjpGaW5pc2hPcChzdGF0dXMsIG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZV8pOworICAgIHRoaXMtPk9wMTo6RmluaXNoT3Aoc3RhdHVzKTsKKyAgICB0aGlzLT5PcDI6OkZpbmlzaE9wKHN0YXR1cyk7CisgICAgdGhpcy0+T3AzOjpGaW5pc2hPcChzdGF0dXMpOworICAgIHRoaXMtPk9wNDo6RmluaXNoT3Aoc3RhdHVzKTsKKyAgICB0aGlzLT5PcDU6OkZpbmlzaE9wKHN0YXR1cyk7CisgICAgdGhpcy0+T3A2OjpGaW5pc2hPcChzdGF0dXMpOwogICAgICp0YWcgPSByZXR1cm5fdGFnXzsKICAgICBjb2xsZWN0aW9uXy5yZXNldCgpOyAgLy8gZHJvcCB0aGUgcmVmIGF0IHRoaXMgcG9pbnQKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1MCwzNSArNjE4LDE5IEBACiAgcHVibGljOgogICAvKiBjYWxsIGlzIG93bmVkIGJ5IHRoZSBjYWxsZXIgKi8KICAgQ2FsbChncnBjX2NhbGwqIGNhbGwsIENhbGxIb29rKiBjYWxsX2hvb2ssIENvbXBsZXRpb25RdWV1ZSogY3EpCi0gICAgICA6IGNhbGxfaG9va18oY2FsbF9ob29rKSwKLSAgICAgICAgY3FfKGNxKSwKLSAgICAgICAgY2FsbF8oY2FsbCksCi0gICAgICAgIG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZV8oLTEpIHt9Ci0KLSAgQ2FsbChncnBjX2NhbGwqIGNhbGwsIENhbGxIb29rKiBjYWxsX2hvb2ssIENvbXBsZXRpb25RdWV1ZSogY3EsCi0gICAgICAgaW50IG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSkKLSAgICAgIDogY2FsbF9ob29rXyhjYWxsX2hvb2spLAotICAgICAgICBjcV8oY3EpLAotICAgICAgICBjYWxsXyhjYWxsKSwKLSAgICAgICAgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplXyhtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHt9CisgICAgICA6IGNhbGxfaG9va18oY2FsbF9ob29rKSwgY3FfKGNxKSwgY2FsbF8oY2FsbCkge30KIAogICB2b2lkIFBlcmZvcm1PcHMoQ2FsbE9wU2V0SW50ZXJmYWNlKiBvcHMpIHsKLSAgICBpZiAobWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplXyA+IDApIHsKLSAgICAgIG9wcy0+c2V0X21heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZShtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfKTsKLSAgICB9CiAgICAgY2FsbF9ob29rXy0+UGVyZm9ybU9wc09uQ2FsbChvcHMsIHRoaXMpOwogICB9CiAKICAgZ3JwY19jYWxsKiBjYWxsKCkgY29uc3QgeyByZXR1cm4gY2FsbF87IH0KICAgQ29tcGxldGlvblF1ZXVlKiBjcSgpIGNvbnN0IHsgcmV0dXJuIGNxXzsgfQogCi0gIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUoKSB7IHJldHVybiBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfOyB9Ci0KICBwcml2YXRlOgogICBDYWxsSG9vayogY2FsbF9ob29rXzsKICAgQ29tcGxldGlvblF1ZXVlKiBjcV87CiAgIGdycGNfY2FsbCogY2FsbF87Ci0gIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIGdycGMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jbGllbnRfY29udGV4dC5oIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NsaWVudF9jb250ZXh0LmgKaW5kZXggNzc3YjJmOC4uYjkxYzdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NsaWVudF9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NsaWVudF9jb250ZXh0LmgKQEAgLTU3LDcgKzU3LDkgQEAKICNpbmNsdWRlIDxncnBjKysvaW1wbC9jb2RlZ2VuL2NvbmZpZy5oPgogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vY29yZV9jb2RlZ2VuX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vY3JlYXRlX2F1dGhfY29udGV4dC5oPgorI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vbWV0YWRhdGFfbWFwLmg+CiAjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9zZWN1cml0eS9hdXRoX2NvbnRleHQuaD4KKyNpbmNsdWRlIDxncnBjKysvaW1wbC9jb2RlZ2VuL3NsaWNlLmg+CiAjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaD4KICNpbmNsdWRlIDxncnBjKysvaW1wbC9jb2RlZ2VuL3N0cmluZ19yZWYuaD4KICNpbmNsdWRlIDxncnBjKysvaW1wbC9jb2RlZ2VuL3RpbWUuaD4KQEAgLTE5Myw3ICsxOTUsNyBAQAogICBjb25zdCBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+JgogICBHZXRTZXJ2ZXJJbml0aWFsTWV0YWRhdGEoKSBjb25zdCB7CiAgICAgR1BSX0NPREVHRU5fQVNTRVJUKGluaXRpYWxfbWV0YWRhdGFfcmVjZWl2ZWRfKTsKLSAgICByZXR1cm4gcmVjdl9pbml0aWFsX21ldGFkYXRhXzsKKyAgICByZXR1cm4gKnJlY3ZfaW5pdGlhbF9tZXRhZGF0YV8ubWFwKCk7CiAgIH0KIAogICAvLy8gUmV0dXJuIGEgY29sbGVjdGlvbiBvZiB0cmFpbGluZyBtZXRhZGF0YSBrZXktdmFsdWUgcGFpcnMuIE5vdGUgdGhhdCBrZXlzCkBAIC0yMDUsNyArMjA3LDcgQEAKICAgY29uc3Qgc3RkOjptdWx0aW1hcDxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPiYKICAgR2V0U2VydmVyVHJhaWxpbmdNZXRhZGF0YSgpIGNvbnN0IHsKICAgICAvLyBUT0RPKHlhbmdnKSBjaGVjayBmaW5pc2hlZAotICAgIHJldHVybiB0cmFpbGluZ19tZXRhZGF0YV87CisgICAgcmV0dXJuICp0cmFpbGluZ19tZXRhZGF0YV8ubWFwKCk7CiAgIH0KIAogICAvLy8gU2V0IHRoZSBkZWFkbGluZSBmb3IgdGhlIGNsaWVudCBjYWxsLgpAQCAtMzc1LDggKzM3Nyw4IEBACiAgIG11dGFibGUgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEF1dGhDb250ZXh0PiBhdXRoX2NvbnRleHRfOwogICBzdHJ1Y3QgY2Vuc3VzX2NvbnRleHQqIGNlbnN1c19jb250ZXh0XzsKICAgc3RkOjptdWx0aW1hcDxncnBjOjpzdHJpbmcsIGdycGM6OnN0cmluZz4gc2VuZF9pbml0aWFsX21ldGFkYXRhXzsKLSAgc3RkOjptdWx0aW1hcDxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPiByZWN2X2luaXRpYWxfbWV0YWRhdGFfOwotICBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+IHRyYWlsaW5nX21ldGFkYXRhXzsKKyAgTWV0YWRhdGFNYXAgcmVjdl9pbml0aWFsX21ldGFkYXRhXzsKKyAgTWV0YWRhdGFNYXAgdHJhaWxpbmdfbWV0YWRhdGFfOwogCiAgIGdycGNfY2FsbCogcHJvcGFnYXRlX2Zyb21fY2FsbF87CiAgIFByb3BhZ2F0aW9uT3B0aW9ucyBwcm9wYWdhdGlvbl9vcHRpb25zXzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jbGllbnRfdW5hcnlfY2FsbC5oIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NsaWVudF91bmFyeV9jYWxsLmgKaW5kZXggNzBkNjU1NC4uMjAxZTUyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NsaWVudF91bmFyeV9jYWxsLmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NsaWVudF91bmFyeV9jYWxsLmgKQEAgLTY5LDcgKzY5LDE0IEBACiAgIG9wcy5DbGllbnRTZW5kQ2xvc2UoKTsKICAgb3BzLkNsaWVudFJlY3ZTdGF0dXMoY29udGV4dCwgJnN0YXR1cyk7CiAgIGNhbGwuUGVyZm9ybU9wcygmb3BzKTsKLSAgR1BSX0NPREVHRU5fQVNTRVJUKChjcS5QbHVjaygmb3BzKSAmJiBvcHMuZ290X21lc3NhZ2UpIHx8ICFzdGF0dXMub2soKSk7CisgIGlmIChjcS5QbHVjaygmb3BzKSkgeworICAgIGlmICghb3BzLmdvdF9tZXNzYWdlICYmIHN0YXR1cy5vaygpKSB7CisgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1c0NvZGU6OlVOSU1QTEVNRU5URUQsCisgICAgICAgICAgICAgICAgICAgICJObyBtZXNzYWdlIHJldHVybmVkIGZvciB1bmFyeSByZXF1ZXN0Iik7CisgICAgfQorICB9IGVsc2UgeworICAgIEdQUl9DT0RFR0VOX0FTU0VSVCghc3RhdHVzLm9rKCkpOworICB9CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jb3JlX2NvZGVnZW4uaCBiL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jb3JlX2NvZGVnZW4uaAppbmRleCA2YjVlNjM3Li43NTRiZjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vY29yZV9jb2RlZ2VuLmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NvcmVfY29kZWdlbi5oCkBAIC04MSw3ICs4MSwxMCBAQAogICBncnBjX3NsaWNlIGdycGNfc2xpY2Vfc3BsaXRfdGFpbChncnBjX3NsaWNlKiBzLCBzaXplX3Qgc3BsaXQpIG92ZXJyaWRlOwogICB2b2lkIGdycGNfc2xpY2VfYnVmZmVyX2FkZChncnBjX3NsaWNlX2J1ZmZlciogc2IsIGdycGNfc2xpY2Ugc2xpY2UpIG92ZXJyaWRlOwogICB2b2lkIGdycGNfc2xpY2VfYnVmZmVyX3BvcChncnBjX3NsaWNlX2J1ZmZlciogc2IpIG92ZXJyaWRlOwotCisgIGdycGNfc2xpY2UgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19idWZmZXIoY29uc3Qgdm9pZCogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpIG92ZXJyaWRlOworICBncnBjX3NsaWNlIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKGNvbnN0IHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSBvdmVycmlkZTsKICAgdm9pZCBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoZ3JwY19tZXRhZGF0YV9hcnJheSogYXJyYXkpIG92ZXJyaWRlOwogICB2b2lkIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveShncnBjX21ldGFkYXRhX2FycmF5KiBhcnJheSkgb3ZlcnJpZGU7CiAKQEAgLTkxLDcgKzk0LDggQEAKICAgdmlydHVhbCBjb25zdCBTdGF0dXMmIG9rKCkgb3ZlcnJpZGU7CiAgIHZpcnR1YWwgY29uc3QgU3RhdHVzJiBjYW5jZWxsZWQoKSBvdmVycmlkZTsKIAotICB2b2lkIGFzc2VydF9mYWlsKGNvbnN0IGNoYXIqIGZhaWxlZF9hc3NlcnRpb24pIG92ZXJyaWRlOworICB2b2lkIGFzc2VydF9mYWlsKGNvbnN0IGNoYXIqIGZhaWxlZF9hc3NlcnRpb24sIGNvbnN0IGNoYXIqIGZpbGUsCisgICAgICAgICAgICAgICAgICAgaW50IGxpbmUpIG92ZXJyaWRlOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIGdycGMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jb3JlX2NvZGVnZW5faW50ZXJmYWNlLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vY29yZV9jb2RlZ2VuX2ludGVyZmFjZS5oCmluZGV4IDQ3ODNhNDMuLjQ1ZWEwNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9jb3JlX2NvZGVnZW5faW50ZXJmYWNlLmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL2NvcmVfY29kZWdlbl9pbnRlcmZhY2UuaApAQCAtNTYsNyArNTYsOCBAQAogY2xhc3MgQ29yZUNvZGVnZW5JbnRlcmZhY2UgewogIHB1YmxpYzoKICAgLy8vIFVwb24gYSBmYWlsZWQgYXNzZXJ0aW9uLCBsb2cgdGhlIGVycm9yLgotICB2aXJ0dWFsIHZvaWQgYXNzZXJ0X2ZhaWwoY29uc3QgY2hhciogZmFpbGVkX2Fzc2VydGlvbikgPSAwOworICB2aXJ0dWFsIHZvaWQgYXNzZXJ0X2ZhaWwoY29uc3QgY2hhciogZmFpbGVkX2Fzc2VydGlvbiwgY29uc3QgY2hhciogZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lKSA9IDA7CiAKICAgdmlydHVhbCBncnBjX2NvbXBsZXRpb25fcXVldWUqIGdycGNfY29tcGxldGlvbl9xdWV1ZV9jcmVhdGUoCiAgICAgICB2b2lkKiByZXNlcnZlZCkgPSAwOwpAQCAtOTksNiArMTAwLDEwIEBACiAgIHZpcnR1YWwgdm9pZCBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoZ3JwY19zbGljZV9idWZmZXIqIHNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2Ugc2xpY2UpID0gMDsKICAgdmlydHVhbCB2b2lkIGdycGNfc2xpY2VfYnVmZmVyX3BvcChncnBjX3NsaWNlX2J1ZmZlciogc2IpID0gMDsKKyAgdmlydHVhbCBncnBjX3NsaWNlIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyKGNvbnN0IHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpID0gMDsKKyAgdmlydHVhbCBncnBjX3NsaWNlIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKGNvbnN0IHZvaWQqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpID0gMDsKIAogICB2aXJ0dWFsIHZvaWQgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KGdycGNfbWV0YWRhdGFfYXJyYXkqIGFycmF5KSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koZ3JwY19tZXRhZGF0YV9hcnJheSogYXJyYXkpID0gMDsKQEAgLTExMywxMSArMTE4LDExIEBACiBleHRlcm4gQ29yZUNvZGVnZW5JbnRlcmZhY2UqIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZTsKIAogLy8vIENvZGVnZW4gc3BlY2lmaWMgdmVyc2lvbiBvZiBcYSBHUFJfQVNTRVJULgotI2RlZmluZSBHUFJfQ09ERUdFTl9BU1NFUlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCEoeCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ3JwYzo6Z19jb3JlX2NvZGVnZW5faW50ZXJmYWNlLT5hc3NlcnRfZmFpbCgjeCk7IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEdQUl9DT0RFR0VOX0FTU0VSVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCEoeCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBncnBjOjpnX2NvcmVfY29kZWdlbl9pbnRlcmZhY2UtPmFzc2VydF9mYWlsKCN4LCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUgKDApCiAKIH0gIC8vIG5hbWVzcGFjZSBncnBjCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vbWV0YWRhdGFfbWFwLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vbWV0YWRhdGFfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiOWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9tZXRhZGF0YV9tYXAuaApAQCAtMCwwICsxLDcxIEBACisvKgorKgorKiBDb3B5cmlnaHQgMjAxNSwgR29vZ2xlIEluYy4KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyogbWV0OgorKgorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisqIGRpc3RyaWJ1dGlvbi4KKyogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqCisqLworCisjaWZuZGVmIEdSUENYWF9JTVBMX0NPREVHRU5fTUVUQURBVEFfTUFQX0gKKyNkZWZpbmUgR1JQQ1hYX0lNUExfQ09ERUdFTl9NRVRBREFUQV9NQVBfSAorCisjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oPgorCituYW1lc3BhY2UgZ3JwYyB7CisKK2NsYXNzIE1ldGFkYXRhTWFwIHsKKyBwdWJsaWM6CisgIE1ldGFkYXRhTWFwKCkgeyBtZW1zZXQoJmFycl8sIDAsIHNpemVvZihhcnJfKSk7IH0KKworICB+TWV0YWRhdGFNYXAoKSB7CisgICAgZ19jb3JlX2NvZGVnZW5faW50ZXJmYWNlLT5ncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmFycl8pOworICB9CisKKyAgdm9pZCBGaWxsTWFwKCkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyXy5jb3VudDsgaSsrKSB7CisgICAgICAvLyBUT0RPKHlhbmdnKSBoYW5kbGUgZHVwbGljYXRlcz8KKyAgICAgIG1hcF8uaW5zZXJ0KHN0ZDo6cGFpcjxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPigKKyAgICAgICAgICBTdHJpbmdSZWZGcm9tU2xpY2UoJmFycl8ubWV0YWRhdGFbaV0ua2V5KSwKKyAgICAgICAgICBTdHJpbmdSZWZGcm9tU2xpY2UoJmFycl8ubWV0YWRhdGFbaV0udmFsdWUpKSk7CisgICAgfQorICB9CisKKyAgc3RkOjptdWx0aW1hcDxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPiAqbWFwKCkgeyByZXR1cm4gJm1hcF87IH0KKyAgY29uc3Qgc3RkOjptdWx0aW1hcDxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPiAqbWFwKCkgY29uc3QgeworICAgIHJldHVybiAmbWFwXzsKKyAgfQorICBncnBjX21ldGFkYXRhX2FycmF5ICphcnIoKSB7IHJldHVybiAmYXJyXzsgfQorCisgcHJpdmF0ZToKKyAgZ3JwY19tZXRhZGF0YV9hcnJheSBhcnJfOworICBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+IG1hcF87Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZ3JwYworCisjZW5kaWYgIC8vIEdSUENYWF9JTVBMX0NPREVHRU5fTUVUQURBVEFfTUFQX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9tZXRob2RfaGFuZGxlcl9pbXBsLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vbWV0aG9kX2hhbmRsZXJfaW1wbC5oCmluZGV4IGQ1ZDI3ZTEuLjgzYjU2OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9tZXRob2RfaGFuZGxlcl9pbXBsLmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL21ldGhvZF9oYW5kbGVyX2ltcGwuaApAQCAtNTIsOCArNTIsOCBAQAogCiAgIHZvaWQgUnVuSGFuZGxlcihjb25zdCBIYW5kbGVyUGFyYW1ldGVyJiBwYXJhbSkgZmluYWwgewogICAgIFJlcXVlc3RUeXBlIHJlcTsKLSAgICBTdGF0dXMgc3RhdHVzID0gU2VyaWFsaXphdGlvblRyYWl0czxSZXF1ZXN0VHlwZT46OkRlc2VyaWFsaXplKAotICAgICAgICBwYXJhbS5yZXF1ZXN0LCAmcmVxLCBwYXJhbS5tYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpOworICAgIFN0YXR1cyBzdGF0dXMgPQorICAgICAgICBTZXJpYWxpemF0aW9uVHJhaXRzPFJlcXVlc3RUeXBlPjo6RGVzZXJpYWxpemUocGFyYW0ucmVxdWVzdCwgJnJlcSk7CiAgICAgUmVzcG9uc2VUeXBlIHJzcDsKICAgICBpZiAoc3RhdHVzLm9rKCkpIHsKICAgICAgIHN0YXR1cyA9IGZ1bmNfKHNlcnZpY2VfLCBwYXJhbS5zZXJ2ZXJfY29udGV4dCwgJnJlcSwgJnJzcCk7CkBAIC0xMzgsOCArMTM4LDggQEAKIAogICB2b2lkIFJ1bkhhbmRsZXIoY29uc3QgSGFuZGxlclBhcmFtZXRlciYgcGFyYW0pIGZpbmFsIHsKICAgICBSZXF1ZXN0VHlwZSByZXE7Ci0gICAgU3RhdHVzIHN0YXR1cyA9IFNlcmlhbGl6YXRpb25UcmFpdHM8UmVxdWVzdFR5cGU+OjpEZXNlcmlhbGl6ZSgKLSAgICAgICAgcGFyYW0ucmVxdWVzdCwgJnJlcSwgcGFyYW0ubWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKTsKKyAgICBTdGF0dXMgc3RhdHVzID0KKyAgICAgICAgU2VyaWFsaXphdGlvblRyYWl0czxSZXF1ZXN0VHlwZT46OkRlc2VyaWFsaXplKHBhcmFtLnJlcXVlc3QsICZyZXEpOwogCiAgICAgaWYgKHN0YXR1cy5vaygpKSB7CiAgICAgICBTZXJ2ZXJXcml0ZXI8UmVzcG9uc2VUeXBlPiB3cml0ZXIocGFyYW0uY2FsbCwgcGFyYW0uc2VydmVyX2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3Byb3RvX3V0aWxzLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vcHJvdG9fdXRpbHMuaAppbmRleCAyZjE1NDg3Li4yMTIzYjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vcHJvdG9fdXRpbHMuaAorKysgYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vcHJvdG9fdXRpbHMuaApAQCAtMjAzLDggKzIwMyw3IEBACiAgIH0KIAogICBzdGF0aWMgU3RhdHVzIERlc2VyaWFsaXplKGdycGNfYnl0ZV9idWZmZXIqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjOjpwcm90b2J1Zjo6TWVzc2FnZSogbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjOjpwcm90b2J1Zjo6TWVzc2FnZSogbXNnKSB7CiAgICAgaWYgKGJ1ZmZlciA9PSBudWxscHRyKSB7CiAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1c0NvZGU6OklOVEVSTkFMLCAiTm8gcGF5bG9hZCIpOwogICAgIH0KQEAgLTIxNSwxMCArMjE0LDcgQEAKICAgICAgICAgcmV0dXJuIHJlYWRlci5zdGF0dXMoKTsKICAgICAgIH0KICAgICAgIDo6Z3JwYzo6cHJvdG9idWY6OmlvOjpDb2RlZElucHV0U3RyZWFtIGRlY29kZXIoJnJlYWRlcik7Ci0gICAgICBpZiAobWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplID4gMCkgewotICAgICAgICBkZWNvZGVyLlNldFRvdGFsQnl0ZXNMaW1pdChtYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSk7Ci0gICAgICB9CisgICAgICBkZWNvZGVyLlNldFRvdGFsQnl0ZXNMaW1pdChJTlRfTUFYLCBJTlRfTUFYKTsKICAgICAgIGlmICghbXNnLT5QYXJzZUZyb21Db2RlZFN0cmVhbSgmZGVjb2RlcikpIHsKICAgICAgICAgcmVzdWx0ID0gU3RhdHVzKFN0YXR1c0NvZGU6OklOVEVSTkFMLCBtc2ctPkluaXRpYWxpemF0aW9uRXJyb3JTdHJpbmcoKSk7CiAgICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vcnBjX3NlcnZpY2VfbWV0aG9kLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vcnBjX3NlcnZpY2VfbWV0aG9kLmgKaW5kZXggNzhjNTRlMy4uZWI4ZjlhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3JwY19zZXJ2aWNlX21ldGhvZC5oCisrKyBiL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9ycGNfc2VydmljZV9tZXRob2QuaApAQCAtNTcsMTcgKzU3LDEyIEBACiAgcHVibGljOgogICB2aXJ0dWFsIH5NZXRob2RIYW5kbGVyKCkge30KICAgc3RydWN0IEhhbmRsZXJQYXJhbWV0ZXIgewotICAgIEhhbmRsZXJQYXJhbWV0ZXIoQ2FsbCogYywgU2VydmVyQ29udGV4dCogY29udGV4dCwgZ3JwY19ieXRlX2J1ZmZlciogcmVxLAotICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9zaXplKQotICAgICAgICA6IGNhbGwoYyksCi0gICAgICAgICAgc2VydmVyX2NvbnRleHQoY29udGV4dCksCi0gICAgICAgICAgcmVxdWVzdChyZXEpLAotICAgICAgICAgIG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZShtYXhfc2l6ZSkge30KKyAgICBIYW5kbGVyUGFyYW1ldGVyKENhbGwqIGMsIFNlcnZlckNvbnRleHQqIGNvbnRleHQsIGdycGNfYnl0ZV9idWZmZXIqIHJlcSkKKyAgICAgICAgOiBjYWxsKGMpLCBzZXJ2ZXJfY29udGV4dChjb250ZXh0KSwgcmVxdWVzdChyZXEpIHt9CiAgICAgQ2FsbCogY2FsbDsKICAgICBTZXJ2ZXJDb250ZXh0KiBzZXJ2ZXJfY29udGV4dDsKICAgICAvLyBIYW5kbGVyIHJlcXVpcmVkIHRvIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveSB0aGlzCiAgICAgZ3JwY19ieXRlX2J1ZmZlciogcmVxdWVzdDsKLSAgICBpbnQgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplOwogICB9OwogICB2aXJ0dWFsIHZvaWQgUnVuSGFuZGxlcihjb25zdCBIYW5kbGVyUGFyYW1ldGVyJiBwYXJhbSkgPSAwOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9jb250ZXh0LmgKaW5kZXggZGQzMDU3Ni4uOGM3ZmUwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9jb250ZXh0LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vY29uZmlnLmg+CiAjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9jcmVhdGVfYXV0aF9jb250ZXh0Lmg+CisjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9tZXRhZGF0YV9tYXAuaD4KICNpbmNsdWRlIDxncnBjKysvaW1wbC9jb2RlZ2VuL3NlY3VyaXR5L2F1dGhfY29udGV4dC5oPgogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vc3RyaW5nX3JlZi5oPgogI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vdGltZS5oPgpAQCAtMTIzLDcgKzEyNCw3IEBACiAKICAgY29uc3Qgc3RkOjptdWx0aW1hcDxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPiYgY2xpZW50X21ldGFkYXRhKCkKICAgICAgIGNvbnN0IHsKLSAgICByZXR1cm4gY2xpZW50X21ldGFkYXRhXzsKKyAgICByZXR1cm4gKmNsaWVudF9tZXRhZGF0YV8ubWFwKCk7CiAgIH0KIAogICBncnBjX2NvbXByZXNzaW9uX2xldmVsIGNvbXByZXNzaW9uX2xldmVsKCkgY29uc3QgewpAQCAtMjIzLDcgKzIyNCw3IEBACiAgIENvbXBsZXRpb25RdWV1ZSogY3FfOwogICBib29sIHNlbnRfaW5pdGlhbF9tZXRhZGF0YV87CiAgIG11dGFibGUgc3RkOjpzaGFyZWRfcHRyPGNvbnN0IEF1dGhDb250ZXh0PiBhdXRoX2NvbnRleHRfOwotICBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+IGNsaWVudF9tZXRhZGF0YV87CisgIE1ldGFkYXRhTWFwIGNsaWVudF9tZXRhZGF0YV87CiAgIHN0ZDo6bXVsdGltYXA8Z3JwYzo6c3RyaW5nLCBncnBjOjpzdHJpbmc+IGluaXRpYWxfbWV0YWRhdGFfOwogICBzdGQ6Om11bHRpbWFwPGdycGM6OnN0cmluZywgZ3JwYzo6c3RyaW5nPiB0cmFpbGluZ19tZXRhZGF0YV87CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmggYi9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2ludGVyZmFjZS5oCmluZGV4IDY2NmI5ZmYuLmJkMWIzNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgKKysrIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9pbnRlcmZhY2UuaApAQCAtMTUyLDcgKzE1Miw2IEBACiAgICAgdm9pZCogY29uc3QgdGFnXzsKICAgICBjb25zdCBib29sIGRlbGV0ZV9vbl9maW5hbGl6ZV87CiAgICAgZ3JwY19jYWxsKiBjYWxsXzsKLSAgICBncnBjX21ldGFkYXRhX2FycmF5IGluaXRpYWxfbWV0YWRhdGFfYXJyYXlfOwogICB9OwogCiAgIGNsYXNzIFJlZ2lzdGVyZWRBc3luY1JlcXVlc3QgOiBwdWJsaWMgQmFzZUFzeW5jUmVxdWVzdCB7CkBAIC0xOTksOSArMTk4LDcgQEAKICAgICBib29sIEZpbmFsaXplUmVzdWx0KHZvaWQqKiB0YWcsIGJvb2wqIHN0YXR1cykgb3ZlcnJpZGUgewogICAgICAgYm9vbCBzZXJpYWxpemF0aW9uX3N0YXR1cyA9CiAgICAgICAgICAgKnN0YXR1cyAmJiBwYXlsb2FkXyAmJgotICAgICAgICAgIFNlcmlhbGl6YXRpb25UcmFpdHM8TWVzc2FnZT46OkRlc2VyaWFsaXplKAotICAgICAgICAgICAgICBwYXlsb2FkXywgcmVxdWVzdF8sIHNlcnZlcl8tPm1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSgpKQotICAgICAgICAgICAgICAub2soKTsKKyAgICAgICAgICBTZXJpYWxpemF0aW9uVHJhaXRzPE1lc3NhZ2U+OjpEZXNlcmlhbGl6ZShwYXlsb2FkXywgcmVxdWVzdF8pLm9rKCk7CiAgICAgICBib29sIHJldCA9IFJlZ2lzdGVyZWRBc3luY1JlcXVlc3Q6OkZpbmFsaXplUmVzdWx0KHRhZywgc3RhdHVzKTsKICAgICAgICpzdGF0dXMgPSBzZXJpYWxpemF0aW9uX3N0YXR1cyAmJiAqc3RhdHVzOwogICAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oIGIvaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NsaWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMmY5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IDIwMTUsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIEdSUENYWF9JTVBMX0NPREVHRU5fU0xJQ0VfSAorI2RlZmluZSBHUlBDWFhfSU1QTF9DT0RFR0VOX1NMSUNFX0gKKworI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vY29yZV9jb2RlZ2VuX2ludGVyZmFjZS5oPgorI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vc3RyaW5nX3JlZi5oPgorCituYW1lc3BhY2UgZ3JwYyB7CisKK2lubGluZSBncnBjOjpzdHJpbmdfcmVmIFN0cmluZ1JlZkZyb21TbGljZShjb25zdCBncnBjX3NsaWNlKiBzbGljZSkgeworICByZXR1cm4gZ3JwYzo6c3RyaW5nX3JlZigKKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KEdSUENfU0xJQ0VfU1RBUlRfUFRSKCpzbGljZSkpLAorICAgICAgR1JQQ19TTElDRV9MRU5HVEgoKnNsaWNlKSk7Cit9CisKK2lubGluZSBncnBjOjpzdHJpbmcgU3RyaW5nRnJvbUNvcGllZFNsaWNlKGdycGNfc2xpY2Ugc2xpY2UpIHsKKyAgcmV0dXJuIGdycGM6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIqPihHUlBDX1NMSUNFX1NUQVJUX1BUUihzbGljZSkpLAorICAgICAgICAgICAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKHNsaWNlKSk7Cit9CisKK2lubGluZSBncnBjX3NsaWNlIFNsaWNlUmVmZXJlbmNpbmdTdHJpbmcoY29uc3QgZ3JwYzo6c3RyaW5nJiBzdHIpIHsKKyAgcmV0dXJuIGdfY29yZV9jb2RlZ2VuX2ludGVyZmFjZS0+Z3JwY19zbGljZV9mcm9tX3N0YXRpY19idWZmZXIoc3RyLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLmxlbmd0aCgpKTsKK30KKworaW5saW5lIGdycGNfc2xpY2UgU2xpY2VGcm9tQ29waWVkU3RyaW5nKGNvbnN0IGdycGM6OnN0cmluZyYgc3RyKSB7CisgIHJldHVybiBnX2NvcmVfY29kZWdlbl9pbnRlcmZhY2UtPmdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKHN0ci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ci5sZW5ndGgoKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBncnBjCisKKyNlbmRpZiAgLy8gR1JQQ1hYX0lNUExfQ09ERUdFTl9TTElDRV9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3luY19zdHJlYW0uaCBiL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zeW5jX3N0cmVhbS5oCmluZGV4IDRkOWIwNzQuLjFmNzcwOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zeW5jX3N0cmVhbS5oCisrKyBiL2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zeW5jX3N0cmVhbS5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICAgfQogCiAgIGJvb2wgTmV4dE1lc3NhZ2VTaXplKHVpbnQzMl90KiBzeikgb3ZlcnJpZGUgewotICAgICpzeiA9IGNhbGxfLm1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSgpOworICAgICpzeiA9IElOVF9NQVg7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBACiAgIH0KIAogICBib29sIE5leHRNZXNzYWdlU2l6ZSh1aW50MzJfdCogc3opIG92ZXJyaWRlIHsKLSAgICAqc3ogPSBjYWxsXy5tYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUoKTsKKyAgICAqc3ogPSBJTlRfTUFYOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKQEAgLTM4Miw3ICszODIsNyBAQAogICB9CiAKICAgYm9vbCBOZXh0TWVzc2FnZVNpemUodWludDMyX3QqIHN6KSBvdmVycmlkZSB7Ci0gICAgKnN6ID0gY2FsbF8tPm1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZSgpOworICAgICpzeiA9IElOVF9NQVg7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtNDc0LDcgKzQ3NCw3IEBACiAgIH0KIAogICBib29sIE5leHRNZXNzYWdlU2l6ZSh1aW50MzJfdCogc3opIHsKLSAgICAqc3ogPSBjYWxsXy0+bWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKCk7CisgICAgKnN6ID0gSU5UX01BWDsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dycGMrKy9zdXBwb3J0L2J5dGVfYnVmZmVyLmggYi9pbmNsdWRlL2dycGMrKy9zdXBwb3J0L2J5dGVfYnVmZmVyLmgKaW5kZXggMWYzMTdkZi4uMDY0YTAzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnBjKysvc3VwcG9ydC9ieXRlX2J1ZmZlci5oCisrKyBiL2luY2x1ZGUvZ3JwYysrL3N1cHBvcnQvYnl0ZV9idWZmZXIuaApAQCAtOTUsOCArOTUsNyBAQAogdGVtcGxhdGUgPD4KIGNsYXNzIFNlcmlhbGl6YXRpb25UcmFpdHM8Qnl0ZUJ1ZmZlciwgdm9pZD4gewogIHB1YmxpYzoKLSAgc3RhdGljIFN0YXR1cyBEZXNlcmlhbGl6ZShncnBjX2J5dGVfYnVmZmVyKiBieXRlX2J1ZmZlciwgQnl0ZUJ1ZmZlciogZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKSB7CisgIHN0YXRpYyBTdGF0dXMgRGVzZXJpYWxpemUoZ3JwY19ieXRlX2J1ZmZlciogYnl0ZV9idWZmZXIsIEJ5dGVCdWZmZXIqIGRlc3QpIHsKICAgICBkZXN0LT5zZXRfYnVmZmVyKGJ5dGVfYnVmZmVyKTsKICAgICByZXR1cm4gU3RhdHVzOjpPSzsKICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnBjL2NvbXByZXNzaW9uLmggYi9pbmNsdWRlL2dycGMvY29tcHJlc3Npb24uaAppbmRleCA1ZjI4NWNkLi42NTlkNmZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dycGMvY29tcHJlc3Npb24uaAorKysgYi9pbmNsdWRlL2dycGMvY29tcHJlc3Npb24uaApAQCAtMzQsMTEgKzM0LDEyIEBACiAjaWZuZGVmIEdSUENfQ09NUFJFU1NJT05fSAogI2RlZmluZSBHUlBDX0NPTVBSRVNTSU9OX0gKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCiAjaW5jbHVkZSA8Z3JwYy9pbXBsL2NvZGVnZW4vcG9ydF9wbGF0Zm9ybS5oPgogCisjaW5jbHVkZSA8c3RkbGliLmg+CisKICNpbmNsdWRlIDxncnBjL2ltcGwvY29kZWdlbi9jb21wcmVzc2lvbl90eXBlcy5oPgorI2luY2x1ZGUgPGdycGMvc2xpY2UuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTQ4LDggKzQ5LDcgQEAKICAqIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGluc3RhbmNlLCB1cGRhdGluZyBcYSBhbGdvcml0aG0uIFJldHVybnMgMSB1cG9uCiAgKiBzdWNjZXNzLCAwIG90aGVyd2lzZS4gKi8KIEdSUENBUEkgaW50IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlKAotICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwKLSAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSAqYWxnb3JpdGhtKTsKKyAgICBncnBjX3NsaWNlIHZhbHVlLCBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSAqYWxnb3JpdGhtKTsKIAogLyoqIFVwZGF0ZXMgXGEgbmFtZSB3aXRoIHRoZSBlbmNvZGluZyBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSB2YWxpZCBcYQogICogYWxnb3JpdGhtLiBOb3RlIHRoYXQgXGEgbmFtZSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgbXVzdCAqbm90KiBiZSBmcmVlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYy9ncnBjLmggYi9pbmNsdWRlL2dycGMvZ3JwYy5oCmluZGV4IDg5OGY0ZDUuLjM3YjgyM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYy9ncnBjLmgKKysrIGIvaW5jbHVkZS9ncnBjL2dycGMuaApAQCAtMTc4LDggKzE3OCw4IEBACiAgICAgcG9zc2libGUgdmFsdWVzKS4gKi8KIEdSUENBUEkgZ3JwY19jYWxsICpncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCiAgICAgZ3JwY19jaGFubmVsICpjaGFubmVsLCBncnBjX2NhbGwgKnBhcmVudF9jYWxsLCB1aW50MzJfdCBwcm9wYWdhdGlvbl9tYXNrLAotICAgIGdycGNfY29tcGxldGlvbl9xdWV1ZSAqY29tcGxldGlvbl9xdWV1ZSwgY29uc3QgY2hhciAqbWV0aG9kLAotICAgIGNvbnN0IGNoYXIgKmhvc3QsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwgdm9pZCAqcmVzZXJ2ZWQpOworICAgIGdycGNfY29tcGxldGlvbl9xdWV1ZSAqY29tcGxldGlvbl9xdWV1ZSwgZ3JwY19zbGljZSBtZXRob2QsCisgICAgY29uc3QgZ3JwY19zbGljZSAqaG9zdCwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLCB2b2lkICpyZXNlcnZlZCk7CiAKIC8qKiBQaW5nIHRoZSBjaGFubmVscyBwZWVyIChsb2FkIGJhbGFuY2VkIGNoYW5uZWxzIHdpbGwgc2VsZWN0IG9uZSBzdWItY2hhbm5lbAogICAgIHRvIHBpbmcpOyBpZiB0aGUgY2hhbm5lbCBpcyBub3QgY29ubmVjdGVkLCBwb3N0cyBhIGZhaWxlZC4gKi8KQEAgLTQwMiwxNCArNDAyLDE0IEBACiBHUlBDQVBJIGludCBncnBjX3RyYWNlcl9zZXRfZW5hYmxlZChjb25zdCBjaGFyICpuYW1lLCBpbnQgZW5hYmxlZCk7CiAKIC8qKiBDaGVjayB3aGV0aGVyIGEgbWV0YWRhdGEga2V5IGlzIGxlZ2FsICh3aWxsIGJlIGFjY2VwdGVkIGJ5IGNvcmUpICovCi1HUlBDQVBJIGludCBncnBjX2hlYWRlcl9rZXlfaXNfbGVnYWwoY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuZ3RoKTsKK0dSUENBUEkgaW50IGdycGNfaGVhZGVyX2tleV9pc19sZWdhbChncnBjX3NsaWNlIHNsaWNlKTsKIAogLyoqIENoZWNrIHdoZXRoZXIgYSBub24tYmluYXJ5IG1ldGFkYXRhIHZhbHVlIGlzIGxlZ2FsICh3aWxsIGJlIGFjY2VwdGVkIGJ5CiAgICAgY29yZSkgKi8KLUdSUENBUEkgaW50IGdycGNfaGVhZGVyX25vbmJpbl92YWx1ZV9pc19sZWdhbChjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbmd0aCk7CitHUlBDQVBJIGludCBncnBjX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWwoZ3JwY19zbGljZSBzbGljZSk7CiAKIC8qKiBDaGVjayB3aGV0aGVyIGEgbWV0YWRhdGEga2V5IGNvcnJlc3BvbmRzIHRvIGEgYmluYXJ5IHZhbHVlICovCi1HUlBDQVBJIGludCBncnBjX2lzX2JpbmFyeV9oZWFkZXIoY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuZ3RoKTsKK0dSUENBUEkgaW50IGdycGNfaXNfYmluYXJ5X2hlYWRlcihncnBjX3NsaWNlIHNsaWNlKTsKIAogLyoqIENvbnZlcnQgZ3JwY19jYWxsX2Vycm9yIHZhbHVlcyB0byBhIHN0cmluZyAqLwogR1JQQ0FQSSBjb25zdCBjaGFyICpncnBjX2NhbGxfZXJyb3JfdG9fc3RyaW5nKGdycGNfY2FsbF9lcnJvciBlcnJvcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dycGMvaW1wbC9jb2RlZ2VuL2dycGNfdHlwZXMuaCBiL2luY2x1ZGUvZ3JwYy9pbXBsL2NvZGVnZW4vZ3JwY190eXBlcy5oCmluZGV4IGVlODEwMWEuLjQ0MmM0MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYy9pbXBsL2NvZGVnZW4vZ3JwY190eXBlcy5oCisrKyBiL2luY2x1ZGUvZ3JwYy9pbXBsL2NvZGVnZW4vZ3JwY190eXBlcy5oCkBAIC0yOTQsOSArMjk0LDExIEBACiAKIC8qKiBBIHNpbmdsZSBtZXRhZGF0YSBlbGVtZW50ICovCiB0eXBlZGVmIHN0cnVjdCBncnBjX21ldGFkYXRhIHsKLSAgY29uc3QgY2hhciAqa2V5OwotICBjb25zdCBjaGFyICp2YWx1ZTsKLSAgc2l6ZV90IHZhbHVlX2xlbmd0aDsKKyAgLyogdGhlIGtleSwgdmFsdWUgdmFsdWVzIGFyZSBleHBlY3RlZCB0byBsaW5lIHVwIHdpdGggZ3JwY19tZGVsZW06IGlmIGNoYW5naW5nCisgICAgIHRoZW0sIHVwZGF0ZSBtZXRhZGF0YS5oIGF0IHRoZSBzYW1lIHRpbWUuICovCisgIGdycGNfc2xpY2Uga2V5OworICBncnBjX3NsaWNlIHZhbHVlOworCiAgIHVpbnQzMl90IGZsYWdzOwogCiAgIC8qKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcmVzZXJ2ZWQgZm9yIGdycGMgaW50ZXJuYWwgdXNlLgpAQCAtMzM4LDEwICszNDAsOCBAQAogfSBncnBjX21ldGFkYXRhX2FycmF5OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgKm1ldGhvZDsKLSAgc2l6ZV90IG1ldGhvZF9jYXBhY2l0eTsKLSAgY2hhciAqaG9zdDsKLSAgc2l6ZV90IGhvc3RfY2FwYWNpdHk7CisgIGdycGNfc2xpY2UgbWV0aG9kOworICBncnBjX3NsaWNlIGhvc3Q7CiAgIGdwcl90aW1lc3BlYyBkZWFkbGluZTsKICAgdWludDMyX3QgZmxhZ3M7CiAgIHZvaWQgKnJlc2VydmVkOwpAQCAtNDE4LDIzICs0MTgsMzIgQEAKICAgICAgICAgZ3JwY19jb21wcmVzc2lvbl9sZXZlbCBsZXZlbDsKICAgICAgIH0gbWF5YmVfY29tcHJlc3Npb25fbGV2ZWw7CiAgICAgfSBzZW5kX2luaXRpYWxfbWV0YWRhdGE7Ci0gICAgc3RydWN0IGdycGNfYnl0ZV9idWZmZXIgKnNlbmRfbWVzc2FnZTsKKyAgICBzdHJ1Y3QgeworICAgICAgc3RydWN0IGdycGNfYnl0ZV9idWZmZXIgKnNlbmRfbWVzc2FnZTsKKyAgICB9IHNlbmRfbWVzc2FnZTsKICAgICBzdHJ1Y3QgewogICAgICAgc2l6ZV90IHRyYWlsaW5nX21ldGFkYXRhX2NvdW50OwogICAgICAgZ3JwY19tZXRhZGF0YSAqdHJhaWxpbmdfbWV0YWRhdGE7CiAgICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKLSAgICAgIGNvbnN0IGNoYXIgKnN0YXR1c19kZXRhaWxzOworICAgICAgLyogb3B0aW9uYWw6IHNldCB0byBOVUxMIGlmIG5vIGRldGFpbHMgbmVlZCBzZW5kaW5nLCBub24tTlVMTCBpZiB0aGV5IGRvCisgICAgICAgKiBwb2ludGVyIHdpbGwgbm90IGJlIHJldGFpbmVkIHBhc3QgdGhlIHN0YXJ0X2JhdGNoIGNhbGwKKyAgICAgICAqLworICAgICAgZ3JwY19zbGljZSAqc3RhdHVzX2RldGFpbHM7CiAgICAgfSBzZW5kX3N0YXR1c19mcm9tX3NlcnZlcjsKICAgICAvKiogb3duZXJzaGlwIG9mIHRoZSBhcnJheSBpcyB3aXRoIHRoZSBjYWxsZXIsIGJ1dCBvd25lcnNoaXAgb2YgdGhlIGVsZW1lbnRzCiAgICAgICAgIHN0YXlzIHdpdGggdGhlIGNhbGwgb2JqZWN0IChpZSBrZXksIHZhbHVlIG1lbWJlcnMgYXJlIG93bmVkIGJ5IHRoZSBjYWxsCiAgICAgICAgIG9iamVjdCwgcmVjdl9pbml0aWFsX21ldGFkYXRhLT5hcnJheSBpcyBvd25lZCBieSB0aGUgY2FsbGVyKS4KICAgICAgICAgQWZ0ZXIgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMsIGNhbGwgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95IG9uIHRoaXMKICAgICAgICAgdmFsdWUsIG9yIHJldXNlIGl0IGluIGEgZnV0dXJlIG9wLiAqLwotICAgIGdycGNfbWV0YWRhdGFfYXJyYXkgKnJlY3ZfaW5pdGlhbF9tZXRhZGF0YTsKKyAgICBzdHJ1Y3QgeworICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSAqcmVjdl9pbml0aWFsX21ldGFkYXRhOworICAgIH0gcmVjdl9pbml0aWFsX21ldGFkYXRhOwogICAgIC8qKiBvd25lcnNoaXAgb2YgdGhlIGJ5dGUgYnVmZmVyIGlzIG1vdmVkIHRvIHRoZSBjYWxsZXI7IHRoZSBjYWxsZXIgbXVzdAogICAgICAgICBjYWxsIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveSBvbiB0aGlzIHZhbHVlLCBvciByZXVzZSBpdCBpbiBhIGZ1dHVyZSBvcC4KICAgICAgICAqLwotICAgIHN0cnVjdCBncnBjX2J5dGVfYnVmZmVyICoqcmVjdl9tZXNzYWdlOworICAgIHN0cnVjdCB7CisgICAgICBzdHJ1Y3QgZ3JwY19ieXRlX2J1ZmZlciAqKnJlY3ZfbWVzc2FnZTsKKyAgICB9IHJlY3ZfbWVzc2FnZTsKICAgICBzdHJ1Y3QgewogICAgICAgLyoqIG93bmVyc2hpcCBvZiB0aGUgYXJyYXkgaXMgd2l0aCB0aGUgY2FsbGVyLCBidXQgb3duZXJzaGlwIG9mIHRoZQogICAgICAgICAgIGVsZW1lbnRzIHN0YXlzIHdpdGggdGhlIGNhbGwgb2JqZWN0IChpZSBrZXksIHZhbHVlIG1lbWJlcnMgYXJlIG93bmVkCkBAIC00NDQsMjggKzQ1Myw3IEBACiAgICAgICAgICAgdmFsdWUsIG9yIHJldXNlIGl0IGluIGEgZnV0dXJlIG9wLiAqLwogICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSAqdHJhaWxpbmdfbWV0YWRhdGE7CiAgICAgICBncnBjX3N0YXR1c19jb2RlICpzdGF0dXM7Ci0gICAgICAvKiogc3RhdHVzX2RldGFpbHMgaXMgYSBidWZmZXIgb3duZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJlZm9yZSB0aGUgb3AKLSAgICAgICAgICBjb21wbGV0ZXMgYW5kIGFmdGVyIHRoZSBvcCBoYXMgY29tcGxldGVkLiBEdXJpbmcgdGhlIG9wZXJhdGlvbgotICAgICAgICAgIHN0YXR1c19kZXRhaWxzIG1heSBiZSByZWFsbG9jYXRlZCB0byBhIHNpemUgbGFyZ2VyIHRoYW4KLSAgICAgICAgICAqc3RhdHVzX2RldGFpbHNfY2FwYWNpdHksIGluIHdoaWNoIGNhc2UgKnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5IHdpbGwKLSAgICAgICAgICBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyBhcnJheSBjYXBhY2l0eS4KLQotICAgICAgICAgIFByZS1hbGxvY2F0aW5nIHNwYWNlOgotICAgICAgICAgIHNpemVfdCBteV9jYXBhY2l0eSA9IDg7Ci0gICAgICAgICAgY2hhciAqbXlfZGV0YWlscyA9IGdwcl9tYWxsb2MobXlfY2FwYWNpdHkpOwotICAgICAgICAgIHguc3RhdHVzX2RldGFpbHMgPSAmbXlfZGV0YWlsczsKLSAgICAgICAgICB4LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJm15X2NhcGFjaXR5OwotCi0gICAgICAgICAgTm90IHByZS1hbGxvY2F0aW5nIHNwYWNlOgotICAgICAgICAgIHNpemVfdCBteV9jYXBhY2l0eSA9IDA7Ci0gICAgICAgICAgY2hhciAqbXlfZGV0YWlscyA9IE5VTEw7Ci0gICAgICAgICAgeC5zdGF0dXNfZGV0YWlscyA9ICZteV9kZXRhaWxzOwotICAgICAgICAgIHguc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmbXlfY2FwYWNpdHk7Ci0KLSAgICAgICAgICBBZnRlciB0aGUgY2FsbDoKLSAgICAgICAgICBncHJfZnJlZShteV9kZXRhaWxzKTsgKi8KLSAgICAgIGNoYXIgKipzdGF0dXNfZGV0YWlsczsKLSAgICAgIHNpemVfdCAqc3RhdHVzX2RldGFpbHNfY2FwYWNpdHk7CisgICAgICBncnBjX3NsaWNlICpzdGF0dXNfZGV0YWlsczsKICAgICB9IHJlY3Zfc3RhdHVzX29uX2NsaWVudDsKICAgICBzdHJ1Y3QgewogICAgICAgLyoqIG91dCBhcmd1bWVudCwgc2V0IHRvIDEgaWYgdGhlIGNhbGwgZmFpbGVkIGluIGFueSB3YXkgKHNlZW4gYXMgYQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnBjL2ltcGwvY29kZWdlbi9zbGljZS5oIGIvaW5jbHVkZS9ncnBjL2ltcGwvY29kZWdlbi9zbGljZS5oCmluZGV4IDAzNTI2MDQuLjBiMDlhMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3JwYy9pbXBsL2NvZGVnZW4vc2xpY2UuaAorKysgYi9pbmNsdWRlL2dycGMvaW1wbC9jb2RlZ2VuL3NsaWNlLmgKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxncnBjL2ltcGwvY29kZWdlbi9leGVjX2N0eF9md2QuaD4KICNpbmNsdWRlIDxncnBjL2ltcGwvY29kZWdlbi9ncHJfc2xpY2UuaD4KIAordHlwZWRlZiBzdHJ1Y3QgZ3JwY19zbGljZSBncnBjX3NsaWNlOworCiAvKiBTbGljZSBBUEkKIAogICAgQSBzbGljZSByZXByZXNlbnRzIGEgY29udGlndW91cyByZWZlcmVuY2UgY291bnRlZCBhcnJheSBvZiBieXRlcy4KQEAgLTUzLDE0ICs1NSwyNSBAQAogICAgcmVmZXJlbmNlIG93bmVyc2hpcCBzZW1hbnRpY3MgKHdobyBzaG91bGQgY2FsbCB1bnJlZj8pIGFuZCBtdXRhYmlsaXR5CiAgICBjb25zdHJhaW50cyAoaXMgdGhlIGNhbGxlZSBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgc2xpY2U/KSAqLwogCit0eXBlZGVmIHN0cnVjdCBncnBjX3NsaWNlX3JlZmNvdW50X3Z0YWJsZSB7CisgIHZvaWQgKCpyZWYpKHZvaWQgKik7CisgIHZvaWQgKCp1bnJlZikoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKik7CisgIGludCAoKmVxKShncnBjX3NsaWNlIGEsIGdycGNfc2xpY2UgYik7CisgIHVpbnQzMl90ICgqaGFzaCkoZ3JwY19zbGljZSBzbGljZSk7Cit9IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlOworCiAvKiBSZWZlcmVuY2UgY291bnQgY29udGFpbmVyIGZvciBncnBjX3NsaWNlLiBDb250YWlucyBmdW5jdGlvbiBwb2ludGVycyB0bwogICAgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cy4gSW1wbGVtZW50YXRpb25zIHNob3VsZCBjbGVhbnVwCiAgICB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVyby4KICAgIFR5cGljYWxseSBjbGllbnQgY29kZSBzaG91bGQgbm90IHRvdWNoIHRoaXMsIGFuZCB1c2UgZ3JwY19zbGljZV9tYWxsb2MsCiAgICBncnBjX3NsaWNlX25ldywgb3IgZ3JwY19zbGljZV9uZXdfd2l0aF9sZW4gaW5zdGVhZC4gKi8KIHR5cGVkZWYgc3RydWN0IGdycGNfc2xpY2VfcmVmY291bnQgewotICB2b2lkICgqcmVmKSh2b2lkICopOwotICB2b2lkICgqdW5yZWYpKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICopOworICBjb25zdCBncnBjX3NsaWNlX3JlZmNvdW50X3Z0YWJsZSAqdnRhYmxlOworICAvKiBJZiBhIHN1YnNldCBvZiB0aGlzIHNsaWNlIGlzIHRha2VuLCB1c2UgdGhpcyBwb2ludGVyIGZvciB0aGUgcmVmY291bnQuCisgICAgIFR5cGljYWxseSBwb2ludHMgYmFjayB0byB0aGUgcmVmY291bnQgaXRzZWxmLCBob3dldmVyIGl0ZXJuaW5nCisgICAgIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoaXMgdG8gYXZvaWQgYSB2ZXJpZmljYXRpb24gc3RlcCBvbiBlYWNoIGhhc2gKKyAgICAgb3IgZXF1YWxpdHkgY2hlY2sgKi8KKyAgc3RydWN0IGdycGNfc2xpY2VfcmVmY291bnQgKnN1Yl9yZWZjb3VudDsKIH0gZ3JwY19zbGljZV9yZWZjb3VudDsKIAogI2RlZmluZSBHUlBDX1NMSUNFX0lOTElORURfU0laRSAoc2l6ZW9mKHNpemVfdCkgKyBzaXplb2YodWludDhfdCAqKSAtIDEpCkBAIC03NCw3ICs4Nyw3IEBACiAKICAgIElmIHRoZSBzbGljZSBkb2VzIG5vdCBoYXZlIGEgcmVmY291bnQsIGl0IHJlcHJlc2VudHMgYW4gaW5saW5lZCBzbWFsbCBwaWVjZQogICAgb2YgZGF0YSB0aGF0IGlzIGNvcGllZCBieSB2YWx1ZS4gKi8KLXR5cGVkZWYgc3RydWN0IGdycGNfc2xpY2Ugeworc3RydWN0IGdycGNfc2xpY2UgewogICBzdHJ1Y3QgZ3JwY19zbGljZV9yZWZjb3VudCAqcmVmY291bnQ7CiAgIHVuaW9uIHsKICAgICBzdHJ1Y3QgewpAQCAtODYsNyArOTksNyBAQAogICAgICAgdWludDhfdCBieXRlc1tHUlBDX1NMSUNFX0lOTElORURfU0laRV07CiAgICAgfSBpbmxpbmVkOwogICB9IGRhdGE7Ci19IGdycGNfc2xpY2U7Cit9OwogCiAjZGVmaW5lIEdSUENfU0xJQ0VfQlVGRkVSX0lOTElORV9FTEVNRU5UUyA4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ3JwYy9zbGljZS5oIGIvaW5jbHVkZS9ncnBjL3NsaWNlLmgKaW5kZXggMWYxODFhYS4uZWE2NmUwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnBjL3NsaWNlLmgKKysrIGIvaW5jbHVkZS9ncnBjL3NsaWNlLmgKQEAgLTc2LDYgKzc2LDEyIEBACiAgICBBYm9ydHMgaWYgbWFsbG9jKCkgZmFpbHMuICovCiBHUFJBUEkgZ3JwY19zbGljZSBncnBjX3NsaWNlX21hbGxvYyhzaXplX3QgbGVuZ3RoKTsKIAorLyogSW50ZXJuIGEgc2xpY2U6CisKKyAgIFRoZSByZXR1cm4gdmFsdWUgZm9yIHR3byBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggIHRoZSBzYW1lIHNlcXVlbmNlCisgICBvZiBieXRlcyBpcyBhIHNsaWNlIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBtZW1vcnkuICovCitHUFJBUEkgZ3JwY19zbGljZSBncnBjX3NsaWNlX2ludGVybihncnBjX3NsaWNlIHNsaWNlKTsKKwogLyogQ3JlYXRlIGEgc2xpY2UgYnkgY29weWluZyBhIHN0cmluZy4KICAgIERvZXMgbm90IHByZXNlcnZlIG51bGwgdGVybWluYXRvcnMuCiAgICBFcXVpdmFsZW50IHRvOgpAQCAtOTMsNiArOTksOSBAQAogLyogQ3JlYXRlIGEgc2xpY2UgcG9pbnRpbmcgdG8gY29uc3RhbnQgbWVtb3J5ICovCiBHUFJBUEkgZ3JwY19zbGljZSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhjb25zdCBjaGFyICpzb3VyY2UpOwogCisvKiBDcmVhdGUgYSBzbGljZSBwb2ludGluZyB0byBjb25zdGFudCBtZW1vcnkgKi8KK0dQUkFQSSBncnBjX3NsaWNlIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyKGNvbnN0IHZvaWQgKnNvdXJjZSwgc2l6ZV90IGxlbik7CisKIC8qIFJldHVybiBhIHJlc3VsdCBzbGljZSBkZXJpdmVkIGZyb20gcywgd2hpY2ggc2hhcmVzIGEgcmVmIGNvdW50IHdpdGggcywgd2hlcmUKICAgIHJlc3VsdC5kYXRhPT1zLmRhdGErYmVnaW4sIGFuZCByZXN1bHQubGVuZ3RoPT1lbmQtYmVnaW4uCiAgICBUaGUgcmVmIGNvdW50IG9mIHMgaXMgaW5jcmVhc2VkIGJ5IG9uZS4KQEAgLTExMywxOCArMTIyLDQ1IEBACiAgICBSZXF1aXJlcyBzIGludGlhbGl6ZWQsIHNwbGl0IDw9IHMubGVuZ3RoICovCiBHUFJBUEkgZ3JwY19zbGljZSBncnBjX3NsaWNlX3NwbGl0X2hlYWQoZ3JwY19zbGljZSAqcywgc2l6ZV90IHNwbGl0KTsKIAotR1BSQVBJIGdycGNfc2xpY2UgZ3ByX2VtcHR5X3NsaWNlKHZvaWQpOworR1BSQVBJIGdycGNfc2xpY2UgZ3JwY19lbXB0eV9zbGljZSh2b2lkKTsKKworR1BSQVBJIHVpbnQzMl90IGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGwoZ3JwY19zbGljZSBzKTsKK0dQUkFQSSBpbnQgZ3JwY19zbGljZV9kZWZhdWx0X2VxX2ltcGwoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpOworCitHUFJBUEkgaW50IGdycGNfc2xpY2VfZXEoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpOwogCiAvKiBSZXR1cm5zIDwwIGlmIGEgPCBiLCA9PTAgaWYgYSA9PSBiLCA+MCBpZiBhID4gYgogICAgVGhlIG9yZGVyIGlzIGFyYml0cmFyeSwgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZSBhY3Jvc3MgZGlmZmVyZW50CiAgICB2ZXJzaW9ucyBvZiB0aGUgQVBJLiAqLwogR1BSQVBJIGludCBncnBjX3NsaWNlX2NtcChncnBjX3NsaWNlIGEsIGdycGNfc2xpY2UgYik7CiBHUFJBUEkgaW50IGdycGNfc2xpY2Vfc3RyX2NtcChncnBjX3NsaWNlIGEsIGNvbnN0IGNoYXIgKmIpOworR1BSQVBJIGludCBncnBjX3NsaWNlX2J1Zl9jbXAoZ3JwY19zbGljZSBhLCBjb25zdCB2b2lkICpiLCBzaXplX3QgYmxlbik7CisKKy8qIHJldHVybiBub24temVybyBpZiB0aGUgZmlyc3QgYmxlbiBieXRlcyBvZiBhIGFyZSBlcXVhbCB0byBiICovCitHUFJBUEkgaW50IGdycGNfc2xpY2VfYnVmX3N0YXJ0X2VxKGdycGNfc2xpY2UgYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IGJsZW4pOworCisvKiByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsYXN0IGluc3RhbmNlIG9mIFxhIGMgaW4gXGEgcywgb3IgLTEgaWYgbm90IGZvdW5kICovCitHUFJBUEkgaW50IGdycGNfc2xpY2VfcmNocihncnBjX3NsaWNlIHMsIGNoYXIgYyk7CitHUFJBUEkgaW50IGdycGNfc2xpY2VfY2hyKGdycGNfc2xpY2UgcywgY2hhciBjKTsKKworLyogcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJhbmNlIG9mIFxhIG5lZWRsZSBpbiBcYSBoYXlzdGFjaywgb3IgLTEgaWYKKyAqIGl0J3Mgbm90IGZvdW5kICovCitHUFJBUEkgaW50IGdycGNfc2xpY2Vfc2xpY2UoZ3JwY19zbGljZSBoYXlzdGFjaywgZ3JwY19zbGljZSBuZWVkbGUpOworCitHUFJBUEkgdWludDMyX3QgZ3JwY19zbGljZV9oYXNoKGdycGNfc2xpY2Ugcyk7CiAKIC8qIERvIHR3byBzbGljZXMgcG9pbnQgYXQgdGhlIHNhbWUgbWVtb3J5LCB3aXRoIHRoZSBzYW1lIGxlbmd0aAogICAgSWYgYSBvciBiIGlzIGlubGluZWQsIGFjdHVhbGx5IGNvbXBhcmVzIGRhdGEgKi8KIEdQUkFQSSBpbnQgZ3JwY19zbGljZV9pc19lcXVpdmFsZW50KGdycGNfc2xpY2UgYSwgZ3JwY19zbGljZSBiKTsKIAorLyogUmV0dXJuIGEgc2xpY2UgcG9pbnRpbmcgdG8gbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSB0aGF0IGhhcyB0aGUgc2FtZSBjb250ZW50cworICogYXMgXGEgcyAqLworR1BSQVBJIGdycGNfc2xpY2UgZ3JwY19zbGljZV9kdXAoZ3JwY19zbGljZSBhKTsKKworLyogUmV0dXJuIGEgY29weSBvZiBzbGljZSBhcyBhIEMgc3RyaW5nLiBPZmZlcnMgbm8gcHJvdGVjdGlvbiBhZ2FpbnN0IGVtYmVkZGVkCisgICBOVUxMJ3MuIFJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdpdGggZ3ByX2ZyZWUuICovCitHUFJBUEkgY2hhciAqZ3JwY19zbGljZV90b19jX3N0cmluZyhncnBjX3NsaWNlIHMpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFja2FnZS54bWwgYi9wYWNrYWdlLnhtbAppbmRleCAwNmNlNjdhLi5kMzY5YWJhIDEwMDY0NAotLS0gYS9wYWNrYWdlLnhtbAorKysgYi9wYWNrYWdlLnhtbApAQCAtMjAwLDYgKzIwMCw3IEBACiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9pb21nci9lbmRwb2ludC5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9pb21nci9lbmRwb2ludF9wYWlyLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmgiIHJvbGU9InNyYyIgLz4KKyAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yX2ludGVybmFsLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL2lvbWdyL2V2X2Vwb2xsX2xpbnV4LmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL2lvbWdyL2V2X3BvbGxfcG9zaXguaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9zaXguaCIgcm9sZT0ic3JjIiAvPgpAQCAtMjUyLDYgKzI1Myw3IEBACiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9qc29uL2pzb25fcmVhZGVyLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL2pzb24vanNvbl93cml0ZXIuaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5oIiByb2xlPSJzcmMiIC8+CisgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmgiIHJvbGU9InNyYyIgLz4KQEAgLTI2NSwxNCArMjY3LDE3IEBACiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zdXJmYWNlL2luaXQuaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvc3VyZmFjZS9sYW1lX2NsaWVudC5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5oIiByb2xlPSJzcmMiIC8+CisgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9ieXRlX3N0cmVhbS5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmgiIHJvbGU9InNyYyIgLz4KLSAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmgiIHJvbGU9InNyYyIgLz4KKyAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5oIiByb2xlPSJzcmMiIC8+CisgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiIHJvbGU9InNyYyIgLz4KKyAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfaW1wbC5oIiByb2xlPSJzcmMiIC8+CkBAIC0yODksMTEgKzI5NCw5IEBACiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmgiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3BhcnNlci5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oIiByb2xlPSJzcmMiIC8+Ci0gICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaCIgcm9sZT0ic3JjIiAvPgotICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5oIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuaCIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi9hbHBuL2FscG4uaCIgcm9sZT0ic3JjIiAvPgpAQCAtNDQ2LDYgKzQ0OSw4IEBACiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIiByb2xlPSJzcmMiIC8+CisgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMiIHJvbGU9InNyYyIgLz4KKyAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybi5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zdXJmYWNlL2FsYXJtLmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmMiIHJvbGU9InNyYyIgLz4KQEAgLTQ2NywxMiArNDcyLDEzIEBACiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYyIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYyIgcm9sZT0ic3JjIiAvPgotICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYyIgcm9sZT0ic3JjIiAvPgorICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYyIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3BpZF9jb250cm9sbGVyLmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMiIHJvbGU9InNyYyIgLz4KKyAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMiIHJvbGU9InNyYyIgLz4KICAgICA8ZmlsZSBiYXNlaW5zdGFsbGRpcj0iLyIgbmFtZT0ic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfb3Bfc3RyaW5nLmMiIHJvbGU9InNyYyIgLz4KQEAgLTQ5Myw3ICs0OTksNiBAQAogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuYyIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYyIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jIiByb2xlPSJzcmMiIC8+Ci0gICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbGlzdHMuYyIgcm9sZT0ic3JjIiAvPgogICAgIDxmaWxlIGJhc2VpbnN0YWxsZGlyPSIvIiBuYW1lPSJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RyZWFtX21hcC5jIiByb2xlPSJzcmMiIC8+CiAgICAgPGZpbGUgYmFzZWluc3RhbGxkaXI9Ii8iIG5hbWU9InNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuYyIgcm9sZT0ic3JjIiAvPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L2NlbnN1cy9nZW4vY2Vuc3VzLnBiLmggYi9zcmMvY29yZS9leHQvY2Vuc3VzL2dlbi9jZW5zdXMucGIuaAppbmRleCBkYWU1ODNmLi5jODU0NmVhIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvY2Vuc3VzL2dlbi9jZW5zdXMucGIuaAorKysgYi9zcmMvY29yZS9leHQvY2Vuc3VzL2dlbi9jZW5zdXMucGIuaApAQCAtMjkyLDQgKzI5Miw0IEBACiB9IC8qIGV4dGVybiAiQyIgKi8KICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBHUlBDX0NPUkVfRVhUX0NFTlNVU19HRU5fQ0VOU1VTX1BCX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC9jZW5zdXMvZ2VuL3RyYWNlX2NvbnRleHQucGIuaCBiL3NyYy9jb3JlL2V4dC9jZW5zdXMvZ2VuL3RyYWNlX2NvbnRleHQucGIuaAppbmRleCAyNjNjNGM1Li5jZmIyZjA0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvY2Vuc3VzL2dlbi90cmFjZV9jb250ZXh0LnBiLmgKKysrIGIvc3JjL2NvcmUvZXh0L2NlbnN1cy9nZW4vdHJhY2VfY29udGV4dC5wYi5oCkBAIC05Niw0ICs5Niw0IEBACiB9IC8qIGV4dGVybiAiQyIgKi8KICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBHUlBDX0NPUkVfRVhUX0NFTlNVU19HRU5fVFJBQ0VfQ09OVEVYVF9QQl9IICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvY2Vuc3VzL2dycGNfZmlsdGVyLmMgYi9zcmMvY29yZS9leHQvY2Vuc3VzL2dycGNfZmlsdGVyLmMKaW5kZXggOGU0ZDQ3My4uNjVjZmUxZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L2NlbnN1cy9ncnBjX2ZpbHRlci5jCisrKyBiL3NyYy9jb3JlL2V4dC9jZW5zdXMvZ3JwY19maWx0ZXIuYwpAQCAtNjcsOSArNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX2RhdGEgKmNoYW5kKSB7CiAgIGdycGNfbGlua2VkX21kZWxlbSAqbTsKICAgZm9yIChtID0gbWQtPmxpc3QuaGVhZDsgbSAhPSBOVUxMOyBtID0gbS0+bmV4dCkgewotICAgIGlmIChtLT5tZC0+a2V5ID09IEdSUENfTURTVFJfUEFUSCkgewotICAgICAgZ3ByX2xvZyhHUFJfREVCVUcsICIlcyIsCi0gICAgICAgICAgICAgIChjb25zdCBjaGFyICopR1JQQ19TTElDRV9TVEFSVF9QVFIobS0+bWQtPnZhbHVlLT5zbGljZSkpOworICAgIGlmIChncnBjX3NsaWNlX2VxKEdSUENfTURLRVkobS0+bWQpLCBHUlBDX01EU1RSX1BBVEgpKSB7CiAgICAgICAvKiBBZGQgbWV0aG9kIHRhZyBoZXJlICovCiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvY2xpZW50X2NoYW5uZWwvY2xpZW50X2NoYW5uZWwuYyBiL3NyYy9jb3JlL2V4dC9jbGllbnRfY2hhbm5lbC9jbGllbnRfY2hhbm5lbC5jCmluZGV4IDg2NWU5MWEuLjA3ZWI2OGEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC9jbGllbnRfY2hhbm5lbC9jbGllbnRfY2hhbm5lbC5jCisrKyBiL3NyYy9jb3JlL2V4dC9jbGllbnRfY2hhbm5lbC9jbGllbnRfY2hhbm5lbC5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL2lvbWdyLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL3BvbGxpbmdfZW50aXR5LmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3Byb2ZpbGluZy90aW1lcnMuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuaCIKQEAgLTg5LDcgKzkwLDcgQEAKICAgZ3ByX2ZyZWUocCk7CiB9CiAKLXN0YXRpYyBjb25zdCBncnBjX21kc3RyX2hhc2hfdGFibGVfdnRhYmxlIG1ldGhvZF9wYXJhbWV0ZXJzX3Z0YWJsZSA9IHsKK3N0YXRpYyBjb25zdCBncnBjX3NsaWNlX2hhc2hfdGFibGVfdnRhYmxlIG1ldGhvZF9wYXJhbWV0ZXJzX3Z0YWJsZSA9IHsKICAgICBtZXRob2RfcGFyYW1ldGVyc19mcmVlLCBtZXRob2RfcGFyYW1ldGVyc19jb3B5fTsKIAogc3RhdGljIHZvaWQgKm1ldGhvZF9wYXJhbWV0ZXJzX2NyZWF0ZV9mcm9tX2pzb24oY29uc3QgZ3JwY19qc29uICpqc29uKSB7CkBAIC0xNzEsNyArMTcyLDcgQEAKICAgLyoqIHNlcnZpY2UgY29uZmlnIGluIEpTT04gZm9ybSAqLwogICBjaGFyICpzZXJ2aWNlX2NvbmZpZ19qc29uOwogICAvKiogbWFwcyBtZXRob2QgbmFtZXMgdG8gbWV0aG9kX3BhcmFtZXRlcnMgc3RydWN0cyAqLwotICBncnBjX21kc3RyX2hhc2hfdGFibGUgKm1ldGhvZF9wYXJhbXNfdGFibGU7CisgIGdycGNfc2xpY2VfaGFzaF90YWJsZSAqbWV0aG9kX3BhcmFtc190YWJsZTsKICAgLyoqIGluY29taW5nIHJlc29sdmVyIHJlc3VsdCAtIHNldCBieSByZXNvbHZlci5uZXh0KCkgKi8KICAgZ3JwY19jaGFubmVsX2FyZ3MgKnJlc29sdmVyX3Jlc3VsdDsKICAgLyoqIGEgbGlzdCBvZiBjbG9zdXJlcyB0aGF0IGFyZSBhbGwgd2FpdGluZyBmb3IgY29uZmlnIHRvIGNvbWUgaW4gKi8KQEAgLTI3Myw3ICsyNzQsNyBAQAogICBjaGFyICpsYl9wb2xpY3lfbmFtZSA9IE5VTEw7CiAgIGdycGNfbGJfcG9saWN5ICpsYl9wb2xpY3kgPSBOVUxMOwogICBncnBjX2xiX3BvbGljeSAqb2xkX2xiX3BvbGljeTsKLSAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlICptZXRob2RfcGFyYW1zX3RhYmxlID0gTlVMTDsKKyAgZ3JwY19zbGljZV9oYXNoX3RhYmxlICptZXRob2RfcGFyYW1zX3RhYmxlID0gTlVMTDsKICAgZ3JwY19jb25uZWN0aXZpdHlfc3RhdGUgc3RhdGUgPSBHUlBDX0NIQU5ORUxfVFJBTlNJRU5UX0ZBSUxVUkU7CiAgIGJvb2wgZXhpdF9pZGxlID0gZmFsc2U7CiAgIGdycGNfZXJyb3IgKnN0YXRlX2Vycm9yID0gR1JQQ19FUlJPUl9DUkVBVEUoIk5vIGxvYWQgYmFsYW5jaW5nIHBvbGljeSIpOwpAQCAtMzc5LDcgKzM4MCw3IEBACiAgICAgY2hhbmQtPnNlcnZpY2VfY29uZmlnX2pzb24gPSBzZXJ2aWNlX2NvbmZpZ19qc29uOwogICB9CiAgIGlmIChjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSAhPSBOVUxMKSB7Ci0gICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3VucmVmKGV4ZWNfY3R4LCBjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSk7CisgICAgZ3JwY19zbGljZV9oYXNoX3RhYmxlX3VucmVmKGV4ZWNfY3R4LCBjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSk7CiAgIH0KICAgY2hhbmQtPm1ldGhvZF9wYXJhbXNfdGFibGUgPSBtZXRob2RfcGFyYW1zX3RhYmxlOwogICBpZiAobGJfcG9saWN5ICE9IE5VTEwpIHsKQEAgLTU3OSw3ICs1ODAsNyBAQAogICBncHJfZnJlZShjaGFuZC0+bGJfcG9saWN5X25hbWUpOwogICBncHJfZnJlZShjaGFuZC0+c2VydmljZV9jb25maWdfanNvbik7CiAgIGlmIChjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSAhPSBOVUxMKSB7Ci0gICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3VucmVmKGV4ZWNfY3R4LCBjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSk7CisgICAgZ3JwY19zbGljZV9oYXNoX3RhYmxlX3VucmVmKGV4ZWNfY3R4LCBjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSk7CiAgIH0KICAgZ3JwY19jb25uZWN0aXZpdHlfc3RhdGVfZGVzdHJveShleGVjX2N0eCwgJmNoYW5kLT5zdGF0ZV90cmFja2VyKTsKICAgZ3JwY19wb2xsc2V0X3NldF9kZXN0cm95KGNoYW5kLT5pbnRlcmVzdGVkX3BhcnRpZXMpOwpAQCAtNjE0LDcgKzYxNSw3IEBACiAgIC8vIHRvIGF2b2lkIHRoaXMgd2l0aG91dCBicmVha2luZyB0aGUgZ3JwY19kZWFkbGluZV9zdGF0ZSBhYnN0cmFjdGlvbi4KICAgZ3JwY19kZWFkbGluZV9zdGF0ZSBkZWFkbGluZV9zdGF0ZTsKIAotICBncnBjX21kc3RyICpwYXRoOyAgLy8gUmVxdWVzdCBwYXRoLgorICBncnBjX3NsaWNlIHBhdGg7ICAvLyBSZXF1ZXN0IHBhdGguCiAgIGdwcl90aW1lc3BlYyBjYWxsX3N0YXJ0X3RpbWU7CiAgIGdwcl90aW1lc3BlYyBkZWFkbGluZTsKICAgd2FpdF9mb3JfcmVhZHlfdmFsdWUgd2FpdF9mb3JfcmVhZHlfZnJvbV9zZXJ2aWNlX2NvbmZpZzsKQEAgLTEwMTgsMTAgKzEwMTksMTAgQEAKICAgaWYgKGVycm9yID09IEdSUENfRVJST1JfTk9ORSkgewogICAgIC8vIEdldCB0aGUgbWV0aG9kIGNvbmZpZyB0YWJsZSBmcm9tIGNoYW5uZWwgZGF0YS4KICAgICBncHJfbXVfbG9jaygmY2hhbmQtPm11KTsKLSAgICBncnBjX21kc3RyX2hhc2hfdGFibGUgKm1ldGhvZF9wYXJhbXNfdGFibGUgPSBOVUxMOworICAgIGdycGNfc2xpY2VfaGFzaF90YWJsZSAqbWV0aG9kX3BhcmFtc190YWJsZSA9IE5VTEw7CiAgICAgaWYgKGNoYW5kLT5tZXRob2RfcGFyYW1zX3RhYmxlICE9IE5VTEwpIHsKICAgICAgIG1ldGhvZF9wYXJhbXNfdGFibGUgPQotICAgICAgICAgIGdycGNfbWRzdHJfaGFzaF90YWJsZV9yZWYoY2hhbmQtPm1ldGhvZF9wYXJhbXNfdGFibGUpOworICAgICAgICAgIGdycGNfc2xpY2VfaGFzaF90YWJsZV9yZWYoY2hhbmQtPm1ldGhvZF9wYXJhbXNfdGFibGUpOwogICAgIH0KICAgICBncHJfbXVfdW5sb2NrKCZjaGFuZC0+bXUpOwogICAgIC8vIElmIHRoZSBtZXRob2QgY29uZmlnIHRhYmxlIHdhcyBwcmVzZW50LCB1c2UgaXQuCkBAIC0xMDUwLDcgKzEwNTEsNyBAQAogICAgICAgICAgIGdwcl9tdV91bmxvY2soJmNhbGxkLT5tdSk7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGdycGNfbWRzdHJfaGFzaF90YWJsZV91bnJlZihleGVjX2N0eCwgbWV0aG9kX3BhcmFtc190YWJsZSk7CisgICAgICBncnBjX3NsaWNlX2hhc2hfdGFibGVfdW5yZWYoZXhlY19jdHgsIG1ldGhvZF9wYXJhbXNfdGFibGUpOwogICAgIH0KICAgfQogICBHUlBDX0NBTExfU1RBQ0tfVU5SRUYoZXhlY19jdHgsIGNhbGxkLT5vd25pbmdfY2FsbCwgInJlYWRfc2VydmljZV9jb25maWciKTsKQEAgLTEwNjQsNyArMTA2NSw3IEBACiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CiAgIC8vIEluaXRpYWxpemUgZGF0YSBtZW1iZXJzLgogICBncnBjX2RlYWRsaW5lX3N0YXRlX2luaXQoZXhlY19jdHgsIGVsZW0sIGFyZ3MtPmNhbGxfc3RhY2spOwotICBjYWxsZC0+cGF0aCA9IEdSUENfTURTVFJfUkVGKGFyZ3MtPnBhdGgpOworICBjYWxsZC0+cGF0aCA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKGFyZ3MtPnBhdGgpOwogICBjYWxsZC0+Y2FsbF9zdGFydF90aW1lID0gYXJncy0+c3RhcnRfdGltZTsKICAgY2FsbGQtPmRlYWRsaW5lID0gZ3ByX2NvbnZlcnRfY2xvY2tfdHlwZShhcmdzLT5kZWFkbGluZSwgR1BSX0NMT0NLX01PTk9UT05JQyk7CiAgIGNhbGxkLT53YWl0X2Zvcl9yZWFkeV9mcm9tX3NlcnZpY2VfY29uZmlnID0gV0FJVF9GT1JfUkVBRFlfVU5TRVQ7CkBAIC0xMDg4LDggKzEwODksOCBAQAogICBpZiAoY2hhbmQtPmxiX3BvbGljeSAhPSBOVUxMKSB7CiAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgcmVzb2x2ZXIgcmVzdWx0LCBzbyBjaGVjayBmb3Igc2VydmljZSBjb25maWcuCiAgICAgaWYgKGNoYW5kLT5tZXRob2RfcGFyYW1zX3RhYmxlICE9IE5VTEwpIHsKLSAgICAgIGdycGNfbWRzdHJfaGFzaF90YWJsZSAqbWV0aG9kX3BhcmFtc190YWJsZSA9Ci0gICAgICAgICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3JlZihjaGFuZC0+bWV0aG9kX3BhcmFtc190YWJsZSk7CisgICAgICBncnBjX3NsaWNlX2hhc2hfdGFibGUgKm1ldGhvZF9wYXJhbXNfdGFibGUgPQorICAgICAgICAgIGdycGNfc2xpY2VfaGFzaF90YWJsZV9yZWYoY2hhbmQtPm1ldGhvZF9wYXJhbXNfdGFibGUpOwogICAgICAgZ3ByX211X3VubG9jaygmY2hhbmQtPm11KTsKICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzICptZXRob2RfcGFyYW1zID0gZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX2dldCgKICAgICAgICAgICBleGVjX2N0eCwgbWV0aG9kX3BhcmFtc190YWJsZSwgYXJncy0+cGF0aCk7CkBAIC0xMTA1LDcgKzExMDYsNyBAQAogICAgICAgICAgICAgICBtZXRob2RfcGFyYW1zLT53YWl0X2Zvcl9yZWFkeTsKICAgICAgICAgfQogICAgICAgfQotICAgICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3VucmVmKGV4ZWNfY3R4LCBtZXRob2RfcGFyYW1zX3RhYmxlKTsKKyAgICAgIGdycGNfc2xpY2VfaGFzaF90YWJsZV91bnJlZihleGVjX2N0eCwgbWV0aG9kX3BhcmFtc190YWJsZSk7CiAgICAgfSBlbHNlIHsKICAgICAgIGdwcl9tdV91bmxvY2soJmNoYW5kLT5tdSk7CiAgICAgfQpAQCAtMTEzNCw3ICsxMTM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFuZF9mcmVlX21lbW9yeSkgewogICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwogICBncnBjX2RlYWRsaW5lX3N0YXRlX2Rlc3Ryb3koZXhlY19jdHgsIGVsZW0pOwotICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBjYWxsZC0+cGF0aCk7CisgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIGNhbGxkLT5wYXRoKTsKICAgR1JQQ19FUlJPUl9VTlJFRihjYWxsZC0+Y2FuY2VsX2Vycm9yKTsKICAgZ3JwY19zdWJjaGFubmVsX2NhbGwgKmNhbGwgPSBHRVRfQ0FMTChjYWxsZCk7CiAgIGlmIChjYWxsICE9IE5VTEwgJiYgY2FsbCAhPSBDQU5DRUxMRURfQ0FMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L2NsaWVudF9jaGFubmVsL3N1YmNoYW5uZWwuYyBiL3NyYy9jb3JlL2V4dC9jbGllbnRfY2hhbm5lbC9zdWJjaGFubmVsLmMKaW5kZXggMDViMDg4Mi4uYzUwNDFmNiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L2NsaWVudF9jaGFubmVsL3N1YmNoYW5uZWwuYworKysgYi9zcmMvY29yZS9leHQvY2xpZW50X2NoYW5uZWwvc3ViY2hhbm5lbC5jCkBAIC02MzcsOSArNjM3LDggQEAKICAgZ3JwY19lcnJvciAqZXJyb3IgPSBncnBjX2NoYW5uZWxfc3RhY2tfYnVpbGRlcl9maW5pc2goCiAgICAgICBleGVjX2N0eCwgYnVpbGRlciwgMCwgMSwgY29ubmVjdGlvbl9kZXN0cm95LCBOVUxMLCAodm9pZCAqKikmY29uKTsKICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewotICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKLSAgICBncHJfbG9nKEdQUl9FUlJPUiwgImVycm9yIGluaXRpYWxpemluZyBzdWJjaGFubmVsIHN0YWNrOiAlcyIsIG1zZyk7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOworICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiZXJyb3IgaW5pdGlhbGl6aW5nIHN1YmNoYW5uZWwgc3RhY2s6ICVzIiwKKyAgICAgICAgICAgIGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKSk7CiAgICAgR1JQQ19FUlJPUl9VTlJFRihlcnJvcik7CiAgICAgYWJvcnQoKTsgLyogVE9ETyhjdGlsbGVyKTogd2hhdCB0byBkbyBoZXJlPyAqLwogICB9CkBAIC03MDQsNyArNzAzLDYgQEAKIAogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKICAgICBncHJfbG9nKEdQUl9JTkZPLCAiQ29ubmVjdCBmYWlsZWQ6ICVzIiwgZXJybXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKGVycm1zZyk7CiAKICAgICBtYXliZV9zdGFydF9jb25uZWN0aW5nX2xvY2tlZChleGVjX2N0eCwgYyk7CiAgICAgR1JQQ19TVUJDSEFOTkVMX1dFQUtfVU5SRUYoZXhlY19jdHgsIGMsICJjb25uZWN0aW5nIik7CkBAIC03NjMsNyArNzYxLDcgQEAKIAogZ3JwY19lcnJvciAqZ3JwY19jb25uZWN0ZWRfc3ViY2hhbm5lbF9jcmVhdGVfY2FsbCgKICAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jb25uZWN0ZWRfc3ViY2hhbm5lbCAqY29uLAotICAgIGdycGNfcG9sbGluZ19lbnRpdHkgKnBvbGxlbnQsIGdycGNfbWRzdHIgKnBhdGgsIGdwcl90aW1lc3BlYyBzdGFydF90aW1lLAorICAgIGdycGNfcG9sbGluZ19lbnRpdHkgKnBvbGxlbnQsIGdycGNfc2xpY2UgcGF0aCwgZ3ByX3RpbWVzcGVjIHN0YXJ0X3RpbWUsCiAgICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLCBncnBjX3N1YmNoYW5uZWxfY2FsbCAqKmNhbGwpIHsKICAgZ3JwY19jaGFubmVsX3N0YWNrICpjaGFuc3RrID0gQ0hBTk5FTF9TVEFDS19GUk9NX0NPTk5FQ1RJT04oY29uKTsKICAgKmNhbGwgPSBncHJfbWFsbG9jKHNpemVvZihncnBjX3N1YmNoYW5uZWxfY2FsbCkgKyBjaGFuc3RrLT5jYWxsX3N0YWNrX3NpemUpOwpAQCAtNzc1LDcgKzc3Myw3IEBACiAgIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICBjb25zdCBjaGFyICplcnJvcl9zdHJpbmcgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJlcnJvcjogJXMiLCBlcnJvcl9zdHJpbmcpOwotICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcoZXJyb3Jfc3RyaW5nKTsKKwogICAgIGdwcl9mcmVlKCpjYWxsKTsKICAgICByZXR1cm4gZXJyb3I7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC9jbGllbnRfY2hhbm5lbC9zdWJjaGFubmVsLmggYi9zcmMvY29yZS9leHQvY2xpZW50X2NoYW5uZWwvc3ViY2hhbm5lbC5oCmluZGV4IDY4NDY3NWUuLjliZDM1YTcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC9jbGllbnRfY2hhbm5lbC9zdWJjaGFubmVsLmgKKysrIGIvc3JjL2NvcmUvZXh0L2NsaWVudF9jaGFubmVsL3N1YmNoYW5uZWwuaApAQCAtMTE0LDcgKzExNCw3IEBACiAvKiogY29uc3RydWN0IGEgc3ViY2hhbm5lbCBjYWxsICovCiBncnBjX2Vycm9yICpncnBjX2Nvbm5lY3RlZF9zdWJjaGFubmVsX2NyZWF0ZV9jYWxsKAogICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2Nvbm5lY3RlZF9zdWJjaGFubmVsICpjb25uZWN0ZWRfc3ViY2hhbm5lbCwKLSAgICBncnBjX3BvbGxpbmdfZW50aXR5ICpwb2xsZW50LCBncnBjX21kc3RyICpwYXRoLCBncHJfdGltZXNwZWMgc3RhcnRfdGltZSwKKyAgICBncnBjX3BvbGxpbmdfZW50aXR5ICpwb2xsZW50LCBncnBjX3NsaWNlIHBhdGgsIGdwcl90aW1lc3BlYyBzdGFydF90aW1lLAogICAgIGdwcl90aW1lc3BlYyBkZWFkbGluZSwgZ3JwY19zdWJjaGFubmVsX2NhbGwgKipzdWJjaGFubmVsX2NhbGwpOwogCiAvKiogcHJvY2VzcyBhIHRyYW5zcG9ydCBsZXZlbCBvcCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L2xiX3BvbGljeS9ncnBjbGIvZ3JwY2xiLmMgYi9zcmMvY29yZS9leHQvbGJfcG9saWN5L2dycGNsYi9ncnBjbGIuYwppbmRleCA5N2Y5OGRmLi4zMDhmYWNiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvbGJfcG9saWN5L2dycGNsYi9ncnBjbGIuYworKysgYi9zcmMvY29yZS9leHQvbGJfcG9saWN5L2dycGNsYi9ncnBjbGIuYwpAQCAtMTM1LDEzICsxMzUsMTMgQEAKIAogLyogYWRkIGxiX3Rva2VuIG9mIHNlbGVjdGVkIHN1YmNoYW5uZWwgKGFkZHJlc3MpIHRvIHRoZSBjYWxsJ3MgaW5pdGlhbAogICogbWV0YWRhdGEgKi8KLXN0YXRpYyB2b2lkIGluaXRpYWxfbWV0YWRhdGFfYWRkX2xiX3Rva2VuKAotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmluaXRpYWxfbWV0YWRhdGEsCi0gICAgZ3JwY19saW5rZWRfbWRlbGVtICpsYl90b2tlbl9tZGVsZW1fc3RvcmFnZSwgZ3JwY19tZGVsZW0gKmxiX3Rva2VuKSB7CitzdGF0aWMgZ3JwY19lcnJvciAqaW5pdGlhbF9tZXRhZGF0YV9hZGRfbGJfdG9rZW4oCisgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmluaXRpYWxfbWV0YWRhdGEsCisgICAgZ3JwY19saW5rZWRfbWRlbGVtICpsYl90b2tlbl9tZGVsZW1fc3RvcmFnZSwgZ3JwY19tZGVsZW0gbGJfdG9rZW4pIHsKICAgR1BSX0FTU0VSVChsYl90b2tlbl9tZGVsZW1fc3RvcmFnZSAhPSBOVUxMKTsKLSAgR1BSX0FTU0VSVChsYl90b2tlbiAhPSBOVUxMKTsKLSAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbChpbml0aWFsX21ldGFkYXRhLCBsYl90b2tlbl9tZGVsZW1fc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYl90b2tlbik7CisgIEdQUl9BU1NFUlQoIUdSUENfTURJU05VTEwobGJfdG9rZW4pKTsKKyAgcmV0dXJuIGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX3RhaWwoZXhlY19jdHgsIGluaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiX3Rva2VuX21kZWxlbV9zdG9yYWdlLCBsYl90b2tlbik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHdyYXBwZWRfcnJfY2xvc3VyZV9hcmcgewpAQCAtMTYxLDcgKzE2MSw3IEBACiAgIGdycGNfY29ubmVjdGVkX3N1YmNoYW5uZWwgKip0YXJnZXQ7CiAKICAgLyogdGhlIExCIHRva2VuIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGljayAqLwotICBncnBjX21kZWxlbSAqbGJfdG9rZW47CisgIGdycGNfbWRlbGVtIGxiX3Rva2VuOwogCiAgIC8qIHN0b3JhZ2UgZm9yIHRoZSBsYiB0b2tlbiBpbml0aWFsIG1ldGFkYXRhIG1kZWxlbSAqLwogICBncnBjX2xpbmtlZF9tZGVsZW0gKmxiX3Rva2VuX21kZWxlbV9zdG9yYWdlOwpAQCAtMTg4LDggKzE4OCw4IEBACiAgICAgICogYWRkcmVzc2VzIGZhaWxlZCB0byBjb25uZWN0KS4gVGhlcmUgd29uJ3QgYmUgYW55IHVzZXJfZGF0YS90b2tlbgogICAgICAqIGF2YWlsYWJsZSAqLwogICAgIGlmICgqd2NfYXJnLT50YXJnZXQgIT0gTlVMTCkgewotICAgICAgaWYgKHdjX2FyZy0+bGJfdG9rZW4gIT0gTlVMTCkgewotICAgICAgICBpbml0aWFsX21ldGFkYXRhX2FkZF9sYl90b2tlbih3Y19hcmctPmluaXRpYWxfbWV0YWRhdGEsCisgICAgICBpZiAoIUdSUENfTURJU05VTEwod2NfYXJnLT5sYl90b2tlbikpIHsKKyAgICAgICAgaW5pdGlhbF9tZXRhZGF0YV9hZGRfbGJfdG9rZW4oZXhlY19jdHgsIHdjX2FyZy0+aW5pdGlhbF9tZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NfYXJnLT5sYl90b2tlbl9tZGVsZW1fc3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fUkVGKHdjX2FyZy0+bGJfdG9rZW4pKTsKICAgICAgIH0gZWxzZSB7CkBAIC0zNDUsOCArMzQ1LDcgQEAKIAogICAvKiBjYWxsIHN0YXR1cyBjb2RlIGFuZCBkZXRhaWxzLCBzZXQgaW4gbGJfb25fc2VydmVyX3N0YXR1c19yZWNlaXZlZCgpICovCiAgIGdycGNfc3RhdHVzX2NvZGUgbGJfY2FsbF9zdGF0dXM7Ci0gIGNoYXIgKmxiX2NhbGxfc3RhdHVzX2RldGFpbHM7Ci0gIHNpemVfdCBsYl9jYWxsX3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5OworICBncnBjX3NsaWNlIGxiX2NhbGxfc3RhdHVzX2RldGFpbHM7CiAKICAgLyoqIExCIGNhbGwgcmV0cnkgYmFja29mZiBzdGF0ZSAqLwogICBncHJfYmFja29mZiBsYl9jYWxsX2JhY2tvZmZfc3RhdGU7CkBAIC0zODgsMTAgKzM4NywxNCBAQAogCiAvKiB2dGFibGUgZm9yIExCIHRva2VucyBpbiBncnBjX2xiX2FkZHJlc3Nlcy4gKi8KIHN0YXRpYyB2b2lkICpsYl90b2tlbl9jb3B5KHZvaWQgKnRva2VuKSB7Ci0gIHJldHVybiB0b2tlbiA9PSBOVUxMID8gTlVMTCA6IEdSUENfTURFTEVNX1JFRih0b2tlbik7CisgIHJldHVybiB0b2tlbiA9PSBOVUxMCisgICAgICAgICAgICAgPyBOVUxMCisgICAgICAgICAgICAgOiAodm9pZCAqKUdSUENfTURFTEVNX1JFRigoZ3JwY19tZGVsZW0peyh1aW50cHRyX3QpdG9rZW59KS5wYXlsb2FkOwogfQogc3RhdGljIHZvaWQgbGJfdG9rZW5fZGVzdHJveShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdG9rZW4pIHsKLSAgaWYgKHRva2VuICE9IE5VTEwpIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCB0b2tlbik7CisgIGlmICh0b2tlbiAhPSBOVUxMKSB7CisgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIChncnBjX21kZWxlbSl7KHVpbnRwdHJfdCl0b2tlbn0pOworICB9CiB9CiBzdGF0aWMgaW50IGxiX3Rva2VuX2NtcCh2b2lkICp0b2tlbjEsIHZvaWQgKnRva2VuMikgewogICBpZiAodG9rZW4xID4gdG9rZW4yKSByZXR1cm4gMTsKQEAgLTQ1OSwxMCArNDYyLDExIEBACiAgICAgICAgICAgR1BSX0FSUkFZX1NJWkUoc2VydmVyLT5sb2FkX2JhbGFuY2VfdG9rZW4pOwogICAgICAgY29uc3Qgc2l6ZV90IGxiX3Rva2VuX2xlbmd0aCA9CiAgICAgICAgICAgc3RybmxlbihzZXJ2ZXItPmxvYWRfYmFsYW5jZV90b2tlbiwgbGJfdG9rZW5fbWF4X2xlbmd0aCk7Ci0gICAgICBncnBjX21kc3RyICpsYl90b2tlbl9tZHN0ciA9IGdycGNfbWRzdHJfZnJvbV9idWZmZXIoCi0gICAgICAgICAgKHVpbnQ4X3QgKilzZXJ2ZXItPmxvYWRfYmFsYW5jZV90b2tlbiwgbGJfdG9rZW5fbGVuZ3RoKTsKLSAgICAgIHVzZXJfZGF0YSA9IGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncygKLSAgICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9MQl9UT0tFTiwgbGJfdG9rZW5fbWRzdHIpOworICAgICAgZ3JwY19zbGljZSBsYl90b2tlbl9tZHN0ciA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKAorICAgICAgICAgIHNlcnZlci0+bG9hZF9iYWxhbmNlX3Rva2VuLCBsYl90b2tlbl9sZW5ndGgpOworICAgICAgdXNlcl9kYXRhID0gKHZvaWQgKilncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhleGVjX2N0eCwgR1JQQ19NRFNUUl9MQl9UT0tFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJfdG9rZW5fbWRzdHIpCisgICAgICAgICAgICAgICAgICAgICAgLnBheWxvYWQ7CiAgICAgfSBlbHNlIHsKICAgICAgIGNoYXIgKnVyaSA9IGdycGNfc29ja2FkZHJfdG9fdXJpKCZhZGRyKTsKICAgICAgIGdwcl9sb2coR1BSX0lORk8sCkBAIC00NzAsNyArNDc0LDcgQEAKICAgICAgICAgICAgICAgImJlIHVzZWQgaW5zdGVhZCIsCiAgICAgICAgICAgICAgIHVyaSk7CiAgICAgICBncHJfZnJlZSh1cmkpOwotICAgICAgdXNlcl9kYXRhID0gR1JQQ19NREVMRU1fTEJfVE9LRU5fRU1QVFk7CisgICAgICB1c2VyX2RhdGEgPSAodm9pZCAqKUdSUENfTURFTEVNX0xCX1RPS0VOX0VNUFRZLnBheWxvYWQ7CiAgICAgfQogCiAgICAgZ3JwY19sYl9hZGRyZXNzZXNfc2V0X2FkZHJlc3MobGJfYWRkcmVzc2VzLCBhZGRyX2lkeCwgJmFkZHIuYWRkciwgYWRkci5sZW4sCkBAIC01NjQsNyArNTY4LDcgQEAKICAgICBHUlBDX0xCX1BPTElDWV9VTlJFRihleGVjX2N0eCwgd2NfYXJnLT5ycl9wb2xpY3ksICJnbGJfcGlja19zeW5jIik7CiAKICAgICAvKiBhZGQgdGhlIGxvYWQgcmVwb3J0aW5nIGluaXRpYWwgbWV0YWRhdGEgKi8KLSAgICBpbml0aWFsX21ldGFkYXRhX2FkZF9sYl90b2tlbihwaWNrX2FyZ3MtPmluaXRpYWxfbWV0YWRhdGEsCisgICAgaW5pdGlhbF9tZXRhZGF0YV9hZGRfbGJfdG9rZW4oZXhlY19jdHgsIHBpY2tfYXJncy0+aW5pdGlhbF9tZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrX2FyZ3MtPmxiX3Rva2VuX21kZWxlbV9zdG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfTURFTEVNX1JFRih3Y19hcmctPmxiX3Rva2VuKSk7CiAKQEAgLTExMDMsMTEgKzExMDcsMTIgQEAKICAgLyogTm90ZSB0aGUgZm9sbG93aW5nIExCIGNhbGwgcHJvZ3Jlc3NlcyBldmVyeSB0aW1lIHRoZXJlJ3MgYWN0aXZpdHkgaW4gXGEKICAgICogZ2xiX3BvbGljeS0+YmFzZS5pbnRlcmVzdGVkX3BhcnRpZXMsIHdoaWNoIGlzIGNvbXByaXNlZCBvZiB0aGUgcG9sbGluZwogICAgKiBlbnRpdGllcyBmcm9tIFxhIGNsaWVudF9jaGFubmVsLiAqLworICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhnbGJfcG9saWN5LT5zZXJ2ZXJfbmFtZSk7CiAgIGdsYl9wb2xpY3ktPmxiX2NhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX3BvbGxzZXRfc2V0X2NhbGwoCiAgICAgICBleGVjX2N0eCwgZ2xiX3BvbGljeS0+bGJfY2hhbm5lbCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsCiAgICAgICBnbGJfcG9saWN5LT5iYXNlLmludGVyZXN0ZWRfcGFydGllcywKLSAgICAgICIvZ3JwYy5sYi52MS5Mb2FkQmFsYW5jZXIvQmFsYW5jZUxvYWQiLCBnbGJfcG9saWN5LT5zZXJ2ZXJfbmFtZSwKLSAgICAgIGdsYl9wb2xpY3ktPmRlYWRsaW5lLCBOVUxMKTsKKyAgICAgIEdSUENfTURTVFJfU0xBU0hfR1JQQ19ET1RfTEJfRE9UX1YxX0RPVF9MT0FEQkFMQU5DRVJfU0xBU0hfQkFMQU5DRUxPQUQsCisgICAgICAmaG9zdCwgZ2xiX3BvbGljeS0+ZGVhZGxpbmUsIE5VTEwpOwogCiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmZ2xiX3BvbGljeS0+bGJfaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZnbGJfcG9saWN5LT5sYl90cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKQEAgLTExMjAsOSArMTEyNSw2IEBACiAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIHJlcXVlc3RfcGF5bG9hZF9zbGljZSk7CiAgIGdycGNfZ3JwY2xiX3JlcXVlc3RfZGVzdHJveShyZXF1ZXN0KTsKIAotICBnbGJfcG9saWN5LT5sYl9jYWxsX3N0YXR1c19kZXRhaWxzID0gTlVMTDsKLSAgZ2xiX3BvbGljeS0+bGJfY2FsbF9zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9IDA7Ci0KICAgZ3JwY19jbG9zdXJlX2luaXQoJmdsYl9wb2xpY3ktPmxiX29uX3NlcnZlcl9zdGF0dXNfcmVjZWl2ZWQsCiAgICAgICAgICAgICAgICAgICAgIGxiX29uX3NlcnZlcl9zdGF0dXNfcmVjZWl2ZWQsIGdsYl9wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgIGdycGNfc2NoZWR1bGVfb25fZXhlY19jdHgpOwpAQCAtMTEzOCw3ICsxMTQwLDggQEAKICAgICAgICAgICAgICAgICAgICBHUlBDX0dSUENMQl9SRUNPTk5FQ1RfTUFYX0JBQ0tPRkZfU0VDT05EUyAqIDEwMDApOwogfQogCi1zdGF0aWMgdm9pZCBsYl9jYWxsX2Rlc3Ryb3lfbG9ja2VkKGdsYl9sYl9wb2xpY3kgKmdsYl9wb2xpY3kpIHsKK3N0YXRpYyB2b2lkIGxiX2NhbGxfZGVzdHJveV9sb2NrZWQoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYl9sYl9wb2xpY3kgKmdsYl9wb2xpY3kpIHsKICAgR1BSX0FTU0VSVChnbGJfcG9saWN5LT5sYl9jYWxsICE9IE5VTEwpOwogICBncnBjX2NhbGxfZGVzdHJveShnbGJfcG9saWN5LT5sYl9jYWxsKTsKICAgZ2xiX3BvbGljeS0+bGJfY2FsbCA9IE5VTEw7CkBAIC0xMTQ3LDcgKzExNTAsNyBAQAogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmdsYl9wb2xpY3ktPmxiX3RyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogCiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShnbGJfcG9saWN5LT5sYl9yZXF1ZXN0X3BheWxvYWQpOwotICBncHJfZnJlZShnbGJfcG9saWN5LT5sYl9jYWxsX3N0YXR1c19kZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgZ2xiX3BvbGljeS0+bGJfY2FsbF9zdGF0dXNfZGV0YWlscyk7CiB9CiAKIC8qCkBAIC0xMTc4LDE0ICsxMTgxLDE1IEBACiAgIG9wKys7CiAKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZnbGJfcG9saWN5LT5sYl9pbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPQorICAgICAgJmdsYl9wb2xpY3ktPmxiX2luaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKIAogICBHUFJfQVNTRVJUKGdsYl9wb2xpY3ktPmxiX3JlcXVlc3RfcGF5bG9hZCAhPSBOVUxMKTsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IGdsYl9wb2xpY3ktPmxiX3JlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IGdsYl9wb2xpY3ktPmxiX3JlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTExOTYsOCArMTIwMCw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmZ2xiX3BvbGljeS0+bGJfY2FsbF9zdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9CiAgICAgICAmZ2xiX3BvbGljeS0+bGJfY2FsbF9zdGF0dXNfZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICZnbGJfcG9saWN5LT5sYl9jYWxsX3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTIxMSw3ICsxMjEzLDcgQEAKIAogICBvcCA9IG9wczsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZnbGJfcG9saWN5LT5sYl9yZXNwb25zZV9wYXlsb2FkOworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJmdsYl9wb2xpY3ktPmxiX3Jlc3BvbnNlX3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xMjkzLDcgKzEyOTUsNyBAQAogICAgIGlmICghZ2xiX3BvbGljeS0+c2h1dHRpbmdfZG93bikgewogICAgICAgLyoga2VlcCBsaXN0ZW5pbmcgZm9yIHNlcnZlcmxpc3QgdXBkYXRlcyAqLwogICAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gICAgICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmZ2xiX3BvbGljeS0+bGJfcmVzcG9uc2VfcGF5bG9hZDsKKyAgICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmZ2xiX3BvbGljeS0+bGJfcmVzcG9uc2VfcGF5bG9hZDsKICAgICAgIG9wLT5mbGFncyA9IDA7CiAgICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgICAgb3ArKzsKQEAgLTEzNDAsMTUgKzEzNDIsMTggQEAKICAgR1BSX0FTU0VSVChnbGJfcG9saWN5LT5sYl9jYWxsICE9IE5VTEwpOwogCiAgIGlmIChncnBjX2xiX2dsYl90cmFjZSkgeworICAgIGNoYXIgKnN0YXR1c19kZXRhaWxzID0KKyAgICAgICAgZ3JwY19zbGljZV90b19jX3N0cmluZyhnbGJfcG9saWN5LT5sYl9jYWxsX3N0YXR1c19kZXRhaWxzKTsKICAgICBncHJfbG9nKEdQUl9ERUJVRywKICAgICAgICAgICAgICJTdGF0dXMgZnJvbSBMQiBzZXJ2ZXIgcmVjZWl2ZWQuIFN0YXR1cyA9ICVkLCBEZXRhaWxzID0gJyVzJywgIgogICAgICAgICAgICAgIihjYWxsOiAlcCkiLAotICAgICAgICAgICAgZ2xiX3BvbGljeS0+bGJfY2FsbF9zdGF0dXMsIGdsYl9wb2xpY3ktPmxiX2NhbGxfc3RhdHVzX2RldGFpbHMsCisgICAgICAgICAgICBnbGJfcG9saWN5LT5sYl9jYWxsX3N0YXR1cywgc3RhdHVzX2RldGFpbHMsCiAgICAgICAgICAgICAodm9pZCAqKWdsYl9wb2xpY3ktPmxiX2NhbGwpOworICAgIGdwcl9mcmVlKHN0YXR1c19kZXRhaWxzKTsKICAgfQogCi0gIC8qIFdlIG5lZWQgdG8gcGVyZm9ybWUgY2xlYW51cHMgbm8gbWF0dGVyIHdoYXQuICovCi0gIGxiX2NhbGxfZGVzdHJveV9sb2NrZWQoZ2xiX3BvbGljeSk7CisgIC8qIFdlIG5lZWQgdG8gcGVyZm9ybSBjbGVhbnVwcyBubyBtYXR0ZXIgd2hhdC4gKi8KKyAgbGJfY2FsbF9kZXN0cm95X2xvY2tlZChleGVjX2N0eCwgZ2xiX3BvbGljeSk7CiAKICAgaWYgKCFnbGJfcG9saWN5LT5zaHV0dGluZ19kb3duKSB7CiAgICAgLyogaWYgd2UgYXJlbid0IHNodXR0aW5nIGRvd24sIHJlc3RhcnQgdGhlIExCIGNsaWVudCBjYWxsIGFmdGVyIHNvbWUgdGltZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L2xvYWRfcmVwb3J0aW5nL2xvYWRfcmVwb3J0aW5nX2ZpbHRlci5jIGIvc3JjL2NvcmUvZXh0L2xvYWRfcmVwb3J0aW5nL2xvYWRfcmVwb3J0aW5nX2ZpbHRlci5jCmluZGV4IDA3ZWYxMGUuLjhhZjYxOTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC9sb2FkX3JlcG9ydGluZy9sb2FkX3JlcG9ydGluZ19maWx0ZXIuYworKysgYi9zcmMvY29yZS9leHQvbG9hZF9yZXBvcnRpbmcvbG9hZF9yZXBvcnRpbmdfZmlsdGVyLmMKQEAgLTQxLDEzICs0MSwxNyBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC9sb2FkX3JlcG9ydGluZy9sb2FkX3JlcG9ydGluZ19maWx0ZXIuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX2FyZ3MuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvcHJvZmlsaW5nL3RpbWVycy5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiCiAKIHR5cGVkZWYgc3RydWN0IGNhbGxfZGF0YSB7CiAgIGludHB0cl90IGlkOyAvKio8IGFuIGlkIHVuaXF1ZSB0byB0aGUgY2FsbCAqLwotICBjaGFyICp0cmFpbGluZ19tZF9zdHJpbmc7Ci0gIGNoYXIgKmluaXRpYWxfbWRfc3RyaW5nOwotICBjb25zdCBjaGFyICpzZXJ2aWNlX21ldGhvZDsKKyAgYm9vbCBoYXZlX3RyYWlsaW5nX21kX3N0cmluZzsKKyAgZ3JwY19zbGljZSB0cmFpbGluZ19tZF9zdHJpbmc7CisgIGJvb2wgaGF2ZV9pbml0aWFsX21kX3N0cmluZzsKKyAgZ3JwY19zbGljZSBpbml0aWFsX21kX3N0cmluZzsKKyAgYm9vbCBoYXZlX3NlcnZpY2VfbWV0aG9kOworICBncnBjX3NsaWNlIHNlcnZpY2VfbWV0aG9kOwogCiAgIC8qIHN0b3JlcyB0aGUgcmVjdl9pbml0aWFsX21ldGFkYXRhIG9wJ3MgcmVhZHkgY2xvc3VyZSwgd2hpY2ggd2Ugd3JhcCB3aXRoIG91cgogICAgKiBvd24gKG9uX2luaXRpYWxfbWRfcmVhZHkpIGluIG9yZGVyIHRvIGNhcHR1cmUgdGhlIGluY29taW5nIGluaXRpYWwgbWV0YWRhdGEKQEAgLTYzLDQyICs2NywyOCBAQAogICBpbnRwdHJfdCBpZDsgLyoqPCBhbiBpZCB1bmlxdWUgdG8gdGhlIGNoYW5uZWwgKi8KIH0gY2hhbm5lbF9kYXRhOwogCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGdycGNfY2FsbF9lbGVtZW50ICplbGVtOwotICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eDsKLX0gcmVjdl9tZF9maWx0ZXJfYXJnczsKLQotc3RhdGljIGdycGNfbWRlbGVtICpyZWN2X21kX2ZpbHRlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqbWQpIHsKLSAgcmVjdl9tZF9maWx0ZXJfYXJncyAqYSA9IHVzZXJfZGF0YTsKLSAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSBhLT5lbGVtOwotICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwotCi0gIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfUEFUSCkgewotICAgIGNhbGxkLT5zZXJ2aWNlX21ldGhvZCA9IGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPnZhbHVlKTsKLSAgfSBlbHNlIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfTEJfVE9LRU4pIHsKLSAgICBjYWxsZC0+aW5pdGlhbF9tZF9zdHJpbmcgPSBncHJfc3RyZHVwKGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPnZhbHVlKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gbWQ7Ci19Ci0KIHN0YXRpYyB2b2lkIG9uX2luaXRpYWxfbWRfcmVhZHkoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyKSB7CiAgIGdycGNfY2FsbF9lbGVtZW50ICplbGVtID0gdXNlcl9kYXRhOwogICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwogCiAgIGlmIChlcnIgPT0gR1JQQ19FUlJPUl9OT05FKSB7Ci0gICAgcmVjdl9tZF9maWx0ZXJfYXJncyBhOwotICAgIGEuZWxlbSA9IGVsZW07Ci0gICAgYS5leGVjX2N0eCA9IGV4ZWNfY3R4OwotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGV4ZWNfY3R4LCBjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZfbWRfZmlsdGVyLCAmYSk7Ci0gICAgaWYgKGNhbGxkLT5zZXJ2aWNlX21ldGhvZCA9PSBOVUxMKSB7CisgICAgaWYgKGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEtPmlkeC5uYW1lZC5wYXRoICE9IE5VTEwpIHsKKyAgICAgIGNhbGxkLT5zZXJ2aWNlX21ldGhvZCA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKAorICAgICAgICAgIEdSUENfTURWQUxVRShjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhLT5pZHgubmFtZWQucGF0aC0+bWQpKTsKKyAgICAgIGNhbGxkLT5oYXZlX3NlcnZpY2VfbWV0aG9kID0gdHJ1ZTsKKyAgICB9IGVsc2UgewogICAgICAgZXJyID0KICAgICAgICAgICBncnBjX2Vycm9yX2FkZF9jaGlsZChlcnIsIEdSUENfRVJST1JfQ1JFQVRFKCJNaXNzaW5nIDpwYXRoIGhlYWRlciIpKTsKICAgICB9CisgICAgaWYgKGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEtPmlkeC5uYW1lZC5sYl90b2tlbiAhPSBOVUxMKSB7CisgICAgICBjYWxsZC0+aW5pdGlhbF9tZF9zdHJpbmcgPSBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbCgKKyAgICAgICAgICBHUlBDX01EVkFMVUUoY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLmxiX3Rva2VuLT5tZCkpOworICAgICAgY2FsbGQtPmhhdmVfaW5pdGlhbF9tZF9zdHJpbmcgPSB0cnVlOworICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9yZW1vdmUoCisgICAgICAgICAgZXhlY19jdHgsIGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLmxiX3Rva2VuKTsKKyAgICB9CiAgIH0gZWxzZSB7CiAgICAgR1JQQ19FUlJPUl9SRUYoZXJyKTsKICAgfQpAQCAtMTQ5LDggKzEzOSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGQtPnNlcnZpY2VfbWV0aG9kfTsKICAgKi8KIAotICBncHJfZnJlZShjYWxsZC0+aW5pdGlhbF9tZF9zdHJpbmcpOwotICBncHJfZnJlZShjYWxsZC0+dHJhaWxpbmdfbWRfc3RyaW5nKTsKKyAgaWYgKGNhbGxkLT5oYXZlX2luaXRpYWxfbWRfc3RyaW5nKSB7CisgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2FsbGQtPmluaXRpYWxfbWRfc3RyaW5nKTsKKyAgfQorICBpZiAoY2FsbGQtPmhhdmVfdHJhaWxpbmdfbWRfc3RyaW5nKSB7CisgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2FsbGQtPnRyYWlsaW5nX21kX3N0cmluZyk7CisgIH0KKyAgaWYgKGNhbGxkLT5oYXZlX3NlcnZpY2VfbWV0aG9kKSB7CisgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2FsbGQtPnNlcnZpY2VfbWV0aG9kKTsKKyAgfQogfQogCiAvKiBDb25zdHJ1Y3RvciBmb3IgY2hhbm5lbF9kYXRhICovCkBAIC0xOTMsMTkgKzE5MCw2IEBACiAgICovCiB9CiAKLXN0YXRpYyBncnBjX21kZWxlbSAqbHJfdHJhaWxpbmdfbWRfZmlsdGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBncnBjX21kZWxlbSAqbWQpIHsKLSAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSB1c2VyX2RhdGE7Ci0gIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7Ci0KLSAgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9MQl9DT1NUX0JJTikgewotICAgIGNhbGxkLT50cmFpbGluZ19tZF9zdHJpbmcgPSBncHJfc3RyZHVwKGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPnZhbHVlKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gbWQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGxyX3N0YXJ0X3RyYW5zcG9ydF9zdHJlYW1fb3AoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2FsbF9lbGVtZW50ICplbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AgKm9wKSB7CkBAIC0yMTgsOCArMjAyLDE0IEBACiAgICAgY2FsbGQtPm9wc19yZWN2X2luaXRpYWxfbWV0YWRhdGFfcmVhZHkgPSBvcC0+cmVjdl9pbml0aWFsX21ldGFkYXRhX3JlYWR5OwogICAgIG9wLT5yZWN2X2luaXRpYWxfbWV0YWRhdGFfcmVhZHkgPSAmY2FsbGQtPm9uX2luaXRpYWxfbWRfcmVhZHk7CiAgIH0gZWxzZSBpZiAob3AtPnNlbmRfdHJhaWxpbmdfbWV0YWRhdGEpIHsKLSAgICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcihleGVjX2N0eCwgb3AtPnNlbmRfdHJhaWxpbmdfbWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJfdHJhaWxpbmdfbWRfZmlsdGVyLCBlbGVtKTsKKyAgICBpZiAob3AtPnNlbmRfdHJhaWxpbmdfbWV0YWRhdGEtPmlkeC5uYW1lZC5sYl9jb3N0X2JpbiAhPSBOVUxMKSB7CisgICAgICBjYWxsZC0+dHJhaWxpbmdfbWRfc3RyaW5nID0gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoCisgICAgICAgICAgR1JQQ19NRFZBTFVFKG9wLT5zZW5kX3RyYWlsaW5nX21ldGFkYXRhLT5pZHgubmFtZWQubGJfY29zdF9iaW4tPm1kKSk7CisgICAgICBjYWxsZC0+aGF2ZV90cmFpbGluZ19tZF9zdHJpbmcgPSB0cnVlOworICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9yZW1vdmUoCisgICAgICAgICAgZXhlY19jdHgsIG9wLT5zZW5kX3RyYWlsaW5nX21ldGFkYXRhLAorICAgICAgICAgIG9wLT5zZW5kX3RyYWlsaW5nX21ldGFkYXRhLT5pZHgubmFtZWQubGJfY29zdF9iaW4pOworICAgIH0KICAgfQogICBncnBjX2NhbGxfbmV4dF9vcChleGVjX2N0eCwgZWxlbSwgb3ApOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvcmVzb2x2ZXIvZG5zL25hdGl2ZS9kbnNfcmVzb2x2ZXIuYyBiL3NyYy9jb3JlL2V4dC9yZXNvbHZlci9kbnMvbmF0aXZlL2Ruc19yZXNvbHZlci5jCmluZGV4IGJmMmY0ZTUuLjJjOTYyMzIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC9yZXNvbHZlci9kbnMvbmF0aXZlL2Ruc19yZXNvbHZlci5jCisrKyBiL3NyYy9jb3JlL2V4dC9yZXNvbHZlci9kbnMvbmF0aXZlL2Ruc19yZXNvbHZlci5jCkBAIC0xODcsOSArMTg3LDggQEAKICAgICBncHJfdGltZXNwZWMgbm93ID0gZ3ByX25vdyhHUFJfQ0xPQ0tfTU9OT1RPTklDKTsKICAgICBncHJfdGltZXNwZWMgbmV4dF90cnkgPSBncHJfYmFja29mZl9zdGVwKCZyLT5iYWNrb2ZmX3N0YXRlLCBub3cpOwogICAgIGdwcl90aW1lc3BlYyB0aW1lb3V0ID0gZ3ByX3RpbWVfc3ViKG5leHRfdHJ5LCBub3cpOwotICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKLSAgICBncHJfbG9nKEdQUl9JTkZPLCAiZG5zIHJlc29sdXRpb24gZmFpbGVkICh3aWxsIHJldHJ5KTogJXMiLCBtc2cpOwotICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcobXNnKTsKKyAgICBncHJfbG9nKEdQUl9JTkZPLCAiZG5zIHJlc29sdXRpb24gZmFpbGVkICh3aWxsIHJldHJ5KTogJXMiLAorICAgICAgICAgICAgZ3JwY19lcnJvcl9zdHJpbmcoZXJyb3IpKTsKICAgICBHUFJfQVNTRVJUKCFyLT5oYXZlX3JldHJ5X3RpbWVyKTsKICAgICByLT5oYXZlX3JldHJ5X3RpbWVyID0gdHJ1ZTsKICAgICBHUlBDX1JFU09MVkVSX1JFRigmci0+YmFzZSwgInJldHJ5LXRpbWVyIik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvcmVzb2x2ZXIvc29ja2FkZHIvc29ja2FkZHJfcmVzb2x2ZXIuYyBiL3NyYy9jb3JlL2V4dC9yZXNvbHZlci9zb2NrYWRkci9zb2NrYWRkcl9yZXNvbHZlci5jCmluZGV4IGMxNDZhNjIuLmExMzY1ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC9yZXNvbHZlci9zb2NrYWRkci9zb2NrYWRkcl9yZXNvbHZlci5jCisrKyBiL3NyYy9jb3JlL2V4dC9yZXNvbHZlci9zb2NrYWRkci9zb2NrYWRkcl9yZXNvbHZlci5jCkBAIC0xODIsNyArMTgyLDcgQEAKICAgYm9vbCBlcnJvcnNfZm91bmQgPSBmYWxzZTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhZGRyZXNzZXMtPm51bV9hZGRyZXNzZXM7IGkrKykgewogICAgIGdycGNfdXJpIGl0aF91cmkgPSAqYXJncy0+dXJpOwotICAgIGNoYXIgKnBhcnRfc3RyID0gZ3JwY19kdW1wX3NsaWNlKHBhdGhfcGFydHMuc2xpY2VzW2ldLCBHUFJfRFVNUF9BU0NJSSk7CisgICAgY2hhciAqcGFydF9zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHBhdGhfcGFydHMuc2xpY2VzW2ldKTsKICAgICBpdGhfdXJpLnBhdGggPSBwYXJ0X3N0cjsKICAgICBpZiAoIXBhcnNlKCZpdGhfdXJpLCAmYWRkcmVzc2VzLT5hZGRyZXNzZXNbaV0uYWRkcmVzcykpIHsKICAgICAgIGVycm9yc19mb3VuZCA9IHRydWU7IC8qIEdQUl9UUlVFICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi9zZXJ2ZXIvY2h0dHAyX3NlcnZlci5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvc2VydmVyL2NodHRwMl9zZXJ2ZXIuYwppbmRleCA1NzRkMWE3Li41NmExYTBkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi9zZXJ2ZXIvY2h0dHAyX3NlcnZlci5jCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3NlcnZlci9jaHR0cDJfc2VydmVyLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogICBpZiAoZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FIHx8IGNvbm5lY3Rpb25fc3RhdGUtPnNlcnZlcl9zdGF0ZS0+c2h1dGRvd24pIHsKICAgICBjb25zdCBjaGFyICplcnJvcl9zdHIgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJIYW5kc2hha2luZyBmYWlsZWQ6ICVzIiwgZXJyb3Jfc3RyKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKGVycm9yX3N0cik7CisKICAgICBpZiAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FICYmIGFyZ3MtPmVuZHBvaW50ICE9IE5VTEwpIHsKICAgICAgIC8vIFdlIHdlcmUgc2h1dCBkb3duIGFmdGVyIGhhbmRzaGFraW5nIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHNvCiAgICAgICAvLyBkZXN0cm95IHRoZSBlbmRwb2ludCBoZXJlLgpAQCAtMzA3LDcgKzMwNyw3IEBACiAKICAgICBjb25zdCBjaGFyICp3YXJuaW5nX21lc3NhZ2UgPSBncnBjX2Vycm9yX3N0cmluZyhlcnIpOwogICAgIGdwcl9sb2coR1BSX0lORk8sICJXQVJOSU5HOiAlcyIsIHdhcm5pbmdfbWVzc2FnZSk7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyh3YXJuaW5nX21lc3NhZ2UpOworCiAgICAgLyogd2UgbWFuYWdlZCB0byBiaW5kIHNvbWUgYWRkcmVzc2VzOiBjb250aW51ZSAqLwogICB9CiAgIGdycGNfcmVzb2x2ZWRfYWRkcmVzc2VzX2Rlc3Ryb3kocmVzb2x2ZWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvc2VydmVyL2luc2VjdXJlL3NlcnZlcl9jaHR0cDIuYyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3NlcnZlci9pbnNlY3VyZS9zZXJ2ZXJfY2h0dHAyLmMKaW5kZXggYmY1MDI2Yi4uYzIxOWE3ZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvc2VydmVyL2luc2VjdXJlL3NlcnZlcl9jaHR0cDIuYworKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi9zZXJ2ZXIvaW5zZWN1cmUvc2VydmVyX2NodHRwMi5jCkBAIC01MSw3ICs1MSw3IEBACiAgIGlmIChlcnIgIT0gR1JQQ19FUlJPUl9OT05FKSB7CiAgICAgY29uc3QgY2hhciAqbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcoZXJyKTsKICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIiVzIiwgbXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CisKICAgICBHUlBDX0VSUk9SX1VOUkVGKGVycik7CiAgIH0KICAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3NlcnZlci9zZWN1cmUvc2VydmVyX3NlY3VyZV9jaHR0cDIuYyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3NlcnZlci9zZWN1cmUvc2VydmVyX3NlY3VyZV9jaHR0cDIuYwppbmRleCAzOTVjNzlhLi5jYjJiM2Y1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi9zZXJ2ZXIvc2VjdXJlL3NlcnZlcl9zZWN1cmVfY2h0dHAyLmMKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvc2VydmVyL3NlY3VyZS9zZXJ2ZXJfc2VjdXJlX2NodHRwMi5jCkBAIC05NCw3ICs5NCw3IEBACiAgIGlmIChlcnIgIT0gR1JQQ19FUlJPUl9OT05FKSB7CiAgICAgY29uc3QgY2hhciAqbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcoZXJyKTsKICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIiVzIiwgbXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CisKICAgICBHUlBDX0VSUk9SX1VOUkVGKGVycik7CiAgIH0KICAgcmV0dXJuIHBvcnRfbnVtOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9kZWNvZGVyLmMgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvYmluX2RlY29kZXIuYwppbmRleCA4ZGIzNmU0Li44Yzg3ZGUxIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvYmluX2RlY29kZXIuYworKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvYmluX2RlY29kZXIuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICAiZ3JwY19jaHR0cDJfYmFzZTY0X2RlY29kZSBoYXMgYSBsZW5ndGggb2YgJWQsIHdoaWNoIGlzIG5vdCBhICIKICAgICAgICAgICAgICJtdWx0aXBsZSBvZiA0LlxuIiwKICAgICAgICAgICAgIChpbnQpaW5wdXRfbGVuZ3RoKTsKLSAgICByZXR1cm4gZ3ByX2VtcHR5X3NsaWNlKCk7CisgICAgcmV0dXJuIGdycGNfZW1wdHlfc2xpY2UoKTsKICAgfQogCiAgIGlmIChpbnB1dF9sZW5ndGggPiAwKSB7CkBAIC0xNzgsMTEgKzE3OCwxMSBAQAogICBjdHguY29udGFpbnNfdGFpbCA9IGZhbHNlOwogCiAgIGlmICghZ3JwY19iYXNlNjRfZGVjb2RlX3BhcnRpYWwoJmN0eCkpIHsKLSAgICBjaGFyICpzID0gZ3JwY19kdW1wX3NsaWNlKGlucHV0LCBHUFJfRFVNUF9BU0NJSSk7CisgICAgY2hhciAqcyA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoaW5wdXQpOwogICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiQmFzZTY0IGRlY29kaW5nIGZhaWxlZCwgaW5wdXQgc3RyaW5nOlxuJXNcbiIsIHMpOwogICAgIGdwcl9mcmVlKHMpOwogICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIG91dHB1dCk7Ci0gICAgcmV0dXJuIGdwcl9lbXB0eV9zbGljZSgpOworICAgIHJldHVybiBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIH0KICAgR1BSX0FTU0VSVChjdHgub3V0cHV0X2N1ciA9PSBHUlBDX1NMSUNFX0VORF9QVFIob3V0cHV0KSk7CiAgIEdQUl9BU1NFUlQoY3R4LmlucHV0X2N1ciA9PSBHUlBDX1NMSUNFX0VORF9QVFIoaW5wdXQpKTsKQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgICAgICAgICAgImhhcyBhIHRhaWwgb2YgMSBieXRlLlxuIiwKICAgICAgICAgICAgIChpbnQpaW5wdXRfbGVuZ3RoKTsKICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBvdXRwdXQpOwotICAgIHJldHVybiBncHJfZW1wdHlfc2xpY2UoKTsKKyAgICByZXR1cm4gZ3JwY19lbXB0eV9zbGljZSgpOwogICB9CiAKICAgaWYgKG91dHB1dF9sZW5ndGggPiBpbnB1dF9sZW5ndGggLyA0ICogMyArIHRhaWxfeHRyYVtpbnB1dF9sZW5ndGggJSA0XSkgewpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgICAgICAoaW50KW91dHB1dF9sZW5ndGgsCiAgICAgICAgICAgICAoaW50KShpbnB1dF9sZW5ndGggLyA0ICogMyArIHRhaWxfeHRyYVtpbnB1dF9sZW5ndGggJSA0XSkpOwogICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIG91dHB1dCk7Ci0gICAgcmV0dXJuIGdwcl9lbXB0eV9zbGljZSgpOworICAgIHJldHVybiBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIH0KIAogICBjdHguaW5wdXRfY3VyID0gR1JQQ19TTElDRV9TVEFSVF9QVFIoaW5wdXQpOwpAQCAtMjI0LDExICsyMjQsMTEgQEAKICAgY3R4LmNvbnRhaW5zX3RhaWwgPSB0cnVlOwogCiAgIGlmICghZ3JwY19iYXNlNjRfZGVjb2RlX3BhcnRpYWwoJmN0eCkpIHsKLSAgICBjaGFyICpzID0gZ3JwY19kdW1wX3NsaWNlKGlucHV0LCBHUFJfRFVNUF9BU0NJSSk7CisgICAgY2hhciAqcyA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoaW5wdXQpOwogICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiQmFzZTY0IGRlY29kaW5nIGZhaWxlZCwgaW5wdXQgc3RyaW5nOlxuJXNcbiIsIHMpOwogICAgIGdwcl9mcmVlKHMpOwogICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIG91dHB1dCk7Ci0gICAgcmV0dXJuIGdwcl9lbXB0eV9zbGljZSgpOworICAgIHJldHVybiBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIH0KICAgR1BSX0FTU0VSVChjdHgub3V0cHV0X2N1ciA9PSBHUlBDX1NMSUNFX0VORF9QVFIob3V0cHV0KSk7CiAgIEdQUl9BU1NFUlQoY3R4LmlucHV0X2N1ciA8PSBHUlBDX1NMSUNFX0VORF9QVFIoaW5wdXQpKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9iaW5fZW5jb2Rlci5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9lbmNvZGVyLmMKaW5kZXggYWYyNWE0My4uZTMwMWMwNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9lbmNvZGVyLmMKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9lbmNvZGVyLmMKQEAgLTE3Nyw4ICsxNzcsNyBAQAogICBlbmNfZmx1c2hfc29tZShvdXQpOwogfQogCi1ncnBjX3NsaWNlIGdycGNfY2h0dHAyX2Jhc2U2NF9lbmNvZGVfYW5kX2h1ZmZtYW5fY29tcHJlc3NfaW1wbCgKLSAgICBncnBjX3NsaWNlIGlucHV0KSB7CitncnBjX3NsaWNlIGdycGNfY2h0dHAyX2Jhc2U2NF9lbmNvZGVfYW5kX2h1ZmZtYW5fY29tcHJlc3MoZ3JwY19zbGljZSBpbnB1dCkgewogICBzaXplX3QgaW5wdXRfbGVuZ3RoID0gR1JQQ19TTElDRV9MRU5HVEgoaW5wdXQpOwogICBzaXplX3QgaW5wdXRfdHJpcGxldHMgPSBpbnB1dF9sZW5ndGggLyAzOwogICBzaXplX3QgdGFpbF9jYXNlID0gaW5wdXRfbGVuZ3RoICUgMzsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9iaW5fZW5jb2Rlci5oIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9lbmNvZGVyLmgKaW5kZXggNDc3NTU5ZC4uMGY4OTljOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9lbmNvZGVyLmgKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2Jpbl9lbmNvZGVyLmgKQEAgLTQ5LDcgKzQ5LDYgQEAKICAgIGdycGNfc2xpY2UgeSA9IGdycGNfY2h0dHAyX2h1ZmZtYW5fY29tcHJlc3MoeCk7CiAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCB4KTsKICAgIHJldHVybiB5OyAqLwotZ3JwY19zbGljZSBncnBjX2NodHRwMl9iYXNlNjRfZW5jb2RlX2FuZF9odWZmbWFuX2NvbXByZXNzX2ltcGwoCi0gICAgZ3JwY19zbGljZSBpbnB1dCk7CitncnBjX3NsaWNlIGdycGNfY2h0dHAyX2Jhc2U2NF9lbmNvZGVfYW5kX2h1ZmZtYW5fY29tcHJlc3MoZ3JwY19zbGljZSBpbnB1dCk7CiAKICNlbmRpZiAvKiBHUlBDX0NPUkVfRVhUX1RSQU5TUE9SVF9DSFRUUDJfVFJBTlNQT1JUX0JJTl9FTkNPREVSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9jaHR0cDJfcGx1Z2luLmMgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvY2h0dHAyX3BsdWdpbi5jCmluZGV4IGJkODcyNTMuLjU5YjIxZTMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9jaHR0cDJfcGx1Z2luLmMKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2NodHRwMl9wbHVnaW4uYwpAQCAtMzEsMTQgKzMxLDExIEBACiAgKgogICovCiAKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvYmluX2VuY29kZXIuaCIKICNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvY2h0dHAyX3RyYW5zcG9ydC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9kZWJ1Zy90cmFjZS5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKIAogdm9pZCBncnBjX2NodHRwMl9wbHVnaW5faW5pdCh2b2lkKSB7Ci0gIGdycGNfY2h0dHAyX2Jhc2U2NF9lbmNvZGVfYW5kX2h1ZmZtYW5fY29tcHJlc3MgPQotICAgICAgZ3JwY19jaHR0cDJfYmFzZTY0X2VuY29kZV9hbmRfaHVmZm1hbl9jb21wcmVzc19pbXBsOwogICBncnBjX3JlZ2lzdGVyX3RyYWNlcigiaHR0cCIsICZncnBjX2h0dHBfdHJhY2UpOwogICBncnBjX3JlZ2lzdGVyX3RyYWNlcigiZmxvd2N0bCIsICZncnBjX2Zsb3djdGxfdHJhY2UpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2NodHRwMl90cmFuc3BvcnQuYyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9jaHR0cDJfdHJhbnNwb3J0LmMKaW5kZXggNjhhNmEyMS4uMjAwNGJjNiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2NodHRwMl90cmFuc3BvcnQuYworKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvY2h0dHAyX3RyYW5zcG9ydC5jCkBAIC00NCw5ICs0NCw3IEBACiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3N0cmluZ191dGlsLmg+CiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3VzZWZ1bC5oPgogCi0jaW5jbHVkZSAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbnRlcm5hbC5oIgotI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX2FyZ3MuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvaHR0cC9wYXJzZXIuaCIKQEAgLTU1LDcgKzUzLDEwIEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cHBvcnQvc3RyaW5nLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfaW1wbC5oIgogCkBAIC00MDksNyArNDEwLDcgQEAKICAgICAgICAgICBncnBjX2Vycm9yX2FkZF9jaGlsZCh0LT5jbG9zZV90cmFuc3BvcnRfb25fd3JpdGVzX2ZpbmlzaGVkLCBlcnJvcik7CiAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZ3JwY19lcnJvcl9nZXRfaW50KGVycm9yLCBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgTlVMTCkpIHsKKyAgICBpZiAoIWdycGNfZXJyb3JfaGFzX2NsZWFyX2dycGNfc3RhdHVzKGVycm9yKSkgewogICAgICAgZXJyb3IgPSBncnBjX2Vycm9yX3NldF9pbnQoZXJyb3IsIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfVU5BVkFJTEFCTEUpOwogICAgIH0KQEAgLTg2Niw3ICs4NjcsNiBAQAogICAgICAgICAgICAgKGludCkoY2xvc3VyZS0+bmV4dF9kYXRhLnNjcmF0Y2ggLyBDTE9TVVJFX0JBUlJJRVJfRklSU1RfUkVGX0JJVCksCiAgICAgICAgICAgICAoaW50KShjbG9zdXJlLT5uZXh0X2RhdGEuc2NyYXRjaCAlIENMT1NVUkVfQkFSUklFUl9GSVJTVF9SRUZfQklUKSwKICAgICAgICAgICAgIGRlc2MsIGVycnN0cik7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhlcnJzdHIpOwogICB9CiAgIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICBpZiAoY2xvc3VyZS0+ZXJyb3JfZGF0YS5lcnJvciA9PSBHUlBDX0VSUk9SX05PTkUpIHsKQEAgLTg5NSwxMiArODk1LDkgQEAKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNfbm9uX29rX3N0YXR1cyhncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCkgewotICBncnBjX2xpbmtlZF9tZGVsZW0gKmw7Ci0gIGZvciAobCA9IGJhdGNoLT5saXN0LmhlYWQ7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgaWYgKGwtPm1kLT5rZXkgPT0gR1JQQ19NRFNUUl9HUlBDX1NUQVRVUyAmJgotICAgICAgICBsLT5tZCAhPSBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18wKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgIGlmIChiYXRjaC0+aWR4Lm5hbWVkLmdycGNfc3RhdHVzICE9IE5VTEwpIHsKKyAgICByZXR1cm4gIWdycGNfbWRlbGVtX2VxKGJhdGNoLT5pZHgubmFtZWQuZ3JwY19zdGF0dXMtPm1kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMCk7CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtOTgwLDkgKzk3NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfY2xpZW50LCBib29sIGlzX2luaXRpYWwpIHsKICAgZm9yIChncnBjX2xpbmtlZF9tZGVsZW0gKm1kID0gbWRfYmF0Y2gtPmxpc3QuaGVhZDsgbWQgIT0gbWRfYmF0Y2gtPmxpc3QudGFpbDsKICAgICAgICBtZCA9IG1kLT5uZXh0KSB7CisgICAgY2hhciAqa2V5ID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhHUlBDX01ES0VZKG1kLT5tZCkpOworICAgIGNoYXIgKnZhbHVlID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhHUlBDX01EVkFMVUUobWQtPm1kKSk7CiAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIkhUVFA6JWQ6JXM6JXM6ICVzOiAlcyIsIGlkLCBpc19pbml0aWFsID8gIkhEUiIgOiAiVFJMIiwKLSAgICAgICAgICAgIGlzX2NsaWVudCA/ICJDTEkiIDogIlNWUiIsIGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPm1kLT5rZXkpLAotICAgICAgICAgICAgZ3JwY19tZHN0cl9hc19jX3N0cmluZyhtZC0+bWQtPnZhbHVlKSk7CisgICAgICAgICAgICBpc19jbGllbnQgPyAiQ0xJIiA6ICJTVlIiLCBrZXksIHZhbHVlKTsKKyAgICBncHJfZnJlZShrZXkpOworICAgIGdwcl9mcmVlKHZhbHVlKTsKICAgfQogfQogCkBAIC0xMDI1LDExICsxMDI1LDcgQEAKICAgfQogCiAgIGlmIChvcC0+Y2FuY2VsX2Vycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewotICAgIGdycGNfY2h0dHAyX2NhbmNlbF9zdHJlYW0oZXhlY19jdHgsIHQsIHMsIEdSUENfRVJST1JfUkVGKG9wLT5jYW5jZWxfZXJyb3IpKTsKLSAgfQotCi0gIGlmIChvcC0+Y2xvc2VfZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSB7Ci0gICAgY2xvc2VfZnJvbV9hcGkoZXhlY19jdHgsIHQsIHMsIEdSUENfRVJST1JfUkVGKG9wLT5jbG9zZV9lcnJvcikpOworICAgIGdycGNfY2h0dHAyX2NhbmNlbF9zdHJlYW0oZXhlY19jdHgsIHQsIHMsIG9wLT5jYW5jZWxfZXJyb3IpOwogICB9CiAKICAgaWYgKG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEgIT0gTlVMTCkgewpAQCAtMTA4MCw4ICsxMDc2LDkgQEAKICAgICAgICAgcy0+c2VuZF9pbml0aWFsX21ldGFkYXRhID0gTlVMTDsKICAgICAgICAgZ3JwY19jaHR0cDJfY29tcGxldGVfY2xvc3VyZV9zdGVwKAogICAgICAgICAgICAgZXhlY19jdHgsIHQsIHMsICZzLT5zZW5kX2luaXRpYWxfbWV0YWRhdGFfZmluaXNoZWQsCi0gICAgICAgICAgICBHUlBDX0VSUk9SX0NSRUFURSgKLSAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byBzZW5kIGluaXRpYWwgbWV0YWRhdGEgYWZ0ZXIgc3RyZWFtIHdhcyBjbG9zZWQiKSwKKyAgICAgICAgICAgIEdSUENfRVJST1JfQ1JFQVRFX1JFRkVSRU5DSU5HKAorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHNlbmQgaW5pdGlhbCBtZXRhZGF0YSBhZnRlciBzdHJlYW0gd2FzIGNsb3NlZCIsCisgICAgICAgICAgICAgICAgJnMtPndyaXRlX2Nsb3NlZF9lcnJvciwgMSksCiAgICAgICAgICAgICAic2VuZF9pbml0aWFsX21ldGFkYXRhX2ZpbmlzaGVkIik7CiAgICAgICB9CiAgICAgfQpAQCAtMTA5Myw3ICsxMDkwLDkgQEAKICAgICBpZiAocy0+d3JpdGVfY2xvc2VkKSB7CiAgICAgICBncnBjX2NodHRwMl9jb21wbGV0ZV9jbG9zdXJlX3N0ZXAoCiAgICAgICAgICAgZXhlY19jdHgsIHQsIHMsICZzLT5mZXRjaGluZ19zZW5kX21lc3NhZ2VfZmluaXNoZWQsCi0gICAgICAgICAgR1JQQ19FUlJPUl9DUkVBVEUoIkF0dGVtcHQgdG8gc2VuZCBtZXNzYWdlIGFmdGVyIHN0cmVhbSB3YXMgY2xvc2VkIiksCisgICAgICAgICAgR1JQQ19FUlJPUl9DUkVBVEVfUkVGRVJFTkNJTkcoCisgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHNlbmQgbWVzc2FnZSBhZnRlciBzdHJlYW0gd2FzIGNsb3NlZCIsCisgICAgICAgICAgICAgICZzLT53cml0ZV9jbG9zZWRfZXJyb3IsIDEpLAogICAgICAgICAgICJmZXRjaGluZ19zZW5kX21lc3NhZ2VfZmluaXNoZWQiKTsKICAgICB9IGVsc2UgewogICAgICAgR1BSX0FTU0VSVChzLT5mZXRjaGluZ19zZW5kX21lc3NhZ2UgPT0gTlVMTCk7CkBAIC0xMjY1LDExICsxMjY0LDE2IEBACiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRfZ29hd2F5KGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NodHRwMl90cmFuc3BvcnQgKnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl9lcnJvcl9jb2RlIGVycm9yLCBncnBjX3NsaWNlIGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZXJyb3IgKmVycm9yKSB7CiAgIHQtPnNlbnRfZ29hd2F5X3N0YXRlID0gR1JQQ19DSFRUUDJfR09BV0FZX1NFTkRfU0NIRURVTEVEOwotICBncnBjX2NodHRwMl9nb2F3YXlfYXBwZW5kKHQtPmxhc3RfbmV3X3N0cmVhbV9pZCwgKHVpbnQzMl90KWVycm9yLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0LT5xYnVmKTsKKyAgZ3JwY19odHRwMl9lcnJvcl9jb2RlIGh0dHBfZXJyb3I7CisgIGNvbnN0IGNoYXIgKm1zZzsKKyAgZ3JwY19lcnJvcl9nZXRfc3RhdHVzKGVycm9yLCBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfTU9OT1RPTklDKSwgTlVMTCwgJm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICZodHRwX2Vycm9yKTsKKyAgZ3JwY19jaHR0cDJfZ29hd2F5X2FwcGVuZCh0LT5sYXN0X25ld19zdHJlYW1faWQsICh1aW50MzJfdClodHRwX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKG1zZyksICZ0LT5xYnVmKTsKICAgZ3JwY19jaHR0cDJfaW5pdGlhdGVfd3JpdGUoZXhlY19jdHgsIHQsIGZhbHNlLCAiZ29hd2F5X3NlbnQiKTsKKyAgR1JQQ19FUlJPUl9VTlJFRihlcnJvcik7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZvcm1fdHJhbnNwb3J0X29wX2xvY2tlZChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTEyODUsMTAgKzEyODksOCBAQAogICAgICAgICBvcC0+b25fY29ubmVjdGl2aXR5X3N0YXRlX2NoYW5nZSk7CiAgIH0KIAotICBpZiAob3AtPnNlbmRfZ29hd2F5KSB7Ci0gICAgc2VuZF9nb2F3YXkoZXhlY19jdHgsIHQsCi0gICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfZXJyb3Iob3AtPmdvYXdheV9zdGF0dXMpLAotICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKCpvcC0+Z29hd2F5X21lc3NhZ2UpKTsKKyAgaWYgKG9wLT5nb2F3YXlfZXJyb3IpIHsKKyAgICBzZW5kX2dvYXdheShleGVjX2N0eCwgdCwgb3AtPmdvYXdheV9lcnJvcik7CiAgIH0KIAogICBpZiAob3AtPnNldF9hY2NlcHRfc3RyZWFtKSB7CkBAIC0xMzQ4LDggKzEzNTAsOCBAQAogICAgICAgICBpbmNvbWluZ19ieXRlX3N0cmVhbV9kZXN0cm95X2xvY2tlZChleGVjX2N0eCwgYnMsIEdSUENfRVJST1JfTk9ORSk7CiAgICAgICB9CiAgICAgfQotICAgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlcl9wdWJsaXNoKCZzLT5tZXRhZGF0YV9idWZmZXJbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+cmVjdl9pbml0aWFsX21ldGFkYXRhKTsKKyAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfcHVibGlzaCgKKyAgICAgICAgZXhlY19jdHgsICZzLT5tZXRhZGF0YV9idWZmZXJbMF0sIHMtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSk7CiAgICAgbnVsbF90aGVuX3J1bl9jbG9zdXJlKGV4ZWNfY3R4LCAmcy0+cmVjdl9pbml0aWFsX21ldGFkYXRhX3JlYWR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX05PTkUpOwogICB9CkBAIC0xMzkyLDggKzEzOTQsOCBAQAogICAgIH0KICAgICBpZiAocy0+YWxsX2luY29taW5nX2J5dGVfc3RyZWFtc19maW5pc2hlZCAmJgogICAgICAgICBzLT5yZWN2X3RyYWlsaW5nX21ldGFkYXRhX2ZpbmlzaGVkICE9IE5VTEwpIHsKLSAgICAgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlcl9wdWJsaXNoKCZzLT5tZXRhZGF0YV9idWZmZXJbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5yZWN2X3RyYWlsaW5nX21ldGFkYXRhKTsKKyAgICAgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlcl9wdWJsaXNoKAorICAgICAgICAgIGV4ZWNfY3R4LCAmcy0+bWV0YWRhdGFfYnVmZmVyWzFdLCBzLT5yZWN2X3RyYWlsaW5nX21ldGFkYXRhKTsKICAgICAgIGdycGNfY2h0dHAyX2NvbXBsZXRlX2Nsb3N1cmVfc3RlcCgKICAgICAgICAgICBleGVjX2N0eCwgdCwgcywgJnMtPnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGFfZmluaXNoZWQsIEdSUENfRVJST1JfTk9ORSwKICAgICAgICAgICAicmVjdl90cmFpbGluZ19tZXRhZGF0YV9maW5pc2hlZCIpOwpAQCAtMTQ0MSw3MCArMTQ0MywzNyBAQAogICBtYXliZV9zdGFydF9zb21lX3N0cmVhbXMoZXhlY19jdHgsIHQpOwogfQogCi1zdGF0aWMgdm9pZCBzdGF0dXNfY29kZXNfZnJvbV9lcnJvcihncnBjX2Vycm9yICplcnJvciwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfZXJyb3JfY29kZSAqaHR0cDJfZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXR1c19jb2RlICpncnBjX3N0YXR1cykgewotICBpbnRwdHJfdCBpcF9odHRwOwotICBpbnRwdHJfdCBpcF9ncnBjOwotICBib29sIGhhdmVfaHR0cCA9Ci0gICAgICBncnBjX2Vycm9yX2dldF9pbnQoZXJyb3IsIEdSUENfRVJST1JfSU5UX0hUVFAyX0VSUk9SLCAmaXBfaHR0cCk7Ci0gIGJvb2wgaGF2ZV9ncnBjID0KLSAgICAgIGdycGNfZXJyb3JfZ2V0X2ludChlcnJvciwgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsICZpcF9ncnBjKTsKLSAgaWYgKGhhdmVfaHR0cCkgewotICAgICpodHRwMl9lcnJvciA9IChncnBjX2NodHRwMl9lcnJvcl9jb2RlKWlwX2h0dHA7Ci0gIH0gZWxzZSBpZiAoaGF2ZV9ncnBjKSB7Ci0gICAgKmh0dHAyX2Vycm9yID0KLSAgICAgICAgZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfZXJyb3IoKGdycGNfc3RhdHVzX2NvZGUpaXBfZ3JwYyk7Ci0gIH0gZWxzZSB7Ci0gICAgKmh0dHAyX2Vycm9yID0gR1JQQ19DSFRUUDJfSU5URVJOQUxfRVJST1I7Ci0gIH0KLSAgaWYgKGhhdmVfZ3JwYykgewotICAgICpncnBjX3N0YXR1cyA9IChncnBjX3N0YXR1c19jb2RlKWlwX2dycGM7Ci0gIH0gZWxzZSBpZiAoaGF2ZV9odHRwKSB7Ci0gICAgKmdycGNfc3RhdHVzID0gZ3JwY19jaHR0cDJfaHR0cDJfZXJyb3JfdG9fZ3JwY19zdGF0dXMoCi0gICAgICAgIChncnBjX2NodHRwMl9lcnJvcl9jb2RlKWlwX2h0dHAsIGRlYWRsaW5lKTsKLSAgfSBlbHNlIHsKLSAgICAqZ3JwY19zdGF0dXMgPSBHUlBDX1NUQVRVU19JTlRFUk5BTDsKLSAgfQotfQotCiB2b2lkIGdycGNfY2h0dHAyX2NhbmNlbF9zdHJlYW0oZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfdHJhbnNwb3J0ICp0LCBncnBjX2NodHRwMl9zdHJlYW0gKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZHVlX3RvX2Vycm9yKSB7Ci0gIGlmICghcy0+cmVhZF9jbG9zZWQgfHwgIXMtPndyaXRlX2Nsb3NlZCkgewotICAgIGdycGNfc3RhdHVzX2NvZGUgZ3JwY19zdGF0dXM7Ci0gICAgZ3JwY19jaHR0cDJfZXJyb3JfY29kZSBodHRwX2Vycm9yOwotICAgIHN0YXR1c19jb2Rlc19mcm9tX2Vycm9yKGR1ZV90b19lcnJvciwgcy0+ZGVhZGxpbmUsICZodHRwX2Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncnBjX3N0YXR1cyk7CisgIGlmICghdC0+aXNfY2xpZW50ICYmICFzLT5zZW50X3RyYWlsaW5nX21ldGFkYXRhICYmCisgICAgICBncnBjX2Vycm9yX2hhc19jbGVhcl9ncnBjX3N0YXR1cyhkdWVfdG9fZXJyb3IpKSB7CisgICAgY2xvc2VfZnJvbV9hcGkoZXhlY19jdHgsIHQsIHMsIGR1ZV90b19lcnJvcik7CisgICAgcmV0dXJuOworICB9CiAKKyAgaWYgKCFzLT5yZWFkX2Nsb3NlZCB8fCAhcy0+d3JpdGVfY2xvc2VkKSB7CiAgICAgaWYgKHMtPmlkICE9IDApIHsKKyAgICAgIGdycGNfaHR0cDJfZXJyb3JfY29kZSBodHRwX2Vycm9yOworICAgICAgZ3JwY19lcnJvcl9nZXRfc3RhdHVzKGR1ZV90b19lcnJvciwgcy0+ZGVhZGxpbmUsIE5VTEwsIE5VTEwsICZodHRwX2Vycm9yKTsKICAgICAgIGdycGNfc2xpY2VfYnVmZmVyX2FkZCgKICAgICAgICAgICAmdC0+cWJ1ZiwgZ3JwY19jaHR0cDJfcnN0X3N0cmVhbV9jcmVhdGUocy0+aWQsICh1aW50MzJfdClodHRwX2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+c3RhdHMub3V0Z29pbmcpKTsKICAgICAgIGdycGNfY2h0dHAyX2luaXRpYXRlX3dyaXRlKGV4ZWNfY3R4LCB0LCBmYWxzZSwgInJzdF9zdHJlYW0iKTsKICAgICB9Ci0KLSAgICBjb25zdCBjaGFyICptc2cgPQotICAgICAgICBncnBjX2Vycm9yX2dldF9zdHIoZHVlX3RvX2Vycm9yLCBHUlBDX0VSUk9SX1NUUl9HUlBDX01FU1NBR0UpOwotICAgIGJvb2wgZnJlZV9tc2cgPSBmYWxzZTsKLSAgICBpZiAobXNnID09IE5VTEwpIHsKLSAgICAgIGZyZWVfbXNnID0gdHJ1ZTsKLSAgICAgIG1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGR1ZV90b19lcnJvcik7Ci0gICAgfQotICAgIGdycGNfc2xpY2UgbXNnX3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcobXNnKTsKLSAgICBncnBjX2NodHRwMl9mYWtlX3N0YXR1cyhleGVjX2N0eCwgdCwgcywgZ3JwY19zdGF0dXMsICZtc2dfc2xpY2UpOwotICAgIGlmIChmcmVlX21zZykgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOwogICB9CiAgIGlmIChkdWVfdG9fZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FICYmICFzLT5zZWVuX2Vycm9yKSB7CiAgICAgcy0+c2Vlbl9lcnJvciA9IHRydWU7Ci0gICAgZ3JwY19jaHR0cDJfbWF5YmVfY29tcGxldGVfcmVjdl90cmFpbGluZ19tZXRhZGF0YShleGVjX2N0eCwgdCwgcyk7CiAgIH0KICAgZ3JwY19jaHR0cDJfbWFya19zdHJlYW1fY2xvc2VkKGV4ZWNfY3R4LCB0LCBzLCAxLCAxLCBkdWVfdG9fZXJyb3IpOwogfQogCiB2b2lkIGdycGNfY2h0dHAyX2Zha2Vfc3RhdHVzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NodHRwMl90cmFuc3BvcnQgKnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX3N0cmVhbSAqcywgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgKnNsaWNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX3N0cmVhbSAqcywgZ3JwY19lcnJvciAqZXJyb3IpIHsKKyAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CisgIGNvbnN0IGNoYXIgKm1zZzsKKyAgZ3JwY19lcnJvcl9nZXRfc3RhdHVzKGVycm9yLCBzLT5kZWFkbGluZSwgJnN0YXR1cywgJm1zZywgTlVMTCk7CisKICAgaWYgKHN0YXR1cyAhPSBHUlBDX1NUQVRVU19PSykgewogICAgIHMtPnNlZW5fZXJyb3IgPSB0cnVlOwogICB9CkBAIC0xNTE4LDI0ICsxNDg3LDIxIEBACiAgICAgICBzLT5yZWN2X3RyYWlsaW5nX21ldGFkYXRhX2ZpbmlzaGVkICE9IE5VTEwpIHsKICAgICBjaGFyIHN0YXR1c19zdHJpbmdbR1BSX0xUT0FfTUlOX0JVRlNJWkVdOwogICAgIGdwcl9sdG9hKHN0YXR1cywgc3RhdHVzX3N0cmluZyk7Ci0gICAgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX2FkZCgKLSAgICAgICAgJnMtPm1ldGFkYXRhX2J1ZmZlclsxXSwgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19TVEFUVVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kc3RyX2Zyb21fc3RyaW5nKHN0YXR1c19zdHJpbmcpKSk7Ci0gICAgaWYgKHNsaWNlKSB7Ci0gICAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfYWRkKAotICAgICAgICAgICZzLT5tZXRhZGF0YV9idWZmZXJbMV0sCi0gICAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX01FU1NBR0UsCi0gICAgICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zbGljZShleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKCpzbGljZSkpKSk7CisgICAgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX3JlcGxhY2Vfb3JfYWRkKAorICAgICAgICBleGVjX2N0eCwgJnMtPm1ldGFkYXRhX2J1ZmZlclsxXSwKKyAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19TVEFUVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKHN0YXR1c19zdHJpbmcpKSk7CisgICAgaWYgKG1zZyAhPSBOVUxMKSB7CisgICAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfcmVwbGFjZV9vcl9hZGQoCisgICAgICAgICAgZXhlY19jdHgsICZzLT5tZXRhZGF0YV9idWZmZXJbMV0sCisgICAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19NRVNTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKG1zZykpKTsKICAgICB9CiAgICAgcy0+cHVibGlzaGVkX21ldGFkYXRhWzFdID0gR1JQQ19NRVRBREFUQV9TWU5USEVTSVpFRF9GUk9NX0ZBS0U7CiAgICAgZ3JwY19jaHR0cDJfbWF5YmVfY29tcGxldGVfcmVjdl90cmFpbGluZ19tZXRhZGF0YShleGVjX2N0eCwgdCwgcyk7CiAgIH0KLSAgaWYgKHNsaWNlKSB7Ci0gICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgKnNsaWNlKTsKLSAgfQorCisgIEdSUENfRVJST1JfVU5SRUYoZXJyb3IpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfZXJyb3IoZ3JwY19lcnJvciAqZXJyb3IsIGdycGNfZXJyb3IgKipyZWZzLCBzaXplX3QgKm5yZWZzKSB7CkBAIC0xNjAxLDEyICsxNTY3LDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xvc2Vfd3JpdGVzLCBncnBjX2Vycm9yICplcnJvcikgewogICBpZiAocy0+cmVhZF9jbG9zZWQgJiYgcy0+d3JpdGVfY2xvc2VkKSB7CiAgICAgLyogYWxyZWFkeSBjbG9zZWQgKi8KKyAgICBncnBjX2NodHRwMl9tYXliZV9jb21wbGV0ZV9yZWN2X3RyYWlsaW5nX21ldGFkYXRhKGV4ZWNfY3R4LCB0LCBzKTsKICAgICBHUlBDX0VSUk9SX1VOUkVGKGVycm9yKTsKICAgICByZXR1cm47CiAgIH0KKyAgYm9vbCBjbG9zZWRfcmVhZCA9IGZhbHNlOworICBib29sIGJlY2FtZV9jbG9zZWQgPSBmYWxzZTsKICAgaWYgKGNsb3NlX3JlYWRzICYmICFzLT5yZWFkX2Nsb3NlZCkgewogICAgIHMtPnJlYWRfY2xvc2VkX2Vycm9yID0gR1JQQ19FUlJPUl9SRUYoZXJyb3IpOwogICAgIHMtPnJlYWRfY2xvc2VkID0gdHJ1ZTsKKyAgICBjbG9zZWRfcmVhZCA9IHRydWU7CisgIH0KKyAgaWYgKGNsb3NlX3dyaXRlcyAmJiAhcy0+d3JpdGVfY2xvc2VkKSB7CisgICAgcy0+d3JpdGVfY2xvc2VkX2Vycm9yID0gR1JQQ19FUlJPUl9SRUYoZXJyb3IpOworICAgIHMtPndyaXRlX2Nsb3NlZCA9IHRydWU7CisgICAgZ3JwY19jaHR0cDJfZmFpbF9wZW5kaW5nX3dyaXRlcyhleGVjX2N0eCwgdCwgcywgR1JQQ19FUlJPUl9SRUYoZXJyb3IpKTsKKyAgfQorICBpZiAocy0+cmVhZF9jbG9zZWQgJiYgcy0+d3JpdGVfY2xvc2VkKSB7CisgICAgYmVjYW1lX2Nsb3NlZCA9IHRydWU7CisgICAgZ3JwY19lcnJvciAqb3ZlcmFsbF9lcnJvciA9CisgICAgICAgIHJlbW92YWxfZXJyb3IoR1JQQ19FUlJPUl9SRUYoZXJyb3IpLCBzLCAiU3RyZWFtIHJlbW92ZWQiKTsKKyAgICBpZiAocy0+aWQgIT0gMCkgeworICAgICAgcmVtb3ZlX3N0cmVhbShleGVjX2N0eCwgdCwgcy0+aWQsIEdSUENfRVJST1JfUkVGKG92ZXJhbGxfZXJyb3IpKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogUHVyZ2Ugc3RyZWFtcyB3YWl0aW5nIG9uIGNvbmN1cnJlbmN5IHN0aWxsIHdhaXRpbmcgZm9yIGlkIGFzc2lnbm1lbnQgKi8KKyAgICAgIGdycGNfY2h0dHAyX2xpc3RfcmVtb3ZlX3dhaXRpbmdfZm9yX2NvbmN1cnJlbmN5KHQsIHMpOworICAgIH0KKyAgICBpZiAob3ZlcmFsbF9lcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKKyAgICAgIGdycGNfY2h0dHAyX2Zha2Vfc3RhdHVzKGV4ZWNfY3R4LCB0LCBzLCBvdmVyYWxsX2Vycm9yKTsKKyAgICB9CisgIH0KKyAgaWYgKGNsb3NlZF9yZWFkKSB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKICAgICAgIGlmIChzLT5wdWJsaXNoZWRfbWV0YWRhdGFbaV0gPT0gR1JQQ19NRVRBREFUQV9OT1RfUFVCTElTSEVEKSB7CiAgICAgICAgIHMtPnB1Ymxpc2hlZF9tZXRhZGF0YVtpXSA9IEdQUkNfTUVUQURBVEFfUFVCTElTSEVEX0FUX0NMT1NFOwpAQCAtMTYxNSwyMiArMTYwNiw5IEBACiAgICAgZGVjcmVtZW50X2FjdGl2ZV9zdHJlYW1zX2xvY2tlZChleGVjX2N0eCwgdCwgcyk7CiAgICAgZ3JwY19jaHR0cDJfbWF5YmVfY29tcGxldGVfcmVjdl9pbml0aWFsX21ldGFkYXRhKGV4ZWNfY3R4LCB0LCBzKTsKICAgICBncnBjX2NodHRwMl9tYXliZV9jb21wbGV0ZV9yZWN2X21lc3NhZ2UoZXhlY19jdHgsIHQsIHMpOwotICAgIGdycGNfY2h0dHAyX21heWJlX2NvbXBsZXRlX3JlY3ZfdHJhaWxpbmdfbWV0YWRhdGEoZXhlY19jdHgsIHQsIHMpOwogICB9Ci0gIGlmIChjbG9zZV93cml0ZXMgJiYgIXMtPndyaXRlX2Nsb3NlZCkgewotICAgIHMtPndyaXRlX2Nsb3NlZF9lcnJvciA9IEdSUENfRVJST1JfUkVGKGVycm9yKTsKLSAgICBzLT53cml0ZV9jbG9zZWQgPSB0cnVlOwotICAgIGdycGNfY2h0dHAyX2ZhaWxfcGVuZGluZ193cml0ZXMoZXhlY19jdHgsIHQsIHMsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CisgIGlmIChiZWNhbWVfY2xvc2VkKSB7CiAgICAgZ3JwY19jaHR0cDJfbWF5YmVfY29tcGxldGVfcmVjdl90cmFpbGluZ19tZXRhZGF0YShleGVjX2N0eCwgdCwgcyk7Ci0gIH0KLSAgaWYgKHMtPnJlYWRfY2xvc2VkICYmIHMtPndyaXRlX2Nsb3NlZCkgewotICAgIGlmIChzLT5pZCAhPSAwKSB7Ci0gICAgICByZW1vdmVfc3RyZWFtKGV4ZWNfY3R4LCB0LCBzLT5pZCwKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZhbF9lcnJvcihHUlBDX0VSUk9SX1JFRihlcnJvciksIHMsICJTdHJlYW0gcmVtb3ZlZCIpKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogUHVyZ2Ugc3RyZWFtcyB3YWl0aW5nIG9uIGNvbmN1cnJlbmN5IHN0aWxsIHdhaXRpbmcgZm9yIGlkIGFzc2lnbm1lbnQgKi8KLSAgICAgIGdycGNfY2h0dHAyX2xpc3RfcmVtb3ZlX3dhaXRpbmdfZm9yX2NvbmN1cnJlbmN5KHQsIHMpOwotICAgIH0KICAgICBHUlBDX0NIVFRQMl9TVFJFQU1fVU5SRUYoZXhlY19jdHgsIHMsICJjaHR0cDIiKTsKICAgfQogICBHUlBDX0VSUk9SX1VOUkVGKGVycm9yKTsKQEAgLTE2NDQsMTEyICsxNjIyLDkyIEBACiAgIHVpbnQ4X3QgKnA7CiAgIHVpbnQzMl90IGxlbiA9IDA7CiAgIGdycGNfc3RhdHVzX2NvZGUgZ3JwY19zdGF0dXM7Ci0gIGdycGNfY2h0dHAyX2Vycm9yX2NvZGUgaHR0cF9lcnJvcjsKLSAgc3RhdHVzX2NvZGVzX2Zyb21fZXJyb3IoZXJyb3IsIHMtPmRlYWRsaW5lLCAmaHR0cF9lcnJvciwgJmdycGNfc3RhdHVzKTsKKyAgY29uc3QgY2hhciAqbXNnOworICBncnBjX2Vycm9yX2dldF9zdGF0dXMoZXJyb3IsIHMtPmRlYWRsaW5lLCAmZ3JwY19zdGF0dXMsICZtc2csIE5VTEwpOwogCiAgIEdQUl9BU1NFUlQoZ3JwY19zdGF0dXMgPj0gMCAmJiAoaW50KWdycGNfc3RhdHVzIDwgMTAwKTsKIAotICBpZiAocy0+aWQgIT0gMCAmJiAhdC0+aXNfY2xpZW50KSB7Ci0gICAgLyogSGFuZCByb2xsIGEgaGVhZGVyIGJsb2NrLgotICAgICAgIFRoaXMgaXMgdW5uZWNlc3NhcmlseSB1Z2x5IC0gYXQgc29tZSBwb2ludCB3ZSBzaG91bGQgZmluZCBhIG1vcmUKLSAgICAgICBlbGVnYW50Ci0gICAgICAgc29sdXRpb24uCi0gICAgICAgSXQncyBjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0IG91ciBzZW5kIG1hY2hpbmVyeSB3b3VsZCBiZSBkZWFkIGJ5Ci0gICAgICAgdGhlCi0gICAgICAgdGltZSB3ZSBnb3QgYXJvdW5kIHRvIHNlbmRpbmcgdGhpcywgc28gaW5zdGVhZCB3ZSBpZ25vcmUgSFBBQ0sKLSAgICAgICBjb21wcmVzc2lvbgotICAgICAgIGFuZCBqdXN0IHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgYnl0ZXMgb250byB0aGUgd2lyZS4gKi8KLSAgICBzdGF0dXNfaGRyID0gZ3JwY19zbGljZV9tYWxsb2MoMTUgKyAoZ3JwY19zdGF0dXMgPj0gMTApKTsKLSAgICBwID0gR1JQQ19TTElDRV9TVEFSVF9QVFIoc3RhdHVzX2hkcik7Ci0gICAgKnArKyA9IDB4NDA7IC8qIGxpdGVyYWwgaGVhZGVyICovCi0gICAgKnArKyA9IDExOyAgIC8qIGxlbihncnBjLXN0YXR1cykgKi8KKyAgLyogSGFuZCByb2xsIGEgaGVhZGVyIGJsb2NrLgorICAgICBUaGlzIGlzIHVubmVjZXNzYXJpbHkgdWdseSAtIGF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIGZpbmQgYSBtb3JlCisgICAgIGVsZWdhbnQgc29sdXRpb24uCisgICAgIEl0J3MgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCBvdXIgc2VuZCBtYWNoaW5lcnkgd291bGQgYmUgZGVhZCBieQorICAgICB0aGUgdGltZSB3ZSBnb3QgYXJvdW5kIHRvIHNlbmRpbmcgdGhpcywgc28gaW5zdGVhZCB3ZSBpZ25vcmUgSFBBQ0sKKyAgICAgY29tcHJlc3Npb24gYW5kIGp1c3Qgd3JpdGUgdGhlIHVuY29tcHJlc3NlZCBieXRlcyBvbnRvIHRoZSB3aXJlLiAqLworICBzdGF0dXNfaGRyID0gZ3JwY19zbGljZV9tYWxsb2MoMTUgKyAoZ3JwY19zdGF0dXMgPj0gMTApKTsKKyAgcCA9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKHN0YXR1c19oZHIpOworICAqcCsrID0gMHgwMDsgLyogbGl0ZXJhbCBoZWFkZXIsIG5vdCBpbmRleGVkICovCisgICpwKysgPSAxMTsgICAvKiBsZW4oZ3JwYy1zdGF0dXMpICovCisgICpwKysgPSAnZyc7CisgICpwKysgPSAncic7CisgICpwKysgPSAncCc7CisgICpwKysgPSAnYyc7CisgICpwKysgPSAnLSc7CisgICpwKysgPSAncyc7CisgICpwKysgPSAndCc7CisgICpwKysgPSAnYSc7CisgICpwKysgPSAndCc7CisgICpwKysgPSAndSc7CisgICpwKysgPSAncyc7CisgIGlmIChncnBjX3N0YXR1cyA8IDEwKSB7CisgICAgKnArKyA9IDE7CisgICAgKnArKyA9ICh1aW50OF90KSgnMCcgKyBncnBjX3N0YXR1cyk7CisgIH0gZWxzZSB7CisgICAgKnArKyA9IDI7CisgICAgKnArKyA9ICh1aW50OF90KSgnMCcgKyAoZ3JwY19zdGF0dXMgLyAxMCkpOworICAgICpwKysgPSAodWludDhfdCkoJzAnICsgKGdycGNfc3RhdHVzICUgMTApKTsKKyAgfQorICBHUFJfQVNTRVJUKHAgPT0gR1JQQ19TTElDRV9FTkRfUFRSKHN0YXR1c19oZHIpKTsKKyAgbGVuICs9ICh1aW50MzJfdClHUlBDX1NMSUNFX0xFTkdUSChzdGF0dXNfaGRyKTsKKworICBpZiAobXNnICE9IE5VTEwpIHsKKyAgICBzaXplX3QgbXNnX2xlbiA9IHN0cmxlbihtc2cpOworICAgIEdQUl9BU1NFUlQobXNnX2xlbiA8PSBVSU5UMzJfTUFYKTsKKyAgICB1aW50MzJfdCBtc2dfbGVuX2xlbiA9IEdSUENfQ0hUVFAyX1ZBUklOVF9MRU5HVEgoKHVpbnQzMl90KW1zZ19sZW4sIDApOworICAgIG1lc3NhZ2VfcGZ4ID0gZ3JwY19zbGljZV9tYWxsb2MoMTQgKyBtc2dfbGVuX2xlbik7CisgICAgcCA9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKG1lc3NhZ2VfcGZ4KTsKKyAgICAqcCsrID0gMHgwMDsgLyogbGl0ZXJhbCBoZWFkZXIsIG5vdCBpbmRleGVkICovCisgICAgKnArKyA9IDEyOyAgIC8qIGxlbihncnBjLW1lc3NhZ2UpICovCiAgICAgKnArKyA9ICdnJzsKICAgICAqcCsrID0gJ3InOwogICAgICpwKysgPSAncCc7CiAgICAgKnArKyA9ICdjJzsKICAgICAqcCsrID0gJy0nOworICAgICpwKysgPSAnbSc7CisgICAgKnArKyA9ICdlJzsKICAgICAqcCsrID0gJ3MnOwotICAgICpwKysgPSAndCc7CisgICAgKnArKyA9ICdzJzsKICAgICAqcCsrID0gJ2EnOwotICAgICpwKysgPSAndCc7Ci0gICAgKnArKyA9ICd1JzsKLSAgICAqcCsrID0gJ3MnOwotICAgIGlmIChncnBjX3N0YXR1cyA8IDEwKSB7Ci0gICAgICAqcCsrID0gMTsKLSAgICAgICpwKysgPSAodWludDhfdCkoJzAnICsgZ3JwY19zdGF0dXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAqcCsrID0gMjsKLSAgICAgICpwKysgPSAodWludDhfdCkoJzAnICsgKGdycGNfc3RhdHVzIC8gMTApKTsKLSAgICAgICpwKysgPSAodWludDhfdCkoJzAnICsgKGdycGNfc3RhdHVzICUgMTApKTsKLSAgICB9Ci0gICAgR1BSX0FTU0VSVChwID09IEdSUENfU0xJQ0VfRU5EX1BUUihzdGF0dXNfaGRyKSk7Ci0gICAgbGVuICs9ICh1aW50MzJfdClHUlBDX1NMSUNFX0xFTkdUSChzdGF0dXNfaGRyKTsKLQotICAgIGNvbnN0IGNoYXIgKm9wdGlvbmFsX21lc3NhZ2UgPQotICAgICAgICBncnBjX2Vycm9yX2dldF9zdHIoZXJyb3IsIEdSUENfRVJST1JfU1RSX0dSUENfTUVTU0FHRSk7Ci0KLSAgICBpZiAob3B0aW9uYWxfbWVzc2FnZSAhPSBOVUxMKSB7Ci0gICAgICBzaXplX3QgbXNnX2xlbiA9IHN0cmxlbihvcHRpb25hbF9tZXNzYWdlKTsKLSAgICAgIEdQUl9BU1NFUlQobXNnX2xlbiA8PSBVSU5UMzJfTUFYKTsKLSAgICAgIHVpbnQzMl90IG1zZ19sZW5fbGVuID0gR1JQQ19DSFRUUDJfVkFSSU5UX0xFTkdUSCgodWludDMyX3QpbXNnX2xlbiwgMCk7Ci0gICAgICBtZXNzYWdlX3BmeCA9IGdycGNfc2xpY2VfbWFsbG9jKDE0ICsgbXNnX2xlbl9sZW4pOwotICAgICAgcCA9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKG1lc3NhZ2VfcGZ4KTsKLSAgICAgICpwKysgPSAweDQwOwotICAgICAgKnArKyA9IDEyOyAvKiBsZW4oZ3JwYy1tZXNzYWdlKSAqLwotICAgICAgKnArKyA9ICdnJzsKLSAgICAgICpwKysgPSAncic7Ci0gICAgICAqcCsrID0gJ3AnOwotICAgICAgKnArKyA9ICdjJzsKLSAgICAgICpwKysgPSAnLSc7Ci0gICAgICAqcCsrID0gJ20nOwotICAgICAgKnArKyA9ICdlJzsKLSAgICAgICpwKysgPSAncyc7Ci0gICAgICAqcCsrID0gJ3MnOwotICAgICAgKnArKyA9ICdhJzsKLSAgICAgICpwKysgPSAnZyc7Ci0gICAgICAqcCsrID0gJ2UnOwotICAgICAgR1JQQ19DSFRUUDJfV1JJVEVfVkFSSU5UKCh1aW50MzJfdCltc2dfbGVuLCAwLCAwLCBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCltc2dfbGVuX2xlbik7Ci0gICAgICBwICs9IG1zZ19sZW5fbGVuOwotICAgICAgR1BSX0FTU0VSVChwID09IEdSUENfU0xJQ0VfRU5EX1BUUihtZXNzYWdlX3BmeCkpOwotICAgICAgbGVuICs9ICh1aW50MzJfdClHUlBDX1NMSUNFX0xFTkdUSChtZXNzYWdlX3BmeCk7Ci0gICAgICBsZW4gKz0gKHVpbnQzMl90KW1zZ19sZW47Ci0gICAgfQotCi0gICAgaGRyID0gZ3JwY19zbGljZV9tYWxsb2MoOSk7Ci0gICAgcCA9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKGhkcik7Ci0gICAgKnArKyA9ICh1aW50OF90KShsZW4gPj4gMTYpOwotICAgICpwKysgPSAodWludDhfdCkobGVuID4+IDgpOwotICAgICpwKysgPSAodWludDhfdCkobGVuKTsKLSAgICAqcCsrID0gR1JQQ19DSFRUUDJfRlJBTUVfSEVBREVSOwotICAgICpwKysgPSBHUlBDX0NIVFRQMl9EQVRBX0ZMQUdfRU5EX1NUUkVBTSB8IEdSUENfQ0hUVFAyX0RBVEFfRkxBR19FTkRfSEVBREVSUzsKLSAgICAqcCsrID0gKHVpbnQ4X3QpKHMtPmlkID4+IDI0KTsKLSAgICAqcCsrID0gKHVpbnQ4X3QpKHMtPmlkID4+IDE2KTsKLSAgICAqcCsrID0gKHVpbnQ4X3QpKHMtPmlkID4+IDgpOwotICAgICpwKysgPSAodWludDhfdCkocy0+aWQpOwotICAgIEdQUl9BU1NFUlQocCA9PSBHUlBDX1NMSUNFX0VORF9QVFIoaGRyKSk7Ci0KLSAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoJnQtPnFidWYsIGhkcik7Ci0gICAgZ3JwY19zbGljZV9idWZmZXJfYWRkKCZ0LT5xYnVmLCBzdGF0dXNfaGRyKTsKLSAgICBpZiAob3B0aW9uYWxfbWVzc2FnZSkgewotICAgICAgZ3JwY19zbGljZV9idWZmZXJfYWRkKCZ0LT5xYnVmLCBtZXNzYWdlX3BmeCk7Ci0gICAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoJnQtPnFidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcob3B0aW9uYWxfbWVzc2FnZSkpOwotICAgIH0KLSAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoCi0gICAgICAgICZ0LT5xYnVmLCBncnBjX2NodHRwMl9yc3Rfc3RyZWFtX2NyZWF0ZShzLT5pZCwgR1JQQ19DSFRUUDJfTk9fRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+c3RhdHMub3V0Z29pbmcpKTsKKyAgICAqcCsrID0gJ2cnOworICAgICpwKysgPSAnZSc7CisgICAgR1JQQ19DSFRUUDJfV1JJVEVfVkFSSU5UKCh1aW50MzJfdCltc2dfbGVuLCAwLCAwLCBwLCAodWludDMyX3QpbXNnX2xlbl9sZW4pOworICAgIHAgKz0gbXNnX2xlbl9sZW47CisgICAgR1BSX0FTU0VSVChwID09IEdSUENfU0xJQ0VfRU5EX1BUUihtZXNzYWdlX3BmeCkpOworICAgIGxlbiArPSAodWludDMyX3QpR1JQQ19TTElDRV9MRU5HVEgobWVzc2FnZV9wZngpOworICAgIGxlbiArPSAodWludDMyX3QpbXNnX2xlbjsKICAgfQogCi0gIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3JfZ2V0X3N0cihlcnJvciwgR1JQQ19FUlJPUl9TVFJfR1JQQ19NRVNTQUdFKTsKLSAgYm9vbCBmcmVlX21zZyA9IGZhbHNlOwotICBpZiAobXNnID09IE5VTEwpIHsKLSAgICBmcmVlX21zZyA9IHRydWU7Ci0gICAgbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcoZXJyb3IpOworICBoZHIgPSBncnBjX3NsaWNlX21hbGxvYyg5KTsKKyAgcCA9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKGhkcik7CisgICpwKysgPSAodWludDhfdCkobGVuID4+IDE2KTsKKyAgKnArKyA9ICh1aW50OF90KShsZW4gPj4gOCk7CisgICpwKysgPSAodWludDhfdCkobGVuKTsKKyAgKnArKyA9IEdSUENfQ0hUVFAyX0ZSQU1FX0hFQURFUjsKKyAgKnArKyA9IEdSUENfQ0hUVFAyX0RBVEFfRkxBR19FTkRfU1RSRUFNIHwgR1JQQ19DSFRUUDJfREFUQV9GTEFHX0VORF9IRUFERVJTOworICAqcCsrID0gKHVpbnQ4X3QpKHMtPmlkID4+IDI0KTsKKyAgKnArKyA9ICh1aW50OF90KShzLT5pZCA+PiAxNik7CisgICpwKysgPSAodWludDhfdCkocy0+aWQgPj4gOCk7CisgICpwKysgPSAodWludDhfdCkocy0+aWQpOworICBHUFJfQVNTRVJUKHAgPT0gR1JQQ19TTElDRV9FTkRfUFRSKGhkcikpOworCisgIGdycGNfc2xpY2VfYnVmZmVyX2FkZCgmdC0+cWJ1ZiwgaGRyKTsKKyAgZ3JwY19zbGljZV9idWZmZXJfYWRkKCZ0LT5xYnVmLCBzdGF0dXNfaGRyKTsKKyAgaWYgKG1zZyAhPSBOVUxMKSB7CisgICAgZ3JwY19zbGljZV9idWZmZXJfYWRkKCZ0LT5xYnVmLCBtZXNzYWdlX3BmeCk7CisgICAgZ3JwY19zbGljZV9idWZmZXJfYWRkKCZ0LT5xYnVmLCBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhtc2cpKTsKICAgfQotICBncnBjX3NsaWNlIG1zZ19zbGljZSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKG1zZyk7Ci0gIGdycGNfY2h0dHAyX2Zha2Vfc3RhdHVzKGV4ZWNfY3R4LCB0LCBzLCBncnBjX3N0YXR1cywgJm1zZ19zbGljZSk7Ci0gIGlmIChmcmVlX21zZykgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOworICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoCisgICAgICAmdC0+cWJ1ZiwgZ3JwY19jaHR0cDJfcnN0X3N0cmVhbV9jcmVhdGUocy0+aWQsIEdSUENfSFRUUDJfTk9fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPnN0YXRzLm91dGdvaW5nKSk7CiAKICAgZ3JwY19jaHR0cDJfbWFya19zdHJlYW1fY2xvc2VkKGV4ZWNfY3R4LCB0LCBzLCAxLCAxLCBlcnJvcik7CiAgIGdycGNfY2h0dHAyX2luaXRpYXRlX3dyaXRlKGV4ZWNfY3R4LCB0LCBmYWxzZSwgImNsb3NlX2Zyb21fYXBpIik7CkBAIC0xODI3LDggKzE3ODUsMTAgQEAKICAgaWYgKHBhcnNlX2Vycm9yID09IEdSUENfRVJST1JfTk9ORSAmJgogICAgICAgKHBhcnNlX2Vycm9yID0gZ3JwY19odHRwX3BhcnNlcl9lb2YoJnBhcnNlcikpID09IEdSUENfRVJST1JfTk9ORSkgewogICAgIGVycm9yID0gZ3JwY19lcnJvcl9zZXRfaW50KAotICAgICAgICBHUlBDX0VSUk9SX0NSRUFURSgiVHJ5aW5nIHRvIGNvbm5lY3QgYW4gaHR0cDEueCBzZXJ2ZXIiKSwKLSAgICAgICAgR1JQQ19FUlJPUl9JTlRfSFRUUF9TVEFUVVMsIHJlc3BvbnNlLnN0YXR1cyk7CisgICAgICAgIGdycGNfZXJyb3Jfc2V0X2ludCgKKyAgICAgICAgICAgIEdSUENfRVJST1JfQ1JFQVRFKCJUcnlpbmcgdG8gY29ubmVjdCBhbiBodHRwMS54IHNlcnZlciIpLAorICAgICAgICAgICAgR1JQQ19FUlJPUl9JTlRfSFRUUF9TVEFUVVMsIHJlc3BvbnNlLnN0YXR1cyksCisgICAgICAgIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLCBHUlBDX1NUQVRVU19VTkFWQUlMQUJMRSk7CiAgIH0KICAgR1JQQ19FUlJPUl9VTlJFRihwYXJzZV9lcnJvcik7CiAKQEAgLTIwODksNiArMjA0OSw4IEBACiAgIGdycGNfY2xvc3VyZV9zY2hlZChleGVjX2N0eCwgYnMtPm9uX25leHQsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CiAgIGJzLT5vbl9uZXh0ID0gTlVMTDsKICAgR1JQQ19FUlJPUl9VTlJFRihicy0+ZXJyb3IpOworICBncnBjX2NodHRwMl9jYW5jZWxfc3RyZWFtKGV4ZWNfY3R4LCBicy0+dHJhbnNwb3J0LCBicy0+c3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CiAgIGJzLT5lcnJvciA9IGVycm9yOwogfQogCkBAIC0yMTk3LDggKzIxNTksMTAgQEAKICAgICAgIGdwcl9sb2coR1BSX0RFQlVHLCAiSFRUUDI6ICVzIC0gc2VuZCBnb2F3YXkgdG8gZnJlZSBtZW1vcnkiLAogICAgICAgICAgICAgICB0LT5wZWVyX3N0cmluZyk7CiAgICAgfQotICAgIHNlbmRfZ29hd2F5KGV4ZWNfY3R4LCB0LCBHUlBDX0NIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTSwKLSAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiQnVmZmVycyBmdWxsIikpOworICAgIHNlbmRfZ29hd2F5KGV4ZWNfY3R4LCB0LAorICAgICAgICAgICAgICAgIGdycGNfZXJyb3Jfc2V0X2ludChHUlBDX0VSUk9SX0NSRUFURSgiQnVmZmVycyBmdWxsIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfSU5UX0hUVFAyX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNKSk7CiAgIH0gZWxzZSBpZiAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FICYmIGdycGNfcmVzb3VyY2VfcXVvdGFfdHJhY2UpIHsKICAgICBncHJfbG9nKEdQUl9ERUJVRywKICAgICAgICAgICAgICJIVFRQMjogJXMgLSBza2lwIGJlbmlnbiByZWNsYW1hdGlvbiwgdGhlcmUgYXJlIHN0aWxsICUiIFBSSWRQVFIKQEAgLTIyMjcsNyArMjE5MSw3IEBACiAgICAgZ3JwY19jaHR0cDJfY2FuY2VsX3N0cmVhbSgKICAgICAgICAgZXhlY19jdHgsIHQsIHMsIGdycGNfZXJyb3Jfc2V0X2ludChHUlBDX0VSUk9SX0NSRUFURSgiQnVmZmVycyBmdWxsIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9JTlRfSFRUUDJfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19DSFRUUDJfRU5IQU5DRV9ZT1VSX0NBTE0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNKSk7CiAgICAgaWYgKG4gPiAxKSB7CiAgICAgICAvKiBTaW5jZSB3ZSBjYW5jZWwgb25lIHN0cmVhbSBwZXIgZGVzdHJ1Y3RpdmUgcmVjbGFtYXRpb24sIGlmCiAgICAgICAgICB0aGVyZSBhcmUgbW9yZSBzdHJlYW1zIGxlZnQsIHdlIGNhbiBpbW1lZGlhdGVseSBwb3N0IGEgbmV3CmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvZnJhbWVfcnN0X3N0cmVhbS5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2ZyYW1lX3JzdF9zdHJlYW0uYwppbmRleCAyMDA0M2Y1Li43ZDViZWVkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvZnJhbWVfcnN0X3N0cmVhbS5jCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9mcmFtZV9yc3Rfc3RyZWFtLmMKQEAgLTM5LDggKzM5LDcgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3RyaW5nX3V0aWwuaD4KIAogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9mcmFtZS5oIgotI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIgogCiBncnBjX3NsaWNlIGdycGNfY2h0dHAyX3JzdF9zdHJlYW1fY3JlYXRlKHVpbnQzMl90IGlkLCB1aW50MzJfdCBjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3RyYW5zcG9ydF9vbmVfd2F5X3N0YXRzICpzdGF0cykgewpAQCAtMTA5LDE3ICsxMDgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KXAtPnJlYXNvbl9ieXRlc1syXSkgPDwgOCkgfAogICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KXAtPnJlYXNvbl9ieXRlc1szXSkpOwogICAgIGdycGNfZXJyb3IgKmVycm9yID0gR1JQQ19FUlJPUl9OT05FOwotICAgIGlmIChyZWFzb24gIT0gR1JQQ19DSFRUUDJfTk9fRVJST1IgfHwgcy0+aGVhZGVyX2ZyYW1lc19yZWNlaXZlZCA8IDIpIHsKKyAgICBpZiAocmVhc29uICE9IEdSUENfSFRUUDJfTk9fRVJST1IgfHwgcy0+aGVhZGVyX2ZyYW1lc19yZWNlaXZlZCA8IDIpIHsKICAgICAgIGVycm9yID0gZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKCJSU1RfU1RSRUFNIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9IVFRQMl9FUlJPUiwgKGludHB0cl90KXJlYXNvbik7Ci0gICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1c19jb2RlID0gZ3JwY19jaHR0cDJfaHR0cDJfZXJyb3JfdG9fZ3JwY19zdGF0dXMoCi0gICAgICAgICAgKGdycGNfY2h0dHAyX2Vycm9yX2NvZGUpcmVhc29uLCBzLT5kZWFkbGluZSk7Ci0gICAgICBjaGFyICpzdGF0dXNfZGV0YWlsczsKLSAgICAgIGdwcl9hc3ByaW50Zigmc3RhdHVzX2RldGFpbHMsICJSZWNlaXZlZCBSU1RfU1RSRUFNIHdpdGggZXJyb3IgY29kZSAlZCIsCi0gICAgICAgICAgICAgICAgICAgcmVhc29uKTsKLSAgICAgIGdycGNfc2xpY2Ugc2xpY2VfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKHN0YXR1c19kZXRhaWxzKTsKLSAgICAgIGdwcl9mcmVlKHN0YXR1c19kZXRhaWxzKTsKLSAgICAgIGdycGNfY2h0dHAyX2Zha2Vfc3RhdHVzKGV4ZWNfY3R4LCB0LCBzLCBzdGF0dXNfY29kZSwgJnNsaWNlX2RldGFpbHMpOwogICAgIH0KICAgICBncnBjX2NodHRwMl9tYXJrX3N0cmVhbV9jbG9zZWQoZXhlY19jdHgsIHQsIHMsIHRydWUsIHRydWUsIGVycm9yKTsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2ZyYW1lX3NldHRpbmdzLmMgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvZnJhbWVfc2V0dGluZ3MuYwppbmRleCA5OGZhY2FlLi5iZTliNjYzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvZnJhbWVfc2V0dGluZ3MuYworKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvZnJhbWVfc2V0dGluZ3MuYwpAQCAtNDMsOCArNDMsOCBAQAogCiAjaW5jbHVkZSAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2NodHRwMl90cmFuc3BvcnQuaCIKICNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvZnJhbWUuaCIKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2RlYnVnL3RyYWNlLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIKIAogI2RlZmluZSBNQVhfTUFYX0hFQURFUl9MSVNUX1NJWkUgKDEwMjQgKiAxMDI0ICogMTAyNCkKIApAQCAtNTIsMjEgKzUyLDIxIEBACiBjb25zdCBncnBjX2NodHRwMl9zZXR0aW5nX3BhcmFtZXRlcnMKICAgICBncnBjX2NodHRwMl9zZXR0aW5nc19wYXJhbWV0ZXJzW0dSUENfQ0hUVFAyX05VTV9TRVRUSU5HU10gPSB7CiAgICAgICAgIHtOVUxMLCAwLCAwLCAwLCBHUlBDX0NIVFRQMl9ESVNDT05ORUNUX09OX0lOVkFMSURfVkFMVUUsCi0gICAgICAgICBHUlBDX0NIVFRQMl9QUk9UT0NPTF9FUlJPUn0sCisgICAgICAgICBHUlBDX0hUVFAyX1BST1RPQ09MX0VSUk9SfSwKICAgICAgICAgeyJIRUFERVJfVEFCTEVfU0laRSIsIDQwOTYsIDAsIDB4ZmZmZmZmZmYsCi0gICAgICAgICBHUlBDX0NIVFRQMl9DTEFNUF9JTlZBTElEX1ZBTFVFLCBHUlBDX0NIVFRQMl9QUk9UT0NPTF9FUlJPUn0sCisgICAgICAgICBHUlBDX0NIVFRQMl9DTEFNUF9JTlZBTElEX1ZBTFVFLCBHUlBDX0hUVFAyX1BST1RPQ09MX0VSUk9SfSwKICAgICAgICAgeyJFTkFCTEVfUFVTSCIsIDEsIDAsIDEsIEdSUENfQ0hUVFAyX0RJU0NPTk5FQ1RfT05fSU5WQUxJRF9WQUxVRSwKLSAgICAgICAgIEdSUENfQ0hUVFAyX1BST1RPQ09MX0VSUk9SfSwKKyAgICAgICAgIEdSUENfSFRUUDJfUFJPVE9DT0xfRVJST1J9LAogICAgICAgICB7Ik1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCAweGZmZmZmZmZmdSwgMCwgMHhmZmZmZmZmZnUsCi0gICAgICAgICBHUlBDX0NIVFRQMl9ESVNDT05ORUNUX09OX0lOVkFMSURfVkFMVUUsIEdSUENfQ0hUVFAyX1BST1RPQ09MX0VSUk9SfSwKKyAgICAgICAgIEdSUENfQ0hUVFAyX0RJU0NPTk5FQ1RfT05fSU5WQUxJRF9WQUxVRSwgR1JQQ19IVFRQMl9QUk9UT0NPTF9FUlJPUn0sCiAgICAgICAgIHsiSU5JVElBTF9XSU5ET1dfU0laRSIsIDY1NTM1LCAwLCAweDdmZmZmZmZmdSwKICAgICAgICAgIEdSUENfQ0hUVFAyX0RJU0NPTk5FQ1RfT05fSU5WQUxJRF9WQUxVRSwKLSAgICAgICAgIEdSUENfQ0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUn0sCisgICAgICAgICBHUlBDX0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUn0sCiAgICAgICAgIHsiTUFYX0ZSQU1FX1NJWkUiLCAxNjM4NCwgMTYzODQsIDE2Nzc3MjE1LAotICAgICAgICAgR1JQQ19DSFRUUDJfRElTQ09OTkVDVF9PTl9JTlZBTElEX1ZBTFVFLCBHUlBDX0NIVFRQMl9QUk9UT0NPTF9FUlJPUn0sCisgICAgICAgICBHUlBDX0NIVFRQMl9ESVNDT05ORUNUX09OX0lOVkFMSURfVkFMVUUsIEdSUENfSFRUUDJfUFJPVE9DT0xfRVJST1J9LAogICAgICAgICB7Ik1BWF9IRUFERVJfTElTVF9TSVpFIiwgTUFYX01BWF9IRUFERVJfTElTVF9TSVpFLCAwLAogICAgICAgICAgTUFYX01BWF9IRUFERVJfTElTVF9TSVpFLCBHUlBDX0NIVFRQMl9DTEFNUF9JTlZBTElEX1ZBTFVFLAotICAgICAgICAgR1JQQ19DSFRUUDJfUFJPVE9DT0xfRVJST1J9LAorICAgICAgICAgR1JQQ19IVFRQMl9QUk9UT0NPTF9FUlJPUn0sCiB9OwogCiBzdGF0aWMgdWludDhfdCAqZmlsbF9oZWFkZXIodWludDhfdCAqb3V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQ4X3QgZmxhZ3MpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmMgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfZW5jb2Rlci5jCmluZGV4IDQ5YTgzMjYuLjYzZGY4ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmMKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX2VuY29kZXIuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuaCIKQEAgLTY0LDYgKzY1LDEwIEBACiAvKiBkb24ndCBjb25zaWRlciBhZGRpbmcgYW55dGhpbmcgYmlnZ2VyIHRoYW4gdGhpcyB0byB0aGUgaHBhY2sgdGFibGUgKi8KICNkZWZpbmUgTUFYX0RFQ09ERVJfU1BBQ0VfVVNBR0UgNTEyCiAKK3N0YXRpYyBncnBjX3NsaWNlX3JlZmNvdW50IHRlcm1pbmFsX3NsaWNlX3JlZmNvdW50ID0ge05VTEwsIE5VTEx9Oworc3RhdGljIGNvbnN0IGdycGNfc2xpY2UgdGVybWluYWxfc2xpY2UgPSB7JnRlcm1pbmFsX3NsaWNlX3JlZmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRhdGEucmVmY291bnRlZCA9IHswLCAwfX07CisKIGV4dGVybiBpbnQgZ3JwY19odHRwX3RyYWNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xODUsOSArMTkwLDEyIEBACiAKIC8qIGFkZCBhbiBlbGVtZW50IHRvIHRoZSBkZWNvZGVyIHRhYmxlICovCiBzdGF0aWMgdm9pZCBhZGRfZWxlbShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jaHR0cDJfaHBhY2tfY29tcHJlc3NvciAqYywKLSAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICplbGVtKSB7Ci0gIHVpbnQzMl90IGtleV9oYXNoID0gZWxlbS0+a2V5LT5oYXNoOwotICB1aW50MzJfdCBlbGVtX2hhc2ggPSBHUlBDX01EU1RSX0tWX0hBU0goa2V5X2hhc2gsIGVsZW0tPnZhbHVlLT5oYXNoKTsKKyAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtIGVsZW0pIHsKKyAgR1BSX0FTU0VSVChHUlBDX01ERUxFTV9JU19JTlRFUk5FRChlbGVtKSk7CisKKyAgdWludDMyX3Qga2V5X2hhc2ggPSBncnBjX3NsaWNlX2hhc2goR1JQQ19NREtFWShlbGVtKSk7CisgIHVpbnQzMl90IHZhbHVlX2hhc2ggPSBncnBjX3NsaWNlX2hhc2goR1JQQ19NRFZBTFVFKGVsZW0pKTsKKyAgdWludDMyX3QgZWxlbV9oYXNoID0gR1JQQ19NRFNUUl9LVl9IQVNIKGtleV9oYXNoLCB2YWx1ZV9oYXNoKTsKICAgdWludDMyX3QgbmV3X2luZGV4ID0gYy0+dGFpbF9yZW1vdGVfaW5kZXggKyBjLT50YWJsZV9lbGVtcyArIDE7CiAgIHNpemVfdCBlbGVtX3NpemUgPSBncnBjX21kZWxlbV9nZXRfc2l6ZV9pbl9ocGFja190YWJsZShlbGVtKTsKIApAQCAtMjEyLDE3ICsyMjAsMTggQEAKICAgYy0+dGFibGVfZWxlbXMrKzsKIAogICAvKiBTdG9yZSB0aGlzIGVsZW1lbnQgaW50byB7ZW50cmllcyxpbmRpY2VzfV9lbGVtICovCi0gIGlmIChjLT5lbnRyaWVzX2VsZW1zW0hBU0hfRlJBR01FTlRfMihlbGVtX2hhc2gpXSA9PSBlbGVtKSB7CisgIGlmIChncnBjX21kZWxlbV9lcShjLT5lbnRyaWVzX2VsZW1zW0hBU0hfRlJBR01FTlRfMihlbGVtX2hhc2gpXSwgZWxlbSkpIHsKICAgICAvKiBhbHJlYWR5IHRoZXJlOiB1cGRhdGUgd2l0aCBuZXcgaW5kZXggKi8KICAgICBjLT5pbmRpY2VzX2VsZW1zW0hBU0hfRlJBR01FTlRfMihlbGVtX2hhc2gpXSA9IG5ld19pbmRleDsKLSAgfSBlbHNlIGlmIChjLT5lbnRyaWVzX2VsZW1zW0hBU0hfRlJBR01FTlRfMyhlbGVtX2hhc2gpXSA9PSBlbGVtKSB7CisgIH0gZWxzZSBpZiAoZ3JwY19tZGVsZW1fZXEoYy0+ZW50cmllc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzMoZWxlbV9oYXNoKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSkpIHsKICAgICAvKiBhbHJlYWR5IHRoZXJlIChjdWNrb28pOiB1cGRhdGUgd2l0aCBuZXcgaW5kZXggKi8KICAgICBjLT5pbmRpY2VzX2VsZW1zW0hBU0hfRlJBR01FTlRfMyhlbGVtX2hhc2gpXSA9IG5ld19pbmRleDsKLSAgfSBlbHNlIGlmIChjLT5lbnRyaWVzX2VsZW1zW0hBU0hfRlJBR01FTlRfMihlbGVtX2hhc2gpXSA9PSBOVUxMKSB7CisgIH0gZWxzZSBpZiAoR1JQQ19NRElTTlVMTChjLT5lbnRyaWVzX2VsZW1zW0hBU0hfRlJBR01FTlRfMihlbGVtX2hhc2gpXSkpIHsKICAgICAvKiBub3QgdGhlcmUsIGJ1dCBhIGZyZWUgZWxlbWVudDogYWRkICovCiAgICAgYy0+ZW50cmllc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzIoZWxlbV9oYXNoKV0gPSBHUlBDX01ERUxFTV9SRUYoZWxlbSk7CiAgICAgYy0+aW5kaWNlc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzIoZWxlbV9oYXNoKV0gPSBuZXdfaW5kZXg7Ci0gIH0gZWxzZSBpZiAoYy0+ZW50cmllc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzMoZWxlbV9oYXNoKV0gPT0gTlVMTCkgeworICB9IGVsc2UgaWYgKEdSUENfTURJU05VTEwoYy0+ZW50cmllc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzMoZWxlbV9oYXNoKV0pKSB7CiAgICAgLyogbm90IHRoZXJlIChjdWNrb28pLCBidXQgYSBmcmVlIGVsZW1lbnQ6IGFkZCAqLwogICAgIGMtPmVudHJpZXNfZWxlbXNbSEFTSF9GUkFHTUVOVF8zKGVsZW1faGFzaCldID0gR1JQQ19NREVMRU1fUkVGKGVsZW0pOwogICAgIGMtPmluZGljZXNfZWxlbXNbSEFTSF9GUkFHTUVOVF8zKGVsZW1faGFzaCldID0gbmV3X2luZGV4OwpAQCAtMjQxLDI0ICsyNTAsMzQgQEAKIAogICAvKiBkbyBleGFjdGx5IHRoZSBzYW1lIGZvciB0aGUga2V5IChzbyB3ZSBjYW4gZmluZCBieSB0aGF0IGFnYWluIHRvbykgKi8KIAotICBpZiAoYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMihrZXlfaGFzaCldID09IGVsZW0tPmtleSkgeworICBpZiAoZ3JwY19zbGljZV9lcShjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0sCisgICAgICAgICAgICAgICAgICAgIEdSUENfTURLRVkoZWxlbSkpKSB7CiAgICAgYy0+aW5kaWNlc19rZXlzW0hBU0hfRlJBR01FTlRfMihrZXlfaGFzaCldID0gbmV3X2luZGV4OwotICB9IGVsc2UgaWYgKGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSA9PSBlbGVtLT5rZXkpIHsKKyAgfSBlbHNlIGlmIChncnBjX3NsaWNlX2VxKGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfTURLRVkoZWxlbSkpKSB7CiAgICAgYy0+aW5kaWNlc19rZXlzW0hBU0hfRlJBR01FTlRfMyhrZXlfaGFzaCldID0gbmV3X2luZGV4OwotICB9IGVsc2UgaWYgKGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzIoa2V5X2hhc2gpXSA9PSBOVUxMKSB7Ci0gICAgYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMihrZXlfaGFzaCldID0gR1JQQ19NRFNUUl9SRUYoZWxlbS0+a2V5KTsKKyAgfSBlbHNlIGlmIChjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0ucmVmY291bnQgPT0KKyAgICAgICAgICAgICAmdGVybWluYWxfc2xpY2VfcmVmY291bnQpIHsKKyAgICBjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0gPQorICAgICAgICBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChHUlBDX01ES0VZKGVsZW0pKTsKICAgICBjLT5pbmRpY2VzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0gPSBuZXdfaW5kZXg7Ci0gIH0gZWxzZSBpZiAoYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMyhrZXlfaGFzaCldID09IE5VTEwpIHsKLSAgICBjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8zKGtleV9oYXNoKV0gPSBHUlBDX01EU1RSX1JFRihlbGVtLT5rZXkpOworICB9IGVsc2UgaWYgKGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXS5yZWZjb3VudCA9PQorICAgICAgICAgICAgICZ0ZXJtaW5hbF9zbGljZV9yZWZjb3VudCkgeworICAgIGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSA9CisgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKEdSUENfTURLRVkoZWxlbSkpOwogICAgIGMtPmluZGljZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSA9IG5ld19pbmRleDsKICAgfSBlbHNlIGlmIChjLT5pbmRpY2VzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0gPAogICAgICAgICAgICAgIGMtPmluZGljZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSkgewotICAgIEdSUENfTURTVFJfVU5SRUYoZXhlY19jdHgsIGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzIoa2V5X2hhc2gpXSk7Ci0gICAgYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMihrZXlfaGFzaCldID0gR1JQQ19NRFNUUl9SRUYoZWxlbS0+a2V5KTsKKyAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMihrZXlfaGFzaCldKTsKKyAgICBjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0gPQorICAgICAgICBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChHUlBDX01ES0VZKGVsZW0pKTsKICAgICBjLT5pbmRpY2VzX2tleXNbSEFTSF9GUkFHTUVOVF8yKGtleV9oYXNoKV0gPSBuZXdfaW5kZXg7CiAgIH0gZWxzZSB7Ci0gICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMyhrZXlfaGFzaCldKTsKLSAgICBjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8zKGtleV9oYXNoKV0gPSBHUlBDX01EU1RSX1JFRihlbGVtLT5rZXkpOworICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8zKGtleV9oYXNoKV0pOworICAgIGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSA9CisgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKEdSUENfTURLRVkoZWxlbSkpOwogICAgIGMtPmluZGljZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzMoa2V5X2hhc2gpXSA9IG5ld19pbmRleDsKICAgfQogfQpAQCAtMjcwLDIwICsyODksMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbik7CiB9CiAKLXN0YXRpYyBncnBjX3NsaWNlIGdldF93aXJlX3ZhbHVlKGdycGNfbWRlbGVtICplbGVtLCB1aW50OF90ICpodWZmbWFuX3ByZWZpeCkgewotICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKAotICAgICAgICAgIChjb25zdCBjaGFyICopR1JQQ19TTElDRV9TVEFSVF9QVFIoZWxlbS0+a2V5LT5zbGljZSksCi0gICAgICAgICAgR1JQQ19TTElDRV9MRU5HVEgoZWxlbS0+a2V5LT5zbGljZSkpKSB7CitzdGF0aWMgZ3JwY19zbGljZSBnZXRfd2lyZV92YWx1ZShncnBjX21kZWxlbSBlbGVtLCB1aW50OF90ICpodWZmbWFuX3ByZWZpeCkgeworICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKEdSUENfTURLRVkoZWxlbSkpKSB7CiAgICAgKmh1ZmZtYW5fcHJlZml4ID0gMHg4MDsKLSAgICByZXR1cm4gZ3JwY19tZHN0cl9hc19iYXNlNjRfZW5jb2RlZF9hbmRfaHVmZm1hbl9jb21wcmVzc2VkKGVsZW0tPnZhbHVlKTsKKyAgICByZXR1cm4gZ3JwY19jaHR0cDJfYmFzZTY0X2VuY29kZV9hbmRfaHVmZm1hbl9jb21wcmVzcyhHUlBDX01EVkFMVUUoZWxlbSkpOwogICB9CiAgIC8qIFRPRE8oY3RpbGxlcik6IG9wcG9ydHVuaXN0aWNhbGx5IGNvbXByZXNzIG5vbi1iaW5hcnkgaGVhZGVycyAqLwogICAqaHVmZm1hbl9wcmVmaXggPSAweDAwOwotICByZXR1cm4gZWxlbS0+dmFsdWUtPnNsaWNlOworICByZXR1cm4gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoR1JQQ19NRFZBTFVFKGVsZW0pKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdF9saXRoZHJfaW5jaWR4KGdycGNfY2h0dHAyX2hwYWNrX2NvbXByZXNzb3IgKmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5X2luZGV4LCBncnBjX21kZWxlbSAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlfaW5kZXgsIGdycGNfbWRlbGVtIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVyX3N0YXRlICpzdCkgewogICB1aW50MzJfdCBsZW5fcGZ4ID0gR1JQQ19DSFRUUDJfVkFSSU5UX0xFTkdUSChrZXlfaW5kZXgsIDIpOwogICB1aW50OF90IGh1ZmZtYW5fcHJlZml4OwpAQCAtMjk2LDExICszMTMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF90aW55X2hlYWRlcl9kYXRhKHN0LCBsZW5fcGZ4KSwgbGVuX3BmeCk7CiAgIEdSUENfQ0hUVFAyX1dSSVRFX1ZBUklOVCgodWludDMyX3QpbGVuX3ZhbCwgMSwgaHVmZm1hbl9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfdGlueV9oZWFkZXJfZGF0YShzdCwgbGVuX3ZhbF9sZW4pLCBsZW5fdmFsX2xlbik7Ci0gIGFkZF9oZWFkZXJfZGF0YShzdCwgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwodmFsdWVfc2xpY2UpKTsKKyAgYWRkX2hlYWRlcl9kYXRhKHN0LCB2YWx1ZV9zbGljZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVtaXRfbGl0aGRyX25vaWR4KGdycGNfY2h0dHAyX2hwYWNrX2NvbXByZXNzb3IgKmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBrZXlfaW5kZXgsIGdycGNfbWRlbGVtICplbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qga2V5X2luZGV4LCBncnBjX21kZWxlbSBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVyX3N0YXRlICpzdCkgewogICB1aW50MzJfdCBsZW5fcGZ4ID0gR1JQQ19DSFRUUDJfVkFSSU5UX0xFTkdUSChrZXlfaW5kZXgsIDQpOwogICB1aW50OF90IGh1ZmZtYW5fcHJlZml4OwpAQCAtMzEzLDEyICszMzAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF90aW55X2hlYWRlcl9kYXRhKHN0LCBsZW5fcGZ4KSwgbGVuX3BmeCk7CiAgIEdSUENfQ0hUVFAyX1dSSVRFX1ZBUklOVCgodWludDMyX3QpbGVuX3ZhbCwgMSwgaHVmZm1hbl9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfdGlueV9oZWFkZXJfZGF0YShzdCwgbGVuX3ZhbF9sZW4pLCBsZW5fdmFsX2xlbik7Ci0gIGFkZF9oZWFkZXJfZGF0YShzdCwgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwodmFsdWVfc2xpY2UpKTsKKyAgYWRkX2hlYWRlcl9kYXRhKHN0LCB2YWx1ZV9zbGljZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVtaXRfbGl0aGRyX2luY2lkeF92KGdycGNfY2h0dHAyX2hwYWNrX2NvbXByZXNzb3IgKmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqZWxlbSwgZnJhbWVyX3N0YXRlICpzdCkgewotICB1aW50MzJfdCBsZW5fa2V5ID0gKHVpbnQzMl90KUdSUENfU0xJQ0VfTEVOR1RIKGVsZW0tPmtleS0+c2xpY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gZWxlbSwgZnJhbWVyX3N0YXRlICpzdCkgeworICB1aW50MzJfdCBsZW5fa2V5ID0gKHVpbnQzMl90KUdSUENfU0xJQ0VfTEVOR1RIKEdSUENfTURLRVkoZWxlbSkpOwogICB1aW50OF90IGh1ZmZtYW5fcHJlZml4OwogICBncnBjX3NsaWNlIHZhbHVlX3NsaWNlID0gZ2V0X3dpcmVfdmFsdWUoZWxlbSwgJmh1ZmZtYW5fcHJlZml4KTsKICAgdWludDMyX3QgbGVuX3ZhbCA9ICh1aW50MzJfdClHUlBDX1NMSUNFX0xFTkdUSCh2YWx1ZV9zbGljZSk7CkBAIC0zMjksMTUgKzM0NiwxNSBAQAogICAqYWRkX3RpbnlfaGVhZGVyX2RhdGEoc3QsIDEpID0gMHg0MDsKICAgR1JQQ19DSFRUUDJfV1JJVEVfVkFSSU5UKGxlbl9rZXksIDEsIDB4MDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfdGlueV9oZWFkZXJfZGF0YShzdCwgbGVuX2tleV9sZW4pLCBsZW5fa2V5X2xlbik7Ci0gIGFkZF9oZWFkZXJfZGF0YShzdCwgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoZWxlbS0+a2V5LT5zbGljZSkpOworICBhZGRfaGVhZGVyX2RhdGEoc3QsIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKEdSUENfTURLRVkoZWxlbSkpKTsKICAgR1JQQ19DSFRUUDJfV1JJVEVfVkFSSU5UKGxlbl92YWwsIDEsIGh1ZmZtYW5fcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3RpbnlfaGVhZGVyX2RhdGEoc3QsIGxlbl92YWxfbGVuKSwgbGVuX3ZhbF9sZW4pOwotICBhZGRfaGVhZGVyX2RhdGEoc3QsIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKHZhbHVlX3NsaWNlKSk7CisgIGFkZF9oZWFkZXJfZGF0YShzdCwgdmFsdWVfc2xpY2UpOwogfQogCiBzdGF0aWMgdm9pZCBlbWl0X2xpdGhkcl9ub2lkeF92KGdycGNfY2h0dHAyX2hwYWNrX2NvbXByZXNzb3IgKmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICplbGVtLCBmcmFtZXJfc3RhdGUgKnN0KSB7Ci0gIHVpbnQzMl90IGxlbl9rZXkgPSAodWludDMyX3QpR1JQQ19TTElDRV9MRU5HVEgoZWxlbS0+a2V5LT5zbGljZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtIGVsZW0sIGZyYW1lcl9zdGF0ZSAqc3QpIHsKKyAgdWludDMyX3QgbGVuX2tleSA9ICh1aW50MzJfdClHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01ES0VZKGVsZW0pKTsKICAgdWludDhfdCBodWZmbWFuX3ByZWZpeDsKICAgZ3JwY19zbGljZSB2YWx1ZV9zbGljZSA9IGdldF93aXJlX3ZhbHVlKGVsZW0sICZodWZmbWFuX3ByZWZpeCk7CiAgIHVpbnQzMl90IGxlbl92YWwgPSAodWludDMyX3QpR1JQQ19TTElDRV9MRU5HVEgodmFsdWVfc2xpY2UpOwpAQCAtMzQ4LDEwICszNjUsMTAgQEAKICAgKmFkZF90aW55X2hlYWRlcl9kYXRhKHN0LCAxKSA9IDB4MDA7CiAgIEdSUENfQ0hUVFAyX1dSSVRFX1ZBUklOVChsZW5fa2V5LCAxLCAweDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3RpbnlfaGVhZGVyX2RhdGEoc3QsIGxlbl9rZXlfbGVuKSwgbGVuX2tleV9sZW4pOwotICBhZGRfaGVhZGVyX2RhdGEoc3QsIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKGVsZW0tPmtleS0+c2xpY2UpKTsKKyAgYWRkX2hlYWRlcl9kYXRhKHN0LCBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChHUlBDX01ES0VZKGVsZW0pKSk7CiAgIEdSUENfQ0hUVFAyX1dSSVRFX1ZBUklOVChsZW5fdmFsLCAxLCBodWZmbWFuX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF90aW55X2hlYWRlcl9kYXRhKHN0LCBsZW5fdmFsX2xlbiksIGxlbl92YWxfbGVuKTsKLSAgYWRkX2hlYWRlcl9kYXRhKHN0LCBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbCh2YWx1ZV9zbGljZSkpOworICBhZGRfaGVhZGVyX2RhdGEoc3QsIHZhbHVlX3NsaWNlKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdF9hZHZlcnRpc2VfdGFibGVfc2l6ZV9jaGFuZ2UoZ3JwY19jaHR0cDJfaHBhY2tfY29tcHJlc3NvciAqYywKQEAgLTM2OSwxNSArMzg2LDkgQEAKIAogLyogZW5jb2RlIGFuIG1kZWxlbSAqLwogc3RhdGljIHZvaWQgaHBhY2tfZW5jKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NodHRwMl9ocGFja19jb21wcmVzc29yICpjLAotICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICplbGVtLCBmcmFtZXJfc3RhdGUgKnN0KSB7Ci0gIHVpbnQzMl90IGtleV9oYXNoID0gZWxlbS0+a2V5LT5oYXNoOwotICB1aW50MzJfdCBlbGVtX2hhc2ggPSBHUlBDX01EU1RSX0tWX0hBU0goa2V5X2hhc2gsIGVsZW0tPnZhbHVlLT5oYXNoKTsKLSAgc2l6ZV90IGRlY29kZXJfc3BhY2VfdXNhZ2U7Ci0gIHVpbnQzMl90IGluZGljZXNfa2V5OwotICBpbnQgc2hvdWxkX2FkZF9lbGVtOwotCi0gIEdQUl9BU1NFUlQoR1JQQ19TTElDRV9MRU5HVEgoZWxlbS0+a2V5LT5zbGljZSkgPiAwKTsKLSAgaWYgKEdSUENfU0xJQ0VfU1RBUlRfUFRSKGVsZW0tPmtleS0+c2xpY2UpWzBdICE9ICc6JykgeyAvKiByZWd1bGFyIGhlYWRlciAqLworICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtIGVsZW0sIGZyYW1lcl9zdGF0ZSAqc3QpIHsKKyAgR1BSX0FTU0VSVChHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01ES0VZKGVsZW0pKSA+IDApOworICBpZiAoR1JQQ19TTElDRV9TVEFSVF9QVFIoR1JQQ19NREtFWShlbGVtKSlbMF0gIT0gJzonKSB7IC8qIHJlZ3VsYXIgaGVhZGVyICovCiAgICAgc3QtPnNlZW5fcmVndWxhcl9oZWFkZXIgPSAxOwogICB9IGVsc2UgewogICAgIEdQUl9BU1NFUlQoCkBAIC0zODUsMTEgKzM5NiwzOSBAQAogICAgICAgICAiUmVzZXJ2ZWQgaGVhZGVyIChjb2xvbi1wcmVmaXhlZCkgaGFwcGVuaW5nIGFmdGVyIHJlZ3VsYXIgb25lcy4iKTsKICAgfQogCisgIGlmIChncnBjX2h0dHBfdHJhY2UgJiYgIUdSUENfTURFTEVNX0lTX0lOVEVSTkVEKGVsZW0pKSB7CisgICAgY2hhciAqayA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoR1JQQ19NREtFWShlbGVtKSk7CisgICAgY2hhciAqdiA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoR1JQQ19NRFZBTFVFKGVsZW0pKTsKKyAgICBncHJfbG9nKAorICAgICAgICBHUFJfREVCVUcsCisgICAgICAgICJFbmNvZGU6ICclczogJXMnLCBlbGVtX2ludGVybmVkPSVkIFslZF0sIGtfaW50ZXJuZWQ9JWQsIHZfaW50ZXJuZWQ9JWQiLAorICAgICAgICBrLCB2LCBHUlBDX01ERUxFTV9JU19JTlRFUk5FRChlbGVtKSwgR1JQQ19NREVMRU1fU1RPUkFHRShlbGVtKSwKKyAgICAgICAgZ3JwY19zbGljZV9pc19pbnRlcm5lZChHUlBDX01ES0VZKGVsZW0pKSwKKyAgICAgICAgZ3JwY19zbGljZV9pc19pbnRlcm5lZChHUlBDX01EVkFMVUUoZWxlbSkpKTsKKyAgICBncHJfZnJlZShrKTsKKyAgICBncHJfZnJlZSh2KTsKKyAgfQorICBpZiAoIUdSUENfTURFTEVNX0lTX0lOVEVSTkVEKGVsZW0pKSB7CisgICAgZW1pdF9saXRoZHJfbm9pZHhfdihjLCBlbGVtLCBzdCk7CisgICAgcmV0dXJuOworICB9CisKKyAgdWludDMyX3Qga2V5X2hhc2g7CisgIHVpbnQzMl90IHZhbHVlX2hhc2g7CisgIHVpbnQzMl90IGVsZW1faGFzaDsKKyAgc2l6ZV90IGRlY29kZXJfc3BhY2VfdXNhZ2U7CisgIHVpbnQzMl90IGluZGljZXNfa2V5OworICBpbnQgc2hvdWxkX2FkZF9lbGVtOworCisgIGtleV9oYXNoID0gZ3JwY19zbGljZV9oYXNoKEdSUENfTURLRVkoZWxlbSkpOworICB2YWx1ZV9oYXNoID0gZ3JwY19zbGljZV9oYXNoKEdSUENfTURWQUxVRShlbGVtKSk7CisgIGVsZW1faGFzaCA9IEdSUENfTURTVFJfS1ZfSEFTSChrZXlfaGFzaCwgdmFsdWVfaGFzaCk7CisKICAgaW5jX2ZpbHRlcihIQVNIX0ZSQUdNRU5UXzEoZWxlbV9oYXNoKSwgJmMtPmZpbHRlcl9lbGVtc19zdW0sIGMtPmZpbHRlcl9lbGVtcyk7CiAKICAgLyogaXMgdGhpcyBlbGVtIGN1cnJlbnRseSBpbiB0aGUgZGVjb2RlcnMgdGFibGU/ICovCiAKLSAgaWYgKGMtPmVudHJpZXNfZWxlbXNbSEFTSF9GUkFHTUVOVF8yKGVsZW1faGFzaCldID09IGVsZW0gJiYKKyAgaWYgKGdycGNfbWRlbGVtX2VxKGMtPmVudHJpZXNfZWxlbXNbSEFTSF9GUkFHTUVOVF8yKGVsZW1faGFzaCldLCBlbGVtKSAmJgogICAgICAgYy0+aW5kaWNlc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzIoZWxlbV9oYXNoKV0gPiBjLT50YWlsX3JlbW90ZV9pbmRleCkgewogICAgIC8qIEhJVDogY29tcGxldGUgZWxlbWVudCAoZmlyc3QgY3Vja29vIGhhc2gpICovCiAgICAgZW1pdF9pbmRleGVkKGMsIGR5bmlkeChjLCBjLT5pbmRpY2VzX2VsZW1zW0hBU0hfRlJBR01FTlRfMihlbGVtX2hhc2gpXSksCkBAIC0zOTcsNyArNDM2LDcgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAoYy0+ZW50cmllc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzMoZWxlbV9oYXNoKV0gPT0gZWxlbSAmJgorICBpZiAoZ3JwY19tZGVsZW1fZXEoYy0+ZW50cmllc19lbGVtc1tIQVNIX0ZSQUdNRU5UXzMoZWxlbV9oYXNoKV0sIGVsZW0pICYmCiAgICAgICBjLT5pbmRpY2VzX2VsZW1zW0hBU0hfRlJBR01FTlRfMyhlbGVtX2hhc2gpXSA+IGMtPnRhaWxfcmVtb3RlX2luZGV4KSB7CiAgICAgLyogSElUOiBjb21wbGV0ZSBlbGVtZW50IChzZWNvbmQgY3Vja29vIGhhc2gpICovCiAgICAgZW1pdF9pbmRleGVkKGMsIGR5bmlkeChjLCBjLT5pbmRpY2VzX2VsZW1zW0hBU0hfRlJBR01FTlRfMyhlbGVtX2hhc2gpXSksCkBAIC00MTQsNyArNDUzLDggQEAKICAgLyogbm8gaGl0cyBmb3IgdGhlIGVsZW0uLi4gbWF5YmUgdGhlcmUncyBhIGtleT8gKi8KIAogICBpbmRpY2VzX2tleSA9IGMtPmluZGljZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzIoa2V5X2hhc2gpXTsKLSAgaWYgKGMtPmVudHJpZXNfa2V5c1tIQVNIX0ZSQUdNRU5UXzIoa2V5X2hhc2gpXSA9PSBlbGVtLT5rZXkgJiYKKyAgaWYgKGdycGNfc2xpY2VfZXEoYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMihrZXlfaGFzaCldLAorICAgICAgICAgICAgICAgICAgICBHUlBDX01ES0VZKGVsZW0pKSAmJgogICAgICAgaW5kaWNlc19rZXkgPiBjLT50YWlsX3JlbW90ZV9pbmRleCkgewogICAgIC8qIEhJVDoga2V5IChmaXJzdCBjdWNrb28gaGFzaCkgKi8KICAgICBpZiAoc2hvdWxkX2FkZF9lbGVtKSB7CkBAIC00MjksNyArNDY5LDggQEAKICAgfQogCiAgIGluZGljZXNfa2V5ID0gYy0+aW5kaWNlc19rZXlzW0hBU0hfRlJBR01FTlRfMyhrZXlfaGFzaCldOwotICBpZiAoYy0+ZW50cmllc19rZXlzW0hBU0hfRlJBR01FTlRfMyhrZXlfaGFzaCldID09IGVsZW0tPmtleSAmJgorICBpZiAoZ3JwY19zbGljZV9lcShjLT5lbnRyaWVzX2tleXNbSEFTSF9GUkFHTUVOVF8zKGtleV9oYXNoKV0sCisgICAgICAgICAgICAgICAgICAgIEdSUENfTURLRVkoZWxlbSkpICYmCiAgICAgICBpbmRpY2VzX2tleSA+IGMtPnRhaWxfcmVtb3RlX2luZGV4KSB7CiAgICAgLyogSElUOiBrZXkgKGZpcnN0IGN1Y2tvbyBoYXNoKSAqLwogICAgIGlmIChzaG91bGRfYWRkX2VsZW0pIHsKQEAgLTQ2MywxMSArNTA0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfY29tcHJlc3NvciAqYywgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcl9zdGF0ZSAqc3QpIHsKICAgY2hhciB0aW1lb3V0X3N0cltHUlBDX0hUVFAyX1RJTUVPVVRfRU5DT0RFX01JTl9CVUZTSVpFXTsKLSAgZ3JwY19tZGVsZW0gKm1kZWxlbTsKKyAgZ3JwY19tZGVsZW0gbWRlbGVtOwogICBncnBjX2h0dHAyX2VuY29kZV90aW1lb3V0KAogICAgICAgZ3ByX3RpbWVfc3ViKGRlYWRsaW5lLCBncHJfbm93KGRlYWRsaW5lLmNsb2NrX3R5cGUpKSwgdGltZW91dF9zdHIpOwotICBtZGVsZW0gPSBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCi0gICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX1RJTUVPVVQsIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcodGltZW91dF9zdHIpKTsKKyAgbWRlbGVtID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyh0aW1lb3V0X3N0cikpOwogICBocGFja19lbmMoZXhlY19jdHgsIGMsIG1kZWxlbSwgc3QpOwogICBHUlBDX01ERUxFTV9VTlJFRihleGVjX2N0eCwgbWRlbGVtKTsKIH0KQEAgLTQ4NCwxNCArNTI1LDE5IEBACiAgICAgICBncHJfbWFsbG9jKHNpemVvZigqYy0+dGFibGVfZWxlbV9zaXplKSAqIGMtPmNhcF90YWJsZV9lbGVtcyk7CiAgIG1lbXNldChjLT50YWJsZV9lbGVtX3NpemUsIDAsCiAgICAgICAgICBzaXplb2YoKmMtPnRhYmxlX2VsZW1fc2l6ZSkgKiBjLT5jYXBfdGFibGVfZWxlbXMpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEdQUl9BUlJBWV9TSVpFKGMtPmVudHJpZXNfa2V5cyk7IGkrKykgeworICAgIGMtPmVudHJpZXNfa2V5c1tpXSA9IHRlcm1pbmFsX3NsaWNlOworICB9CiB9CiAKIHZvaWQgZ3JwY19jaHR0cDJfaHBhY2tfY29tcHJlc3Nvcl9kZXN0cm95KGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfY29tcHJlc3NvciAqYykgewogICBpbnQgaTsKICAgZm9yIChpID0gMDsgaSA8IEdSUENfQ0hUVFAyX0hQQUNLQ19OVU1fVkFMVUVTOyBpKyspIHsKLSAgICBpZiAoYy0+ZW50cmllc19rZXlzW2ldKSBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBjLT5lbnRyaWVzX2tleXNbaV0pOwotICAgIGlmIChjLT5lbnRyaWVzX2VsZW1zW2ldKSBHUlBDX01ERUxFTV9VTlJFRihleGVjX2N0eCwgYy0+ZW50cmllc19lbGVtc1tpXSk7CisgICAgaWYgKGMtPmVudHJpZXNfa2V5c1tpXS5yZWZjb3VudCAhPSAmdGVybWluYWxfc2xpY2VfcmVmY291bnQpIHsKKyAgICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIGMtPmVudHJpZXNfa2V5c1tpXSk7CisgICAgfQorICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBjLT5lbnRyaWVzX2VsZW1zW2ldKTsKICAgfQogICBncHJfZnJlZShjLT50YWJsZV9lbGVtX3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX2VuY29kZXIuaCBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmgKaW5kZXggM2EzNTQ5Ni4uODNiYTViMSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX2VuY29kZXIuaAorKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfZW5jb2Rlci5oCkBAIC03NCw4ICs3NCw4IEBACiAKICAgLyogZW50cnkgdGFibGVzIGZvciBrZXlzICYgZWxlbXM6IHRoZXNlIHRhYmxlcyB0cmFjayB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4KICAgICAgc2VlbiBhbmQgKm1heSogYmUgaW4gdGhlIGRlY29tcHJlc3NvciB0YWJsZSAqLwotICBncnBjX21kc3RyICplbnRyaWVzX2tleXNbR1JQQ19DSFRUUDJfSFBBQ0tDX05VTV9WQUxVRVNdOwotICBncnBjX21kZWxlbSAqZW50cmllc19lbGVtc1tHUlBDX0NIVFRQMl9IUEFDS0NfTlVNX1ZBTFVFU107CisgIGdycGNfc2xpY2UgZW50cmllc19rZXlzW0dSUENfQ0hUVFAyX0hQQUNLQ19OVU1fVkFMVUVTXTsKKyAgZ3JwY19tZGVsZW0gZW50cmllc19lbGVtc1tHUlBDX0NIVFRQMl9IUEFDS0NfTlVNX1ZBTFVFU107CiAgIHVpbnQzMl90IGluZGljZXNfa2V5c1tHUlBDX0NIVFRQMl9IUEFDS0NfTlVNX1ZBTFVFU107CiAgIHVpbnQzMl90IGluZGljZXNfZWxlbXNbR1JQQ19DSFRUUDJfSFBBQ0tDX05VTV9WQUxVRVNdOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmMgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmMKaW5kZXggOGI5MWNjNy4uNDBmNTEyMCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3BhcnNlci5jCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19wYXJzZXIuYwpAQCAtNTAsOSArNTAsMTMgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvdXNlZnVsLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvYmluX2VuY29kZXIuaCIKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3Byb2ZpbGluZy90aW1lcnMuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIgorCisvKiBUT0RPKGN0aWxsZXIpOiByZW1vdmUgYmVmb3JlIHN1Ym1pc3Npb24gKi8KKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKIAogZXh0ZXJuIGludCBncnBjX2h0dHBfdHJhY2U7CiAKQEAgLTY2OCw4ICs2NzIsMjIgQEAKIAogLyogZW1pc3Npb24gaGVscGVycyAqLwogc3RhdGljIGdycGNfZXJyb3IgKm9uX2hkcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAotICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqbWQsIGludCBhZGRfdG9fdGFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gbWQsIGludCBhZGRfdG9fdGFibGUpIHsKKyAgaWYgKGdycGNfaHR0cF90cmFjZSAmJiAhR1JQQ19NREVMRU1fSVNfSU5URVJORUQobWQpKSB7CisgICAgY2hhciAqayA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoR1JQQ19NREtFWShtZCkpOworICAgIGNoYXIgKnYgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKEdSUENfTURWQUxVRShtZCkpOworICAgIGdwcl9sb2coCisgICAgICAgIEdQUl9ERUJVRywKKyAgICAgICAgIkRlY29kZTogJyVzOiAlcycsIGVsZW1faW50ZXJuZWQ9JWQgWyVkXSwga19pbnRlcm5lZD0lZCwgdl9pbnRlcm5lZD0lZCIsCisgICAgICAgIGssIHYsIEdSUENfTURFTEVNX0lTX0lOVEVSTkVEKG1kKSwgR1JQQ19NREVMRU1fU1RPUkFHRShtZCksCisgICAgICAgIGdycGNfc2xpY2VfaXNfaW50ZXJuZWQoR1JQQ19NREtFWShtZCkpLAorICAgICAgICBncnBjX3NsaWNlX2lzX2ludGVybmVkKEdSUENfTURWQUxVRShtZCkpKTsKKyAgICBncHJfZnJlZShrKTsKKyAgICBncHJfZnJlZSh2KTsKKyAgfQogICBpZiAoYWRkX3RvX3RhYmxlKSB7CisgICAgR1BSX0FTU0VSVChHUlBDX01ERUxFTV9TVE9SQUdFKG1kKSA9PSBHUlBDX01ERUxFTV9TVE9SQUdFX0lOVEVSTkVEIHx8CisgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9TVE9SQUdFKG1kKSA9PSBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQyk7CiAgICAgZ3JwY19lcnJvciAqZXJyID0gZ3JwY19jaHR0cDJfaHB0YmxfYWRkKGV4ZWNfY3R4LCAmcC0+dGFibGUsIG1kKTsKICAgICBpZiAoZXJyICE9IEdSUENfRVJST1JfTk9ORSkgcmV0dXJuIGVycjsKICAgfQpAQCAtNjgxLDEwICs2OTksMjggQEAKICAgcmV0dXJuIEdSUENfRVJST1JfTk9ORTsKIH0KIAotc3RhdGljIGdycGNfbWRzdHIgKnRha2Vfc3RyaW5nKGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlciAqcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl9ocGFja19wYXJzZXJfc3RyaW5nICpzdHIpIHsKLSAgZ3JwY19tZHN0ciAqcyA9IGdycGNfbWRzdHJfZnJvbV9idWZmZXIoKHVpbnQ4X3QgKilzdHItPnN0ciwgc3RyLT5sZW5ndGgpOwotICBzdHItPmxlbmd0aCA9IDA7CitzdGF0aWMgZ3JwY19zbGljZSB0YWtlX3N0cmluZyhncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlciAqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9zdHJpbmcgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW50ZXJuKSB7CisgIGdycGNfc2xpY2UgczsKKyAgaWYgKCFzdHItPmNvcGllZCkgeworICAgIGlmIChpbnRlcm4pIHsKKyAgICAgIHMgPSBncnBjX3NsaWNlX2ludGVybihzdHItPmRhdGEucmVmZXJlbmNlZCk7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBzdHItPmRhdGEucmVmZXJlbmNlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHMgPSBzdHItPmRhdGEucmVmZXJlbmNlZDsKKyAgICB9CisgICAgc3RyLT5jb3BpZWQgPSB0cnVlOworICAgIHN0ci0+ZGF0YS5yZWZlcmVuY2VkID0gZ3JwY19lbXB0eV9zbGljZSgpOworICB9IGVsc2UgaWYgKGludGVybikgeworICAgIHMgPSBncnBjX3NsaWNlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlcigKKyAgICAgICAgc3RyLT5kYXRhLmNvcGllZC5zdHIsIHN0ci0+ZGF0YS5jb3BpZWQubGVuZ3RoKSk7CisgIH0gZWxzZSB7CisgICAgcyA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKHN0ci0+ZGF0YS5jb3BpZWQuc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHItPmRhdGEuY29waWVkLmxlbmd0aCk7CisgIH0KKyAgc3RyLT5kYXRhLmNvcGllZC5sZW5ndGggPSAwOwogICByZXR1cm4gczsKIH0KIApAQCAtNzcxLDggKzgwNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICplbmQpIHsKLSAgZ3JwY19tZGVsZW0gKm1kID0gZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKCZwLT50YWJsZSwgcC0+aW5kZXgpOwotICBpZiAobWQgPT0gTlVMTCkgeworICBncnBjX21kZWxlbSBtZCA9IGdycGNfY2h0dHAyX2hwdGJsX2xvb2t1cCgmcC0+dGFibGUsIHAtPmluZGV4KTsKKyAgaWYgKEdSUENfTURJU05VTEwobWQpKSB7CiAgICAgcmV0dXJuIGdycGNfZXJyb3Jfc2V0X2ludCgKICAgICAgICAgZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKCJJbnZhbGlkIEhQQUNLIGluZGV4IHJlY2VpdmVkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9JTkRFWCwgKGludHB0cl90KXAtPmluZGV4KSwKQEAgLTgxMywxMiArODQ5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICplbmQpIHsKLSAgZ3JwY19tZGVsZW0gKm1kID0gZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKCZwLT50YWJsZSwgcC0+aW5kZXgpOwotICBHUFJfQVNTRVJUKG1kICE9IE5VTEwpOyAvKiBoYW5kbGVkIGluIHN0cmluZyBwYXJzaW5nICovCi0gIGdycGNfZXJyb3IgKmVyciA9IG9uX2hkcihleGVjX2N0eCwgcCwgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9SRUYobWQtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vfc3RyaW5nKHAsICZwLT52YWx1ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisgIGdycGNfbWRlbGVtIG1kID0gZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKCZwLT50YWJsZSwgcC0+aW5kZXgpOworICBHUFJfQVNTRVJUKCFHUlBDX01ESVNOVUxMKG1kKSk7IC8qIGhhbmRsZWQgaW4gc3RyaW5nIHBhcnNpbmcgKi8KKyAgZ3JwY19lcnJvciAqZXJyID0gb25faGRyKAorICAgICAgZXhlY19jdHgsIHAsCisgICAgICBncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhleGVjX2N0eCwgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoR1JQQ19NREtFWShtZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZV9zdHJpbmcoZXhlY19jdHgsIHAsICZwLT52YWx1ZSwgdHJ1ZSkpLAorICAgICAgMSk7CiAgIGlmIChlcnIgIT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm4gcGFyc2VfZXJyb3IoZXhlY19jdHgsIHAsIGN1ciwgZW5kLCBlcnIpOwogICByZXR1cm4gcGFyc2VfYmVnaW4oZXhlY19jdHgsIHAsIGN1ciwgZW5kKTsKIH0KQEAgLTgyOCwxMCArODY1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl9ocGFja19wYXJzZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICplbmQpIHsKLSAgZ3JwY19lcnJvciAqZXJyID0gb25faGRyKGV4ZWNfY3R4LCBwLCBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY3R4LCB0YWtlX3N0cmluZyhwLCAmcC0+a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZV9zdHJpbmcocCwgJnAtPnZhbHVlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKyAgZ3JwY19lcnJvciAqZXJyID0gb25faGRyKAorICAgICAgZXhlY19jdHgsIHAsCisgICAgICBncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhleGVjX2N0eCwgdGFrZV9zdHJpbmcoZXhlY19jdHgsIHAsICZwLT5rZXksIHRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZV9zdHJpbmcoZXhlY19jdHgsIHAsICZwLT52YWx1ZSwgdHJ1ZSkpLAorICAgICAgMSk7CiAgIGlmIChlcnIgIT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm4gcGFyc2VfZXJyb3IoZXhlY19jdHgsIHAsIGN1ciwgZW5kLCBlcnIpOwogICByZXR1cm4gcGFyc2VfYmVnaW4oZXhlY19jdHgsIHAsIGN1ciwgZW5kKTsKIH0KQEAgLTg4MSwxMiArOTE5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICplbmQpIHsKLSAgZ3JwY19tZGVsZW0gKm1kID0gZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKCZwLT50YWJsZSwgcC0+aW5kZXgpOwotICBHUFJfQVNTRVJUKG1kICE9IE5VTEwpOyAvKiBoYW5kbGVkIGluIHN0cmluZyBwYXJzaW5nICovCi0gIGdycGNfZXJyb3IgKmVyciA9IG9uX2hkcihleGVjX2N0eCwgcCwgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9SRUYobWQtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vfc3RyaW5nKHAsICZwLT52YWx1ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgIGdycGNfbWRlbGVtIG1kID0gZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKCZwLT50YWJsZSwgcC0+aW5kZXgpOworICBHUFJfQVNTRVJUKCFHUlBDX01ESVNOVUxMKG1kKSk7IC8qIGhhbmRsZWQgaW4gc3RyaW5nIHBhcnNpbmcgKi8KKyAgZ3JwY19lcnJvciAqZXJyID0gb25faGRyKAorICAgICAgZXhlY19jdHgsIHAsCisgICAgICBncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhleGVjX2N0eCwgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoR1JQQ19NREtFWShtZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZV9zdHJpbmcoZXhlY19jdHgsIHAsICZwLT52YWx1ZSwgZmFsc2UpKSwKKyAgICAgIDApOwogICBpZiAoZXJyICE9IEdSUENfRVJST1JfTk9ORSkgcmV0dXJuIHBhcnNlX2Vycm9yKGV4ZWNfY3R4LCBwLCBjdXIsIGVuZCwgZXJyKTsKICAgcmV0dXJuIHBhcnNlX2JlZ2luKGV4ZWNfY3R4LCBwLCBjdXIsIGVuZCk7CiB9CkBAIC04OTYsMTAgKzkzNSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZW5kKSB7Ci0gIGdycGNfZXJyb3IgKmVyciA9IG9uX2hkcihleGVjX2N0eCwgcCwgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2N0eCwgdGFrZV9zdHJpbmcocCwgJnAtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vfc3RyaW5nKHAsICZwLT52YWx1ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgIGdycGNfZXJyb3IgKmVyciA9IG9uX2hkcigKKyAgICAgIGV4ZWNfY3R4LCBwLAorICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoZXhlY19jdHgsIHRha2Vfc3RyaW5nKGV4ZWNfY3R4LCBwLCAmcC0+a2V5LCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vfc3RyaW5nKGV4ZWNfY3R4LCBwLCAmcC0+dmFsdWUsIGZhbHNlKSksCisgICAgICAwKTsKICAgaWYgKGVyciAhPSBHUlBDX0VSUk9SX05PTkUpIHJldHVybiBwYXJzZV9lcnJvcihleGVjX2N0eCwgcCwgY3VyLCBlbmQsIGVycik7CiAgIHJldHVybiBwYXJzZV9iZWdpbihleGVjX2N0eCwgcCwgY3VyLCBlbmQpOwogfQpAQCAtOTQ5LDEyICs5ODksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl9ocGFja19wYXJzZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVuZCkgewotICBncnBjX21kZWxlbSAqbWQgPSBncnBjX2NodHRwMl9ocHRibF9sb29rdXAoJnAtPnRhYmxlLCBwLT5pbmRleCk7Ci0gIEdQUl9BU1NFUlQobWQgIT0gTlVMTCk7IC8qIGhhbmRsZWQgaW4gc3RyaW5nIHBhcnNpbmcgKi8KLSAgZ3JwY19lcnJvciAqZXJyID0gb25faGRyKGV4ZWNfY3R4LCBwLCBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY3R4LCBHUlBDX01EU1RSX1JFRihtZC0+a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZV9zdHJpbmcocCwgJnAtPnZhbHVlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgZ3JwY19tZGVsZW0gbWQgPSBncnBjX2NodHRwMl9ocHRibF9sb29rdXAoJnAtPnRhYmxlLCBwLT5pbmRleCk7CisgIEdQUl9BU1NFUlQoIUdSUENfTURJU05VTEwobWQpKTsgLyogaGFuZGxlZCBpbiBzdHJpbmcgcGFyc2luZyAqLworICBncnBjX2Vycm9yICplcnIgPSBvbl9oZHIoCisgICAgICBleGVjX2N0eCwgcCwKKyAgICAgIGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKGV4ZWNfY3R4LCBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChHUlBDX01ES0VZKG1kKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlX3N0cmluZyhleGVjX2N0eCwgcCwgJnAtPnZhbHVlLCBmYWxzZSkpLAorICAgICAgMCk7CiAgIGlmIChlcnIgIT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm4gcGFyc2VfZXJyb3IoZXhlY19jdHgsIHAsIGN1ciwgZW5kLCBlcnIpOwogICByZXR1cm4gcGFyc2VfYmVnaW4oZXhlY19jdHgsIHAsIGN1ciwgZW5kKTsKIH0KQEAgLTk2NCwxMCArMTAwNSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqY3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZW5kKSB7Ci0gIGdycGNfZXJyb3IgKmVyciA9IG9uX2hkcihleGVjX2N0eCwgcCwgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2N0eCwgdGFrZV9zdHJpbmcocCwgJnAtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vfc3RyaW5nKHAsICZwLT52YWx1ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgIGdycGNfZXJyb3IgKmVyciA9IG9uX2hkcigKKyAgICAgIGV4ZWNfY3R4LCBwLAorICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoZXhlY19jdHgsIHRha2Vfc3RyaW5nKGV4ZWNfY3R4LCBwLCAmcC0+a2V5LCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vfc3RyaW5nKGV4ZWNfY3R4LCBwLCAmcC0+dmFsdWUsIGZhbHNlKSksCisgICAgICAwKTsKICAgaWYgKGVyciAhPSBHUlBDX0VSUk9SX05PTkUpIHJldHVybiBwYXJzZV9lcnJvcihleGVjX2N0eCwgcCwgY3VyLCBlbmQsIGVycik7CiAgIHJldHVybiBwYXJzZV9iZWdpbihleGVjX2N0eCwgcCwgY3VyLCBlbmQpOwogfQpAQCAtMTI2MSwxNCArMTMwMywxNSBAQAogc3RhdGljIHZvaWQgYXBwZW5kX2J5dGVzKGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9zdHJpbmcgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CiAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuOwotICBpZiAobGVuZ3RoICsgc3RyLT5sZW5ndGggPiBzdHItPmNhcGFjaXR5KSB7Ci0gICAgR1BSX0FTU0VSVChzdHItPmxlbmd0aCArIGxlbmd0aCA8PSBVSU5UMzJfTUFYKTsKLSAgICBzdHItPmNhcGFjaXR5ID0gKHVpbnQzMl90KShzdHItPmxlbmd0aCArIGxlbmd0aCk7Ci0gICAgc3RyLT5zdHIgPSBncHJfcmVhbGxvYyhzdHItPnN0ciwgc3RyLT5jYXBhY2l0eSk7CisgIGlmIChsZW5ndGggKyBzdHItPmRhdGEuY29waWVkLmxlbmd0aCA+IHN0ci0+ZGF0YS5jb3BpZWQuY2FwYWNpdHkpIHsKKyAgICBHUFJfQVNTRVJUKHN0ci0+ZGF0YS5jb3BpZWQubGVuZ3RoICsgbGVuZ3RoIDw9IFVJTlQzMl9NQVgpOworICAgIHN0ci0+ZGF0YS5jb3BpZWQuY2FwYWNpdHkgPSAodWludDMyX3QpKHN0ci0+ZGF0YS5jb3BpZWQubGVuZ3RoICsgbGVuZ3RoKTsKKyAgICBzdHItPmRhdGEuY29waWVkLnN0ciA9CisgICAgICAgIGdwcl9yZWFsbG9jKHN0ci0+ZGF0YS5jb3BpZWQuc3RyLCBzdHItPmRhdGEuY29waWVkLmNhcGFjaXR5KTsKICAgfQotICBtZW1jcHkoc3RyLT5zdHIgKyBzdHItPmxlbmd0aCwgZGF0YSwgbGVuZ3RoKTsKLSAgR1BSX0FTU0VSVChsZW5ndGggPD0gVUlOVDMyX01BWCAtIHN0ci0+bGVuZ3RoKTsKLSAgc3RyLT5sZW5ndGggKz0gKHVpbnQzMl90KWxlbmd0aDsKKyAgbWVtY3B5KHN0ci0+ZGF0YS5jb3BpZWQuc3RyICsgc3RyLT5kYXRhLmNvcGllZC5sZW5ndGgsIGRhdGEsIGxlbmd0aCk7CisgIEdQUl9BU1NFUlQobGVuZ3RoIDw9IFVJTlQzMl9NQVggLSBzdHItPmRhdGEuY29waWVkLmxlbmd0aCk7CisgIHN0ci0+ZGF0YS5jb3BpZWQubGVuZ3RoICs9ICh1aW50MzJfdClsZW5ndGg7CiB9CiAKIHN0YXRpYyBncnBjX2Vycm9yICphcHBlbmRfc3RyaW5nKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LApAQCAtMTM1MSwxMSArMTM5NCw5IEBACiAgICAgICBleGVjX2N0eCwgcCwgY3VyLCBlbmQsIEdSUENfRVJST1JfQ1JFQVRFKCJTaG91bGQgbmV2ZXIgcmVhY2ggaGVyZSIpKSk7CiB9CiAKLS8qIGFwcGVuZCBhIG51bGwgdGVybWluYXRvciB0byBhIHN0cmluZyAqLwogc3RhdGljIGdycGNfZXJyb3IgKmZpbmlzaF9zdHIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl9ocGFja19wYXJzZXIgKnAsIGNvbnN0IHVpbnQ4X3QgKmN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVuZCkgewotICB1aW50OF90IHRlcm1pbmF0b3IgPSAwOwogICB1aW50OF90IGRlY29kZWRbMl07CiAgIHVpbnQzMl90IGJpdHM7CiAgIGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9zdHJpbmcgKnN0ciA9IHAtPnBhcnNpbmcuc3RyOwpAQCAtMTM5Niw4ICsxNDM3LDYgQEAKICAgICAgIGFwcGVuZF9ieXRlcyhzdHIsIGRlY29kZWQsIDIpOwogICAgICAgYnJlYWs7CiAgIH0KLSAgYXBwZW5kX2J5dGVzKHN0ciwgJnRlcm1pbmF0b3IsIDEpOwotICBwLT5wYXJzaW5nLnN0ci0+bGVuZ3RoLS07IC8qIGRvbid0IGFjdHVhbGx5IGNvdW50IHRoZSBudWxsIHRlcm1pbmF0b3IgKi8KICAgcmV0dXJuIEdSUENfRVJST1JfTk9ORTsKIH0KIApAQCAtMTQ3Miw4ICsxNTExLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN1ciwgY29uc3QgdWludDhfdCAqZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJpbmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyX3N0cmluZyAqc3RyKSB7CisgIGlmICghcC0+aHVmZiAmJiBiaW5hcnkgPT0gTk9UX0JJTkFSWSAmJiAoZW5kIC0gY3VyKSA+PSAoaW50cHRyX3QpcC0+c3RybGVuICYmCisgICAgICBwLT5jdXJyZW50X3NsaWNlX3JlZmNvdW50ICE9IE5VTEwpIHsKKyAgICBzdHItPmNvcGllZCA9IGZhbHNlOworICAgIHN0ci0+ZGF0YS5yZWZlcmVuY2VkLnJlZmNvdW50ID0gcC0+Y3VycmVudF9zbGljZV9yZWZjb3VudDsKKyAgICBzdHItPmRhdGEucmVmZXJlbmNlZC5kYXRhLnJlZmNvdW50ZWQuYnl0ZXMgPSAodWludDhfdCAqKWN1cjsKKyAgICBzdHItPmRhdGEucmVmZXJlbmNlZC5kYXRhLnJlZmNvdW50ZWQubGVuZ3RoID0gcC0+c3RybGVuOworICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKHN0ci0+ZGF0YS5yZWZlcmVuY2VkKTsKKyAgICByZXR1cm4gcGFyc2VfbmV4dChleGVjX2N0eCwgcCwgY3VyICsgcC0+c3RybGVuLCBlbmQpOworICB9CiAgIHAtPnN0cmdvdCA9IDA7Ci0gIHN0ci0+bGVuZ3RoID0gMDsKKyAgc3RyLT5jb3BpZWQgPSB0cnVlOworICBzdHItPmRhdGEuY29waWVkLmxlbmd0aCA9IDA7CiAgIHAtPnBhcnNpbmcuc3RyID0gc3RyOwogICBwLT5odWZmX3N0YXRlID0gMDsKICAgcC0+YmluYXJ5ID0gYmluYXJ5OwpAQCAtMTQ5MCwyMSArMTUzOSwyMiBAQAogLyogY2hlY2sgaWYgYSBrZXkgcmVwcmVzZW50cyBhIGJpbmFyeSBoZWFkZXIgb3Igbm90ICovCiAKIHN0YXRpYyBib29sIGlzX2JpbmFyeV9saXRlcmFsX2hlYWRlcihncnBjX2NodHRwMl9ocGFja19wYXJzZXIgKnApIHsKLSAgcmV0dXJuIGdycGNfaXNfYmluYXJ5X2hlYWRlcihwLT5rZXkuc3RyLCBwLT5rZXkubGVuZ3RoKTsKKyAgcmV0dXJuIGdycGNfaXNfYmluYXJ5X2hlYWRlcigKKyAgICAgIHAtPmtleS5jb3BpZWQgPyBncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlcihwLT5rZXkuZGF0YS5jb3BpZWQuc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmtleS5kYXRhLmNvcGllZC5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIDogcC0+a2V5LmRhdGEucmVmZXJlbmNlZCk7CiB9CiAKIHN0YXRpYyBncnBjX2Vycm9yICppc19iaW5hcnlfaW5kZXhlZF9oZWFkZXIoZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICppcykgewotICBncnBjX21kZWxlbSAqZWxlbSA9IGdycGNfY2h0dHAyX2hwdGJsX2xvb2t1cCgmcC0+dGFibGUsIHAtPmluZGV4KTsKLSAgaWYgKCFlbGVtKSB7CisgIGdycGNfbWRlbGVtIGVsZW0gPSBncnBjX2NodHRwMl9ocHRibF9sb29rdXAoJnAtPnRhYmxlLCBwLT5pbmRleCk7CisgIGlmIChHUlBDX01ESVNOVUxMKGVsZW0pKSB7CiAgICAgcmV0dXJuIGdycGNfZXJyb3Jfc2V0X2ludCgKICAgICAgICAgZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKCJJbnZhbGlkIEhQQUNLIGluZGV4IHJlY2VpdmVkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9JTkRFWCwgKGludHB0cl90KXAtPmluZGV4KSwKICAgICAgICAgR1JQQ19FUlJPUl9JTlRfU0laRSwgKGludHB0cl90KXAtPnRhYmxlLm51bV9lbnRzKTsKICAgfQotICAqaXMgPSBncnBjX2lzX2JpbmFyeV9oZWFkZXIoCi0gICAgICAoY29uc3QgY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKGVsZW0tPmtleS0+c2xpY2UpLAotICAgICAgR1JQQ19TTElDRV9MRU5HVEgoZWxlbS0+a2V5LT5zbGljZSkpOworICAqaXMgPSBncnBjX2lzX2JpbmFyeV9oZWFkZXIoR1JQQ19NREtFWShlbGVtKSk7CiAgIHJldHVybiBHUlBDX0VSUk9SX05PTkU7CiB9CiAKQEAgLTE1MzksMTIgKzE1ODksMTQgQEAKICAgcC0+b25faGVhZGVyID0gTlVMTDsKICAgcC0+b25faGVhZGVyX3VzZXJfZGF0YSA9IE5VTEw7CiAgIHAtPnN0YXRlID0gcGFyc2VfYmVnaW47Ci0gIHAtPmtleS5zdHIgPSBOVUxMOwotICBwLT5rZXkuY2FwYWNpdHkgPSAwOwotICBwLT5rZXkubGVuZ3RoID0gMDsKLSAgcC0+dmFsdWUuc3RyID0gTlVMTDsKLSAgcC0+dmFsdWUuY2FwYWNpdHkgPSAwOwotICBwLT52YWx1ZS5sZW5ndGggPSAwOworICBwLT5rZXkuZGF0YS5yZWZlcmVuY2VkID0gZ3JwY19lbXB0eV9zbGljZSgpOworICBwLT5rZXkuZGF0YS5jb3BpZWQuc3RyID0gTlVMTDsKKyAgcC0+a2V5LmRhdGEuY29waWVkLmNhcGFjaXR5ID0gMDsKKyAgcC0+a2V5LmRhdGEuY29waWVkLmxlbmd0aCA9IDA7CisgIHAtPnZhbHVlLmRhdGEucmVmZXJlbmNlZCA9IGdycGNfZW1wdHlfc2xpY2UoKTsKKyAgcC0+dmFsdWUuZGF0YS5jb3BpZWQuc3RyID0gTlVMTDsKKyAgcC0+dmFsdWUuZGF0YS5jb3BpZWQuY2FwYWNpdHkgPSAwOworICBwLT52YWx1ZS5kYXRhLmNvcGllZC5sZW5ndGggPSAwOwogICBwLT5keW5hbWljX3RhYmxlX3VwZGF0ZV9hbGxvd2VkID0gMjsKICAgcC0+bGFzdF9lcnJvciA9IEdSUENfRVJST1JfTk9ORTsKICAgZ3JwY19jaHR0cDJfaHB0YmxfaW5pdChleGVjX2N0eCwgJnAtPnRhYmxlKTsKQEAgLTE1NTksMTkgKzE2MTEsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwKSB7CiAgIGdycGNfY2h0dHAyX2hwdGJsX2Rlc3Ryb3koZXhlY19jdHgsICZwLT50YWJsZSk7CiAgIEdSUENfRVJST1JfVU5SRUYocC0+bGFzdF9lcnJvcik7Ci0gIGdwcl9mcmVlKHAtPmtleS5zdHIpOwotICBncHJfZnJlZShwLT52YWx1ZS5zdHIpOworICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBwLT5rZXkuZGF0YS5yZWZlcmVuY2VkKTsKKyAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgcC0+dmFsdWUuZGF0YS5yZWZlcmVuY2VkKTsKKyAgZ3ByX2ZyZWUocC0+a2V5LmRhdGEuY29waWVkLnN0cik7CisgIGdwcl9mcmVlKHAtPnZhbHVlLmRhdGEuY29waWVkLnN0cik7CiB9CiAKIGdycGNfZXJyb3IgKmdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9wYXJzZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl9ocGFja19wYXJzZXIgKnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2Ugc2xpY2UpIHsKICAgLyogVE9ETyhjdGlsbGVyKTogbGltaXQgdGhlIGRpc3RhbmNlIG9mIGVuZCBmcm9tIGJlZywgYW5kIHBlcmZvcm0gbXVsdGlwbGUKICAgICAgc3RlcHMgaW4gdGhlIGV2ZW50IG9mIGEgbGFyZ2UgY2h1bmsgb2YgZGF0YSB0byBsaW1pdAogICAgICBzdGFjayBzcGFjZSB1c2FnZSB3aGVuIG5vIHRhaWwgY2FsbCBvcHRpbWl6YXRpb24gaXMKICAgICAgYXZhaWxhYmxlICovCi0gIHJldHVybiBwLT5zdGF0ZShleGVjX2N0eCwgcCwgYmVnLCBlbmQpOworICBwLT5jdXJyZW50X3NsaWNlX3JlZmNvdW50ID0gc2xpY2UucmVmY291bnQ7CisgIGdycGNfZXJyb3IgKmVycm9yID0gcC0+c3RhdGUoZXhlY19jdHgsIHAsIEdSUENfU0xJQ0VfU1RBUlRfUFRSKHNsaWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0VORF9QVFIoc2xpY2UpKTsKKyAgcC0+Y3VycmVudF9zbGljZV9yZWZjb3VudCA9IE5VTEw7CisgIHJldHVybiBlcnJvcjsKIH0KIAogdHlwZWRlZiB2b2lkICgqbWF5YmVfY29tcGxldGVfZnVuY190eXBlKShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTE1ODcsNyArMTY0NCw3IEBACiAgIGdycGNfY2h0dHAyX3RyYW5zcG9ydCAqdCA9IHMtPnQ7CiAgIGlmICghcy0+d3JpdGVfY2xvc2VkKSB7CiAgICAgZ3JwY19zbGljZV9idWZmZXJfYWRkKAotICAgICAgICAmdC0+cWJ1ZiwgZ3JwY19jaHR0cDJfcnN0X3N0cmVhbV9jcmVhdGUocy0+aWQsIEdSUENfQ0hUVFAyX05PX0VSUk9SLAorICAgICAgICAmdC0+cWJ1ZiwgZ3JwY19jaHR0cDJfcnN0X3N0cmVhbV9jcmVhdGUocy0+aWQsIEdSUENfSFRUUDJfTk9fRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+c3RhdHMub3V0Z29pbmcpKTsKICAgICBncnBjX2NodHRwMl9pbml0aWF0ZV93cml0ZShleGVjX2N0eCwgdCwgZmFsc2UsICJmb3JjZV9yc3Rfc3RyZWFtIik7CiAgICAgZ3JwY19jaHR0cDJfbWFya19zdHJlYW1fY2xvc2VkKGV4ZWNfY3R4LCB0LCBzLCB0cnVlLCB0cnVlLCBHUlBDX0VSUk9SX05PTkUpOwpAQCAtMTYwNSw4ICsxNjYyLDcgQEAKICAgaWYgKHMgIT0gTlVMTCkgewogICAgIHMtPnN0YXRzLmluY29taW5nLmhlYWRlcl9ieXRlcyArPSBHUlBDX1NMSUNFX0xFTkdUSChzbGljZSk7CiAgIH0KLSAgZ3JwY19lcnJvciAqZXJyb3IgPSBncnBjX2NodHRwMl9ocGFja19wYXJzZXJfcGFyc2UoCi0gICAgICBleGVjX2N0eCwgcGFyc2VyLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihzbGljZSksIEdSUENfU0xJQ0VfRU5EX1BUUihzbGljZSkpOworICBncnBjX2Vycm9yICplcnJvciA9IGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9wYXJzZShleGVjX2N0eCwgcGFyc2VyLCBzbGljZSk7CiAgIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICBHUFJfVElNRVJfRU5EKCJncnBjX2NodHRwMl9ocGFja19wYXJzZXJfcGFyc2UiLCAwKTsKICAgICByZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmggYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmgKaW5kZXggNTJjY2YxZS4uYTgxNzE4MyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3BhcnNlci5oCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19wYXJzZXIuaApAQCAtNDksMTQgKzQ5LDIwIEBACiAgICAgY29uc3QgdWludDhfdCAqZW5kKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBjaGFyICpzdHI7Ci0gIHVpbnQzMl90IGxlbmd0aDsKLSAgdWludDMyX3QgY2FwYWNpdHk7CisgIGJvb2wgY29waWVkOworICBzdHJ1Y3QgeworICAgIGdycGNfc2xpY2UgcmVmZXJlbmNlZDsKKyAgICBzdHJ1Y3QgeworICAgICAgY2hhciAqc3RyOworICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAgdWludDMyX3QgY2FwYWNpdHk7CisgICAgfSBjb3BpZWQ7CisgIH0gZGF0YTsKIH0gZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyX3N0cmluZzsKIAogc3RydWN0IGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlciB7CiAgIC8qIHVzZXIgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBlYWNoIGhlYWRlciBvdXRwdXQgKi8KLSAgdm9pZCAoKm9uX2hlYWRlcikoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwgZ3JwY19tZGVsZW0gKm1kKTsKKyAgdm9pZCAoKm9uX2hlYWRlcikoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwgZ3JwY19tZGVsZW0gbWQpOwogICB2b2lkICpvbl9oZWFkZXJfdXNlcl9kYXRhOwogCiAgIGdycGNfZXJyb3IgKmxhc3RfZXJyb3I7CkBAIC02Nyw2ICs3Myw4IEBACiAgIGNvbnN0IGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9zdGF0ZSAqbmV4dF9zdGF0ZTsKICAgLyogd2hhdCB0byBkbyBhZnRlciBza2lwcGluZyBwcmlvcml0aXphdGlvbiBkYXRhICovCiAgIGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9zdGF0ZSBhZnRlcl9wcmlvcml0aXphdGlvbjsKKyAgLyogdGhlIHJlZmNvdW50IG9mIHRoZSBzbGljZSB0aGF0IHdlJ3JlIGN1cnJlbnRseSBwYXJzaW5nICovCisgIGdycGNfc2xpY2VfcmVmY291bnQgKmN1cnJlbnRfc2xpY2VfcmVmY291bnQ7CiAgIC8qIHRoZSB2YWx1ZSB3ZSdyZSBjdXJyZW50bHkgcGFyc2luZyAqLwogICB1bmlvbiB7CiAgICAgdWludDMyX3QgKnZhbHVlOwpAQCAtMTA2LDExICsxMTQsOSBAQAogCiB2b2lkIGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9zZXRfaGFzX3ByaW9yaXR5KGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlciAqcCk7CiAKLS8qIHJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGVycm9yICovCiBncnBjX2Vycm9yICpncnBjX2NodHRwMl9ocGFja19wYXJzZXJfcGFyc2UoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyICpwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICplbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2Ugc2xpY2UpOwogCiAvKiB3cmFwcyBncnBjX2NodHRwMl9ocGFja19wYXJzZXJfcGFyc2UgdG8gcHJvdmlkZSBhIGZyYW1lIGxldmVsIHBhcnNlciBmb3IKICAgIHRoZSB0cmFuc3BvcnQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3RhYmxlLmMKaW5kZXggMjZkNDAzNi4uNjJkZDFiOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3RhYmxlLmMKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3RhYmxlLmMKQEAgLTE5MCw4ICsxOTAsMTEgQEAKICAgdGJsLT5lbnRzID0gZ3ByX21hbGxvYyhzaXplb2YoKnRibC0+ZW50cykgKiB0YmwtPmNhcF9lbnRyaWVzKTsKICAgbWVtc2V0KHRibC0+ZW50cywgMCwgc2l6ZW9mKCp0YmwtPmVudHMpICogdGJsLT5jYXBfZW50cmllcyk7CiAgIGZvciAoaSA9IDE7IGkgPD0gR1JQQ19DSFRUUDJfTEFTVF9TVEFUSUNfRU5UUlk7IGkrKykgewotICAgIHRibC0+c3RhdGljX2VudHNbaSAtIDFdID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKAotICAgICAgICBleGVjX2N0eCwgc3RhdGljX3RhYmxlW2ldLmtleSwgc3RhdGljX3RhYmxlW2ldLnZhbHVlKTsKKyAgICB0YmwtPnN0YXRpY19lbnRzW2kgLSAxXSA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgICBleGVjX2N0eCwKKyAgICAgICAgZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoc3RhdGljX3RhYmxlW2ldLmtleSkpLAorICAgICAgICBncnBjX3NsaWNlX2ludGVybigKKyAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKHN0YXRpY190YWJsZVtpXS52YWx1ZSkpKTsKICAgfQogfQogCkBAIC0yMDgsOCArMjExLDggQEAKICAgZ3ByX2ZyZWUodGJsLT5lbnRzKTsKIH0KIAotZ3JwY19tZGVsZW0gKmdycGNfY2h0dHAyX2hwdGJsX2xvb2t1cChjb25zdCBncnBjX2NodHRwMl9ocHRibCAqdGJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0YmxfaW5kZXgpIHsKK2dycGNfbWRlbGVtIGdycGNfY2h0dHAyX2hwdGJsX2xvb2t1cChjb25zdCBncnBjX2NodHRwMl9ocHRibCAqdGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRibF9pbmRleCkgewogICAvKiBTdGF0aWMgdGFibGUgY29tZXMgZmlyc3QsIGp1c3QgcmV0dXJuIGFuIGVudHJ5IGZyb20gaXQgKi8KICAgaWYgKHRibF9pbmRleCA8PSBHUlBDX0NIVFRQMl9MQVNUX1NUQVRJQ19FTlRSWSkgewogICAgIHJldHVybiB0YmwtPnN0YXRpY19lbnRzW3RibF9pbmRleCAtIDFdOwpAQCAtMjIyLDE0ICsyMjUsMTQgQEAKICAgICByZXR1cm4gdGJsLT5lbnRzW29mZnNldF07CiAgIH0KICAgLyogSW52YWxpZCBlbnRyeTogcmV0dXJuIGVycm9yICovCi0gIHJldHVybiBOVUxMOworICByZXR1cm4gR1JQQ19NRE5VTEw7CiB9CiAKIC8qIEV2aWN0IG9uZSBlbGVtZW50IGZyb20gdGhlIHRhYmxlICovCiBzdGF0aWMgdm9pZCBldmljdDEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2h0dHAyX2hwdGJsICp0YmwpIHsKLSAgZ3JwY19tZGVsZW0gKmZpcnN0X2VudCA9IHRibC0+ZW50c1t0YmwtPmZpcnN0X2VudF07Ci0gIHNpemVfdCBlbGVtX2J5dGVzID0gR1JQQ19TTElDRV9MRU5HVEgoZmlyc3RfZW50LT5rZXktPnNsaWNlKSArCi0gICAgICAgICAgICAgICAgICAgICAgR1JQQ19TTElDRV9MRU5HVEgoZmlyc3RfZW50LT52YWx1ZS0+c2xpY2UpICsKKyAgZ3JwY19tZGVsZW0gZmlyc3RfZW50ID0gdGJsLT5lbnRzW3RibC0+Zmlyc3RfZW50XTsKKyAgc2l6ZV90IGVsZW1fYnl0ZXMgPSBHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01ES0VZKGZpcnN0X2VudCkpICsKKyAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01EVkFMVUUoZmlyc3RfZW50KSkgKwogICAgICAgICAgICAgICAgICAgICAgIEdSUENfQ0hUVFAyX0hQQUNLX0VOVFJZX09WRVJIRUFEOwogICBHUFJfQVNTRVJUKGVsZW1fYnl0ZXMgPD0gdGJsLT5tZW1fdXNlZCk7CiAgIHRibC0+bWVtX3VzZWQgLT0gKHVpbnQzMl90KWVsZW1fYnl0ZXM7CkBAIC0yMzksNyArMjQyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVidWlsZF9lbnRzKGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIHVpbnQzMl90IG5ld19jYXApIHsKLSAgZ3JwY19tZGVsZW0gKiplbnRzID0gZ3ByX21hbGxvYyhzaXplb2YoKmVudHMpICogbmV3X2NhcCk7CisgIGdycGNfbWRlbGVtICplbnRzID0gZ3ByX21hbGxvYyhzaXplb2YoKmVudHMpICogbmV3X2NhcCk7CiAgIHVpbnQzMl90IGk7CiAKICAgZm9yIChpID0gMDsgaSA8IHRibC0+bnVtX2VudHM7IGkrKykgewpAQCAtMzAxLDEwICszMDQsMTAgQEAKIH0KIAogZ3JwY19lcnJvciAqZ3JwY19jaHR0cDJfaHB0YmxfYWRkKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIGdycGNfbWRlbGVtICptZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIGdycGNfbWRlbGVtIG1kKSB7CiAgIC8qIGRldGVybWluZSBob3cgbWFueSBieXRlcyBvZiBidWZmZXIgdGhpcyBlbnRyeSByZXByZXNlbnRzICovCi0gIHNpemVfdCBlbGVtX2J5dGVzID0gR1JQQ19TTElDRV9MRU5HVEgobWQtPmtleS0+c2xpY2UpICsKLSAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChtZC0+dmFsdWUtPnNsaWNlKSArCisgIHNpemVfdCBlbGVtX2J5dGVzID0gR1JQQ19TTElDRV9MRU5HVEgoR1JQQ19NREtFWShtZCkpICsKKyAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01EVkFMVUUobWQpKSArCiAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19DSFRUUDJfSFBBQ0tfRU5UUllfT1ZFUkhFQUQ7CiAKICAgaWYgKHRibC0+Y3VycmVudF90YWJsZV9ieXRlcyA+IHRibC0+bWF4X2J5dGVzKSB7CkBAIC0zNTIsMTYgKzM1NSwxNiBAQAogfQogCiBncnBjX2NodHRwMl9ocHRibF9maW5kX3Jlc3VsdCBncnBjX2NodHRwMl9ocHRibF9maW5kKAotICAgIGNvbnN0IGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIGdycGNfbWRlbGVtICptZCkgeworICAgIGNvbnN0IGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIGdycGNfbWRlbGVtIG1kKSB7CiAgIGdycGNfY2h0dHAyX2hwdGJsX2ZpbmRfcmVzdWx0IHIgPSB7MCwgMH07CiAgIHVpbnQzMl90IGk7CiAKICAgLyogU2VlIGlmIHRoZSBzdHJpbmcgaXMgaW4gdGhlIHN0YXRpYyB0YWJsZSAqLwogICBmb3IgKGkgPSAwOyBpIDwgR1JQQ19DSFRUUDJfTEFTVF9TVEFUSUNfRU5UUlk7IGkrKykgewotICAgIGdycGNfbWRlbGVtICplbnQgPSB0YmwtPnN0YXRpY19lbnRzW2ldOwotICAgIGlmIChtZC0+a2V5ICE9IGVudC0+a2V5KSBjb250aW51ZTsKKyAgICBncnBjX21kZWxlbSBlbnQgPSB0YmwtPnN0YXRpY19lbnRzW2ldOworICAgIGlmICghZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kKSwgR1JQQ19NREtFWShlbnQpKSkgY29udGludWU7CiAgICAgci5pbmRleCA9IGkgKyAxdTsKLSAgICByLmhhc192YWx1ZSA9IG1kLT52YWx1ZSA9PSBlbnQtPnZhbHVlOworICAgIHIuaGFzX3ZhbHVlID0gZ3JwY19zbGljZV9lcShHUlBDX01EVkFMVUUobWQpLCBHUlBDX01EVkFMVUUoZW50KSk7CiAgICAgaWYgKHIuaGFzX3ZhbHVlKSByZXR1cm4gcjsKICAgfQogCkBAIC0zNjksMTAgKzM3MiwxMCBAQAogICBmb3IgKGkgPSAwOyBpIDwgdGJsLT5udW1fZW50czsgaSsrKSB7CiAgICAgdWludDMyX3QgaWR4ID0KICAgICAgICAgKHVpbnQzMl90KSh0YmwtPm51bV9lbnRzIC0gaSArIEdSUENfQ0hUVFAyX0xBU1RfU1RBVElDX0VOVFJZKTsKLSAgICBncnBjX21kZWxlbSAqZW50ID0gdGJsLT5lbnRzWyh0YmwtPmZpcnN0X2VudCArIGkpICUgdGJsLT5jYXBfZW50cmllc107Ci0gICAgaWYgKG1kLT5rZXkgIT0gZW50LT5rZXkpIGNvbnRpbnVlOworICAgIGdycGNfbWRlbGVtIGVudCA9IHRibC0+ZW50c1sodGJsLT5maXJzdF9lbnQgKyBpKSAlIHRibC0+Y2FwX2VudHJpZXNdOworICAgIGlmICghZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kKSwgR1JQQ19NREtFWShlbnQpKSkgY29udGludWU7CiAgICAgci5pbmRleCA9IGlkeDsKLSAgICByLmhhc192YWx1ZSA9IG1kLT52YWx1ZSA9PSBlbnQtPnZhbHVlOworICAgIHIuaGFzX3ZhbHVlID0gZ3JwY19zbGljZV9lcShHUlBDX01EVkFMVUUobWQpLCBHUlBDX01EVkFMVUUoZW50KSk7CiAgICAgaWYgKHIuaGFzX3ZhbHVlKSByZXR1cm4gcjsKICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfdGFibGUuaCBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oCmluZGV4IDE0NDU3NGUuLjMyYTAzODAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oCkBAIC03OSw4ICs3OSw4IEBACiAgIC8qIGEgY2lyY3VsYXIgYnVmZmVyIG9mIGhlYWRlcnMgLSB0aGlzIGlzIHN0b3JlZCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIgdG8KICAgICAgd2hhdCBocGFjayBzcGVjaWZpZXMsIGluIG9yZGVyIHRvIHNpbXBsaWZ5IHRhYmxlIG1hbmFnZW1lbnQgYSBsaXR0bGUuLi4KICAgICAgbWVhbmluZyBsb29rdXBzIG5lZWQgdG8gU1VCVFJBQ1QgZnJvbSB0aGUgZW5kIHBvc2l0aW9uICovCi0gIGdycGNfbWRlbGVtICoqZW50czsKLSAgZ3JwY19tZGVsZW0gKnN0YXRpY19lbnRzW0dSUENfQ0hUVFAyX0xBU1RfU1RBVElDX0VOVFJZXTsKKyAgZ3JwY19tZGVsZW0gKmVudHM7CisgIGdycGNfbWRlbGVtIHN0YXRpY19lbnRzW0dSUENfQ0hUVFAyX0xBU1RfU1RBVElDX0VOVFJZXTsKIH0gZ3JwY19jaHR0cDJfaHB0Ymw7CiAKIC8qIGluaXRpYWxpemUgYSBocGFjayB0YWJsZSAqLwpAQCAtOTQsMTIgKzk0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJ5dGVzKTsKIAogLyogbG9va3VwIGEgdGFibGUgZW50cnkgYmFzZWQgb24gaXRzIGhwYWNrIGluZGV4ICovCi1ncnBjX21kZWxlbSAqZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKGNvbnN0IGdycGNfY2h0dHAyX2hwdGJsICp0YmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4KTsKK2dycGNfbWRlbGVtIGdycGNfY2h0dHAyX2hwdGJsX2xvb2t1cChjb25zdCBncnBjX2NodHRwMl9ocHRibCAqdGJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4KTsKIC8qIGFkZCBhIHRhYmxlIGVudHJ5IHRvIHRoZSBpbmRleCAqLwogZ3JwY19lcnJvciAqZ3JwY19jaHR0cDJfaHB0YmxfYWRkKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX2hwdGJsICp0YmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKm1kKSBHUlBDX01VU1RfVVNFX1JFU1VMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSBtZCkgR1JQQ19NVVNUX1VTRV9SRVNVTFQ7CiAvKiBGaW5kIGEga2V5L3ZhbHVlIHBhaXIgaW4gdGhlIHRhYmxlLi4uIHJldHVybnMgdGhlIGluZGV4IGluIHRoZSB0YWJsZSBvZiB0aGUKICAgIG1vc3Qgc2ltaWxhciBlbnRyeSwgb3IgMCBpZiB0aGUgdmFsdWUgd2FzIG5vdCBmb3VuZCAqLwogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTA3LDYgKzEwNyw2IEBACiAgIGludCBoYXNfdmFsdWU7CiB9IGdycGNfY2h0dHAyX2hwdGJsX2ZpbmRfcmVzdWx0OwogZ3JwY19jaHR0cDJfaHB0YmxfZmluZF9yZXN1bHQgZ3JwY19jaHR0cDJfaHB0YmxfZmluZCgKLSAgICBjb25zdCBncnBjX2NodHRwMl9ocHRibCAqdGJsLCBncnBjX21kZWxlbSAqbWQpOworICAgIGNvbnN0IGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIGdycGNfbWRlbGVtIG1kKTsKIAogI2VuZGlmIC8qIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfSFBBQ0tfVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmMgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYwppbmRleCA1ZDEwOTQ5Li5jOTFiMDE5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYworKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuYwpAQCAtNTcsNyArNTcsNyBAQAogfQogCiB2b2lkIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlcl9hZGQoCi0gICAgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyICpidWZmZXIsIGdycGNfbWRlbGVtICplbGVtKSB7CisgICAgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyICpidWZmZXIsIGdycGNfbWRlbGVtIGVsZW0pIHsKICAgR1BSX0FTU0VSVCghYnVmZmVyLT5wdWJsaXNoZWQpOwogICBpZiAoYnVmZmVyLT5jYXBhY2l0eSA9PSBidWZmZXItPmNvdW50KSB7CiAgICAgYnVmZmVyLT5jYXBhY2l0eSA9IEdQUl9NQVgoOCwgMiAqIGJ1ZmZlci0+Y2FwYWNpdHkpOwpAQCAtNjgsNiArNjgsMTkgQEAKICAgYnVmZmVyLT5zaXplICs9IEdSUENfTURFTEVNX0xFTkdUSChlbGVtKTsKIH0KIAordm9pZCBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfcmVwbGFjZV9vcl9hZGQoCisgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlciAqYnVmZmVyLAorICAgIGdycGNfbWRlbGVtIGVsZW0pIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZmZXItPmNvdW50OyBpKyspIHsKKyAgICBpZiAoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKGJ1ZmZlci0+ZWxlbXNbaV0ubWQpLCBHUlBDX01ES0VZKGVsZW0pKSkgeworICAgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIGJ1ZmZlci0+ZWxlbXNbaV0ubWQpOworICAgICAgYnVmZmVyLT5lbGVtc1tpXS5tZCA9IGVsZW07CisgICAgICByZXR1cm47CisgICAgfQorICB9CisgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlcl9hZGQoYnVmZmVyLCBlbGVtKTsKK30KKwogdm9pZCBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfc2V0X2RlYWRsaW5lKAogICAgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlciAqYnVmZmVyLCBncHJfdGltZXNwZWMgZGVhZGxpbmUpIHsKICAgR1BSX0FTU0VSVCghYnVmZmVyLT5wdWJsaXNoZWQpOwpAQCAtNzUsMjEgKzg4LDIwIEBACiB9CiAKIHZvaWQgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX3B1Ymxpc2goCi0gICAgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyICpidWZmZXIsIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoKSB7CisgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlciAqYnVmZmVyLAorICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoKSB7CiAgIEdQUl9BU1NFUlQoIWJ1ZmZlci0+cHVibGlzaGVkKTsKICAgYnVmZmVyLT5wdWJsaXNoZWQgPSAxOwogICBpZiAoYnVmZmVyLT5jb3VudCA+IDApIHsKICAgICBzaXplX3QgaTsKLSAgICBmb3IgKGkgPSAxOyBpIDwgYnVmZmVyLT5jb3VudDsgaSsrKSB7Ci0gICAgICBidWZmZXItPmVsZW1zW2ldLnByZXYgPSAmYnVmZmVyLT5lbGVtc1tpIC0gMV07CisgICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+Y291bnQ7IGkrKykgeworICAgICAgLyogVE9ETyhjdGlsbGVyKTogZG8gc29tZXRoaW5nIGJldHRlciBoZXJlICovCisgICAgICBpZiAoIUdSUENfTE9HX0lGX0VSUk9SKCJncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfcHVibGlzaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua190YWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jdHgsIGJhdGNoLCAmYnVmZmVyLT5lbGVtc1tpXSkpKSB7CisgICAgICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBidWZmZXItPmVsZW1zW2ldLm1kKTsKKyAgICAgIH0KICAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+Y291bnQgLSAxOyBpKyspIHsKLSAgICAgIGJ1ZmZlci0+ZWxlbXNbaV0ubmV4dCA9ICZidWZmZXItPmVsZW1zW2kgKyAxXTsKLSAgICB9Ci0gICAgYnVmZmVyLT5lbGVtc1swXS5wcmV2ID0gTlVMTDsKLSAgICBidWZmZXItPmVsZW1zW2J1ZmZlci0+Y291bnQgLSAxXS5uZXh0ID0gTlVMTDsKLSAgICBiYXRjaC0+bGlzdC5oZWFkID0gJmJ1ZmZlci0+ZWxlbXNbMF07Ci0gICAgYmF0Y2gtPmxpc3QudGFpbCA9ICZidWZmZXItPmVsZW1zW2J1ZmZlci0+Y291bnQgLSAxXTsKICAgfSBlbHNlIHsKICAgICBiYXRjaC0+bGlzdC5oZWFkID0gYmF0Y2gtPmxpc3QudGFpbCA9IE5VTEw7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5oIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgKaW5kZXggN2EwYzRkYS4uMWVhYzZmYyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgKKysrIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgKQEAgLTUxLDEwICs1MSwxNCBAQAogdm9pZCBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfZGVzdHJveSgKICAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyICpidWZmZXIpOwogdm9pZCBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfcHVibGlzaCgKLSAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXIgKmJ1ZmZlciwgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gpOworICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXIgKmJ1ZmZlciwKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCk7CiAKIHZvaWQgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX2FkZCgKLSAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXIgKmJ1ZmZlciwgZ3JwY19tZGVsZW0gKmVsZW0pOworICAgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlciAqYnVmZmVyLCBncnBjX21kZWxlbSBlbGVtKTsKK3ZvaWQgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX3JlcGxhY2Vfb3JfYWRkKAorICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXIgKmJ1ZmZlciwKKyAgICBncnBjX21kZWxlbSBlbGVtKTsKIHZvaWQgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX3NldF9kZWFkbGluZSgKICAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXIgKmJ1ZmZlciwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2ludGVybmFsLmggYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaAppbmRleCBlYTdiZWI0Li5lZTVlZGM5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaAorKysgYi9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaApAQCAtNjE4LDggKzYxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RyZWFtX2lkLCBpbnQ2NF90IHZhbDEsIGludDY0X3QgdmFsMik7CiAKIHZvaWQgZ3JwY19jaHR0cDJfZmFrZV9zdGF0dXMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2h0dHAyX3RyYW5zcG9ydCAqdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfc3RyZWFtICpzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLCBncnBjX3NsaWNlICpkZXRhaWxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfc3RyZWFtICpzdHJlYW0sIGdycGNfZXJyb3IgKmVycm9yKTsKIHZvaWQgZ3JwY19jaHR0cDJfbWFya19zdHJlYW1fY2xvc2VkKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfdHJhbnNwb3J0ICp0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaHR0cDJfc3RyZWFtICpzLCBpbnQgY2xvc2VfcmVhZHMsCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3BhcnNpbmcuYwppbmRleCA0ZmI1ZGM3Li5mNThjZDY5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvcGFyc2luZy5jCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMKQEAgLTM5LDEwICszOSwxMSBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3RyaW5nX3V0aWwuaD4KIAotI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvcHJvZmlsaW5nL3RpbWVycy5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmgiCiAKIHN0YXRpYyBncnBjX2Vycm9yICppbml0X2ZyYW1lX3BhcnNlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTIwMCw3ICsyMDEsNyBAQAogICAgICAgICByZXR1cm4gZXJyOwogICAgICAgfQogICAgICAgaWYgKHQtPmluY29taW5nX2ZyYW1lX3NpemUgPT0gMCkgewotICAgICAgICBlcnIgPSBwYXJzZV9mcmFtZV9zbGljZShleGVjX2N0eCwgdCwgZ3ByX2VtcHR5X3NsaWNlKCksIDEpOworICAgICAgICBlcnIgPSBwYXJzZV9mcmFtZV9zbGljZShleGVjX2N0eCwgdCwgZ3JwY19lbXB0eV9zbGljZSgpLCAxKTsKICAgICAgICAgaWYgKGVyciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICB9CkBAIC0zMzUsNyArMzM2LDcgQEAKICAgcmV0dXJuIEdSUENfRVJST1JfTk9ORTsKIH0KIAotc3RhdGljIHZvaWQgc2tpcF9oZWFkZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnRwLCBncnBjX21kZWxlbSAqbWQpIHsKK3N0YXRpYyB2b2lkIHNraXBfaGVhZGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICp0cCwgZ3JwY19tZGVsZW0gbWQpIHsKICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIG1kKTsKIH0KIApAQCAtNDMyLDcgKzQzMyw3IEBACiAgICAgfQogICAgIGdycGNfc2xpY2VfYnVmZmVyX2FkZCgKICAgICAgICAgJnQtPnFidWYsIGdycGNfY2h0dHAyX3JzdF9zdHJlYW1fY3JlYXRlKHQtPmluY29taW5nX3N0cmVhbV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfQ0hUVFAyX1BST1RPQ09MX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19IVFRQMl9QUk9UT0NPTF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5zdGF0cy5vdXRnb2luZykpOwogICAgIHJldHVybiBpbml0X3NraXBfZnJhbWVfcGFyc2VyKGV4ZWNfY3R4LCB0LCAwKTsKICAgfSBlbHNlIHsKQEAgLTQ0Myw3ICs0NDQsNyBAQAogc3RhdGljIHZvaWQgZnJlZV90aW1lb3V0KHZvaWQgKnApIHsgZ3ByX2ZyZWUocCk7IH0KIAogc3RhdGljIHZvaWQgb25faW5pdGlhbF9oZWFkZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnRwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKm1kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSBtZCkgewogICBncnBjX2NodHRwMl90cmFuc3BvcnQgKnQgPSB0cDsKICAgZ3JwY19jaHR0cDJfc3RyZWFtICpzID0gdC0+aW5jb21pbmdfc3RyZWFtOwogCkBAIC00NTEsMzIgKzQ1Miw0MiBAQAogCiAgIEdQUl9BU1NFUlQocyAhPSBOVUxMKTsKIAotICBHUlBDX0NIVFRQMl9JRl9UUkFDSU5HKGdwcl9sb2coCi0gICAgICBHUFJfSU5GTywgIkhUVFA6JWQ6SERSOiVzOiAlczogJXMiLCBzLT5pZCwgdC0+aXNfY2xpZW50ID8gIkNMSSIgOiAiU1ZSIiwKLSAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPmtleSksIGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPnZhbHVlKSkpOworICBpZiAoZ3JwY19odHRwX3RyYWNlKSB7CisgICAgY2hhciAqa2V5ID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhHUlBDX01ES0VZKG1kKSk7CisgICAgY2hhciAqdmFsdWUgPQorICAgICAgICBncnBjX2R1bXBfc2xpY2UoR1JQQ19NRFZBTFVFKG1kKSwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpOworICAgIGdwcl9sb2coR1BSX0lORk8sICJIVFRQOiVkOkhEUjolczogJXM6ICVzIiwgcy0+aWQsCisgICAgICAgICAgICB0LT5pc19jbGllbnQgPyAiQ0xJIiA6ICJTVlIiLCBrZXksIHZhbHVlKTsKKyAgICBncHJfZnJlZShrZXkpOworICAgIGdwcl9mcmVlKHZhbHVlKTsKKyAgfQogCi0gIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfR1JQQ19TVEFUVVMgJiYgbWQgIT0gR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMCkgeworICBpZiAoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kKSwgR1JQQ19NRFNUUl9HUlBDX1NUQVRVUykgJiYKKyAgICAgICFncnBjX21kZWxlbV9lcShtZCwgR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMCkpIHsKICAgICAvKiBUT0RPKGN0aWxsZXIpOiBjaGVjayBmb3IgYSBzdGF0dXMgbGlrZSAiIDAiICovCiAgICAgcy0+c2Vlbl9lcnJvciA9IHRydWU7CiAgIH0KIAotICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX0dSUENfVElNRU9VVCkgeworICBpZiAoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kKSwgR1JQQ19NRFNUUl9HUlBDX1RJTUVPVVQpKSB7CiAgICAgZ3ByX3RpbWVzcGVjICpjYWNoZWRfdGltZW91dCA9IGdycGNfbWRlbGVtX2dldF91c2VyX2RhdGEobWQsIGZyZWVfdGltZW91dCk7Ci0gICAgaWYgKCFjYWNoZWRfdGltZW91dCkgeworICAgIGdwcl90aW1lc3BlYyB0aW1lb3V0OworICAgIGlmIChjYWNoZWRfdGltZW91dCA9PSBOVUxMKSB7CiAgICAgICAvKiBub3QgYWxyZWFkeSBwYXJzZWQ6IHBhcnNlIGl0IG5vdywgYW5kIHN0b3JlIHRoZSByZXN1bHQgYXdheSAqLwogICAgICAgY2FjaGVkX3RpbWVvdXQgPSBncHJfbWFsbG9jKHNpemVvZihncHJfdGltZXNwZWMpKTsKLSAgICAgIGlmICghZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dChncnBjX21kc3RyX2FzX2Nfc3RyaW5nKG1kLT52YWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkX3RpbWVvdXQpKSB7Ci0gICAgICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiSWdub3JpbmcgYmFkIHRpbWVvdXQgdmFsdWUgJyVzJyIsCi0gICAgICAgICAgICAgICAgZ3JwY19tZHN0cl9hc19jX3N0cmluZyhtZC0+dmFsdWUpKTsKKyAgICAgIGlmICghZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dChHUlBDX01EVkFMVUUobWQpLCBjYWNoZWRfdGltZW91dCkpIHsKKyAgICAgICAgY2hhciAqdmFsID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhHUlBDX01EVkFMVUUobWQpKTsKKyAgICAgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJJZ25vcmluZyBiYWQgdGltZW91dCB2YWx1ZSAnJXMnIiwgdmFsKTsKKyAgICAgICAgZ3ByX2ZyZWUodmFsKTsKICAgICAgICAgKmNhY2hlZF90aW1lb3V0ID0gZ3ByX2luZl9mdXR1cmUoR1BSX1RJTUVTUEFOKTsKICAgICAgIH0KLSAgICAgIGNhY2hlZF90aW1lb3V0ID0KLSAgICAgICAgICBncnBjX21kZWxlbV9zZXRfdXNlcl9kYXRhKG1kLCBmcmVlX3RpbWVvdXQsIGNhY2hlZF90aW1lb3V0KTsKKyAgICAgIHRpbWVvdXQgPSAqY2FjaGVkX3RpbWVvdXQ7CisgICAgICBncnBjX21kZWxlbV9zZXRfdXNlcl9kYXRhKG1kLCBmcmVlX3RpbWVvdXQsIGNhY2hlZF90aW1lb3V0KTsKKyAgICB9IGVsc2UgeworICAgICAgdGltZW91dCA9ICpjYWNoZWRfdGltZW91dDsKICAgICB9CiAgICAgZ3JwY19jaHR0cDJfaW5jb21pbmdfbWV0YWRhdGFfYnVmZmVyX3NldF9kZWFkbGluZSgKICAgICAgICAgJnMtPm1ldGFkYXRhX2J1ZmZlclswXSwKLSAgICAgICAgZ3ByX3RpbWVfYWRkKGdwcl9ub3coR1BSX0NMT0NLX01PTk9UT05JQyksICpjYWNoZWRfdGltZW91dCkpOworICAgICAgICBncHJfdGltZV9hZGQoZ3ByX25vdyhHUFJfQ0xPQ0tfTU9OT1RPTklDKSwgdGltZW91dCkpOwogICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBtZCk7CiAgIH0gZWxzZSB7CiAgICAgY29uc3Qgc2l6ZV90IG5ld19zaXplID0gcy0+bWV0YWRhdGFfYnVmZmVyWzBdLnNpemUgKyBHUlBDX01ERUxFTV9MRU5HVEgobWQpOwpAQCAtNTA1LDcgKzUxNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIG9uX3RyYWlsaW5nX2hlYWRlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKm1kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gbWQpIHsKICAgZ3JwY19jaHR0cDJfdHJhbnNwb3J0ICp0ID0gdHA7CiAgIGdycGNfY2h0dHAyX3N0cmVhbSAqcyA9IHQtPmluY29taW5nX3N0cmVhbTsKIApAQCAtNTEzLDExICs1MjQsMTggQEAKIAogICBHUFJfQVNTRVJUKHMgIT0gTlVMTCk7CiAKLSAgR1JQQ19DSFRUUDJfSUZfVFJBQ0lORyhncHJfbG9nKAotICAgICAgR1BSX0lORk8sICJIVFRQOiVkOlRSTDolczogJXM6ICVzIiwgcy0+aWQsIHQtPmlzX2NsaWVudCA/ICJDTEkiIDogIlNWUiIsCi0gICAgICBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKG1kLT5rZXkpLCBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKG1kLT52YWx1ZSkpKTsKKyAgaWYgKGdycGNfaHR0cF90cmFjZSkgeworICAgIGNoYXIgKmtleSA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoR1JQQ19NREtFWShtZCkpOworICAgIGNoYXIgKnZhbHVlID0KKyAgICAgICAgZ3JwY19kdW1wX3NsaWNlKEdSUENfTURWQUxVRShtZCksIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKKyAgICBncHJfbG9nKEdQUl9JTkZPLCAiSFRUUDolZDpUUkw6JXM6ICVzOiAlcyIsIHMtPmlkLAorICAgICAgICAgICAgdC0+aXNfY2xpZW50ID8gIkNMSSIgOiAiU1ZSIiwga2V5LCB2YWx1ZSk7CisgICAgZ3ByX2ZyZWUoa2V5KTsKKyAgICBncHJfZnJlZSh2YWx1ZSk7CisgIH0KIAotICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX0dSUENfU1RBVFVTICYmIG1kICE9IEdSUENfTURFTEVNX0dSUENfU1RBVFVTXzApIHsKKyAgaWYgKGdycGNfc2xpY2VfZXEoR1JQQ19NREtFWShtZCksIEdSUENfTURTVFJfR1JQQ19TVEFUVVMpICYmCisgICAgICAhZ3JwY19tZGVsZW1fZXEobWQsIEdSUENfTURFTEVNX0dSUENfU1RBVFVTXzApKSB7CiAgICAgLyogVE9ETyhjdGlsbGVyKTogY2hlY2sgZm9yIGEgc3RhdHVzIGxpa2UgIiAwIiAqLwogICAgIHMtPnNlZW5fZXJyb3IgPSB0cnVlOwogICB9CkBAIC03MzMsMTQgKzc1MSwxMyBAQAogICAgIGlmIChncnBjX2h0dHBfdHJhY2UpIHsKICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycik7CiAgICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIiVzIiwgbXNnKTsKLSAgICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcobXNnKTsKICAgICB9CiAgICAgZ3JwY19jaHR0cDJfcGFyc2luZ19iZWNvbWVfc2tpcF9wYXJzZXIoZXhlY19jdHgsIHQpOwogICAgIGlmIChzKSB7CiAgICAgICBzLT5mb3JjZWRfY2xvc2VfZXJyb3IgPSBlcnI7CiAgICAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoCiAgICAgICAgICAgJnQtPnFidWYsIGdycGNfY2h0dHAyX3JzdF9zdHJlYW1fY3JlYXRlKHQtPmluY29taW5nX3N0cmVhbV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19DSFRUUDJfUFJPVE9DT0xfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfSFRUUDJfUFJPVE9DT0xfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5zdGF0cy5vdXRnb2luZykpOwogICAgIH0gZWxzZSB7CiAgICAgICBHUlBDX0VSUk9SX1VOUkVGKGVycik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvd3JpdGluZy5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3dyaXRpbmcuYwppbmRleCBlZjIwMTBhLi4xNDhlMzg0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvd3JpdGluZy5jCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC93cml0aW5nLmMKQEAgLTM3LDkgKzM3LDkgQEAKIAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KIAotI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvcHJvZmlsaW5nL3RpbWVycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCiAKIHN0YXRpYyB2b2lkIGFkZF90b193cml0ZV9saXN0KGdycGNfY2h0dHAyX3dyaXRlX2NiICoqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2h0dHAyX3dyaXRlX2NiICpjYikgewpAQCAtNzQsNiArNzQsMTUgQEAKICAgR1JQQ19FUlJPUl9VTlJFRihlcnJvcik7CiB9CiAKK3N0YXRpYyBib29sIHN0cmVhbV9yZWZfaWZfbm90X2Rlc3Ryb3llZChncHJfcmVmY291bnQgKnIpIHsKKyAgZ3ByX2F0bSBjb3VudDsKKyAgZG8geworICAgIGNvdW50ID0gZ3ByX2F0bV9hY3FfbG9hZCgmci0+Y291bnQpOworICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7CisgIH0gd2hpbGUgKCFncHJfYXRtX3JlbF9jYXMoJnItPmNvdW50LCBjb3VudCwgY291bnQgKyAxKSk7CisgIHJldHVybiB0cnVlOworfQorCiBib29sIGdycGNfY2h0dHAyX2JlZ2luX3dyaXRlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NodHRwMl90cmFuc3BvcnQgKnQpIHsKICAgZ3JwY19jaHR0cDJfc3RyZWFtICpzOwpAQCAtMTAxLDggKzExMCwxMSBAQAogCiAgIGlmICh0LT5vdXRnb2luZ193aW5kb3cgPiAwKSB7CiAgICAgd2hpbGUgKGdycGNfY2h0dHAyX2xpc3RfcG9wX3N0YWxsZWRfYnlfdHJhbnNwb3J0KHQsICZzKSkgewotICAgICAgZ3JwY19jaHR0cDJfYmVjb21lX3dyaXRhYmxlKGV4ZWNfY3R4LCB0LCBzLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNwb3J0LnJlYWRfZmxvd19jb250cm9sIik7CisgICAgICBpZiAoIXQtPmNsb3NlZCAmJiBncnBjX2NodHRwMl9saXN0X2FkZF93cml0YWJsZV9zdHJlYW0odCwgcykgJiYKKyAgICAgICAgICBzdHJlYW1fcmVmX2lmX25vdF9kZXN0cm95ZWQoJnMtPnJlZmNvdW50LT5yZWZzKSkgeworICAgICAgICBncnBjX2NodHRwMl9pbml0aWF0ZV93cml0ZShleGVjX2N0eCwgdCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQucmVhZF9mbG93X2NvbnRyb2wiKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtMTY0LDcgKzE3Niw3IEBACiAgICAgICAgICAgICBzLT5zZW50X3RyYWlsaW5nX21ldGFkYXRhID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghdC0+aXNfY2xpZW50ICYmICFzLT5yZWFkX2Nsb3NlZCkgewogICAgICAgICAgICAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoJnQtPm91dGJ1ZiwgZ3JwY19jaHR0cDJfcnN0X3N0cmVhbV9jcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aWQsIEdSUENfQ0hUVFAyX05PX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmlkLCBHUlBDX0hUVFAyX05PX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5zdGF0cy5vdXRnb2luZykpOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KQEAgLTE5Nyw3ICsyMDksNyBAQAogICAgICAgICBpZiAoIXQtPmlzX2NsaWVudCAmJiAhcy0+cmVhZF9jbG9zZWQpIHsKICAgICAgICAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGQoCiAgICAgICAgICAgICAgICZ0LT5vdXRidWYsIGdycGNfY2h0dHAyX3JzdF9zdHJlYW1fY3JlYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aWQsIEdSUENfQ0hUVFAyX05PX0VSUk9SLCAmcy0+c3RhdHMub3V0Z29pbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmlkLCBHUlBDX0hUVFAyX05PX0VSUk9SLCAmcy0+c3RhdHMub3V0Z29pbmcpKTsKICAgICAgICAgfQogICAgICAgICBub3dfd3JpdGluZyA9IHRydWU7CiAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2Nyb25ldC90cmFuc3BvcnQvY3JvbmV0X3RyYW5zcG9ydC5jIGIvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jcm9uZXQvdHJhbnNwb3J0L2Nyb25ldF90cmFuc3BvcnQuYwppbmRleCA2ZjU4MTYzLi4xMjc1YTRiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2Nyb25ldC90cmFuc3BvcnQvY3JvbmV0X3RyYW5zcG9ydC5jCisrKyBiL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY3JvbmV0L3RyYW5zcG9ydC9jcm9uZXRfdHJhbnNwb3J0LmMKQEAgLTQ0LDYgKzQ0LDggQEAKICNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW5jb21pbmdfbWV0YWRhdGEuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnQuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvaW9tZ3IvZXhlY19jdHguaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5oIgpAQCAtNDM3LDkgKzQzOSwxMSBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhlYWRlcnMtPmNvdW50OyBpKyspIHsKICAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfYWRkKAogICAgICAgICAmcy0+c3RhdGUucnMuaW5pdGlhbF9tZXRhZGF0YSwKLSAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICAgICAgJmV4ZWNfY3R4LCBncnBjX21kc3RyX2Zyb21fc3RyaW5nKGhlYWRlcnMtPmhlYWRlcnNbaV0ua2V5KSwKLSAgICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoaGVhZGVycy0+aGVhZGVyc1tpXS52YWx1ZSkpKTsKKyAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAmZXhlY19jdHgsIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy0+aGVhZGVyc1tpXS5rZXkpKSwKKyAgICAgICAgICAgIGdycGNfc2xpY2VfaW50ZXJuKAorICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGhlYWRlcnMtPmhlYWRlcnNbaV0udmFsdWUpKSkpOwogICB9CiAgIHMtPnN0YXRlLnN0YXRlX2NhbGxiYWNrX3JlY2VpdmVkW09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQV0gPSB0cnVlOwogICBpZiAoIShzLT5zdGF0ZS5zdGF0ZV9vcF9kb25lW09QX0NBTkNFTF9FUlJPUl0gfHwKQEAgLTUzNCw5ICs1MzgsMTEgQEAKICAgICAgICAgICAgICAgIHRyYWlsZXJzLT5oZWFkZXJzW2ldLnZhbHVlKTsKICAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfYWRkKAogICAgICAgICAmcy0+c3RhdGUucnMudHJhaWxpbmdfbWV0YWRhdGEsCi0gICAgICAgIGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncygKLSAgICAgICAgICAgICZleGVjX2N0eCwgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyh0cmFpbGVycy0+aGVhZGVyc1tpXS5rZXkpLAotICAgICAgICAgICAgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyh0cmFpbGVycy0+aGVhZGVyc1tpXS52YWx1ZSkpKTsKKyAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAmZXhlY19jdHgsIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxlcnMtPmhlYWRlcnNbaV0ua2V5KSksCisgICAgICAgICAgICBncnBjX3NsaWNlX2ludGVybigKKyAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyh0cmFpbGVycy0+aGVhZGVyc1tpXS52YWx1ZSkpKSk7CiAgICAgcy0+c3RhdGUucnMudHJhaWxpbmdfbWV0YWRhdGFfdmFsaWQgPSB0cnVlOwogICAgIGlmICgwID09IHN0cmNtcCh0cmFpbGVycy0+aGVhZGVyc1tpXS5rZXksICJncnBjLXN0YXR1cyIpICYmCiAgICAgICAgIDAgIT0gc3RyY21wKHRyYWlsZXJzLT5oZWFkZXJzW2ldLnZhbHVlLCAiMCIpKSB7CkBAIC02MTYsMzMgKzYyMiw0MSBAQAogICBjdXJyID0gaGVhZDsKICAgc2l6ZV90IG51bV9oZWFkZXJzID0gMDsKICAgd2hpbGUgKG51bV9oZWFkZXJzIDwgbnVtX2hlYWRlcnNfYXZhaWxhYmxlKSB7Ci0gICAgZ3JwY19tZGVsZW0gKm1kZWxlbSA9IGN1cnItPm1kOworICAgIGdycGNfbWRlbGVtIG1kZWxlbSA9IGN1cnItPm1kOwogICAgIGN1cnIgPSBjdXJyLT5uZXh0OwotICAgIGNvbnN0IGNoYXIgKmtleSA9IGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWRlbGVtLT5rZXkpOwotICAgIGNvbnN0IGNoYXIgKnZhbHVlID0gZ3JwY19tZHN0cl9hc19jX3N0cmluZyhtZGVsZW0tPnZhbHVlKTsKLSAgICBpZiAobWRlbGVtLT5rZXkgPT0gR1JQQ19NRFNUUl9TQ0hFTUUgfHwKLSAgICAgICAgbWRlbGVtLT5rZXkgPT0gR1JQQ19NRFNUUl9BVVRIT1JJVFkpIHsKKyAgICBjaGFyICprZXkgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKEdSUENfTURLRVkobWRlbGVtKSk7CisgICAgY2hhciAqdmFsdWUgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKEdSUENfTURWQUxVRShtZGVsZW0pKTsKKyAgICBpZiAoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kZWxlbSksIEdSUENfTURTVFJfU0NIRU1FKSB8fAorICAgICAgICBncnBjX3NsaWNlX2VxKEdSUENfTURLRVkobWRlbGVtKSwgR1JQQ19NRFNUUl9BVVRIT1JJVFkpKSB7CiAgICAgICAvKiBDcm9uZXQgcG9wdWxhdGVzIHRoZXNlIGZpZWxkcyBvbiBpdHMgb3duICovCisgICAgICBncHJfZnJlZShrZXkpOworICAgICAgZ3ByX2ZyZWUodmFsdWUpOwogICAgICAgY29udGludWU7CiAgICAgfQotICAgIGlmIChtZGVsZW0tPmtleSA9PSBHUlBDX01EU1RSX01FVEhPRCkgewotICAgICAgaWYgKG1kZWxlbS0+dmFsdWUgPT0gR1JQQ19NRFNUUl9QVVQpIHsKKyAgICBpZiAoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kZWxlbSksIEdSUENfTURTVFJfTUVUSE9EKSkgeworICAgICAgaWYgKGdycGNfc2xpY2VfZXEoR1JQQ19NRFZBTFVFKG1kZWxlbSksIEdSUENfTURTVFJfUFVUKSkgewogICAgICAgICAqbWV0aG9kID0gIlBVVCI7CiAgICAgICB9IGVsc2UgewogICAgICAgICAvKiBQT1NUIG1ldGhvZCBpbiBkZWZhdWx0Ki8KICAgICAgICAgKm1ldGhvZCA9ICJQT1NUIjsKICAgICAgIH0KKyAgICAgIGdwcl9mcmVlKGtleSk7CisgICAgICBncHJfZnJlZSh2YWx1ZSk7CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgaWYgKG1kZWxlbS0+a2V5ID09IEdSUENfTURTVFJfUEFUSCkgeworICAgIGlmIChncnBjX3NsaWNlX2VxKEdSUENfTURLRVkobWRlbGVtKSwgR1JQQ19NRFNUUl9QQVRIKSkgewogICAgICAgLyogQ3JlYXRlIFVSTCBieSBhcHBlbmRpbmcgOnBhdGggdmFsdWUgdG8gdGhlIGhvc3RuYW1lICovCiAgICAgICBncHJfYXNwcmludGYocHBfdXJsLCAiaHR0cHM6Ly8lcyVzIiwgaG9zdCwgdmFsdWUpOworICAgICAgZ3ByX2ZyZWUoa2V5KTsKKyAgICAgIGdwcl9mcmVlKHZhbHVlKTsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBDUk9ORVRfTE9HKEdQUl9ERUJVRywgImhlYWRlciAlcyA9ICVzIiwga2V5LCB2YWx1ZSk7CiAgICAgaGVhZGVyc1tudW1faGVhZGVyc10ua2V5ID0ga2V5OwogICAgIGhlYWRlcnNbbnVtX2hlYWRlcnNdLnZhbHVlID0gdmFsdWU7CiAgICAgbnVtX2hlYWRlcnMrKzsKKyAgICBncHJfZnJlZShrZXkpOworICAgIGdwcl9mcmVlKHZhbHVlKTsKICAgICBpZiAoY3VyciA9PSBOVUxMKSB7CiAgICAgICBicmVhazsKICAgICB9CkBAIC02NjIsNyArNjc2LDcgQEAKIAogc3RhdGljIGJvb2wgaGVhZGVyX2hhc19hdXRob3JpdHkoZ3JwY19saW5rZWRfbWRlbGVtICpoZWFkKSB7CiAgIHdoaWxlIChoZWFkICE9IE5VTEwpIHsKLSAgICBpZiAoaGVhZC0+bWQtPmtleSA9PSBHUlBDX01EU1RSX0FVVEhPUklUWSkgeworICAgIGlmIChncnBjX3NsaWNlX2VxKEdSUENfTURLRVkoaGVhZC0+bWQpLCBHUlBDX01EU1RSX0FVVEhPUklUWSkpIHsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBoZWFkID0gaGVhZC0+bmV4dDsKQEAgLTg0Myw2ICs4NTcsMTIgQEAKICAgICBzLT5oZWFkZXJfYXJyYXkuY2FwYWNpdHkgPSBzLT5oZWFkZXJfYXJyYXkuY291bnQ7CiAgICAgQ1JPTkVUX0xPRyhHUFJfREVCVUcsICJiaWRpcmVjdGlvbmFsX3N0cmVhbV9zdGFydCglcCwgJXMpIiwgcy0+Y2JzLCB1cmwpOwogICAgIGJpZGlyZWN0aW9uYWxfc3RyZWFtX3N0YXJ0KHMtPmNicywgdXJsLCAwLCBtZXRob2QsICZzLT5oZWFkZXJfYXJyYXksIGZhbHNlKTsKKyAgICB1bnNpZ25lZCBpbnQgaGVhZGVyX2luZGV4OworICAgIGZvciAoaGVhZGVyX2luZGV4ID0gMDsgaGVhZGVyX2luZGV4IDwgcy0+aGVhZGVyX2FycmF5LmNvdW50OworICAgICAgICAgaGVhZGVyX2luZGV4KyspIHsKKyAgICAgIGdwcl9mcmVlKCh2b2lkICopcy0+aGVhZGVyX2FycmF5LmhlYWRlcnNbaGVhZGVyX2luZGV4XS5rZXkpOworICAgICAgZ3ByX2ZyZWUoKHZvaWQgKilzLT5oZWFkZXJfYXJyYXkuaGVhZGVyc1toZWFkZXJfaW5kZXhdLnZhbHVlKTsKKyAgICB9CiAgICAgc3RyZWFtX3N0YXRlLT5zdGF0ZV9vcF9kb25lW09QX1NFTkRfSU5JVElBTF9NRVRBREFUQV0gPSB0cnVlOwogICAgIHJlc3VsdCA9IEFDVElPTl9UQUtFTl9XSVRIX0NBTExCQUNLOwogICB9IGVsc2UgaWYgKHN0cmVhbV9vcC0+cmVjdl9pbml0aWFsX21ldGFkYXRhICYmCkBAIC04NTcsNyArODc3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX05PTkUpOwogICAgIH0gZWxzZSB7CiAgICAgICBncnBjX2NodHRwMl9pbmNvbWluZ19tZXRhZGF0YV9idWZmZXJfcHVibGlzaCgKLSAgICAgICAgICAmb2FzLT5zLT5zdGF0ZS5ycy5pbml0aWFsX21ldGFkYXRhLCBzdHJlYW1fb3AtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSk7CisgICAgICAgICAgZXhlY19jdHgsICZvYXMtPnMtPnN0YXRlLnJzLmluaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgc3RyZWFtX29wLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOwogICAgICAgZ3JwY19jbG9zdXJlX3NjaGVkKGV4ZWNfY3R4LCBzdHJlYW1fb3AtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YV9yZWFkeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX05PTkUpOwogICAgIH0KQEAgLTEwMTMsNyArMTAzNCw3IEBACiAgICAgQ1JPTkVUX0xPRyhHUFJfREVCVUcsICJydW5uaW5nOiAlcCAgT1BfUkVDVl9UUkFJTElOR19NRVRBREFUQSIsIG9hcyk7CiAgICAgaWYgKG9hcy0+cy0+c3RhdGUucnMudHJhaWxpbmdfbWV0YWRhdGFfdmFsaWQpIHsKICAgICAgIGdycGNfY2h0dHAyX2luY29taW5nX21ldGFkYXRhX2J1ZmZlcl9wdWJsaXNoKAotICAgICAgICAgICZvYXMtPnMtPnN0YXRlLnJzLnRyYWlsaW5nX21ldGFkYXRhLAorICAgICAgICAgIGV4ZWNfY3R4LCAmb2FzLT5zLT5zdGF0ZS5ycy50cmFpbGluZ19tZXRhZGF0YSwKICAgICAgICAgICBzdHJlYW1fb3AtPnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGEpOwogICAgICAgc3RyZWFtX3N0YXRlLT5ycy50cmFpbGluZ19tZXRhZGF0YV92YWxpZCA9IGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9jaGFubmVsL2NoYW5uZWxfc3RhY2suYyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2NoYW5uZWxfc3RhY2suYwppbmRleCA4ZjA4YjQyLi5lYzk3M2Q0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX3N0YWNrLmMKKysrIGIvc3JjL2NvcmUvbGliL2NoYW5uZWwvY2hhbm5lbF9zdGFjay5jCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jaGFubmVsX3N0YWNrICpjaGFubmVsX3N0YWNrLAogICAgIGludCBpbml0aWFsX3JlZnMsIGdycGNfaW9tZ3JfY2JfZnVuYyBkZXN0cm95LCB2b2lkICpkZXN0cm95X2FyZywKICAgICBncnBjX2NhbGxfY29udGV4dF9lbGVtZW50ICpjb250ZXh0LCBjb25zdCB2b2lkICp0cmFuc3BvcnRfc2VydmVyX2RhdGEsCi0gICAgZ3JwY19tZHN0ciAqcGF0aCwgZ3ByX3RpbWVzcGVjIHN0YXJ0X3RpbWUsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwKKyAgICBncnBjX3NsaWNlIHBhdGgsIGdwcl90aW1lc3BlYyBzdGFydF90aW1lLCBncHJfdGltZXNwZWMgZGVhZGxpbmUsCiAgICAgZ3JwY19jYWxsX3N0YWNrICpjYWxsX3N0YWNrKSB7CiAgIGdycGNfY2hhbm5lbF9lbGVtZW50ICpjaGFubmVsX2VsZW1zID0gQ0hBTk5FTF9FTEVNU19GUk9NX1NUQUNLKGNoYW5uZWxfc3RhY2spOwogICBncnBjX2NhbGxfZWxlbWVudF9hcmdzIGFyZ3M7CkBAIC0yODgsNDEgKzI4OCwxMCBAQAogICAgICAgc2l6ZW9mKGdycGNfY2FsbF9zdGFjaykpKTsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveV9vcChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqb3AsIGdycGNfZXJyb3IgKmVycm9yKSB7Ci0gIGdwcl9mcmVlKG9wKTsKLX0KLQotdm9pZCBncnBjX2NhbGxfZWxlbWVudF9zZW5kX2NhbmNlbChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0pIHsKLSAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCA9IGdwcl9tYWxsb2Moc2l6ZW9mKCpvcCkpOwotICBtZW1zZXQob3AsIDAsIHNpemVvZigqb3ApKTsKLSAgb3AtPmNhbmNlbF9lcnJvciA9IEdSUENfRVJST1JfQ0FOQ0VMTEVEOwotICBvcC0+b25fY29tcGxldGUgPQotICAgICAgZ3JwY19jbG9zdXJlX2NyZWF0ZShkZXN0cm95X29wLCBvcCwgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7Ci0gIGVsZW0tPmZpbHRlci0+c3RhcnRfdHJhbnNwb3J0X3N0cmVhbV9vcChleGVjX2N0eCwgZWxlbSwgb3ApOwotfQotCi12b2lkIGdycGNfY2FsbF9lbGVtZW50X3NlbmRfY2FuY2VsX3dpdGhfbWVzc2FnZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2FsbF9lbGVtZW50ICplbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlICpvcHRpb25hbF9tZXNzYWdlKSB7Ci0gIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqb3AgPSBncHJfbWFsbG9jKHNpemVvZigqb3ApKTsKLSAgbWVtc2V0KG9wLCAwLCBzaXplb2YoKm9wKSk7Ci0gIG9wLT5vbl9jb21wbGV0ZSA9Ci0gICAgICBncnBjX2Nsb3N1cmVfY3JlYXRlKGRlc3Ryb3lfb3AsIG9wLCBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKLSAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX2FkZF9jYW5jZWxsYXRpb25fd2l0aF9tZXNzYWdlKGV4ZWNfY3R4LCBvcCwgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfbWVzc2FnZSk7Ci0gIGVsZW0tPmZpbHRlci0+c3RhcnRfdHJhbnNwb3J0X3N0cmVhbV9vcChleGVjX2N0eCwgZWxlbSwgb3ApOwotfQotCi12b2lkIGdycGNfY2FsbF9lbGVtZW50X3NlbmRfY2xvc2Vfd2l0aF9tZXNzYWdlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgKm9wdGlvbmFsX21lc3NhZ2UpIHsKLSAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCA9IGdwcl9tYWxsb2Moc2l6ZW9mKCpvcCkpOwotICBtZW1zZXQob3AsIDAsIHNpemVvZigqb3ApKTsKLSAgb3AtPm9uX2NvbXBsZXRlID0KLSAgICAgIGdycGNfY2xvc3VyZV9jcmVhdGUoZGVzdHJveV9vcCwgb3AsIGdycGNfc2NoZWR1bGVfb25fZXhlY19jdHgpOwotICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3BfYWRkX2Nsb3NlKGV4ZWNfY3R4LCBvcCwgc3RhdHVzLCBvcHRpb25hbF9tZXNzYWdlKTsKK3ZvaWQgZ3JwY19jYWxsX2VsZW1lbnRfc2lnbmFsX2Vycm9yKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcikgeworICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AgKm9wID0gZ3JwY19tYWtlX3RyYW5zcG9ydF9zdHJlYW1fb3AoTlVMTCk7CisgIG9wLT5jYW5jZWxfZXJyb3IgPSBlcnJvcjsKICAgZWxlbS0+ZmlsdGVyLT5zdGFydF90cmFuc3BvcnRfc3RyZWFtX29wKGV4ZWNfY3R4LCBlbGVtLCBvcCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX3N0YWNrLmggYi9zcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX3N0YWNrLmgKaW5kZXggZDlkM2E4NS4uMWNmMDdkNCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2NoYW5uZWwvY2hhbm5lbF9zdGFjay5oCisrKyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2NoYW5uZWxfc3RhY2suaApAQCAtODEsNyArODEsNyBAQAogICBncnBjX2NhbGxfc3RhY2sgKmNhbGxfc3RhY2s7CiAgIGNvbnN0IHZvaWQgKnNlcnZlcl90cmFuc3BvcnRfZGF0YTsKICAgZ3JwY19jYWxsX2NvbnRleHRfZWxlbWVudCAqY29udGV4dDsKLSAgZ3JwY19tZHN0ciAqcGF0aDsKKyAgZ3JwY19zbGljZSBwYXRoOwogICBncHJfdGltZXNwZWMgc3RhcnRfdGltZTsKICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lOwogfSBncnBjX2NhbGxfZWxlbWVudF9hcmdzOwpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2hhbm5lbF9zdGFjayAqY2hhbm5lbF9zdGFjaywKICAgICBpbnQgaW5pdGlhbF9yZWZzLCBncnBjX2lvbWdyX2NiX2Z1bmMgZGVzdHJveSwgdm9pZCAqZGVzdHJveV9hcmcsCiAgICAgZ3JwY19jYWxsX2NvbnRleHRfZWxlbWVudCAqY29udGV4dCwgY29uc3Qgdm9pZCAqdHJhbnNwb3J0X3NlcnZlcl9kYXRhLAotICAgIGdycGNfbWRzdHIgKnBhdGgsIGdwcl90aW1lc3BlYyBzdGFydF90aW1lLCBncHJfdGltZXNwZWMgZGVhZGxpbmUsCisgICAgZ3JwY19zbGljZSBwYXRoLCBncHJfdGltZXNwZWMgc3RhcnRfdGltZSwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLAogICAgIGdycGNfY2FsbF9zdGFjayAqY2FsbF9zdGFjayk7CiAvKiBTZXQgYSBwb2xsc2V0IG9yIGEgcG9sbHNldF9zZXQgZm9yIGEgY2FsbCBzdGFjazogbXVzdCBvY2N1ciBiZWZvcmUgdGhlIGZpcnN0CiAgKiBvcCBpcyBzdGFydGVkICovCkBAIC0yOTksMTggKzI5OSw5IEBACiB2b2lkIGdycGNfY2FsbF9sb2dfb3AoY2hhciAqZmlsZSwgaW50IGxpbmUsIGdwcl9sb2dfc2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0sIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqb3ApOwogCi12b2lkIGdycGNfY2FsbF9lbGVtZW50X3NlbmRfY2FuY2VsKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGxfZWxlbWVudCAqY3VyX2VsZW0pOwotCi12b2lkIGdycGNfY2FsbF9lbGVtZW50X3NlbmRfY2FuY2VsX3dpdGhfbWVzc2FnZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2FsbF9lbGVtZW50ICpjdXJfZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZSAqb3B0aW9uYWxfbWVzc2FnZSk7Ci0KLXZvaWQgZ3JwY19jYWxsX2VsZW1lbnRfc2VuZF9jbG9zZV93aXRoX21lc3NhZ2UoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2FsbF9lbGVtZW50ICpjdXJfZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgKm9wdGlvbmFsX21lc3NhZ2UpOwordm9pZCBncnBjX2NhbGxfZWxlbWVudF9zaWduYWxfZXJyb3IoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGxfZWxlbWVudCAqY3VyX2VsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcik7CiAKIGV4dGVybiBpbnQgZ3JwY190cmFjZV9jaGFubmVsOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvY2hhbm5lbC9jb21wcmVzc19maWx0ZXIuYyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2NvbXByZXNzX2ZpbHRlci5jCmluZGV4IDMzN2MxOTQuLmM4NjBkNjAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9jaGFubmVsL2NvbXByZXNzX2ZpbHRlci5jCisrKyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2NvbXByZXNzX2ZpbHRlci5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2NvbXByZXNzaW9uL21lc3NhZ2VfY29tcHJlc3MuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvcHJvZmlsaW5nL3RpbWVycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXBwb3J0L3N0cmluZy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiCiAKQEAgLTgwLDM5ICs4MSw2IEBACiAgIHVpbnQzMl90IHN1cHBvcnRlZF9jb21wcmVzc2lvbl9hbGdvcml0aG1zOwogfSBjaGFubmVsX2RhdGE7CiAKLS8qKiBGb3IgZWFjaCBcYSBtZCBlbGVtZW50IGZyb20gdGhlIGluY29taW5nIG1ldGFkYXRhLCBmaWx0ZXIgb3V0IHRoZSBlbnRyeSBmb3IKLSAqICJncnBjLWVuY29kaW5nIiwgdXNpbmcgaXRzIHZhbHVlIHRvIHBvcHVsYXRlIHRoZSBjYWxsIGRhdGEncwotICogY29tcHJlc3Npb25fYWxnb3JpdGhtIGZpZWxkLiAqLwotc3RhdGljIGdycGNfbWRlbGVtICpjb21wcmVzc2lvbl9tZF9maWx0ZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsIGdycGNfbWRlbGVtICptZCkgewotICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSA9IHVzZXJfZGF0YTsKLSAgY2FsbF9kYXRhICpjYWxsZCA9IGVsZW0tPmNhbGxfZGF0YTsKLSAgY2hhbm5lbF9kYXRhICpjaGFubmVsZCA9IGVsZW0tPmNoYW5uZWxfZGF0YTsKLQotICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX0dSUENfSU5URVJOQUxfRU5DT0RJTkdfUkVRVUVTVCkgewotICAgIGNvbnN0IGNoYXIgKm1kX2Nfc3RyID0gZ3JwY19tZHN0cl9hc19jX3N0cmluZyhtZC0+dmFsdWUpOwotICAgIGlmICghZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2UobWRfY19zdHIsIHN0cmxlbihtZF9jX3N0ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobSkpIHsKLSAgICAgIGdwcl9sb2coR1BSX0VSUk9SLAotICAgICAgICAgICAgICAiSW52YWxpZCBjb21wcmVzc2lvbiBhbGdvcml0aG06ICclcycgKHVua25vd24pLiBJZ25vcmluZy4iLAotICAgICAgICAgICAgICBtZF9jX3N0cik7Ci0gICAgICBjYWxsZC0+Y29tcHJlc3Npb25fYWxnb3JpdGhtID0gR1JQQ19DT01QUkVTU19OT05FOwotICAgIH0KLSAgICBpZiAoIUdQUl9CSVRHRVQoY2hhbm5lbGQtPmVuYWJsZWRfYWxnb3JpdGhtc19iaXRzZXQsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxkLT5jb21wcmVzc2lvbl9hbGdvcml0aG0pKSB7Ci0gICAgICBncHJfbG9nKEdQUl9FUlJPUiwKLSAgICAgICAgICAgICAgIkludmFsaWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnJXMnIChwcmV2aW91c2x5IGRpc2FibGVkKS4gIgotICAgICAgICAgICAgICAiSWdub3JpbmcuIiwKLSAgICAgICAgICAgICAgbWRfY19zdHIpOwotICAgICAgY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobSA9IEdSUENfQ09NUFJFU1NfTk9ORTsKLSAgICB9Ci0gICAgY2FsbGQtPmhhc19jb21wcmVzc2lvbl9hbGdvcml0aG0gPSAxOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIG1kOwotfQotCiBzdGF0aWMgaW50IHNraXBfY29tcHJlc3Npb24oZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0sIHVpbnQzMl90IGZsYWdzKSB7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CiAgIGNoYW5uZWxfZGF0YSAqY2hhbm5lbGQgPSBlbGVtLT5jaGFubmVsX2RhdGE7CkBAIC0xMzEsMzIgKzk5LDY1IEBACiB9CiAKIC8qKiBGaWx0ZXIgaW5pdGlhbCBtZXRhZGF0YSAqLwotc3RhdGljIHZvaWQgcHJvY2Vzc19zZW5kX2luaXRpYWxfbWV0YWRhdGEoCitzdGF0aWMgZ3JwY19lcnJvciAqcHJvY2Vzc19zZW5kX2luaXRpYWxfbWV0YWRhdGEoCisgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbF9lbGVtZW50ICplbGVtLAorICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmluaXRpYWxfbWV0YWRhdGEpIEdSUENfTVVTVF9VU0VfUkVTVUxUOworc3RhdGljIGdycGNfZXJyb3IgKnByb2Nlc3Nfc2VuZF9pbml0aWFsX21ldGFkYXRhKAogICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKICAgICBncnBjX21ldGFkYXRhX2JhdGNoICppbml0aWFsX21ldGFkYXRhKSB7CisgIGdycGNfZXJyb3IgKmVycm9yOwogICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwogICBjaGFubmVsX2RhdGEgKmNoYW5uZWxkID0gZWxlbS0+Y2hhbm5lbF9kYXRhOwogICAvKiBQYXJzZSBpbmNvbWluZyByZXF1ZXN0IGZvciBjb21wcmVzc2lvbi4gSWYgYW55LCBpdCdsbCBiZSBhdmFpbGFibGUKICAgICogYXQgY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobSAqLwotICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcihleGVjX2N0eCwgaW5pdGlhbF9tZXRhZGF0YSwgY29tcHJlc3Npb25fbWRfZmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtKTsKLSAgaWYgKCFjYWxsZC0+aGFzX2NvbXByZXNzaW9uX2FsZ29yaXRobSkgeworICBpZiAoaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLmdycGNfaW50ZXJuYWxfZW5jb2RpbmdfcmVxdWVzdCAhPSBOVUxMKSB7CisgICAgZ3JwY19tZGVsZW0gbWQgPQorICAgICAgICBpbml0aWFsX21ldGFkYXRhLT5pZHgubmFtZWQuZ3JwY19pbnRlcm5hbF9lbmNvZGluZ19yZXF1ZXN0LT5tZDsKKyAgICBpZiAoIWdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlKEdSUENfTURWQUxVRShtZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobSkpIHsKKyAgICAgIGNoYXIgKnZhbCA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoR1JQQ19NRFZBTFVFKG1kKSk7CisgICAgICBncHJfbG9nKEdQUl9FUlJPUiwKKyAgICAgICAgICAgICAgIkludmFsaWQgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnJXMnICh1bmtub3duKS4gSWdub3JpbmcuIiwgdmFsKTsKKyAgICAgIGdwcl9mcmVlKHZhbCk7CisgICAgICBjYWxsZC0+Y29tcHJlc3Npb25fYWxnb3JpdGhtID0gR1JQQ19DT01QUkVTU19OT05FOworICAgIH0KKyAgICBpZiAoIUdQUl9CSVRHRVQoY2hhbm5lbGQtPmVuYWJsZWRfYWxnb3JpdGhtc19iaXRzZXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxkLT5jb21wcmVzc2lvbl9hbGdvcml0aG0pKSB7CisgICAgICBjaGFyICp2YWwgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKEdSUENfTURWQUxVRShtZCkpOworICAgICAgZ3ByX2xvZyhHUFJfRVJST1IsCisgICAgICAgICAgICAgICJJbnZhbGlkIGNvbXByZXNzaW9uIGFsZ29yaXRobTogJyVzJyAocHJldmlvdXNseSBkaXNhYmxlZCkuICIKKyAgICAgICAgICAgICAgIklnbm9yaW5nLiIsCisgICAgICAgICAgICAgIHZhbCk7CisgICAgICBncHJfZnJlZSh2YWwpOworICAgICAgY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobSA9IEdSUENfQ09NUFJFU1NfTk9ORTsKKyAgICB9CisgICAgY2FsbGQtPmhhc19jb21wcmVzc2lvbl9hbGdvcml0aG0gPSAxOworCisgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9yZW1vdmUoCisgICAgICAgIGV4ZWNfY3R4LCBpbml0aWFsX21ldGFkYXRhLAorICAgICAgICBpbml0aWFsX21ldGFkYXRhLT5pZHgubmFtZWQuZ3JwY19pbnRlcm5hbF9lbmNvZGluZ19yZXF1ZXN0KTsKKyAgfSBlbHNlIHsKICAgICAvKiBJZiBubyBhbGdvcml0aG0gd2FzIGZvdW5kIGluIHRoZSBtZXRhZGF0YSBhbmQgd2UgYXJlbid0CiAgICAgICogZXhjZXB0aW9uYWxseSBza2lwcGluZyBjb21wcmVzc2lvbiwgZmFsbCBiYWNrIHRvIHRoZSBjaGFubmVsCiAgICAgICogZGVmYXVsdCAqLwogICAgIGNhbGxkLT5jb21wcmVzc2lvbl9hbGdvcml0aG0gPSBjaGFubmVsZC0+ZGVmYXVsdF9jb21wcmVzc2lvbl9hbGdvcml0aG07CiAgICAgY2FsbGQtPmhhc19jb21wcmVzc2lvbl9hbGdvcml0aG0gPSAxOyAvKiBHUFJfVFJVRSAqLwogICB9CisKICAgLyogaGludCBjb21wcmVzc2lvbiBhbGdvcml0aG0gKi8KLSAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbCgKLSAgICAgIGluaXRpYWxfbWV0YWRhdGEsICZjYWxsZC0+Y29tcHJlc3Npb25fYWxnb3JpdGhtX3N0b3JhZ2UsCisgIGVycm9yID0gZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbCgKKyAgICAgIGV4ZWNfY3R4LCBpbml0aWFsX21ldGFkYXRhLCAmY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobV9zdG9yYWdlLAogICAgICAgZ3JwY19jb21wcmVzc2lvbl9lbmNvZGluZ19tZGVsZW0oY2FsbGQtPmNvbXByZXNzaW9uX2FsZ29yaXRobSkpOwogCisgIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKwogICAvKiBjb252ZXkgc3VwcG9ydGVkIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgKi8KLSAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbChpbml0aWFsX21ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWxsZC0+YWNjZXB0X2VuY29kaW5nX3N0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fQUNDRVBUX0VOQ09ESU5HX0ZPUl9BTEdPUklUSE1TKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsZC0+c3VwcG9ydGVkX2NvbXByZXNzaW9uX2FsZ29yaXRobXMpKTsKKyAgZXJyb3IgPSBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKAorICAgICAgZXhlY19jdHgsIGluaXRpYWxfbWV0YWRhdGEsICZjYWxsZC0+YWNjZXB0X2VuY29kaW5nX3N0b3JhZ2UsCisgICAgICBHUlBDX01ERUxFTV9BQ0NFUFRfRU5DT0RJTkdfRk9SX0FMR09SSVRITVMoCisgICAgICAgICAgY2hhbm5lbGQtPnN1cHBvcnRlZF9jb21wcmVzc2lvbl9hbGdvcml0aG1zKSk7CisKKyAgcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBjb250aW51ZV9zZW5kX21lc3NhZ2UoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCkBAIC0yNDcsNyArMjQ4LDEyIEBACiAgIEdQUl9USU1FUl9CRUdJTigiY29tcHJlc3Nfc3RhcnRfdHJhbnNwb3J0X3N0cmVhbV9vcCIsIDApOwogCiAgIGlmIChvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhKSB7Ci0gICAgcHJvY2Vzc19zZW5kX2luaXRpYWxfbWV0YWRhdGEoZXhlY19jdHgsIGVsZW0sIG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEpOworICAgIGdycGNfZXJyb3IgKmVycm9yID0gcHJvY2Vzc19zZW5kX2luaXRpYWxfbWV0YWRhdGEoCisgICAgICAgIGV4ZWNfY3R4LCBlbGVtLCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhKTsKKyAgICBpZiAoZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3BfZmluaXNoX3dpdGhfZmFpbHVyZShleGVjX2N0eCwgb3AsIGVycm9yKTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAgIH0KICAgaWYgKG9wLT5zZW5kX21lc3NhZ2UgIT0gTlVMTCAmJgogICAgICAgIXNraXBfY29tcHJlc3Npb24oZWxlbSwgb3AtPnNlbmRfbWVzc2FnZS0+ZmxhZ3MpKSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvY2hhbm5lbC9kZWFkbGluZV9maWx0ZXIuYyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2RlYWRsaW5lX2ZpbHRlci5jCmluZGV4IGE0NWE0ZDQuLmJjOWEyZWYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9jaGFubmVsL2RlYWRsaW5lX2ZpbHRlci5jCisrKyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2RlYWRsaW5lX2ZpbHRlci5jCkBAIC01NiwxMCArNTYsMTEgQEAKICAgZGVhZGxpbmVfc3RhdGUtPnRpbWVyX3BlbmRpbmcgPSBmYWxzZTsKICAgZ3ByX211X3VubG9jaygmZGVhZGxpbmVfc3RhdGUtPnRpbWVyX211KTsKICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfQ0FOQ0VMTEVEKSB7Ci0gICAgZ3JwY19zbGljZSBtc2cgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiRGVhZGxpbmUgRXhjZWVkZWQiKTsKLSAgICBncnBjX2NhbGxfZWxlbWVudF9zZW5kX2NhbmNlbF93aXRoX21lc3NhZ2UoCi0gICAgICAgIGV4ZWNfY3R4LCBlbGVtLCBHUlBDX1NUQVRVU19ERUFETElORV9FWENFRURFRCwgJm1zZyk7Ci0gICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgbXNnKTsKKyAgICBncnBjX2NhbGxfZWxlbWVudF9zaWduYWxfZXJyb3IoCisgICAgICAgIGV4ZWNfY3R4LCBlbGVtLAorICAgICAgICBncnBjX2Vycm9yX3NldF9pbnQoR1JQQ19FUlJPUl9DUkVBVEUoIkRlYWRsaW5lIEV4Y2VlZGVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0RFQURMSU5FX0VYQ0VFREVEKSk7CiAgIH0KICAgR1JQQ19DQUxMX1NUQUNLX1VOUkVGKGV4ZWNfY3R4LCBkZWFkbGluZV9zdGF0ZS0+Y2FsbF9zdGFjaywgImRlYWRsaW5lX3RpbWVyIik7CiB9CkBAIC0xOTYsOCArMTk3LDcgQEAKICAgICBncnBjX2V4ZWNfY3R4KiBleGVjX2N0eCwgZ3JwY19jYWxsX2VsZW1lbnQqIGVsZW0sCiAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wKiBvcCkgewogICBncnBjX2RlYWRsaW5lX3N0YXRlKiBkZWFkbGluZV9zdGF0ZSA9IGVsZW0tPmNhbGxfZGF0YTsKLSAgaWYgKG9wLT5jYW5jZWxfZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FIHx8Ci0gICAgICBvcC0+Y2xvc2VfZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSB7CisgIGlmIChvcC0+Y2FuY2VsX2Vycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewogICAgIGNhbmNlbF90aW1lcl9pZl9uZWVkZWQoZXhlY19jdHgsIGRlYWRsaW5lX3N0YXRlKTsKICAgfSBlbHNlIHsKICAgICAvLyBNYWtlIHN1cmUgd2Uga25vdyB3aGVuIHRoZSBjYWxsIGlzIGNvbXBsZXRlLCBzbyB0aGF0IHdlIGNhbiBjYW5jZWwKQEAgLTI4NSw4ICsyODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnQqIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AqIG9wKSB7CiAgIHNlcnZlcl9jYWxsX2RhdGEqIGNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwotICBpZiAob3AtPmNhbmNlbF9lcnJvciAhPSBHUlBDX0VSUk9SX05PTkUgfHwKLSAgICAgIG9wLT5jbG9zZV9lcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKKyAgaWYgKG9wLT5jYW5jZWxfZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSB7CiAgICAgY2FuY2VsX3RpbWVyX2lmX25lZWRlZChleGVjX2N0eCwgJmNhbGxkLT5iYXNlLmRlYWRsaW5lX3N0YXRlKTsKICAgfSBlbHNlIHsKICAgICAvLyBJZiB3ZSdyZSByZWNlaXZpbmcgaW5pdGlhbCBtZXRhZGF0YSwgd2UgbmVlZCB0byBnZXQgdGhlIGRlYWRsaW5lCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvY2hhbm5lbC9odHRwX2NsaWVudF9maWx0ZXIuYyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2h0dHBfY2xpZW50X2ZpbHRlci5jCmluZGV4IGQxNTQ0NTAuLjQ5YTJhOTggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9jaGFubmVsL2h0dHBfY2xpZW50X2ZpbHRlci5jCisrKyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL2h0dHBfY2xpZW50X2ZpbHRlci5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3Byb2ZpbGluZy90aW1lcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXBwb3J0L3N0cmluZy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnRfaW1wbC5oIgpAQCAtODgsNzcgKzg5LDEwNCBAQAogfSBjYWxsX2RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IGNoYW5uZWxfZGF0YSB7Ci0gIGdycGNfbWRlbGVtICpzdGF0aWNfc2NoZW1lOwotICBncnBjX21kZWxlbSAqdXNlcl9hZ2VudDsKKyAgZ3JwY19tZGVsZW0gc3RhdGljX3NjaGVtZTsKKyAgZ3JwY19tZGVsZW0gdXNlcl9hZ2VudDsKICAgc2l6ZV90IG1heF9wYXlsb2FkX3NpemVfZm9yX2dldDsKIH0gY2hhbm5lbF9kYXRhOwogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKmNsaWVudF9yZWN2X2ZpbHRlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKm1kKSB7Ci0gIGdycGNfY2FsbF9lbGVtZW50ICplbGVtID0gdXNlcl9kYXRhOwotICBpZiAobWQgPT0gR1JQQ19NREVMRU1fU1RBVFVTXzIwMCkgewotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9TVEFUVVMpIHsKLSAgICBjaGFyICptZXNzYWdlX3N0cmluZzsKLSAgICBncHJfYXNwcmludGYoJm1lc3NhZ2Vfc3RyaW5nLCAiUmVjZWl2ZWQgaHR0cDIgaGVhZGVyIHdpdGggc3RhdHVzOiAlcyIsCi0gICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPnZhbHVlKSk7Ci0gICAgZ3JwY19zbGljZSBtZXNzYWdlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcobWVzc2FnZV9zdHJpbmcpOwotICAgIGdwcl9mcmVlKG1lc3NhZ2Vfc3RyaW5nKTsKLSAgICBncnBjX2NhbGxfZWxlbWVudF9zZW5kX2Nsb3NlX3dpdGhfbWVzc2FnZShleGVjX2N0eCwgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19DQU5DRUxMRUQsICZtZXNzYWdlKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfR1JQQ19NRVNTQUdFKSB7Ci0gICAgZ3JwY19zbGljZSBwY3RfZGVjb2RlZF9tc2cgPQotICAgICAgICBncnBjX3Blcm1pc3NpdmVfcGVyY2VudF9kZWNvZGVfc2xpY2UobWQtPnZhbHVlLT5zbGljZSk7Ci0gICAgaWYgKGdycGNfc2xpY2VfaXNfZXF1aXZhbGVudChwY3RfZGVjb2RlZF9tc2csIG1kLT52YWx1ZS0+c2xpY2UpKSB7Ci0gICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBwY3RfZGVjb2RlZF9tc2cpOwotICAgICAgcmV0dXJuIG1kOworc3RhdGljIGdycGNfZXJyb3IgKmNsaWVudF9maWx0ZXJfaW5jb21pbmdfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmIpIHsKKyAgaWYgKGItPmlkeC5uYW1lZC5zdGF0dXMgIT0gTlVMTCkgeworICAgIGlmIChncnBjX21kZWxlbV9lcShiLT5pZHgubmFtZWQuc3RhdHVzLT5tZCwgR1JQQ19NREVMRU1fU1RBVFVTXzIwMCkpIHsKKyAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGV4ZWNfY3R4LCBiLCBiLT5pZHgubmFtZWQuc3RhdHVzKTsKICAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncygKLSAgICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX01FU1NBR0UsCi0gICAgICAgICAgZ3JwY19tZHN0cl9mcm9tX3NsaWNlKGV4ZWNfY3R4LCBwY3RfZGVjb2RlZF9tc2cpKTsKKyAgICAgIGNoYXIgKnZhbCA9IGdycGNfZHVtcF9zbGljZShHUlBDX01EVkFMVUUoYi0+aWR4Lm5hbWVkLnN0YXR1cy0+bWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0FTQ0lJKTsKKyAgICAgIGNoYXIgKm1zZzsKKyAgICAgIGdwcl9hc3ByaW50ZigmbXNnLCAiUmVjZWl2ZWQgaHR0cDIgaGVhZGVyIHdpdGggc3RhdHVzOiAlcyIsIHZhbCk7CisgICAgICBncnBjX2Vycm9yICplID0gZ3JwY19lcnJvcl9zZXRfc3RyKAorICAgICAgICAgIGdycGNfZXJyb3Jfc2V0X2ludCgKKyAgICAgICAgICAgICAgZ3JwY19lcnJvcl9zZXRfc3RyKAorICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9DUkVBVEUoCisgICAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkIGh0dHAyIDpzdGF0dXMgaGVhZGVyIHdpdGggbm9uLTIwMCBPSyBzdGF0dXMiKSwKKyAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfU1RSX1ZBTFVFLCB2YWwpLAorICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgR1JQQ19TVEFUVVNfQ0FOQ0VMTEVEKSwKKyAgICAgICAgICBHUlBDX0VSUk9SX1NUUl9HUlBDX01FU1NBR0UsIG1zZyk7CisgICAgICBncHJfZnJlZSh2YWwpOworICAgICAgZ3ByX2ZyZWUobXNnKTsKKyAgICAgIHJldHVybiBlOwogICAgIH0KLSAgfSBlbHNlIGlmIChtZCA9PSBHUlBDX01ERUxFTV9DT05URU5UX1RZUEVfQVBQTElDQVRJT05fU0xBU0hfR1JQQykgewotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9DT05URU5UX1RZUEUpIHsKLSAgICBjb25zdCBjaGFyICp2YWx1ZV9zdHIgPSBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKG1kLT52YWx1ZSk7Ci0gICAgaWYgKHN0cm5jbXAodmFsdWVfc3RyLCBFWFBFQ1RFRF9DT05URU5UX1RZUEUsCi0gICAgICAgICAgICAgICAgRVhQRUNURURfQ09OVEVOVF9UWVBFX0xFTkdUSCkgPT0gMCAmJgotICAgICAgICAodmFsdWVfc3RyW0VYUEVDVEVEX0NPTlRFTlRfVFlQRV9MRU5HVEhdID09ICcrJyB8fAotICAgICAgICAgdmFsdWVfc3RyW0VYUEVDVEVEX0NPTlRFTlRfVFlQRV9MRU5HVEhdID09ICc7JykpIHsKLSAgICAgIC8qIEFsdGhvdWdoIHRoZSBDIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgKGN1cnJlbnRseSkgZ2VuZXJhdGUgdGhlbSwKLSAgICAgICAgIGFueSBjdXN0b20gKy1zdWZmaXggaXMgZXhwbGljaXRseSB2YWxpZC4gKi8KLSAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBXZSBzaG91bGQgY29uc2lkZXIgcHJlYWxsb2NhdGluZyBjb21tb24gdmFsdWVzIHN1Y2gKLSAgICAgICAgIGFzICtwcm90byBvciAranNvbiwgb3IgYXQgbGVhc3Qgc3Rhc2hpbmcgdGhlbSBpZiB3ZSBzZWUgdGhlbS4gKi8KLSAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBTaG91bGQgd2UgYmUgc3VyZmFjaW5nIHRoaXMgdG8gYXBwbGljYXRpb24gY29kZT8gKi8KLSAgICB9IGVsc2UgewotICAgICAgLyogVE9ETyhrbGVtcG5lcik6IFdlJ3JlIGN1cnJlbnRseSBhbGxvd2luZyB0aGlzLCBidXQgd2Ugc2hvdWxkbid0Ci0gICAgICAgICBzZWUgaXQgd2l0aG91dCBhIHByb3h5IHNvIGxvZyBmb3Igbm93LiAqLwotICAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIlVuZXhwZWN0ZWQgY29udGVudC10eXBlICclcyciLCB2YWx1ZV9zdHIpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKICAgfQotICByZXR1cm4gbWQ7CisKKyAgaWYgKGItPmlkeC5uYW1lZC5ncnBjX21lc3NhZ2UgIT0gTlVMTCkgeworICAgIGdycGNfc2xpY2UgcGN0X2RlY29kZWRfbXNnID0gZ3JwY19wZXJtaXNzaXZlX3BlcmNlbnRfZGVjb2RlX3NsaWNlKAorICAgICAgICBHUlBDX01EVkFMVUUoYi0+aWR4Lm5hbWVkLmdycGNfbWVzc2FnZS0+bWQpKTsKKyAgICBpZiAoZ3JwY19zbGljZV9pc19lcXVpdmFsZW50KHBjdF9kZWNvZGVkX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfTURWQUxVRShiLT5pZHgubmFtZWQuZ3JwY19tZXNzYWdlLT5tZCkpKSB7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBwY3RfZGVjb2RlZF9tc2cpOworICAgIH0gZWxzZSB7CisgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX3NldF92YWx1ZShleGVjX2N0eCwgYi0+aWR4Lm5hbWVkLmdycGNfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjdF9kZWNvZGVkX21zZyk7CisgICAgfQorICB9CisKKyAgaWYgKGItPmlkeC5uYW1lZC5jb250ZW50X3R5cGUgIT0gTlVMTCkgeworICAgIGlmICghZ3JwY19tZGVsZW1fZXEoYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZS0+bWQsCisgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9DT05URU5UX1RZUEVfQVBQTElDQVRJT05fU0xBU0hfR1JQQykpIHsKKyAgICAgIGlmIChncnBjX3NsaWNlX2J1Zl9zdGFydF9lcShHUlBDX01EVkFMVUUoYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZS0+bWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX0NPTlRFTlRfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9DT05URU5UX1RZUEVfTEVOR1RIKSAmJgorICAgICAgICAgIChHUlBDX1NMSUNFX1NUQVJUX1BUUihHUlBDX01EVkFMVUUoCisgICAgICAgICAgICAgICBiLT5pZHgubmFtZWQuY29udGVudF90eXBlLT5tZCkpW0VYUEVDVEVEX0NPTlRFTlRfVFlQRV9MRU5HVEhdID09CisgICAgICAgICAgICAgICAnKycgfHwKKyAgICAgICAgICAgR1JQQ19TTElDRV9TVEFSVF9QVFIoR1JQQ19NRFZBTFVFKAorICAgICAgICAgICAgICAgYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZS0+bWQpKVtFWFBFQ1RFRF9DT05URU5UX1RZUEVfTEVOR1RIXSA9PQorICAgICAgICAgICAgICAgJzsnKSkgeworICAgICAgICAvKiBBbHRob3VnaCB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IChjdXJyZW50bHkpIGdlbmVyYXRlIHRoZW0sCisgICAgICAgICAgIGFueSBjdXN0b20gKy1zdWZmaXggaXMgZXhwbGljaXRseSB2YWxpZC4gKi8KKyAgICAgICAgLyogVE9ETyhrbGVtcG5lcik6IFdlIHNob3VsZCBjb25zaWRlciBwcmVhbGxvY2F0aW5nIGNvbW1vbiB2YWx1ZXMgc3VjaAorICAgICAgICAgICBhcyArcHJvdG8gb3IgK2pzb24sIG9yIGF0IGxlYXN0IHN0YXNoaW5nIHRoZW0gaWYgd2Ugc2VlIHRoZW0uICovCisgICAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBTaG91bGQgd2UgYmUgc3VyZmFjaW5nIHRoaXMgdG8gYXBwbGljYXRpb24gY29kZT8gKi8KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBXZSdyZSBjdXJyZW50bHkgYWxsb3dpbmcgdGhpcywgYnV0IHdlIHNob3VsZG4ndAorICAgICAgICAgICBzZWUgaXQgd2l0aG91dCBhIHByb3h5IHNvIGxvZyBmb3Igbm93LiAqLworICAgICAgICBjaGFyICp2YWwgPSBncnBjX2R1bXBfc2xpY2UoR1JQQ19NRFZBTFVFKGItPmlkeC5uYW1lZC5jb250ZW50X3R5cGUtPm1kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0FTQ0lJKTsKKyAgICAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIlVuZXhwZWN0ZWQgY29udGVudC10eXBlICclcyciLCB2YWwpOworICAgICAgICBncHJfZnJlZSh2YWwpOworICAgICAgfQorICAgIH0KKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX3JlbW92ZShleGVjX2N0eCwgYiwgYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZSk7CisgIH0KKworICByZXR1cm4gR1JQQ19FUlJPUl9OT05FOwogfQogCiBzdGF0aWMgdm9pZCBoY19vbl9yZWN2X2luaXRpYWxfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBncnBjX2Vycm9yICplcnJvcikgewogICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSA9IHVzZXJfZGF0YTsKICAgY2FsbF9kYXRhICpjYWxsZCA9IGVsZW0tPmNhbGxfZGF0YTsKLSAgZ3JwY19tZXRhZGF0YV9iYXRjaF9maWx0ZXIoZXhlY19jdHgsIGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9yZWN2X2ZpbHRlciwgZWxlbSk7Ci0gIGdycGNfY2xvc3VyZV9ydW4oZXhlY19jdHgsIGNhbGxkLT5vbl9kb25lX3JlY3ZfaW5pdGlhbF9tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX1JFRihlcnJvcikpOworICBpZiAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgZXJyb3IgPSBjbGllbnRfZmlsdGVyX2luY29taW5nX21ldGFkYXRhKGV4ZWNfY3R4LCBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBHUlBDX0VSUk9SX1JFRihlcnJvcik7CisgIH0KKyAgZ3JwY19jbG9zdXJlX3J1bihleGVjX2N0eCwgY2FsbGQtPm9uX2RvbmVfcmVjdl9pbml0aWFsX21ldGFkYXRhLCBlcnJvcik7CiB9CiAKIHN0YXRpYyB2b2lkIGhjX29uX3JlY3ZfdHJhaWxpbmdfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgZ3JwY19lcnJvciAqZXJyb3IpIHsKICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSB1c2VyX2RhdGE7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7Ci0gIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGV4ZWNfY3R4LCBjYWxsZC0+cmVjdl90cmFpbGluZ19tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3JlY3ZfZmlsdGVyLCBlbGVtKTsKLSAgZ3JwY19jbG9zdXJlX3J1bihleGVjX2N0eCwgY2FsbGQtPm9uX2RvbmVfcmVjdl90cmFpbGluZ19tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX1JFRihlcnJvcikpOworICBpZiAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgZXJyb3IgPSBjbGllbnRfZmlsdGVyX2luY29taW5nX21ldGFkYXRhKGV4ZWNfY3R4LCBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZC0+cmVjdl90cmFpbGluZ19tZXRhZGF0YSk7CisgIH0gZWxzZSB7CisgICAgR1JQQ19FUlJPUl9SRUYoZXJyb3IpOworICB9CisgIGdycGNfY2xvc3VyZV9ydW4oZXhlY19jdHgsIGNhbGxkLT5vbl9kb25lX3JlY3ZfdHJhaWxpbmdfbWV0YWRhdGEsIGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgaGNfb25fY29tcGxldGUoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwKQEAgLTE3OSwxNSArMjA3LDEyIEBACiAgIGNhbGxkLT5wb3N0X3NlbmQtPmNiKGV4ZWNfY3R4LCBjYWxsZC0+cG9zdF9zZW5kLT5jYl9hcmcsIGVycm9yKTsKIH0KIAotc3RhdGljIGdycGNfbWRlbGVtICpjbGllbnRfc3RyaXBfZmlsdGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgZ3JwY19tZGVsZW0gKm1kKSB7Ci0gIC8qIGVhdCB0aGUgdGhpbmdzIHdlJ2QgbGlrZSB0byBzZXQgb3Vyc2VsdmVzICovCi0gIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfTUVUSE9EKSByZXR1cm4gTlVMTDsKLSAgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9TQ0hFTUUpIHJldHVybiBOVUxMOwotICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX1RFKSByZXR1cm4gTlVMTDsKLSAgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9DT05URU5UX1RZUEUpIHJldHVybiBOVUxMOwotICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX1VTRVJfQUdFTlQpIHJldHVybiBOVUxMOwotICByZXR1cm4gbWQ7CitzdGF0aWMgdm9pZCByZW1vdmVfaWZfcHJlc2VudChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9jYWxsb3V0c19pbmRleCBpZHgpIHsKKyAgaWYgKGJhdGNoLT5pZHguYXJyYXlbaWR4XSAhPSBOVUxMKSB7CisgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9yZW1vdmUoZXhlY19jdHgsIGJhdGNoLCBiYXRjaC0+aWR4LmFycmF5W2lkeF0pOworICB9CiB9CiAKIHN0YXRpYyB2b2lkIGNvbnRpbnVlX3NlbmRfbWVzc2FnZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTIyNiwxOCArMjUxLDIwIEBACiAgIH0KIH0KIAotc3RhdGljIHZvaWQgaGNfbXV0YXRlX29wKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AgKm9wKSB7CitzdGF0aWMgZ3JwY19lcnJvciAqaGNfbXV0YXRlX29wKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCkgewogICAvKiBncmFiIHBvaW50ZXJzIHRvIG91ciBkYXRhIGZyb20gdGhlIGNhbGwgZWxlbWVudCAqLwogICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwogICBjaGFubmVsX2RhdGEgKmNoYW5uZWxkID0gZWxlbS0+Y2hhbm5lbF9kYXRhOworICBncnBjX2Vycm9yICplcnJvcjsKIAogICBpZiAob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSAhPSBOVUxMKSB7CiAgICAgLyogRGVjaWRlIHdoaWNoIEhUVFAgVkVSQiB0byB1c2UuIFdlIHVzZSBHRVQgaWYgdGhlIHJlcXVlc3QgaXMgbWFya2VkCiAgICAgY2FjaGVhYmxlLCBhbmQgdGhlIG9wZXJhdGlvbiBjb250YWlucyBib3RoIGluaXRpYWwgbWV0YWRhdGEgYW5kIHNlbmQKICAgICBtZXNzYWdlLCBhbmQgdGhlIHBheWxvYWQgaXMgYmVsb3cgdGhlIHNpemUgdGhyZXNob2xkLCBhbmQgYWxsIHRoZSBkYXRhCiAgICAgZm9yIHRoaXMgcmVxdWVzdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUuICovCi0gICAgZ3JwY19tZGVsZW0gKm1ldGhvZCA9IEdSUENfTURFTEVNX01FVEhPRF9QT1NUOworICAgIGdycGNfbWRlbGVtIG1ldGhvZCA9IEdSUENfTURFTEVNX01FVEhPRF9QT1NUOwogICAgIGlmICgob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YV9mbGFncyAmCiAgICAgICAgICBHUlBDX0lOSVRJQUxfTUVUQURBVEFfQ0FDSEVBQkxFX1JFUVVFU1QpICYmCiAgICAgICAgIG9wLT5zZW5kX21lc3NhZ2UgIT0gTlVMTCAmJgpAQCAtMjU0LDcgKzI4MSw3IEBACiAgICAgfQogCiAgICAgLyogQXR0ZW1wdCB0byByZWFkIHRoZSBkYXRhIGZyb20gc2VuZF9tZXNzYWdlIGFuZCBjcmVhdGUgYSBoZWFkZXIgZmllbGQuICovCi0gICAgaWYgKG1ldGhvZCA9PSBHUlBDX01ERUxFTV9NRVRIT0RfR0VUKSB7CisgICAgaWYgKGdycGNfbWRlbGVtX2VxKG1ldGhvZCwgR1JQQ19NREVMRU1fTUVUSE9EX0dFVCkpIHsKICAgICAgIC8qIGFsbG9jYXRlIG1lbW9yeSB0byBob2xkIHRoZSBlbnRpcmUgcGF5bG9hZCAqLwogICAgICAgY2FsbGQtPnBheWxvYWRfYnl0ZXMgPSBncHJfbWFsbG9jKG9wLT5zZW5kX21lc3NhZ2UtPmxlbmd0aCk7CiAKQEAgLTI2NywxMiArMjk0LDE0IEBACiAgICAgICBpZiAoY2FsbGQtPnNlbmRfbWVzc2FnZV9ibG9ja2VkID09IGZhbHNlKSB7CiAgICAgICAgIC8qIHdoZW4gYWxsIHRoZSBzZW5kX21lc3NhZ2UgZGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gY3JlYXRlIGEgTURFTEVNIGFuZAogICAgICAgICBhcHBlbmQgdG8gaGVhZGVycyAqLwotICAgICAgICBncnBjX21kZWxlbSAqcGF5bG9hZF9iaW4gPSBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCisgICAgICAgIGdycGNfbWRlbGVtIHBheWxvYWRfYmluID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCiAgICAgICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX1BBWUxPQURfQklOLAotICAgICAgICAgICAgZ3JwY19tZHN0cl9mcm9tX2J1ZmZlcihjYWxsZC0+cGF5bG9hZF9ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AtPnNlbmRfbWVzc2FnZS0+bGVuZ3RoKSk7Ci0gICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX3RhaWwob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGQtPnBheWxvYWRfYmluLCBwYXlsb2FkX2Jpbik7CisgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcigoY29uc3QgY2hhciAqKWNhbGxkLT5wYXlsb2FkX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AtPnNlbmRfbWVzc2FnZS0+bGVuZ3RoKSk7CisgICAgICAgIGVycm9yID0KKyAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX3RhaWwoZXhlY19jdHgsIG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWxsZC0+cGF5bG9hZF9iaW4sIHBheWxvYWRfYmluKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOwogICAgICAgICBjYWxsZC0+b25fY29tcGxldGUgPSBvcC0+b25fY29tcGxldGU7CiAgICAgICAgIG9wLT5vbl9jb21wbGV0ZSA9ICZjYWxsZC0+aGNfb25fY29tcGxldGU7CiAgICAgICAgIG9wLT5zZW5kX21lc3NhZ2UgPSBOVUxMOwpAQCAtMjg1LDIxICszMTQsMzUgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcihleGVjX2N0eCwgb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfc3RyaXBfZmlsdGVyLCBlbGVtKTsKKyAgICByZW1vdmVfaWZfcHJlc2VudChleGVjX2N0eCwgb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwgR1JQQ19CQVRDSF9NRVRIT0QpOworICAgIHJlbW92ZV9pZl9wcmVzZW50KGV4ZWNfY3R4LCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLCBHUlBDX0JBVENIX1NDSEVNRSk7CisgICAgcmVtb3ZlX2lmX3ByZXNlbnQoZXhlY19jdHgsIG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEsIEdSUENfQkFUQ0hfVEUpOworICAgIHJlbW92ZV9pZl9wcmVzZW50KGV4ZWNfY3R4LCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEdSUENfQkFUQ0hfQ09OVEVOVF9UWVBFKTsKKyAgICByZW1vdmVfaWZfcHJlc2VudChleGVjX2N0eCwgb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBHUlBDX0JBVENIX1VTRVJfQUdFTlQpOworCiAgICAgLyogU2VuZCA6IHByZWZpeGVkIGhlYWRlcnMsIHdoaWNoIGhhdmUgdG8gYmUgYmVmb3JlIGFueSBhcHBsaWNhdGlvbgogICAgICAgIGxheWVyIGhlYWRlcnMuICovCi0gICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfaGVhZChvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLCAmY2FsbGQtPm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCk7Ci0gICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfaGVhZChvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLCAmY2FsbGQtPnNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxkLT5zdGF0aWNfc2NoZW1lKTsKLSAgICBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEsICZjYWxsZC0+dGVfdHJhaWxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9URV9UUkFJTEVSUyk7Ci0gICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbCgKLSAgICAgICAgb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwgJmNhbGxkLT5jb250ZW50X3R5cGUsCisgICAgZXJyb3IgPSBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF9oZWFkKGV4ZWNfY3R4LCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGQtPm1ldGhvZCwgbWV0aG9kKTsKKyAgICBpZiAoZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm4gZXJyb3I7CisgICAgZXJyb3IgPQorICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF9oZWFkKGV4ZWNfY3R4LCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWxsZC0+c2NoZW1lLCBjaGFubmVsZC0+c3RhdGljX3NjaGVtZSk7CisgICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworICAgIGVycm9yID0gZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbChleGVjX2N0eCwgb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbGxkLT50ZV90cmFpbGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fVEVfVFJBSUxFUlMpOworICAgIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHJldHVybiBlcnJvcjsKKyAgICBlcnJvciA9IGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX3RhaWwoCisgICAgICAgIGV4ZWNfY3R4LCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLCAmY2FsbGQtPmNvbnRlbnRfdHlwZSwKICAgICAgICAgR1JQQ19NREVMRU1fQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX1NMQVNIX0dSUEMpOwotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX3RhaWwob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwgJmNhbGxkLT51c2VyX2FnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fUkVGKGNoYW5uZWxkLT51c2VyX2FnZW50KSk7CisgICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgcmV0dXJuIGVycm9yOworICAgIGVycm9yID0gZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbChleGVjX2N0eCwgb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbGxkLT51c2VyX2FnZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9SRUYoY2hhbm5lbGQtPnVzZXJfYWdlbnQpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm4gZXJyb3I7CiAgIH0KIAogICBpZiAob3AtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSAhPSBOVUxMKSB7CkBAIC0zMTUsNiArMzU4LDggQEAKICAgICBjYWxsZC0+b25fZG9uZV9yZWN2X3RyYWlsaW5nX21ldGFkYXRhID0gb3AtPm9uX2NvbXBsZXRlOwogICAgIG9wLT5vbl9jb21wbGV0ZSA9ICZjYWxsZC0+aGNfb25fcmVjdl90cmFpbGluZ19tZXRhZGF0YTsKICAgfQorCisgIHJldHVybiBHUlBDX0VSUk9SX05PTkU7CiB9CiAKIHN0YXRpYyB2b2lkIGhjX3N0YXJ0X3RyYW5zcG9ydF9vcChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTMyMiwxNSArMzY3LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCkgewogICBHUFJfVElNRVJfQkVHSU4oImhjX3N0YXJ0X3RyYW5zcG9ydF9vcCIsIDApOwogICBHUlBDX0NBTExfTE9HX09QKEdQUl9JTkZPLCBlbGVtLCBvcCk7Ci0gIGhjX211dGF0ZV9vcChleGVjX2N0eCwgZWxlbSwgb3ApOwotICBHUFJfVElNRVJfRU5EKCJoY19zdGFydF90cmFuc3BvcnRfb3AiLCAwKTsKLSAgY2FsbF9kYXRhICpjYWxsZCA9IGVsZW0tPmNhbGxfZGF0YTsKLSAgaWYgKG9wLT5zZW5kX21lc3NhZ2UgIT0gTlVMTCAmJiBjYWxsZC0+c2VuZF9tZXNzYWdlX2Jsb2NrZWQpIHsKLSAgICAvKiBEb24ndCBmb3J3YXJkIHRoZSBvcC4gc2VuZF9tZXNzYWdlIGNvbnRhaW5zIHNsaWNlcyB0aGF0IGFyZW4ndCByZWFkeQotICAgIHlldC4gVGhlIGNhbGwgd2lsbCBiZSBmb3J3YXJkZWQgYnkgdGhlIG9wX2NvbXBsZXRlIG9mIHNsaWNlIHJlYWQgY2FsbC4gKi8KKyAgZ3JwY19lcnJvciAqZXJyb3IgPSBoY19tdXRhdGVfb3AoZXhlY19jdHgsIGVsZW0sIG9wKTsKKyAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgeworICAgIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9maW5pc2hfd2l0aF9mYWlsdXJlKGV4ZWNfY3R4LCBvcCwgZXJyb3IpOwogICB9IGVsc2UgewotICAgIGdycGNfY2FsbF9uZXh0X29wKGV4ZWNfY3R4LCBlbGVtLCBvcCk7CisgICAgY2FsbF9kYXRhICpjYWxsZCA9IGVsZW0tPmNhbGxfZGF0YTsKKyAgICBpZiAob3AtPnNlbmRfbWVzc2FnZSAhPSBOVUxMICYmIGNhbGxkLT5zZW5kX21lc3NhZ2VfYmxvY2tlZCkgeworICAgICAgLyogRG9uJ3QgZm9yd2FyZCB0aGUgb3AuIHNlbmRfbWVzc2FnZSBjb250YWlucyBzbGljZXMgdGhhdCBhcmVuJ3QgcmVhZHkKKyAgICAgIHlldC4gVGhlIGNhbGwgd2lsbCBiZSBmb3J3YXJkZWQgYnkgdGhlIG9wX2NvbXBsZXRlIG9mIHNsaWNlIHJlYWQgY2FsbC4KKyAgICAgICovCisgICAgfSBlbHNlIHsKKyAgICAgIGdycGNfY2FsbF9uZXh0X29wKGV4ZWNfY3R4LCBlbGVtLCBvcCk7CisgICAgfQogICB9CisgIEdQUl9USU1FUl9FTkQoImhjX3N0YXJ0X3RyYW5zcG9ydF9vcCIsIDApOwogfQogCiAvKiBDb25zdHJ1Y3RvciBmb3IgY2FsbF9kYXRhICovCkBAIC0zNjcsMTggKzQxNywxOCBAQAogICBncnBjX3NsaWNlX2J1ZmZlcl9kZXN0cm95X2ludGVybmFsKGV4ZWNfY3R4LCAmY2FsbGQtPnNsaWNlcyk7CiB9CiAKLXN0YXRpYyBncnBjX21kZWxlbSAqc2NoZW1lX2Zyb21fYXJncyhjb25zdCBncnBjX2NoYW5uZWxfYXJncyAqYXJncykgeworc3RhdGljIGdycGNfbWRlbGVtIHNjaGVtZV9mcm9tX2FyZ3MoY29uc3QgZ3JwY19jaGFubmVsX2FyZ3MgKmFyZ3MpIHsKICAgdW5zaWduZWQgaTsKICAgc2l6ZV90IGo7Ci0gIGdycGNfbWRlbGVtICp2YWxpZF9zY2hlbWVzW10gPSB7R1JQQ19NREVMRU1fU0NIRU1FX0hUVFAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fU0NIRU1FX0hUVFBTfTsKKyAgZ3JwY19tZGVsZW0gdmFsaWRfc2NoZW1lc1tdID0ge0dSUENfTURFTEVNX1NDSEVNRV9IVFRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fU0NIRU1FX0hUVFBTfTsKICAgaWYgKGFyZ3MgIT0gTlVMTCkgewogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLT5udW1fYXJnczsgKytpKSB7CiAgICAgICBpZiAoYXJncy0+YXJnc1tpXS50eXBlID09IEdSUENfQVJHX1NUUklORyAmJgogICAgICAgICAgIHN0cmNtcChhcmdzLT5hcmdzW2ldLmtleSwgR1JQQ19BUkdfSFRUUDJfU0NIRU1FKSA9PSAwKSB7CiAgICAgICAgIGZvciAoaiA9IDA7IGogPCBHUFJfQVJSQVlfU0laRSh2YWxpZF9zY2hlbWVzKTsgaisrKSB7Ci0gICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGdycGNfbWRzdHJfYXNfY19zdHJpbmcodmFsaWRfc2NoZW1lc1tqXS0+dmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5hcmdzW2ldLnZhbHVlLnN0cmluZykpIHsKKyAgICAgICAgICBpZiAoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoR1JQQ19NRFZBTFVFKHZhbGlkX3NjaGVtZXNbal0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5hcmdzW2ldLnZhbHVlLnN0cmluZykpIHsKICAgICAgICAgICAgIHJldHVybiB2YWxpZF9zY2hlbWVzW2pdOwogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDA0LDEzICs0NTQsMTMgQEAKICAgcmV0dXJuIGtNYXhQYXlsb2FkU2l6ZUZvckdldDsKIH0KIAotc3RhdGljIGdycGNfbWRzdHIgKnVzZXJfYWdlbnRfZnJvbV9hcmdzKGNvbnN0IGdycGNfY2hhbm5lbF9hcmdzICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRyYW5zcG9ydF9uYW1lKSB7CitzdGF0aWMgZ3JwY19zbGljZSB1c2VyX2FnZW50X2Zyb21fYXJncyhjb25zdCBncnBjX2NoYW5uZWxfYXJncyAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRyYW5zcG9ydF9uYW1lKSB7CiAgIGdwcl9zdHJ2ZWMgdjsKICAgc2l6ZV90IGk7CiAgIGludCBpc19maXJzdCA9IDE7CiAgIGNoYXIgKnRtcDsKLSAgZ3JwY19tZHN0ciAqcmVzdWx0OworICBncnBjX3NsaWNlIHJlc3VsdDsKIAogICBncHJfc3RydmVjX2luaXQoJnYpOwogCkBAIC00NDgsNyArNDk4LDcgQEAKIAogICB0bXAgPSBncHJfc3RydmVjX2ZsYXR0ZW4oJnYsIE5VTEwpOwogICBncHJfc3RydmVjX2Rlc3Ryb3koJnYpOwotICByZXN1bHQgPSBncnBjX21kc3RyX2Zyb21fc3RyaW5nKHRtcCk7CisgIHJlc3VsdCA9IGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKHRtcCkpOwogICBncHJfZnJlZSh0bXApOwogCiAgIHJldHVybiByZXN1bHQ7CkBAIC00NjQsNyArNTE0LDcgQEAKICAgY2hhbmQtPnN0YXRpY19zY2hlbWUgPSBzY2hlbWVfZnJvbV9hcmdzKGFyZ3MtPmNoYW5uZWxfYXJncyk7CiAgIGNoYW5kLT5tYXhfcGF5bG9hZF9zaXplX2Zvcl9nZXQgPQogICAgICAgbWF4X3BheWxvYWRfc2l6ZV9mcm9tX2FyZ3MoYXJncy0+Y2hhbm5lbF9hcmdzKTsKLSAgY2hhbmQtPnVzZXJfYWdlbnQgPSBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCisgIGNoYW5kLT51c2VyX2FnZW50ID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCiAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9VU0VSX0FHRU5ULAogICAgICAgdXNlcl9hZ2VudF9mcm9tX2FyZ3MoYXJncy0+Y2hhbm5lbF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+b3B0aW9uYWxfdHJhbnNwb3J0LT52dGFibGUtPm5hbWUpKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9jaGFubmVsL2h0dHBfc2VydmVyX2ZpbHRlci5jIGIvc3JjL2NvcmUvbGliL2NoYW5uZWwvaHR0cF9zZXJ2ZXJfZmlsdGVyLmMKaW5kZXggZjUwODIzMS4uM2Y5OTI5NyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2NoYW5uZWwvaHR0cF9zZXJ2ZXJfZmlsdGVyLmMKKysrIGIvc3JjL2NvcmUvbGliL2NoYW5uZWwvaHR0cF9zZXJ2ZXJfZmlsdGVyLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvcHJvZmlsaW5nL3RpbWVycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKIAogI2RlZmluZSBFWFBFQ1RFRF9DT05URU5UX1RZUEUgImFwcGxpY2F0aW9uL2dycGMiCkBAIC00NywxOCArNDgsMTMgQEAKIGV4dGVybiBpbnQgZ3JwY19odHRwX3RyYWNlOwogCiB0eXBlZGVmIHN0cnVjdCBjYWxsX2RhdGEgewotICB1aW50OF90IHNlZW5fcGF0aDsKLSAgdWludDhfdCBzZWVuX21ldGhvZDsKLSAgdWludDhfdCBzZW50X3N0YXR1czsKLSAgdWludDhfdCBzZWVuX3NjaGVtZTsKLSAgdWludDhfdCBzZWVuX3RlX3RyYWlsZXJzOwotICB1aW50OF90IHNlZW5fYXV0aG9yaXR5OwotICB1aW50OF90IHNlZW5fcGF5bG9hZF9iaW47CiAgIGdycGNfbGlua2VkX21kZWxlbSBzdGF0dXM7CiAgIGdycGNfbGlua2VkX21kZWxlbSBjb250ZW50X3R5cGU7CiAKKyAgLyogZGlkIHRoaXMgcmVxdWVzdCBjb21lIHdpdGggcGF5bG9hZC1iaW4gKi8KKyAgYm9vbCBzZWVuX3BheWxvYWRfYmluOwogICAvKiBmbGFnIHRvIGVuc3VyZSBwYXlsb2FkX2JpbiBpcyBkZWxpdmVyZWQgb25seSBvbmNlICovCi0gIHVpbnQ4X3QgcGF5bG9hZF9iaW5fZGVsaXZlcmVkOworICBib29sIHBheWxvYWRfYmluX2RlbGl2ZXJlZDsKIAogICBncnBjX21ldGFkYXRhX2JhdGNoICpyZWN2X2luaXRpYWxfbWV0YWRhdGE7CiAgIGJvb2wgKnJlY3ZfaWRlbXBvdGVudF9yZXF1ZXN0OwpAQCAtODMsMTA5ICs3OSwxNTIgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgY2hhbm5lbF9kYXRhIHsgdWludDhfdCB1bnVzZWQ7IH0gY2hhbm5lbF9kYXRhOwogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKnNlcnZlcl9maWx0ZXJfb3V0Z29pbmdfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICptZCkgewotICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX0dSUENfTUVTU0FHRSkgeworc3RhdGljIGdycGNfZXJyb3IgKnNlcnZlcl9maWx0ZXJfb3V0Z29pbmdfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmIpIHsKKyAgaWYgKGItPmlkeC5uYW1lZC5ncnBjX21lc3NhZ2UgIT0gTlVMTCkgewogICAgIGdycGNfc2xpY2UgcGN0X2VuY29kZWRfbXNnID0gZ3JwY19wZXJjZW50X2VuY29kZV9zbGljZSgKLSAgICAgICAgbWQtPnZhbHVlLT5zbGljZSwgZ3JwY19jb21wYXRpYmxlX3BlcmNlbnRfZW5jb2RpbmdfdW5yZXNlcnZlZF9ieXRlcyk7Ci0gICAgaWYgKGdycGNfc2xpY2VfaXNfZXF1aXZhbGVudChwY3RfZW5jb2RlZF9tc2csIG1kLT52YWx1ZS0+c2xpY2UpKSB7CisgICAgICAgIEdSUENfTURWQUxVRShiLT5pZHgubmFtZWQuZ3JwY19tZXNzYWdlLT5tZCksCisgICAgICAgIGdycGNfY29tcGF0aWJsZV9wZXJjZW50X2VuY29kaW5nX3VucmVzZXJ2ZWRfYnl0ZXMpOworICAgIGlmIChncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnQocGN0X2VuY29kZWRfbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NRFZBTFVFKGItPmlkeC5uYW1lZC5ncnBjX21lc3NhZ2UtPm1kKSkpIHsKICAgICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIHBjdF9lbmNvZGVkX21zZyk7Ci0gICAgICByZXR1cm4gbWQ7CiAgICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCi0gICAgICAgICAgZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19NRVNTQUdFLAotICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zbGljZShleGVjX2N0eCwgcGN0X2VuY29kZWRfbXNnKSk7CisgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX3NldF92YWx1ZShleGVjX2N0eCwgYi0+aWR4Lm5hbWVkLmdycGNfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjdF9lbmNvZGVkX21zZyk7CiAgICAgfQotICB9IGVsc2UgewotICAgIHJldHVybiBtZDsKICAgfQorICByZXR1cm4gR1JQQ19FUlJPUl9OT05FOwogfQogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKnNlcnZlcl9maWx0ZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqbWQpIHsKLSAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSB1c2VyX2RhdGE7Ci0gIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CitzdGF0aWMgdm9pZCBhZGRfZXJyb3IoY29uc3QgY2hhciAqZXJyb3JfbmFtZSwgZ3JwY19lcnJvciAqKmN1bXVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqbmV3KSB7CisgIGlmIChuZXcgPT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm47CisgIGlmICgqY3VtdWxhdGl2ZSA9PSBHUlBDX0VSUk9SX05PTkUpIHsKKyAgICAqY3VtdWxhdGl2ZSA9IEdSUENfRVJST1JfQ1JFQVRFKGVycm9yX25hbWUpOworICB9CisgICpjdW11bGF0aXZlID0gZ3JwY19lcnJvcl9hZGRfY2hpbGQoKmN1bXVsYXRpdmUsIG5ldyk7Cit9CiAKLSAgLyogQ2hlY2sgaWYgaXQgaXMgb25lIG9mIHRoZSBoZWFkZXJzIHdlIGNhcmUgYWJvdXQuICovCi0gIGlmIChtZCA9PSBHUlBDX01ERUxFTV9URV9UUkFJTEVSUyB8fCBtZCA9PSBHUlBDX01ERUxFTV9NRVRIT0RfUE9TVCB8fAotICAgICAgbWQgPT0gR1JQQ19NREVMRU1fTUVUSE9EX1BVVCB8fCBtZCA9PSBHUlBDX01ERUxFTV9NRVRIT0RfR0VUIHx8Ci0gICAgICBtZCA9PSBHUlBDX01ERUxFTV9TQ0hFTUVfSFRUUCB8fCBtZCA9PSBHUlBDX01ERUxFTV9TQ0hFTUVfSFRUUFMgfHwKLSAgICAgIG1kID09IEdSUENfTURFTEVNX0NPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9TTEFTSF9HUlBDKSB7Ci0gICAgLyogc3dhbGxvdyBpdCAqLwotICAgIGlmIChtZCA9PSBHUlBDX01ERUxFTV9NRVRIT0RfUE9TVCkgewotICAgICAgY2FsbGQtPnNlZW5fbWV0aG9kID0gMTsKK3N0YXRpYyBncnBjX2Vycm9yICpzZXJ2ZXJfZmlsdGVyX2luY29taW5nX21ldGFkYXRhKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiKSB7CisgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CisgIGdycGNfZXJyb3IgKmVycm9yID0gR1JQQ19FUlJPUl9OT05FOworICBzdGF0aWMgY29uc3QgY2hhciAqZXJyb3JfbmFtZSA9ICJGYWlsZWQgcHJvY2Vzc2luZyBpbmNvbWluZyBoZWFkZXJzIjsKKworICBpZiAoYi0+aWR4Lm5hbWVkLm1ldGhvZCAhPSBOVUxMKSB7CisgICAgaWYgKGdycGNfbWRlbGVtX2VxKGItPmlkeC5uYW1lZC5tZXRob2QtPm1kLCBHUlBDX01ERUxFTV9NRVRIT0RfUE9TVCkpIHsKICAgICAgICpjYWxsZC0+cmVjdl9pZGVtcG90ZW50X3JlcXVlc3QgPSBmYWxzZTsKICAgICAgICpjYWxsZC0+cmVjdl9jYWNoZWFibGVfcmVxdWVzdCA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAobWQgPT0gR1JQQ19NREVMRU1fTUVUSE9EX1BVVCkgewotICAgICAgY2FsbGQtPnNlZW5fbWV0aG9kID0gMTsKKyAgICB9IGVsc2UgaWYgKGdycGNfbWRlbGVtX2VxKGItPmlkeC5uYW1lZC5tZXRob2QtPm1kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fTUVUSE9EX1BVVCkpIHsKICAgICAgICpjYWxsZC0+cmVjdl9pZGVtcG90ZW50X3JlcXVlc3QgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAobWQgPT0gR1JQQ19NREVMRU1fTUVUSE9EX0dFVCkgewotICAgICAgY2FsbGQtPnNlZW5fbWV0aG9kID0gMTsKKyAgICB9IGVsc2UgaWYgKGdycGNfbWRlbGVtX2VxKGItPmlkeC5uYW1lZC5tZXRob2QtPm1kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fTUVUSE9EX0dFVCkpIHsKICAgICAgICpjYWxsZC0+cmVjdl9jYWNoZWFibGVfcmVxdWVzdCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfU0NIRU1FKSB7Ci0gICAgICBjYWxsZC0+c2Vlbl9zY2hlbWUgPSAxOwotICAgIH0gZWxzZSBpZiAobWQgPT0gR1JQQ19NREVMRU1fVEVfVFJBSUxFUlMpIHsKLSAgICAgIGNhbGxkLT5zZWVuX3RlX3RyYWlsZXJzID0gMTsKLSAgICB9Ci0gICAgLyogVE9ETyhrbGVtcG5lcik6IFRyYWNrIHRoYXQgd2UndmUgc2VlbiBhbGwgdGhlIGhlYWRlcnMgd2Ugc2hvdWxkCi0gICAgICAgcmVxdWlyZSAqLwotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9DT05URU5UX1RZUEUpIHsKLSAgICBjb25zdCBjaGFyICp2YWx1ZV9zdHIgPSBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKG1kLT52YWx1ZSk7Ci0gICAgaWYgKHN0cm5jbXAodmFsdWVfc3RyLCBFWFBFQ1RFRF9DT05URU5UX1RZUEUsCi0gICAgICAgICAgICAgICAgRVhQRUNURURfQ09OVEVOVF9UWVBFX0xFTkdUSCkgPT0gMCAmJgotICAgICAgICAodmFsdWVfc3RyW0VYUEVDVEVEX0NPTlRFTlRfVFlQRV9MRU5HVEhdID09ICcrJyB8fAotICAgICAgICAgdmFsdWVfc3RyW0VYUEVDVEVEX0NPTlRFTlRfVFlQRV9MRU5HVEhdID09ICc7JykpIHsKLSAgICAgIC8qIEFsdGhvdWdoIHRoZSBDIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgKGN1cnJlbnRseSkgZ2VuZXJhdGUgdGhlbSwKLSAgICAgICAgIGFueSBjdXN0b20gKy1zdWZmaXggaXMgZXhwbGljaXRseSB2YWxpZC4gKi8KLSAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBXZSBzaG91bGQgY29uc2lkZXIgcHJlYWxsb2NhdGluZyBjb21tb24gdmFsdWVzIHN1Y2gKLSAgICAgICAgIGFzICtwcm90byBvciAranNvbiwgb3IgYXQgbGVhc3Qgc3Rhc2hpbmcgdGhlbSBpZiB3ZSBzZWUgdGhlbS4gKi8KLSAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBTaG91bGQgd2UgYmUgc3VyZmFjaW5nIHRoaXMgdG8gYXBwbGljYXRpb24gY29kZT8gKi8KICAgICB9IGVsc2UgewotICAgICAgLyogVE9ETyhrbGVtcG5lcik6IFdlJ3JlIGN1cnJlbnRseSBhbGxvd2luZyB0aGlzLCBidXQgd2Ugc2hvdWxkbid0Ci0gICAgICAgICBzZWUgaXQgd2l0aG91dCBhIHByb3h5IHNvIGxvZyBmb3Igbm93LiAqLwotICAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIlVuZXhwZWN0ZWQgY29udGVudC10eXBlICclcyciLCB2YWx1ZV9zdHIpOworICAgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgICAgICAgICBncnBjX2F0dGFjaF9tZF90b19lcnJvcihHUlBDX0VSUk9SX0NSRUFURSgiQmFkIGhlYWRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmlkeC5uYW1lZC5tZXRob2QtPm1kKSk7CiAgICAgfQotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9URSB8fCBtZC0+a2V5ID09IEdSUENfTURTVFJfTUVUSE9EIHx8Ci0gICAgICAgICAgICAgbWQtPmtleSA9PSBHUlBDX01EU1RSX1NDSEVNRSkgewotICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiSW52YWxpZCAlczogaGVhZGVyOiAnJXMnIiwKLSAgICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPmtleSksIGdycGNfbWRzdHJfYXNfY19zdHJpbmcobWQtPnZhbHVlKSk7Ci0gICAgLyogc3dhbGxvdyBpdCBhbmQgZXJyb3IgZXZlcnl0aGluZyBvdXQuICovCi0gICAgLyogVE9ETyhrbGVtcG5lcik6IFdlIG91Z2h0IHRvIGdlbmVyYXRlIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMKLSAgICAgICBvbiB0aGUgd2lyZSBoZXJlLiAqLwotICAgIGdycGNfY2FsbF9lbGVtZW50X3NlbmRfY2FuY2VsKGV4ZWNfY3R4LCBlbGVtKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfUEFUSCkgewotICAgIGlmIChjYWxsZC0+c2Vlbl9wYXRoKSB7Ci0gICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIlJlY2VpdmVkIDpwYXRoIHR3aWNlIik7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX3JlbW92ZShleGVjX2N0eCwgYiwgYi0+aWR4Lm5hbWVkLm1ldGhvZCk7CisgIH0gZWxzZSB7CisgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgICAgICAgZ3JwY19lcnJvcl9zZXRfc3RyKEdSUENfRVJST1JfQ1JFQVRFKCJNaXNzaW5nIGhlYWRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9TVFJfS0VZLCAiOm1ldGhvZCIpKTsKKyAgfQorCisgIGlmIChiLT5pZHgubmFtZWQudGUgIT0gTlVMTCkgeworICAgIGlmICghZ3JwY19tZGVsZW1fZXEoYi0+aWR4Lm5hbWVkLnRlLT5tZCwgR1JQQ19NREVMRU1fVEVfVFJBSUxFUlMpKSB7CisgICAgICBhZGRfZXJyb3IoZXJyb3JfbmFtZSwgJmVycm9yLAorICAgICAgICAgICAgICAgIGdycGNfYXR0YWNoX21kX3RvX2Vycm9yKEdSUENfRVJST1JfQ1JFQVRFKCJCYWQgaGVhZGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+aWR4Lm5hbWVkLnRlLT5tZCkpOwogICAgIH0KLSAgICBjYWxsZC0+c2Vlbl9wYXRoID0gMTsKLSAgICByZXR1cm4gbWQ7Ci0gIH0gZWxzZSBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX0FVVEhPUklUWSkgewotICAgIGNhbGxkLT5zZWVuX2F1dGhvcml0eSA9IDE7Ci0gICAgcmV0dXJuIG1kOwotICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9IT1NUKSB7Ci0gICAgLyogdHJhbnNsYXRlIGhvc3QgdG8gOmF1dGhvcml0eSBzaW5jZSA6YXV0aG9yaXR5IG1heSBiZQotICAgICAgIG9taXR0ZWQgKi8KLSAgICBncnBjX21kZWxlbSAqYXV0aG9yaXR5ID0gZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9BVVRIT1JJVFksIEdSUENfTURTVFJfUkVGKG1kLT52YWx1ZSkpOwotICAgIGNhbGxkLT5zZWVuX2F1dGhvcml0eSA9IDE7Ci0gICAgcmV0dXJuIGF1dGhvcml0eTsKLSAgfSBlbHNlIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfR1JQQ19QQVlMT0FEX0JJTikgewotICAgIC8qIFJldHJpZXZlIHRoZSBwYXlsb2FkIGZyb20gdGhlIHZhbHVlIG9mIHRoZSAnZ3JwYy1pbnRlcm5hbC1wYXlsb2FkLWJpbicKLSAgICAgICBoZWFkZXIgZmllbGQgKi8KLSAgICBjYWxsZC0+c2Vlbl9wYXlsb2FkX2JpbiA9IDE7CisgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9yZW1vdmUoZXhlY19jdHgsIGIsIGItPmlkeC5uYW1lZC50ZSk7CisgIH0gZWxzZSB7CisgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgICAgICAgZ3JwY19lcnJvcl9zZXRfc3RyKEdSUENfRVJST1JfQ1JFQVRFKCJNaXNzaW5nIGhlYWRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9TVFJfS0VZLCAidGUiKSk7CisgIH0KKworICBpZiAoYi0+aWR4Lm5hbWVkLnNjaGVtZSAhPSBOVUxMKSB7CisgICAgaWYgKCFncnBjX21kZWxlbV9lcShiLT5pZHgubmFtZWQuc2NoZW1lLT5tZCwgR1JQQ19NREVMRU1fU0NIRU1FX0hUVFApICYmCisgICAgICAgICFncnBjX21kZWxlbV9lcShiLT5pZHgubmFtZWQuc2NoZW1lLT5tZCwgR1JQQ19NREVMRU1fU0NIRU1FX0hUVFBTKSAmJgorICAgICAgICAhZ3JwY19tZGVsZW1fZXEoYi0+aWR4Lm5hbWVkLnNjaGVtZS0+bWQsIEdSUENfTURFTEVNX1NDSEVNRV9HUlBDKSkgeworICAgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgICAgICAgICBncnBjX2F0dGFjaF9tZF90b19lcnJvcihHUlBDX0VSUk9SX0NSRUFURSgiQmFkIGhlYWRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPmlkeC5uYW1lZC5zY2hlbWUtPm1kKSk7CisgICAgfQorICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGV4ZWNfY3R4LCBiLCBiLT5pZHgubmFtZWQuc2NoZW1lKTsKKyAgfSBlbHNlIHsKKyAgICBhZGRfZXJyb3IoZXJyb3JfbmFtZSwgJmVycm9yLAorICAgICAgICAgICAgICBncnBjX2Vycm9yX3NldF9zdHIoR1JQQ19FUlJPUl9DUkVBVEUoIk1pc3NpbmcgaGVhZGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX1NUUl9LRVksICI6c2NoZW1lIikpOworICB9CisKKyAgaWYgKGItPmlkeC5uYW1lZC5jb250ZW50X3R5cGUgIT0gTlVMTCkgeworICAgIGlmICghZ3JwY19tZGVsZW1fZXEoYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZS0+bWQsCisgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9DT05URU5UX1RZUEVfQVBQTElDQVRJT05fU0xBU0hfR1JQQykpIHsKKyAgICAgIGlmIChncnBjX3NsaWNlX2J1Zl9zdGFydF9lcShHUlBDX01EVkFMVUUoYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZS0+bWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX0NPTlRFTlRfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9DT05URU5UX1RZUEVfTEVOR1RIKSAmJgorICAgICAgICAgIChHUlBDX1NMSUNFX1NUQVJUX1BUUihHUlBDX01EVkFMVUUoCisgICAgICAgICAgICAgICBiLT5pZHgubmFtZWQuY29udGVudF90eXBlLT5tZCkpW0VYUEVDVEVEX0NPTlRFTlRfVFlQRV9MRU5HVEhdID09CisgICAgICAgICAgICAgICAnKycgfHwKKyAgICAgICAgICAgR1JQQ19TTElDRV9TVEFSVF9QVFIoR1JQQ19NRFZBTFVFKAorICAgICAgICAgICAgICAgYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZS0+bWQpKVtFWFBFQ1RFRF9DT05URU5UX1RZUEVfTEVOR1RIXSA9PQorICAgICAgICAgICAgICAgJzsnKSkgeworICAgICAgICAvKiBBbHRob3VnaCB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IChjdXJyZW50bHkpIGdlbmVyYXRlIHRoZW0sCisgICAgICAgICAgIGFueSBjdXN0b20gKy1zdWZmaXggaXMgZXhwbGljaXRseSB2YWxpZC4gKi8KKyAgICAgICAgLyogVE9ETyhrbGVtcG5lcik6IFdlIHNob3VsZCBjb25zaWRlciBwcmVhbGxvY2F0aW5nIGNvbW1vbiB2YWx1ZXMgc3VjaAorICAgICAgICAgICBhcyArcHJvdG8gb3IgK2pzb24sIG9yIGF0IGxlYXN0IHN0YXNoaW5nIHRoZW0gaWYgd2Ugc2VlIHRoZW0uICovCisgICAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBTaG91bGQgd2UgYmUgc3VyZmFjaW5nIHRoaXMgdG8gYXBwbGljYXRpb24gY29kZT8gKi8KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFRPRE8oa2xlbXBuZXIpOiBXZSdyZSBjdXJyZW50bHkgYWxsb3dpbmcgdGhpcywgYnV0IHdlIHNob3VsZG4ndAorICAgICAgICAgICBzZWUgaXQgd2l0aG91dCBhIHByb3h5IHNvIGxvZyBmb3Igbm93LiAqLworICAgICAgICBjaGFyICp2YWwgPSBncnBjX2R1bXBfc2xpY2UoR1JQQ19NRFZBTFVFKGItPmlkeC5uYW1lZC5jb250ZW50X3R5cGUtPm1kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0FTQ0lJKTsKKyAgICAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIlVuZXhwZWN0ZWQgY29udGVudC10eXBlICclcyciLCB2YWwpOworICAgICAgICBncHJfZnJlZSh2YWwpOworICAgICAgfQorICAgIH0KKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX3JlbW92ZShleGVjX2N0eCwgYiwgYi0+aWR4Lm5hbWVkLmNvbnRlbnRfdHlwZSk7CisgIH0KKworICBpZiAoYi0+aWR4Lm5hbWVkLnBhdGggPT0gTlVMTCkgeworICAgIGFkZF9lcnJvcihlcnJvcl9uYW1lLCAmZXJyb3IsCisgICAgICAgICAgICAgIGdycGNfZXJyb3Jfc2V0X3N0cihHUlBDX0VSUk9SX0NSRUFURSgiTWlzc2luZyBoZWFkZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfU1RSX0tFWSwgIjpwYXRoIikpOworICB9CisKKyAgaWYgKGItPmlkeC5uYW1lZC5ob3N0ICE9IE5VTEwpIHsKKyAgICBhZGRfZXJyb3IoCisgICAgICAgIGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9zdWJzdGl0dXRlKAorICAgICAgICAgICAgZXhlY19jdHgsIGIsIGItPmlkeC5uYW1lZC5ob3N0LAorICAgICAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAgICAgZXhlY19jdHgsIEdSUENfTURTVFJfQVVUSE9SSVRZLAorICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKEdSUENfTURWQUxVRShiLT5pZHgubmFtZWQuaG9zdC0+bWQpKSkpKTsKKyAgfQorCisgIGlmIChiLT5pZHgubmFtZWQuYXV0aG9yaXR5ID09IE5VTEwpIHsKKyAgICBhZGRfZXJyb3IoZXJyb3JfbmFtZSwgJmVycm9yLAorICAgICAgICAgICAgICBncnBjX2Vycm9yX3NldF9zdHIoR1JQQ19FUlJPUl9DUkVBVEUoIk1pc3NpbmcgaGVhZGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX1NUUl9LRVksICI6YXV0aG9yaXR5IikpOworICB9CisKKyAgaWYgKGItPmlkeC5uYW1lZC5ncnBjX3BheWxvYWRfYmluICE9IE5VTEwpIHsKKyAgICBjYWxsZC0+c2Vlbl9wYXlsb2FkX2JpbiA9IHRydWU7CiAgICAgZ3JwY19zbGljZV9idWZmZXJfYWRkKCZjYWxsZC0+cmVhZF9zbGljZV9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKG1kLT52YWx1ZS0+c2xpY2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01EVkFMVUUoYi0+aWR4Lm5hbWVkLmdycGNfcGF5bG9hZF9iaW4tPm1kKSkpOwogICAgIGdycGNfc2xpY2VfYnVmZmVyX3N0cmVhbV9pbml0KCZjYWxsZC0+cmVhZF9zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbGxkLT5yZWFkX3NsaWNlX2J1ZmZlciwgMCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG1kOworICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGV4ZWNfY3R4LCBiLCBiLT5pZHgubmFtZWQuZ3JwY19wYXlsb2FkX2Jpbik7CiAgIH0KKworICByZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIGhzX29uX3JlY3YoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwKQEAgLTE5Myw0OSArMjMyLDEyIEBACiAgIGdycGNfY2FsbF9lbGVtZW50ICplbGVtID0gdXNlcl9kYXRhOwogICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwogICBpZiAoZXJyID09IEdSUENfRVJST1JfTk9ORSkgewotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGV4ZWNfY3R4LCBjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9maWx0ZXIsIGVsZW0pOwotICAgIC8qIEhhdmUgd2Ugc2VlbiB0aGUgcmVxdWlyZWQgaHR0cDIgdHJhbnNwb3J0IGhlYWRlcnM/Ci0gICAgICAgKDptZXRob2QsIDpzY2hlbWUsIGNvbnRlbnQtdHlwZSwgd2l0aCA6cGF0aCBhbmQgOmF1dGhvcml0eSBjb3ZlcmVkCi0gICAgICAgYXQgdGhlIGNoYW5uZWwgbGV2ZWwgcmlnaHQgbm93KSAqLwotICAgIGlmIChjYWxsZC0+c2Vlbl9tZXRob2QgJiYgY2FsbGQtPnNlZW5fc2NoZW1lICYmIGNhbGxkLT5zZWVuX3RlX3RyYWlsZXJzICYmCi0gICAgICAgIGNhbGxkLT5zZWVuX3BhdGggJiYgY2FsbGQtPnNlZW5fYXV0aG9yaXR5KSB7Ci0gICAgICAvKiBkbyBub3RoaW5nICovCi0gICAgfSBlbHNlIHsKLSAgICAgIGVyciA9IEdSUENfRVJST1JfQ1JFQVRFKCJCYWQgaW5jb21pbmcgSFRUUCBoZWFkZXJzIik7Ci0gICAgICBpZiAoIWNhbGxkLT5zZWVuX3BhdGgpIHsKLSAgICAgICAgZXJyID0gZ3JwY19lcnJvcl9hZGRfY2hpbGQoZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0NSRUFURSgiTWlzc2luZyA6cGF0aCBoZWFkZXIiKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWNhbGxkLT5zZWVuX2F1dGhvcml0eSkgewotICAgICAgICBlcnIgPSBncnBjX2Vycm9yX2FkZF9jaGlsZCgKLSAgICAgICAgICAgIGVyciwgR1JQQ19FUlJPUl9DUkVBVEUoIk1pc3NpbmcgOmF1dGhvcml0eSBoZWFkZXIiKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWNhbGxkLT5zZWVuX21ldGhvZCkgewotICAgICAgICBlcnIgPSBncnBjX2Vycm9yX2FkZF9jaGlsZChlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfQ1JFQVRFKCJNaXNzaW5nIDptZXRob2QgaGVhZGVyIikpOwotICAgICAgfQotICAgICAgaWYgKCFjYWxsZC0+c2Vlbl9zY2hlbWUpIHsKLSAgICAgICAgZXJyID0gZ3JwY19lcnJvcl9hZGRfY2hpbGQoZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0NSRUFURSgiTWlzc2luZyA6c2NoZW1lIGhlYWRlciIpKTsKLSAgICAgIH0KLSAgICAgIGlmICghY2FsbGQtPnNlZW5fdGVfdHJhaWxlcnMpIHsKLSAgICAgICAgZXJyID0gZ3JwY19lcnJvcl9hZGRfY2hpbGQoCi0gICAgICAgICAgICBlcnIsIEdSUENfRVJST1JfQ1JFQVRFKCJNaXNzaW5nIHRlOiB0cmFpbGVycyBoZWFkZXIiKSk7Ci0gICAgICB9Ci0gICAgICAvKiBFcnJvciB0aGlzIGNhbGwgb3V0ICovCi0gICAgICBpZiAoZ3JwY19odHRwX3RyYWNlKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmVycm9yX3N0ciA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycik7Ci0gICAgICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiSW52YWxpZCBodHRwMiBoZWFkZXJzOiAlcyIsIGVycm9yX3N0cik7Ci0gICAgICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcoZXJyb3Jfc3RyKTsKLSAgICAgIH0KLSAgICAgIGdycGNfY2FsbF9lbGVtZW50X3NlbmRfY2FuY2VsKGV4ZWNfY3R4LCBlbGVtKTsKLSAgICB9CisgICAgZXJyID0gc2VydmVyX2ZpbHRlcl9pbmNvbWluZ19tZXRhZGF0YShleGVjX2N0eCwgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOwogICB9IGVsc2UgewogICAgIEdSUENfRVJST1JfUkVGKGVycik7CiAgIH0KLSAgY2FsbGQtPm9uX2RvbmVfcmVjdi0+Y2IoZXhlY19jdHgsIGNhbGxkLT5vbl9kb25lX3JlY3YtPmNiX2FyZywgZXJyKTsKLSAgR1JQQ19FUlJPUl9VTlJFRihlcnIpOworICBncnBjX2Nsb3N1cmVfcnVuKGV4ZWNfY3R4LCBjYWxsZC0+b25fZG9uZV9yZWN2LCBlcnIpOwogfQogCiBzdGF0aWMgdm9pZCBoc19vbl9jb21wbGV0ZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdXNlcl9kYXRhLApAQCAtMjczLDEzICsyNzUsMjMgQEAKICAgLyogZ3JhYiBwb2ludGVycyB0byBvdXIgZGF0YSBmcm9tIHRoZSBjYWxsIGVsZW1lbnQgKi8KICAgY2FsbF9kYXRhICpjYWxsZCA9IGVsZW0tPmNhbGxfZGF0YTsKIAotICBpZiAob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSAhPSBOVUxMICYmICFjYWxsZC0+c2VudF9zdGF0dXMpIHsKLSAgICBjYWxsZC0+c2VudF9zdGF0dXMgPSAxOwotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX2hlYWQob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSwgJmNhbGxkLT5zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9TVEFUVVNfMjAwKTsKLSAgICBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKAotICAgICAgICBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLCAmY2FsbGQtPmNvbnRlbnRfdHlwZSwKLSAgICAgICAgR1JQQ19NREVMRU1fQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX1NMQVNIX0dSUEMpOworICBpZiAob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSAhPSBOVUxMKSB7CisgICAgZ3JwY19lcnJvciAqZXJyb3IgPSBHUlBDX0VSUk9SX05PTkU7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmVycm9yX25hbWUgPSAiRmFpbGVkIHNlbmRpbmcgaW5pdGlhbCBtZXRhZGF0YSI7CisgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfaGVhZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jdHgsIG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWxsZC0+c3RhdHVzLCBHUlBDX01ERUxFTV9TVEFUVVNfMjAwKSk7CisgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbCgKKyAgICAgICAgICAgICAgICAgIGV4ZWNfY3R4LCBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhLCAmY2FsbGQtPmNvbnRlbnRfdHlwZSwKKyAgICAgICAgICAgICAgICAgIEdSUENfTURFTEVNX0NPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9TTEFTSF9HUlBDKSk7CisgICAgYWRkX2Vycm9yKGVycm9yX25hbWUsICZlcnJvciwKKyAgICAgICAgICAgICAgc2VydmVyX2ZpbHRlcl9vdXRnb2luZ19tZXRhZGF0YShleGVjX2N0eCwgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhKSk7CisgICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgeworICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX2ZpbmlzaF93aXRoX2ZhaWx1cmUoZXhlY19jdHgsIG9wLCBlcnJvcik7CisgICAgICByZXR1cm47CisgICAgfQogICB9CiAKICAgaWYgKG9wLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpIHsKQEAgLTMwNiw4ICszMTgsMTIgQEAKICAgfQogCiAgIGlmIChvcC0+c2VuZF90cmFpbGluZ19tZXRhZGF0YSkgewotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGV4ZWNfY3R4LCBvcC0+c2VuZF90cmFpbGluZ19tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfZmlsdGVyX291dGdvaW5nX21ldGFkYXRhLCBlbGVtKTsKKyAgICBncnBjX2Vycm9yICplcnJvciA9IHNlcnZlcl9maWx0ZXJfb3V0Z29pbmdfbWV0YWRhdGEoCisgICAgICAgIGV4ZWNfY3R4LCBlbGVtLCBvcC0+c2VuZF90cmFpbGluZ19tZXRhZGF0YSk7CisgICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgeworICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX2ZpbmlzaF93aXRoX2ZhaWx1cmUoZXhlY19jdHgsIG9wLCBlcnJvcik7CisgICAgICByZXR1cm47CisgICAgfQogICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9jaGFubmVsL21lc3NhZ2Vfc2l6ZV9maWx0ZXIuYyBiL3NyYy9jb3JlL2xpYi9jaGFubmVsL21lc3NhZ2Vfc2l6ZV9maWx0ZXIuYwppbmRleCA4NjIwOTBiLi41ZTIyODYwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvY2hhbm5lbC9tZXNzYWdlX3NpemVfZmlsdGVyLmMKKysrIGIvc3JjL2NvcmUvbGliL2NoYW5uZWwvbWVzc2FnZV9zaXplX2ZpbHRlci5jCkBAIC01OCw3ICs1OCw3IEBACiAgIGdwcl9mcmVlKHZhbHVlKTsKIH0KIAotc3RhdGljIGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZV92dGFibGUgbWVzc2FnZV9zaXplX2xpbWl0c192dGFibGUgPSB7CitzdGF0aWMgY29uc3QgZ3JwY19zbGljZV9oYXNoX3RhYmxlX3Z0YWJsZSBtZXNzYWdlX3NpemVfbGltaXRzX3Z0YWJsZSA9IHsKICAgICBtZXNzYWdlX3NpemVfbGltaXRzX2ZyZWUsIG1lc3NhZ2Vfc2l6ZV9saW1pdHNfY29weX07CiAKIHN0YXRpYyB2b2lkKiBtZXNzYWdlX3NpemVfbGltaXRzX2NyZWF0ZV9mcm9tX2pzb24oY29uc3QgZ3JwY19qc29uKiBqc29uKSB7CkBAIC02OCwxMiArNjgsMTYgQEAKICAgICBpZiAoZmllbGQtPmtleSA9PSBOVUxMKSBjb250aW51ZTsKICAgICBpZiAoc3RyY21wKGZpZWxkLT5rZXksICJtYXhSZXF1ZXN0TWVzc2FnZUJ5dGVzIikgPT0gMCkgewogICAgICAgaWYgKG1heF9yZXF1ZXN0X21lc3NhZ2VfYnl0ZXMgPj0gMCkgcmV0dXJuIE5VTEw7ICAvLyBEdXBsaWNhdGUuCi0gICAgICBpZiAoZmllbGQtPnR5cGUgIT0gR1JQQ19KU09OX1NUUklORykgcmV0dXJuIE5VTEw7CisgICAgICBpZiAoZmllbGQtPnR5cGUgIT0gR1JQQ19KU09OX1NUUklORyAmJiBmaWVsZC0+dHlwZSAhPSBHUlBDX0pTT05fTlVNQkVSKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQogICAgICAgbWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlcyA9IGdwcl9wYXJzZV9ub25uZWdhdGl2ZV9pbnQoZmllbGQtPnZhbHVlKTsKICAgICAgIGlmIChtYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzID09IC0xKSByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChmaWVsZC0+a2V5LCAibWF4UmVzcG9uc2VNZXNzYWdlQnl0ZXMiKSA9PSAwKSB7CiAgICAgICBpZiAobWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXMgPj0gMCkgcmV0dXJuIE5VTEw7ICAvLyBEdXBsaWNhdGUuCi0gICAgICBpZiAoZmllbGQtPnR5cGUgIT0gR1JQQ19KU09OX1NUUklORykgcmV0dXJuIE5VTEw7CisgICAgICBpZiAoZmllbGQtPnR5cGUgIT0gR1JQQ19KU09OX1NUUklORyAmJiBmaWVsZC0+dHlwZSAhPSBHUlBDX0pTT05fTlVNQkVSKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQogICAgICAgbWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXMgPSBncHJfcGFyc2Vfbm9ubmVnYXRpdmVfaW50KGZpZWxkLT52YWx1ZSk7CiAgICAgICBpZiAobWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXMgPT0gLTEpIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwMSw3ICsxMDUsNyBAQAogICBpbnQgbWF4X3NlbmRfc2l6ZTsKICAgaW50IG1heF9yZWN2X3NpemU7CiAgIC8vIE1hcHMgcGF0aCBuYW1lcyB0byBtZXNzYWdlX3NpemVfbGltaXRzIHN0cnVjdHMuCi0gIGdycGNfbWRzdHJfaGFzaF90YWJsZSogbWV0aG9kX2xpbWl0X3RhYmxlOworICBncnBjX3NsaWNlX2hhc2hfdGFibGUqIG1ldGhvZF9saW1pdF90YWJsZTsKIH0gY2hhbm5lbF9kYXRhOwogCiAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gd2UgcmVjZWl2ZSBhIG1lc3NhZ2UuICBIZXJlIHdlIGNoZWNrIHRoZSBtYXgKQEAgLTE0MiwxMCArMTQ2LDEyIEBACiAgICAgY2hhciogbWVzc2FnZV9zdHJpbmc7CiAgICAgZ3ByX2FzcHJpbnRmKCZtZXNzYWdlX3N0cmluZywgIlNlbnQgbWVzc2FnZSBsYXJnZXIgdGhhbiBtYXggKCV1IHZzLiAlZCkiLAogICAgICAgICAgICAgICAgICBvcC0+c2VuZF9tZXNzYWdlLT5sZW5ndGgsIGNhbGxkLT5tYXhfc2VuZF9zaXplKTsKLSAgICBncnBjX3NsaWNlIG1lc3NhZ2UgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhtZXNzYWdlX3N0cmluZyk7CisgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX2ZpbmlzaF93aXRoX2ZhaWx1cmUoCisgICAgICAgIGV4ZWNfY3R4LCBvcCwgZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKG1lc3NhZ2Vfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQpKTsKICAgICBncHJfZnJlZShtZXNzYWdlX3N0cmluZyk7Ci0gICAgZ3JwY19jYWxsX2VsZW1lbnRfc2VuZF9jbG9zZV93aXRoX21lc3NhZ2UoCi0gICAgICAgIGV4ZWNfY3R4LCBlbGVtLCBHUlBDX1NUQVRVU19JTlZBTElEX0FSR1VNRU5ULCAmbWVzc2FnZSk7CisgICAgcmV0dXJuOwogICB9CiAgIC8vIEluamVjdCBjYWxsYmFjayBmb3IgcmVjZWl2aW5nIGEgbWVzc2FnZS4KICAgaWYgKG9wLT5yZWN2X21lc3NhZ2VfcmVhZHkgIT0gTlVMTCkgewpAQCAtMjQzLDcgKzI0OSw3IEBACiBzdGF0aWMgdm9pZCBkZXN0cm95X2NoYW5uZWxfZWxlbShncnBjX2V4ZWNfY3R4KiBleGVjX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9lbGVtZW50KiBlbGVtKSB7CiAgIGNoYW5uZWxfZGF0YSogY2hhbmQgPSBlbGVtLT5jaGFubmVsX2RhdGE7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV91bnJlZihleGVjX2N0eCwgY2hhbmQtPm1ldGhvZF9saW1pdF90YWJsZSk7CisgIGdycGNfc2xpY2VfaGFzaF90YWJsZV91bnJlZihleGVjX2N0eCwgY2hhbmQtPm1ldGhvZF9saW1pdF90YWJsZSk7CiB9CiAKIGNvbnN0IGdycGNfY2hhbm5lbF9maWx0ZXIgZ3JwY19tZXNzYWdlX3NpemVfZmlsdGVyID0gewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2NvbXByZXNzaW9uL2FsZ29yaXRobV9tZXRhZGF0YS5oIGIvc3JjL2NvcmUvbGliL2NvbXByZXNzaW9uL2FsZ29yaXRobV9tZXRhZGF0YS5oCmluZGV4IDFmOWNjMTUuLjU4ZGZlNjIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9jb21wcmVzc2lvbi9hbGdvcml0aG1fbWV0YWRhdGEuaAorKysgYi9zcmMvY29yZS9saWIvY29tcHJlc3Npb24vYWxnb3JpdGhtX21ldGFkYXRhLmgKQEAgLTM4LDE2ICszOCwxNiBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKIAogLyoqIFJldHVybiBjb21wcmVzc2lvbiBhbGdvcml0aG0gYmFzZWQgbWV0YWRhdGEgdmFsdWUgKi8KLWdycGNfbWRzdHIgKmdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX21kc3RyKAorZ3JwY19zbGljZSBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9zbGljZSgKICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG0pOwogCiAvKiogUmV0dXJuIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiYXNlZCBtZXRhZGF0YSBlbGVtZW50IChncnBjLWVuY29kaW5nOiB4eHgpICovCi1ncnBjX21kZWxlbSAqZ3JwY19jb21wcmVzc2lvbl9lbmNvZGluZ19tZGVsZW0oCitncnBjX21kZWxlbSBncnBjX2NvbXByZXNzaW9uX2VuY29kaW5nX21kZWxlbSgKICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG0pOwogCiAvKiogRmluZCBjb21wcmVzc2lvbiBhbGdvcml0aG0gYmFzZWQgb24gcGFzc2VkIGluIG1kc3RyIC0gcmV0dXJucwogICogR1JQQ19DT01QUkVTU19BTEdPUklUSE1fQ09VTlQgb24gZmFpbHVyZSAqLwotZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fZnJvbV9tZHN0cigKLSAgICBncnBjX21kc3RyICpzdHIpOworZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fZnJvbV9zbGljZSgKKyAgICBncnBjX3NsaWNlIHN0cik7CiAKICNlbmRpZiAvKiBHUlBDX0NPUkVfTElCX0NPTVBSRVNTSU9OX0FMR09SSVRITV9NRVRBREFUQV9IICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvY29tcHJlc3Npb24vY29tcHJlc3Npb24uYyBiL3NyYy9jb3JlL2xpYi9jb21wcmVzc2lvbi9jb21wcmVzc2lvbi5jCmluZGV4IDU0ZWZiNWUuLmNlNGY1OTcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9jb21wcmVzc2lvbi9jb21wcmVzc2lvbi5jCisrKyBiL3NyYy9jb3JlL2xpYi9jb21wcmVzc2lvbi9jb21wcmVzc2lvbi5jCkBAIC00MSwzMCArNDEsMjQgQEAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oIgogCi1pbnQgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2UoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoLAoraW50IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlKGdycGNfc2xpY2UgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSAqYWxnb3JpdGhtKSB7CiAgIC8qIHdlIHVzZSBzdHJuY21wIG5vdCBvbmx5IGJlY2F1c2UgaXQncyBzYWZlciAoZXZlbiB0aG91Z2ggaW4gdGhpcyBjYXNlIGl0CiAgICAqIGRvZXNuJ3QgbWF0dGVyLCBnaXZlbiB0aGF0IHdlIGFyZSBjb21wYXJpbmcgYWdhaW5zdCBzdHJpbmcgbGl0ZXJhbHMsIGJ1dAogICAgKiBiZWNhdXNlIHRoaXMgd2F5IHdlIG5lZWRuJ3QgaGF2ZSAibmFtZSIgbmlsLXRlcm1pbmF0ZWQgKHVzZWZ1bCBmb3Igc2xpY2UKICAgICogZGF0YSwgZm9yIGV4YW1wbGUpICovCi0gIEdSUENfQVBJX1RSQUNFKAotICAgICAgImdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlKCIKLSAgICAgICJuYW1lPSUqLipzLCBuYW1lX2xlbmd0aD0lbHUsIGFsZ29yaXRobT0lcCkiLAotICAgICAgNSwgKChpbnQpbmFtZV9sZW5ndGgsIChpbnQpbmFtZV9sZW5ndGgsIG5hbWUsICh1bnNpZ25lZCBsb25nKW5hbWVfbGVuZ3RoLAotICAgICAgICAgIGFsZ29yaXRobSkpOwotICBpZiAobmFtZV9sZW5ndGggPT0gMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIGlmIChzdHJuY21wKG5hbWUsICJpZGVudGl0eSIsIG5hbWVfbGVuZ3RoKSA9PSAwKSB7CisgIGlmIChncnBjX3NsaWNlX2VxKG5hbWUsIEdSUENfTURTVFJfSURFTlRJVFkpKSB7CiAgICAgKmFsZ29yaXRobSA9IEdSUENfQ09NUFJFU1NfTk9ORTsKLSAgfSBlbHNlIGlmIChzdHJuY21wKG5hbWUsICJnemlwIiwgbmFtZV9sZW5ndGgpID09IDApIHsKKyAgICByZXR1cm4gMTsKKyAgfSBlbHNlIGlmIChncnBjX3NsaWNlX2VxKG5hbWUsIEdSUENfTURTVFJfR1pJUCkpIHsKICAgICAqYWxnb3JpdGhtID0gR1JQQ19DT01QUkVTU19HWklQOwotICB9IGVsc2UgaWYgKHN0cm5jbXAobmFtZSwgImRlZmxhdGUiLCBuYW1lX2xlbmd0aCkgPT0gMCkgeworICAgIHJldHVybiAxOworICB9IGVsc2UgaWYgKGdycGNfc2xpY2VfZXEobmFtZSwgR1JQQ19NRFNUUl9ERUZMQVRFKSkgewogICAgICphbGdvcml0aG0gPSBHUlBDX0NPTVBSRVNTX0RFRkxBVEU7CisgICAgcmV0dXJuIDE7CiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIDA7CiAgIH0KLSAgcmV0dXJuIDE7CiB9CiAKIGludCBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9uYW1lKGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGFsZ29yaXRobSwKQEAgLTg3LDE1ICs4MSwxNSBAQAogICByZXR1cm4gMDsKIH0KIAotZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fZnJvbV9tZHN0cigKLSAgICBncnBjX21kc3RyICpzdHIpIHsKLSAgaWYgKHN0ciA9PSBHUlBDX01EU1RSX0lERU5USVRZKSByZXR1cm4gR1JQQ19DT01QUkVTU19OT05FOwotICBpZiAoc3RyID09IEdSUENfTURTVFJfREVGTEFURSkgcmV0dXJuIEdSUENfQ09NUFJFU1NfREVGTEFURTsKLSAgaWYgKHN0ciA9PSBHUlBDX01EU1RSX0daSVApIHJldHVybiBHUlBDX0NPTVBSRVNTX0daSVA7CitncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9mcm9tX3NsaWNlKAorICAgIGdycGNfc2xpY2Ugc3RyKSB7CisgIGlmIChncnBjX3NsaWNlX2VxKHN0ciwgR1JQQ19NRFNUUl9JREVOVElUWSkpIHJldHVybiBHUlBDX0NPTVBSRVNTX05PTkU7CisgIGlmIChncnBjX3NsaWNlX2VxKHN0ciwgR1JQQ19NRFNUUl9ERUZMQVRFKSkgcmV0dXJuIEdSUENfQ09NUFJFU1NfREVGTEFURTsKKyAgaWYgKGdycGNfc2xpY2VfZXEoc3RyLCBHUlBDX01EU1RSX0daSVApKSByZXR1cm4gR1JQQ19DT01QUkVTU19HWklQOwogICByZXR1cm4gR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UOwogfQogCi1ncnBjX21kc3RyICpncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9tZHN0cigKK2dycGNfc2xpY2UgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fc2xpY2UoCiAgICAgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gYWxnb3JpdGhtKSB7CiAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBHUlBDX0NPTVBSRVNTX05PTkU6CkBAIC0xMDUsMTIgKzk5LDEyIEBACiAgICAgY2FzZSBHUlBDX0NPTVBSRVNTX0daSVA6CiAgICAgICByZXR1cm4gR1JQQ19NRFNUUl9HWklQOwogICAgIGNhc2UgR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UOgotICAgICAgcmV0dXJuIE5VTEw7CisgICAgICByZXR1cm4gZ3JwY19lbXB0eV9zbGljZSgpOwogICB9Ci0gIHJldHVybiBOVUxMOworICByZXR1cm4gZ3JwY19lbXB0eV9zbGljZSgpOwogfQogCi1ncnBjX21kZWxlbSAqZ3JwY19jb21wcmVzc2lvbl9lbmNvZGluZ19tZGVsZW0oCitncnBjX21kZWxlbSBncnBjX2NvbXByZXNzaW9uX2VuY29kaW5nX21kZWxlbSgKICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG0pIHsKICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIEdSUENfQ09NUFJFU1NfTk9ORToKQEAgLTEyMiw3ICsxMTYsNyBAQAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQotICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIEdSUENfTUROVUxMOwogfQogCiB2b2lkIGdycGNfY29tcHJlc3Npb25fb3B0aW9uc19pbml0KGdycGNfY29tcHJlc3Npb25fb3B0aW9ucyAqb3B0cykgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2h0dHAvaHR0cGNsaV9zZWN1cml0eV9jb25uZWN0b3IuYyBiL3NyYy9jb3JlL2xpYi9odHRwL2h0dHBjbGlfc2VjdXJpdHlfY29ubmVjdG9yLmMKaW5kZXggNDQwODE3Yy4uZjRmNmYzYyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2h0dHAvaHR0cGNsaV9zZWN1cml0eV9jb25uZWN0b3IuYworKysgYi9zcmMvY29yZS9saWIvaHR0cC9odHRwY2xpX3NlY3VyaXR5X2Nvbm5lY3Rvci5jCkBAIC0xNTYsNyArMTU2LDcgQEAKICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewogICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIlNlY3VyZSB0cmFuc3BvcnQgc2V0dXAgZmFpbGVkOiAlcyIsIG1zZyk7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOworCiAgICAgYy0+ZnVuYyhleGVjX2N0eCwgYy0+YXJnLCBOVUxMKTsKICAgfSBlbHNlIHsKICAgICBncnBjX2NoYW5uZWxfYXJnc19kZXN0cm95KGV4ZWNfY3R4LCBhcmdzLT5hcmdzKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9pb21nci9jbG9zdXJlLmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvY2xvc3VyZS5jCmluZGV4IGRhMGVjODcuLjhlNGVmZDMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9pb21nci9jbG9zdXJlLmMKKysrIGIvc3JjL2NvcmUvbGliL2lvbWdyL2Nsb3N1cmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9jbG9zdXJlLmgiCiAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvYWxsb2MuaD4KKyNpbmNsdWRlIDxncnBjL3N1cHBvcnQvbG9nLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvcHJvZmlsaW5nL3RpbWVycy5oIgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvaW9tZ3IvY2xvc3VyZS5oIGIvc3JjL2NvcmUvbGliL2lvbWdyL2Nsb3N1cmUuaAppbmRleCBlZTM4NmZiLi42NzQ4YjIxIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvY2xvc3VyZS5oCisrKyBiL3NyYy9jb3JlL2xpYi9pb21nci9jbG9zdXJlLmgKQEAgLTY2LDYgKzY2LDcgQEAKICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpOwogICB2b2lkICgqc2NoZWQpKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2Nsb3N1cmUgKmNsb3N1cmUsCiAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpOworICBjb25zdCBjaGFyICpuYW1lOwogfSBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyX3Z0YWJsZTsKIAogLyoqIEFic3RyYWN0IHR5cGUgdGhhdCBjYW4gc2NoZWR1bGUgY2xvc3VyZXMgZm9yIGV4ZWN1dGlvbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2lvbWdyL2NvbWJpbmVyLmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvY29tYmluZXIuYwppbmRleCBjMjZhNzNiLi5iYTZjNzA4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvY29tYmluZXIuYworKysgYi9zcmMvY29yZS9saWIvaW9tZ3IvY29tYmluZXIuYwpAQCAtODYsMTMgKzg2LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcik7CiAKIHN0YXRpYyBjb25zdCBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyX3Z0YWJsZSBzY2hlZHVsZXJfdW5jb3ZlcmVkID0gewotICAgIGNvbWJpbmVyX2V4ZWNfdW5jb3ZlcmVkLCBjb21iaW5lcl9leGVjX3VuY292ZXJlZH07CisgICAgY29tYmluZXJfZXhlY191bmNvdmVyZWQsIGNvbWJpbmVyX2V4ZWNfdW5jb3ZlcmVkLAorICAgICJjb21iaW5lcjppbW1lZGlhdGVseTp1bmNvdmVyZWQifTsKIHN0YXRpYyBjb25zdCBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyX3Z0YWJsZSBzY2hlZHVsZXJfY292ZXJlZCA9IHsKLSAgICBjb21iaW5lcl9leGVjX2NvdmVyZWQsIGNvbWJpbmVyX2V4ZWNfY292ZXJlZH07CisgICAgY29tYmluZXJfZXhlY19jb3ZlcmVkLCBjb21iaW5lcl9leGVjX2NvdmVyZWQsCisgICAgImNvbWJpbmVyOmltbWVkaWF0ZWx5OmNvdmVyZWQifTsKIHN0YXRpYyBjb25zdCBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyX3Z0YWJsZSBmaW5hbGx5X3NjaGVkdWxlcl91bmNvdmVyZWQgPSB7Ci0gICAgY29tYmluZXJfZmluYWxseV9leGVjX3VuY292ZXJlZCwgY29tYmluZXJfZmluYWxseV9leGVjX3VuY292ZXJlZH07CisgICAgY29tYmluZXJfZmluYWxseV9leGVjX3VuY292ZXJlZCwgY29tYmluZXJfZmluYWxseV9leGVjX3VuY292ZXJlZCwKKyAgICAiY29tYmluZXI6ZmluYWxseTp1bmNvdmVyZWQifTsKIHN0YXRpYyBjb25zdCBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyX3Z0YWJsZSBmaW5hbGx5X3NjaGVkdWxlcl9jb3ZlcmVkID0gewotICAgIGNvbWJpbmVyX2ZpbmFsbHlfZXhlY19jb3ZlcmVkLCBjb21iaW5lcl9maW5hbGx5X2V4ZWNfY292ZXJlZH07CisgICAgY29tYmluZXJfZmluYWxseV9leGVjX2NvdmVyZWQsIGNvbWJpbmVyX2ZpbmFsbHlfZXhlY19jb3ZlcmVkLAorICAgICJjb21iaW5lcjpmaW5hbGx5OmNvdmVyZWQifTsKIAogc3RhdGljIHZvaWQgb2ZmbG9hZChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqYXJnLCBncnBjX2Vycm9yICplcnJvcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9pb21nci9lcnJvci5jIGIvc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmMKaW5kZXggZjZiYjNhMC4uZGJlNWIxMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmMKKysrIGIvc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmMKQEAgLTMzLDEzICszMywxMCBAQAogCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmgiCiAKLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgPGdycGMvc3RhdHVzLmg+CiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2FsbG9jLmg+Ci0jaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2F2bC5oPgogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3RyaW5nX3V0aWwuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvdXNlZnVsLmg+CkBAIC00OCw2ICs0NSw3IEBACiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2xvZ193aW5kb3dzLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9wcm9maWxpbmcvdGltZXJzLmgiCiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW50ZWdlcih2b2lkICprZXkpIHt9CkBAIC0xMjgsNiArMTI2LDEwIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICplcnJvcl9zdHJfbmFtZShncnBjX2Vycm9yX3N0cnMga2V5KSB7CiAgIHN3aXRjaCAoa2V5KSB7CisgICAgY2FzZSBHUlBDX0VSUk9SX1NUUl9LRVk6CisgICAgICByZXR1cm4gImtleSI7CisgICAgY2FzZSBHUlBDX0VSUk9SX1NUUl9WQUxVRToKKyAgICAgIHJldHVybiAidmFsdWUiOwogICAgIGNhc2UgR1JQQ19FUlJPUl9TVFJfREVTQ1JJUFRJT046CiAgICAgICByZXR1cm4gImRlc2NyaXB0aW9uIjsKICAgICBjYXNlIEdSUENfRVJST1JfU1RSX09TX0VSUk9SOgpAQCAtMTYwLDE2ICsxNjIsNyBAQAogICBHUFJfVU5SRUFDSEFCTEVfQ09ERShyZXR1cm4gInVua25vd24iKTsKIH0KIAotc3RydWN0IGdycGNfZXJyb3IgewotICBncHJfcmVmY291bnQgcmVmczsKLSAgZ3ByX2F2bCBpbnRzOwotICBncHJfYXZsIHN0cnM7Ci0gIGdwcl9hdmwgdGltZXM7Ci0gIGdwcl9hdmwgZXJyczsKLSAgdWludHB0cl90IG5leHRfZXJyOwotfTsKLQotc3RhdGljIGJvb2wgaXNfc3BlY2lhbChncnBjX2Vycm9yICplcnIpIHsKK2Jvb2wgZ3JwY19lcnJvcl9pc19zcGVjaWFsKGdycGNfZXJyb3IgKmVycikgewogICByZXR1cm4gZXJyID09IEdSUENfRVJST1JfTk9ORSB8fCBlcnIgPT0gR1JQQ19FUlJPUl9PT00gfHwKICAgICAgICAgIGVyciA9PSBHUlBDX0VSUk9SX0NBTkNFTExFRDsKIH0KQEAgLTE3Nyw3ICsxNzAsNyBAQAogI2lmZGVmIEdSUENfRVJST1JfUkVGQ09VTlRfREVCVUcKIGdycGNfZXJyb3IgKmdycGNfZXJyb3JfcmVmKGdycGNfZXJyb3IgKmVyciwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jKSB7Ci0gIGlmIChpc19zcGVjaWFsKGVycikpIHJldHVybiBlcnI7CisgIGlmIChncnBjX2Vycm9yX2lzX3NwZWNpYWwoZXJyKSkgcmV0dXJuIGVycjsKICAgZ3ByX2xvZyhHUFJfREVCVUcsICIlcDogJSIgUFJJZFBUUiAiIC0+ICUiIFBSSWRQVFIgIiBbJXM6JWQgJXNdIiwgZXJyLAogICAgICAgICAgIGVyci0+cmVmcy5jb3VudCwgZXJyLT5yZWZzLmNvdW50ICsgMSwgZmlsZSwgbGluZSwgZnVuYyk7CiAgIGdwcl9yZWYoJmVyci0+cmVmcyk7CkBAIC0xODUsMjUgKzE3OCwyNiBAQAogfQogI2Vsc2UKIGdycGNfZXJyb3IgKmdycGNfZXJyb3JfcmVmKGdycGNfZXJyb3IgKmVycikgewotICBpZiAoaXNfc3BlY2lhbChlcnIpKSByZXR1cm4gZXJyOworICBpZiAoZ3JwY19lcnJvcl9pc19zcGVjaWFsKGVycikpIHJldHVybiBlcnI7CiAgIGdwcl9yZWYoJmVyci0+cmVmcyk7CiAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgZXJyb3JfZGVzdHJveShncnBjX2Vycm9yICplcnIpIHsKLSAgR1BSX0FTU0VSVCghaXNfc3BlY2lhbChlcnIpKTsKKyAgR1BSX0FTU0VSVCghZ3JwY19lcnJvcl9pc19zcGVjaWFsKGVycikpOwogICBncHJfYXZsX3VucmVmKGVyci0+aW50cyk7CiAgIGdwcl9hdmxfdW5yZWYoZXJyLT5zdHJzKTsKICAgZ3ByX2F2bF91bnJlZihlcnItPmVycnMpOwogICBncHJfYXZsX3VucmVmKGVyci0+dGltZXMpOworICBncHJfZnJlZSgodm9pZCAqKWdwcl9hdG1fYWNxX2xvYWQoJmVyci0+ZXJyb3Jfc3RyaW5nKSk7CiAgIGdwcl9mcmVlKGVycik7CiB9CiAKICNpZmRlZiBHUlBDX0VSUk9SX1JFRkNPVU5UX0RFQlVHCiB2b2lkIGdycGNfZXJyb3JfdW5yZWYoZ3JwY19lcnJvciAqZXJyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jKSB7Ci0gIGlmIChpc19zcGVjaWFsKGVycikpIHJldHVybjsKKyAgaWYgKGdycGNfZXJyb3JfaXNfc3BlY2lhbChlcnIpKSByZXR1cm47CiAgIGdwcl9sb2coR1BSX0RFQlVHLCAiJXA6ICUiIFBSSWRQVFIgIiAtPiAlIiBQUklkUFRSICIgWyVzOiVkICVzXSIsIGVyciwKICAgICAgICAgICBlcnItPnJlZnMuY291bnQsIGVyci0+cmVmcy5jb3VudCAtIDEsIGZpbGUsIGxpbmUsIGZ1bmMpOwogICBpZiAoZ3ByX3VucmVmKCZlcnItPnJlZnMpKSB7CkBAIC0yMTIsNyArMjA2LDcgQEAKIH0KICNlbHNlCiB2b2lkIGdycGNfZXJyb3JfdW5yZWYoZ3JwY19lcnJvciAqZXJyKSB7Ci0gIGlmIChpc19zcGVjaWFsKGVycikpIHJldHVybjsKKyAgaWYgKGdycGNfZXJyb3JfaXNfc3BlY2lhbChlcnIpKSByZXR1cm47CiAgIGlmIChncHJfdW5yZWYoJmVyci0+cmVmcykpIHsKICAgICBlcnJvcl9kZXN0cm95KGVycik7CiAgIH0KQEAgLTI0Nyw2ICsyNDEsNyBAQAogICBlcnItPnRpbWVzID0gZ3ByX2F2bF9hZGQoZ3ByX2F2bF9jcmVhdGUoJmF2bF92dGFibGVfdGltZXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikodWludHB0cl90KUdSUENfRVJST1JfVElNRV9DUkVBVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94X3RpbWUoZ3ByX25vdyhHUFJfQ0xPQ0tfUkVBTFRJTUUpKSk7CisgIGdwcl9hdG1fbm9fYmFycmllcl9zdG9yZSgmZXJyLT5lcnJvcl9zdHJpbmcsIDApOwogICBncHJfcmVmX2luaXQoJmVyci0+cmVmcywgMSk7CiAgIEdQUl9USU1FUl9FTkQoImdycGNfZXJyb3JfY3JlYXRlIiwgMCk7CiAgIHJldHVybiBlcnI7CkBAIC0yNTUsOSArMjUwLDEwIEBACiBzdGF0aWMgZ3JwY19lcnJvciAqY29weV9lcnJvcl9hbmRfdW5yZWYoZ3JwY19lcnJvciAqaW4pIHsKICAgR1BSX1RJTUVSX0JFR0lOKCJjb3B5X2Vycm9yX2FuZF91bnJlZiIsIDApOwogICBncnBjX2Vycm9yICpvdXQ7Ci0gIGlmIChpc19zcGVjaWFsKGluKSkgeworICBpZiAoZ3JwY19lcnJvcl9pc19zcGVjaWFsKGluKSkgewogICAgIGlmIChpbiA9PSBHUlBDX0VSUk9SX05PTkUpCi0gICAgICBvdXQgPSBHUlBDX0VSUk9SX0NSRUFURSgibm8gZXJyb3IiKTsKKyAgICAgIG91dCA9IGdycGNfZXJyb3Jfc2V0X2ludChHUlBDX0VSUk9SX0NSRUFURSgibm8gZXJyb3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgR1JQQ19TVEFUVVNfT0spOwogICAgIGVsc2UgaWYgKGluID09IEdSUENfRVJST1JfT09NKQogICAgICAgb3V0ID0gR1JQQ19FUlJPUl9DUkVBVEUoIm9vbSIpOwogICAgIGVsc2UgaWYgKGluID09IEdSUENfRVJST1JfQ0FOQ0VMTEVEKQpAQCAtMjc1LDYgKzI3MSw3IEBACiAgICAgb3V0LT5zdHJzID0gZ3ByX2F2bF9yZWYoaW4tPnN0cnMpOwogICAgIG91dC0+ZXJycyA9IGdwcl9hdmxfcmVmKGluLT5lcnJzKTsKICAgICBvdXQtPnRpbWVzID0gZ3ByX2F2bF9yZWYoaW4tPnRpbWVzKTsKKyAgICBncHJfYXRtX25vX2JhcnJpZXJfc3RvcmUoJm91dC0+ZXJyb3Jfc3RyaW5nLCAwKTsKICAgICBvdXQtPm5leHRfZXJyID0gaW4tPm5leHRfZXJyOwogICAgIGdwcl9yZWZfaW5pdCgmb3V0LT5yZWZzLCAxKTsKICAgICBHUlBDX0VSUk9SX1VOUkVGKGluKTsKQEAgLTI5MiwxNCArMjg5LDI5IEBACiAgIHJldHVybiBuZXc7CiB9CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ3JwY19lcnJvciAqZXJyb3I7CisgIGdycGNfc3RhdHVzX2NvZGUgY29kZTsKKyAgY29uc3QgY2hhciAqbXNnOworfSBzcGVjaWFsX2Vycm9yX3N0YXR1c19tYXA7CitzdGF0aWMgc3BlY2lhbF9lcnJvcl9zdGF0dXNfbWFwIGVycm9yX3N0YXR1c19tYXBbXSA9IHsKKyAgICB7R1JQQ19FUlJPUl9OT05FLCBHUlBDX1NUQVRVU19PSywgTlVMTH0sCisgICAge0dSUENfRVJST1JfQ0FOQ0VMTEVELCBHUlBDX1NUQVRVU19DQU5DRUxMRUQsICJDYW5jZWxsZWQifSwKKyAgICB7R1JQQ19FUlJPUl9PT00sIEdSUENfU1RBVFVTX1JFU09VUkNFX0VYSEFVU1RFRCwgIk91dCBvZiBtZW1vcnkifSwKK307CisKIGJvb2wgZ3JwY19lcnJvcl9nZXRfaW50KGdycGNfZXJyb3IgKmVyciwgZ3JwY19lcnJvcl9pbnRzIHdoaWNoLCBpbnRwdHJfdCAqcCkgewogICBHUFJfVElNRVJfQkVHSU4oImdycGNfZXJyb3JfZ2V0X2ludCIsIDApOwogICB2b2lkICpwcDsKLSAgaWYgKGlzX3NwZWNpYWwoZXJyKSkgewotICAgIGlmIChlcnIgPT0gR1JQQ19FUlJPUl9DQU5DRUxMRUQgJiYgd2hpY2ggPT0gR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMpIHsKLSAgICAgICpwID0gR1JQQ19TVEFUVVNfQ0FOQ0VMTEVEOwotICAgICAgR1BSX1RJTUVSX0VORCgiZ3JwY19lcnJvcl9nZXRfaW50IiwgMCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgaWYgKGdycGNfZXJyb3JfaXNfc3BlY2lhbChlcnIpKSB7CisgICAgaWYgKHdoaWNoID09IEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTKSB7CisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEdQUl9BUlJBWV9TSVpFKGVycm9yX3N0YXR1c19tYXApOyBpKyspIHsKKyAgICAgICAgaWYgKGVycm9yX3N0YXR1c19tYXBbaV0uZXJyb3IgPT0gZXJyKSB7CisgICAgICAgICAgaWYgKHAgIT0gTlVMTCkgKnAgPSBlcnJvcl9zdGF0dXNfbWFwW2ldLmNvZGU7CisgICAgICAgICAgR1BSX1RJTUVSX0VORCgiZ3JwY19lcnJvcl9nZXRfaW50IiwgMCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgIH0KICAgICB9CiAgICAgR1BSX1RJTUVSX0VORCgiZ3JwY19lcnJvcl9nZXRfaW50IiwgMCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0LDY2ICszMzYsMTcgQEAKIH0KIAogY29uc3QgY2hhciAqZ3JwY19lcnJvcl9nZXRfc3RyKGdycGNfZXJyb3IgKmVyciwgZ3JwY19lcnJvcl9zdHJzIHdoaWNoKSB7Ci0gIGlmIChpc19zcGVjaWFsKGVycikpIHJldHVybiBOVUxMOwotICByZXR1cm4gZ3ByX2F2bF9nZXQoZXJyLT5zdHJzLCAodm9pZCAqKSh1aW50cHRyX3Qpd2hpY2gpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGdycGNfZXJyb3IgKmVycm9yOwotICBncnBjX3N0YXR1c19jb2RlIGNvZGU7Ci0gIGNvbnN0IGNoYXIgKm1zZzsKLX0gc3BlY2lhbF9lcnJvcl9zdGF0dXNfbWFwOwotc3RhdGljIHNwZWNpYWxfZXJyb3Jfc3RhdHVzX21hcCBlcnJvcl9zdGF0dXNfbWFwW10gPSB7Ci0gICAge0dSUENfRVJST1JfTk9ORSwgR1JQQ19TVEFUVVNfT0ssICIifSwKLSAgICB7R1JQQ19FUlJPUl9DQU5DRUxMRUQsIEdSUENfU1RBVFVTX0NBTkNFTExFRCwgIlJQQyBjYW5jZWxsZWQifSwKLSAgICB7R1JQQ19FUlJPUl9PT00sIEdSUENfU1RBVFVTX1JFU09VUkNFX0VYSEFVU1RFRCwgIk91dCBvZiBtZW1vcnkifSwKLX07Ci0KLXN0YXRpYyBncnBjX2Vycm9yICpyZWN1cnNpdmVseV9maW5kX2Vycm9yX3dpdGhfc3RhdHVzKGdycGNfZXJyb3IgKmVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cHRyX3QgKnN0YXR1cykgewotICAvLyBJZiB0aGUgZXJyb3IgaXRzZWxmIGhhcyBhIHN0YXR1cyBjb2RlLCByZXR1cm4gaXQuCi0gIGlmIChncnBjX2Vycm9yX2dldF9pbnQoZXJyb3IsIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLCBzdGF0dXMpKSB7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0gIC8vIE90aGVyd2lzZSwgc2VhcmNoIHRocm91Z2ggaXRzIGNoaWxkcmVuLgotICBpbnRwdHJfdCBrZXkgPSAwOwotICB3aGlsZSAodHJ1ZSkgewotICAgIGdycGNfZXJyb3IgKmNoaWxkX2Vycm9yID0gZ3ByX2F2bF9nZXQoZXJyb3ItPmVycnMsICh2b2lkICopa2V5KyspOwotICAgIGlmIChjaGlsZF9lcnJvciA9PSBOVUxMKSBicmVhazsKLSAgICBncnBjX2Vycm9yICpyZXN1bHQgPQotICAgICAgICByZWN1cnNpdmVseV9maW5kX2Vycm9yX3dpdGhfc3RhdHVzKGNoaWxkX2Vycm9yLCBzdGF0dXMpOwotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgcmV0dXJuIHJlc3VsdDsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBncnBjX2Vycm9yX2dldF9zdGF0dXMoZ3JwY19lcnJvciAqZXJyb3IsIGdycGNfc3RhdHVzX2NvZGUgKmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbXNnKSB7Ci0gIC8vIEhhbmRsZSBzcGVjaWFsIGVycm9ycyB2aWEgdGhlIHN0YXRpYyBtYXAuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR1BSX0FSUkFZX1NJWkUoZXJyb3Jfc3RhdHVzX21hcCk7ICsraSkgewotICAgIGlmIChlcnJvciA9PSBlcnJvcl9zdGF0dXNfbWFwW2ldLmVycm9yKSB7Ci0gICAgICAqY29kZSA9IGVycm9yX3N0YXR1c19tYXBbaV0uY29kZTsKLSAgICAgICptc2cgPSBlcnJvcl9zdGF0dXNfbWFwW2ldLm1zZzsKLSAgICAgIHJldHVybjsKKyAgaWYgKGdycGNfZXJyb3JfaXNfc3BlY2lhbChlcnIpKSB7CisgICAgaWYgKHdoaWNoID09IEdSUENfRVJST1JfU1RSX0dSUENfTUVTU0FHRSkgeworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHUFJfQVJSQVlfU0laRShlcnJvcl9zdGF0dXNfbWFwKTsgaSsrKSB7CisgICAgICAgIGlmIChlcnJvcl9zdGF0dXNfbWFwW2ldLmVycm9yID09IGVycikgeworICAgICAgICAgIHJldHVybiBlcnJvcl9zdGF0dXNfbWFwW2ldLm1zZzsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gTlVMTDsKICAgfQotICAvLyBQb3B1bGF0ZSBjb2RlLgotICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQgZXJyb3IgYW5kIHJlY3Vyc2UgdGhyb3VnaCB0aGUgdHJlZSBvZiBjaGlsZHJlbgotICAvLyB1bnRpbCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBoYXMgYSBzdGF0dXMgY29kZS4KLSAgaW50cHRyX3Qgc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5LTk9XTjsgIC8vIERlZmF1bHQgaW4gY2FzZSB3ZSBkb24ndCBmaW5kIG9uZS4KLSAgZ3JwY19lcnJvciAqZm91bmRfZXJyb3IgPSByZWN1cnNpdmVseV9maW5kX2Vycm9yX3dpdGhfc3RhdHVzKGVycm9yLCAmc3RhdHVzKTsKLSAgKmNvZGUgPSAoZ3JwY19zdGF0dXNfY29kZSlzdGF0dXM7Ci0gIC8vIE5vdyBwb3B1bGF0ZSBtc2cuCi0gIC8vIElmIHdlIGZvdW5kIGFuIGVycm9yIHdpdGggYSBzdGF0dXMgY29kZSBhYm92ZSwgdXNlIHRoYXQ7IG90aGVyd2lzZSwKLSAgLy8gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBwYXJlbnQgZXJyb3IuCi0gIGlmIChmb3VuZF9lcnJvciA9PSBOVUxMKSBmb3VuZF9lcnJvciA9IGVycm9yOwotICAvLyBJZiB0aGUgZXJyb3IgaGFzIGEgc3RhdHVzIG1lc3NhZ2UsIHVzZSBpdC4gIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvCi0gIC8vIHRoZSBlcnJvciBkZXNjcmlwdGlvbi4KLSAgKm1zZyA9IGdycGNfZXJyb3JfZ2V0X3N0cihmb3VuZF9lcnJvciwgR1JQQ19FUlJPUl9TVFJfR1JQQ19NRVNTQUdFKTsKLSAgaWYgKCptc2cgPT0gTlVMTCkgewotICAgICptc2cgPSBncnBjX2Vycm9yX2dldF9zdHIoZm91bmRfZXJyb3IsIEdSUENfRVJST1JfU1RSX0RFU0NSSVBUSU9OKTsKLSAgICBpZiAoKm1zZyA9PSBOVUxMKSAqbXNnID0gInVrbm93biBlcnJvciI7ICAvLyBKdXN0IGluIGNhc2UuCi0gIH0KKyAgcmV0dXJuIGdwcl9hdmxfZ2V0KGVyci0+c3RycywgKHZvaWQgKikodWludHB0cl90KXdoaWNoKTsKIH0KIAogZ3JwY19lcnJvciAqZ3JwY19lcnJvcl9hZGRfY2hpbGQoZ3JwY19lcnJvciAqc3JjLCBncnBjX2Vycm9yICpjaGlsZCkgewpAQCAtNTM1LDcgKzQ5OCw2IEBACiAgICpmaXJzdCA9IGZhbHNlOwogICBjb25zdCBjaGFyICplID0gZ3JwY19lcnJvcl9zdHJpbmcobi0+dmFsdWUpOwogICBhcHBlbmRfc3RyKGUsIHMsIHN6LCBjYXApOwotICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKGUpOwogICBhZGRfZXJycyhuLT5yaWdodCwgcywgc3osIGNhcCwgZmlyc3QpOwogfQogCkBAIC01NTcsNyArNTE5LDcgQEAKICAgcmV0dXJuIHN0cmNtcChrYS0+a2V5LCBrYi0+a2V5KTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmZpbmlzaF9rdnMoa3ZfcGFpcnMgKmt2cykgeworc3RhdGljIGNoYXIgKmZpbmlzaF9rdnMoa3ZfcGFpcnMgKmt2cykgewogICBjaGFyICpzID0gTlVMTDsKICAgc2l6ZV90IHN6ID0gMDsKICAgc2l6ZV90IGNhcCA9IDA7CkBAIC01NzgsMTkgKzU0MCwxOCBAQAogICByZXR1cm4gczsKIH0KIAotdm9pZCBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cikgewotICBpZiAoc3RyID09IG5vX2Vycm9yX3N0cmluZykgcmV0dXJuOwotICBpZiAoc3RyID09IG9vbV9lcnJvcl9zdHJpbmcpIHJldHVybjsKLSAgaWYgKHN0ciA9PSBjYW5jZWxsZWRfZXJyb3Jfc3RyaW5nKSByZXR1cm47Ci0gIGdwcl9mcmVlKChjaGFyICopc3RyKTsKLX0KLQogY29uc3QgY2hhciAqZ3JwY19lcnJvcl9zdHJpbmcoZ3JwY19lcnJvciAqZXJyKSB7CiAgIEdQUl9USU1FUl9CRUdJTigiZ3JwY19lcnJvcl9zdHJpbmciLCAwKTsKICAgaWYgKGVyciA9PSBHUlBDX0VSUk9SX05PTkUpIHJldHVybiBub19lcnJvcl9zdHJpbmc7CiAgIGlmIChlcnIgPT0gR1JQQ19FUlJPUl9PT00pIHJldHVybiBvb21fZXJyb3Jfc3RyaW5nOwogICBpZiAoZXJyID09IEdSUENfRVJST1JfQ0FOQ0VMTEVEKSByZXR1cm4gY2FuY2VsbGVkX2Vycm9yX3N0cmluZzsKIAorICB2b2lkICpwID0gKHZvaWQgKilncHJfYXRtX2FjcV9sb2FkKCZlcnItPmVycm9yX3N0cmluZyk7CisgIGlmIChwICE9IE5VTEwpIHsKKyAgICBHUFJfVElNRVJfRU5EKCJncnBjX2Vycm9yX3N0cmluZyIsIDApOworICAgIHJldHVybiBwOworICB9CisKICAga3ZfcGFpcnMga3ZzOwogICBtZW1zZXQoJmt2cywgMCwgc2l6ZW9mKGt2cykpOwogCkBAIC02MDMsNyArNTY0LDEzIEBACiAKICAgcXNvcnQoa3ZzLmt2cywga3ZzLm51bV9rdnMsIHNpemVvZihrdl9wYWlyKSwgY21wX2t2cyk7CiAKLSAgY29uc3QgY2hhciAqb3V0ID0gZmluaXNoX2t2cygma3ZzKTsKKyAgY2hhciAqb3V0ID0gZmluaXNoX2t2cygma3ZzKTsKKworICBpZiAoIWdwcl9hdG1fcmVsX2NhcygmZXJyLT5lcnJvcl9zdHJpbmcsIDAsIChncHJfYXRtKW91dCkpIHsKKyAgICBncHJfZnJlZShvdXQpOworICAgIG91dCA9IChjaGFyICopZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJmVyci0+ZXJyb3Jfc3RyaW5nKTsKKyAgfQorCiAgIEdQUl9USU1FUl9FTkQoImdycGNfZXJyb3Jfc3RyaW5nIiwgMCk7CiAgIHJldHVybiBvdXQ7CiB9CkBAIC02MzgsNyArNjA1LDYgQEAKICAgaWYgKGVycm9yID09IEdSUENfRVJST1JfTk9ORSkgcmV0dXJuIHRydWU7CiAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKICAgZ3ByX2xvZyhmaWxlLCBsaW5lLCBHUFJfTE9HX1NFVkVSSVRZX0VSUk9SLCAiJXM6ICVzIiwgd2hhdCwgbXNnKTsKLSAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOwogICBHUlBDX0VSUk9SX1VOUkVGKGVycm9yKTsKICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmggYi9zcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaAppbmRleCBmM2YzYjgwLi5mZmFjZGFjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaAorKysgYi9zcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaApAQCAtMTI0LDcgKzEyNCwxMSBAQAogICAvLy8gZmlsZW5hbWUgdGhhdCB3ZSB3ZXJlIHRyeWluZyB0byByZWFkL3dyaXRlIHdoZW4gdGhpcyBlcnJvciBvY2N1cnJlZAogICBHUlBDX0VSUk9SX1NUUl9GSUxFTkFNRSwKICAgLy8vIHdoaWNoIGRhdGEgd2FzIHF1ZXVlZCBmb3Igd3JpdGluZyB3aGVuIHRoZSBlcnJvciBvY2N1cnJlZAotICBHUlBDX0VSUk9SX1NUUl9RVUVVRURfQlVGRkVSUworICBHUlBDX0VSUk9SX1NUUl9RVUVVRURfQlVGRkVSUywKKyAgLy8vIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yCisgIEdSUENfRVJST1JfU1RSX0tFWSwKKyAgLy8vIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IKKyAgR1JQQ19FUlJPUl9TVFJfVkFMVUUsCiB9IGdycGNfZXJyb3Jfc3RyczsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTE0MSw3ICsxNDUsNiBAQAogI2RlZmluZSBHUlBDX0VSUk9SX0NBTkNFTExFRCAoKGdycGNfZXJyb3IgKik0KQogCiBjb25zdCBjaGFyICpncnBjX2Vycm9yX3N0cmluZyhncnBjX2Vycm9yICplcnJvcik7Ci12b2lkIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcoY29uc3QgY2hhciAqc3RyKTsKIAogLy8vIENyZWF0ZSBhbiBlcnJvciAtIGJ1dCB1c2UgR1JQQ19FUlJPUl9DUkVBVEUgaW5zdGVhZAogZ3JwY19lcnJvciAqZ3JwY19lcnJvcl9jcmVhdGUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmRlc2MsCkBAIC0xODksMTIgKzE5Miw2IEBACiAvLy8gQ2FsbGVyIGRvZXMgTk9UIG93biByZXR1cm4gdmFsdWUuCiBjb25zdCBjaGFyICpncnBjX2Vycm9yX2dldF9zdHIoZ3JwY19lcnJvciAqZXJyb3IsIGdycGNfZXJyb3Jfc3RycyB3aGljaCk7CiAKLS8vLyBBIHV0aWxpdHkgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzdGF0dXMgY29kZSBhbmQgbWVzc2FnZSB0byBiZSByZXR1cm5lZAotLy8vIHRvIHRoZSBhcHBsaWNhdGlvbi4gIElmIG5vdCBzZXQgaW4gdGhlIHRvcC1sZXZlbCBtZXNzYWdlLCBsb29rcwotLy8vIHRocm91Z2ggY2hpbGQgZXJyb3JzIHVudGlsIGl0IGZpbmRzIHRoZSBmaXJzdCBvbmUgd2l0aCB0aGVzZSBhdHRyaWJ1dGVzLgotdm9pZCBncnBjX2Vycm9yX2dldF9zdGF0dXMoZ3JwY19lcnJvciAqZXJyb3IsIGdycGNfc3RhdHVzX2NvZGUgKmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqbXNnKTsKLQogLy8vIEFkZCBhIGNoaWxkIGVycm9yOiBhbiBlcnJvciB0aGF0IGlzIGJlbGlldmVkIHRvIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcwogLy8vIGVycm9yIG9jY3VycmluZy4gQWxsb3dzIHJvb3QgY2F1c2luZyBoaWdoIGxldmVsIGVycm9ycyBmcm9tIGxvd2VyIGxldmVsCiAvLy8gZXJyb3JzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlbS4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oIGIvc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yX2ludGVybmFsLmgKc2ltaWxhcml0eSBpbmRleCA2NCUKY29weSBmcm9tIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oCmNvcHkgdG8gc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yX2ludGVybmFsLmgKaW5kZXggOTUzYmM5Zi4uMWM4OWVhZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKKysrIGIvc3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yX2ludGVybmFsLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIENvcHlyaWdodCAyMDE1LCBHb29nbGUgSW5jLgorICogQ29weXJpZ2h0IDIwMTYsIEdvb2dsZSBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEsMjAgKzMxLDI0IEBACiAgKgogICovCiAKLSNpZm5kZWYgR1JQQ19DT1JFX0VYVF9UUkFOU1BPUlRfQ0hUVFAyX1RSQU5TUE9SVF9TVEFUVVNfQ09OVkVSU0lPTl9ICi0jZGVmaW5lIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSAorI2lmbmRlZiBHUlBDX0NPUkVfTElCX0lPTUdSX0VSUk9SX0lOVEVSTkFMX0gKKyNkZWZpbmUgR1JQQ19DT1JFX0xJQl9JT01HUl9FUlJPUl9JTlRFUk5BTF9ICiAKLSNpbmNsdWRlIDxncnBjL2dycGMuaD4KLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CiAKLS8qIENvbnZlcnNpb24gb2YgZ3JwYyBzdGF0dXMgY29kZXMgdG8gaHR0cDIgZXJyb3IgY29kZXMgKGZvciBSU1RfU1RSRUFNKSAqLwotZ3JwY19jaHR0cDJfZXJyb3JfY29kZSBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9lcnJvcigKLSAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1cyk7Ci1ncnBjX3N0YXR1c19jb2RlIGdycGNfY2h0dHAyX2h0dHAyX2Vycm9yX3RvX2dycGNfc3RhdHVzKAotICAgIGdycGNfY2h0dHAyX2Vycm9yX2NvZGUgZXJyb3IsIGdwcl90aW1lc3BlYyBkZWFkbGluZSk7CisjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2F2bC5oPgogCi0vKiBDb252ZXJzaW9uIG9mIEhUVFAgc3RhdHVzIGNvZGVzICg6c3RhdHVzKSB0byBncnBjIHN0YXR1cyBjb2RlcyAqLwotZ3JwY19zdGF0dXNfY29kZSBncnBjX2NodHRwMl9odHRwMl9zdGF0dXNfdG9fZ3JwY19zdGF0dXMoaW50IHN0YXR1cyk7Ci1pbnQgZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfc3RhdHVzKGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKTsKK3N0cnVjdCBncnBjX2Vycm9yIHsKKyAgZ3ByX3JlZmNvdW50IHJlZnM7CisgIGdwcl9hdmwgaW50czsKKyAgZ3ByX2F2bCBzdHJzOworICBncHJfYXZsIHRpbWVzOworICBncHJfYXZsIGVycnM7CisgIHVpbnRwdHJfdCBuZXh0X2VycjsKKyAgZ3ByX2F0bSBlcnJvcl9zdHJpbmc7Cit9OwogCi0jZW5kaWYgLyogR1JQQ19DT1JFX0VYVF9UUkFOU1BPUlRfQ0hUVFAyX1RSQU5TUE9SVF9TVEFUVVNfQ09OVkVSU0lPTl9IICovCitib29sIGdycGNfZXJyb3JfaXNfc3BlY2lhbChncnBjX2Vycm9yICplcnIpOworCisjZW5kaWYgLyogR1JQQ19DT1JFX0xJQl9JT01HUl9FUlJPUl9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvaW9tZ3IvZXZfZXBvbGxfbGludXguYyBiL3NyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5jCmluZGV4IDcxNWQwNTcuLjM5YjRkOWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5jCisrKyBiL3NyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5jCkBAIC0zMjEsNyArMzIxLDcgQEAKICNlbmRpZiAvKiBkZWZpbmVkKEdSUENfVFNBTikgKi8KIAogc3RhdGljIGNvbnN0IGdycGNfY2xvc3VyZV9zY2hlZHVsZXJfdnRhYmxlIHdvcmtxdWV1ZV9zY2hlZHVsZXJfdnRhYmxlID0gewotICAgIHdvcmtxdWV1ZV9lbnF1ZXVlLCB3b3JrcXVldWVfZW5xdWV1ZX07CisgICAgd29ya3F1ZXVlX2VucXVldWUsIHdvcmtxdWV1ZV9lbnF1ZXVlLCAid29ya3F1ZXVlIn07CiAKIHN0YXRpYyB2b2lkIHBpX2FkZF9yZWYocG9sbGluZ19pc2xhbmQgKnBpKTsKIHN0YXRpYyB2b2lkIHBpX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBwb2xsaW5nX2lzbGFuZCAqcGkpOwpAQCAtMTUyNyw3ICsxNTI3LDggQEAKICAgICAgICAgYXBwZW5kX2Vycm9yKGVycm9yLCBncnBjX3dha2V1cF9mZF9jb25zdW1lX3dha2V1cCgmZ2xvYmFsX3dha2V1cF9mZCksCiAgICAgICAgICAgICAgICAgICAgICBlcnJfZGVzYyk7CiAgICAgICB9IGVsc2UgaWYgKGRhdGFfcHRyID09ICZwaS0+d29ya3F1ZXVlX3dha2V1cF9mZCkgewotICAgICAgICBhcHBlbmRfZXJyb3IoZXJyb3IsIGdycGNfd2FrZXVwX2ZkX2NvbnN1bWVfd2FrZXVwKCZnbG9iYWxfd2FrZXVwX2ZkKSwKKyAgICAgICAgYXBwZW5kX2Vycm9yKGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgZ3JwY193YWtldXBfZmRfY29uc3VtZV93YWtldXAoJnBpLT53b3JrcXVldWVfd2FrZXVwX2ZkKSwKICAgICAgICAgICAgICAgICAgICAgIGVycl9kZXNjKTsKICAgICAgICAgbWF5YmVfZG9fd29ya3F1ZXVlX3dvcmsoZXhlY19jdHgsIHBpKTsKICAgICAgIH0gZWxzZSBpZiAoZGF0YV9wdHIgPT0gJnBvbGxpbmdfaXNsYW5kX3dha2V1cF9mZCkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2lvbWdyL2V2X3Bvc2l4LmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9zaXguYwppbmRleCAyOTc1ZDYxLi5jMTA2YmE1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9zaXguYworKysgYi9zcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9zaXguYwpAQCAtNTIsNiArNTIsOCBAQAogICogIHRlc3RzICovCiBncnBjX3BvbGxfZnVuY3Rpb25fdHlwZSBncnBjX3BvbGxfZnVuY3Rpb24gPSBwb2xsOwogCitncnBjX3dha2V1cF9mZCBncnBjX2dsb2JhbF93YWtldXBfZmQ7CisKIHN0YXRpYyBjb25zdCBncnBjX2V2ZW50X2VuZ2luZV92dGFibGUgKmdfZXZlbnRfZW5naW5lOwogc3RhdGljIGNvbnN0IGNoYXIgKmdfcG9sbF9zdHJhdGVneV9uYW1lID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2lvbWdyL2V4ZWNfY3R4LmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvZXhlY19jdHguYwppbmRleCA2YWE3ODhmLi44M2JiNDM2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvZXhlY19jdHguYworKysgYi9zcmMvY29yZS9saWIvaW9tZ3IvZXhlY19jdHguYwpAQCAtNDIsMTEgKzQyLDE2IEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3Byb2ZpbGluZy90aW1lcnMuaCIKIAogYm9vbCBncnBjX2V4ZWNfY3R4X3JlYWR5X3RvX2ZpbmlzaChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCkgewotICBpZiAoIWV4ZWNfY3R4LT5jYWNoZWRfcmVhZHlfdG9fZmluaXNoKSB7Ci0gICAgZXhlY19jdHgtPmNhY2hlZF9yZWFkeV90b19maW5pc2ggPSBleGVjX2N0eC0+Y2hlY2tfcmVhZHlfdG9fZmluaXNoKAotICAgICAgICBleGVjX2N0eCwgZXhlY19jdHgtPmNoZWNrX3JlYWR5X3RvX2ZpbmlzaF9hcmcpOworICBpZiAoKGV4ZWNfY3R4LT5mbGFncyAmIEdSUENfRVhFQ19DVFhfRkxBR19JU19GSU5JU0hFRCkgPT0gMCkgeworICAgIGlmIChleGVjX2N0eC0+Y2hlY2tfcmVhZHlfdG9fZmluaXNoKGV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY3R4LT5jaGVja19yZWFkeV90b19maW5pc2hfYXJnKSkgeworICAgICAgZXhlY19jdHgtPmZsYWdzIHw9IEdSUENfRVhFQ19DVFhfRkxBR19JU19GSU5JU0hFRDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHRydWU7CiAgIH0KLSAgcmV0dXJuIGV4ZWNfY3R4LT5jYWNoZWRfcmVhZHlfdG9fZmluaXNoOwogfQogCiBib29sIGdycGNfbmV2ZXJfcmVhZHlfdG9fZmluaXNoKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICphcmdfaWdub3JlZCkgewpAQCAtODIsNyArODcsNyBAQAogfQogCiB2b2lkIGdycGNfZXhlY19jdHhfZmluaXNoKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4KSB7Ci0gIGV4ZWNfY3R4LT5jYWNoZWRfcmVhZHlfdG9fZmluaXNoID0gdHJ1ZTsKKyAgZXhlY19jdHgtPmZsYWdzIHw9IEdSUENfRVhFQ19DVFhfRkxBR19JU19GSU5JU0hFRDsKICAgZ3JwY19leGVjX2N0eF9mbHVzaChleGVjX2N0eCk7CiB9CiAKQEAgLTEwMSw2ICsxMDYsNiBAQAogdm9pZCBncnBjX2V4ZWNfY3R4X2dsb2JhbF9zaHV0ZG93bih2b2lkKSB7fQogCiBzdGF0aWMgY29uc3QgZ3JwY19jbG9zdXJlX3NjaGVkdWxlcl92dGFibGUgZXhlY19jdHhfc2NoZWR1bGVyX3Z0YWJsZSA9IHsKLSAgICBleGVjX2N0eF9ydW4sIGV4ZWNfY3R4X3NjaGVkfTsKKyAgICBleGVjX2N0eF9ydW4sIGV4ZWNfY3R4X3NjaGVkLCAiZXhlY19jdHgifTsKIHN0YXRpYyBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyIGV4ZWNfY3R4X3NjaGVkdWxlciA9IHsmZXhlY19jdHhfc2NoZWR1bGVyX3Z0YWJsZX07CiBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyICpncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4ID0gJmV4ZWNfY3R4X3NjaGVkdWxlcjsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9pb21nci9leGVjX2N0eC5oIGIvc3JjL2NvcmUvbGliL2lvbWdyL2V4ZWNfY3R4LmgKaW5kZXggZTU2NmYxYi4uZjk5YTBmZSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2lvbWdyL2V4ZWNfY3R4LmgKKysrIGIvc3JjL2NvcmUvbGliL2lvbWdyL2V4ZWNfY3R4LmgKQEAgLTQzLDYgKzQzLDEzIEBACiB0eXBlZGVmIHN0cnVjdCBncnBjX3dvcmtxdWV1ZSBncnBjX3dvcmtxdWV1ZTsKIHR5cGVkZWYgc3RydWN0IGdycGNfY29tYmluZXIgZ3JwY19jb21iaW5lcjsKIAorLyogVGhpcyBleGVjX2N0eCBpcyByZWFkeSB0byByZXR1cm46IGVpdGhlciBwcmUtcG9wdWxhdGVkLCBvciBjYWNoZWQgYXMgc29vbiBhcworICAgdGhlIGZpbmlzaF9jaGVjayByZXR1cm5zIHRydWUgKi8KKyNkZWZpbmUgR1JQQ19FWEVDX0NUWF9GTEFHX0lTX0ZJTklTSEVEIDEKKy8qIFRoZSBleGVjX2N0eCdzIHRocmVhZCBpcyAocG90ZW50aWFsbHkpIG93bmVkIGJ5IGEgY2FsbCBvciBjaGFubmVsOiBjYXJlCisgICBzaG91bGQgYmUgZ2l2ZW4gdG8gbm90IGRlbGV0ZSBzYWlkIGNhbGwvY2hhbm5lbCBmcm9tIHRoaXMgZXhlY19jdHggKi8KKyNkZWZpbmUgR1JQQ19FWEVDX0NUWF9GTEFHX1RIUkVBRF9SRVNPVVJDRV9MT09QIDIKKwogLyoqIEV4ZWN1dGlvbiBjb250ZXh0LgogICogIEEgYmFnIG9mIGRhdGEgdGhhdCBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhbG9uZyBhIGNhbGxzdGFjay4KICAqICBHZW5lcmFsbHkgY3JlYXRlZCBhdCBwdWJsaWMgQVBJIGVudHJ5IHBvaW50cywgYW5kIHBhc3NlZCBkb3duIGFzCkBAIC02MywzNiArNzAsMjYgQEAKICAqICAtIEluc3RhbmNlcyBhcmUgYWx3YXlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiB0aGF0CiAgKiAgICB0YWtlcyBpdCwgYW5kIGFsd2F5cyBhcyBhIHBvaW50ZXIgKGdycGNfZXhlY19jdHggaXMgbmV2ZXIgY29waWVkKS4KICAqLwotI2lmbmRlZiBHUlBDX0VYRUNVVElPTl9DT05URVhUX1NBTklUSVpFUgogc3RydWN0IGdycGNfZXhlY19jdHggewogICBncnBjX2Nsb3N1cmVfbGlzdCBjbG9zdXJlX2xpc3Q7CiAgIC8qKiBjdXJyZW50bHkgYWN0aXZlIGNvbWJpbmVyOiB1cGRhdGVkIG9ubHkgdmlhIGNvbWJpbmVyLmMgKi8KICAgZ3JwY19jb21iaW5lciAqYWN0aXZlX2NvbWJpbmVyOwogICAvKiogbGFzdCBhY3RpdmUgY29tYmluZXIgaW4gdGhlIGFjdGl2ZSBjb21iaW5lciBsaXN0ICovCiAgIGdycGNfY29tYmluZXIgKmxhc3RfY29tYmluZXI7Ci0gIGJvb2wgY2FjaGVkX3JlYWR5X3RvX2ZpbmlzaDsKKyAgdWludHB0cl90IGZsYWdzOwogICB2b2lkICpjaGVja19yZWFkeV90b19maW5pc2hfYXJnOwogICBib29sICgqY2hlY2tfcmVhZHlfdG9fZmluaXNoKShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqYXJnKTsKIH07CiAKIC8qIGluaXRpYWxpemVyIGZvciBncnBjX2V4ZWNfY3R4OgogICAgcHJlZmVyIHRvIHVzZSBHUlBDX0VYRUNfQ1RYX0lOSVQgd2hlbmV2ZXIgcG9zc2libGUgKi8KLSNkZWZpbmUgR1JQQ19FWEVDX0NUWF9JTklUX1dJVEhfRklOSVNIX0NIRUNLKGZpbmlzaF9jaGVjaywgZmluaXNoX2NoZWNrX2FyZykgXAotICB7IEdSUENfQ0xPU1VSRV9MSVNUX0lOSVQsIE5VTEwsIE5VTEwsIGZhbHNlLCBmaW5pc2hfY2hlY2tfYXJnLCBmaW5pc2hfY2hlY2sgfQotI2Vsc2UKLXN0cnVjdCBncnBjX2V4ZWNfY3R4IHsKLSAgYm9vbCBjYWNoZWRfcmVhZHlfdG9fZmluaXNoOwotICB2b2lkICpjaGVja19yZWFkeV90b19maW5pc2hfYXJnOwotICBib29sICgqY2hlY2tfcmVhZHlfdG9fZmluaXNoKShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqYXJnKTsKLX07Ci0jZGVmaW5lIEdSUENfRVhFQ19DVFhfSU5JVF9XSVRIX0ZJTklTSF9DSEVDSyhmaW5pc2hfY2hlY2ssIGZpbmlzaF9jaGVja19hcmcpIFwKLSAgeyBmYWxzZSwgZmluaXNoX2NoZWNrX2FyZywgZmluaXNoX2NoZWNrIH0KLSNlbmRpZgorI2RlZmluZSBHUlBDX0VYRUNfQ1RYX0lOSVRJQUxJWkVSKGZsYWdzLCBmaW5pc2hfY2hlY2ssIGZpbmlzaF9jaGVja19hcmcpIFwKKyAgeyBHUlBDX0NMT1NVUkVfTElTVF9JTklULCBOVUxMLCBOVUxMLCBmbGFncywgZmluaXNoX2NoZWNrX2FyZywgZmluaXNoX2NoZWNrIH0KIAogLyogaW5pdGlhbGl6ZSBhbiBleGVjdXRpb24gY29udGV4dCBhdCB0aGUgdG9wIGxldmVsIG9mIGFuIEFQSSBjYWxsIGludG8gZ3JwYwogICAgKHRoaXMgaXMgc2FmZSB0byB1c2UgZWxzZXdoZXJlLCB0aG91Z2ggcG9zc2libHkgbm90IGFzIGVmZmljaWVudCkgKi8KICNkZWZpbmUgR1JQQ19FWEVDX0NUWF9JTklUIFwKLSAgR1JQQ19FWEVDX0NUWF9JTklUX1dJVEhfRklOSVNIX0NIRUNLKGdycGNfYWx3YXlzX3JlYWR5X3RvX2ZpbmlzaCwgTlVMTCkKKyAgR1JQQ19FWEVDX0NUWF9JTklUSUFMSVpFUihHUlBDX0VYRUNfQ1RYX0ZMQUdfSVNfRklOSVNIRUQsIE5VTEwsIE5VTEwpCiAKIGV4dGVybiBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyICpncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4OwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvaW9tZ3IvZXhlY3V0b3IuYyBiL3NyYy9jb3JlL2xpYi9pb21nci9leGVjdXRvci5jCmluZGV4IDg1Mjc3NTUuLmE1YjYyYWEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9pb21nci9leGVjdXRvci5jCisrKyBiL3NyYy9jb3JlL2xpYi9pb21nci9leGVjdXRvci5jCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgZ3ByX211X2Rlc3Ryb3koJmdfZXhlY3V0b3IubXUpOwogfQogCi1zdGF0aWMgY29uc3QgZ3JwY19jbG9zdXJlX3NjaGVkdWxlcl92dGFibGUgZXhlY3V0b3JfdnRhYmxlID0ge2V4ZWN1dG9yX3B1c2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yX3B1c2h9Oworc3RhdGljIGNvbnN0IGdycGNfY2xvc3VyZV9zY2hlZHVsZXJfdnRhYmxlIGV4ZWN1dG9yX3Z0YWJsZSA9IHsKKyAgICBleGVjdXRvcl9wdXNoLCBleGVjdXRvcl9wdXNoLCAiZXhlY3V0b3IifTsKIHN0YXRpYyBncnBjX2Nsb3N1cmVfc2NoZWR1bGVyIGV4ZWN1dG9yX3NjaGVkdWxlciA9IHsmZXhlY3V0b3JfdnRhYmxlfTsKIGdycGNfY2xvc3VyZV9zY2hlZHVsZXIgKmdycGNfZXhlY3V0b3Jfc2NoZWR1bGVyID0gJmV4ZWN1dG9yX3NjaGVkdWxlcjsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9pb21nci9sb2FkX2ZpbGUuYyBiL3NyYy9jb3JlL2xpYi9pb21nci9sb2FkX2ZpbGUuYwppbmRleCAyMTdiYzVkLi5mNDBjOGIyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvbG9hZF9maWxlLmMKKysrIGIvc3JjL2NvcmUvbGliL2lvbWdyL2xvYWRfZmlsZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlICpvdXRwdXQpIHsKICAgdW5zaWduZWQgY2hhciAqY29udGVudHMgPSBOVUxMOwogICBzaXplX3QgY29udGVudHNfc2l6ZSA9IDA7Ci0gIGdycGNfc2xpY2UgcmVzdWx0ID0gZ3ByX2VtcHR5X3NsaWNlKCk7CisgIGdycGNfc2xpY2UgcmVzdWx0ID0gZ3JwY19lbXB0eV9zbGljZSgpOwogICBGSUxFICpmaWxlOwogICBzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CiAgIGdycGNfZXJyb3IgKmVycm9yID0gR1JQQ19FUlJPUl9OT05FOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2lvbWdyL3Jlc291cmNlX3F1b3RhLmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvcmVzb3VyY2VfcXVvdGEuYwppbmRleCAzMTU5MGNkLi5kNTk5NWE1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvcmVzb3VyY2VfcXVvdGEuYworKysgYi9zcmMvY29yZS9saWIvaW9tZ3IvcmVzb3VyY2VfcXVvdGEuYwpAQCAtMzc4LDExICszNzgsMTUgQEAKICAgfQogfQogCitzdGF0aWMgY29uc3QgZ3JwY19zbGljZV9yZWZjb3VudF92dGFibGUgcnVfc2xpY2VfdnRhYmxlID0geworICAgIHJ1X3NsaWNlX3JlZiwgcnVfc2xpY2VfdW5yZWYsIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsLAorICAgIGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGx9OworCiBzdGF0aWMgZ3JwY19zbGljZSBydV9zbGljZV9jcmVhdGUoZ3JwY19yZXNvdXJjZV91c2VyICpyZXNvdXJjZV91c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKSB7CiAgIHJ1X3NsaWNlX3JlZmNvdW50ICpyYyA9IGdwcl9tYWxsb2Moc2l6ZW9mKHJ1X3NsaWNlX3JlZmNvdW50KSArIHNpemUpOwotICByYy0+YmFzZS5yZWYgPSBydV9zbGljZV9yZWY7Ci0gIHJjLT5iYXNlLnVucmVmID0gcnVfc2xpY2VfdW5yZWY7CisgIHJjLT5iYXNlLnZ0YWJsZSA9ICZydV9zbGljZV92dGFibGU7CisgIHJjLT5iYXNlLnN1Yl9yZWZjb3VudCA9ICZyYy0+YmFzZTsKICAgZ3ByX3JlZl9pbml0KCZyYy0+cmVmcywgMSk7CiAgIHJjLT5yZXNvdXJjZV91c2VyID0gcmVzb3VyY2VfdXNlcjsKICAgcmMtPnNpemUgPSBzaXplOwpAQCAtODA0LDEyICs4MDgsMTAgQEAKIHZvaWQgZ3JwY19yZXNvdXJjZV91c2VyX3NsaWNlX2FsbG9jYXRvcl9pbml0KAogICAgIGdycGNfcmVzb3VyY2VfdXNlcl9zbGljZV9hbGxvY2F0b3IgKnNsaWNlX2FsbG9jYXRvciwKICAgICBncnBjX3Jlc291cmNlX3VzZXIgKnJlc291cmNlX3VzZXIsIGdycGNfaW9tZ3JfY2JfZnVuYyBjYiwgdm9pZCAqcCkgewotICBncnBjX2Nsb3N1cmVfaW5pdCgKLSAgICAgICZzbGljZV9hbGxvY2F0b3ItPm9uX2FsbG9jYXRlZCwgcnVfYWxsb2NhdGVkX3NsaWNlcywgc2xpY2VfYWxsb2NhdG9yLAotICAgICAgZ3JwY19jb21iaW5lcl9zY2hlZHVsZXIocmVzb3VyY2VfdXNlci0+cmVzb3VyY2VfcXVvdGEtPmNvbWJpbmVyLCBmYWxzZSkpOwotICBncnBjX2Nsb3N1cmVfaW5pdCgKLSAgICAgICZzbGljZV9hbGxvY2F0b3ItPm9uX2RvbmUsIGNiLCBwLAotICAgICAgZ3JwY19jb21iaW5lcl9zY2hlZHVsZXIocmVzb3VyY2VfdXNlci0+cmVzb3VyY2VfcXVvdGEtPmNvbWJpbmVyLCBmYWxzZSkpOworICBncnBjX2Nsb3N1cmVfaW5pdCgmc2xpY2VfYWxsb2NhdG9yLT5vbl9hbGxvY2F0ZWQsIHJ1X2FsbG9jYXRlZF9zbGljZXMsCisgICAgICAgICAgICAgICAgICAgIHNsaWNlX2FsbG9jYXRvciwgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7CisgIGdycGNfY2xvc3VyZV9pbml0KCZzbGljZV9hbGxvY2F0b3ItPm9uX2RvbmUsIGNiLCBwLAorICAgICAgICAgICAgICAgICAgICBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKICAgc2xpY2VfYWxsb2NhdG9yLT5yZXNvdXJjZV91c2VyID0gcmVzb3VyY2VfdXNlcjsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL2lvbWdyL3RjcF9jbGllbnRfcG9zaXguYyBiL3NyYy9jb3JlL2xpYi9pb21nci90Y3BfY2xpZW50X3Bvc2l4LmMKaW5kZXggOWE3N2M5Mi4uMTZiMGY0ZSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2lvbWdyL3RjcF9jbGllbnRfcG9zaXguYworKysgYi9zcmMvY29yZS9saWIvaW9tZ3IvdGNwX2NsaWVudF9wb3NpeC5jCkBAIC0xMTgsNyArMTE4LDYgQEAKICAgICBjb25zdCBjaGFyICpzdHIgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgICAgZ3ByX2xvZyhHUFJfREVCVUcsICJDTElFTlRfQ09OTkVDVDogJXM6IG9uX2FsYXJtOiBlcnJvcj0lcyIsIGFjLT5hZGRyX3N0ciwKICAgICAgICAgICAgIHN0cik7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhzdHIpOwogICB9CiAgIGdwcl9tdV9sb2NrKCZhYy0+bXUpOwogICBpZiAoYWMtPmZkICE9IE5VTEwpIHsKQEAgLTE3OCw3ICsxNzcsNiBAQAogICAgIGNvbnN0IGNoYXIgKnN0ciA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKICAgICBncHJfbG9nKEdQUl9ERUJVRywgIkNMSUVOVF9DT05ORUNUOiAlczogb25fd3JpdGFibGU6IGVycm9yPSVzIiwKICAgICAgICAgICAgIGFjLT5hZGRyX3N0ciwgc3RyKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKHN0cik7CiAgIH0KIAogICBncHJfbXVfbG9jaygmYWMtPm11KTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9pb21nci90Y3BfcG9zaXguYyBiL3NyYy9jb3JlL2xpYi9pb21nci90Y3BfcG9zaXguYwppbmRleCBlY2U0NDk3Li5hMzNlNjNlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvaW9tZ3IvdGNwX3Bvc2l4LmMKKysrIGIvc3JjL2NvcmUvbGliL2lvbWdyL3RjcF9wb3NpeC5jCkBAIC0xODEsNyArMTgxLDcgQEAKICAgICBzaXplX3QgaTsKICAgICBjb25zdCBjaGFyICpzdHIgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgICAgZ3ByX2xvZyhHUFJfREVCVUcsICJyZWFkOiBlcnJvcj0lcyIsIHN0cik7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhzdHIpOworCiAgICAgZm9yIChpID0gMDsgaSA8IHRjcC0+aW5jb21pbmdfYnVmZmVyLT5jb3VudDsgaSsrKSB7CiAgICAgICBjaGFyICpkdW1wID0gZ3JwY19kdW1wX3NsaWNlKHRjcC0+aW5jb21pbmdfYnVmZmVyLT5zbGljZXNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKQEAgLTQzNSw3ICs0MzUsNiBAQAogICAgIGlmIChncnBjX3RjcF90cmFjZSkgewogICAgICAgY29uc3QgY2hhciAqc3RyID0gZ3JwY19lcnJvcl9zdHJpbmcoZXJyb3IpOwogICAgICAgZ3ByX2xvZyhHUFJfREVCVUcsICJ3cml0ZTogJXMiLCBzdHIpOwotICAgICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhzdHIpOwogICAgIH0KIAogICAgIGdycGNfY2xvc3VyZV9ydW4oZXhlY19jdHgsIGNiLCBlcnJvcik7CkBAIC00ODUsNyArNDg0LDYgQEAKICAgICBpZiAoZ3JwY190Y3BfdHJhY2UpIHsKICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKICAgICAgIGdwcl9sb2coR1BSX0RFQlVHLCAid3JpdGU6ICVzIiwgc3RyKTsKLSAgICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcoc3RyKTsKICAgICB9CiAgICAgZ3JwY19jbG9zdXJlX3NjaGVkKGV4ZWNfY3R4LCBjYiwgZXJyb3IpOwogICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvaW9tZ3IvdGNwX3NlcnZlcl93aW5kb3dzLmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvdGNwX3NlcnZlcl93aW5kb3dzLmMKaW5kZXggZGFmZTg1MS4uYmQ0YjliMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2lvbWdyL3RjcF9zZXJ2ZXJfd2luZG93cy5jCisrKyBiL3NyYy9jb3JlL2xpYi9pb21nci90Y3Bfc2VydmVyX3dpbmRvd3MuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAgIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICBjb25zdCBjaGFyICptc2cgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIlNraXBwaW5nIG9uX2FjY2VwdCBkdWUgdG8gZXJyb3I6ICVzIiwgbXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CisKICAgICBncHJfbXVfdW5sb2NrKCZzcC0+c2VydmVyLT5tdSk7CiAgICAgcmV0dXJuOwogICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvaW9tZ3IvdGNwX3V2LmMgYi9zcmMvY29yZS9saWIvaW9tZ3IvdGNwX3V2LmMKaW5kZXggM2RkYzc5Ny4uN2Y0ZWE0OSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL2lvbWdyL3RjcF91di5jCisrKyBiL3NyYy9jb3JlL2xpYi9pb21nci90Y3BfdXYuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9uZXR3b3JrX3N0YXR1c190cmFja2VyLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL3Jlc291cmNlX3F1b3RhLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL3RjcF91di5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXBwb3J0L3N0cmluZy5oIgogCkBAIC0xNTYsNyArMTU3LDcgQEAKICAgICAgIHNpemVfdCBpOwogICAgICAgY29uc3QgY2hhciAqc3RyID0gZ3JwY19lcnJvcl9zdHJpbmcoZXJyb3IpOwogICAgICAgZ3ByX2xvZyhHUFJfREVCVUcsICJyZWFkOiBlcnJvcj0lcyIsIHN0cik7Ci0gICAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKHN0cik7CisKICAgICAgIGZvciAoaSA9IDA7IGkgPCB0Y3AtPnJlYWRfc2xpY2VzLT5jb3VudDsgaSsrKSB7CiAgICAgICAgIGNoYXIgKmR1bXAgPSBncnBjX2R1bXBfc2xpY2UodGNwLT5yZWFkX3NsaWNlcy0+c2xpY2VzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS9jcmVkZW50aWFscy9nb29nbGVfZGVmYXVsdC9nb29nbGVfZGVmYXVsdF9jcmVkZW50aWFscy5jIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L2NyZWRlbnRpYWxzL2dvb2dsZV9kZWZhdWx0L2dvb2dsZV9kZWZhdWx0X2NyZWRlbnRpYWxzLmMKaW5kZXggZDZlMWZlMy4uYTA5ODc0MSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3NlY3VyaXR5L2NyZWRlbnRpYWxzL2dvb2dsZV9kZWZhdWx0L2dvb2dsZV9kZWZhdWx0X2NyZWRlbnRpYWxzLmMKKysrIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L2NyZWRlbnRpYWxzL2dvb2dsZV9kZWZhdWx0L2dvb2dsZV9kZWZhdWx0X2NyZWRlbnRpYWxzLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICBncnBjX2F1dGhfanNvbl9rZXkga2V5OwogICBncnBjX2F1dGhfcmVmcmVzaF90b2tlbiB0b2tlbjsKICAgZ3JwY19jYWxsX2NyZWRlbnRpYWxzICpyZXN1bHQgPSBOVUxMOwotICBncnBjX3NsaWNlIGNyZWRzX2RhdGEgPSBncHJfZW1wdHlfc2xpY2UoKTsKKyAgZ3JwY19zbGljZSBjcmVkc19kYXRhID0gZ3JwY19lbXB0eV9zbGljZSgpOwogICBncnBjX2Vycm9yICplcnJvciA9IEdSUENfRVJST1JfTk9ORTsKICAgaWYgKGNyZWRzX3BhdGggPT0gTlVMTCkgewogICAgIGVycm9yID0gR1JQQ19FUlJPUl9DUkVBVEUoImNyZWRzX3BhdGggdW5zZXQiKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS9jcmVkZW50aWFscy9wbHVnaW4vcGx1Z2luX2NyZWRlbnRpYWxzLmMgYi9zcmMvY29yZS9saWIvc2VjdXJpdHkvY3JlZGVudGlhbHMvcGx1Z2luL3BsdWdpbl9jcmVkZW50aWFscy5jCmluZGV4IGY5MGQ3ZGMuLjdiYzVkZmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS9jcmVkZW50aWFscy9wbHVnaW4vcGx1Z2luX2NyZWRlbnRpYWxzLmMKKysrIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L2NyZWRlbnRpYWxzL3BsdWdpbi9wbHVnaW5fY3JlZGVudGlhbHMuYwpAQCAtNDIsNyArNDIsOSBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9zeW5jLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS92YWxpZGF0ZV9tZXRhZGF0YS5oIgogCiB0eXBlZGVmIHN0cnVjdCB7CiAgIHZvaWQgKnVzZXJfZGF0YTsKQEAgLTYzLDcgKzY1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JfZGV0YWlscykgewogICAvKiBjYWxsZWQgZnJvbSBhcHBsaWNhdGlvbiBjb2RlICovCi0gIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7CisgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVRJQUxJWkVSKAorICAgICAgR1JQQ19FWEVDX0NUWF9GTEFHX0lTX0ZJTklTSEVEIHwgR1JQQ19FWEVDX0NUWF9GTEFHX1RIUkVBRF9SRVNPVVJDRV9MT09QLAorICAgICAgTlVMTCwgTlVMTCk7CiAgIGdycGNfbWV0YWRhdGFfcGx1Z2luX3JlcXVlc3QgKnIgPSAoZ3JwY19tZXRhZGF0YV9wbHVnaW5fcmVxdWVzdCAqKXJlcXVlc3Q7CiAgIGlmIChzdGF0dXMgIT0gR1JQQ19TVEFUVVNfT0spIHsKICAgICBpZiAoZXJyb3JfZGV0YWlscyAhPSBOVUxMKSB7CkBAIC03NywxMyArODEsMTQgQEAKICAgICBib29sIHNlZW5faWxsZWdhbF9oZWFkZXIgPSBmYWxzZTsKICAgICBncnBjX2NyZWRlbnRpYWxzX21kICptZF9hcnJheSA9IE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9tZDsgaSsrKSB7Ci0gICAgICBpZiAoIWdycGNfaGVhZGVyX2tleV9pc19sZWdhbChtZFtpXS5rZXksIHN0cmxlbihtZFtpXS5rZXkpKSkgewotICAgICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIlBsdWdpbiBhZGRlZCBpbnZhbGlkIG1ldGFkYXRhIGtleTogJXMiLCBtZFtpXS5rZXkpOworICAgICAgaWYgKCFHUlBDX0xPR19JRl9FUlJPUigidmFsaWRhdGVfbWV0YWRhdGFfZnJvbV9wbHVnaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3ZhbGlkYXRlX2hlYWRlcl9rZXlfaXNfbGVnYWwobWRbaV0ua2V5KSkpIHsKICAgICAgICAgc2Vlbl9pbGxlZ2FsX2hlYWRlciA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgICAgfSBlbHNlIGlmICghZ3JwY19pc19iaW5hcnlfaGVhZGVyKG1kW2ldLmtleSwgc3RybGVuKG1kW2ldLmtleSkpICYmCi0gICAgICAgICAgICAgICAgICFncnBjX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWwobWRbaV0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRbaV0udmFsdWVfbGVuZ3RoKSkgeworICAgICAgfSBlbHNlIGlmICghZ3JwY19pc19iaW5hcnlfaGVhZGVyKG1kW2ldLmtleSkgJiYKKyAgICAgICAgICAgICAgICAgIUdSUENfTE9HX0lGX0VSUk9SKAorICAgICAgICAgICAgICAgICAgICAgInZhbGlkYXRlX21ldGFkYXRhX2Zyb21fcGx1Z2luIiwKKyAgICAgICAgICAgICAgICAgICAgIGdycGNfdmFsaWRhdGVfaGVhZGVyX25vbmJpbl92YWx1ZV9pc19sZWdhbChtZFtpXS52YWx1ZSkpKSB7CiAgICAgICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiUGx1Z2luIGFkZGVkIGludmFsaWQgbWV0YWRhdGEgdmFsdWUuIik7CiAgICAgICAgIHNlZW5faWxsZWdhbF9oZWFkZXIgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTk1LDkgKzEwMCw4IEBACiAgICAgfSBlbHNlIGlmIChudW1fbWQgPiAwKSB7CiAgICAgICBtZF9hcnJheSA9IGdwcl9tYWxsb2MobnVtX21kICogc2l6ZW9mKGdycGNfY3JlZGVudGlhbHNfbWQpKTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbWQ7IGkrKykgewotICAgICAgICBtZF9hcnJheVtpXS5rZXkgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhtZFtpXS5rZXkpOwotICAgICAgICBtZF9hcnJheVtpXS52YWx1ZSA9Ci0gICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcihtZFtpXS52YWx1ZSwgbWRbaV0udmFsdWVfbGVuZ3RoKTsKKyAgICAgICAgbWRfYXJyYXlbaV0ua2V5ID0gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwobWRbaV0ua2V5KTsKKyAgICAgICAgbWRfYXJyYXlbaV0udmFsdWUgPSBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChtZFtpXS52YWx1ZSk7CiAgICAgICB9CiAgICAgICByLT5jYigmZXhlY19jdHgsIHItPnVzZXJfZGF0YSwgbWRfYXJyYXksIG51bV9tZCwgR1JQQ19DUkVERU5USUFMU19PSywKICAgICAgICAgICAgIE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9jbGllbnRfYXV0aF9maWx0ZXIuYyBiL3NyYy9jb3JlL2xpYi9zZWN1cml0eS90cmFuc3BvcnQvY2xpZW50X2F1dGhfZmlsdGVyLmMKaW5kZXggYjdmNmZkMi4uY2YwNTZlOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9jbGllbnRfYXV0aF9maWx0ZXIuYworKysgYi9zcmMvY29yZS9saWIvc2VjdXJpdHkvdHJhbnNwb3J0L2NsaWVudF9hdXRoX2ZpbHRlci5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NlY3VyaXR5L2NyZWRlbnRpYWxzL2NyZWRlbnRpYWxzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9zZWN1cml0eV9jb25uZWN0b3IuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKQEAgLTU0LDggKzU1LDEwIEBACiAvKiBXZSBjYW4gaGF2ZSBhIHBlci1jYWxsIGNyZWRlbnRpYWxzLiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICBncnBjX2NhbGxfY3JlZGVudGlhbHMgKmNyZWRzOwotICBncnBjX21kc3RyICpob3N0OwotICBncnBjX21kc3RyICptZXRob2Q7CisgIGJvb2wgaGF2ZV9ob3N0OworICBib29sIGhhdmVfbWV0aG9kOworICBncnBjX3NsaWNlIGhvc3Q7CisgIGdycGNfc2xpY2UgbWV0aG9kOwogICAvKiBwb2xsc2V0e19zZXR9IGJvdW5kIHRvIHRoaXMgY2FsbDsgaWYgd2UgbmVlZCB0byBtYWtlIGV4dGVybmFsCiAgICAgIG5ldHdvcmsgcmVxdWVzdHMsIHRoZXkgc2hvdWxkIGJlIGRvbmUgdW5kZXIgYSBwb2xsc2V0IGFkZGVkIHRvIHRoaXMKICAgICAgcG9sbHNldF9zZXQgc28gdGhhdCB3b3JrIGNhbiBwcm9ncmVzcyB3aGVuIHRoaXMgY2FsbCB3YW50cyB3b3JrIHRvIHByb2dyZXNzCkBAIC04OSwxNCArOTIsMTIgQEAKICAgYXV0aF9tZF9jb250ZXh0LT5jaGFubmVsX2F1dGhfY29udGV4dCA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGJ1YmJsZV91cF9lcnJvcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsIGNvbnN0IGNoYXIgKmVycm9yX21zZykgewotICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOwotICBncHJfbG9nKEdQUl9FUlJPUiwgIkNsaWVudCBzaWRlIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmU6ICVzIiwgZXJyb3JfbXNnKTsKLSAgZ3JwY19zbGljZSBlcnJvcl9zbGljZSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKGVycm9yX21zZyk7Ci0gIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9hZGRfY2xvc2UoZXhlY19jdHgsICZjYWxsZC0+b3AsIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3Jfc2xpY2UpOwotICBncnBjX2NhbGxfbmV4dF9vcChleGVjX2N0eCwgZWxlbSwgJmNhbGxkLT5vcCk7CitzdGF0aWMgdm9pZCBhZGRfZXJyb3IoZ3JwY19lcnJvciAqKmNvbWJpbmVkLCBncnBjX2Vycm9yICplcnJvcikgeworICBpZiAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FKSByZXR1cm47CisgIGlmICgqY29tYmluZWQgPT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgKmNvbWJpbmVkID0gR1JQQ19FUlJPUl9DUkVBVEUoIkNsaWVudCBhdXRoIG1ldGFkYXRhIHBsdWdpbiBlcnJvciIpOworICB9CisgICpjb21iaW5lZCA9IGdycGNfZXJyb3JfYWRkX2NoaWxkKCpjb21iaW5lZCwgZXJyb3IpOwogfQogCiBzdGF0aWMgdm9pZCBvbl9jcmVkZW50aWFsc19tZXRhZGF0YShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdXNlcl9kYXRhLApAQCAtMTEwLDMwICsxMTEsMzcgQEAKICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqbWRiOwogICBzaXplX3QgaTsKICAgcmVzZXRfYXV0aF9tZXRhZGF0YV9jb250ZXh0KCZjYWxsZC0+YXV0aF9tZF9jb250ZXh0KTsKKyAgZ3JwY19lcnJvciAqZXJyb3IgPSBHUlBDX0VSUk9SX05PTkU7CiAgIGlmIChzdGF0dXMgIT0gR1JQQ19DUkVERU5USUFMU19PSykgewotICAgIGJ1YmJsZV91cF9lcnJvcihleGVjX2N0eCwgZWxlbSwgR1JQQ19TVEFUVVNfVU5BVVRIRU5USUNBVEVELAotICAgICAgICAgICAgICAgICAgICAoZXJyb3JfZGV0YWlscyAhPSBOVUxMICYmIHN0cmxlbihlcnJvcl9kZXRhaWxzKSA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yX2RldGFpbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIkNyZWRlbnRpYWxzIGZhaWxlZCB0byBnZXQgbWV0YWRhdGEuIik7Ci0gICAgcmV0dXJuOworICAgIGVycm9yID0gZ3JwY19lcnJvcl9zZXRfaW50KAorICAgICAgICBHUlBDX0VSUk9SX0NSRUFURShlcnJvcl9kZXRhaWxzICE9IE5VTEwgJiYgc3RybGVuKGVycm9yX2RldGFpbHMpID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlcnJvcl9kZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJDcmVkZW50aWFscyBmYWlsZWQgdG8gZ2V0IG1ldGFkYXRhLiIpLAorICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgR1JQQ19TVEFUVVNfVU5BVVRIRU5USUNBVEVEKTsKKyAgfSBlbHNlIHsKKyAgICBHUFJfQVNTRVJUKG51bV9tZCA8PSBNQVhfQ1JFREVOVElBTFNfTUVUQURBVEFfQ09VTlQpOworICAgIEdQUl9BU1NFUlQob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSAhPSBOVUxMKTsKKyAgICBtZGIgPSBvcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbWQ7IGkrKykgeworICAgICAgYWRkX2Vycm9yKCZlcnJvciwKKyAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKAorICAgICAgICAgICAgICAgICAgICBleGVjX2N0eCwgbWRiLCAmY2FsbGQtPm1kX2xpbmtzW2ldLAorICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY3R4LCBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChtZF9lbGVtc1tpXS5rZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwobWRfZWxlbXNbaV0udmFsdWUpKSkpOworICAgIH0KICAgfQotICBHUFJfQVNTRVJUKG51bV9tZCA8PSBNQVhfQ1JFREVOVElBTFNfTUVUQURBVEFfQ09VTlQpOwotICBHUFJfQVNTRVJUKG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEgIT0gTlVMTCk7Ci0gIG1kYiA9IG9wLT5zZW5kX2luaXRpYWxfbWV0YWRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fbWQ7IGkrKykgewotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfYWRkX3RhaWwoCi0gICAgICAgIG1kYiwgJmNhbGxkLT5tZF9saW5rc1tpXSwKLSAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKG1kX2VsZW1zW2ldLmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKG1kX2VsZW1zW2ldLnZhbHVlKSkpOworICBpZiAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgZ3JwY19jYWxsX25leHRfb3AoZXhlY19jdHgsIGVsZW0sIG9wKTsKKyAgfSBlbHNlIHsKKyAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3BfZmluaXNoX3dpdGhfZmFpbHVyZShleGVjX2N0eCwgb3AsIGVycm9yKTsKICAgfQotICBncnBjX2NhbGxfbmV4dF9vcChleGVjX2N0eCwgZWxlbSwgb3ApOwogfQogCiB2b2lkIGJ1aWxkX2F1dGhfbWV0YWRhdGFfY29udGV4dChncnBjX3NlY3VyaXR5X2Nvbm5lY3RvciAqc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2F1dGhfY29udGV4dCAqYXV0aF9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9kYXRhICpjYWxsZCkgewotICBjaGFyICpzZXJ2aWNlID0gZ3ByX3N0cmR1cChncnBjX21kc3RyX2FzX2Nfc3RyaW5nKGNhbGxkLT5tZXRob2QpKTsKKyAgY2hhciAqc2VydmljZSA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoY2FsbGQtPm1ldGhvZCk7CiAgIGNoYXIgKmxhc3Rfc2xhc2ggPSBzdHJyY2hyKHNlcnZpY2UsICcvJyk7CiAgIGNoYXIgKm1ldGhvZF9uYW1lID0gTlVMTDsKICAgY2hhciAqc2VydmljZV91cmwgPSBOVUxMOwpAQCAtMTQ5LDE0ICsxNTcsMTUgQEAKICAgICBtZXRob2RfbmFtZSA9IGdwcl9zdHJkdXAobGFzdF9zbGFzaCArIDEpOwogICB9CiAgIGlmIChtZXRob2RfbmFtZSA9PSBOVUxMKSBtZXRob2RfbmFtZSA9IGdwcl9zdHJkdXAoIiIpOworICBjaGFyICpob3N0ID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhjYWxsZC0+aG9zdCk7CiAgIGdwcl9hc3ByaW50Zigmc2VydmljZV91cmwsICIlczovLyVzJXMiLAotICAgICAgICAgICAgICAgc2MtPnVybF9zY2hlbWUgPT0gTlVMTCA/ICIiIDogc2MtPnVybF9zY2hlbWUsCi0gICAgICAgICAgICAgICBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKGNhbGxkLT5ob3N0KSwgc2VydmljZSk7CisgICAgICAgICAgICAgICBzYy0+dXJsX3NjaGVtZSA9PSBOVUxMID8gIiIgOiBzYy0+dXJsX3NjaGVtZSwgaG9zdCwgc2VydmljZSk7CiAgIGNhbGxkLT5hdXRoX21kX2NvbnRleHQuc2VydmljZV91cmwgPSBzZXJ2aWNlX3VybDsKICAgY2FsbGQtPmF1dGhfbWRfY29udGV4dC5tZXRob2RfbmFtZSA9IG1ldGhvZF9uYW1lOwogICBjYWxsZC0+YXV0aF9tZF9jb250ZXh0LmNoYW5uZWxfYXV0aF9jb250ZXh0ID0KICAgICAgIEdSUENfQVVUSF9DT05URVhUX1JFRihhdXRoX2NvbnRleHQsICJncnBjX2F1dGhfbWV0YWRhdGFfY29udGV4dCIpOwogICBncHJfZnJlZShzZXJ2aWNlKTsKKyAgZ3ByX2ZyZWUoaG9zdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRfc2VjdXJpdHlfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCkBAIC0xODAsOCArMTg5LDEyIEBACiAgICAgY2FsbGQtPmNyZWRzID0gZ3JwY19jb21wb3NpdGVfY2FsbF9jcmVkZW50aWFsc19jcmVhdGUoY2hhbm5lbF9jYWxsX2NyZWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y3JlZHMsIE5VTEwpOwogICAgIGlmIChjYWxsZC0+Y3JlZHMgPT0gTlVMTCkgewotICAgICAgYnViYmxlX3VwX2Vycm9yKGV4ZWNfY3R4LCBlbGVtLCBHUlBDX1NUQVRVU19VTkFVVEhFTlRJQ0FURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIkluY29tcGF0aWJsZSBjcmVkZW50aWFscyBzZXQgb24gY2hhbm5lbCBhbmQgY2FsbC4iKTsKKyAgICAgIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9maW5pc2hfd2l0aF9mYWlsdXJlKAorICAgICAgICAgIGV4ZWNfY3R4LCBvcCwKKyAgICAgICAgICBncnBjX2Vycm9yX3NldF9pbnQoCisgICAgICAgICAgICAgIEdSUENfRVJST1JfQ1JFQVRFKAorICAgICAgICAgICAgICAgICAgIkluY29tcGF0aWJsZSBjcmVkZW50aWFscyBzZXQgb24gY2hhbm5lbCBhbmQgY2FsbC4iKSwKKyAgICAgICAgICAgICAgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsIEdSUENfU1RBVFVTX1VOQVVUSEVOVElDQVRFRCkpOwogICAgICAgcmV0dXJuOwogICAgIH0KICAgfSBlbHNlIHsKQEAgLTIwNyw5ICsyMjAsMTQgQEAKICAgICBzZW5kX3NlY3VyaXR5X21ldGFkYXRhKGV4ZWNfY3R4LCBlbGVtLCAmY2FsbGQtPm9wKTsKICAgfSBlbHNlIHsKICAgICBjaGFyICplcnJvcl9tc2c7CisgICAgY2hhciAqaG9zdCA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoY2FsbGQtPmhvc3QpOwogICAgIGdwcl9hc3ByaW50ZigmZXJyb3JfbXNnLCAiSW52YWxpZCBob3N0ICVzIHNldCBpbiA6YXV0aG9yaXR5IG1ldGFkYXRhLiIsCi0gICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcoY2FsbGQtPmhvc3QpKTsKLSAgICBidWJibGVfdXBfZXJyb3IoZXhlY19jdHgsIGVsZW0sIEdSUENfU1RBVFVTX1VOQVVUSEVOVElDQVRFRCwgZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAgaG9zdCk7CisgICAgZ3ByX2ZyZWUoaG9zdCk7CisgICAgZ3JwY19jYWxsX2VsZW1lbnRfc2lnbmFsX2Vycm9yKAorICAgICAgICBleGVjX2N0eCwgZWxlbSwgZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKGVycm9yX21zZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfVU5BVVRIRU5USUNBVEVEKSk7CiAgICAgZ3ByX2ZyZWUoZXJyb3JfbXNnKTsKICAgfQogfQpAQCAtMjQ3LDIzICsyNjUsMzAgQEAKIAogICBpZiAob3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YSAhPSBOVUxMKSB7CiAgICAgZm9yIChsID0gb3AtPnNlbmRfaW5pdGlhbF9tZXRhZGF0YS0+bGlzdC5oZWFkOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICBncnBjX21kZWxlbSAqbWQgPSBsLT5tZDsKKyAgICAgIGdycGNfbWRlbGVtIG1kID0gbC0+bWQ7CiAgICAgICAvKiBQb2ludGVyIGNvbXBhcmlzb24gaXMgT0sgZm9yIG1kX2VsZW1zIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBjb250ZXh0LgogICAgICAgICovCi0gICAgICBpZiAobWQtPmtleSA9PSBHUlBDX01EU1RSX0FVVEhPUklUWSkgewotICAgICAgICBpZiAoY2FsbGQtPmhvc3QgIT0gTlVMTCkgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgY2FsbGQtPmhvc3QpOwotICAgICAgICBjYWxsZC0+aG9zdCA9IEdSUENfTURTVFJfUkVGKG1kLT52YWx1ZSk7Ci0gICAgICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9QQVRIKSB7Ci0gICAgICAgIGlmIChjYWxsZC0+bWV0aG9kICE9IE5VTEwpIEdSUENfTURTVFJfVU5SRUYoZXhlY19jdHgsIGNhbGxkLT5tZXRob2QpOwotICAgICAgICBjYWxsZC0+bWV0aG9kID0gR1JQQ19NRFNUUl9SRUYobWQtPnZhbHVlKTsKKyAgICAgIGlmIChncnBjX3NsaWNlX2VxKEdSUENfTURLRVkobWQpLCBHUlBDX01EU1RSX0FVVEhPUklUWSkpIHsKKyAgICAgICAgaWYgKGNhbGxkLT5oYXZlX2hvc3QpIHsKKyAgICAgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBjYWxsZC0+aG9zdCk7CisgICAgICAgIH0KKyAgICAgICAgY2FsbGQtPmhvc3QgPSBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChHUlBDX01EVkFMVUUobWQpKTsKKyAgICAgICAgY2FsbGQtPmhhdmVfaG9zdCA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKGdycGNfc2xpY2VfZXEoR1JQQ19NREtFWShtZCksIEdSUENfTURTVFJfUEFUSCkpIHsKKyAgICAgICAgaWYgKGNhbGxkLT5oYXZlX21ldGhvZCkgeworICAgICAgICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIGNhbGxkLT5tZXRob2QpOworICAgICAgICB9CisgICAgICAgIGNhbGxkLT5tZXRob2QgPSBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChHUlBDX01EVkFMVUUobWQpKTsKKyAgICAgICAgY2FsbGQtPmhhdmVfbWV0aG9kID0gdHJ1ZTsKICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGNhbGxkLT5ob3N0ICE9IE5VTEwpIHsKLSAgICAgIGNvbnN0IGNoYXIgKmNhbGxfaG9zdCA9IGdycGNfbWRzdHJfYXNfY19zdHJpbmcoY2FsbGQtPmhvc3QpOworICAgIGlmIChjYWxsZC0+aGF2ZV9ob3N0KSB7CisgICAgICBjaGFyICpjYWxsX2hvc3QgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKGNhbGxkLT5ob3N0KTsKICAgICAgIGNhbGxkLT5vcCA9ICpvcDsgLyogQ29weSBvcCAob3JpZ2luYXRlcyBmcm9tIHRoZSBjYWxsZXIncyBzdGFjaykuICovCiAgICAgICBncnBjX2NoYW5uZWxfc2VjdXJpdHlfY29ubmVjdG9yX2NoZWNrX2NhbGxfaG9zdCgKICAgICAgICAgICBleGVjX2N0eCwgY2hhbmQtPnNlY3VyaXR5X2Nvbm5lY3RvciwgY2FsbF9ob3N0LCBjaGFuZC0+YXV0aF9jb250ZXh0LAogICAgICAgICAgIG9uX2hvc3RfY2hlY2tlZCwgZWxlbSk7CisgICAgICBncHJfZnJlZShjYWxsX2hvc3QpOwogICAgICAgR1BSX1RJTUVSX0VORCgiYXV0aF9zdGFydF90cmFuc3BvcnRfb3AiLCAwKTsKICAgICAgIHJldHVybjsgLyogZWFybHkgZXhpdCAqLwogICAgIH0KQEAgLTI5NiwxMSArMzIxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppZ25vcmVkKSB7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CiAgIGdycGNfY2FsbF9jcmVkZW50aWFsc191bnJlZihleGVjX2N0eCwgY2FsbGQtPmNyZWRzKTsKLSAgaWYgKGNhbGxkLT5ob3N0ICE9IE5VTEwpIHsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBjYWxsZC0+aG9zdCk7CisgIGlmIChjYWxsZC0+aGF2ZV9ob3N0KSB7CisgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2FsbGQtPmhvc3QpOwogICB9Ci0gIGlmIChjYWxsZC0+bWV0aG9kICE9IE5VTEwpIHsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBjYWxsZC0+bWV0aG9kKTsKKyAgaWYgKGNhbGxkLT5oYXZlX21ldGhvZCkgeworICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIGNhbGxkLT5tZXRob2QpOwogICB9CiAgIHJlc2V0X2F1dGhfbWV0YWRhdGFfY29udGV4dCgmY2FsbGQtPmF1dGhfbWRfY29udGV4dCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc2VjdXJpdHkvdHJhbnNwb3J0L3NlY3VyaXR5X2Nvbm5lY3Rvci5jIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9zZWN1cml0eV9jb25uZWN0b3IuYwppbmRleCA1YWEyNmUwLi5iMDkxMjc4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvc2VjdXJpdHkvdHJhbnNwb3J0L3NlY3VyaXR5X2Nvbm5lY3Rvci5jCisrKyBiL3NyYy9jb3JlL2xpYi9zZWN1cml0eS90cmFuc3BvcnQvc2VjdXJpdHlfY29ubmVjdG9yLmMKQEAgLTYwMSw3ICs2MDEsNyBAQAogICAgIHNzbF9zZXJ2ZXJfZGVzdHJveSwgc3NsX3NlcnZlcl9jaGVja19wZWVyfTsKIAogc3RhdGljIGdycGNfc2xpY2UgY29tcHV0ZV9kZWZhdWx0X3BlbV9yb290X2NlcnRzX29uY2Uodm9pZCkgewotICBncnBjX3NsaWNlIHJlc3VsdCA9IGdwcl9lbXB0eV9zbGljZSgpOworICBncnBjX3NsaWNlIHJlc3VsdCA9IGdycGNfZW1wdHlfc2xpY2UoKTsKIAogICAvKiBGaXJzdCB0cnkgdG8gbG9hZCB0aGUgcm9vdHMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICovCiAgIGNoYXIgKmRlZmF1bHRfcm9vdF9jZXJ0c19wYXRoID0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS90cmFuc3BvcnQvc2VjdXJpdHlfaGFuZHNoYWtlci5jIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9zZWN1cml0eV9oYW5kc2hha2VyLmMKaW5kZXggNWU3NTg1Ni4uMzdkNTdkNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9zZWN1cml0eV9oYW5kc2hha2VyLmMKKysrIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9zZWN1cml0eV9oYW5kc2hha2VyLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogICB9CiAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKICAgZ3ByX2xvZyhHUFJfREVCVUcsICJTZWN1cml0eSBoYW5kc2hha2UgZmFpbGVkOiAlcyIsIG1zZyk7Ci0gIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcobXNnKTsKKwogICBpZiAoIWgtPnNodXRkb3duKSB7CiAgICAgLy8gVE9ETyhjdGlsbGVyKTogSXQgaXMgY3VycmVudGx5IG5lY2Vzc2FyeSB0byBzaHV0ZG93biBlbmRwb2ludHMKICAgICAvLyBiZWZvcmUgZGVzdHJveWluZyB0aGVtLCBldmVuIGlmIHdlIGtub3cgdGhhdCB0aGVyZSBhcmUgbm8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS90cmFuc3BvcnQvc2VydmVyX2F1dGhfZmlsdGVyLmMgYi9zcmMvY29yZS9saWIvc2VjdXJpdHkvdHJhbnNwb3J0L3NlcnZlcl9hdXRoX2ZpbHRlci5jCmluZGV4IDVlOThiYTguLjM2ZTgxZDYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS90cmFuc3BvcnQvc2VydmVyX2F1dGhfZmlsdGVyLmMKKysrIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3RyYW5zcG9ydC9zZXJ2ZXJfYXV0aF9maWx0ZXIuYwpAQCAtMzMsMTIgKzMzLDEzIEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9hbGxvYy5oPgorI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KKwogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zZWN1cml0eS9jb250ZXh0L3NlY3VyaXR5X2NvbnRleHQuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc2VjdXJpdHkvY3JlZGVudGlhbHMvY3JlZGVudGlhbHMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc2VjdXJpdHkvdHJhbnNwb3J0L2F1dGhfZmlsdGVycy5oIgotCi0jaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2FsbG9jLmg+Ci0jaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2xvZy5oPgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogCiB0eXBlZGVmIHN0cnVjdCBjYWxsX2RhdGEgewogICBncnBjX21ldGFkYXRhX2JhdGNoICpyZWN2X2luaXRpYWxfbWV0YWRhdGE7CkBAIC02Nyw0OCArNjgsMzQgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZyZXN1bHQpOwogICBmb3IgKGwgPSBiYXRjaC0+bGlzdC5oZWFkOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7CiAgICAgZ3JwY19tZXRhZGF0YSAqdXNyX21kID0gTlVMTDsKLSAgICBncnBjX21kZWxlbSAqbWQgPSBsLT5tZDsKLSAgICBncnBjX21kc3RyICprZXkgPSBtZC0+a2V5OwotICAgIGdycGNfbWRzdHIgKnZhbHVlID0gbWQtPnZhbHVlOworICAgIGdycGNfbWRlbGVtIG1kID0gbC0+bWQ7CisgICAgZ3JwY19zbGljZSBrZXkgPSBHUlBDX01ES0VZKG1kKTsKKyAgICBncnBjX3NsaWNlIHZhbHVlID0gR1JQQ19NRFZBTFVFKG1kKTsKICAgICBpZiAocmVzdWx0LmNvdW50ID09IHJlc3VsdC5jYXBhY2l0eSkgewogICAgICAgcmVzdWx0LmNhcGFjaXR5ID0gR1BSX01BWChyZXN1bHQuY2FwYWNpdHkgKyA4LCByZXN1bHQuY2FwYWNpdHkgKiAyKTsKICAgICAgIHJlc3VsdC5tZXRhZGF0YSA9CiAgICAgICAgICAgZ3ByX3JlYWxsb2MocmVzdWx0Lm1ldGFkYXRhLCByZXN1bHQuY2FwYWNpdHkgKiBzaXplb2YoZ3JwY19tZXRhZGF0YSkpOwogICAgIH0KICAgICB1c3JfbWQgPSAmcmVzdWx0Lm1ldGFkYXRhW3Jlc3VsdC5jb3VudCsrXTsKLSAgICB1c3JfbWQtPmtleSA9IGdycGNfbWRzdHJfYXNfY19zdHJpbmcoa2V5KTsKLSAgICB1c3JfbWQtPnZhbHVlID0gZ3JwY19tZHN0cl9hc19jX3N0cmluZyh2YWx1ZSk7Ci0gICAgdXNyX21kLT52YWx1ZV9sZW5ndGggPSBHUlBDX1NMSUNFX0xFTkdUSCh2YWx1ZS0+c2xpY2UpOworICAgIHVzcl9tZC0+a2V5ID0gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoa2V5KTsKKyAgICB1c3JfbWQtPnZhbHVlID0gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwodmFsdWUpOwogICB9CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBncnBjX21kZWxlbSAqcmVtb3ZlX2NvbnN1bWVkX21kKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICp1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqbWQpIHsKK3N0YXRpYyBncnBjX2ZpbHRlcmVkX21kZWxlbSByZW1vdmVfY29uc3VtZWRfbWQoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gbWQpIHsKICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSB1c2VyX2RhdGE7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CiAgIHNpemVfdCBpOwogICBmb3IgKGkgPSAwOyBpIDwgY2FsbGQtPm51bV9jb25zdW1lZF9tZDsgaSsrKSB7CiAgICAgY29uc3QgZ3JwY19tZXRhZGF0YSAqY29uc3VtZWRfbWQgPSAmY2FsbGQtPmNvbnN1bWVkX21kW2ldOwotICAgIC8qIE1heWJlIHdlIGNvdWxkIGRvIGEgcG9pbnRlciBjb21wYXJpc29uIGJ1dCB3ZSBkbyBub3QgaGF2ZSBhbnkgZ3VhcmFudGVlCi0gICAgICAgdGhhdCB0aGUgbWV0YWRhdGEgcHJvY2Vzc29yIHVzZWQgdGhlIHNhbWUgcG9pbnRlcnMgZm9yIGNvbnN1bWVkX21kIGluIHRoZQotICAgICAgIGNhbGxiYWNrLiAqLwotICAgIGlmIChHUlBDX1NMSUNFX0xFTkdUSChtZC0+a2V5LT5zbGljZSkgIT0gc3RybGVuKGNvbnN1bWVkX21kLT5rZXkpIHx8Ci0gICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKG1kLT52YWx1ZS0+c2xpY2UpICE9IGNvbnN1bWVkX21kLT52YWx1ZV9sZW5ndGgpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAobWVtY21wKEdSUENfU0xJQ0VfU1RBUlRfUFRSKG1kLT5rZXktPnNsaWNlKSwgY29uc3VtZWRfbWQtPmtleSwKLSAgICAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKG1kLT5rZXktPnNsaWNlKSkgPT0gMCAmJgotICAgICAgICBtZW1jbXAoR1JQQ19TTElDRV9TVEFSVF9QVFIobWQtPnZhbHVlLT5zbGljZSksIGNvbnN1bWVkX21kLT52YWx1ZSwKLSAgICAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKG1kLT52YWx1ZS0+c2xpY2UpKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gTlVMTDsgLyogRGVsZXRlLiAqLwotICAgIH0KKyAgICBpZiAoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kKSwgY29uc3VtZWRfbWQtPmtleSkgJiYKKyAgICAgICAgZ3JwY19zbGljZV9lcShHUlBDX01EVkFMVUUobWQpLCBjb25zdW1lZF9tZC0+dmFsdWUpKQorICAgICAgcmV0dXJuIEdSUENfRklMVEVSRURfUkVNT1ZFKCk7CiAgIH0KLSAgcmV0dXJuIG1kOwotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95X29wKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICphcmcsIGdycGNfZXJyb3IgKmVycm9yKSB7Ci0gIGdwcl9mcmVlKGFyZyk7CisgIHJldHVybiBHUlBDX0ZJTFRFUkVEX01ERUxFTShtZCk7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIGFwcGxpY2F0aW9uIGNvZGUgKi8KQEAgLTEzMCwyOSArMTE3LDMzIEBACiAgIGlmIChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfT0spIHsKICAgICBjYWxsZC0+Y29uc3VtZWRfbWQgPSBjb25zdW1lZF9tZDsKICAgICBjYWxsZC0+bnVtX2NvbnN1bWVkX21kID0gbnVtX2NvbnN1bWVkX21kOwotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKCZleGVjX2N0eCwgY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfY29uc3VtZWRfbWQsIGVsZW0pOworICAgIC8qIFRPRE8oY3RpbGxlcik6IHByb3BhZ2F0ZSBlcnJvciAqLworICAgIEdSUENfTE9HX0lGX0VSUk9SKAorICAgICAgICAiZ3JwY19tZXRhZGF0YV9iYXRjaF9maWx0ZXIiLAorICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcigmZXhlY19jdHgsIGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25zdW1lZF9tZCwgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc3BvbnNlIG1ldGFkYXRhIGZpbHRlcmluZyBlcnJvciIpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxkLT5tZC5jb3VudDsgaSsrKSB7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKCZleGVjX2N0eCwgY2FsbGQtPm1kLm1ldGFkYXRhW2ldLmtleSk7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKCZleGVjX2N0eCwgY2FsbGQtPm1kLm1ldGFkYXRhW2ldLnZhbHVlKTsKKyAgICB9CiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZjYWxsZC0+bWQpOwogICAgIGdycGNfY2xvc3VyZV9zY2hlZCgmZXhlY19jdHgsIGNhbGxkLT5vbl9kb25lX3JlY3YsIEdSUENfRVJST1JfTk9ORSk7CiAgIH0gZWxzZSB7Ci0gICAgZ3JwY19zbGljZSBtZXNzYWdlOwotICAgIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqY2xvc2Vfb3AgPSBncHJfbWFsbG9jKHNpemVvZigqY2xvc2Vfb3ApKTsKLSAgICBtZW1zZXQoY2xvc2Vfb3AsIDAsIHNpemVvZigqY2xvc2Vfb3ApKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxkLT5tZC5jb3VudDsgaSsrKSB7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKCZleGVjX2N0eCwgY2FsbGQtPm1kLm1ldGFkYXRhW2ldLmtleSk7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKCZleGVjX2N0eCwgY2FsbGQtPm1kLm1ldGFkYXRhW2ldLnZhbHVlKTsKKyAgICB9CiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZjYWxsZC0+bWQpOwogICAgIGVycm9yX2RldGFpbHMgPSBlcnJvcl9kZXRhaWxzICE9IE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JfZGV0YWlscwogICAgICAgICAgICAgICAgICAgICAgICAgOiAiQXV0aGVudGljYXRpb24gbWV0YWRhdGEgcHJvY2Vzc2luZyBmYWlsZWQuIjsKLSAgICBtZXNzYWdlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoZXJyb3JfZGV0YWlscyk7CiAgICAgY2FsbGQtPnRyYW5zcG9ydF9vcC0+c2VuZF9pbml0aWFsX21ldGFkYXRhID0gTlVMTDsKICAgICBpZiAoY2FsbGQtPnRyYW5zcG9ydF9vcC0+c2VuZF9tZXNzYWdlICE9IE5VTEwpIHsKICAgICAgIGdycGNfYnl0ZV9zdHJlYW1fZGVzdHJveSgmZXhlY19jdHgsIGNhbGxkLT50cmFuc3BvcnRfb3AtPnNlbmRfbWVzc2FnZSk7CiAgICAgICBjYWxsZC0+dHJhbnNwb3J0X29wLT5zZW5kX21lc3NhZ2UgPSBOVUxMOwogICAgIH0KICAgICBjYWxsZC0+dHJhbnNwb3J0X29wLT5zZW5kX3RyYWlsaW5nX21ldGFkYXRhID0gTlVMTDsKLSAgICBjbG9zZV9vcC0+b25fY29tcGxldGUgPQotICAgICAgICBncnBjX2Nsb3N1cmVfY3JlYXRlKGRlc3Ryb3lfb3AsIGNsb3NlX29wLCBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKLSAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3BfYWRkX2Nsb3NlKCZleGVjX2N0eCwgY2xvc2Vfb3AsIHN0YXR1cywgJm1lc3NhZ2UpOwotICAgIGdycGNfY2FsbF9uZXh0X29wKCZleGVjX2N0eCwgZWxlbSwgY2xvc2Vfb3ApOwogICAgIGdycGNfY2xvc3VyZV9zY2hlZCgmZXhlY19jdHgsIGNhbGxkLT5vbl9kb25lX3JlY3YsCiAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZXJyb3Jfc2V0X2ludChHUlBDX0VSUk9SX0NSRUFURShlcnJvcl9kZXRhaWxzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLCBzdGF0dXMpKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zZWN1cml0eS91dGlsL2I2NC5jIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3V0aWwvYjY0LmMKaW5kZXggYmJkN2UzMy4uMDljODIxMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3V0aWwvYjY0LmMKKysrIGIvc3JjL2NvcmUvbGliL3NlY3VyaXR5L3V0aWwvYjY0LmMKQEAgLTIzMiw1ICsyMzIsNSBAQAogCiBmYWlsOgogICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCByZXN1bHQpOwotICByZXR1cm4gZ3ByX2VtcHR5X3NsaWNlKCk7CisgIHJldHVybiBncnBjX2VtcHR5X3NsaWNlKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYyBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jCmluZGV4IDc2MTE4MTAuLjFjZGRmMDYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jCisrKyBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jCkBAIC00MSwyMyArNDEsMzAgQEAKIAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9leGVjX2N0eC5oIgogCi1ncnBjX3NsaWNlIGdwcl9lbXB0eV9zbGljZSh2b2lkKSB7CitjaGFyICpncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKGdycGNfc2xpY2Ugc2xpY2UpIHsKKyAgY2hhciAqb3V0ID0gZ3ByX21hbGxvYyhHUlBDX1NMSUNFX0xFTkdUSChzbGljZSkgKyAxKTsKKyAgbWVtY3B5KG91dCwgR1JQQ19TTElDRV9TVEFSVF9QVFIoc2xpY2UpLCBHUlBDX1NMSUNFX0xFTkdUSChzbGljZSkpOworICBvdXRbR1JQQ19TTElDRV9MRU5HVEgoc2xpY2UpXSA9IDA7CisgIHJldHVybiBvdXQ7Cit9CisKK2dycGNfc2xpY2UgZ3JwY19lbXB0eV9zbGljZSh2b2lkKSB7CiAgIGdycGNfc2xpY2Ugb3V0OwotICBvdXQucmVmY291bnQgPSAwOworICBvdXQucmVmY291bnQgPSBOVUxMOwogICBvdXQuZGF0YS5pbmxpbmVkLmxlbmd0aCA9IDA7CiAgIHJldHVybiBvdXQ7CiB9CiAKIGdycGNfc2xpY2UgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoZ3JwY19zbGljZSBzbGljZSkgewogICBpZiAoc2xpY2UucmVmY291bnQpIHsKLSAgICBzbGljZS5yZWZjb3VudC0+cmVmKHNsaWNlLnJlZmNvdW50KTsKKyAgICBzbGljZS5yZWZjb3VudC0+dnRhYmxlLT5yZWYoc2xpY2UucmVmY291bnQpOwogICB9CiAgIHJldHVybiBzbGljZTsKIH0KIAogdm9pZCBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIHNsaWNlKSB7CiAgIGlmIChzbGljZS5yZWZjb3VudCkgewotICAgIHNsaWNlLnJlZmNvdW50LT51bnJlZihleGVjX2N0eCwgc2xpY2UucmVmY291bnQpOworICAgIHNsaWNlLnJlZmNvdW50LT52dGFibGUtPnVucmVmKGV4ZWNfY3R4LCBzbGljZS5yZWZjb3VudCk7CiAgIH0KIH0KIApAQCAtNzgsMTYgKzg1LDI0IEBACiBzdGF0aWMgdm9pZCBub29wX3JlZih2b2lkICp1bnVzZWQpIHt9CiBzdGF0aWMgdm9pZCBub29wX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICp1bnVzZWQpIHt9CiAKLXN0YXRpYyBncnBjX3NsaWNlX3JlZmNvdW50IG5vb3BfcmVmY291bnQgPSB7bm9vcF9yZWYsIG5vb3BfdW5yZWZ9Oworc3RhdGljIGNvbnN0IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlIG5vb3BfcmVmY291bnRfdnRhYmxlID0geworICAgIG5vb3BfcmVmLCBub29wX3VucmVmLCBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbCwKKyAgICBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsfTsKK3N0YXRpYyBncnBjX3NsaWNlX3JlZmNvdW50IG5vb3BfcmVmY291bnQgPSB7Jm5vb3BfcmVmY291bnRfdnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9vcF9yZWZjb3VudH07CiAKLWdycGNfc2xpY2UgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoY29uc3QgY2hhciAqcykgeworZ3JwY19zbGljZSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlcihjb25zdCB2b2lkICpzLCBzaXplX3QgbGVuKSB7CiAgIGdycGNfc2xpY2Ugc2xpY2U7CiAgIHNsaWNlLnJlZmNvdW50ID0gJm5vb3BfcmVmY291bnQ7CiAgIHNsaWNlLmRhdGEucmVmY291bnRlZC5ieXRlcyA9ICh1aW50OF90ICopczsKLSAgc2xpY2UuZGF0YS5yZWZjb3VudGVkLmxlbmd0aCA9IHN0cmxlbihzKTsKKyAgc2xpY2UuZGF0YS5yZWZjb3VudGVkLmxlbmd0aCA9IGxlbjsKICAgcmV0dXJuIHNsaWNlOwogfQogCitncnBjX3NsaWNlIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGNvbnN0IGNoYXIgKnMpIHsKKyAgcmV0dXJuIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyKHMsIHN0cmxlbihzKSk7Cit9CisKIC8qIGdycGNfc2xpY2VfbmV3IHN1cHBvcnQgc3RydWN0dXJlcyAtIHdlIGNyZWF0ZSBhIHJlZmNvdW50IG9iamVjdCBleHRlbmRlZAogICAgd2l0aCB0aGUgdXNlciBwcm92aWRlZCBkYXRhIHBvaW50ZXIgJiBkZXN0cm95IGZ1bmN0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBuZXdfc2xpY2VfcmVmY291bnQgewpAQCAtMTEwLDE0ICsxMjUsMTggQEAKICAgfQogfQogCitzdGF0aWMgY29uc3QgZ3JwY19zbGljZV9yZWZjb3VudF92dGFibGUgbmV3X3NsaWNlX3Z0YWJsZSA9IHsKKyAgICBuZXdfc2xpY2VfcmVmLCBuZXdfc2xpY2VfdW5yZWYsIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsLAorICAgIGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGx9OworCiBncnBjX3NsaWNlIGdycGNfc2xpY2VfbmV3X3dpdGhfdXNlcl9kYXRhKHZvaWQgKnAsIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkZXN0cm95KSh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpIHsKICAgZ3JwY19zbGljZSBzbGljZTsKICAgbmV3X3NsaWNlX3JlZmNvdW50ICpyYyA9IGdwcl9tYWxsb2Moc2l6ZW9mKG5ld19zbGljZV9yZWZjb3VudCkpOwogICBncHJfcmVmX2luaXQoJnJjLT5yZWZzLCAxKTsKLSAgcmMtPnJjLnJlZiA9IG5ld19zbGljZV9yZWY7Ci0gIHJjLT5yYy51bnJlZiA9IG5ld19zbGljZV91bnJlZjsKKyAgcmMtPnJjLnZ0YWJsZSA9ICZuZXdfc2xpY2VfdnRhYmxlOworICByYy0+cmMuc3ViX3JlZmNvdW50ID0gJnJjLT5yYzsKICAgcmMtPnVzZXJfZGVzdHJveSA9IGRlc3Ryb3k7CiAgIHJjLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CiAKQEAgLTE1NSwxNCArMTc0LDE4IEBACiAgIH0KIH0KIAorc3RhdGljIGNvbnN0IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlIG5ld193aXRoX2xlbl92dGFibGUgPSB7CisgICAgbmV3X3dpdGhfbGVuX3JlZiwgbmV3X3dpdGhfbGVuX3VucmVmLCBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbCwKKyAgICBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsfTsKKwogZ3JwY19zbGljZSBncnBjX3NsaWNlX25ld193aXRoX2xlbih2b2lkICpwLCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZGVzdHJveSkodm9pZCAqLCBzaXplX3QpKSB7CiAgIGdycGNfc2xpY2Ugc2xpY2U7CiAgIG5ld193aXRoX2xlbl9zbGljZV9yZWZjb3VudCAqcmMgPQogICAgICAgZ3ByX21hbGxvYyhzaXplb2YobmV3X3dpdGhfbGVuX3NsaWNlX3JlZmNvdW50KSk7CiAgIGdwcl9yZWZfaW5pdCgmcmMtPnJlZnMsIDEpOwotICByYy0+cmMucmVmID0gbmV3X3dpdGhfbGVuX3JlZjsKLSAgcmMtPnJjLnVucmVmID0gbmV3X3dpdGhfbGVuX3VucmVmOworICByYy0+cmMudnRhYmxlID0gJm5ld193aXRoX2xlbl92dGFibGU7CisgIHJjLT5yYy5zdWJfcmVmY291bnQgPSAmcmMtPnJjOwogICByYy0+dXNlcl9kZXN0cm95ID0gZGVzdHJveTsKICAgcmMtPnVzZXJfZGF0YSA9IHA7CiAgIHJjLT51c2VyX2xlbmd0aCA9IGxlbjsKQEAgLTIwMCw2ICsyMjMsMTAgQEAKICAgfQogfQogCitzdGF0aWMgY29uc3QgZ3JwY19zbGljZV9yZWZjb3VudF92dGFibGUgbWFsbG9jX3Z0YWJsZSA9IHsKKyAgICBtYWxsb2NfcmVmLCBtYWxsb2NfdW5yZWYsIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsLAorICAgIGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGx9OworCiBncnBjX3NsaWNlIGdycGNfc2xpY2VfbWFsbG9jKHNpemVfdCBsZW5ndGgpIHsKICAgZ3JwY19zbGljZSBzbGljZTsKIApAQCAtMjE5LDggKzI0Niw4IEBACiAgICAgICAgdGhpcyByZWZlcmVuY2UuICovCiAgICAgZ3ByX3JlZl9pbml0KCZyYy0+cmVmcywgMSk7CiAKLSAgICByYy0+YmFzZS5yZWYgPSBtYWxsb2NfcmVmOwotICAgIHJjLT5iYXNlLnVucmVmID0gbWFsbG9jX3VucmVmOworICAgIHJjLT5iYXNlLnZ0YWJsZSA9ICZtYWxsb2NfdnRhYmxlOworICAgIHJjLT5iYXNlLnN1Yl9yZWZjb3VudCA9ICZyYy0+YmFzZTsKIAogICAgIC8qIEJ1aWxkIHVwIHRoZSBzbGljZSB0byBiZSByZXR1cm5lZC4gKi8KICAgICAvKiBUaGUgc2xpY2VzIHJlZmNvdW50IHBvaW50cyBiYWNrIHRvIHRoZSBhbGxvY2F0ZWQgYmxvY2suICovCkBAIC0yNDcsNyArMjc0LDcgQEAKICAgICBHUFJfQVNTRVJUKHNvdXJjZS5kYXRhLnJlZmNvdW50ZWQubGVuZ3RoID49IGVuZCk7CiAKICAgICAvKiBCdWlsZCB0aGUgcmVzdWx0ICovCi0gICAgc3Vic2V0LnJlZmNvdW50ID0gc291cmNlLnJlZmNvdW50OworICAgIHN1YnNldC5yZWZjb3VudCA9IHNvdXJjZS5yZWZjb3VudC0+c3ViX3JlZmNvdW50OwogICAgIC8qIFBvaW50IGludG8gdGhlIHNvdXJjZSBhcnJheSAqLwogICAgIHN1YnNldC5kYXRhLnJlZmNvdW50ZWQuYnl0ZXMgPSBzb3VyY2UuZGF0YS5yZWZjb3VudGVkLmJ5dGVzICsgYmVnaW47CiAgICAgc3Vic2V0LmRhdGEucmVmY291bnRlZC5sZW5ndGggPSBlbmQgLSBiZWdpbjsKQEAgLTI3Myw3ICszMDAsNyBAQAogICB9IGVsc2UgewogICAgIHN1YnNldCA9IGdycGNfc2xpY2Vfc3ViX25vX3JlZihzb3VyY2UsIGJlZ2luLCBlbmQpOwogICAgIC8qIEJ1bXAgdGhlIHJlZmNvdW50ICovCi0gICAgc3Vic2V0LnJlZmNvdW50LT5yZWYoc3Vic2V0LnJlZmNvdW50KTsKKyAgICBzdWJzZXQucmVmY291bnQtPnZ0YWJsZS0+cmVmKHN1YnNldC5yZWZjb3VudCk7CiAgIH0KICAgcmV0dXJuIHN1YnNldDsKIH0KQEAgLTMwMCwxMyArMzI3LDE0IEBACiAgICAgICAgICAgICAgdGFpbF9sZW5ndGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAvKiBCdWlsZCB0aGUgcmVzdWx0ICovCi0gICAgICB0YWlsLnJlZmNvdW50ID0gc291cmNlLT5yZWZjb3VudDsKKyAgICAgIHRhaWwucmVmY291bnQgPSBzb3VyY2UtPnJlZmNvdW50LT5zdWJfcmVmY291bnQ7CiAgICAgICAvKiBCdW1wIHRoZSByZWZjb3VudCAqLwotICAgICAgdGFpbC5yZWZjb3VudC0+cmVmKHRhaWwucmVmY291bnQpOworICAgICAgdGFpbC5yZWZjb3VudC0+dnRhYmxlLT5yZWYodGFpbC5yZWZjb3VudCk7CiAgICAgICAvKiBQb2ludCBpbnRvIHRoZSBzb3VyY2UgYXJyYXkgKi8KICAgICAgIHRhaWwuZGF0YS5yZWZjb3VudGVkLmJ5dGVzID0gc291cmNlLT5kYXRhLnJlZmNvdW50ZWQuYnl0ZXMgKyBzcGxpdDsKICAgICAgIHRhaWwuZGF0YS5yZWZjb3VudGVkLmxlbmd0aCA9IHRhaWxfbGVuZ3RoOwogICAgIH0KKyAgICBzb3VyY2UtPnJlZmNvdW50ID0gc291cmNlLT5yZWZjb3VudC0+c3ViX3JlZmNvdW50OwogICAgIHNvdXJjZS0+ZGF0YS5yZWZjb3VudGVkLmxlbmd0aCA9IHNwbGl0OwogICB9CiAKQEAgLTMzMiwxOCArMzYwLDIwIEBACiAgICAgaGVhZC5yZWZjb3VudCA9IE5VTEw7CiAgICAgaGVhZC5kYXRhLmlubGluZWQubGVuZ3RoID0gKHVpbnQ4X3Qpc3BsaXQ7CiAgICAgbWVtY3B5KGhlYWQuZGF0YS5pbmxpbmVkLmJ5dGVzLCBzb3VyY2UtPmRhdGEucmVmY291bnRlZC5ieXRlcywgc3BsaXQpOworICAgIHNvdXJjZS0+cmVmY291bnQgPSBzb3VyY2UtPnJlZmNvdW50LT5zdWJfcmVmY291bnQ7CiAgICAgc291cmNlLT5kYXRhLnJlZmNvdW50ZWQuYnl0ZXMgKz0gc3BsaXQ7CiAgICAgc291cmNlLT5kYXRhLnJlZmNvdW50ZWQubGVuZ3RoIC09IHNwbGl0OwogICB9IGVsc2UgewogICAgIEdQUl9BU1NFUlQoc291cmNlLT5kYXRhLnJlZmNvdW50ZWQubGVuZ3RoID49IHNwbGl0KTsKIAogICAgIC8qIEJ1aWxkIHRoZSByZXN1bHQgKi8KLSAgICBoZWFkLnJlZmNvdW50ID0gc291cmNlLT5yZWZjb3VudDsKKyAgICBoZWFkLnJlZmNvdW50ID0gc291cmNlLT5yZWZjb3VudC0+c3ViX3JlZmNvdW50OwogICAgIC8qIEJ1bXAgdGhlIHJlZmNvdW50ICovCi0gICAgaGVhZC5yZWZjb3VudC0+cmVmKGhlYWQucmVmY291bnQpOworICAgIGhlYWQucmVmY291bnQtPnZ0YWJsZS0+cmVmKGhlYWQucmVmY291bnQpOwogICAgIC8qIFBvaW50IGludG8gdGhlIHNvdXJjZSBhcnJheSAqLwogICAgIGhlYWQuZGF0YS5yZWZjb3VudGVkLmJ5dGVzID0gc291cmNlLT5kYXRhLnJlZmNvdW50ZWQuYnl0ZXM7CiAgICAgaGVhZC5kYXRhLnJlZmNvdW50ZWQubGVuZ3RoID0gc3BsaXQ7CisgICAgc291cmNlLT5yZWZjb3VudCA9IHNvdXJjZS0+cmVmY291bnQtPnN1Yl9yZWZjb3VudDsKICAgICBzb3VyY2UtPmRhdGEucmVmY291bnRlZC5ieXRlcyArPSBzcGxpdDsKICAgICBzb3VyY2UtPmRhdGEucmVmY291bnRlZC5sZW5ndGggLT0gc3BsaXQ7CiAgIH0KQEAgLTM1MSw2ICszODEsMTkgQEAKICAgcmV0dXJuIGhlYWQ7CiB9CiAKK2ludCBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbChncnBjX3NsaWNlIGEsIGdycGNfc2xpY2UgYikgeworICByZXR1cm4gR1JQQ19TTElDRV9MRU5HVEgoYSkgPT0gR1JQQ19TTElDRV9MRU5HVEgoYikgJiYKKyAgICAgICAgIDAgPT0gbWVtY21wKEdSUENfU0xJQ0VfU1RBUlRfUFRSKGEpLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihiKSwKKyAgICAgICAgICAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKGEpKTsKK30KKworaW50IGdycGNfc2xpY2VfZXEoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpIHsKKyAgaWYgKGEucmVmY291bnQgJiYgYi5yZWZjb3VudCAmJiBhLnJlZmNvdW50LT52dGFibGUgPT0gYi5yZWZjb3VudC0+dnRhYmxlKSB7CisgICAgcmV0dXJuIGEucmVmY291bnQtPnZ0YWJsZS0+ZXEoYSwgYik7CisgIH0KKyAgcmV0dXJuIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsKGEsIGIpOworfQorCiBpbnQgZ3JwY19zbGljZV9jbXAoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpIHsKICAgaW50IGQgPSAoaW50KShHUlBDX1NMSUNFX0xFTkdUSChhKSAtIEdSUENfU0xJQ0VfTEVOR1RIKGIpKTsKICAgaWYgKGQgIT0gMCkgcmV0dXJuIGQ7CkBAIC0zNjcsOCArNDEwLDU1IEBACiAKIGludCBncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnQoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpIHsKICAgaWYgKGEucmVmY291bnQgPT0gTlVMTCB8fCBiLnJlZmNvdW50ID09IE5VTEwpIHsKLSAgICByZXR1cm4gZ3JwY19zbGljZV9jbXAoYSwgYikgPT0gMDsKKyAgICByZXR1cm4gZ3JwY19zbGljZV9lcShhLCBiKTsKICAgfQogICByZXR1cm4gYS5kYXRhLnJlZmNvdW50ZWQubGVuZ3RoID09IGIuZGF0YS5yZWZjb3VudGVkLmxlbmd0aCAmJgogICAgICAgICAgYS5kYXRhLnJlZmNvdW50ZWQuYnl0ZXMgPT0gYi5kYXRhLnJlZmNvdW50ZWQuYnl0ZXM7CiB9CisKK2ludCBncnBjX3NsaWNlX2J1Zl9zdGFydF9lcShncnBjX3NsaWNlIGEsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBsZW4pIHsKKyAgaWYgKEdSUENfU0xJQ0VfTEVOR1RIKGEpIDwgbGVuKSByZXR1cm4gMDsKKyAgcmV0dXJuIDAgPT0gbWVtY21wKEdSUENfU0xJQ0VfU1RBUlRfUFRSKGEpLCBiLCBsZW4pOworfQorCitpbnQgZ3JwY19zbGljZV9yY2hyKGdycGNfc2xpY2UgcywgY2hhciBjKSB7CisgIGNvbnN0IGNoYXIgKmIgPSAoY29uc3QgY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKHMpOworICBpbnQgaTsKKyAgZm9yIChpID0gKGludClHUlBDX1NMSUNFX0xFTkdUSChzKSAtIDE7IGkgIT0gLTEgJiYgYltpXSAhPSBjOyBpLS0pCisgICAgOworICByZXR1cm4gaTsKK30KKworaW50IGdycGNfc2xpY2VfY2hyKGdycGNfc2xpY2UgcywgY2hhciBjKSB7CisgIGNvbnN0IGNoYXIgKmIgPSAoY29uc3QgY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKHMpOworICBjb25zdCBjaGFyICpwID0gbWVtY2hyKGIsIGMsIEdSUENfU0xJQ0VfTEVOR1RIKHMpKTsKKyAgcmV0dXJuIHAgPT0gTlVMTCA/IC0xIDogKGludCkocCAtIGIpOworfQorCitpbnQgZ3JwY19zbGljZV9zbGljZShncnBjX3NsaWNlIGhheXN0YWNrLCBncnBjX3NsaWNlIG5lZWRsZSkgeworICBzaXplX3QgaGF5c3RhY2tfbGVuID0gR1JQQ19TTElDRV9MRU5HVEgoaGF5c3RhY2spOworICBjb25zdCB1aW50OF90ICpoYXlzdGFja19ieXRlcyA9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKGhheXN0YWNrKTsKKyAgc2l6ZV90IG5lZWRsZV9sZW4gPSBHUlBDX1NMSUNFX0xFTkdUSChuZWVkbGUpOworICBjb25zdCB1aW50OF90ICpuZWVkbGVfYnl0ZXMgPSBHUlBDX1NMSUNFX1NUQVJUX1BUUihuZWVkbGUpOworCisgIGlmIChoYXlzdGFja19sZW4gPT0gMCB8fCBuZWVkbGVfbGVuID09IDApIHJldHVybiAtMTsKKyAgaWYgKGhheXN0YWNrX2xlbiA8IG5lZWRsZV9sZW4pIHJldHVybiAtMTsKKyAgaWYgKGhheXN0YWNrX2xlbiA9PSBuZWVkbGVfbGVuKQorICAgIHJldHVybiBncnBjX3NsaWNlX2VxKGhheXN0YWNrLCBuZWVkbGUpID8gMCA6IC0xOworICBpZiAobmVlZGxlX2xlbiA9PSAxKSByZXR1cm4gZ3JwY19zbGljZV9jaHIoaGF5c3RhY2ssIChjaGFyKSpuZWVkbGVfYnl0ZXMpOworCisgIGNvbnN0IHVpbnQ4X3QgKmxhc3QgPSBoYXlzdGFja19ieXRlcyArIGhheXN0YWNrX2xlbiAtIG5lZWRsZV9sZW47CisgIGZvciAoY29uc3QgdWludDhfdCAqY3VyID0gaGF5c3RhY2tfYnl0ZXM7IGN1ciAhPSBsYXN0OyArK2N1cikgeworICAgIGlmICgwID09IG1lbWNtcChjdXIsIG5lZWRsZV9ieXRlcywgbmVlZGxlX2xlbikpIHsKKyAgICAgIHJldHVybiAoaW50KShjdXIgLSBoYXlzdGFja19ieXRlcyk7CisgICAgfQorICB9CisgIHJldHVybiAtMTsKK30KKworZ3JwY19zbGljZSBncnBjX3NsaWNlX2R1cChncnBjX3NsaWNlIGEpIHsKKyAgZ3JwY19zbGljZSBjb3B5ID0gZ3JwY19zbGljZV9tYWxsb2MoR1JQQ19TTElDRV9MRU5HVEgoYSkpOworICBtZW1jcHkoR1JQQ19TTElDRV9TVEFSVF9QVFIoY29weSksIEdSUENfU0xJQ0VfU1RBUlRfUFRSKGEpLAorICAgICAgICAgR1JQQ19TTElDRV9MRU5HVEgoYSkpOworICByZXR1cm4gY29weTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jIGIvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYwpzaW1pbGFyaXR5IGluZGV4IDYxJQpyZW5hbWUgZnJvbSBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYwpyZW5hbWUgdG8gc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYwppbmRleCAyNzkxYmY2Li40NmY4MDdmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYworKysgYi9zcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5jCkBAIC0yOSw3ICsyOSw3IEBACiAvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogLy8KIAotI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmgiCiAKICNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zNyw3MCArMzcsNzkgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvYWxsb2MuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvbG9nLmg+CiAKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgiCiAKLXN0cnVjdCBncnBjX21kc3RyX2hhc2hfdGFibGUgeworc3RydWN0IGdycGNfc2xpY2VfaGFzaF90YWJsZSB7CiAgIGdwcl9yZWZjb3VudCByZWZzOwogICBzaXplX3Qgc2l6ZTsKLSAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2VudHJ5KiBlbnRyaWVzOworICBncnBjX3NsaWNlX2hhc2hfdGFibGVfZW50cnkqIGVudHJpZXM7CiB9OwogCitzdGF0aWMgYm9vbCBpc19lbXB0eShncnBjX3NsaWNlX2hhc2hfdGFibGVfZW50cnkqIGVudHJ5KSB7CisgIHJldHVybiBlbnRyeS0+dnRhYmxlID09IE5VTEw7Cit9CisKIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgaW5zZXJ0IGFuZCBnZXQgb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm1zIHF1YWRyYXRpYwogLy8gcHJvYmluZyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVhZHJhdGljX3Byb2JpbmcpLgotc3RhdGljIHNpemVfdCBncnBjX21kc3RyX2hhc2hfdGFibGVfZmluZF9pbmRleCgKLSAgICBjb25zdCBncnBjX21kc3RyX2hhc2hfdGFibGUqIHRhYmxlLCBjb25zdCBncnBjX21kc3RyKiBrZXksCi0gICAgYm9vbCBmaW5kX2VtcHR5KSB7CitzdGF0aWMgc2l6ZV90IGdycGNfc2xpY2VfaGFzaF90YWJsZV9maW5kX2luZGV4KAorICAgIGNvbnN0IGdycGNfc2xpY2VfaGFzaF90YWJsZSogdGFibGUsIGNvbnN0IGdycGNfc2xpY2Uga2V5LCBib29sIGZpbmRfZW1wdHkpIHsKKyAgc2l6ZV90IGhhc2ggPSBncnBjX3NsaWNlX2hhc2goa2V5KTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7Ci0gICAgY29uc3Qgc2l6ZV90IGlkeCA9IChrZXktPmhhc2ggKyBpICogaSkgJSB0YWJsZS0+c2l6ZTsKLSAgICBpZiAodGFibGUtPmVudHJpZXNbaWR4XS5rZXkgPT0gTlVMTCkgcmV0dXJuIGZpbmRfZW1wdHkgPyBpZHggOiB0YWJsZS0+c2l6ZTsKLSAgICBpZiAodGFibGUtPmVudHJpZXNbaWR4XS5rZXkgPT0ga2V5KSByZXR1cm4gaWR4OworICAgIGNvbnN0IHNpemVfdCBpZHggPSAoaGFzaCArIGkgKiBpKSAlIHRhYmxlLT5zaXplOworICAgIGlmIChpc19lbXB0eSgmdGFibGUtPmVudHJpZXNbaWR4XSkpIHsKKyAgICAgIHJldHVybiBmaW5kX2VtcHR5ID8gaWR4IDogdGFibGUtPnNpemU7CisgICAgfQorICAgIGlmIChncnBjX3NsaWNlX2VxKHRhYmxlLT5lbnRyaWVzW2lkeF0ua2V5LCBrZXkpKSB7CisgICAgICByZXR1cm4gaWR4OworICAgIH0KICAgfQogICByZXR1cm4gdGFibGUtPnNpemU7ICAvLyBOb3QgZm91bmQuCiB9CiAKLXN0YXRpYyB2b2lkIGdycGNfbWRzdHJfaGFzaF90YWJsZV9hZGQoCi0gICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiB0YWJsZSwgZ3JwY19tZHN0cioga2V5LCB2b2lkKiB2YWx1ZSwKLSAgICBjb25zdCBncnBjX21kc3RyX2hhc2hfdGFibGVfdnRhYmxlKiB2dGFibGUpIHsKK3N0YXRpYyB2b2lkIGdycGNfc2xpY2VfaGFzaF90YWJsZV9hZGQoCisgICAgZ3JwY19zbGljZV9oYXNoX3RhYmxlKiB0YWJsZSwgZ3JwY19zbGljZSBrZXksIHZvaWQqIHZhbHVlLAorICAgIGNvbnN0IGdycGNfc2xpY2VfaGFzaF90YWJsZV92dGFibGUqIHZ0YWJsZSkgewogICBHUFJfQVNTRVJUKHZhbHVlICE9IE5VTEwpOwogICBjb25zdCBzaXplX3QgaWR4ID0KLSAgICAgIGdycGNfbWRzdHJfaGFzaF90YWJsZV9maW5kX2luZGV4KHRhYmxlLCBrZXksIHRydWUgLyogZmluZF9lbXB0eSAqLyk7CisgICAgICBncnBjX3NsaWNlX2hhc2hfdGFibGVfZmluZF9pbmRleCh0YWJsZSwga2V5LCB0cnVlIC8qIGZpbmRfZW1wdHkgKi8pOwogICBHUFJfQVNTRVJUKGlkeCAhPSB0YWJsZS0+c2l6ZSk7ICAvLyBUYWJsZSBzaG91bGQgbmV2ZXIgYmUgZnVsbC4KLSAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2VudHJ5KiBlbnRyeSA9ICZ0YWJsZS0+ZW50cmllc1tpZHhdOwotICBlbnRyeS0+a2V5ID0gR1JQQ19NRFNUUl9SRUYoa2V5KTsKKyAgZ3JwY19zbGljZV9oYXNoX3RhYmxlX2VudHJ5KiBlbnRyeSA9ICZ0YWJsZS0+ZW50cmllc1tpZHhdOworICBlbnRyeS0+a2V5ID0gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoa2V5KTsKICAgZW50cnktPnZhbHVlID0gdnRhYmxlLT5jb3B5X3ZhbHVlKHZhbHVlKTsKICAgZW50cnktPnZ0YWJsZSA9IHZ0YWJsZTsKIH0KIAotZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiBncnBjX21kc3RyX2hhc2hfdGFibGVfY3JlYXRlKAotICAgIHNpemVfdCBudW1fZW50cmllcywgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2VudHJ5KiBlbnRyaWVzKSB7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZSogdGFibGUgPSBncHJfbWFsbG9jKHNpemVvZigqdGFibGUpKTsKK2dycGNfc2xpY2VfaGFzaF90YWJsZSogZ3JwY19zbGljZV9oYXNoX3RhYmxlX2NyZWF0ZSgKKyAgICBzaXplX3QgbnVtX2VudHJpZXMsIGdycGNfc2xpY2VfaGFzaF90YWJsZV9lbnRyeSogZW50cmllcykgeworICBncnBjX3NsaWNlX2hhc2hfdGFibGUqIHRhYmxlID0gZ3ByX21hbGxvYyhzaXplb2YoKnRhYmxlKSk7CiAgIG1lbXNldCh0YWJsZSwgMCwgc2l6ZW9mKCp0YWJsZSkpOwogICBncHJfcmVmX2luaXQoJnRhYmxlLT5yZWZzLCAxKTsKICAgLy8gUXVhZHJhdGljIHByb2JpbmcgZ2V0cyBiZXN0IHBlcmZvcm1hbmNlIHdoZW4gdGhlIHRhYmxlIGlzIG5vIG1vcmUKICAgLy8gdGhhbiBoYWxmIGZ1bGwuCiAgIHRhYmxlLT5zaXplID0gbnVtX2VudHJpZXMgKiAyOwotICBjb25zdCBzaXplX3QgZW50cnlfc2l6ZSA9IHNpemVvZihncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnkpICogdGFibGUtPnNpemU7CisgIGNvbnN0IHNpemVfdCBlbnRyeV9zaXplID0gc2l6ZW9mKGdycGNfc2xpY2VfaGFzaF90YWJsZV9lbnRyeSkgKiB0YWJsZS0+c2l6ZTsKICAgdGFibGUtPmVudHJpZXMgPSBncHJfbWFsbG9jKGVudHJ5X3NpemUpOwogICBtZW1zZXQodGFibGUtPmVudHJpZXMsIDAsIGVudHJ5X3NpemUpOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpIHsKLSAgICBncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnkqIGVudHJ5ID0gJmVudHJpZXNbaV07Ci0gICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2FkZCh0YWJsZSwgZW50cnktPmtleSwgZW50cnktPnZhbHVlLCBlbnRyeS0+dnRhYmxlKTsKKyAgICBncnBjX3NsaWNlX2hhc2hfdGFibGVfZW50cnkqIGVudHJ5ID0gJmVudHJpZXNbaV07CisgICAgZ3JwY19zbGljZV9oYXNoX3RhYmxlX2FkZCh0YWJsZSwgZW50cnktPmtleSwgZW50cnktPnZhbHVlLCBlbnRyeS0+dnRhYmxlKTsKICAgfQogICByZXR1cm4gdGFibGU7CiB9CiAKLWdycGNfbWRzdHJfaGFzaF90YWJsZSogZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3JlZihncnBjX21kc3RyX2hhc2hfdGFibGUqIHRhYmxlKSB7CitncnBjX3NsaWNlX2hhc2hfdGFibGUqIGdycGNfc2xpY2VfaGFzaF90YWJsZV9yZWYoZ3JwY19zbGljZV9oYXNoX3RhYmxlKiB0YWJsZSkgewogICBpZiAodGFibGUgIT0gTlVMTCkgZ3ByX3JlZigmdGFibGUtPnJlZnMpOwogICByZXR1cm4gdGFibGU7CiB9CiAKLXZvaWQgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3VucmVmKGdycGNfZXhlY19jdHgqIGV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiB0YWJsZSkgewordm9pZCBncnBjX3NsaWNlX2hhc2hfdGFibGVfdW5yZWYoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2hhc2hfdGFibGUqIHRhYmxlKSB7CiAgIGlmICh0YWJsZSAhPSBOVUxMICYmIGdwcl91bnJlZigmdGFibGUtPnJlZnMpKSB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgKytpKSB7Ci0gICAgICBncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnkqIGVudHJ5ID0gJnRhYmxlLT5lbnRyaWVzW2ldOwotICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gTlVMTCkgewotICAgICAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBlbnRyeS0+a2V5KTsKKyAgICAgIGdycGNfc2xpY2VfaGFzaF90YWJsZV9lbnRyeSogZW50cnkgPSAmdGFibGUtPmVudHJpZXNbaV07CisgICAgICBpZiAoIWlzX2VtcHR5KGVudHJ5KSkgeworICAgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBlbnRyeS0+a2V5KTsKICAgICAgICAgZW50cnktPnZ0YWJsZS0+ZGVzdHJveV92YWx1ZShleGVjX2N0eCwgZW50cnktPnZhbHVlKTsKICAgICAgIH0KICAgICB9CkBAIC0xMDksMTAgKzExOCwxMCBAQAogICB9CiB9CiAKLXZvaWQqIGdycGNfbWRzdHJfaGFzaF90YWJsZV9nZXQoY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwY19tZHN0cioga2V5KSB7Cit2b2lkKiBncnBjX3NsaWNlX2hhc2hfdGFibGVfZ2V0KGNvbnN0IGdycGNfc2xpY2VfaGFzaF90YWJsZSogdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfc2xpY2Uga2V5KSB7CiAgIGNvbnN0IHNpemVfdCBpZHggPQotICAgICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2ZpbmRfaW5kZXgodGFibGUsIGtleSwgZmFsc2UgLyogZmluZF9lbXB0eSAqLyk7CisgICAgICBncnBjX3NsaWNlX2hhc2hfdGFibGVfZmluZF9pbmRleCh0YWJsZSwga2V5LCBmYWxzZSAvKiBmaW5kX2VtcHR5ICovKTsKICAgaWYgKGlkeCA9PSB0YWJsZS0+c2l6ZSkgcmV0dXJuIE5VTEw7ICAvLyBOb3QgZm91bmQuCiAgIHJldHVybiB0YWJsZS0+ZW50cmllc1tpZHhdLnZhbHVlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmggYi9zcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5oCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5oCnJlbmFtZSB0byBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5oCmluZGV4IDU3ZjQ5N2UuLmQwYzI3MTIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5oCisrKyBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmgKQEAgLTI5LDggKzI5LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9NRFNUUl9IQVNIX1RBQkxFX0gKLSNkZWZpbmUgR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfTURTVFJfSEFTSF9UQUJMRV9ICisjaWZuZGVmIEdSUENfQ09SRV9MSUJfU0xJQ0VfU0xJQ0VfSEFTSF9UQUJMRV9ICisjZGVmaW5lIEdSUENfQ09SRV9MSUJfU0xJQ0VfU0xJQ0VfSEFTSF9UQUJMRV9ICiAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgiCiAKQEAgLTQwLDM4ICs0MCwzOCBAQAogICogKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZW5fYWRkcmVzc2luZykgd2l0aCBxdWFkcmF0aWMKICAqIHByb2JpbmcgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1YWRyYXRpY19wcm9iaW5nKS4KICAqCi0gKiBUaGUga2V5cyBhcmUgXGEgZ3JwY19tZHN0ciBvYmplY3RzLiAgVGhlIHZhbHVlcyBhcmUgYXJiaXRyYXJ5IHBvaW50ZXJzCisgKiBUaGUga2V5cyBhcmUgXGEgZ3JwY19zbGljZSBvYmplY3RzLiAgVGhlIHZhbHVlcyBhcmUgYXJiaXRyYXJ5IHBvaW50ZXJzCiAgKiB3aXRoIGEgY29tbW9uIHZ0YWJsZS4KICAqCiAgKiBIYXNoIHRhYmxlcyBhcmUgaW50ZW50aW9uYWxseSBpbW11dGFibGUsIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBsb2NraW5nLgogICovCiAKLXR5cGVkZWYgc3RydWN0IGdycGNfbWRzdHJfaGFzaF90YWJsZSBncnBjX21kc3RyX2hhc2hfdGFibGU7Cit0eXBlZGVmIHN0cnVjdCBncnBjX3NsaWNlX2hhc2hfdGFibGUgZ3JwY19zbGljZV9oYXNoX3RhYmxlOwogCi10eXBlZGVmIHN0cnVjdCBncnBjX21kc3RyX2hhc2hfdGFibGVfdnRhYmxlIHsKLSAgdm9pZCAoKmRlc3Ryb3lfdmFsdWUpKGdycGNfZXhlY19jdHgqIGV4ZWNfY3R4LCB2b2lkKiB2YWx1ZSk7Ci0gIHZvaWQqICgqY29weV92YWx1ZSkodm9pZCogdmFsdWUpOwotfSBncnBjX21kc3RyX2hhc2hfdGFibGVfdnRhYmxlOwordHlwZWRlZiBzdHJ1Y3QgZ3JwY19zbGljZV9oYXNoX3RhYmxlX3Z0YWJsZSB7CisgIHZvaWQgKCpkZXN0cm95X3ZhbHVlKShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdmFsdWUpOworICB2b2lkICooKmNvcHlfdmFsdWUpKHZvaWQgKnZhbHVlKTsKK30gZ3JwY19zbGljZV9oYXNoX3RhYmxlX3Z0YWJsZTsKIAotdHlwZWRlZiBzdHJ1Y3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2VudHJ5IHsKLSAgZ3JwY19tZHN0cioga2V5OwotICB2b2lkKiB2YWx1ZTsgLyogTXVzdCBub3QgYmUgTlVMTC4gKi8KLSAgY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3Z0YWJsZSogdnRhYmxlOwotfSBncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnk7Cit0eXBlZGVmIHN0cnVjdCBncnBjX3NsaWNlX2hhc2hfdGFibGVfZW50cnkgeworICBncnBjX3NsaWNlIGtleTsKKyAgdm9pZCAqdmFsdWU7IC8qIE11c3Qgbm90IGJlIE5VTEwuICovCisgIGNvbnN0IGdycGNfc2xpY2VfaGFzaF90YWJsZV92dGFibGUgKnZ0YWJsZTsKK30gZ3JwY19zbGljZV9oYXNoX3RhYmxlX2VudHJ5OwogCiAvKiogQ3JlYXRlcyBhIG5ldyBoYXNoIHRhYmxlIG9mIGNvbnRhaW5pbmcgXGEgZW50cmllcywgd2hpY2ggaXMgYW4gYXJyYXkKICAgICBvZiBsZW5ndGggXGEgbnVtX2VudHJpZXMuCiAgICAgQ3JlYXRlcyBpdHMgb3duIGNvcHkgb2YgYWxsIGtleXMgYW5kIHZhbHVlcyBmcm9tIFxhIGVudHJpZXMuICovCi1ncnBjX21kc3RyX2hhc2hfdGFibGUqIGdycGNfbWRzdHJfaGFzaF90YWJsZV9jcmVhdGUoCi0gICAgc2l6ZV90IG51bV9lbnRyaWVzLCBncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnkqIGVudHJpZXMpOworZ3JwY19zbGljZV9oYXNoX3RhYmxlICpncnBjX3NsaWNlX2hhc2hfdGFibGVfY3JlYXRlKAorICAgIHNpemVfdCBudW1fZW50cmllcywgZ3JwY19zbGljZV9oYXNoX3RhYmxlX2VudHJ5ICplbnRyaWVzKTsKIAotZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiBncnBjX21kc3RyX2hhc2hfdGFibGVfcmVmKGdycGNfbWRzdHJfaGFzaF90YWJsZSogdGFibGUpOwotdm9pZCBncnBjX21kc3RyX2hhc2hfdGFibGVfdW5yZWYoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kc3RyX2hhc2hfdGFibGUqIHRhYmxlKTsKK2dycGNfc2xpY2VfaGFzaF90YWJsZSAqZ3JwY19zbGljZV9oYXNoX3RhYmxlX3JlZihncnBjX3NsaWNlX2hhc2hfdGFibGUgKnRhYmxlKTsKK3ZvaWQgZ3JwY19zbGljZV9oYXNoX3RhYmxlX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9oYXNoX3RhYmxlICp0YWJsZSk7CiAKIC8qKiBSZXR1cm5zIHRoZSB2YWx1ZSBmcm9tIFxhIHRhYmxlIGFzc29jaWF0ZWQgd2l0aCBcYSBrZXkuCiAgICAgUmV0dXJucyBOVUxMIGlmIFxhIGtleSBpcyBub3QgZm91bmQuICovCi12b2lkKiBncnBjX21kc3RyX2hhc2hfdGFibGVfZ2V0KGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHIqIGtleSk7Cit2b2lkICpncnBjX3NsaWNlX2hhc2hfdGFibGVfZ2V0KGNvbnN0IGdycGNfc2xpY2VfaGFzaF90YWJsZSAqdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfc2xpY2Uga2V5KTsKIAotI2VuZGlmIC8qIEdSUENfQ09SRV9MSUJfVFJBTlNQT1JUX01EU1RSX0hBU0hfVEFCTEVfSCAqLworI2VuZGlmIC8qIEdSUENfQ09SRV9MSUJfU0xJQ0VfU0xJQ0VfSEFTSF9UQUJMRV9IICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMgYi9zcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZDE3YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm4uYwpAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgMjAxNiwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2FsbG9jLmg+CisjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2xvZy5oPgorCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL2lvbWdyX2ludGVybmFsLmgiIC8qIGZvciBpb21ncl9hYm9ydF9vbl9sZWFrcygpICovCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3Byb2ZpbGluZy90aW1lcnMuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9tdXJtdXJfaGFzaC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiCisKKyNkZWZpbmUgTE9HMl9TSEFSRF9DT1VOVCA1CisjZGVmaW5lIFNIQVJEX0NPVU5UICgxIDw8IExPRzJfU0hBUkRfQ09VTlQpCisjZGVmaW5lIElOSVRJQUxfU0hBUkRfQ0FQQUNJVFkgOAorCisjZGVmaW5lIFRBQkxFX0lEWChoYXNoLCBjYXBhY2l0eSkgKCgoaGFzaCkgPj4gTE9HMl9TSEFSRF9DT1VOVCkgJSAoY2FwYWNpdHkpKQorI2RlZmluZSBTSEFSRF9JRFgoaGFzaCkgKChoYXNoKSAmICgoMSA8PCBMT0cyX1NIQVJEX0NPVU5UKSAtIDEpKQorCit0eXBlZGVmIHN0cnVjdCBpbnRlcm5lZF9zbGljZV9yZWZjb3VudCB7CisgIGdycGNfc2xpY2VfcmVmY291bnQgYmFzZTsKKyAgZ3JwY19zbGljZV9yZWZjb3VudCBzdWI7CisgIHNpemVfdCBsZW5ndGg7CisgIGdwcl9hdG0gcmVmY250OworICB1aW50MzJfdCBoYXNoOworICBzdHJ1Y3QgaW50ZXJuZWRfc2xpY2VfcmVmY291bnQgKmJ1Y2tldF9uZXh0OworfSBpbnRlcm5lZF9zbGljZV9yZWZjb3VudDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2xpY2Vfc2hhcmQgeworICBncHJfbXUgbXU7CisgIGludGVybmVkX3NsaWNlX3JlZmNvdW50ICoqc3RyczsKKyAgc2l6ZV90IGNvdW50OworICBzaXplX3QgY2FwYWNpdHk7Cit9IHNsaWNlX3NoYXJkOworCisvKiBoYXNoIHNlZWQ6IGRlY2lkZWQgYXQgaW5pdGlhbGl6YXRpb24gdGltZSAqLworc3RhdGljIHVpbnQzMl90IGdfaGFzaF9zZWVkOworc3RhdGljIGludCBnX2ZvcmNlZF9oYXNoX3NlZWQgPSAwOworCitzdGF0aWMgc2xpY2Vfc2hhcmQgZ19zaGFyZHNbU0hBUkRfQ09VTlRdOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGhhc2g7CisgIHVpbnQzMl90IGlkeDsKK30gc3RhdGljX21ldGFkYXRhX2hhc2hfZW50OworCitzdGF0aWMgc3RhdGljX21ldGFkYXRhX2hhc2hfZW50CisgICAgc3RhdGljX21ldGFkYXRhX2hhc2hbNCAqIEdSUENfU1RBVElDX01EU1RSX0NPVU5UXTsKK3N0YXRpYyB1aW50MzJfdCBtYXhfc3RhdGljX21ldGFkYXRhX2hhc2hfcHJvYmU7CitzdGF0aWMgdWludDMyX3Qgc3RhdGljX21ldGFkYXRhX2hhc2hfdmFsdWVzW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsKKworc3RhdGljIHZvaWQgaW50ZXJuZWRfc2xpY2VfcmVmKHZvaWQgKnApIHsKKyAgaW50ZXJuZWRfc2xpY2VfcmVmY291bnQgKnMgPSBwOworICBHUFJfQVNTRVJUKGdwcl9hdG1fbm9fYmFycmllcl9mZXRjaF9hZGQoJnMtPnJlZmNudCwgMSkgPiAwKTsKK30KKworc3RhdGljIHZvaWQgaW50ZXJuZWRfc2xpY2VfZGVzdHJveShpbnRlcm5lZF9zbGljZV9yZWZjb3VudCAqcykgeworICBzbGljZV9zaGFyZCAqc2hhcmQgPSAmZ19zaGFyZHNbU0hBUkRfSURYKHMtPmhhc2gpXTsKKyAgZ3ByX211X2xvY2soJnNoYXJkLT5tdSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmcy0+cmVmY250KSk7CisgIGludGVybmVkX3NsaWNlX3JlZmNvdW50ICoqcHJldl9uZXh0OworICBpbnRlcm5lZF9zbGljZV9yZWZjb3VudCAqY3VyOworICBmb3IgKHByZXZfbmV4dCA9ICZzaGFyZC0+c3Ryc1tUQUJMRV9JRFgocy0+aGFzaCwgc2hhcmQtPmNhcGFjaXR5KV0sCisgICAgICBjdXIgPSAqcHJldl9uZXh0OworICAgICAgIGN1ciAhPSBzOyBwcmV2X25leHQgPSAmY3VyLT5idWNrZXRfbmV4dCwgY3VyID0gY3VyLT5idWNrZXRfbmV4dCkKKyAgICA7CisgICpwcmV2X25leHQgPSBjdXItPmJ1Y2tldF9uZXh0OworICBzaGFyZC0+Y291bnQtLTsKKyAgZ3ByX2ZyZWUocyk7CisgIGdwcl9tdV91bmxvY2soJnNoYXJkLT5tdSk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVybmVkX3NsaWNlX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICpwKSB7CisgIGludGVybmVkX3NsaWNlX3JlZmNvdW50ICpzID0gcDsKKyAgaWYgKDEgPT0gZ3ByX2F0bV9mdWxsX2ZldGNoX2FkZCgmcy0+cmVmY250LCAtMSkpIHsKKyAgICBpbnRlcm5lZF9zbGljZV9kZXN0cm95KHMpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGludGVybmVkX3NsaWNlX3N1Yl9yZWYodm9pZCAqcCkgeworICBpbnRlcm5lZF9zbGljZV9yZWYoKChjaGFyICopcCkgLSBvZmZzZXRvZihpbnRlcm5lZF9zbGljZV9yZWZjb3VudCwgc3ViKSk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVybmVkX3NsaWNlX3N1Yl91bnJlZihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqcCkgeworICBpbnRlcm5lZF9zbGljZV91bnJlZihleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyICopcCkgLSBvZmZzZXRvZihpbnRlcm5lZF9zbGljZV9yZWZjb3VudCwgc3ViKSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpbnRlcm5lZF9zbGljZV9oYXNoKGdycGNfc2xpY2Ugc2xpY2UpIHsKKyAgaW50ZXJuZWRfc2xpY2VfcmVmY291bnQgKnMgPSAoaW50ZXJuZWRfc2xpY2VfcmVmY291bnQgKilzbGljZS5yZWZjb3VudDsKKyAgcmV0dXJuIHMtPmhhc2g7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJuZWRfc2xpY2VfZXEoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpIHsKKyAgcmV0dXJuIGEucmVmY291bnQgPT0gYi5yZWZjb3VudDsKK30KKworc3RhdGljIGNvbnN0IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlIGludGVybmVkX3NsaWNlX3Z0YWJsZSA9IHsKKyAgICBpbnRlcm5lZF9zbGljZV9yZWYsIGludGVybmVkX3NsaWNlX3VucmVmLCBpbnRlcm5lZF9zbGljZV9lcSwKKyAgICBpbnRlcm5lZF9zbGljZV9oYXNofTsKK3N0YXRpYyBjb25zdCBncnBjX3NsaWNlX3JlZmNvdW50X3Z0YWJsZSBpbnRlcm5lZF9zbGljZV9zdWJfdnRhYmxlID0geworICAgIGludGVybmVkX3NsaWNlX3N1Yl9yZWYsIGludGVybmVkX3NsaWNlX3N1Yl91bnJlZiwKKyAgICBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbCwgZ3JwY19zbGljZV9kZWZhdWx0X2hhc2hfaW1wbH07CisKK3N0YXRpYyB2b2lkIGdyb3dfc2hhcmQoc2xpY2Vfc2hhcmQgKnNoYXJkKSB7CisgIHNpemVfdCBjYXBhY2l0eSA9IHNoYXJkLT5jYXBhY2l0eSAqIDI7CisgIHNpemVfdCBpOworICBpbnRlcm5lZF9zbGljZV9yZWZjb3VudCAqKnN0cnRhYjsKKyAgaW50ZXJuZWRfc2xpY2VfcmVmY291bnQgKnMsICpuZXh0OworCisgIEdQUl9USU1FUl9CRUdJTigiZ3Jvd19zdHJ0YWIiLCAwKTsKKworICBzdHJ0YWIgPSBncHJfbWFsbG9jKHNpemVvZihpbnRlcm5lZF9zbGljZV9yZWZjb3VudCAqKSAqIGNhcGFjaXR5KTsKKyAgbWVtc2V0KHN0cnRhYiwgMCwgc2l6ZW9mKGludGVybmVkX3NsaWNlX3JlZmNvdW50ICopICogY2FwYWNpdHkpOworCisgIGZvciAoaSA9IDA7IGkgPCBzaGFyZC0+Y2FwYWNpdHk7IGkrKykgeworICAgIGZvciAocyA9IHNoYXJkLT5zdHJzW2ldOyBzOyBzID0gbmV4dCkgeworICAgICAgc2l6ZV90IGlkeCA9IFRBQkxFX0lEWChzLT5oYXNoLCBjYXBhY2l0eSk7CisgICAgICBuZXh0ID0gcy0+YnVja2V0X25leHQ7CisgICAgICBzLT5idWNrZXRfbmV4dCA9IHN0cnRhYltpZHhdOworICAgICAgc3RydGFiW2lkeF0gPSBzOworICAgIH0KKyAgfQorCisgIGdwcl9mcmVlKHNoYXJkLT5zdHJzKTsKKyAgc2hhcmQtPnN0cnMgPSBzdHJ0YWI7CisgIHNoYXJkLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworCisgIEdQUl9USU1FUl9FTkQoImdyb3dfc3RydGFiIiwgMCk7Cit9CisKK3N0YXRpYyBncnBjX3NsaWNlIG1hdGVyaWFsaXplKGludGVybmVkX3NsaWNlX3JlZmNvdW50ICpzKSB7CisgIGdycGNfc2xpY2Ugc2xpY2U7CisgIHNsaWNlLnJlZmNvdW50ID0gJnMtPmJhc2U7CisgIHNsaWNlLmRhdGEucmVmY291bnRlZC5ieXRlcyA9ICh1aW50OF90ICopKHMgKyAxKTsKKyAgc2xpY2UuZGF0YS5yZWZjb3VudGVkLmxlbmd0aCA9IHMtPmxlbmd0aDsKKyAgcmV0dXJuIHNsaWNlOworfQorCit1aW50MzJfdCBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsKGdycGNfc2xpY2UgcykgeworICByZXR1cm4gZ3ByX211cm11cl9oYXNoMyhHUlBDX1NMSUNFX1NUQVJUX1BUUihzKSwgR1JQQ19TTElDRV9MRU5HVEgocyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfaGFzaF9zZWVkKTsKK30KKwordWludDMyX3QgZ3JwY19zdGF0aWNfc2xpY2VfaGFzaChncnBjX3NsaWNlIHMpIHsKKyAgcmV0dXJuIHN0YXRpY19tZXRhZGF0YV9oYXNoX3ZhbHVlc1tHUlBDX1NUQVRJQ19NRVRBREFUQV9JTkRFWChzKV07Cit9CisKK2ludCBncnBjX3N0YXRpY19zbGljZV9lcShncnBjX3NsaWNlIGEsIGdycGNfc2xpY2UgYikgeworICByZXR1cm4gR1JQQ19TVEFUSUNfTUVUQURBVEFfSU5ERVgoYSkgPT0gR1JQQ19TVEFUSUNfTUVUQURBVEFfSU5ERVgoYik7Cit9CisKK3VpbnQzMl90IGdycGNfc2xpY2VfaGFzaChncnBjX3NsaWNlIHMpIHsKKyAgcmV0dXJuIHMucmVmY291bnQgPT0gTlVMTCA/IGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGwocykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHMucmVmY291bnQtPnZ0YWJsZS0+aGFzaChzKTsKK30KKworZ3JwY19zbGljZSBncnBjX3NsaWNlX21heWJlX3N0YXRpY19pbnRlcm4oZ3JwY19zbGljZSBzbGljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnJldHVybmVkX3NsaWNlX2lzX2RpZmZlcmVudCkgeworICBpZiAoR1JQQ19JU19TVEFUSUNfTUVUQURBVEFfU1RSSU5HKHNsaWNlKSkgeworICAgIHJldHVybiBzbGljZTsKKyAgfQorCisgIHVpbnQzMl90IGhhc2ggPSBncnBjX3NsaWNlX2hhc2goc2xpY2UpOworICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDw9IG1heF9zdGF0aWNfbWV0YWRhdGFfaGFzaF9wcm9iZTsgaSsrKSB7CisgICAgc3RhdGljX21ldGFkYXRhX2hhc2hfZW50IGVudCA9CisgICAgICAgIHN0YXRpY19tZXRhZGF0YV9oYXNoWyhoYXNoICsgaSkgJSBHUFJfQVJSQVlfU0laRShzdGF0aWNfbWV0YWRhdGFfaGFzaCldOworICAgIGlmIChlbnQuaGFzaCA9PSBoYXNoICYmIGVudC5pZHggPCBHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVCAmJgorICAgICAgICBncnBjX3NsaWNlX2VxKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlW2VudC5pZHhdLCBzbGljZSkpIHsKKyAgICAgICpyZXR1cm5lZF9zbGljZV9pc19kaWZmZXJlbnQgPSB0cnVlOworICAgICAgcmV0dXJuIGdycGNfc3RhdGljX3NsaWNlX3RhYmxlW2VudC5pZHhdOworICAgIH0KKyAgfQorCisgIHJldHVybiBzbGljZTsKK30KKworYm9vbCBncnBjX3NsaWNlX2lzX2ludGVybmVkKGdycGNfc2xpY2Ugc2xpY2UpIHsKKyAgcmV0dXJuIChzbGljZS5yZWZjb3VudCAmJiBzbGljZS5yZWZjb3VudC0+dnRhYmxlID09ICZpbnRlcm5lZF9zbGljZV92dGFibGUpIHx8CisgICAgICAgICBHUlBDX0lTX1NUQVRJQ19NRVRBREFUQV9TVFJJTkcoc2xpY2UpOworfQorCitncnBjX3NsaWNlIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2Ugc2xpY2UpIHsKKyAgaWYgKEdSUENfSVNfU1RBVElDX01FVEFEQVRBX1NUUklORyhzbGljZSkpIHsKKyAgICByZXR1cm4gc2xpY2U7CisgIH0KKworICB1aW50MzJfdCBoYXNoID0gZ3JwY19zbGljZV9oYXNoKHNsaWNlKTsKKyAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8PSBtYXhfc3RhdGljX21ldGFkYXRhX2hhc2hfcHJvYmU7IGkrKykgeworICAgIHN0YXRpY19tZXRhZGF0YV9oYXNoX2VudCBlbnQgPQorICAgICAgICBzdGF0aWNfbWV0YWRhdGFfaGFzaFsoaGFzaCArIGkpICUgR1BSX0FSUkFZX1NJWkUoc3RhdGljX21ldGFkYXRhX2hhc2gpXTsKKyAgICBpZiAoZW50Lmhhc2ggPT0gaGFzaCAmJiBlbnQuaWR4IDwgR1JQQ19TVEFUSUNfTURTVFJfQ09VTlQgJiYKKyAgICAgICAgZ3JwY19zbGljZV9lcShncnBjX3N0YXRpY19zbGljZV90YWJsZVtlbnQuaWR4XSwgc2xpY2UpKSB7CisgICAgICByZXR1cm4gZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbZW50LmlkeF07CisgICAgfQorICB9CisKKyAgaW50ZXJuZWRfc2xpY2VfcmVmY291bnQgKnM7CisgIHNsaWNlX3NoYXJkICpzaGFyZCA9ICZnX3NoYXJkc1tTSEFSRF9JRFgoaGFzaCldOworCisgIGdwcl9tdV9sb2NrKCZzaGFyZC0+bXUpOworCisgIC8qIHNlYXJjaCBmb3IgYW4gZXhpc3Rpbmcgc3RyaW5nICovCisgIHNpemVfdCBpZHggPSBUQUJMRV9JRFgoaGFzaCwgc2hhcmQtPmNhcGFjaXR5KTsKKyAgZm9yIChzID0gc2hhcmQtPnN0cnNbaWR4XTsgczsgcyA9IHMtPmJ1Y2tldF9uZXh0KSB7CisgICAgaWYgKHMtPmhhc2ggPT0gaGFzaCAmJiBncnBjX3NsaWNlX2VxKHNsaWNlLCBtYXRlcmlhbGl6ZShzKSkpIHsKKyAgICAgIGlmIChncHJfYXRtX25vX2JhcnJpZXJfZmV0Y2hfYWRkKCZzLT5yZWZjbnQsIDEpID09IDApIHsKKyAgICAgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHdlJ3ZlIGFkZGVkIGEgcmVmIHRvIHNvbWV0aGluZyB0aGF0IHdhcyBhYm91dCB0bworICAgICAgICAgKiBkaWUgLSBkcm9wIGl0IGltbWVkaWF0ZWx5LgorICAgICAgICAgKiBUaGUgKm9ubHkqIHBvc3NpYmxlIHBhdGggaGVyZSAoZ2l2ZW4gdGhlIHNoYXJkIG11dGV4KSBzaG91bGQgYmUgdG8KKyAgICAgICAgICogZHJvcCBmcm9tIG9uZSByZWYgYmFjayB0byB6ZXJvIC0gYXNzZXJ0IHRoYXQgd2l0aCBhIENBUyAqLworICAgICAgICBHUFJfQVNTRVJUKGdwcl9hdG1fcmVsX2Nhcygmcy0+cmVmY250LCAxLCAwKSk7CisgICAgICAgIC8qIGFuZCB0cmVhdCB0aGlzIGFzIGlmIHdlIHdlcmUgbmV2ZXIgaGVyZS4uLiBzc2hoaCAqLworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ3ByX211X3VubG9jaygmc2hhcmQtPm11KTsKKyAgICAgICAgR1BSX1RJTUVSX0VORCgiZ3JwY19tZHN0cl9mcm9tX2J1ZmZlciIsIDApOworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemUocyk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogbm90IGZvdW5kOiBjcmVhdGUgYSBuZXcgc3RyaW5nICovCisgIC8qIHN0cmluZyBkYXRhIGdvZXMgYWZ0ZXIgdGhlIGludGVybmFsX3N0cmluZyBoZWFkZXIgKi8KKyAgcyA9IGdwcl9tYWxsb2Moc2l6ZW9mKCpzKSArIEdSUENfU0xJQ0VfTEVOR1RIKHNsaWNlKSk7CisgIGdwcl9hdG1fcmVsX3N0b3JlKCZzLT5yZWZjbnQsIDEpOworICBzLT5sZW5ndGggPSBHUlBDX1NMSUNFX0xFTkdUSChzbGljZSk7CisgIHMtPmhhc2ggPSBoYXNoOworICBzLT5iYXNlLnZ0YWJsZSA9ICZpbnRlcm5lZF9zbGljZV92dGFibGU7CisgIHMtPmJhc2Uuc3ViX3JlZmNvdW50ID0gJnMtPnN1YjsKKyAgcy0+c3ViLnZ0YWJsZSA9ICZpbnRlcm5lZF9zbGljZV9zdWJfdnRhYmxlOworICBzLT5zdWIuc3ViX3JlZmNvdW50ID0gJnMtPnN1YjsKKyAgcy0+YnVja2V0X25leHQgPSBzaGFyZC0+c3Ryc1tpZHhdOworICBzaGFyZC0+c3Ryc1tpZHhdID0gczsKKyAgbWVtY3B5KHMgKyAxLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihzbGljZSksIEdSUENfU0xJQ0VfTEVOR1RIKHNsaWNlKSk7CisKKyAgc2hhcmQtPmNvdW50Kys7CisKKyAgaWYgKHNoYXJkLT5jb3VudCA+IHNoYXJkLT5jYXBhY2l0eSAqIDIpIHsKKyAgICBncm93X3NoYXJkKHNoYXJkKTsKKyAgfQorCisgIGdwcl9tdV91bmxvY2soJnNoYXJkLT5tdSk7CisKKyAgcmV0dXJuIG1hdGVyaWFsaXplKHMpOworfQorCit2b2lkIGdycGNfdGVzdF9vbmx5X3NldF9zbGljZV9oYXNoX3NlZWQodWludDMyX3Qgc2VlZCkgeworICBnX2hhc2hfc2VlZCA9IHNlZWQ7CisgIGdfZm9yY2VkX2hhc2hfc2VlZCA9IDE7Cit9CisKK3ZvaWQgZ3JwY19zbGljZV9pbnRlcm5faW5pdCh2b2lkKSB7CisgIGlmICghZ19mb3JjZWRfaGFzaF9zZWVkKSB7CisgICAgZ19oYXNoX3NlZWQgPSAodWludDMyX3QpZ3ByX25vdyhHUFJfQ0xPQ0tfUkVBTFRJTUUpLnR2X25zZWM7CisgIH0KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBTSEFSRF9DT1VOVDsgaSsrKSB7CisgICAgc2xpY2Vfc2hhcmQgKnNoYXJkID0gJmdfc2hhcmRzW2ldOworICAgIGdwcl9tdV9pbml0KCZzaGFyZC0+bXUpOworICAgIHNoYXJkLT5jb3VudCA9IDA7CisgICAgc2hhcmQtPmNhcGFjaXR5ID0gSU5JVElBTF9TSEFSRF9DQVBBQ0lUWTsKKyAgICBzaGFyZC0+c3RycyA9IGdwcl9tYWxsb2Moc2l6ZW9mKCpzaGFyZC0+c3RycykgKiBzaGFyZC0+Y2FwYWNpdHkpOworICAgIG1lbXNldChzaGFyZC0+c3RycywgMCwgc2l6ZW9mKCpzaGFyZC0+c3RycykgKiBzaGFyZC0+Y2FwYWNpdHkpOworICB9CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR1BSX0FSUkFZX1NJWkUoc3RhdGljX21ldGFkYXRhX2hhc2gpOyBpKyspIHsKKyAgICBzdGF0aWNfbWV0YWRhdGFfaGFzaFtpXS5oYXNoID0gMDsKKyAgICBzdGF0aWNfbWV0YWRhdGFfaGFzaFtpXS5pZHggPSBHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVDsKKyAgfQorICBtYXhfc3RhdGljX21ldGFkYXRhX2hhc2hfcHJvYmUgPSAwOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEdSUENfU1RBVElDX01EU1RSX0NPVU5UOyBpKyspIHsKKyAgICBzdGF0aWNfbWV0YWRhdGFfaGFzaF92YWx1ZXNbaV0gPQorICAgICAgICBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlW2ldKTsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IEdQUl9BUlJBWV9TSVpFKHN0YXRpY19tZXRhZGF0YV9oYXNoKTsgaisrKSB7CisgICAgICBzaXplX3Qgc2xvdCA9IChzdGF0aWNfbWV0YWRhdGFfaGFzaF92YWx1ZXNbaV0gKyBqKSAlCisgICAgICAgICAgICAgICAgICAgIEdQUl9BUlJBWV9TSVpFKHN0YXRpY19tZXRhZGF0YV9oYXNoKTsKKyAgICAgIGlmIChzdGF0aWNfbWV0YWRhdGFfaGFzaFtzbG90XS5pZHggPT0gR1JQQ19TVEFUSUNfTURTVFJfQ09VTlQpIHsKKyAgICAgICAgc3RhdGljX21ldGFkYXRhX2hhc2hbc2xvdF0uaGFzaCA9IHN0YXRpY19tZXRhZGF0YV9oYXNoX3ZhbHVlc1tpXTsKKyAgICAgICAgc3RhdGljX21ldGFkYXRhX2hhc2hbc2xvdF0uaWR4ID0gKHVpbnQzMl90KWk7CisgICAgICAgIGlmIChqID4gbWF4X3N0YXRpY19tZXRhZGF0YV9oYXNoX3Byb2JlKSB7CisgICAgICAgICAgbWF4X3N0YXRpY19tZXRhZGF0YV9oYXNoX3Byb2JlID0gKHVpbnQzMl90KWo7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3ZvaWQgZ3JwY19zbGljZV9pbnRlcm5fc2h1dGRvd24odm9pZCkgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNIQVJEX0NPVU5UOyBpKyspIHsKKyAgICBzbGljZV9zaGFyZCAqc2hhcmQgPSAmZ19zaGFyZHNbaV07CisgICAgZ3ByX211X2Rlc3Ryb3koJnNoYXJkLT5tdSk7CisgICAgLyogVE9ETyhjdGlsbGVyKTogR1BSX0FTU0VSVChzaGFyZC0+Y291bnQgPT0gMCk7ICovCisgICAgaWYgKHNoYXJkLT5jb3VudCAhPSAwKSB7CisgICAgICBncHJfbG9nKEdQUl9ERUJVRywgIldBUk5JTkc6ICUiIFBSSXVQVFIgIiBtZXRhZGF0YSBzdHJpbmdzIHdlcmUgbGVha2VkIiwKKyAgICAgICAgICAgICAgc2hhcmQtPmNvdW50KTsKKyAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2hhcmQtPmNhcGFjaXR5OyBqKyspIHsKKyAgICAgICAgZm9yIChpbnRlcm5lZF9zbGljZV9yZWZjb3VudCAqcyA9IHNoYXJkLT5zdHJzW2pdOyBzOworICAgICAgICAgICAgIHMgPSBzLT5idWNrZXRfbmV4dCkgeworICAgICAgICAgIGNoYXIgKnRleHQgPQorICAgICAgICAgICAgICBncnBjX2R1bXBfc2xpY2UobWF0ZXJpYWxpemUocyksIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKKyAgICAgICAgICBncHJfbG9nKEdQUl9ERUJVRywgIkxFQUtFRDogJXMiLCB0ZXh0KTsKKyAgICAgICAgICBncHJfZnJlZSh0ZXh0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGdycGNfaW9tZ3JfYWJvcnRfb25fbGVha3MoKSkgeworICAgICAgICBhYm9ydCgpOworICAgICAgfQorICAgIH0KKyAgICBncHJfZnJlZShzaGFyZC0+c3Rycyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIGIvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgKaW5kZXggNjE4NTMzMy4uNjQ2N2IwYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgKKysrIGIvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgKQEAgLTQ2LDQgKzQ2LDE5IEBACiB2b2lkIGdycGNfc2xpY2VfYnVmZmVyX2Rlc3Ryb3lfaW50ZXJuYWwoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9idWZmZXIgKnNiKTsKIAorLyogQ2hlY2sgaWYgYSBzbGljZSBpcyBpbnRlcm5lZCAqLworYm9vbCBncnBjX3NsaWNlX2lzX2ludGVybmVkKGdycGNfc2xpY2Ugc2xpY2UpOworCit2b2lkIGdycGNfc2xpY2VfaW50ZXJuX2luaXQodm9pZCk7Cit2b2lkIGdycGNfc2xpY2VfaW50ZXJuX3NodXRkb3duKHZvaWQpOwordm9pZCBncnBjX3Rlc3Rfb25seV9zZXRfc2xpY2VfaGFzaF9zZWVkKHVpbnQzMl90IGtleSk7CisvLyBpZiBzbGljZSBtYXRjaGVzIGEgc3RhdGljIHNsaWNlLCByZXR1cm5zIHRoZSBzdGF0aWMgc2xpY2UKKy8vIG90aGVyd2lzZSByZXR1cm5zIHRoZSBwYXNzZWQgaW4gc2xpY2UgKHdpdGhvdXQgcmVmZmluZyBpdCkKKy8vIHVzZWQgZm9yIHN1cmZhY2UgYm91bmRhcmllcyB3aGVyZSB3ZSBtaWdodCByZWNlaXZlIGFuIHVuLWludGVybmVkIHN0YXRpYworLy8gc3RyaW5nCitncnBjX3NsaWNlIGdycGNfc2xpY2VfbWF5YmVfc3RhdGljX2ludGVybihncnBjX3NsaWNlIHNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcmV0dXJuZWRfc2xpY2VfaXNfZGlmZmVyZW50KTsKK3VpbnQzMl90IGdycGNfc3RhdGljX3NsaWNlX2hhc2goZ3JwY19zbGljZSBzKTsKK2ludCBncnBjX3N0YXRpY19zbGljZV9lcShncnBjX3NsaWNlIGEsIGdycGNfc2xpY2UgYik7CisKICNlbmRpZiAvKiBHUlBDX0NPUkVfTElCX1NMSUNFX1NMSUNFX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIGIvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMKaW5kZXggODM5YzM2Ni4uOTk2OTUwMCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMKKysrIGIvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMKQEAgLTg4LDMgKzg4LDggQEAKICAgICBncnBjX3NsaWNlX2J1ZmZlcl9hZGRfaW5kZXhlZChkc3QsIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKHN0cikpOwogICB9CiB9CisKK2Jvb2wgZ3JwY19wYXJzZV9zbGljZV90b191aW50MzIoZ3JwY19zbGljZSBzdHIsIHVpbnQzMl90ICpyZXN1bHQpIHsKKyAgcmV0dXJuIGdwcl9wYXJzZV9ieXRlc190b191aW50MzIoKGNvbnN0IGNoYXIgKilHUlBDX1NMSUNFX1NUQVJUX1BUUihzdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChzdHIpLCByZXN1bHQpICE9IDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oCmluZGV4IDE1MWM3MjAuLjRhNGRlZWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oCisrKyBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oCkBAIC0zNCwxMiArMzQsMTUgQEAKICNpZm5kZWYgR1JQQ19DT1JFX0xJQl9TTElDRV9TTElDRV9TVFJJTkdfSEVMUEVSU19ICiAjZGVmaW5lIEdSUENfQ09SRV9MSUJfU0xJQ0VfU0xJQ0VfU1RSSU5HX0hFTFBFUlNfSAogCisjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiAjaW5jbHVkZSA8Z3JwYy9zbGljZS5oPgogI2luY2x1ZGUgPGdycGMvc2xpY2VfYnVmZmVyLmg+CiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3BvcnRfcGxhdGZvcm0uaD4KIAorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXBwb3J0L3N0cmluZy5oIgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC01MSw2ICs1NCw4IEBACiAgKiBzaG91bGQgYmUgYSBwcm9wZXJseSBpbml0aWFsaXplZCBpbnN0YW5jZS4gKi8KIHZvaWQgZ3JwY19zbGljZV9zcGxpdChncnBjX3NsaWNlIHN0ciwgY29uc3QgY2hhciAqc2VwLCBncnBjX3NsaWNlX2J1ZmZlciAqZHN0KTsKIAorYm9vbCBncnBjX3BhcnNlX3NsaWNlX3RvX3VpbnQzMihncnBjX3NsaWNlIHN0ciwgdWludDMyX3QgKnJlc3VsdCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCBiL3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV90cmFpdHMuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpjb3B5IGZyb20gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKY29weSB0byBzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfdHJhaXRzLmgKaW5kZXggOTUzYmM5Zi4uOGEyODNkYyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKKysrIGIvc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3RyYWl0cy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBDb3B5cmlnaHQgMjAxNSwgR29vZ2xlIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LCBHb29nbGUgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxLDIwICszMSwxNCBAQAogICoKICAqLwogCi0jaWZuZGVmIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSAotI2RlZmluZSBHUlBDX0NPUkVfRVhUX1RSQU5TUE9SVF9DSFRUUDJfVFJBTlNQT1JUX1NUQVRVU19DT05WRVJTSU9OX0gKKyNpZm5kZWYgR1JQQ19DT1JFX0xJQl9TTElDRV9TTElDRV9UUkFJVFNfSAorI2RlZmluZSBHUlBDX0NPUkVfTElCX1NMSUNFX1NMSUNFX1RSQUlUU19ICiAKLSNpbmNsdWRlIDxncnBjL2dycGMuaD4KLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCisjaW5jbHVkZSA8Z3JwYy9zbGljZS5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAotLyogQ29udmVyc2lvbiBvZiBncnBjIHN0YXR1cyBjb2RlcyB0byBodHRwMiBlcnJvciBjb2RlcyAoZm9yIFJTVF9TVFJFQU0pICovCi1ncnBjX2NodHRwMl9lcnJvcl9jb2RlIGdycGNfY2h0dHAyX2dycGNfc3RhdHVzX3RvX2h0dHAyX2Vycm9yKAotICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKTsKLWdycGNfc3RhdHVzX2NvZGUgZ3JwY19jaHR0cDJfaHR0cDJfZXJyb3JfdG9fZ3JwY19zdGF0dXMoCi0gICAgZ3JwY19jaHR0cDJfZXJyb3JfY29kZSBlcnJvciwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lKTsKK2Jvb2wgZ3JwY19zbGljZV9pc19sZWdhbF9oZWFkZXIoZ3JwY19zbGljZSBzKTsKK2Jvb2wgZ3JwY19zbGljZV9pc19sZWdhbF9ub25iaW5faGVhZGVyKGdycGNfc2xpY2Ugcyk7Citib29sIGdycGNfc2xpY2VfaXNfYmluX3N1ZmZpeGVkKGdycGNfc2xpY2Ugcyk7CiAKLS8qIENvbnZlcnNpb24gb2YgSFRUUCBzdGF0dXMgY29kZXMgKDpzdGF0dXMpIHRvIGdycGMgc3RhdHVzIGNvZGVzICovCi1ncnBjX3N0YXR1c19jb2RlIGdycGNfY2h0dHAyX2h0dHAyX3N0YXR1c190b19ncnBjX3N0YXR1cyhpbnQgc3RhdHVzKTsKLWludCBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpOwotCi0jZW5kaWYgLyogR1JQQ19DT1JFX0VYVF9UUkFOU1BPUlRfQ0hUVFAyX1RSQU5TUE9SVF9TVEFUVVNfQ09OVkVSU0lPTl9IICovCisjZW5kaWYgLyogR1JQQ19DT1JFX0xJQl9TTElDRV9TTElDRV9UUkFJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbC5jIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbC5jCmluZGV4IDg5OWU4ZmEuLjU1MTlhMWUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGwuYworKysgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsLmMKQEAgLTU2LDEzICs1NiwxNSBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGwuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvY29tcGxldGlvbl9xdWV1ZS5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmgiCiAKIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBiYXRjaGVzIHBvc3NpYmxlLgogICAgIEJhc2VkIHVwb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIGluZGl2aWR1YWxseSBxdWV1ZWFibGUgb3BzIGluIHRoZSBiYXRjaAotICAgYXBpOgorICAgIGFwaToKICAgICAgIC0gaW5pdGlhbCBtZXRhZGF0YSBzZW5kCiAgICAgICAtIG1lc3NhZ2Ugc2VuZAogICAgICAgLSBzdGF0dXMvY2xvc2Ugc2VuZCAoZGVwZW5kaW5nIG9uIGNsaWVudC9zZXJ2ZXIpCkBAIC05MiwxOCArOTQsMjEgQEAKIH0gc3RhdHVzX3NvdXJjZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50OF90IGlzX3NldDsKLSAgZ3JwY19zdGF0dXNfY29kZSBjb2RlOwotICBncnBjX21kc3RyICpkZXRhaWxzOworICBib29sIGlzX3NldDsKKyAgZ3JwY19lcnJvciAqZXJyb3I7CiB9IHJlY2VpdmVkX3N0YXR1czsKIAorI2RlZmluZSBNQVhfRVJST1JTX1BFUl9CQVRDSCAzCisKIHR5cGVkZWYgc3RydWN0IGJhdGNoX2NvbnRyb2wgewogICBncnBjX2NhbGwgKmNhbGw7CiAgIGdycGNfY3FfY29tcGxldGlvbiBjcV9jb21wbGV0aW9uOwogICBncnBjX2Nsb3N1cmUgZmluaXNoX2JhdGNoOwogICB2b2lkICpub3RpZnlfdGFnOwogICBncHJfcmVmY291bnQgc3RlcHNfdG9fY29tcGxldGU7Ci0gIGdycGNfZXJyb3IgKmVycm9yOworCisgIGdycGNfZXJyb3IgKmVycm9yc1tNQVhfRVJST1JTX1BFUl9CQVRDSF07CisgIGdwcl9hdG0gbnVtX2Vycm9yczsKIAogICB1aW50OF90IHNlbmRfaW5pdGlhbF9tZXRhZGF0YTsKICAgdWludDhfdCBzZW5kX21lc3NhZ2U7CkBAIC0xODUsNiArMTkwLDcgQEAKICAgZ3JwY19jYWxsICpzaWJsaW5nX3ByZXY7CiAKICAgZ3JwY19zbGljZV9idWZmZXJfc3RyZWFtIHNlbmRpbmdfc3RyZWFtOworCiAgIGdycGNfYnl0ZV9zdHJlYW0gKnJlY2VpdmluZ19zdHJlYW07CiAgIGdycGNfYnl0ZV9idWZmZXIgKipyZWNlaXZpbmdfYnVmZmVyOwogICBncnBjX3NsaWNlIHJlY2VpdmluZ19zbGljZTsKQEAgLTE5Niw4ICsyMDIsNyBAQAogICB1bmlvbiB7CiAgICAgc3RydWN0IHsKICAgICAgIGdycGNfc3RhdHVzX2NvZGUgKnN0YXR1czsKLSAgICAgIGNoYXIgKipzdGF0dXNfZGV0YWlsczsKLSAgICAgIHNpemVfdCAqc3RhdHVzX2RldGFpbHNfY2FwYWNpdHk7CisgICAgICBncnBjX3NsaWNlICpzdGF0dXNfZGV0YWlsczsKICAgICB9IGNsaWVudDsKICAgICBzdHJ1Y3QgewogICAgICAgaW50ICpjYW5jZWxsZWQ7CkBAIC0yMTksMTMgKzIyNCwyMyBAQAogc3RhdGljIGdycGNfY2FsbF9lcnJvciBjYW5jZWxfd2l0aF9zdGF0dXMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOwotc3RhdGljIGdycGNfY2FsbF9lcnJvciBjbG9zZV93aXRoX3N0YXR1cyhncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jYWxsICpjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworc3RhdGljIHZvaWQgY2FuY2VsX3dpdGhfZXJyb3IoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZXJyb3IgKmVycm9yKTsKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfY2FsbChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqY2FsbF9zdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcik7CiBzdGF0aWMgdm9pZCByZWNlaXZpbmdfc2xpY2VfcmVhZHkoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKmJjdGxwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZXJyb3IgKmVycm9yKTsKK3N0YXRpYyB2b2lkIGdldF9maW5hbF9zdGF0dXMoZ3JwY19jYWxsICpjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqc2V0X3ZhbHVlKShncnBjX3N0YXR1c19jb2RlIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNldF92YWx1ZV91c2VyX2RhdGEsIGdycGNfc2xpY2UgKmRldGFpbHMpOworc3RhdGljIHZvaWQgc2V0X3N0YXR1c192YWx1ZV9kaXJlY3RseShncnBjX3N0YXR1c19jb2RlIHN0YXR1cywgdm9pZCAqZGVzdCk7CitzdGF0aWMgdm9pZCBzZXRfc3RhdHVzX2Zyb21fZXJyb3IoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfc291cmNlIHNvdXJjZSwgZ3JwY19lcnJvciAqZXJyb3IpOworc3RhdGljIHZvaWQgcHJvY2Vzc19kYXRhX2FmdGVyX21kKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBiYXRjaF9jb250cm9sICpiY3RsKTsKK3N0YXRpYyB2b2lkIHBvc3RfYmF0Y2hfY29tcGxldGlvbihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgYmF0Y2hfY29udHJvbCAqYmN0bCk7CitzdGF0aWMgdm9pZCBhZGRfYmF0Y2hfZXJyb3IoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGJhdGNoX2NvbnRyb2wgKmJjdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpOwogCiBncnBjX2Vycm9yICpncnBjX2NhbGxfY3JlYXRlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnBjX2NhbGxfY3JlYXRlX2FyZ3MgKmFyZ3MsCkBAIC0yNDYsMTQgKzI2MSwxNiBAQAogICAvKiBBbHdheXMgc3VwcG9ydCBubyBjb21wcmVzc2lvbiAqLwogICBHUFJfQklUU0VUKCZjYWxsLT5lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlciwgR1JQQ19DT01QUkVTU19OT05FKTsKICAgY2FsbC0+aXNfY2xpZW50ID0gYXJncy0+c2VydmVyX3RyYW5zcG9ydF9kYXRhID09IE5VTEw7Ci0gIGdycGNfbWRzdHIgKnBhdGggPSBOVUxMOworICBncnBjX3NsaWNlIHBhdGggPSBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIGlmIChjYWxsLT5pc19jbGllbnQpIHsKICAgICBHUFJfQVNTRVJUKGFyZ3MtPmFkZF9pbml0aWFsX21ldGFkYXRhX2NvdW50IDwKICAgICAgICAgICAgICAgIE1BWF9TRU5EX0VYVFJBX01FVEFEQVRBX0NPVU5UKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy0+YWRkX2luaXRpYWxfbWV0YWRhdGFfY291bnQ7IGkrKykgewogICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVtpXS5tZCA9IGFyZ3MtPmFkZF9pbml0aWFsX21ldGFkYXRhW2ldOwotICAgICAgaWYgKGFyZ3MtPmFkZF9pbml0aWFsX21ldGFkYXRhW2ldLT5rZXkgPT0gR1JQQ19NRFNUUl9QQVRIKSB7Ci0gICAgICAgIHBhdGggPSBHUlBDX01EU1RSX1JFRihhcmdzLT5hZGRfaW5pdGlhbF9tZXRhZGF0YVtpXS0+dmFsdWUpOworICAgICAgaWYgKGdycGNfc2xpY2VfZXEoR1JQQ19NREtFWShhcmdzLT5hZGRfaW5pdGlhbF9tZXRhZGF0YVtpXSksCisgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01EU1RSX1BBVEgpKSB7CisgICAgICAgIHBhdGggPSBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbCgKKyAgICAgICAgICAgIEdSUENfTURWQUxVRShhcmdzLT5hZGRfaW5pdGlhbF9tZXRhZGF0YVtpXSkpOwogICAgICAgfQogICAgIH0KICAgICBjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50ID0gKGludClhcmdzLT5hZGRfaW5pdGlhbF9tZXRhZGF0YV9jb3VudDsKQEAgLTMyMCwxMCArMzM3LDcgQEAKICAgICAgIGFyZ3MtPnNlcnZlcl90cmFuc3BvcnRfZGF0YSwgcGF0aCwgY2FsbC0+c3RhcnRfdGltZSwgc2VuZF9kZWFkbGluZSwKICAgICAgIENBTExfU1RBQ0tfRlJPTV9DQUxMKGNhbGwpKTsKICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewotICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwotICAgIGNvbnN0IGNoYXIgKmVycm9yX3N0cjsKLSAgICBncnBjX2Vycm9yX2dldF9zdGF0dXMoZXJyb3IsICZzdGF0dXMsICZlcnJvcl9zdHIpOwotICAgIGNsb3NlX3dpdGhfc3RhdHVzKGV4ZWNfY3R4LCBjYWxsLCBzdGF0dXMsIGVycm9yX3N0cik7CisgICAgY2FuY2VsX3dpdGhfZXJyb3IoZXhlY19jdHgsIGNhbGwsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CiAgIH0KICAgaWYgKGFyZ3MtPmNxICE9IE5VTEwpIHsKICAgICBHUFJfQVNTRVJUKApAQCAtMzQyLDcgKzM1Niw3IEBACiAgICAgICAgIGV4ZWNfY3R4LCBDQUxMX1NUQUNLX0ZST01fQ0FMTChjYWxsKSwgJmNhbGwtPnBvbGxlbnQpOwogICB9CiAKLSAgaWYgKHBhdGggIT0gTlVMTCkgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgcGF0aCk7CisgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIHBhdGgpOwogCiAgIEdQUl9USU1FUl9FTkQoImdycGNfY2FsbF9jcmVhdGUiLCAwKTsKICAgcmV0dXJuIGVycm9yOwpAQCAtMzc3LDI0ICszOTEsNiBAQAogICBHUlBDX0NBTExfU1RBQ0tfVU5SRUYoZXhlY19jdHgsIENBTExfU1RBQ0tfRlJPTV9DQUxMKGMpLCBSRUZfUkVBU09OKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0X2ZpbmFsX3N0YXR1cyhncnBjX2NhbGwgKmNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpzZXRfdmFsdWUpKGdycGNfc3RhdHVzX2NvZGUgY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2V0X3ZhbHVlX3VzZXJfZGF0YSkgewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IFNUQVRVU19TT1VSQ0VfQ09VTlQ7IGkrKykgewotICAgIGlmIChjYWxsLT5zdGF0dXNbaV0uaXNfc2V0KSB7Ci0gICAgICBzZXRfdmFsdWUoY2FsbC0+c3RhdHVzW2ldLmNvZGUsIHNldF92YWx1ZV91c2VyX2RhdGEpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICBpZiAoY2FsbC0+aXNfY2xpZW50KSB7Ci0gICAgc2V0X3ZhbHVlKEdSUENfU1RBVFVTX1VOS05PV04sIHNldF92YWx1ZV91c2VyX2RhdGEpOwotICB9IGVsc2UgewotICAgIHNldF92YWx1ZShHUlBDX1NUQVRVU19PSywgc2V0X3ZhbHVlX3VzZXJfZGF0YSk7Ci0gIH0KLX0KLQogc3RhdGljIHZvaWQgc2V0X3N0YXR1c192YWx1ZV9kaXJlY3RseShncnBjX3N0YXR1c19jb2RlIHN0YXR1cywgdm9pZCAqZGVzdCk7CiBzdGF0aWMgdm9pZCBkZXN0cm95X2NhbGwoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKmNhbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpIHsKQEAgLTQxMCwxMSArNDA2LDYgQEAKICAgICBncnBjX2J5dGVfc3RyZWFtX2Rlc3Ryb3koZXhlY19jdHgsIGMtPnJlY2VpdmluZ19zdHJlYW0pOwogICB9CiAgIGdwcl9tdV9kZXN0cm95KCZjLT5tdSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBTVEFUVVNfU09VUkNFX0NPVU5UOyBpKyspIHsKLSAgICBpZiAoYy0+c3RhdHVzW2ldLmRldGFpbHMpIHsKLSAgICAgIEdSUENfTURTVFJfVU5SRUYoZXhlY19jdHgsIGMtPnN0YXR1c1tpXS5kZXRhaWxzKTsKLSAgICB9Ci0gIH0KICAgZm9yIChpaSA9IDA7IGlpIDwgYy0+c2VuZF9leHRyYV9tZXRhZGF0YV9jb3VudDsgaWkrKykgewogICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBjLT5zZW5kX2V4dHJhX21ldGFkYXRhW2lpXS5tZCk7CiAgIH0KQEAgLTQyOCwyODUgKzQxOSwyMCBAQAogICB9CiAgIGdycGNfY2hhbm5lbCAqY2hhbm5lbCA9IGMtPmNoYW5uZWw7CiAKLSAgZ2V0X2ZpbmFsX3N0YXR1cyhjYWxsLCBzZXRfc3RhdHVzX3ZhbHVlX2RpcmVjdGx5LAotICAgICAgICAgICAgICAgICAgICZjLT5maW5hbF9pbmZvLmZpbmFsX3N0YXR1cyk7CisgIGdldF9maW5hbF9zdGF0dXMoY2FsbCwgc2V0X3N0YXR1c192YWx1ZV9kaXJlY3RseSwgJmMtPmZpbmFsX2luZm8uZmluYWxfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICBjLT5maW5hbF9pbmZvLnN0YXRzLmxhdGVuY3kgPQogICAgICAgZ3ByX3RpbWVfc3ViKGdwcl9ub3coR1BSX0NMT0NLX01PTk9UT05JQyksIGMtPnN0YXJ0X3RpbWUpOwogCisgIGZvciAoaSA9IDA7IGkgPCBTVEFUVVNfU09VUkNFX0NPVU5UOyBpKyspIHsKKyAgICBHUlBDX0VSUk9SX1VOUkVGKGMtPnN0YXR1c1tpXS5lcnJvcik7CisgIH0KKwogICBncnBjX2NhbGxfc3RhY2tfZGVzdHJveShleGVjX2N0eCwgQ0FMTF9TVEFDS19GUk9NX0NBTEwoYyksICZjLT5maW5hbF9pbmZvLCBjKTsKICAgR1JQQ19DSEFOTkVMX0lOVEVSTkFMX1VOUkVGKGV4ZWNfY3R4LCBjaGFubmVsLCAiY2FsbCIpOwogICBHUFJfVElNRVJfRU5EKCJkZXN0cm95X2NhbGwiLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3N0YXR1c19jb2RlKGdycGNfY2FsbCAqY2FsbCwgc3RhdHVzX3NvdXJjZSBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhdHVzKSB7Ci0gIGlmIChjYWxsLT5zdGF0dXNbc291cmNlXS5pc19zZXQpIHJldHVybjsKLQotICBjYWxsLT5zdGF0dXNbc291cmNlXS5pc19zZXQgPSAxOwotICBjYWxsLT5zdGF0dXNbc291cmNlXS5jb2RlID0gKGdycGNfc3RhdHVzX2NvZGUpc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfc3RhdHVzX2RldGFpbHMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfc291cmNlIHNvdXJjZSwgZ3JwY19tZHN0ciAqc3RhdHVzKSB7Ci0gIGlmIChjYWxsLT5zdGF0dXNbc291cmNlXS5kZXRhaWxzICE9IE5VTEwpIHsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBzdGF0dXMpOwotICB9IGVsc2UgewotICAgIGNhbGwtPnN0YXR1c1tzb3VyY2VdLmRldGFpbHMgPSBzdGF0dXM7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0X3N0YXR1c19mcm9tX2Vycm9yKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGwgKmNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3NvdXJjZSBzb3VyY2UsIGdycGNfZXJyb3IgKmVycm9yKSB7Ci0gIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwotICBjb25zdCBjaGFyICptc2c7Ci0gIGdycGNfZXJyb3JfZ2V0X3N0YXR1cyhlcnJvciwgJnN0YXR1cywgJm1zZyk7Ci0gIHNldF9zdGF0dXNfY29kZShjYWxsLCBzb3VyY2UsICh1aW50MzJfdClzdGF0dXMpOwotICBzZXRfc3RhdHVzX2RldGFpbHMoZXhlY19jdHgsIGNhbGwsIHNvdXJjZSwgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhtc2cpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2luY29taW5nX2NvbXByZXNzaW9uX2FsZ29yaXRobSgKLSAgICBncnBjX2NhbGwgKmNhbGwsIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGFsZ28pIHsKLSAgR1BSX0FTU0VSVChhbGdvIDwgR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UKTsKLSAgY2FsbC0+aW5jb21pbmdfY29tcHJlc3Npb25fYWxnb3JpdGhtID0gYWxnbzsKLX0KLQotZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZ3JwY19jYWxsX3Rlc3Rfb25seV9nZXRfY29tcHJlc3Npb25fYWxnb3JpdGhtKAotICAgIGdycGNfY2FsbCAqY2FsbCkgewotICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG07Ci0gIGdwcl9tdV9sb2NrKCZjYWxsLT5tdSk7Ci0gIGFsZ29yaXRobSA9IGNhbGwtPmluY29taW5nX2NvbXByZXNzaW9uX2FsZ29yaXRobTsKLSAgZ3ByX211X3VubG9jaygmY2FsbC0+bXUpOwotICByZXR1cm4gYWxnb3JpdGhtOwotfQotCi1zdGF0aWMgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zvcl9sZXZlbF9sb2NrZWQoCi0gICAgZ3JwY19jYWxsICpjYWxsLCBncnBjX2NvbXByZXNzaW9uX2xldmVsIGxldmVsKSB7Ci0gIHJldHVybiBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9mb3JfbGV2ZWwobGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIpOwotfQotCi11aW50MzJfdCBncnBjX2NhbGxfdGVzdF9vbmx5X2dldF9tZXNzYWdlX2ZsYWdzKGdycGNfY2FsbCAqY2FsbCkgewotICB1aW50MzJfdCBmbGFnczsKLSAgZ3ByX211X2xvY2soJmNhbGwtPm11KTsKLSAgZmxhZ3MgPSBjYWxsLT50ZXN0X29ubHlfbGFzdF9tZXNzYWdlX2ZsYWdzOwotICBncHJfbXVfdW5sb2NrKCZjYWxsLT5tdSk7Ci0gIHJldHVybiBmbGFnczsKLX0KLQotc3RhdGljIHZvaWQgZGVzdHJveV9lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlcih2b2lkICpwKSB7IHJldHVybjsgfQotCi1zdGF0aWMgdm9pZCBzZXRfZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsICpjYWxsLCBncnBjX21kZWxlbSAqbWRlbCkgewotICBzaXplX3QgaTsKLSAgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gYWxnb3JpdGhtOwotICBncnBjX3NsaWNlX2J1ZmZlciBhY2NlcHRfZW5jb2RpbmdfcGFydHM7Ci0gIGdycGNfc2xpY2UgYWNjZXB0X2VuY29kaW5nX3NsaWNlOwotICB2b2lkICphY2NlcHRlZF91c2VyX2RhdGE7Ci0KLSAgYWNjZXB0ZWRfdXNlcl9kYXRhID0KLSAgICAgIGdycGNfbWRlbGVtX2dldF91c2VyX2RhdGEobWRlbCwgZGVzdHJveV9lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlcik7Ci0gIGlmIChhY2NlcHRlZF91c2VyX2RhdGEgIT0gTlVMTCkgewotICAgIGNhbGwtPmVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyID0KLSAgICAgICAgKHVpbnQzMl90KSgoKHVpbnRwdHJfdClhY2NlcHRlZF91c2VyX2RhdGEpIC0gMSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgYWNjZXB0X2VuY29kaW5nX3NsaWNlID0gbWRlbC0+dmFsdWUtPnNsaWNlOwotICBncnBjX3NsaWNlX2J1ZmZlcl9pbml0KCZhY2NlcHRfZW5jb2RpbmdfcGFydHMpOwotICBncnBjX3NsaWNlX3NwbGl0KGFjY2VwdF9lbmNvZGluZ19zbGljZSwgIiwiLCAmYWNjZXB0X2VuY29kaW5nX3BhcnRzKTsKLQotICAvKiBObyBuZWVkIHRvIHplcm8gY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXI6IGdycGNfY2FsbF9jcmVhdGUgYWxyZWFkeQotICAgKiB6ZXJvZXMgdGhlIHdob2xlIGdycGNfY2FsbCAqLwotICAvKiBBbHdheXMgc3VwcG9ydCBubyBjb21wcmVzc2lvbiAqLwotICBHUFJfQklUU0VUKCZjYWxsLT5lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlciwgR1JQQ19DT01QUkVTU19OT05FKTsKLSAgZm9yIChpID0gMDsgaSA8IGFjY2VwdF9lbmNvZGluZ19wYXJ0cy5jb3VudDsgaSsrKSB7Ci0gICAgY29uc3QgZ3JwY19zbGljZSAqYWNjZXB0X2VuY29kaW5nX2VudHJ5X3NsaWNlID0KLSAgICAgICAgJmFjY2VwdF9lbmNvZGluZ19wYXJ0cy5zbGljZXNbaV07Ci0gICAgaWYgKGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlKAotICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilHUlBDX1NMSUNFX1NUQVJUX1BUUigqYWNjZXB0X2VuY29kaW5nX2VudHJ5X3NsaWNlKSwKLSAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKCphY2NlcHRfZW5jb2RpbmdfZW50cnlfc2xpY2UpLCAmYWxnb3JpdGhtKSkgewotICAgICAgR1BSX0JJVFNFVCgmY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIsIGFsZ29yaXRobSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNoYXIgKmFjY2VwdF9lbmNvZGluZ19lbnRyeV9zdHIgPQotICAgICAgICAgIGdycGNfZHVtcF9zbGljZSgqYWNjZXB0X2VuY29kaW5nX2VudHJ5X3NsaWNlLCBHUFJfRFVNUF9BU0NJSSk7Ci0gICAgICBncHJfbG9nKEdQUl9FUlJPUiwKLSAgICAgICAgICAgICAgIkludmFsaWQgZW50cnkgaW4gYWNjZXB0IGVuY29kaW5nIG1ldGFkYXRhOiAnJXMnLiBJZ25vcmluZy4iLAotICAgICAgICAgICAgICBhY2NlcHRfZW5jb2RpbmdfZW50cnlfc3RyKTsKLSAgICAgIGdwcl9mcmVlKGFjY2VwdF9lbmNvZGluZ19lbnRyeV9zdHIpOwotICAgIH0KLSAgfQotCi0gIGdycGNfc2xpY2VfYnVmZmVyX2Rlc3Ryb3lfaW50ZXJuYWwoZXhlY19jdHgsICZhY2NlcHRfZW5jb2RpbmdfcGFydHMpOwotCi0gIGdycGNfbWRlbGVtX3NldF91c2VyX2RhdGEoCi0gICAgICBtZGVsLCBkZXN0cm95X2VuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyLAotICAgICAgKHZvaWQgKikoKCh1aW50cHRyX3QpY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIpICsgMSkpOwotfQotCi11aW50MzJfdCBncnBjX2NhbGxfdGVzdF9vbmx5X2dldF9lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlcihncnBjX2NhbGwgKmNhbGwpIHsKLSAgdWludDMyX3QgZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXI7Ci0gIGdwcl9tdV9sb2NrKCZjYWxsLT5tdSk7Ci0gIGVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyID0gY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXI7Ci0gIGdwcl9tdV91bmxvY2soJmNhbGwtPm11KTsKLSAgcmV0dXJuIGVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfZmluYWxfZGV0YWlscyhncnBjX2NhbGwgKmNhbGwsIGNoYXIgKipvdXRfZGV0YWlscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb3V0X2RldGFpbHNfY2FwYWNpdHkpIHsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBTVEFUVVNfU09VUkNFX0NPVU5UOyBpKyspIHsKLSAgICBpZiAoY2FsbC0+c3RhdHVzW2ldLmlzX3NldCkgewotICAgICAgaWYgKGNhbGwtPnN0YXR1c1tpXS5kZXRhaWxzKSB7Ci0gICAgICAgIGdycGNfc2xpY2UgZGV0YWlscyA9IGNhbGwtPnN0YXR1c1tpXS5kZXRhaWxzLT5zbGljZTsKLSAgICAgICAgc2l6ZV90IGxlbiA9IEdSUENfU0xJQ0VfTEVOR1RIKGRldGFpbHMpOwotICAgICAgICBpZiAobGVuICsgMSA+ICpvdXRfZGV0YWlsc19jYXBhY2l0eSkgewotICAgICAgICAgICpvdXRfZGV0YWlsc19jYXBhY2l0eSA9Ci0gICAgICAgICAgICAgIEdQUl9NQVgobGVuICsgMSwgKm91dF9kZXRhaWxzX2NhcGFjaXR5ICogMyAvIDIpOwotICAgICAgICAgICpvdXRfZGV0YWlscyA9IGdwcl9yZWFsbG9jKCpvdXRfZGV0YWlscywgKm91dF9kZXRhaWxzX2NhcGFjaXR5KTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoKm91dF9kZXRhaWxzLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihkZXRhaWxzKSwgbGVuKTsKLSAgICAgICAgKCpvdXRfZGV0YWlscylbbGVuXSA9IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIG5vX2RldGFpbHM7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLW5vX2RldGFpbHM6Ci0gIGlmICgwID09ICpvdXRfZGV0YWlsc19jYXBhY2l0eSkgewotICAgICpvdXRfZGV0YWlsc19jYXBhY2l0eSA9IDg7Ci0gICAgKm91dF9kZXRhaWxzID0gZ3ByX21hbGxvYygqb3V0X2RldGFpbHNfY2FwYWNpdHkpOwotICB9Ci0gICoqb3V0X2RldGFpbHMgPSAwOwotfQotCi1zdGF0aWMgZ3JwY19saW5rZWRfbWRlbGVtICpsaW5rZWRfZnJvbV9tZChncnBjX21ldGFkYXRhICptZCkgewotICByZXR1cm4gKGdycGNfbGlua2VkX21kZWxlbSAqKSZtZC0+aW50ZXJuYWxfZGF0YTsKLX0KLQotc3RhdGljIGdycGNfbWV0YWRhdGEgKmdldF9tZF9lbGVtKGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGEgKmFkZGl0aW9uYWxfbWV0YWRhdGEsIGludCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCkgewotICBncnBjX21ldGFkYXRhICpyZXMgPQotICAgICAgaSA8IGNvdW50ID8gJm1ldGFkYXRhW2ldIDogJmFkZGl0aW9uYWxfbWV0YWRhdGFbaSAtIGNvdW50XTsKLSAgR1BSX0FTU0VSVChyZXMpOwotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IHByZXBhcmVfYXBwbGljYXRpb25fbWV0YWRhdGEoCi0gICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqY2FsbCwgaW50IGNvdW50LAotICAgIGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhLCBpbnQgaXNfdHJhaWxpbmcsIGludCBwcmVwZW5kX2V4dHJhX21ldGFkYXRhLAotICAgIGdycGNfbWV0YWRhdGEgKmFkZGl0aW9uYWxfbWV0YWRhdGEsIGludCBhZGRpdGlvbmFsX21ldGFkYXRhX2NvdW50KSB7Ci0gIGludCB0b3RhbF9jb3VudCA9IGNvdW50ICsgYWRkaXRpb25hbF9tZXRhZGF0YV9jb3VudDsKLSAgaW50IGk7Ci0gIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoID0KLSAgICAgICZjYWxsLT5tZXRhZGF0YV9iYXRjaFswIC8qIGlzX3JlY2VpdmluZyAqL11baXNfdHJhaWxpbmddOwotICBmb3IgKGkgPSAwOyBpIDwgdG90YWxfY291bnQ7IGkrKykgewotICAgIGNvbnN0IGdycGNfbWV0YWRhdGEgKm1kID0KLSAgICAgICAgZ2V0X21kX2VsZW0obWV0YWRhdGEsIGFkZGl0aW9uYWxfbWV0YWRhdGEsIGksIGNvdW50KTsKLSAgICBncnBjX2xpbmtlZF9tZGVsZW0gKmwgPSAoZ3JwY19saW5rZWRfbWRlbGVtICopJm1kLT5pbnRlcm5hbF9kYXRhOwotICAgIEdQUl9BU1NFUlQoc2l6ZW9mKGdycGNfbGlua2VkX21kZWxlbSkgPT0gc2l6ZW9mKG1kLT5pbnRlcm5hbF9kYXRhKSk7Ci0gICAgbC0+bWQgPSBncnBjX21kZWxlbV9mcm9tX3N0cmluZ19hbmRfYnVmZmVyKAotICAgICAgICBleGVjX2N0eCwgbWQtPmtleSwgKGNvbnN0IHVpbnQ4X3QgKiltZC0+dmFsdWUsIG1kLT52YWx1ZV9sZW5ndGgpOwotICAgIGlmICghZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsKGdycGNfbWRzdHJfYXNfY19zdHJpbmcobC0+bWQtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NRFNUUl9MRU5HVEgobC0+bWQtPmtleSkpKSB7Ci0gICAgICBncHJfbG9nKEdQUl9FUlJPUiwgImF0dGVtcHQgdG8gc2VuZCBpbnZhbGlkIG1ldGFkYXRhIGtleTogJXMiLAotICAgICAgICAgICAgICBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKGwtPm1kLT5rZXkpKTsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAoIWdycGNfaXNfYmluYXJ5X2hlYWRlcihncnBjX21kc3RyX2FzX2Nfc3RyaW5nKGwtPm1kLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01EU1RSX0xFTkdUSChsLT5tZC0+a2V5KSkgJiYKLSAgICAgICAgICAgICAgICFncnBjX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWwoCi0gICAgICAgICAgICAgICAgICAgZ3JwY19tZHN0cl9hc19jX3N0cmluZyhsLT5tZC0+dmFsdWUpLAotICAgICAgICAgICAgICAgICAgIEdSUENfTURTVFJfTEVOR1RIKGwtPm1kLT52YWx1ZSkpKSB7Ci0gICAgICBncHJfbG9nKEdQUl9FUlJPUiwgImF0dGVtcHQgdG8gc2VuZCBpbnZhbGlkIG1ldGFkYXRhIHZhbHVlIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKGkgIT0gdG90YWxfY291bnQpIHsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8PSBpOyBqKyspIHsKLSAgICAgIGNvbnN0IGdycGNfbWV0YWRhdGEgKm1kID0KLSAgICAgICAgICBnZXRfbWRfZWxlbShtZXRhZGF0YSwgYWRkaXRpb25hbF9tZXRhZGF0YSwgaiwgY291bnQpOwotICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpsID0gKGdycGNfbGlua2VkX21kZWxlbSAqKSZtZC0+aW50ZXJuYWxfZGF0YTsKLSAgICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBsLT5tZCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotICB9Ci0gIGlmIChwcmVwZW5kX2V4dHJhX21ldGFkYXRhKSB7Ci0gICAgaWYgKGNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFfY291bnQgPT0gMCkgewotICAgICAgcHJlcGVuZF9leHRyYV9tZXRhZGF0YSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAoaSA9IDE7IGkgPCBjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50OyBpKyspIHsKLSAgICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVtpXS5wcmV2ID0gJmNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFbaSAtIDFdOwotICAgICAgfQotICAgICAgZm9yIChpID0gMDsgaSA8IGNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFfY291bnQgLSAxOyBpKyspIHsKLSAgICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVtpXS5uZXh0ID0gJmNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFbaSArIDFdOwotICAgICAgfQotICAgIH0KLSAgfQotICBmb3IgKGkgPSAxOyBpIDwgdG90YWxfY291bnQ7IGkrKykgewotICAgIGdycGNfbWV0YWRhdGEgKm1kID0gZ2V0X21kX2VsZW0obWV0YWRhdGEsIGFkZGl0aW9uYWxfbWV0YWRhdGEsIGksIGNvdW50KTsKLSAgICBncnBjX21ldGFkYXRhICpwcmV2X21kID0KLSAgICAgICAgZ2V0X21kX2VsZW0obWV0YWRhdGEsIGFkZGl0aW9uYWxfbWV0YWRhdGEsIGkgLSAxLCBjb3VudCk7Ci0gICAgbGlua2VkX2Zyb21fbWQobWQpLT5wcmV2ID0gbGlua2VkX2Zyb21fbWQocHJldl9tZCk7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IHRvdGFsX2NvdW50IC0gMTsgaSsrKSB7Ci0gICAgZ3JwY19tZXRhZGF0YSAqbWQgPSBnZXRfbWRfZWxlbShtZXRhZGF0YSwgYWRkaXRpb25hbF9tZXRhZGF0YSwgaSwgY291bnQpOwotICAgIGdycGNfbWV0YWRhdGEgKm5leHRfbWQgPQotICAgICAgICBnZXRfbWRfZWxlbShtZXRhZGF0YSwgYWRkaXRpb25hbF9tZXRhZGF0YSwgaSArIDEsIGNvdW50KTsKLSAgICBsaW5rZWRfZnJvbV9tZChtZCktPm5leHQgPSBsaW5rZWRfZnJvbV9tZChuZXh0X21kKTsKLSAgfQotCi0gIHN3aXRjaCAocHJlcGVuZF9leHRyYV9tZXRhZGF0YSAqIDIgKyAodG90YWxfY291bnQgIT0gMCkpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAvKiBubyBwcmVwZW5kLCBubyBtZXRhZGF0YSA9PiBub3RoaW5nIHRvIGRvICovCi0gICAgICBiYXRjaC0+bGlzdC5oZWFkID0gYmF0Y2gtPmxpc3QudGFpbCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE6IHsKLSAgICAgIC8qIG1ldGFkYXRhLCBidXQgbm8gcHJlcGVuZCAqLwotICAgICAgZ3JwY19tZXRhZGF0YSAqZmlyc3RfbWQgPQotICAgICAgICAgIGdldF9tZF9lbGVtKG1ldGFkYXRhLCBhZGRpdGlvbmFsX21ldGFkYXRhLCAwLCBjb3VudCk7Ci0gICAgICBncnBjX21ldGFkYXRhICpsYXN0X21kID0KLSAgICAgICAgICBnZXRfbWRfZWxlbShtZXRhZGF0YSwgYWRkaXRpb25hbF9tZXRhZGF0YSwgdG90YWxfY291bnQgLSAxLCBjb3VudCk7Ci0gICAgICBiYXRjaC0+bGlzdC5oZWFkID0gbGlua2VkX2Zyb21fbWQoZmlyc3RfbWQpOwotICAgICAgYmF0Y2gtPmxpc3QudGFpbCA9IGxpbmtlZF9mcm9tX21kKGxhc3RfbWQpOwotICAgICAgYmF0Y2gtPmxpc3QuaGVhZC0+cHJldiA9IE5VTEw7Ci0gICAgICBiYXRjaC0+bGlzdC50YWlsLT5uZXh0ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIDI6Ci0gICAgICAvKiBwcmVwZW5kLCBidXQgbm8gbWQgKi8KLSAgICAgIGJhdGNoLT5saXN0LmhlYWQgPSAmY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVswXTsKLSAgICAgIGJhdGNoLT5saXN0LnRhaWwgPQotICAgICAgICAgICZjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhW2NhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFfY291bnQgLSAxXTsKLSAgICAgIGJhdGNoLT5saXN0LmhlYWQtPnByZXYgPSBOVUxMOwotICAgICAgYmF0Y2gtPmxpc3QudGFpbC0+bmV4dCA9IE5VTEw7Ci0gICAgICBjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50ID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzogewotICAgICAgLyogcHJlcGVuZCBBTkQgbWQgKi8KLSAgICAgIGdycGNfbWV0YWRhdGEgKmZpcnN0X21kID0KLSAgICAgICAgICBnZXRfbWRfZWxlbShtZXRhZGF0YSwgYWRkaXRpb25hbF9tZXRhZGF0YSwgMCwgY291bnQpOwotICAgICAgZ3JwY19tZXRhZGF0YSAqbGFzdF9tZCA9Ci0gICAgICAgICAgZ2V0X21kX2VsZW0obWV0YWRhdGEsIGFkZGl0aW9uYWxfbWV0YWRhdGEsIHRvdGFsX2NvdW50IC0gMSwgY291bnQpOwotICAgICAgYmF0Y2gtPmxpc3QuaGVhZCA9ICZjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhWzBdOwotICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVtjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50IC0gMV0ubmV4dCA9Ci0gICAgICAgICAgbGlua2VkX2Zyb21fbWQoZmlyc3RfbWQpOwotICAgICAgbGlua2VkX2Zyb21fbWQoZmlyc3RfbWQpLT5wcmV2ID0KLSAgICAgICAgICAmY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVtjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50IC0gMV07Ci0gICAgICBiYXRjaC0+bGlzdC50YWlsID0gbGlua2VkX2Zyb21fbWQobGFzdF9tZCk7Ci0gICAgICBiYXRjaC0+bGlzdC5oZWFkLT5wcmV2ID0gTlVMTDsKLSAgICAgIGJhdGNoLT5saXN0LnRhaWwtPm5leHQgPSBOVUxMOwotICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YV9jb3VudCA9IDA7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdQUl9VTlJFQUNIQUJMRV9DT0RFKHJldHVybiAwKTsKLSAgfQotCi0gIHJldHVybiAxOwotfQotCiB2b2lkIGdycGNfY2FsbF9kZXN0cm95KGdycGNfY2FsbCAqYykgewogICBpbnQgY2FuY2VsOwogICBncnBjX2NhbGwgKnBhcmVudCA9IGMtPnBhcmVudDsKQEAgLTc0NywxMTcgKzQ3Myw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogfQogCi1ncnBjX2NhbGxfZXJyb3IgZ3JwY19jYWxsX2NhbmNlbF93aXRoX3N0YXR1cyhncnBjX2NhbGwgKmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVzZXJ2ZWQpIHsKLSAgZ3JwY19jYWxsX2Vycm9yIHI7Ci0gIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7Ci0gIEdSUENfQVBJX1RSQUNFKAotICAgICAgImdycGNfY2FsbF9jYW5jZWxfd2l0aF9zdGF0dXMoIgotICAgICAgImM9JXAsIHN0YXR1cz0lZCwgZGVzY3JpcHRpb249JXMsIHJlc2VydmVkPSVwKSIsCi0gICAgICA0LCAoYywgKGludClzdGF0dXMsIGRlc2NyaXB0aW9uLCByZXNlcnZlZCkpOwotICBHUFJfQVNTRVJUKHJlc2VydmVkID09IE5VTEwpOwotICBncHJfbXVfbG9jaygmYy0+bXUpOwotICByID0gY2FuY2VsX3dpdGhfc3RhdHVzKCZleGVjX2N0eCwgYywgc3RhdHVzLCBkZXNjcmlwdGlvbik7Ci0gIGdwcl9tdV91bmxvY2soJmMtPm11KTsKLSAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKLSAgcmV0dXJuIHI7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHRlcm1pbmF0aW9uX2Nsb3N1cmUgewotICBncnBjX2Nsb3N1cmUgY2xvc3VyZTsKLSAgZ3JwY19jYWxsICpjYWxsOwotICBncnBjX2Vycm9yICplcnJvcjsKLSAgZW51bSB7IFRDX0NBTkNFTCwgVENfQ0xPU0UgfSB0eXBlOwotICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3Agb3A7Ci19IHRlcm1pbmF0aW9uX2Nsb3N1cmU7Ci0KLXN0YXRpYyB2b2lkIGRvbmVfdGVybWluYXRpb24oZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnRjcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpIHsKLSAgdGVybWluYXRpb25fY2xvc3VyZSAqdGMgPSB0Y3A7Ci0gIHN3aXRjaCAodGMtPnR5cGUpIHsKLSAgICBjYXNlIFRDX0NBTkNFTDoKLSAgICAgIEdSUENfQ0FMTF9JTlRFUk5BTF9VTlJFRihleGVjX2N0eCwgdGMtPmNhbGwsICJjYW5jZWwiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVENfQ0xPU0U6Ci0gICAgICBHUlBDX0NBTExfSU5URVJOQUxfVU5SRUYoZXhlY19jdHgsIHRjLT5jYWxsLCAiY2xvc2UiKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdSUENfRVJST1JfVU5SRUYodGMtPmVycm9yKTsKLSAgZ3ByX2ZyZWUodGMpOwotfQotCi1zdGF0aWMgdm9pZCBzZW5kX2NhbmNlbChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdGNwLCBncnBjX2Vycm9yICplcnJvcikgewotICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YyA9IHRjcDsKLSAgbWVtc2V0KCZ0Yy0+b3AsIDAsIHNpemVvZih0Yy0+b3ApKTsKLSAgdGMtPm9wLmNhbmNlbF9lcnJvciA9IHRjLT5lcnJvcjsKLSAgLyogcmV1c2UgY2xvc3VyZSB0byBjYXRjaCBjb21wbGV0aW9uICovCi0gIGdycGNfY2xvc3VyZV9pbml0KCZ0Yy0+Y2xvc3VyZSwgZG9uZV90ZXJtaW5hdGlvbiwgdGMsCi0gICAgICAgICAgICAgICAgICAgIGdycGNfc2NoZWR1bGVfb25fZXhlY19jdHgpOwotICB0Yy0+b3Aub25fY29tcGxldGUgPSAmdGMtPmNsb3N1cmU7Ci0gIGV4ZWN1dGVfb3AoZXhlY19jdHgsIHRjLT5jYWxsLCAmdGMtPm9wKTsKLX0KLQotc3RhdGljIHZvaWQgc2VuZF9jbG9zZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdGNwLCBncnBjX2Vycm9yICplcnJvcikgewotICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YyA9IHRjcDsKLSAgbWVtc2V0KCZ0Yy0+b3AsIDAsIHNpemVvZih0Yy0+b3ApKTsKLSAgdGMtPm9wLmNsb3NlX2Vycm9yID0gdGMtPmVycm9yOwotICAvKiByZXVzZSBjbG9zdXJlIHRvIGNhdGNoIGNvbXBsZXRpb24gKi8KLSAgZ3JwY19jbG9zdXJlX2luaXQoJnRjLT5jbG9zdXJlLCBkb25lX3Rlcm1pbmF0aW9uLCB0YywKLSAgICAgICAgICAgICAgICAgICAgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7Ci0gIHRjLT5vcC5vbl9jb21wbGV0ZSA9ICZ0Yy0+Y2xvc3VyZTsKLSAgZXhlY3V0ZV9vcChleGVjX2N0eCwgdGMtPmNhbGwsICZ0Yy0+b3ApOwotfQotCi1zdGF0aWMgZ3JwY19jYWxsX2Vycm9yIHRlcm1pbmF0ZV93aXRoX3N0YXR1cyhncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uX2Nsb3N1cmUgKnRjKSB7Ci0gIHNldF9zdGF0dXNfZnJvbV9lcnJvcihleGVjX2N0eCwgdGMtPmNhbGwsIFNUQVRVU19GUk9NX0FQSV9PVkVSUklERSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRjLT5lcnJvcik7Ci0KLSAgaWYgKHRjLT50eXBlID09IFRDX0NBTkNFTCkgewotICAgIGdycGNfY2xvc3VyZV9pbml0KCZ0Yy0+Y2xvc3VyZSwgc2VuZF9jYW5jZWwsIHRjLCBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKLSAgICBHUlBDX0NBTExfSU5URVJOQUxfUkVGKHRjLT5jYWxsLCAiY2FuY2VsIik7Ci0gIH0gZWxzZSBpZiAodGMtPnR5cGUgPT0gVENfQ0xPU0UpIHsKLSAgICBncnBjX2Nsb3N1cmVfaW5pdCgmdGMtPmNsb3N1cmUsIHNlbmRfY2xvc2UsIHRjLCBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKLSAgICBHUlBDX0NBTExfSU5URVJOQUxfUkVGKHRjLT5jYWxsLCAiY2xvc2UiKTsKLSAgfQotICBncnBjX2Nsb3N1cmVfc2NoZWQoZXhlY19jdHgsICZ0Yy0+Y2xvc3VyZSwgR1JQQ19FUlJPUl9OT05FKTsKLSAgcmV0dXJuIEdSUENfQ0FMTF9PSzsKLX0KLQotc3RhdGljIGdycGNfY2FsbF9lcnJvciBjYW5jZWxfd2l0aF9zdGF0dXMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pIHsKLSAgR1BSX0FTU0VSVChzdGF0dXMgIT0gR1JQQ19TVEFUVVNfT0spOwotICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YyA9IGdwcl9tYWxsb2Moc2l6ZW9mKCp0YykpOwotICBtZW1zZXQodGMsIDAsIHNpemVvZih0ZXJtaW5hdGlvbl9jbG9zdXJlKSk7Ci0gIHRjLT50eXBlID0gVENfQ0FOQ0VMOwotICB0Yy0+Y2FsbCA9IGM7Ci0gIHRjLT5lcnJvciA9IGdycGNfZXJyb3Jfc2V0X2ludCgKLSAgICAgIGdycGNfZXJyb3Jfc2V0X3N0cihHUlBDX0VSUk9SX0NSRUFURShkZXNjcmlwdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9TVFJfR1JQQ19NRVNTQUdFLCBkZXNjcmlwdGlvbiksCi0gICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgc3RhdHVzKTsKLQotICByZXR1cm4gdGVybWluYXRlX3dpdGhfc3RhdHVzKGV4ZWNfY3R4LCB0Yyk7Ci19Ci0KLXN0YXRpYyBncnBjX2NhbGxfZXJyb3IgY2xvc2Vfd2l0aF9zdGF0dXMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7Ci0gIEdQUl9BU1NFUlQoc3RhdHVzICE9IEdSUENfU1RBVFVTX09LKTsKLSAgdGVybWluYXRpb25fY2xvc3VyZSAqdGMgPSBncHJfbWFsbG9jKHNpemVvZigqdGMpKTsKLSAgbWVtc2V0KHRjLCAwLCBzaXplb2YodGVybWluYXRpb25fY2xvc3VyZSkpOwotICB0Yy0+dHlwZSA9IFRDX0NMT1NFOwotICB0Yy0+Y2FsbCA9IGM7Ci0gIHRjLT5lcnJvciA9IGdycGNfZXJyb3Jfc2V0X2ludCgKLSAgICAgIGdycGNfZXJyb3Jfc2V0X3N0cihHUlBDX0VSUk9SX0NSRUFURShkZXNjcmlwdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9TVFJfR1JQQ19NRVNTQUdFLCBkZXNjcmlwdGlvbiksCi0gICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgc3RhdHVzKTsKLQotICByZXR1cm4gdGVybWluYXRlX3dpdGhfc3RhdHVzKGV4ZWNfY3R4LCB0Yyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGV4ZWN1dGVfb3AoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqY2FsbCwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCkgewogICBncnBjX2NhbGxfZWxlbWVudCAqZWxlbTsKQEAgLTg4OSwyNSArNTA0LDMzMCBAQAogICByZXR1cm4gQ0FMTF9GUk9NX1RPUF9FTEVNKGVsZW0pOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ0FOQ0VMTEFUSU9OCisgKi8KKworZ3JwY19jYWxsX2Vycm9yIGdycGNfY2FsbF9jYW5jZWxfd2l0aF9zdGF0dXMoZ3JwY19jYWxsICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlc2VydmVkKSB7CisgIGdycGNfY2FsbF9lcnJvciByOworICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOworICBHUlBDX0FQSV9UUkFDRSgKKyAgICAgICJncnBjX2NhbGxfY2FuY2VsX3dpdGhfc3RhdHVzKCIKKyAgICAgICJjPSVwLCBzdGF0dXM9JWQsIGRlc2NyaXB0aW9uPSVzLCByZXNlcnZlZD0lcCkiLAorICAgICAgNCwgKGMsIChpbnQpc3RhdHVzLCBkZXNjcmlwdGlvbiwgcmVzZXJ2ZWQpKTsKKyAgR1BSX0FTU0VSVChyZXNlcnZlZCA9PSBOVUxMKTsKKyAgZ3ByX211X2xvY2soJmMtPm11KTsKKyAgciA9IGNhbmNlbF93aXRoX3N0YXR1cygmZXhlY19jdHgsIGMsIHN0YXR1cywgZGVzY3JpcHRpb24pOworICBncHJfbXVfdW5sb2NrKCZjLT5tdSk7CisgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CisgIHJldHVybiByOworfQorCit0eXBlZGVmIHN0cnVjdCB0ZXJtaW5hdGlvbl9jbG9zdXJlIHsKKyAgZ3JwY19jbG9zdXJlIGNsb3N1cmU7CisgIGdycGNfY2FsbCAqY2FsbDsKKyAgZ3JwY19lcnJvciAqZXJyb3I7CisgIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCBvcDsKK30gdGVybWluYXRpb25fY2xvc3VyZTsKKworc3RhdGljIHZvaWQgZG9uZV90ZXJtaW5hdGlvbihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdGNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcikgeworICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YyA9IHRjcDsKKyAgR1JQQ19DQUxMX0lOVEVSTkFMX1VOUkVGKGV4ZWNfY3R4LCB0Yy0+Y2FsbCwgInRlcm1pbmF0aW9uIik7CisgIGdwcl9mcmVlKHRjKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF90ZXJtaW5hdGlvbihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdGNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcikgeworICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YyA9IHRjcDsKKyAgbWVtc2V0KCZ0Yy0+b3AsIDAsIHNpemVvZih0Yy0+b3ApKTsKKyAgdGMtPm9wLmNhbmNlbF9lcnJvciA9IHRjLT5lcnJvcjsKKyAgLyogcmV1c2UgY2xvc3VyZSB0byBjYXRjaCBjb21wbGV0aW9uICovCisgIGdycGNfY2xvc3VyZV9pbml0KCZ0Yy0+Y2xvc3VyZSwgZG9uZV90ZXJtaW5hdGlvbiwgdGMsCisgICAgICAgICAgICAgICAgICAgIGdycGNfc2NoZWR1bGVfb25fZXhlY19jdHgpOworICB0Yy0+b3Aub25fY29tcGxldGUgPSAmdGMtPmNsb3N1cmU7CisgIGV4ZWN1dGVfb3AoZXhlY19jdHgsIHRjLT5jYWxsLCAmdGMtPm9wKTsKK30KKworc3RhdGljIGdycGNfY2FsbF9lcnJvciB0ZXJtaW5hdGVfd2l0aF9zdGF0dXMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YykgeworICBzZXRfc3RhdHVzX2Zyb21fZXJyb3IoZXhlY19jdHgsIHRjLT5jYWxsLCBTVEFUVVNfRlJPTV9BUElfT1ZFUlJJREUsCisgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX1JFRih0Yy0+ZXJyb3IpKTsKKyAgZ3JwY19jbG9zdXJlX2luaXQoJnRjLT5jbG9zdXJlLCBzZW5kX3Rlcm1pbmF0aW9uLCB0YywKKyAgICAgICAgICAgICAgICAgICAgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7CisgIEdSUENfQ0FMTF9JTlRFUk5BTF9SRUYodGMtPmNhbGwsICJ0ZXJtaW5hdGlvbiIpOworICBncnBjX2Nsb3N1cmVfc2NoZWQoZXhlY19jdHgsICZ0Yy0+Y2xvc3VyZSwgR1JQQ19FUlJPUl9OT05FKTsKKyAgcmV0dXJuIEdSUENfQ0FMTF9PSzsKK30KKworc3RhdGljIGdycGNfY2FsbF9lcnJvciB0ZXJtaW5hdGVfd2l0aF9lcnJvcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsICpjLCBncnBjX2Vycm9yICplcnJvcikgeworICB0ZXJtaW5hdGlvbl9jbG9zdXJlICp0YyA9IGdwcl9tYWxsb2Moc2l6ZW9mKCp0YykpOworICBtZW1zZXQodGMsIDAsIHNpemVvZigqdGMpKTsKKyAgdGMtPmNhbGwgPSBjOworICB0Yy0+ZXJyb3IgPSBlcnJvcjsKKyAgcmV0dXJuIHRlcm1pbmF0ZV93aXRoX3N0YXR1cyhleGVjX2N0eCwgdGMpOworfQorCitzdGF0aWMgdm9pZCBjYW5jZWxfd2l0aF9lcnJvcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jYWxsICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpIHsKKyAgdGVybWluYXRlX3dpdGhfZXJyb3IoZXhlY19jdHgsIGMsIGVycm9yKTsKK30KKworc3RhdGljIGdycGNfZXJyb3IgKmVycm9yX2Zyb21fc3RhdHVzKGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIHJldHVybiBncnBjX2Vycm9yX3NldF9pbnQoCisgICAgICBncnBjX2Vycm9yX3NldF9zdHIoR1JQQ19FUlJPUl9DUkVBVEUoZGVzY3JpcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfU1RSX0dSUENfTUVTU0FHRSwgZGVzY3JpcHRpb24pLAorICAgICAgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBncnBjX2NhbGxfZXJyb3IgY2FuY2VsX3dpdGhfc3RhdHVzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGwgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKSB7CisgIHJldHVybiB0ZXJtaW5hdGVfd2l0aF9lcnJvcihleGVjX2N0eCwgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Zyb21fc3RhdHVzKHN0YXR1cywgZGVzY3JpcHRpb24pKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZJTkFMIFNUQVRVUyBDT0RFIE1BTklQVUxBVElPTgorICovCisKK3N0YXRpYyB2b2lkIGdldF9maW5hbF9zdGF0dXNfZnJvbShncnBjX2NhbGwgKmNhbGwsIHN0YXR1c19zb3VyY2UgZnJvbV9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnNldF92YWx1ZSkoZ3JwY19zdGF0dXNfY29kZSBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2V0X3ZhbHVlX3VzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlICpkZXRhaWxzKSB7CisgIGdycGNfc3RhdHVzX2NvZGUgY29kZTsKKyAgY29uc3QgY2hhciAqbXNnID0gTlVMTDsKKyAgZ3JwY19lcnJvcl9nZXRfc3RhdHVzKGNhbGwtPnN0YXR1c1tmcm9tX3NvdXJjZV0uZXJyb3IsIGNhbGwtPnNlbmRfZGVhZGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAmY29kZSwgJm1zZywgTlVMTCk7CisKKyAgc2V0X3ZhbHVlKGNvZGUsIHNldF92YWx1ZV91c2VyX2RhdGEpOworICBpZiAoZGV0YWlscyAhPSBOVUxMKSB7CisgICAgKmRldGFpbHMgPQorICAgICAgICBtc2cgPT0gTlVMTCA/IGdycGNfZW1wdHlfc2xpY2UoKSA6IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKG1zZyk7CisgIH0KK30KKworc3RhdGljIHZvaWQgZ2V0X2ZpbmFsX3N0YXR1cyhncnBjX2NhbGwgKmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpzZXRfdmFsdWUpKGdycGNfc3RhdHVzX2NvZGUgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2V0X3ZhbHVlX3VzZXJfZGF0YSwgZ3JwY19zbGljZSAqZGV0YWlscykgeworICBpbnQgaTsKKyAgLyogc2VhcmNoIGZvciB0aGUgYmVzdCBzdGF0dXMgd2UgY2FuIHByZXNlbnQ6IGlkZWFsbHkgdGhlIGVycm9yIHdlIHVzZSBoYXMgYQorICAgICBjbGVhcmx5IGRlZmluZWQgZ3JwYy1zdGF0dXMsIGFuZCB3ZSdsbCBwcmVmZXIgdGhhdC4gKi8KKyAgZm9yIChpID0gMDsgaSA8IFNUQVRVU19TT1VSQ0VfQ09VTlQ7IGkrKykgeworICAgIGlmIChjYWxsLT5zdGF0dXNbaV0uaXNfc2V0ICYmCisgICAgICAgIGdycGNfZXJyb3JfaGFzX2NsZWFyX2dycGNfc3RhdHVzKGNhbGwtPnN0YXR1c1tpXS5lcnJvcikpIHsKKyAgICAgIGdldF9maW5hbF9zdGF0dXNfZnJvbShjYWxsLCAoc3RhdHVzX3NvdXJjZSlpLCBzZXRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ZhbHVlX3VzZXJfZGF0YSwgZGV0YWlscyk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisgIC8qIElmIG5vIGNsZWFybHkgZGVmaW5lZCBzdGF0dXMgZXhpc3RzLCBzZWFyY2ggZm9yICdhbnl0aGluZycgKi8KKyAgZm9yIChpID0gMDsgaSA8IFNUQVRVU19TT1VSQ0VfQ09VTlQ7IGkrKykgeworICAgIGlmIChjYWxsLT5zdGF0dXNbaV0uaXNfc2V0KSB7CisgICAgICBnZXRfZmluYWxfc3RhdHVzX2Zyb20oY2FsbCwgKHN0YXR1c19zb3VyY2UpaSwgc2V0X3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF92YWx1ZV91c2VyX2RhdGEsIGRldGFpbHMpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorICAvKiBJZiBub3RoaW5nIGV4aXN0cywgc2V0IHNvbWUgZGVmYXVsdCAqLworICBpZiAoY2FsbC0+aXNfY2xpZW50KSB7CisgICAgc2V0X3ZhbHVlKEdSUENfU1RBVFVTX1VOS05PV04sIHNldF92YWx1ZV91c2VyX2RhdGEpOworICB9IGVsc2UgeworICAgIHNldF92YWx1ZShHUlBDX1NUQVRVU19PSywgc2V0X3ZhbHVlX3VzZXJfZGF0YSk7CisgIH0KK30KKworc3RhdGljIHZvaWQgc2V0X3N0YXR1c19mcm9tX2Vycm9yKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGwgKmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3NvdXJjZSBzb3VyY2UsIGdycGNfZXJyb3IgKmVycm9yKSB7CisgIGlmIChjYWxsLT5zdGF0dXNbc291cmNlXS5pc19zZXQpIHsKKyAgICBHUlBDX0VSUk9SX1VOUkVGKGVycm9yKTsKKyAgICByZXR1cm47CisgIH0KKyAgY2FsbC0+c3RhdHVzW3NvdXJjZV0uaXNfc2V0ID0gdHJ1ZTsKKyAgY2FsbC0+c3RhdHVzW3NvdXJjZV0uZXJyb3IgPSBlcnJvcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENPTVBSRVNTSU9OCisgKi8KKworc3RhdGljIHZvaWQgc2V0X2luY29taW5nX2NvbXByZXNzaW9uX2FsZ29yaXRobSgKKyAgICBncnBjX2NhbGwgKmNhbGwsIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGFsZ28pIHsKKyAgR1BSX0FTU0VSVChhbGdvIDwgR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UKTsKKyAgY2FsbC0+aW5jb21pbmdfY29tcHJlc3Npb25fYWxnb3JpdGhtID0gYWxnbzsKK30KKworZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZ3JwY19jYWxsX3Rlc3Rfb25seV9nZXRfY29tcHJlc3Npb25fYWxnb3JpdGhtKAorICAgIGdycGNfY2FsbCAqY2FsbCkgeworICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG07CisgIGdwcl9tdV9sb2NrKCZjYWxsLT5tdSk7CisgIGFsZ29yaXRobSA9IGNhbGwtPmluY29taW5nX2NvbXByZXNzaW9uX2FsZ29yaXRobTsKKyAgZ3ByX211X3VubG9jaygmY2FsbC0+bXUpOworICByZXR1cm4gYWxnb3JpdGhtOworfQorCitzdGF0aWMgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zvcl9sZXZlbF9sb2NrZWQoCisgICAgZ3JwY19jYWxsICpjYWxsLCBncnBjX2NvbXByZXNzaW9uX2xldmVsIGxldmVsKSB7CisgIHJldHVybiBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9mb3JfbGV2ZWwobGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIpOworfQorCit1aW50MzJfdCBncnBjX2NhbGxfdGVzdF9vbmx5X2dldF9tZXNzYWdlX2ZsYWdzKGdycGNfY2FsbCAqY2FsbCkgeworICB1aW50MzJfdCBmbGFnczsKKyAgZ3ByX211X2xvY2soJmNhbGwtPm11KTsKKyAgZmxhZ3MgPSBjYWxsLT50ZXN0X29ubHlfbGFzdF9tZXNzYWdlX2ZsYWdzOworICBncHJfbXVfdW5sb2NrKCZjYWxsLT5tdSk7CisgIHJldHVybiBmbGFnczsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlcih2b2lkICpwKSB7IHJldHVybjsgfQorCitzdGF0aWMgdm9pZCBzZXRfZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsICpjYWxsLCBncnBjX21kZWxlbSBtZGVsKSB7CisgIHNpemVfdCBpOworICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG07CisgIGdycGNfc2xpY2VfYnVmZmVyIGFjY2VwdF9lbmNvZGluZ19wYXJ0czsKKyAgZ3JwY19zbGljZSBhY2NlcHRfZW5jb2Rpbmdfc2xpY2U7CisgIHZvaWQgKmFjY2VwdGVkX3VzZXJfZGF0YTsKKworICBhY2NlcHRlZF91c2VyX2RhdGEgPQorICAgICAgZ3JwY19tZGVsZW1fZ2V0X3VzZXJfZGF0YShtZGVsLCBkZXN0cm95X2VuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyKTsKKyAgaWYgKGFjY2VwdGVkX3VzZXJfZGF0YSAhPSBOVUxMKSB7CisgICAgY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIgPQorICAgICAgICAodWludDMyX3QpKCgodWludHB0cl90KWFjY2VwdGVkX3VzZXJfZGF0YSkgLSAxKTsKKyAgICByZXR1cm47CisgIH0KKworICBhY2NlcHRfZW5jb2Rpbmdfc2xpY2UgPSBHUlBDX01EVkFMVUUobWRlbCk7CisgIGdycGNfc2xpY2VfYnVmZmVyX2luaXQoJmFjY2VwdF9lbmNvZGluZ19wYXJ0cyk7CisgIGdycGNfc2xpY2Vfc3BsaXQoYWNjZXB0X2VuY29kaW5nX3NsaWNlLCAiLCIsICZhY2NlcHRfZW5jb2RpbmdfcGFydHMpOworCisgIC8qIE5vIG5lZWQgdG8gemVybyBjYWxsLT5lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlcjogZ3JwY19jYWxsX2NyZWF0ZSBhbHJlYWR5CisgICAqIHplcm9lcyB0aGUgd2hvbGUgZ3JwY19jYWxsICovCisgIC8qIEFsd2F5cyBzdXBwb3J0IG5vIGNvbXByZXNzaW9uICovCisgIEdQUl9CSVRTRVQoJmNhbGwtPmVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyLCBHUlBDX0NPTVBSRVNTX05PTkUpOworICBmb3IgKGkgPSAwOyBpIDwgYWNjZXB0X2VuY29kaW5nX3BhcnRzLmNvdW50OyBpKyspIHsKKyAgICBncnBjX3NsaWNlIGFjY2VwdF9lbmNvZGluZ19lbnRyeV9zbGljZSA9IGFjY2VwdF9lbmNvZGluZ19wYXJ0cy5zbGljZXNbaV07CisgICAgaWYgKGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlKGFjY2VwdF9lbmNvZGluZ19lbnRyeV9zbGljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFsZ29yaXRobSkpIHsKKyAgICAgIEdQUl9CSVRTRVQoJmNhbGwtPmVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyLCBhbGdvcml0aG0pOworICAgIH0gZWxzZSB7CisgICAgICBjaGFyICphY2NlcHRfZW5jb2RpbmdfZW50cnlfc3RyID0KKyAgICAgICAgICBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKGFjY2VwdF9lbmNvZGluZ19lbnRyeV9zbGljZSk7CisgICAgICBncHJfbG9nKEdQUl9FUlJPUiwKKyAgICAgICAgICAgICAgIkludmFsaWQgZW50cnkgaW4gYWNjZXB0IGVuY29kaW5nIG1ldGFkYXRhOiAnJXMnLiBJZ25vcmluZy4iLAorICAgICAgICAgICAgICBhY2NlcHRfZW5jb2RpbmdfZW50cnlfc3RyKTsKKyAgICAgIGdwcl9mcmVlKGFjY2VwdF9lbmNvZGluZ19lbnRyeV9zdHIpOworICAgIH0KKyAgfQorCisgIGdycGNfc2xpY2VfYnVmZmVyX2Rlc3Ryb3lfaW50ZXJuYWwoZXhlY19jdHgsICZhY2NlcHRfZW5jb2RpbmdfcGFydHMpOworCisgIGdycGNfbWRlbGVtX3NldF91c2VyX2RhdGEoCisgICAgICBtZGVsLCBkZXN0cm95X2VuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyLAorICAgICAgKHZvaWQgKikoKCh1aW50cHRyX3QpY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIpICsgMSkpOworfQorCit1aW50MzJfdCBncnBjX2NhbGxfdGVzdF9vbmx5X2dldF9lbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlcihncnBjX2NhbGwgKmNhbGwpIHsKKyAgdWludDMyX3QgZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXI7CisgIGdwcl9tdV9sb2NrKCZjYWxsLT5tdSk7CisgIGVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyID0gY2FsbC0+ZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXI7CisgIGdwcl9tdV91bmxvY2soJmNhbGwtPm11KTsKKyAgcmV0dXJuIGVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyOworfQorCitzdGF0aWMgZ3JwY19saW5rZWRfbWRlbGVtICpsaW5rZWRfZnJvbV9tZChncnBjX21ldGFkYXRhICptZCkgeworICByZXR1cm4gKGdycGNfbGlua2VkX21kZWxlbSAqKSZtZC0+aW50ZXJuYWxfZGF0YTsKK30KKworc3RhdGljIGdycGNfbWV0YWRhdGEgKmdldF9tZF9lbGVtKGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGEgKmFkZGl0aW9uYWxfbWV0YWRhdGEsIGludCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCkgeworICBncnBjX21ldGFkYXRhICpyZXMgPQorICAgICAgaSA8IGNvdW50ID8gJm1ldGFkYXRhW2ldIDogJmFkZGl0aW9uYWxfbWV0YWRhdGFbaSAtIGNvdW50XTsKKyAgR1BSX0FTU0VSVChyZXMpOworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfYXBwbGljYXRpb25fbWV0YWRhdGEoCisgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqY2FsbCwgaW50IGNvdW50LAorICAgIGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhLCBpbnQgaXNfdHJhaWxpbmcsIGludCBwcmVwZW5kX2V4dHJhX21ldGFkYXRhLAorICAgIGdycGNfbWV0YWRhdGEgKmFkZGl0aW9uYWxfbWV0YWRhdGEsIGludCBhZGRpdGlvbmFsX21ldGFkYXRhX2NvdW50KSB7CisgIGludCB0b3RhbF9jb3VudCA9IGNvdW50ICsgYWRkaXRpb25hbF9tZXRhZGF0YV9jb3VudDsKKyAgaW50IGk7CisgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoID0KKyAgICAgICZjYWxsLT5tZXRhZGF0YV9iYXRjaFswIC8qIGlzX3JlY2VpdmluZyAqL11baXNfdHJhaWxpbmddOworICBmb3IgKGkgPSAwOyBpIDwgdG90YWxfY291bnQ7IGkrKykgeworICAgIGNvbnN0IGdycGNfbWV0YWRhdGEgKm1kID0KKyAgICAgICAgZ2V0X21kX2VsZW0obWV0YWRhdGEsIGFkZGl0aW9uYWxfbWV0YWRhdGEsIGksIGNvdW50KTsKKyAgICBncnBjX2xpbmtlZF9tZGVsZW0gKmwgPSAoZ3JwY19saW5rZWRfbWRlbGVtICopJm1kLT5pbnRlcm5hbF9kYXRhOworICAgIEdQUl9BU1NFUlQoc2l6ZW9mKGdycGNfbGlua2VkX21kZWxlbSkgPT0gc2l6ZW9mKG1kLT5pbnRlcm5hbF9kYXRhKSk7CisgICAgaWYgKCFHUlBDX0xPR19JRl9FUlJPUigidmFsaWRhdGVfbWV0YWRhdGEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY192YWxpZGF0ZV9oZWFkZXJfa2V5X2lzX2xlZ2FsKG1kLT5rZXkpKSkgeworICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmICghZ3JwY19pc19iaW5hcnlfaGVhZGVyKG1kLT5rZXkpICYmCisgICAgICAgICAgICAgICAhR1JQQ19MT0dfSUZfRVJST1IoCisgICAgICAgICAgICAgICAgICAgInZhbGlkYXRlX21ldGFkYXRhIiwKKyAgICAgICAgICAgICAgICAgICBncnBjX3ZhbGlkYXRlX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWwobWQtPnZhbHVlKSkpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBsLT5tZCA9IGdycGNfbWRlbGVtX2Zyb21fZ3JwY19tZXRhZGF0YShleGVjX2N0eCwgKGdycGNfbWV0YWRhdGEgKiltZCk7CisgIH0KKyAgaWYgKGkgIT0gdG90YWxfY291bnQpIHsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgY29uc3QgZ3JwY19tZXRhZGF0YSAqbWQgPQorICAgICAgICAgIGdldF9tZF9lbGVtKG1ldGFkYXRhLCBhZGRpdGlvbmFsX21ldGFkYXRhLCBqLCBjb3VudCk7CisgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKmwgPSAoZ3JwY19saW5rZWRfbWRlbGVtICopJm1kLT5pbnRlcm5hbF9kYXRhOworICAgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIGwtPm1kKTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKHByZXBlbmRfZXh0cmFfbWV0YWRhdGEpIHsKKyAgICBpZiAoY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YV9jb3VudCA9PSAwKSB7CisgICAgICBwcmVwZW5kX2V4dHJhX21ldGFkYXRhID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgZm9yIChpID0gMDsgaSA8IGNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFfY291bnQ7IGkrKykgeworICAgICAgICBHUlBDX0xPR19JRl9FUlJPUigicHJlcGFyZV9hcHBsaWNhdGlvbl9tZXRhZGF0YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua190YWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jdHgsIGJhdGNoLCAmY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVtpXSkpOworICAgICAgfQorICAgIH0KKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgdG90YWxfY291bnQ7IGkrKykgeworICAgIGdycGNfbWV0YWRhdGEgKm1kID0gZ2V0X21kX2VsZW0obWV0YWRhdGEsIGFkZGl0aW9uYWxfbWV0YWRhdGEsIGksIGNvdW50KTsKKyAgICBHUlBDX0xPR19JRl9FUlJPUigKKyAgICAgICAgInByZXBhcmVfYXBwbGljYXRpb25fbWV0YWRhdGEiLAorICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX2xpbmtfdGFpbChleGVjX2N0eCwgYmF0Y2gsIGxpbmtlZF9mcm9tX21kKG1kKSkpOworICB9CisgIGNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFfY291bnQgPSAwOworCisgIHJldHVybiAxOworfQorCiAvKiB3ZSBvZmZzZXQgc3RhdHVzIGJ5IGEgc21hbGwgYW1vdW50IHdoZW4gc3RvcmluZyBpdCBpbnRvIHRyYW5zcG9ydCBtZXRhZGF0YQogICAgYXMgbWV0YWRhdGEgY2Fubm90IHN0b3JlIGEgMCB2YWx1ZSAod2hpY2ggaXMgdXNlZCBhcyBPSyBmb3IgZ3JwY19zdGF0dXNfY29kZXMKICAgICovCiAjZGVmaW5lIFNUQVRVU19PRkZTRVQgMQogc3RhdGljIHZvaWQgZGVzdHJveV9zdGF0dXModm9pZCAqaWdub3JlZCkge30KIAotc3RhdGljIHVpbnQzMl90IGRlY29kZV9zdGF0dXMoZ3JwY19tZGVsZW0gKm1kKSB7CitzdGF0aWMgdWludDMyX3QgZGVjb2RlX3N0YXR1cyhncnBjX21kZWxlbSBtZCkgewogICB1aW50MzJfdCBzdGF0dXM7CiAgIHZvaWQgKnVzZXJfZGF0YTsKLSAgaWYgKG1kID09IEdSUENfTURFTEVNX0dSUENfU1RBVFVTXzApIHJldHVybiAwOwotICBpZiAobWQgPT0gR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMSkgcmV0dXJuIDE7Ci0gIGlmIChtZCA9PSBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18yKSByZXR1cm4gMjsKKyAgaWYgKGdycGNfbWRlbGVtX2VxKG1kLCBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18wKSkgcmV0dXJuIDA7CisgIGlmIChncnBjX21kZWxlbV9lcShtZCwgR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMSkpIHJldHVybiAxOworICBpZiAoZ3JwY19tZGVsZW1fZXEobWQsIEdSUENfTURFTEVNX0dSUENfU1RBVFVTXzIpKSByZXR1cm4gMjsKICAgdXNlcl9kYXRhID0gZ3JwY19tZGVsZW1fZ2V0X3VzZXJfZGF0YShtZCwgZGVzdHJveV9zdGF0dXMpOwogICBpZiAodXNlcl9kYXRhICE9IE5VTEwpIHsKICAgICBzdGF0dXMgPSAoKHVpbnQzMl90KShpbnRwdHJfdCl1c2VyX2RhdGEpIC0gU1RBVFVTX09GRlNFVDsKICAgfSBlbHNlIHsKLSAgICBpZiAoIWdwcl9wYXJzZV9ieXRlc190b191aW50MzIoZ3JwY19tZHN0cl9hc19jX3N0cmluZyhtZC0+dmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChtZC0+dmFsdWUtPnNsaWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1cykpIHsKKyAgICBpZiAoIWdycGNfcGFyc2Vfc2xpY2VfdG9fdWludDMyKEdSUENfTURWQUxVRShtZCksICZzdGF0dXMpKSB7CiAgICAgICBzdGF0dXMgPSBHUlBDX1NUQVRVU19VTktOT1dOOyAvKiBjb3VsZCBub3QgcGFyc2Ugc3RhdHVzIGNvZGUgKi8KICAgICB9CiAgICAgZ3JwY19tZGVsZW1fc2V0X3VzZXJfZGF0YShtZCwgZGVzdHJveV9zdGF0dXMsCkBAIC05MTYsOTMgKzgzNiwxMDQgQEAKICAgcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGRlY29kZV9jb21wcmVzc2lvbihncnBjX21kZWxlbSAqbWQpIHsKK3N0YXRpYyBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBkZWNvZGVfY29tcHJlc3Npb24oZ3JwY19tZGVsZW0gbWQpIHsKICAgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gYWxnb3JpdGhtID0KLSAgICAgIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zyb21fbWRzdHIobWQtPnZhbHVlKTsKKyAgICAgIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zyb21fc2xpY2UoR1JQQ19NRFZBTFVFKG1kKSk7CiAgIGlmIChhbGdvcml0aG0gPT0gR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UKSB7Ci0gICAgY29uc3QgY2hhciAqbWRfY19zdHIgPSBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKG1kLT52YWx1ZSk7CisgICAgY2hhciAqbWRfY19zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKEdSUENfTURWQUxVRShtZCkpOwogICAgIGdwcl9sb2coR1BSX0VSUk9SLAogICAgICAgICAgICAgIkludmFsaWQgaW5jb21pbmcgY29tcHJlc3Npb24gYWxnb3JpdGhtOiAnJXMnLiBJbnRlcnByZXRpbmcgIgogICAgICAgICAgICAgImluY29taW5nIGRhdGEgYXMgdW5jb21wcmVzc2VkLiIsCiAgICAgICAgICAgICBtZF9jX3N0cik7CisgICAgZ3ByX2ZyZWUobWRfY19zdHIpOwogICAgIHJldHVybiBHUlBDX0NPTVBSRVNTX05PTkU7CiAgIH0KICAgcmV0dXJuIGFsZ29yaXRobTsKIH0KIAotc3RhdGljIGdycGNfbWRlbGVtICpyZWN2X2NvbW1vbl9maWx0ZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2FsbCAqY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICplbGVtKSB7Ci0gIGlmIChlbGVtLT5rZXkgPT0gR1JQQ19NRFNUUl9HUlBDX1NUQVRVUykgewotICAgIEdQUl9USU1FUl9CRUdJTigic3RhdHVzIiwgMCk7Ci0gICAgc2V0X3N0YXR1c19jb2RlKGNhbGwsIFNUQVRVU19GUk9NX1dJUkUsIGRlY29kZV9zdGF0dXMoZWxlbSkpOwotICAgIEdQUl9USU1FUl9FTkQoInN0YXR1cyIsIDApOwotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgaWYgKGVsZW0tPmtleSA9PSBHUlBDX01EU1RSX0dSUENfTUVTU0FHRSkgewotICAgIEdQUl9USU1FUl9CRUdJTigic3RhdHVzLWRldGFpbHMiLCAwKTsKLSAgICBzZXRfc3RhdHVzX2RldGFpbHMoZXhlY19jdHgsIGNhbGwsIFNUQVRVU19GUk9NX1dJUkUsCi0gICAgICAgICAgICAgICAgICAgICAgIEdSUENfTURTVFJfUkVGKGVsZW0tPnZhbHVlKSk7Ci0gICAgR1BSX1RJTUVSX0VORCgic3RhdHVzLWRldGFpbHMiLCAwKTsKLSAgICByZXR1cm4gTlVMTDsKK3N0YXRpYyB2b2lkIHJlY3ZfY29tbW9uX2ZpbHRlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jYWxsICpjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmIpIHsKKyAgaWYgKGItPmlkeC5uYW1lZC5ncnBjX3N0YXR1cyAhPSBOVUxMKSB7CisgICAgdWludDMyX3Qgc3RhdHVzX2NvZGUgPSBkZWNvZGVfc3RhdHVzKGItPmlkeC5uYW1lZC5ncnBjX3N0YXR1cy0+bWQpOworICAgIGdycGNfZXJyb3IgKmVycm9yID0KKyAgICAgICAgc3RhdHVzX2NvZGUgPT0gR1JQQ19TVEFUVVNfT0sKKyAgICAgICAgICAgID8gR1JQQ19FUlJPUl9OT05FCisgICAgICAgICAgICA6IGdycGNfZXJyb3Jfc2V0X2ludChHUlBDX0VSUk9SX0NSRUFURSgiRXJyb3IgcmVjZWl2ZWQgZnJvbSBwZWVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRwdHJfdClzdGF0dXNfY29kZSk7CisKKyAgICBpZiAoYi0+aWR4Lm5hbWVkLmdycGNfbWVzc2FnZSAhPSBOVUxMKSB7CisgICAgICBjaGFyICptc2cgPQorICAgICAgICAgIGdycGNfc2xpY2VfdG9fY19zdHJpbmcoR1JQQ19NRFZBTFVFKGItPmlkeC5uYW1lZC5ncnBjX21lc3NhZ2UtPm1kKSk7CisgICAgICBlcnJvciA9IGdycGNfZXJyb3Jfc2V0X3N0cihlcnJvciwgR1JQQ19FUlJPUl9TVFJfR1JQQ19NRVNTQUdFLCBtc2cpOworICAgICAgZ3ByX2ZyZWUobXNnKTsKKyAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGV4ZWNfY3R4LCBiLCBiLT5pZHgubmFtZWQuZ3JwY19tZXNzYWdlKTsKKyAgICB9IGVsc2UgeworICAgICAgZXJyb3IgPSBncnBjX2Vycm9yX3NldF9zdHIoZXJyb3IsIEdSUENfRVJST1JfU1RSX0dSUENfTUVTU0FHRSwgIiIpOworICAgIH0KKworICAgIHNldF9zdGF0dXNfZnJvbV9lcnJvcihleGVjX2N0eCwgY2FsbCwgU1RBVFVTX0ZST01fV0lSRSwgZXJyb3IpOworICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGV4ZWNfY3R4LCBiLCBiLT5pZHgubmFtZWQuZ3JwY19zdGF0dXMpOwogICB9Ci0gIHJldHVybiBlbGVtOwogfQogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKnB1Ymxpc2hfYXBwX21ldGFkYXRhKGdycGNfY2FsbCAqY2FsbCwgZ3JwY19tZGVsZW0gKmVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc190cmFpbGluZykgeworc3RhdGljIHZvaWQgcHVibGlzaF9hcHBfbWV0YWRhdGEoZ3JwY19jYWxsICpjYWxsLCBncnBjX21ldGFkYXRhX2JhdGNoICpiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX3RyYWlsaW5nKSB7CisgIGlmIChiLT5saXN0LmNvdW50ID09IDApIHJldHVybjsKKyAgR1BSX1RJTUVSX0JFR0lOKCJwdWJsaXNoX2FwcF9tZXRhZGF0YSIsIDApOwogICBncnBjX21ldGFkYXRhX2FycmF5ICpkZXN0OwogICBncnBjX21ldGFkYXRhICptZHVzcjsKLSAgR1BSX1RJTUVSX0JFR0lOKCJwdWJsaXNoX2FwcF9tZXRhZGF0YSIsIDApOwogICBkZXN0ID0gY2FsbC0+YnVmZmVyZWRfbWV0YWRhdGFbaXNfdHJhaWxpbmddOwotICBpZiAoZGVzdC0+Y291bnQgPT0gZGVzdC0+Y2FwYWNpdHkpIHsKLSAgICBkZXN0LT5jYXBhY2l0eSA9IEdQUl9NQVgoZGVzdC0+Y2FwYWNpdHkgKyA4LCBkZXN0LT5jYXBhY2l0eSAqIDIpOworICBpZiAoZGVzdC0+Y291bnQgKyBiLT5saXN0LmNvdW50ID4gZGVzdC0+Y2FwYWNpdHkpIHsKKyAgICBkZXN0LT5jYXBhY2l0eSA9CisgICAgICAgIEdQUl9NQVgoZGVzdC0+Y2FwYWNpdHkgKyBiLT5saXN0LmNvdW50LCBkZXN0LT5jYXBhY2l0eSAqIDMgLyAyKTsKICAgICBkZXN0LT5tZXRhZGF0YSA9CiAgICAgICAgIGdwcl9yZWFsbG9jKGRlc3QtPm1ldGFkYXRhLCBzaXplb2YoZ3JwY19tZXRhZGF0YSkgKiBkZXN0LT5jYXBhY2l0eSk7CiAgIH0KLSAgbWR1c3IgPSAmZGVzdC0+bWV0YWRhdGFbZGVzdC0+Y291bnQrK107Ci0gIG1kdXNyLT5rZXkgPSBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKGVsZW0tPmtleSk7Ci0gIG1kdXNyLT52YWx1ZSA9IGdycGNfbWRzdHJfYXNfY19zdHJpbmcoZWxlbS0+dmFsdWUpOwotICBtZHVzci0+dmFsdWVfbGVuZ3RoID0gR1JQQ19TTElDRV9MRU5HVEgoZWxlbS0+dmFsdWUtPnNsaWNlKTsKKyAgZm9yIChncnBjX2xpbmtlZF9tZGVsZW0gKmwgPSBiLT5saXN0LmhlYWQ7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKKyAgICBtZHVzciA9ICZkZXN0LT5tZXRhZGF0YVtkZXN0LT5jb3VudCsrXTsKKyAgICAvKiB3ZSBwYXNzIGJhY2sgYm9ycm93ZWQgc2xpY2VzIHRoYXQgYXJlIHZhbGlkIHdoaWxzdCB0aGUgY2FsbCBpcyB2YWxpZCAqLworICAgIG1kdXNyLT5rZXkgPSBHUlBDX01ES0VZKGwtPm1kKTsKKyAgICBtZHVzci0+dmFsdWUgPSBHUlBDX01EVkFMVUUobC0+bWQpOworICB9CiAgIEdQUl9USU1FUl9FTkQoInB1Ymxpc2hfYXBwX21ldGFkYXRhIiwgMCk7Ci0gIHJldHVybiBlbGVtOwogfQogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKnJlY3ZfaW5pdGlhbF9maWx0ZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKmVsZW0pIHsKLSAgZ3JwY19jYWxsICpjYWxsID0gYXJnczsKLSAgZWxlbSA9IHJlY3ZfY29tbW9uX2ZpbHRlcihleGVjX2N0eCwgY2FsbCwgZWxlbSk7Ci0gIGlmIChlbGVtID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIGlmIChlbGVtLT5rZXkgPT0gR1JQQ19NRFNUUl9HUlBDX0VOQ09ESU5HKSB7CitzdGF0aWMgdm9pZCByZWN2X2luaXRpYWxfZmlsdGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGwgKmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmIpIHsKKyAgcmVjdl9jb21tb25fZmlsdGVyKGV4ZWNfY3R4LCBjYWxsLCBiKTsKKworICBpZiAoYi0+aWR4Lm5hbWVkLmdycGNfZW5jb2RpbmcgIT0gTlVMTCkgewogICAgIEdQUl9USU1FUl9CRUdJTigiaW5jb21pbmdfY29tcHJlc3Npb25fYWxnb3JpdGhtIiwgMCk7Ci0gICAgc2V0X2luY29taW5nX2NvbXByZXNzaW9uX2FsZ29yaXRobShjYWxsLCBkZWNvZGVfY29tcHJlc3Npb24oZWxlbSkpOworICAgIHNldF9pbmNvbWluZ19jb21wcmVzc2lvbl9hbGdvcml0aG0oCisgICAgICAgIGNhbGwsIGRlY29kZV9jb21wcmVzc2lvbihiLT5pZHgubmFtZWQuZ3JwY19lbmNvZGluZy0+bWQpKTsKICAgICBHUFJfVElNRVJfRU5EKCJpbmNvbWluZ19jb21wcmVzc2lvbl9hbGdvcml0aG0iLCAwKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfSBlbHNlIGlmIChlbGVtLT5rZXkgPT0gR1JQQ19NRFNUUl9HUlBDX0FDQ0VQVF9FTkNPRElORykgewotICAgIEdQUl9USU1FUl9CRUdJTigiZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIiLCAwKTsKLSAgICBzZXRfZW5jb2RpbmdzX2FjY2VwdGVkX2J5X3BlZXIoZXhlY19jdHgsIGNhbGwsIGVsZW0pOwotICAgIEdQUl9USU1FUl9FTkQoImVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyIiwgMCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hfYXBwX21ldGFkYXRhKGNhbGwsIGVsZW0sIDApOworICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGV4ZWNfY3R4LCBiLCBiLT5pZHgubmFtZWQuZ3JwY19lbmNvZGluZyk7CiAgIH0KKworICBpZiAoYi0+aWR4Lm5hbWVkLmdycGNfYWNjZXB0X2VuY29kaW5nICE9IE5VTEwpIHsKKyAgICBHUFJfVElNRVJfQkVHSU4oImVuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyIiwgMCk7CisgICAgc2V0X2VuY29kaW5nc19hY2NlcHRlZF9ieV9wZWVyKGV4ZWNfY3R4LCBjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5pZHgubmFtZWQuZ3JwY19hY2NlcHRfZW5jb2RpbmctPm1kKTsKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX3JlbW92ZShleGVjX2N0eCwgYiwgYi0+aWR4Lm5hbWVkLmdycGNfYWNjZXB0X2VuY29kaW5nKTsKKyAgICBHUFJfVElNRVJfRU5EKCJlbmNvZGluZ3NfYWNjZXB0ZWRfYnlfcGVlciIsIDApOworICB9CisKKyAgcHVibGlzaF9hcHBfbWV0YWRhdGEoY2FsbCwgYiwgZmFsc2UpOwogfQogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKnJlY3ZfdHJhaWxpbmdfZmlsdGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqZWxlbSkgeworc3RhdGljIHZvaWQgcmVjdl90cmFpbGluZ19maWx0ZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiKSB7CiAgIGdycGNfY2FsbCAqY2FsbCA9IGFyZ3M7Ci0gIGVsZW0gPSByZWN2X2NvbW1vbl9maWx0ZXIoZXhlY19jdHgsIGNhbGwsIGVsZW0pOwotICBpZiAoZWxlbSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHB1Ymxpc2hfYXBwX21ldGFkYXRhKGNhbGwsIGVsZW0sIDEpOwotICB9CisgIHJlY3ZfY29tbW9uX2ZpbHRlcihleGVjX2N0eCwgY2FsbCwgYik7CisgIHB1Ymxpc2hfYXBwX21ldGFkYXRhKGNhbGwsIGIsIHRydWUpOwogfQogCiBncnBjX2NhbGxfc3RhY2sgKmdycGNfY2FsbF9nZXRfY2FsbF9zdGFjayhncnBjX2NhbGwgKmNhbGwpIHsKICAgcmV0dXJuIENBTExfU1RBQ0tfRlJPTV9DQUxMKGNhbGwpOwogfQogCi0vKgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEJBVENIIEFQSSBJTVBMRU1FTlRBVElPTgogICovCiAKQEAgLTEwNTMsMTQgKzk4NCw4OCBAQAogICBHUlBDX0NBTExfSU5URVJOQUxfVU5SRUYoZXhlY19jdHgsIGNhbGwsICJjb21wbGV0aW9uIik7CiB9CiAKK3N0YXRpYyBncnBjX2Vycm9yICpjb25zb2xpZGF0ZV9iYXRjaF9lcnJvcnMoYmF0Y2hfY29udHJvbCAqYmN0bCkgeworICBzaXplX3QgbiA9IChzaXplX3QpZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJmJjdGwtPm51bV9lcnJvcnMpOworICBpZiAobiA9PSAwKSB7CisgICAgcmV0dXJuIEdSUENfRVJST1JfTk9ORTsKKyAgfSBlbHNlIGlmIChuID09IDEpIHsKKyAgICAvKiBTa2lwIGNyZWF0aW5nIGEgY29tcG9zaXRlIGVycm9yIGluIHRoZSBjYXNlIHRoYXQgb25seSBvbmUgZXJyb3Igd2FzCisgICAgICAgbG9nZ2VkICovCisgICAgZ3JwY19lcnJvciAqZSA9IGJjdGwtPmVycm9yc1swXTsKKyAgICBiY3RsLT5lcnJvcnNbMF0gPSBOVUxMOworICAgIHJldHVybiBlOworICB9IGVsc2UgeworICAgIGdycGNfZXJyb3IgKmVycm9yID0KKyAgICAgICAgR1JQQ19FUlJPUl9DUkVBVEVfUkVGRVJFTkNJTkcoIkNhbGwgYmF0Y2ggZmFpbGVkIiwgYmN0bC0+ZXJyb3JzLCBuKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgR1JQQ19FUlJPUl9VTlJFRihiY3RsLT5lcnJvcnNbaV0pOworICAgICAgYmN0bC0+ZXJyb3JzW2ldID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGVycm9yOworICB9Cit9CisKIHN0YXRpYyB2b2lkIHBvc3RfYmF0Y2hfY29tcGxldGlvbihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaF9jb250cm9sICpiY3RsKSB7CisgIGdycGNfY2FsbCAqY2hpbGRfY2FsbDsKKyAgZ3JwY19jYWxsICpuZXh0X2NoaWxkX2NhbGw7CiAgIGdycGNfY2FsbCAqY2FsbCA9IGJjdGwtPmNhbGw7Ci0gIGdycGNfZXJyb3IgKmVycm9yID0gYmN0bC0+ZXJyb3I7CisgIGdycGNfZXJyb3IgKmVycm9yID0gY29uc29saWRhdGVfYmF0Y2hfZXJyb3JzKGJjdGwpOworCisgIGdwcl9tdV9sb2NrKCZjYWxsLT5tdSk7CisKKyAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgeworICAgIHNldF9zdGF0dXNfZnJvbV9lcnJvcihleGVjX2N0eCwgY2FsbCwgU1RBVFVTX0ZST01fQ09SRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9SRUYoZXJyb3IpKTsKKyAgfQorCisgIGlmIChiY3RsLT5zZW5kX2luaXRpYWxfbWV0YWRhdGEpIHsKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX2Rlc3Ryb3koCisgICAgICAgIGV4ZWNfY3R4LAorICAgICAgICAmY2FsbC0+bWV0YWRhdGFfYmF0Y2hbMCAvKiBpc19yZWNlaXZpbmcgKi9dWzAgLyogaXNfdHJhaWxpbmcgKi9dKTsKKyAgfQorICBpZiAoYmN0bC0+c2VuZF9tZXNzYWdlKSB7CisgICAgY2FsbC0+c2VuZGluZ19tZXNzYWdlID0gZmFsc2U7CisgIH0KKyAgaWYgKGJjdGwtPnNlbmRfZmluYWxfb3ApIHsKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX2Rlc3Ryb3koCisgICAgICAgIGV4ZWNfY3R4LAorICAgICAgICAmY2FsbC0+bWV0YWRhdGFfYmF0Y2hbMCAvKiBpc19yZWNlaXZpbmcgKi9dWzEgLyogaXNfdHJhaWxpbmcgKi9dKTsKKyAgfQogICBpZiAoYmN0bC0+cmVjdl9maW5hbF9vcCkgeworICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKm1kID0KKyAgICAgICAgJmNhbGwtPm1ldGFkYXRhX2JhdGNoWzEgLyogaXNfcmVjZWl2aW5nICovXVsxIC8qIGlzX3RyYWlsaW5nICovXTsKKyAgICByZWN2X3RyYWlsaW5nX2ZpbHRlcihleGVjX2N0eCwgY2FsbCwgbWQpOworCisgICAgY2FsbC0+cmVjZWl2ZWRfZmluYWxfb3AgPSB0cnVlOworICAgIC8qIHByb3BhZ2F0ZSBjYW5jZWxsYXRpb24gdG8gYW55IGludGVyZXN0ZWQgY2hpbGRyZW4gKi8KKyAgICBjaGlsZF9jYWxsID0gY2FsbC0+Zmlyc3RfY2hpbGQ7CisgICAgaWYgKGNoaWxkX2NhbGwgIT0gTlVMTCkgeworICAgICAgZG8geworICAgICAgICBuZXh0X2NoaWxkX2NhbGwgPSBjaGlsZF9jYWxsLT5zaWJsaW5nX25leHQ7CisgICAgICAgIGlmIChjaGlsZF9jYWxsLT5jYW5jZWxsYXRpb25faXNfaW5oZXJpdGVkKSB7CisgICAgICAgICAgR1JQQ19DQUxMX0lOVEVSTkFMX1JFRihjaGlsZF9jYWxsLCAicHJvcGFnYXRlX2NhbmNlbCIpOworICAgICAgICAgIGdycGNfY2FsbF9jYW5jZWwoY2hpbGRfY2FsbCwgTlVMTCk7CisgICAgICAgICAgR1JQQ19DQUxMX0lOVEVSTkFMX1VOUkVGKGV4ZWNfY3R4LCBjaGlsZF9jYWxsLCAicHJvcGFnYXRlX2NhbmNlbCIpOworICAgICAgICB9CisgICAgICAgIGNoaWxkX2NhbGwgPSBuZXh0X2NoaWxkX2NhbGw7CisgICAgICB9IHdoaWxlIChjaGlsZF9jYWxsICE9IGNhbGwtPmZpcnN0X2NoaWxkKTsKKyAgICB9CisKKyAgICBpZiAoY2FsbC0+aXNfY2xpZW50KSB7CisgICAgICBnZXRfZmluYWxfc3RhdHVzKGNhbGwsIHNldF9zdGF0dXNfdmFsdWVfZGlyZWN0bHksCisgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtPmZpbmFsX29wLmNsaWVudC5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtPmZpbmFsX29wLmNsaWVudC5zdGF0dXNfZGV0YWlscyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGdldF9maW5hbF9zdGF0dXMoY2FsbCwgc2V0X2NhbmNlbGxlZF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2FsbC0+ZmluYWxfb3Auc2VydmVyLmNhbmNlbGxlZCwgTlVMTCk7CisgICAgfQorCiAgICAgR1JQQ19FUlJPUl9VTlJFRihlcnJvcik7CiAgICAgZXJyb3IgPSBHUlBDX0VSUk9SX05PTkU7CiAgIH0KKyAgZ3ByX211X3VubG9jaygmY2FsbC0+bXUpOworCiAgIGlmIChiY3RsLT5pc19ub3RpZnlfdGFnX2Nsb3N1cmUpIHsKICAgICAvKiB1bnJlZnMgYmN0bC0+ZXJyb3IgKi8KICAgICBncnBjX2Nsb3N1cmVfcnVuKGV4ZWNfY3R4LCBiY3RsLT5ub3RpZnlfdGFnLCBlcnJvcik7CkBAIC0xMDc3LDYgKzEwODIsMTIgQEAKICAgfQogfQogCitzdGF0aWMgdm9pZCBmaW5pc2hfYmF0Y2hfc3RlcChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgYmF0Y2hfY29udHJvbCAqYmN0bCkgeworICBpZiAoZ3ByX3VucmVmKCZiY3RsLT5zdGVwc190b19jb21wbGV0ZSkpIHsKKyAgICBwb3N0X2JhdGNoX2NvbXBsZXRpb24oZXhlY19jdHgsIGJjdGwpOworICB9Cit9CisKIHN0YXRpYyB2b2lkIGNvbnRpbnVlX3JlY2VpdmluZ19zbGljZXMoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX2NvbnRyb2wgKmJjdGwpIHsKICAgZ3JwY19jYWxsICpjYWxsID0gYmN0bC0+Y2FsbDsKQEAgLTEwODcsOSArMTA5OCw3IEBACiAgICAgICBjYWxsLT5yZWNlaXZpbmdfbWVzc2FnZSA9IDA7CiAgICAgICBncnBjX2J5dGVfc3RyZWFtX2Rlc3Ryb3koZXhlY19jdHgsIGNhbGwtPnJlY2VpdmluZ19zdHJlYW0pOwogICAgICAgY2FsbC0+cmVjZWl2aW5nX3N0cmVhbSA9IE5VTEw7Ci0gICAgICBpZiAoZ3ByX3VucmVmKCZiY3RsLT5zdGVwc190b19jb21wbGV0ZSkpIHsKLSAgICAgICAgcG9zdF9iYXRjaF9jb21wbGV0aW9uKGV4ZWNfY3R4LCBiY3RsKTsKLSAgICAgIH0KKyAgICAgIGZpbmlzaF9iYXRjaF9zdGVwKGV4ZWNfY3R4LCBiY3RsKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGdycGNfYnl0ZV9zdHJlYW1fbmV4dChleGVjX2N0eCwgY2FsbC0+cmVjZWl2aW5nX3N0cmVhbSwKQEAgLTExMjAsOSArMTEyOSw3IEBACiAgICAgY2FsbC0+cmVjZWl2aW5nX3N0cmVhbSA9IE5VTEw7CiAgICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KCpjYWxsLT5yZWNlaXZpbmdfYnVmZmVyKTsKICAgICAqY2FsbC0+cmVjZWl2aW5nX2J1ZmZlciA9IE5VTEw7Ci0gICAgaWYgKGdwcl91bnJlZigmYmN0bC0+c3RlcHNfdG9fY29tcGxldGUpKSB7Ci0gICAgICBwb3N0X2JhdGNoX2NvbXBsZXRpb24oZXhlY19jdHgsIGJjdGwpOwotICAgIH0KKyAgICBmaW5pc2hfYmF0Y2hfc3RlcChleGVjX2N0eCwgYmN0bCk7CiAgIH0KIH0KIApAQCAtMTEzMiw5ICsxMTM5LDcgQEAKICAgaWYgKGNhbGwtPnJlY2VpdmluZ19zdHJlYW0gPT0gTlVMTCkgewogICAgICpjYWxsLT5yZWNlaXZpbmdfYnVmZmVyID0gTlVMTDsKICAgICBjYWxsLT5yZWNlaXZpbmdfbWVzc2FnZSA9IDA7Ci0gICAgaWYgKGdwcl91bnJlZigmYmN0bC0+c3RlcHNfdG9fY29tcGxldGUpKSB7Ci0gICAgICBwb3N0X2JhdGNoX2NvbXBsZXRpb24oZXhlY19jdHgsIGJjdGwpOwotICAgIH0KKyAgICBmaW5pc2hfYmF0Y2hfc3RlcChleGVjX2N0eCwgYmN0bCk7CiAgIH0gZWxzZSB7CiAgICAgY2FsbC0+dGVzdF9vbmx5X2xhc3RfbWVzc2FnZV9mbGFncyA9IGNhbGwtPnJlY2VpdmluZ19zdHJlYW0tPmZsYWdzOwogICAgIGlmICgoY2FsbC0+cmVjZWl2aW5nX3N0cmVhbS0+ZmxhZ3MgJiBHUlBDX1dSSVRFX0lOVEVSTkFMX0NPTVBSRVNTKSAmJgpAQCAtMTE1NCwxNCArMTE1OSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcikgewogICBiYXRjaF9jb250cm9sICpiY3RsID0gYmN0bHA7CiAgIGdycGNfY2FsbCAqY2FsbCA9IGJjdGwtPmNhbGw7Ci0gIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKLSAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKLSAgICBjb25zdCBjaGFyICptc2c7Ci0gICAgZ3JwY19lcnJvcl9nZXRfc3RhdHVzKGVycm9yLCAmc3RhdHVzLCAmbXNnKTsKLSAgICBjbG9zZV93aXRoX3N0YXR1cyhleGVjX2N0eCwgY2FsbCwgc3RhdHVzLCBtc2cpOwotICB9CiAgIGdwcl9tdV9sb2NrKCZiY3RsLT5jYWxsLT5tdSk7Ci0gIGlmIChiY3RsLT5jYWxsLT5oYXNfaW5pdGlhbF9tZF9iZWVuX3JlY2VpdmVkIHx8IGVycm9yICE9IEdSUENfRVJST1JfTk9ORSB8fAorICBpZiAoZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgY2FuY2VsX3dpdGhfZXJyb3IoZXhlY19jdHgsIGNhbGwsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CisgIH0KKyAgaWYgKGNhbGwtPmhhc19pbml0aWFsX21kX2JlZW5fcmVjZWl2ZWQgfHwgZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FIHx8CiAgICAgICBjYWxsLT5yZWNlaXZpbmdfc3RyZWFtID09IE5VTEwpIHsKICAgICBncHJfbXVfdW5sb2NrKCZiY3RsLT5jYWxsLT5tdSk7CiAgICAgcHJvY2Vzc19kYXRhX2FmdGVyX21kKGV4ZWNfY3R4LCBiY3RscCk7CkBAIC0xMTg2LDcgKzExODgsNyBAQAogICAgICAgZ3ByX2FzcHJpbnRmKCZlcnJvcl9tc2csICJJbnZhbGlkIGNvbXByZXNzaW9uIGFsZ29yaXRobSB2YWx1ZSAnJWQnLiIsCiAgICAgICAgICAgICAgICAgICAgYWxnbyk7CiAgICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIiVzIiwgZXJyb3JfbXNnKTsKLSAgICAgIGNsb3NlX3dpdGhfc3RhdHVzKGV4ZWNfY3R4LCBjYWxsLCBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVELCBlcnJvcl9tc2cpOworICAgICAgY2FuY2VsX3dpdGhfc3RhdHVzKGV4ZWNfY3R4LCBjYWxsLCBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVELCBlcnJvcl9tc2cpOwogICAgIH0gZWxzZSBpZiAoZ3JwY19jb21wcmVzc2lvbl9vcHRpb25zX2lzX2FsZ29yaXRobV9lbmFibGVkKAogICAgICAgICAgICAgICAgICAgICZjb21wcmVzc2lvbl9vcHRpb25zLCBhbGdvKSA9PSAwKSB7CiAgICAgICAvKiBjaGVjayBpZiBhbGdvcml0aG0gaXMgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgY2hhbm5lbCBjb25maWcgKi8KQEAgLTExOTUsNyArMTE5Nyw3IEBACiAgICAgICBncHJfYXNwcmludGYoJmVycm9yX21zZywgIkNvbXByZXNzaW9uIGFsZ29yaXRobSAnJXMnIGlzIGRpc2FibGVkLiIsCiAgICAgICAgICAgICAgICAgICAgYWxnb19uYW1lKTsKICAgICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiJXMiLCBlcnJvcl9tc2cpOwotICAgICAgY2xvc2Vfd2l0aF9zdGF0dXMoZXhlY19jdHgsIGNhbGwsIEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQsIGVycm9yX21zZyk7CisgICAgICBjYW5jZWxfd2l0aF9zdGF0dXMoZXhlY19jdHgsIGNhbGwsIEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQsIGVycm9yX21zZyk7CiAgICAgfSBlbHNlIHsKICAgICAgIGNhbGwtPmluY29taW5nX2NvbXByZXNzaW9uX2FsZ29yaXRobSA9IGFsZ287CiAgICAgfQpAQCAtMTIyMSwxMiArMTIyMywxMiBAQAogICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9iYXRjaF9lcnJvcihiYXRjaF9jb250cm9sICpiY3RsLCBncnBjX2Vycm9yICplcnJvcikgeworc3RhdGljIHZvaWQgYWRkX2JhdGNoX2Vycm9yKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBiYXRjaF9jb250cm9sICpiY3RsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZXJyb3IgKmVycm9yKSB7CiAgIGlmIChlcnJvciA9PSBHUlBDX0VSUk9SX05PTkUpIHJldHVybjsKLSAgaWYgKGJjdGwtPmVycm9yID09IEdSUENfRVJST1JfTk9ORSkgewotICAgIGJjdGwtPmVycm9yID0gR1JQQ19FUlJPUl9DUkVBVEUoIkNhbGwgYmF0Y2ggb3BlcmF0aW9uIGZhaWxlZCIpOwotICB9Ci0gIGJjdGwtPmVycm9yID0gZ3JwY19lcnJvcl9hZGRfY2hpbGQoYmN0bC0+ZXJyb3IsIGVycm9yKTsKKyAgaW50IGlkeCA9IChpbnQpZ3ByX2F0bV9ub19iYXJyaWVyX2ZldGNoX2FkZCgmYmN0bC0+bnVtX2Vycm9ycywgMSk7CisgIGlmIChpZHggPT0gMCkgY2FuY2VsX3dpdGhfZXJyb3IoZXhlY19jdHgsIGJjdGwtPmNhbGwsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CisgIGJjdGwtPmVycm9yc1tpZHhdID0gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIHJlY2VpdmluZ19pbml0aWFsX21ldGFkYXRhX3JlYWR5KGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LApAQCAtMTIzNiwxMiArMTIzOCwxMyBAQAogCiAgIGdwcl9tdV9sb2NrKCZjYWxsLT5tdSk7CiAKLSAgYWRkX2JhdGNoX2Vycm9yKGJjdGwsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CisgIGFkZF9iYXRjaF9lcnJvcihleGVjX2N0eCwgYmN0bCwgR1JQQ19FUlJPUl9SRUYoZXJyb3IpKTsKICAgaWYgKGVycm9yID09IEdSUENfRVJST1JfTk9ORSkgewogICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKm1kID0KICAgICAgICAgJmNhbGwtPm1ldGFkYXRhX2JhdGNoWzEgLyogaXNfcmVjZWl2aW5nICovXVswIC8qIGlzX3RyYWlsaW5nICovXTsKLSAgICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcihleGVjX2N0eCwgbWQsIHJlY3ZfaW5pdGlhbF9maWx0ZXIsIGNhbGwpOworICAgIHJlY3ZfaW5pdGlhbF9maWx0ZXIoZXhlY19jdHgsIGNhbGwsIG1kKTsKIAorICAgIC8qIFRPRE8oY3RpbGxlcik6IHRoaXMgY291bGQgYmUgbW92ZWQgaW50byByZWN2X2luaXRpYWxfZmlsdGVyIG5vdyAqLwogICAgIEdQUl9USU1FUl9CRUdJTigidmFsaWRhdGVfZmlsdGVyZWRfbWV0YWRhdGEiLCAwKTsKICAgICB2YWxpZGF0ZV9maWx0ZXJlZF9tZXRhZGF0YShleGVjX2N0eCwgYmN0bCk7CiAgICAgR1BSX1RJTUVSX0VORCgidmFsaWRhdGVfZmlsdGVyZWRfbWV0YWRhdGEiLCAwKTsKQEAgLTEyNjAsOTAgKzEyNjMsMjAgQEAKICAgICAgICAgcmVjZWl2aW5nX3N0cmVhbV9yZWFkeSwgY2FsbC0+c2F2ZWRfcmVjZWl2aW5nX3N0cmVhbV9yZWFkeV9iY3RscCwKICAgICAgICAgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7CiAgICAgY2FsbC0+c2F2ZWRfcmVjZWl2aW5nX3N0cmVhbV9yZWFkeV9iY3RscCA9IE5VTEw7Ci0gICAgZ3JwY19jbG9zdXJlX3NjaGVkKGV4ZWNfY3R4LCBzYXZlZF9yc3JfY2xvc3VyZSwgZXJyb3IpOworICAgIGdycGNfY2xvc3VyZV9zY2hlZChleGVjX2N0eCwgc2F2ZWRfcnNyX2Nsb3N1cmUsIEdSUENfRVJST1JfUkVGKGVycm9yKSk7CiAgIH0KIAogICBncHJfbXVfdW5sb2NrKCZjYWxsLT5tdSk7CiAKLSAgaWYgKGdwcl91bnJlZigmYmN0bC0+c3RlcHNfdG9fY29tcGxldGUpKSB7Ci0gICAgcG9zdF9iYXRjaF9jb21wbGV0aW9uKGV4ZWNfY3R4LCBiY3RsKTsKLSAgfQorICBmaW5pc2hfYmF0Y2hfc3RlcChleGVjX2N0eCwgYmN0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmlzaF9iYXRjaChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqYmN0bHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpIHsKICAgYmF0Y2hfY29udHJvbCAqYmN0bCA9IGJjdGxwOwotICBncnBjX2NhbGwgKmNhbGwgPSBiY3RsLT5jYWxsOwotICBncnBjX2NhbGwgKmNoaWxkX2NhbGw7Ci0gIGdycGNfY2FsbCAqbmV4dF9jaGlsZF9jYWxsOwogCi0gIEdSUENfRVJST1JfUkVGKGVycm9yKTsKLQotICBncHJfbXVfbG9jaygmY2FsbC0+bXUpOwotCi0gIC8vIElmIHRoZSBlcnJvciBoYXMgYW4gYXNzb2NpYXRlZCBzdGF0dXMgY29kZSwgc2V0IHRoZSBjYWxsJ3Mgc3RhdHVzLgotICBpbnRwdHJfdCBzdGF0dXM7Ci0gIGlmIChlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUgJiYKLSAgICAgIGdycGNfZXJyb3JfZ2V0X2ludChlcnJvciwgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsICZzdGF0dXMpKSB7Ci0gICAgc2V0X3N0YXR1c19mcm9tX2Vycm9yKGV4ZWNfY3R4LCBjYWxsLCBTVEFUVVNfRlJPTV9DT1JFLCBlcnJvcik7Ci0gIH0KLQotICBpZiAoYmN0bC0+c2VuZF9pbml0aWFsX21ldGFkYXRhKSB7Ci0gICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewotICAgICAgc2V0X3N0YXR1c19mcm9tX2Vycm9yKGV4ZWNfY3R4LCBjYWxsLCBTVEFUVVNfRlJPTV9DT1JFLCBlcnJvcik7Ci0gICAgfQotICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfZGVzdHJveSgKLSAgICAgICAgZXhlY19jdHgsCi0gICAgICAgICZjYWxsLT5tZXRhZGF0YV9iYXRjaFswIC8qIGlzX3JlY2VpdmluZyAqL11bMCAvKiBpc190cmFpbGluZyAqL10pOwotICB9Ci0gIGlmIChiY3RsLT5zZW5kX21lc3NhZ2UpIHsKLSAgICBjYWxsLT5zZW5kaW5nX21lc3NhZ2UgPSAwOwotICB9Ci0gIGlmIChiY3RsLT5zZW5kX2ZpbmFsX29wKSB7Ci0gICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9kZXN0cm95KAotICAgICAgICBleGVjX2N0eCwKLSAgICAgICAgJmNhbGwtPm1ldGFkYXRhX2JhdGNoWzAgLyogaXNfcmVjZWl2aW5nICovXVsxIC8qIGlzX3RyYWlsaW5nICovXSk7Ci0gIH0KLSAgaWYgKGJjdGwtPnJlY3ZfZmluYWxfb3ApIHsKLSAgICBncnBjX21ldGFkYXRhX2JhdGNoICptZCA9Ci0gICAgICAgICZjYWxsLT5tZXRhZGF0YV9iYXRjaFsxIC8qIGlzX3JlY2VpdmluZyAqL11bMSAvKiBpc190cmFpbGluZyAqL107Ci0gICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9maWx0ZXIoZXhlY19jdHgsIG1kLCByZWN2X3RyYWlsaW5nX2ZpbHRlciwgY2FsbCk7Ci0KLSAgICBjYWxsLT5yZWNlaXZlZF9maW5hbF9vcCA9IHRydWU7Ci0gICAgLyogcHJvcGFnYXRlIGNhbmNlbGxhdGlvbiB0byBhbnkgaW50ZXJlc3RlZCBjaGlsZHJlbiAqLwotICAgIGNoaWxkX2NhbGwgPSBjYWxsLT5maXJzdF9jaGlsZDsKLSAgICBpZiAoY2hpbGRfY2FsbCAhPSBOVUxMKSB7Ci0gICAgICBkbyB7Ci0gICAgICAgIG5leHRfY2hpbGRfY2FsbCA9IGNoaWxkX2NhbGwtPnNpYmxpbmdfbmV4dDsKLSAgICAgICAgaWYgKGNoaWxkX2NhbGwtPmNhbmNlbGxhdGlvbl9pc19pbmhlcml0ZWQpIHsKLSAgICAgICAgICBHUlBDX0NBTExfSU5URVJOQUxfUkVGKGNoaWxkX2NhbGwsICJwcm9wYWdhdGVfY2FuY2VsIik7Ci0gICAgICAgICAgZ3JwY19jYWxsX2NhbmNlbChjaGlsZF9jYWxsLCBOVUxMKTsKLSAgICAgICAgICBHUlBDX0NBTExfSU5URVJOQUxfVU5SRUYoZXhlY19jdHgsIGNoaWxkX2NhbGwsICJwcm9wYWdhdGVfY2FuY2VsIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2hpbGRfY2FsbCA9IG5leHRfY2hpbGRfY2FsbDsKLSAgICAgIH0gd2hpbGUgKGNoaWxkX2NhbGwgIT0gY2FsbC0+Zmlyc3RfY2hpbGQpOwotICAgIH0KLQotICAgIGlmIChjYWxsLT5pc19jbGllbnQpIHsKLSAgICAgIGdldF9maW5hbF9zdGF0dXMoY2FsbCwgc2V0X3N0YXR1c192YWx1ZV9kaXJlY3RseSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2FsbC0+ZmluYWxfb3AuY2xpZW50LnN0YXR1cyk7Ci0gICAgICBnZXRfZmluYWxfZGV0YWlscyhjYWxsLCBjYWxsLT5maW5hbF9vcC5jbGllbnQuc3RhdHVzX2RldGFpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsLT5maW5hbF9vcC5jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnZXRfZmluYWxfc3RhdHVzKGNhbGwsIHNldF9jYW5jZWxsZWRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNhbGwtPmZpbmFsX29wLnNlcnZlci5jYW5jZWxsZWQpOwotICAgIH0KLQotICAgIEdSUENfRVJST1JfVU5SRUYoZXJyb3IpOwotICAgIGVycm9yID0gR1JQQ19FUlJPUl9OT05FOwotICB9Ci0gIGFkZF9iYXRjaF9lcnJvcihiY3RsLCBHUlBDX0VSUk9SX1JFRihlcnJvcikpOwotICBncHJfbXVfdW5sb2NrKCZjYWxsLT5tdSk7Ci0gIGlmIChncHJfdW5yZWYoJmJjdGwtPnN0ZXBzX3RvX2NvbXBsZXRlKSkgewotICAgIHBvc3RfYmF0Y2hfY29tcGxldGlvbihleGVjX2N0eCwgYmN0bCk7Ci0gIH0KLQotICBHUlBDX0VSUk9SX1VOUkVGKGVycm9yKTsKKyAgYWRkX2JhdGNoX2Vycm9yKGV4ZWNfY3R4LCBiY3RsLCBHUlBDX0VSUk9SX1JFRihlcnJvcikpOworICBmaW5pc2hfYmF0Y2hfc3RlcChleGVjX2N0eCwgYmN0bCk7CiB9CiAKIHN0YXRpYyBncnBjX2NhbGxfZXJyb3IgY2FsbF9zdGFydF9iYXRjaChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTEzNzcsNyArMTMxMCw2IEBACiAKICAgaWYgKG5vcHMgPT0gMCkgewogICAgIEdSUENfQ0FMTF9JTlRFUk5BTF9SRUYoY2FsbCwgImNvbXBsZXRpb24iKTsKLSAgICBiY3RsLT5lcnJvciA9IEdSUENfRVJST1JfTk9ORTsKICAgICBpZiAoIWlzX25vdGlmeV90YWdfY2xvc3VyZSkgewogICAgICAgZ3JwY19jcV9iZWdpbl9vcChjYWxsLT5jcSwgbm90aWZ5X3RhZyk7CiAgICAgfQpAQCAtMTQyNiwxMyArMTM1OCwxMCBAQAogICAgICAgICAgIGNvbnN0IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGNhbGdvID0KICAgICAgICAgICAgICAgY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zvcl9sZXZlbF9sb2NrZWQoCiAgICAgICAgICAgICAgICAgICBjYWxsLCBlZmZlY3RpdmVfY29tcHJlc3Npb25fbGV2ZWwpOwotICAgICAgICAgIGNoYXIgKmNhbGdvX25hbWUgPSBOVUxMOwotICAgICAgICAgIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX25hbWUoY2FsZ28sICZjYWxnb19uYW1lKTsKICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHdpbGwgYmUgcGlja2VkIHVwIGJ5IHRoZSBjb21wcmVzcyBmaWx0ZXIgYW5kIHVzZWQgYXMKICAgICAgICAgICAvLyB0aGUgY2FsbCdzIGNvbXByZXNzaW9uIGFsZ29yaXRobS4KLSAgICAgICAgICBjb21wcmVzc2lvbl9tZC5rZXkgPSBHUlBDX0NPTVBSRVNTSU9OX1JFUVVFU1RfQUxHT1JJVEhNX01EX0tFWTsKLSAgICAgICAgICBjb21wcmVzc2lvbl9tZC52YWx1ZSA9IGNhbGdvX25hbWU7Ci0gICAgICAgICAgY29tcHJlc3Npb25fbWQudmFsdWVfbGVuZ3RoID0gc3RybGVuKGNhbGdvX25hbWUpOworICAgICAgICAgIGNvbXByZXNzaW9uX21kLmtleSA9IEdSUENfTURTVFJfR1JQQ19JTlRFUk5BTF9FTkNPRElOR19SRVFVRVNUOworICAgICAgICAgIGNvbXByZXNzaW9uX21kLnZhbHVlID0gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fc2xpY2UoY2FsZ28pOwogICAgICAgICAgIGFkZGl0aW9uYWxfbWV0YWRhdGFfY291bnQrKzsKICAgICAgICAgfQogCkBAIC0xNDYxLDcgKzEzOTAsNyBAQAogICAgICAgICAgIGVycm9yID0gR1JQQ19DQUxMX0VSUk9SX0lOVkFMSURfRkxBR1M7CiAgICAgICAgICAgZ290byBkb25lX3dpdGhfZXJyb3I7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID09IE5VTEwpIHsKICAgICAgICAgICBlcnJvciA9IEdSUENfQ0FMTF9FUlJPUl9JTlZBTElEX01FU1NBR0U7CiAgICAgICAgICAgZ290byBkb25lX3dpdGhfZXJyb3I7CiAgICAgICAgIH0KQEAgLTE0NzMsMTEgKzE0MDIsMTMgQEAKICAgICAgICAgY2FsbC0+c2VuZGluZ19tZXNzYWdlID0gMTsKICAgICAgICAgZ3JwY19zbGljZV9idWZmZXJfc3RyZWFtX2luaXQoCiAgICAgICAgICAgICAmY2FsbC0+c2VuZGluZ19zdHJlYW0sCi0gICAgICAgICAgICAmb3AtPmRhdGEuc2VuZF9tZXNzYWdlLT5kYXRhLnJhdy5zbGljZV9idWZmZXIsIG9wLT5mbGFncyk7CisgICAgICAgICAgICAmb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZS0+ZGF0YS5yYXcuc2xpY2VfYnVmZmVyLAorICAgICAgICAgICAgb3AtPmZsYWdzKTsKICAgICAgICAgLyogSWYgdGhlIG91dGdvaW5nIGJ1ZmZlciBpcyBhbHJlYWR5IGNvbXByZXNzZWQsIG1hcmsgaXQgYXMgc28gaW4gdGhlCiAgICAgICAgICAgIGZsYWdzLiBUaGVzZSB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUgY29tcHJlc3Npb24gZmlsdGVyIGFuZCBmdXJ0aGVyCiAgICAgICAgICAgICh3YXN0ZWZ1bCkgYXR0ZW1wdHMgYXQgY29tcHJlc3Npb24gc2tpcHBlZC4gKi8KLSAgICAgICAgaWYgKG9wLT5kYXRhLnNlbmRfbWVzc2FnZS0+ZGF0YS5yYXcuY29tcHJlc3Npb24gPiBHUlBDX0NPTVBSRVNTX05PTkUpIHsKKyAgICAgICAgaWYgKG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UtPmRhdGEucmF3LmNvbXByZXNzaW9uID4KKyAgICAgICAgICAgIEdSUENfQ09NUFJFU1NfTk9ORSkgewogICAgICAgICAgIGNhbGwtPnNlbmRpbmdfc3RyZWFtLmJhc2UuZmxhZ3MgfD0gR1JQQ19XUklURV9JTlRFUk5BTF9DT01QUkVTUzsKICAgICAgICAgfQogICAgICAgICBzdHJlYW1fb3AtPnNlbmRfbWVzc2FnZSA9ICZjYWxsLT5zZW5kaW5nX3N0cmVhbS5iYXNlOwpAQCAtMTUyNSwxOSArMTQ1NiwyNSBAQAogICAgICAgICBjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50ID0gMTsKICAgICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVswXS5tZCA9IGdycGNfY2hhbm5lbF9nZXRfcmVmZmVkX3N0YXR1c19lbGVtKAogICAgICAgICAgICAgZXhlY19jdHgsIGNhbGwtPmNoYW5uZWwsIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyk7Ci0gICAgICAgIGlmIChvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyAhPSBOVUxMKSB7Ci0gICAgICAgICAgY2FsbC0+c2VuZF9leHRyYV9tZXRhZGF0YVsxXS5tZCA9IGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncygKLSAgICAgICAgICAgICAgZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19NRVNTQUdFLAotICAgICAgICAgICAgICBncnBjX21kc3RyX2Zyb21fc3RyaW5nKAotICAgICAgICAgICAgICAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMpKTsKLSAgICAgICAgICBjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhX2NvdW50Kys7Ci0gICAgICAgICAgc2V0X3N0YXR1c19kZXRhaWxzKAotICAgICAgICAgICAgICBleGVjX2N0eCwgY2FsbCwgU1RBVFVTX0ZST01fQVBJX09WRVJSSURFLAotICAgICAgICAgICAgICBHUlBDX01EU1RSX1JFRihjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhWzFdLm1kLT52YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgIT0gR1JQQ19TVEFUVVNfT0spIHsKLSAgICAgICAgICBzZXRfc3RhdHVzX2NvZGUoY2FsbCwgU1RBVFVTX0ZST01fQVBJX09WRVJSSURFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3Qpb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzKTsKKyAgICAgICAgeworICAgICAgICAgIGdycGNfZXJyb3IgKm92ZXJyaWRlX2Vycm9yID0gR1JQQ19FUlJPUl9OT05FOworICAgICAgICAgIGlmIChvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgIT0gR1JQQ19TVEFUVVNfT0spIHsKKyAgICAgICAgICAgIG92ZXJyaWRlX2Vycm9yID0gR1JQQ19FUlJPUl9DUkVBVEUoIkVycm9yIGZyb20gc2VydmVyIHNlbmQgc3RhdHVzIik7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyAhPSBOVUxMKSB7CisgICAgICAgICAgICBjYWxsLT5zZW5kX2V4dHJhX21ldGFkYXRhWzFdLm1kID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAgICAgZXhlY19jdHgsIEdSUENfTURTVFJfR1JQQ19NRVNTQUdFLAorICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKAorICAgICAgICAgICAgICAgICAgICAqb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMpKTsKKyAgICAgICAgICAgIGNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFfY291bnQrKzsKKyAgICAgICAgICAgIGNoYXIgKm1zZyA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoCisgICAgICAgICAgICAgICAgR1JQQ19NRFZBTFVFKGNhbGwtPnNlbmRfZXh0cmFfbWV0YWRhdGFbMV0ubWQpKTsKKyAgICAgICAgICAgIG92ZXJyaWRlX2Vycm9yID0gZ3JwY19lcnJvcl9zZXRfc3RyKAorICAgICAgICAgICAgICAgIG92ZXJyaWRlX2Vycm9yLCBHUlBDX0VSUk9SX1NUUl9HUlBDX01FU1NBR0UsIG1zZyk7CisgICAgICAgICAgICBncHJfZnJlZShtc2cpOworICAgICAgICAgIH0KKyAgICAgICAgICBzZXRfc3RhdHVzX2Zyb21fZXJyb3IoZXhlY19jdHgsIGNhbGwsIFNUQVRVU19GUk9NX0FQSV9PVkVSUklERSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVfZXJyb3IpOwogICAgICAgICB9CiAgICAgICAgIGlmICghcHJlcGFyZV9hcHBsaWNhdGlvbl9tZXRhZGF0YSgKICAgICAgICAgICAgICAgICBleGVjX2N0eCwgY2FsbCwKQEAgLTE1NjUsNyArMTUwMiw4IEBACiAgICAgICAgICAgIHRoYXQgY2FzZSB3ZSdyZSBub3QgbmVjZXNzYXJpbHkgY292ZXJlZCBieSBhIHBvbGxlci4gKi8KICAgICAgICAgc3RyZWFtX29wLT5jb3ZlcmVkX2J5X3BvbGxlciA9IGNhbGwtPmlzX2NsaWVudDsKICAgICAgICAgY2FsbC0+cmVjZWl2ZWRfaW5pdGlhbF9tZXRhZGF0YSA9IDE7Ci0gICAgICAgIGNhbGwtPmJ1ZmZlcmVkX21ldGFkYXRhWzBdID0gb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhOworICAgICAgICBjYWxsLT5idWZmZXJlZF9tZXRhZGF0YVswXSA9CisgICAgICAgICAgICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhOwogICAgICAgICBncnBjX2Nsb3N1cmVfaW5pdCgmY2FsbC0+cmVjZWl2aW5nX2luaXRpYWxfbWV0YWRhdGFfcmVhZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmluZ19pbml0aWFsX21ldGFkYXRhX3JlYWR5LCBiY3RsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKQEAgLTE1ODgsNyArMTUyNiw3IEBACiAgICAgICAgIH0KICAgICAgICAgY2FsbC0+cmVjZWl2aW5nX21lc3NhZ2UgPSAxOwogICAgICAgICBiY3RsLT5yZWN2X21lc3NhZ2UgPSAxOwotICAgICAgICBjYWxsLT5yZWNlaXZpbmdfYnVmZmVyID0gb3AtPmRhdGEucmVjdl9tZXNzYWdlOworICAgICAgICBjYWxsLT5yZWNlaXZpbmdfYnVmZmVyID0gb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZTsKICAgICAgICAgc3RyZWFtX29wLT5yZWN2X21lc3NhZ2UgPSAmY2FsbC0+cmVjZWl2aW5nX3N0cmVhbTsKICAgICAgICAgZ3JwY19jbG9zdXJlX2luaXQoJmNhbGwtPnJlY2VpdmluZ19zdHJlYW1fcmVhZHksIHJlY2VpdmluZ19zdHJlYW1fcmVhZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJjdGwsIGdycGNfc2NoZWR1bGVfb25fZXhlY19jdHgpOwpAQCAtMTYxNSw4ICsxNTUzLDYgQEAKICAgICAgICAgY2FsbC0+ZmluYWxfb3AuY2xpZW50LnN0YXR1cyA9IG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXM7CiAgICAgICAgIGNhbGwtPmZpbmFsX29wLmNsaWVudC5zdGF0dXNfZGV0YWlscyA9CiAgICAgICAgICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHM7Ci0gICAgICAgIGNhbGwtPmZpbmFsX29wLmNsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9Ci0gICAgICAgICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHk7CiAgICAgICAgIGJjdGwtPnJlY3ZfZmluYWxfb3AgPSAxOwogICAgICAgICBzdHJlYW1fb3AtPnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGEgPQogICAgICAgICAgICAgJmNhbGwtPm1ldGFkYXRhX2JhdGNoWzEgLyogaXNfcmVjZWl2aW5nICovXVsxIC8qIGlzX3RyYWlsaW5nICovXTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGwuaCBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGwuaAppbmRleCAyMzMzNDBjLi44YzQ2YTgzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsLmgKKysrIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbC5oCkBAIC02MSw3ICs2MSw3IEBACiAKICAgY29uc3Qgdm9pZCAqc2VydmVyX3RyYW5zcG9ydF9kYXRhOwogCi0gIGdycGNfbWRlbGVtICoqYWRkX2luaXRpYWxfbWV0YWRhdGE7CisgIGdycGNfbWRlbGVtICphZGRfaW5pdGlhbF9tZXRhZGF0YTsKICAgc2l6ZV90IGFkZF9pbml0aWFsX21ldGFkYXRhX2NvdW50OwogCiAgIGdwcl90aW1lc3BlYyBzZW5kX2RlYWRsaW5lOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbF9kZXRhaWxzLmMgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsX2RldGFpbHMuYwppbmRleCBmZTczZGEzLi5kMGY4OGUxIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsX2RldGFpbHMuYworKysgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsX2RldGFpbHMuYwpAQCAtMzYsMTUgKzM2LDIxIEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9leGVjX2N0eC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5oIgogCiB2b2lkIGdycGNfY2FsbF9kZXRhaWxzX2luaXQoZ3JwY19jYWxsX2RldGFpbHMqIGNkKSB7CiAgIEdSUENfQVBJX1RSQUNFKCJncnBjX2NhbGxfZGV0YWlsc19pbml0KGNkPSVwKSIsIDEsIChjZCkpOwogICBtZW1zZXQoY2QsIDAsIHNpemVvZigqY2QpKTsKKyAgY2QtPm1ldGhvZCA9IGdycGNfZW1wdHlfc2xpY2UoKTsKKyAgY2QtPmhvc3QgPSBncnBjX2VtcHR5X3NsaWNlKCk7CiB9CiAKIHZvaWQgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveShncnBjX2NhbGxfZGV0YWlscyogY2QpIHsKICAgR1JQQ19BUElfVFJBQ0UoImdycGNfY2FsbF9kZXRhaWxzX2Rlc3Ryb3koY2Q9JXApIiwgMSwgKGNkKSk7Ci0gIGdwcl9mcmVlKGNkLT5tZXRob2QpOwotICBncHJfZnJlZShjZC0+aG9zdCk7CisgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7CisgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoJmV4ZWNfY3R4LCBjZC0+bWV0aG9kKTsKKyAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbCgmZXhlY19jdHgsIGNkLT5ob3N0KTsKKyAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGxfbG9nX2JhdGNoLmMgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsX2xvZ19iYXRjaC5jCmluZGV4IDMxYzA3NGYuLjUyOWExZWYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGxfbG9nX2JhdGNoLmMKKysrIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbF9sb2dfYmF0Y2guYwpAQCAtMzUsMTcgKzM1LDIyIEBACiAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvYWxsb2MuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3RyaW5nX3V0aWwuaD4KKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKIAogc3RhdGljIHZvaWQgYWRkX21ldGFkYXRhKGdwcl9zdHJ2ZWMgKmIsIGNvbnN0IGdycGNfbWV0YWRhdGEgKm1kLCBzaXplX3QgY291bnQpIHsKICAgc2l6ZV90IGk7CisgIGlmIChtZCA9PSBOVUxMKSB7CisgICAgZ3ByX3N0cnZlY19hZGQoYiwgZ3ByX3N0cmR1cCgiKG5pbCkiKSk7CisgICAgcmV0dXJuOworICB9CiAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgZ3ByX3N0cnZlY19hZGQoYiwgZ3ByX3N0cmR1cCgiXG5rZXk9IikpOwotICAgIGdwcl9zdHJ2ZWNfYWRkKGIsIGdwcl9zdHJkdXAobWRbaV0ua2V5KSk7CisgICAgZ3ByX3N0cnZlY19hZGQoYiwgZ3JwY19zbGljZV90b19jX3N0cmluZyhtZFtpXS5rZXkpKTsKIAogICAgIGdwcl9zdHJ2ZWNfYWRkKGIsIGdwcl9zdHJkdXAoIiB2YWx1ZT0iKSk7Ci0gICAgZ3ByX3N0cnZlY19hZGQoYiwgZ3ByX2R1bXAobWRbaV0udmFsdWUsIG1kW2ldLnZhbHVlX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJfRFVNUF9IRVggfCBHUFJfRFVNUF9BU0NJSSkpOworICAgIGdwcl9zdHJ2ZWNfYWRkKGIsCisgICAgICAgICAgICAgICAgICAgZ3JwY19kdW1wX3NsaWNlKG1kW2ldLnZhbHVlLCBHUFJfRFVNUF9IRVggfCBHUFJfRFVNUF9BU0NJSSkpOwogICB9CiB9CiAKQEAgLTYzLDI3ICs2OCwzNSBAQAogICAgICAgICAgICAgICAgICAgIG9wLT5kYXRhLnNlbmRfaW5pdGlhbF9tZXRhZGF0YS5jb3VudCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdSUENfT1BfU0VORF9NRVNTQUdFOgotICAgICAgZ3ByX2FzcHJpbnRmKCZ0bXAsICJTRU5EX01FU1NBR0UgcHRyPSVwIiwgb3AtPmRhdGEuc2VuZF9tZXNzYWdlKTsKKyAgICAgIGdwcl9hc3ByaW50ZigmdG1wLCAiU0VORF9NRVNTQUdFIHB0cj0lcCIsCisgICAgICAgICAgICAgICAgICAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSk7CiAgICAgICBncHJfc3RydmVjX2FkZCgmYiwgdG1wKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1JQQ19PUF9TRU5EX0NMT1NFX0ZST01fQ0xJRU5UOgogICAgICAgZ3ByX3N0cnZlY19hZGQoJmIsIGdwcl9zdHJkdXAoIlNFTkRfQ0xPU0VfRlJPTV9DTElFTlQiKSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI6Ci0gICAgICBncHJfYXNwcmludGYoJnRtcCwgIlNFTkRfU1RBVFVTX0ZST01fU0VSVkVSIHN0YXR1cz0lZCBkZXRhaWxzPSVzIiwKLSAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMpOworICAgICAgZ3ByX2FzcHJpbnRmKCZ0bXAsICJTRU5EX1NUQVRVU19GUk9NX1NFUlZFUiBzdGF0dXM9JWQgZGV0YWlscz0iLAorICAgICAgICAgICAgICAgICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyk7CiAgICAgICBncHJfc3RydmVjX2FkZCgmYiwgdG1wKTsKKyAgICAgIGlmIChvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyAhPSBOVUxMKSB7CisgICAgICAgIGdwcl9zdHJ2ZWNfYWRkKCZiLCBncnBjX2R1bXBfc2xpY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0FTQ0lJKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBncHJfc3RydmVjX2FkZCgmYiwgZ3ByX3N0cmR1cCgiKG51bGwpIikpOworICAgICAgfQogICAgICAgYWRkX21ldGFkYXRhKCZiLCBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOgogICAgICAgZ3ByX2FzcHJpbnRmKCZ0bXAsICJSRUNWX0lOSVRJQUxfTUVUQURBVEEgcHRyPSVwIiwKLSAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOworICAgICAgICAgICAgICAgICAgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOwogICAgICAgZ3ByX3N0cnZlY19hZGQoJmIsIHRtcCk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdSUENfT1BfUkVDVl9NRVNTQUdFOgotICAgICAgZ3ByX2FzcHJpbnRmKCZ0bXAsICJSRUNWX01FU1NBR0UgcHRyPSVwIiwgb3AtPmRhdGEucmVjdl9tZXNzYWdlKTsKKyAgICAgIGdwcl9hc3ByaW50ZigmdG1wLCAiUkVDVl9NRVNTQUdFIHB0cj0lcCIsCisgICAgICAgICAgICAgICAgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSk7CiAgICAgICBncHJfc3RydmVjX2FkZCgmYiwgdG1wKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ6CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmMgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmMKaW5kZXggYjg3Mjk1Ny4uNDI5ZGJhZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2hhbm5lbC5jCisrKyBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NoYW5uZWwuYwpAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2NoYW5uZWwvY2hhbm5lbF9hcmdzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL2lvbWdyLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cHBvcnQvc3RyaW5nLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbC5oIgpAQCAtNTcsMTUgKzU4LDE1IEBACiAjZGVmaW5lIE5VTV9DQUNIRURfU1RBVFVTX0VMRU1TIDMKIAogdHlwZWRlZiBzdHJ1Y3QgcmVnaXN0ZXJlZF9jYWxsIHsKLSAgZ3JwY19tZGVsZW0gKnBhdGg7Ci0gIGdycGNfbWRlbGVtICphdXRob3JpdHk7CisgIGdycGNfbWRlbGVtIHBhdGg7CisgIGdycGNfbWRlbGVtIGF1dGhvcml0eTsKICAgc3RydWN0IHJlZ2lzdGVyZWRfY2FsbCAqbmV4dDsKIH0gcmVnaXN0ZXJlZF9jYWxsOwogCiBzdHJ1Y3QgZ3JwY19jaGFubmVsIHsKICAgaW50IGlzX2NsaWVudDsKICAgZ3JwY19jb21wcmVzc2lvbl9vcHRpb25zIGNvbXByZXNzaW9uX29wdGlvbnM7Ci0gIGdycGNfbWRlbGVtICpkZWZhdWx0X2F1dGhvcml0eTsKKyAgZ3JwY19tZGVsZW0gZGVmYXVsdF9hdXRob3JpdHk7CiAKICAgZ3ByX211IHJlZ2lzdGVyZWRfY2FsbF9tdTsKICAgcmVnaXN0ZXJlZF9jYWxsICpyZWdpc3RlcmVkX2NhbGxzOwpAQCAtMTAyLDkgKzEwMyw4IEBACiAgICAgICBleGVjX2N0eCwgYnVpbGRlciwgc2l6ZW9mKGdycGNfY2hhbm5lbCksIDEsIGRlc3Ryb3lfY2hhbm5lbCwgTlVMTCwKICAgICAgICh2b2lkICoqKSZjaGFubmVsKTsKICAgaWYgKGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewotICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycm9yKTsKLSAgICBncHJfbG9nKEdQUl9FUlJPUiwgImNoYW5uZWwgc3RhY2sgYnVpbGRlciBmYWlsZWQ6ICVzIiwgbXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CisgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJjaGFubmVsIHN0YWNrIGJ1aWxkZXIgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBncnBjX2Vycm9yX3N0cmluZyhlcnJvcikpOwogICAgIEdSUENfRVJST1JfVU5SRUYoZXJyb3IpOwogICAgIGdvdG8gZG9uZTsKICAgfQpAQCAtMTE2LDE5ICsxMTYsMTkgQEAKICAgY2hhbm5lbC0+cmVnaXN0ZXJlZF9jYWxscyA9IE5VTEw7CiAKICAgZ3JwY19jb21wcmVzc2lvbl9vcHRpb25zX2luaXQoJmNoYW5uZWwtPmNvbXByZXNzaW9uX29wdGlvbnMpOwotCiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy0+bnVtX2FyZ3M7IGkrKykgewogICAgIGlmICgwID09IHN0cmNtcChhcmdzLT5hcmdzW2ldLmtleSwgR1JQQ19BUkdfREVGQVVMVF9BVVRIT1JJVFkpKSB7CiAgICAgICBpZiAoYXJncy0+YXJnc1tpXS50eXBlICE9IEdSUENfQVJHX1NUUklORykgewogICAgICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIiVzIGlnbm9yZWQ6IGl0IG11c3QgYmUgYSBzdHJpbmciLAogICAgICAgICAgICAgICAgIEdSUENfQVJHX0RFRkFVTFRfQVVUSE9SSVRZKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjaGFubmVsLT5kZWZhdWx0X2F1dGhvcml0eSkgeworICAgICAgICBpZiAoIUdSUENfTURJU05VTEwoY2hhbm5lbC0+ZGVmYXVsdF9hdXRob3JpdHkpKSB7CiAgICAgICAgICAgLyogc2V0dGluZyB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnl0aGluZyBlbHNlICovCiAgICAgICAgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIGNoYW5uZWwtPmRlZmF1bHRfYXV0aG9yaXR5KTsKICAgICAgICAgfQotICAgICAgICBjaGFubmVsLT5kZWZhdWx0X2F1dGhvcml0eSA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygKLSAgICAgICAgICAgIGV4ZWNfY3R4LCAiOmF1dGhvcml0eSIsIGFyZ3MtPmFyZ3NbaV0udmFsdWUuc3RyaW5nKTsKKyAgICAgICAgY2hhbm5lbC0+ZGVmYXVsdF9hdXRob3JpdHkgPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgICAgICAgIGV4ZWNfY3R4LCBHUlBDX01EU1RSX0FVVEhPUklUWSwKKyAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKGFyZ3MtPmFyZ3NbaV0udmFsdWUuc3RyaW5nKSk7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmICgwID09CiAgICAgICAgICAgICAgICBzdHJjbXAoYXJncy0+YXJnc1tpXS5rZXksIEdSUENfU1NMX1RBUkdFVF9OQU1FX09WRVJSSURFX0FSRykpIHsKQEAgLTEzNiwxNCArMTM2LDE1IEBACiAgICAgICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiJXMgaWdub3JlZDogaXQgbXVzdCBiZSBhIHN0cmluZyIsCiAgICAgICAgICAgICAgICAgR1JQQ19TU0xfVEFSR0VUX05BTUVfT1ZFUlJJREVfQVJHKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjaGFubmVsLT5kZWZhdWx0X2F1dGhvcml0eSkgeworICAgICAgICBpZiAoIUdSUENfTURJU05VTEwoY2hhbm5lbC0+ZGVmYXVsdF9hdXRob3JpdHkpKSB7CiAgICAgICAgICAgLyogb3RoZXIgd2F5cyBvZiBzZXR0aW5nIHRoaXMgKG5vdGFibHkgc3NsKSB0YWtlIHByZWNlZGVuY2UgKi8KICAgICAgICAgICBncHJfbG9nKEdQUl9FUlJPUiwKICAgICAgICAgICAgICAgICAgICIlcyBpZ25vcmVkOiBkZWZhdWx0IGhvc3QgYWxyZWFkeSBzZXQgc29tZSBvdGhlciB3YXkiLAogICAgICAgICAgICAgICAgICAgR1JQQ19TU0xfVEFSR0VUX05BTUVfT1ZFUlJJREVfQVJHKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjaGFubmVsLT5kZWZhdWx0X2F1dGhvcml0eSA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygKLSAgICAgICAgICAgICAgZXhlY19jdHgsICI6YXV0aG9yaXR5IiwgYXJncy0+YXJnc1tpXS52YWx1ZS5zdHJpbmcpOworICAgICAgICAgIGNoYW5uZWwtPmRlZmF1bHRfYXV0aG9yaXR5ID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAgIGV4ZWNfY3R4LCBHUlBDX01EU1RSX0FVVEhPUklUWSwKKyAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoYXJncy0+YXJnc1tpXS52YWx1ZS5zdHJpbmcpKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAoYXJncy0+YXJnc1tpXS5rZXksCkBAIC0xOTEsMTggKzE5MiwxOCBAQAogc3RhdGljIGdycGNfY2FsbCAqZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsX2ludGVybmFsKAogICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGdycGNfY2FsbCAqcGFyZW50X2NhbGwsCiAgICAgdWludDMyX3QgcHJvcGFnYXRpb25fbWFzaywgZ3JwY19jb21wbGV0aW9uX3F1ZXVlICpjcSwKLSAgICBncnBjX3BvbGxzZXRfc2V0ICpwb2xsc2V0X3NldF9hbHRlcm5hdGl2ZSwgZ3JwY19tZGVsZW0gKnBhdGhfbWRlbGVtLAotICAgIGdycGNfbWRlbGVtICphdXRob3JpdHlfbWRlbGVtLCBncHJfdGltZXNwZWMgZGVhZGxpbmUpIHsKLSAgZ3JwY19tZGVsZW0gKnNlbmRfbWV0YWRhdGFbMl07CisgICAgZ3JwY19wb2xsc2V0X3NldCAqcG9sbHNldF9zZXRfYWx0ZXJuYXRpdmUsIGdycGNfbWRlbGVtIHBhdGhfbWRlbGVtLAorICAgIGdycGNfbWRlbGVtIGF1dGhvcml0eV9tZGVsZW0sIGdwcl90aW1lc3BlYyBkZWFkbGluZSkgeworICBncnBjX21kZWxlbSBzZW5kX21ldGFkYXRhWzJdOwogICBzaXplX3QgbnVtX21ldGFkYXRhID0gMDsKIAogICBHUFJfQVNTRVJUKGNoYW5uZWwtPmlzX2NsaWVudCk7CiAgIEdQUl9BU1NFUlQoIShjcSAhPSBOVUxMICYmIHBvbGxzZXRfc2V0X2FsdGVybmF0aXZlICE9IE5VTEwpKTsKIAogICBzZW5kX21ldGFkYXRhW251bV9tZXRhZGF0YSsrXSA9IHBhdGhfbWRlbGVtOwotICBpZiAoYXV0aG9yaXR5X21kZWxlbSAhPSBOVUxMKSB7CisgIGlmICghR1JQQ19NRElTTlVMTChhdXRob3JpdHlfbWRlbGVtKSkgewogICAgIHNlbmRfbWV0YWRhdGFbbnVtX21ldGFkYXRhKytdID0gYXV0aG9yaXR5X21kZWxlbTsKLSAgfSBlbHNlIGlmIChjaGFubmVsLT5kZWZhdWx0X2F1dGhvcml0eSAhPSBOVUxMKSB7CisgIH0gZWxzZSBpZiAoIUdSUENfTURJU05VTEwoY2hhbm5lbC0+ZGVmYXVsdF9hdXRob3JpdHkpKSB7CiAgICAgc2VuZF9tZXRhZGF0YVtudW1fbWV0YWRhdGErK10gPSBHUlBDX01ERUxFTV9SRUYoY2hhbm5lbC0+ZGVmYXVsdF9hdXRob3JpdHkpOwogICB9CiAKQEAgLTIyNywyNyArMjI4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NhbGwgKnBhcmVudF9jYWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJvcGFnYXRpb25fbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY29tcGxldGlvbl9xdWV1ZSAqY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IGNoYXIgKmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIG1ldGhvZCwgY29uc3QgZ3JwY19zbGljZSAqaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwcl90aW1lc3BlYyBkZWFkbGluZSwgdm9pZCAqcmVzZXJ2ZWQpIHsKLSAgR1JQQ19BUElfVFJBQ0UoCi0gICAgICAiZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKCIKLSAgICAgICJjaGFubmVsPSVwLCBwYXJlbnRfY2FsbD0lcCwgcHJvcGFnYXRpb25fbWFzaz0leCwgY3E9JXAsIG1ldGhvZD0lcywgIgotICAgICAgImhvc3Q9JXMsICIKLSAgICAgICJkZWFkbGluZT1ncHJfdGltZXNwZWMgeyB0dl9zZWM6ICUiIFBSSWQ2NAotICAgICAgIiwgdHZfbnNlYzogJWQsIGNsb2NrX3R5cGU6ICVkIH0sICIKLSAgICAgICJyZXNlcnZlZD0lcCkiLAotICAgICAgMTAsCi0gICAgICAoY2hhbm5lbCwgcGFyZW50X2NhbGwsICh1bnNpZ25lZClwcm9wYWdhdGlvbl9tYXNrLCBjcSwgbWV0aG9kLCBob3N0LAotICAgICAgIGRlYWRsaW5lLnR2X3NlYywgZGVhZGxpbmUudHZfbnNlYywgKGludClkZWFkbGluZS5jbG9ja190eXBlLCByZXNlcnZlZCkpOwogICBHUFJfQVNTRVJUKCFyZXNlcnZlZCk7CiAgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7CiAgIGdycGNfY2FsbCAqY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF9pbnRlcm5hbCgKICAgICAgICZleGVjX2N0eCwgY2hhbm5lbCwgcGFyZW50X2NhbGwsIHByb3BhZ2F0aW9uX21hc2ssIGNxLCBOVUxMLAotICAgICAgZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKCZleGVjX2N0eCwgR1JQQ19NRFNUUl9QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcobWV0aG9kKSksCi0gICAgICBob3N0ID8gZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKCZleGVjX2N0eCwgR1JQQ19NRFNUUl9BVVRIT1JJVFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoaG9zdCkpCi0gICAgICAgICAgIDogTlVMTCwKKyAgICAgIGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKCZleGVjX2N0eCwgR1JQQ19NRFNUUl9QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwobWV0aG9kKSksCisgICAgICBob3N0ICE9IE5VTEwgPyBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygmZXhlY19jdHgsIEdSUENfTURTVFJfQVVUSE9SSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoKmhvc3QpKQorICAgICAgICAgICAgICAgICAgIDogR1JQQ19NRE5VTEwsCiAgICAgICBkZWFkbGluZSk7CiAgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CiAgIHJldHVybiBjYWxsOwpAQCAtMjU1LDE3ICsyNDYsMTYgQEAKIAogZ3JwY19jYWxsICpncnBjX2NoYW5uZWxfY3JlYXRlX3BvbGxzZXRfc2V0X2NhbGwoCiAgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfY2hhbm5lbCAqY2hhbm5lbCwgZ3JwY19jYWxsICpwYXJlbnRfY2FsbCwKLSAgICB1aW50MzJfdCBwcm9wYWdhdGlvbl9tYXNrLCBncnBjX3BvbGxzZXRfc2V0ICpwb2xsc2V0X3NldCwKLSAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IGNoYXIgKmhvc3QsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwKLSAgICB2b2lkICpyZXNlcnZlZCkgeworICAgIHVpbnQzMl90IHByb3BhZ2F0aW9uX21hc2ssIGdycGNfcG9sbHNldF9zZXQgKnBvbGxzZXRfc2V0LCBncnBjX3NsaWNlIG1ldGhvZCwKKyAgICBjb25zdCBncnBjX3NsaWNlICpob3N0LCBncHJfdGltZXNwZWMgZGVhZGxpbmUsIHZvaWQgKnJlc2VydmVkKSB7CiAgIEdQUl9BU1NFUlQoIXJlc2VydmVkKTsKICAgcmV0dXJuIGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF9pbnRlcm5hbCgKICAgICAgIGV4ZWNfY3R4LCBjaGFubmVsLCBwYXJlbnRfY2FsbCwgcHJvcGFnYXRpb25fbWFzaywgTlVMTCwgcG9sbHNldF9zZXQsCi0gICAgICBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoZXhlY19jdHgsIEdSUENfTURTVFJfUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kc3RyX2Zyb21fc3RyaW5nKG1ldGhvZCkpLAotICAgICAgaG9zdCA/IGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncyhleGVjX2N0eCwgR1JQQ19NRFNUUl9BVVRIT1JJVFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoaG9zdCkpCi0gICAgICAgICAgIDogTlVMTCwKKyAgICAgIGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKGV4ZWNfY3R4LCBHUlBDX01EU1RSX1BBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX3JlZl9pbnRlcm5hbChtZXRob2QpKSwKKyAgICAgIGhvc3QgIT0gTlVMTCA/IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKGV4ZWNfY3R4LCBHUlBDX01EU1RSX0FVVEhPUklUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKCpob3N0KSkKKyAgICAgICAgICAgICAgICAgICA6IEdSUENfTUROVUxMLAogICAgICAgZGVhZGxpbmUpOwogfQogCkBAIC0yNzcsMTIgKzI2NywxNSBAQAogICAgICAgNCwgKGNoYW5uZWwsIG1ldGhvZCwgaG9zdCwgcmVzZXJ2ZWQpKTsKICAgR1BSX0FTU0VSVCghcmVzZXJ2ZWQpOwogICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwotICByYy0+cGF0aCA9IGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncygmZXhlY19jdHgsIEdSUENfTURTVFJfUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhtZXRob2QpKTsKKworICByYy0+cGF0aCA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgJmV4ZWNfY3R4LCBHUlBDX01EU1RSX1BBVEgsCisgICAgICBncnBjX3NsaWNlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhtZXRob2QpKSk7CiAgIHJjLT5hdXRob3JpdHkgPQotICAgICAgaG9zdCA/IGdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncygmZXhlY19jdHgsIEdSUENfTURTVFJfQVVUSE9SSVRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kc3RyX2Zyb21fc3RyaW5nKGhvc3QpKQotICAgICAgICAgICA6IE5VTEw7CisgICAgICBob3N0ID8gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAgICAgICZleGVjX2N0eCwgR1JQQ19NRFNUUl9BVVRIT1JJVFksCisgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGhvc3QpKSkKKyAgICAgICAgICAgOiBHUlBDX01ETlVMTDsKICAgZ3ByX211X2xvY2soJmNoYW5uZWwtPnJlZ2lzdGVyZWRfY2FsbF9tdSk7CiAgIHJjLT5uZXh0ID0gY2hhbm5lbC0+cmVnaXN0ZXJlZF9jYWxsczsKICAgY2hhbm5lbC0+cmVnaXN0ZXJlZF9jYWxscyA9IHJjOwpAQCAtMzEwLDggKzMwMyw3IEBACiAgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7CiAgIGdycGNfY2FsbCAqY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF9pbnRlcm5hbCgKICAgICAgICZleGVjX2N0eCwgY2hhbm5lbCwgcGFyZW50X2NhbGwsIHByb3BhZ2F0aW9uX21hc2ssIGNvbXBsZXRpb25fcXVldWUsIE5VTEwsCi0gICAgICBHUlBDX01ERUxFTV9SRUYocmMtPnBhdGgpLAotICAgICAgcmMtPmF1dGhvcml0eSA/IEdSUENfTURFTEVNX1JFRihyYy0+YXV0aG9yaXR5KSA6IE5VTEwsIGRlYWRsaW5lKTsKKyAgICAgIEdSUENfTURFTEVNX1JFRihyYy0+cGF0aCksIEdSUENfTURFTEVNX1JFRihyYy0+YXV0aG9yaXR5KSwgZGVhZGxpbmUpOwogICBncnBjX2V4ZWNfY3R4X2ZpbmlzaCgmZXhlY19jdHgpOwogICByZXR1cm4gY2FsbDsKIH0KQEAgLTM0MCwxNCArMzMyLDEwIEBACiAgICAgcmVnaXN0ZXJlZF9jYWxsICpyYyA9IGNoYW5uZWwtPnJlZ2lzdGVyZWRfY2FsbHM7CiAgICAgY2hhbm5lbC0+cmVnaXN0ZXJlZF9jYWxscyA9IHJjLT5uZXh0OwogICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCByYy0+cGF0aCk7Ci0gICAgaWYgKHJjLT5hdXRob3JpdHkpIHsKLSAgICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCByYy0+YXV0aG9yaXR5KTsKLSAgICB9CisgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIHJjLT5hdXRob3JpdHkpOwogICAgIGdwcl9mcmVlKHJjKTsKICAgfQotICBpZiAoY2hhbm5lbC0+ZGVmYXVsdF9hdXRob3JpdHkgIT0gTlVMTCkgewotICAgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBjaGFubmVsLT5kZWZhdWx0X2F1dGhvcml0eSk7Ci0gIH0KKyAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIGNoYW5uZWwtPmRlZmF1bHRfYXV0aG9yaXR5KTsKICAgZ3ByX211X2Rlc3Ryb3koJmNoYW5uZWwtPnJlZ2lzdGVyZWRfY2FsbF9tdSk7CiAgIGdwcl9mcmVlKGNoYW5uZWwtPnRhcmdldCk7CiAgIGdwcl9mcmVlKGNoYW5uZWwpOwpAQCAtMzc2LDggKzM2NCw4IEBACiAgIHJldHVybiBjaGFubmVsLT5jb21wcmVzc2lvbl9vcHRpb25zOwogfQogCi1ncnBjX21kZWxlbSAqZ3JwY19jaGFubmVsX2dldF9yZWZmZWRfc3RhdHVzX2VsZW0oZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsICpjaGFubmVsLCBpbnQgaSkgeworZ3JwY19tZGVsZW0gZ3JwY19jaGFubmVsX2dldF9yZWZmZWRfc3RhdHVzX2VsZW0oZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGludCBpKSB7CiAgIGNoYXIgdG1wW0dQUl9MVE9BX01JTl9CVUZTSVpFXTsKICAgc3dpdGNoIChpKSB7CiAgICAgY2FzZSAwOgpAQCAtMzg4LDYgKzM3Niw2IEBACiAgICAgICByZXR1cm4gR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMjsKICAgfQogICBncHJfbHRvYShpLCB0bXApOwotICByZXR1cm4gZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKGV4ZWNfY3R4LCBHUlBDX01EU1RSX0dSUENfU1RBVFVTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcodG1wKSk7CisgIHJldHVybiBncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX1NUQVRVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKHRtcCkpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2hhbm5lbC5oIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvY2hhbm5lbC5oCmluZGV4IDJlYmFkYjcuLjNhNDQxZDcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NoYW5uZWwuaAorKysgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmgKQEAgLTUyLDkgKzUyLDggQEAKICAgICB2YWx1ZSBvZiBcYSBwcm9wYWdhdGlvbl9tYXNrIChzZWUgcHJvcGFnYXRpb25fYml0cy5oIGZvciBwb3NzaWJsZSB2YWx1ZXMpICovCiBncnBjX2NhbGwgKmdycGNfY2hhbm5lbF9jcmVhdGVfcG9sbHNldF9zZXRfY2FsbCgKICAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19jaGFubmVsICpjaGFubmVsLCBncnBjX2NhbGwgKnBhcmVudF9jYWxsLAotICAgIHVpbnQzMl90IHByb3BhZ2F0aW9uX21hc2ssIGdycGNfcG9sbHNldF9zZXQgKnBvbGxzZXRfc2V0LAotICAgIGNvbnN0IGNoYXIgKm1ldGhvZCwgY29uc3QgY2hhciAqaG9zdCwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLAotICAgIHZvaWQgKnJlc2VydmVkKTsKKyAgICB1aW50MzJfdCBwcm9wYWdhdGlvbl9tYXNrLCBncnBjX3BvbGxzZXRfc2V0ICpwb2xsc2V0X3NldCwgZ3JwY19zbGljZSBtZXRob2QsCisgICAgY29uc3QgZ3JwY19zbGljZSAqaG9zdCwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lLCB2b2lkICpyZXNlcnZlZCk7CiAKIC8qKiBHZXQgYSAoYm9ycm93ZWQpIHBvaW50ZXIgdG8gdGhpcyBjaGFubmVscyB1bmRlcmx5aW5nIGNoYW5uZWwgc3RhY2sgKi8KIGdycGNfY2hhbm5lbF9zdGFjayAqZ3JwY19jaGFubmVsX2dldF9jaGFubmVsX3N0YWNrKGdycGNfY2hhbm5lbCAqY2hhbm5lbCk7CkBAIC02Myw5ICs2Miw5IEBACiAgICAgc3RhdHVzX2NvZGUuCiAKICAgICBUaGUgcmV0dXJuZWQgZWxlbSBpcyBvd25lZCBieSB0aGUgY2FsbGVyLiAqLwotZ3JwY19tZGVsZW0gKmdycGNfY2hhbm5lbF9nZXRfcmVmZmVkX3N0YXR1c19lbGVtKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbCAqY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzX2NvZGUpOworZ3JwY19tZGVsZW0gZ3JwY19jaGFubmVsX2dldF9yZWZmZWRfc3RhdHVzX2VsZW0oZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWwgKmNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzX2NvZGUpOwogCiAjaWZkZWYgR1JQQ19TVFJFQU1fUkVGQ09VTlRfREVCVUcKIHZvaWQgZ3JwY19jaGFubmVsX2ludGVybmFsX3JlZihncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKnJlYXNvbik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc3VyZmFjZS9jb21wbGV0aW9uX3F1ZXVlLmMgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9jb21wbGV0aW9uX3F1ZXVlLmMKaW5kZXggNDYxM2M5MC4uMTgzMDg0MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3N1cmZhY2UvY29tcGxldGlvbl9xdWV1ZS5jCisrKyBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2NvbXBsZXRpb25fcXVldWUuYwpAQCAtMjUzLDcgKzI1Myw2IEBACiAgICAgaWYgKGdycGNfdHJhY2Vfb3BlcmF0aW9uX2ZhaWx1cmVzICYmIGVycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewogICAgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJPcGVyYXRpb24gZmFpbGVkOiB0YWc9JXAsIGVycm9yPSVzIiwgdGFnLCBlcnJtc2cpOwogICAgIH0KLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKGVycm1zZyk7CiAgIH0KIAogICBzdG9yYWdlLT50YWcgPSB0YWc7CkBAIC0yOTQsNyArMjkzLDcgQEAKICAgICBpZiAoa2lja19lcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGtpY2tfZXJyb3IpOwogICAgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJLaWNrIGZhaWxlZDogJXMiLCBtc2cpOwotICAgICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOworCiAgICAgICBHUlBDX0VSUk9SX1VOUkVGKGtpY2tfZXJyb3IpOwogICAgIH0KICAgfSBlbHNlIHsKQEAgLTQwMyw4ICs0MDIsOCBAQAogICAgICAgLnN0b2xlbl9jb21wbGV0aW9uID0gTlVMTCwKICAgICAgIC50YWcgPSBOVUxMLAogICAgICAgLmZpcnN0X2xvb3AgPSB0cnVlfTsKLSAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVF9XSVRIX0ZJTklTSF9DSEVDSygKLSAgICAgIGNxX2lzX25leHRfZmluaXNoZWQsICZpc19maW5pc2hlZF9hcmcpOworICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0KKyAgICAgIEdSUENfRVhFQ19DVFhfSU5JVElBTElaRVIoMCwgY3FfaXNfbmV4dF9maW5pc2hlZCwgJmlzX2ZpbmlzaGVkX2FyZyk7CiAgIGZvciAoOzspIHsKICAgICBpZiAoaXNfZmluaXNoZWRfYXJnLnN0b2xlbl9jb21wbGV0aW9uICE9IE5VTEwpIHsKICAgICAgIGdwcl9tdV91bmxvY2soY2MtPm11KTsKQEAgLTQ2MSw3ICs0NjAsNyBAQAogICAgICAgICBncHJfbXVfdW5sb2NrKGNjLT5tdSk7CiAgICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGdycGNfZXJyb3Jfc3RyaW5nKGVycik7CiAgICAgICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiQ29tcGxldGlvbiBxdWV1ZSBuZXh0IGZhaWxlZDogJXMiLCBtc2cpOwotICAgICAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CisKICAgICAgICAgR1JQQ19FUlJPUl9VTlJFRihlcnIpOwogICAgICAgICBtZW1zZXQoJnJldCwgMCwgc2l6ZW9mKHJldCkpOwogICAgICAgICByZXQudHlwZSA9IEdSUENfUVVFVUVfVElNRU9VVDsKQEAgLTU3Miw4ICs1NzEsOCBAQAogICAgICAgLnN0b2xlbl9jb21wbGV0aW9uID0gTlVMTCwKICAgICAgIC50YWcgPSB0YWcsCiAgICAgICAuZmlyc3RfbG9vcCA9IHRydWV9OwotICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUX1dJVEhfRklOSVNIX0NIRUNLKAotICAgICAgY3FfaXNfcGx1Y2tfZmluaXNoZWQsICZpc19maW5pc2hlZF9hcmcpOworICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0KKyAgICAgIEdSUENfRVhFQ19DVFhfSU5JVElBTElaRVIoMCwgY3FfaXNfcGx1Y2tfZmluaXNoZWQsICZpc19maW5pc2hlZF9hcmcpOwogICBmb3IgKDs7KSB7CiAgICAgaWYgKGlzX2ZpbmlzaGVkX2FyZy5zdG9sZW5fY29tcGxldGlvbiAhPSBOVUxMKSB7CiAgICAgICBncHJfbXVfdW5sb2NrKGNjLT5tdSk7CkBAIC02NDcsNyArNjQ2LDcgQEAKICAgICAgICAgZ3ByX211X3VubG9jayhjYy0+bXUpOwogICAgICAgICBjb25zdCBjaGFyICptc2cgPSBncnBjX2Vycm9yX3N0cmluZyhlcnIpOwogICAgICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIkNvbXBsZXRpb24gcXVldWUgbmV4dCBmYWlsZWQ6ICVzIiwgbXNnKTsKLSAgICAgICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOworCiAgICAgICAgIEdSUENfRVJST1JfVU5SRUYoZXJyKTsKICAgICAgICAgbWVtc2V0KCZyZXQsIDAsIHNpemVvZihyZXQpKTsKICAgICAgICAgcmV0LnR5cGUgPSBHUlBDX1FVRVVFX1RJTUVPVVQ7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc3VyZmFjZS9pbml0LmMgYi9zcmMvY29yZS9saWIvc3VyZmFjZS9pbml0LmMKaW5kZXggZjYxYmYxNS4uY2ZhMTg4MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3N1cmZhY2UvaW5pdC5jCisrKyBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2luaXQuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9pb21nci5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9yZXNvdXJjZV9xdW90YS5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9wcm9maWxpbmcvdGltZXJzLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvYXBpX3RyYWNlLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2NoYW5uZWxfaW5pdC5oIgpAQCAtMTc4LDYgKzE3OSw3IEBACiAgIGdwcl9tdV9sb2NrKCZnX2luaXRfbXUpOwogICBpZiAoKytnX2luaXRpYWxpemF0aW9ucyA9PSAxKSB7CiAgICAgZ3ByX3RpbWVfaW5pdCgpOworICAgIGdycGNfc2xpY2VfaW50ZXJuX2luaXQoKTsKICAgICBncnBjX21kY3R4X2dsb2JhbF9pbml0KCk7CiAgICAgZ3JwY19jaGFubmVsX2luaXRfaW5pdCgpOwogICAgIGdycGNfcmVnaXN0ZXJfdHJhY2VyKCJhcGkiLCAmZ3JwY19hcGlfdHJhY2UpOwpAQCAtMjQyLDYgKzI0NCw3IEBACiAgICAgfQogICAgIGdycGNfbWRjdHhfZ2xvYmFsX3NodXRkb3duKCZleGVjX2N0eCk7CiAgICAgZ3JwY19oYW5kc2hha2VyX2ZhY3RvcnlfcmVnaXN0cnlfc2h1dGRvd24oJmV4ZWNfY3R4KTsKKyAgICBncnBjX3NsaWNlX2ludGVybl9zaHV0ZG93bigpOwogICB9CiAgIGdwcl9tdV91bmxvY2soJmdfaW5pdF9tdSk7CiAgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc3VyZmFjZS9sYW1lX2NsaWVudC5jIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvbGFtZV9jbGllbnQuYwppbmRleCBhZTFlYWMwLi40OGRlMGUxIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvc3VyZmFjZS9sYW1lX2NsaWVudC5jCisrKyBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL2xhbWVfY2xpZW50LmMKQEAgLTQ0LDEwICs0NCwxMiBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2FwaV90cmFjZS5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2NhbGwuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9jaGFubmVsLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBncnBjX2xpbmtlZF9tZGVsZW0gc3RhdHVzOwogICBncnBjX2xpbmtlZF9tZGVsZW0gZGV0YWlsczsKKyAgZ3ByX2F0bSBmaWxsZWRfbWV0YWRhdGE7CiB9IGNhbGxfZGF0YTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNTgsMTcgKzYwLDIzIEBACiBzdGF0aWMgdm9pZCBmaWxsX21ldGFkYXRhKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NhbGxfZWxlbWVudCAqZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqbWRiKSB7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CisgIGlmICghZ3ByX2F0bV9ub19iYXJyaWVyX2NhcygmY2FsbGQtPmZpbGxlZF9tZXRhZGF0YSwgMCwgMSkpIHsKKyAgICByZXR1cm47CisgIH0KICAgY2hhbm5lbF9kYXRhICpjaGFuZCA9IGVsZW0tPmNoYW5uZWxfZGF0YTsKICAgY2hhciB0bXBbR1BSX0xUT0FfTUlOX0JVRlNJWkVdOwogICBncHJfbHRvYShjaGFuZC0+ZXJyb3JfY29kZSwgdG1wKTsKLSAgY2FsbGQtPnN0YXR1cy5tZCA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncyhleGVjX2N0eCwgImdycGMtc3RhdHVzIiwgdG1wKTsKLSAgY2FsbGQtPmRldGFpbHMubWQgPQotICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKGV4ZWNfY3R4LCAiZ3JwYy1tZXNzYWdlIiwgY2hhbmQtPmVycm9yX21lc3NhZ2UpOworICBjYWxsZC0+c3RhdHVzLm1kID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX1NUQVRVUywgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcodG1wKSk7CisgIGNhbGxkLT5kZXRhaWxzLm1kID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICBleGVjX2N0eCwgR1JQQ19NRFNUUl9HUlBDX01FU1NBR0UsCisgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhjaGFuZC0+ZXJyb3JfbWVzc2FnZSkpOwogICBjYWxsZC0+c3RhdHVzLnByZXYgPSBjYWxsZC0+ZGV0YWlscy5uZXh0ID0gTlVMTDsKICAgY2FsbGQtPnN0YXR1cy5uZXh0ID0gJmNhbGxkLT5kZXRhaWxzOwogICBjYWxsZC0+ZGV0YWlscy5wcmV2ID0gJmNhbGxkLT5zdGF0dXM7CiAgIG1kYi0+bGlzdC5oZWFkID0gJmNhbGxkLT5zdGF0dXM7CiAgIG1kYi0+bGlzdC50YWlsID0gJmNhbGxkLT5kZXRhaWxzOworICBtZGItPmxpc3QuY291bnQgPSAyOwogICBtZGItPmRlYWRsaW5lID0gZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKTsKIH0KIApAQCAtMTE1LDYgKzEyMyw4IEBACiBzdGF0aWMgZ3JwY19lcnJvciAqaW5pdF9jYWxsX2VsZW0oZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jYWxsX2VsZW1lbnRfYXJncyAqYXJncykgeworICBjYWxsX2RhdGEgKmNhbGxkID0gZWxlbS0+Y2FsbF9kYXRhOworICBncHJfYXRtX25vX2JhcnJpZXJfc3RvcmUoJmNhbGxkLT5maWxsZWRfbWV0YWRhdGEsIDApOwogICByZXR1cm4gR1JQQ19FUlJPUl9OT05FOwogfQogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvc3VyZmFjZS9zZXJ2ZXIuYyBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5jCmluZGV4IGFkZGI3YzQuLjZhYjFjMGQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5jCisrKyBiL3NyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5jCkBAIC05OCw4ICs5OCw5IEBACiB0eXBlZGVmIHN0cnVjdCBjaGFubmVsX3JlZ2lzdGVyZWRfbWV0aG9kIHsKICAgcmVnaXN0ZXJlZF9tZXRob2QgKnNlcnZlcl9yZWdpc3RlcmVkX21ldGhvZDsKICAgdWludDMyX3QgZmxhZ3M7Ci0gIGdycGNfbWRzdHIgKm1ldGhvZDsKLSAgZ3JwY19tZHN0ciAqaG9zdDsKKyAgYm9vbCBoYXNfaG9zdDsKKyAgZ3JwY19zbGljZSBtZXRob2Q7CisgIGdycGNfc2xpY2UgaG9zdDsKIH0gY2hhbm5lbF9yZWdpc3RlcmVkX21ldGhvZDsKIAogc3RydWN0IGNoYW5uZWxfZGF0YSB7CkBAIC0xNDQsOCArMTQ1LDEwIEBACiAgIC8qKiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNhbGwgLSBzZWUgY2FsbF9zdGF0ZSAqLwogICBjYWxsX3N0YXRlIHN0YXRlOwogCi0gIGdycGNfbWRzdHIgKnBhdGg7Ci0gIGdycGNfbWRzdHIgKmhvc3Q7CisgIGJvb2wgcGF0aF9zZXQ7CisgIGJvb2wgaG9zdF9zZXQ7CisgIGdycGNfc2xpY2UgcGF0aDsKKyAgZ3JwY19zbGljZSBob3N0OwogICBncHJfdGltZXNwZWMgZGVhZGxpbmU7CiAKICAgZ3JwY19jb21wbGV0aW9uX3F1ZXVlICpjcV9uZXc7CkBAIC0yNzcsMTggKzI4MCwyMCBAQAogfQogCiBzdGF0aWMgdm9pZCBzZW5kX3NodXRkb3duKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX2NoYW5uZWwgKmNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZW5kX2dvYXdheSwgZ3JwY19lcnJvciAqc2VuZF9kaXNjb25uZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VuZF9nb2F3YXksIGdycGNfZXJyb3IgKnNlbmRfZGlzY29ubmVjdCkgewogICBzdHJ1Y3Qgc2h1dGRvd25fY2xlYW51cF9hcmdzICpzYyA9IGdwcl9tYWxsb2Moc2l6ZW9mKCpzYykpOwogICBncnBjX2Nsb3N1cmVfaW5pdCgmc2MtPmNsb3N1cmUsIHNodXRkb3duX2NsZWFudXAsIHNjLAogICAgICAgICAgICAgICAgICAgICBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKICAgZ3JwY190cmFuc3BvcnRfb3AgKm9wID0gZ3JwY19tYWtlX3RyYW5zcG9ydF9vcCgmc2MtPmNsb3N1cmUpOwogICBncnBjX2NoYW5uZWxfZWxlbWVudCAqZWxlbTsKIAotICBvcC0+c2VuZF9nb2F3YXkgPSBzZW5kX2dvYXdheTsKKyAgb3AtPmdvYXdheV9lcnJvciA9CisgICAgICBzZW5kX2dvYXdheQorICAgICAgICAgID8gZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKCJTZXJ2ZXIgc2h1dGRvd24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgR1JQQ19TVEFUVVNfT0spCisgICAgICAgICAgOiBHUlBDX0VSUk9SX05PTkU7CiAgIG9wLT5zZXRfYWNjZXB0X3N0cmVhbSA9IHRydWU7CiAgIHNjLT5zbGljZSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKCJTZXJ2ZXIgc2h1dGRvd24iKTsKLSAgb3AtPmdvYXdheV9tZXNzYWdlID0gJnNjLT5zbGljZTsKLSAgb3AtPmdvYXdheV9zdGF0dXMgPSBHUlBDX1NUQVRVU19PSzsKICAgb3AtPmRpc2Nvbm5lY3Rfd2l0aF9lcnJvciA9IHNlbmRfZGlzY29ubmVjdDsKIAogICBlbGVtID0gZ3JwY19jaGFubmVsX3N0YWNrX2VsZW1lbnQoZ3JwY19jaGFubmVsX2dldF9jaGFubmVsX3N0YWNrKGNoYW5uZWwpLCAwKTsKQEAgLTQ0OCw3ICs0NTMsNiBAQAogICBpZiAoZ3JwY19zZXJ2ZXJfY2hhbm5lbF90cmFjZSAmJiBlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKICAgICBjb25zdCBjaGFyICptc2cgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIkRpc2Nvbm5lY3RlZCBjbGllbnQ6ICVzIiwgbXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CiAgIH0KICAgR1JQQ19FUlJPUl9VTlJFRihlcnJvcik7CiAKQEAgLTQ2MSwxNyArNDY1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgb3ApOwogfQogCi1zdGF0aWMgdm9pZCBjcHN0cihjaGFyICoqZGVzdCwgc2l6ZV90ICpjYXBhY2l0eSwgZ3JwY19tZHN0ciAqdmFsdWUpIHsKLSAgZ3JwY19zbGljZSBzbGljZSA9IHZhbHVlLT5zbGljZTsKLSAgc2l6ZV90IGxlbiA9IEdSUENfU0xJQ0VfTEVOR1RIKHNsaWNlKTsKLQotICBpZiAobGVuICsgMSA+ICpjYXBhY2l0eSkgewotICAgICpjYXBhY2l0eSA9IEdQUl9NQVgobGVuICsgMSwgKmNhcGFjaXR5ICogMik7Ci0gICAgKmRlc3QgPSBncHJfcmVhbGxvYygqZGVzdCwgKmNhcGFjaXR5KTsKLSAgfQotICBtZW1jcHkoKmRlc3QsIGdycGNfbWRzdHJfYXNfY19zdHJpbmcodmFsdWUpLCBsZW4gKyAxKTsKLX0KLQogc3RhdGljIHZvaWQgZG9uZV9yZXF1ZXN0X2V2ZW50KGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICpyZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jcV9jb21wbGV0aW9uICpjKSB7CiAgIHJlcXVlc3RlZF9jYWxsICpyYyA9IHJlcTsKQEAgLTUwMCwxMiArNDkzLDEwIEBACiAgIEdQUl9TV0FQKGdycGNfbWV0YWRhdGFfYXJyYXksICpyYy0+aW5pdGlhbF9tZXRhZGF0YSwgY2FsbGQtPmluaXRpYWxfbWV0YWRhdGEpOwogICBzd2l0Y2ggKHJjLT50eXBlKSB7CiAgICAgY2FzZSBCQVRDSF9DQUxMOgotICAgICAgR1BSX0FTU0VSVChjYWxsZC0+aG9zdCAhPSBOVUxMKTsKLSAgICAgIEdQUl9BU1NFUlQoY2FsbGQtPnBhdGggIT0gTlVMTCk7Ci0gICAgICBjcHN0cigmcmMtPmRhdGEuYmF0Y2guZGV0YWlscy0+aG9zdCwKLSAgICAgICAgICAgICZyYy0+ZGF0YS5iYXRjaC5kZXRhaWxzLT5ob3N0X2NhcGFjaXR5LCBjYWxsZC0+aG9zdCk7Ci0gICAgICBjcHN0cigmcmMtPmRhdGEuYmF0Y2guZGV0YWlscy0+bWV0aG9kLAotICAgICAgICAgICAgJnJjLT5kYXRhLmJhdGNoLmRldGFpbHMtPm1ldGhvZF9jYXBhY2l0eSwgY2FsbGQtPnBhdGgpOworICAgICAgR1BSX0FTU0VSVChjYWxsZC0+aG9zdF9zZXQpOworICAgICAgR1BSX0FTU0VSVChjYWxsZC0+cGF0aF9zZXQpOworICAgICAgcmMtPmRhdGEuYmF0Y2guZGV0YWlscy0+aG9zdCA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKGNhbGxkLT5ob3N0KTsKKyAgICAgIHJjLT5kYXRhLmJhdGNoLmRldGFpbHMtPm1ldGhvZCA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKGNhbGxkLT5wYXRoKTsKICAgICAgIHJjLT5kYXRhLmJhdGNoLmRldGFpbHMtPmRlYWRsaW5lID0gY2FsbGQtPmRlYWRsaW5lOwogICAgICAgcmMtPmRhdGEuYmF0Y2guZGV0YWlscy0+ZmxhZ3MgPQogICAgICAgICAgIChjYWxsZC0+cmVjdl9pZGVtcG90ZW50X3JlcXVlc3QKQEAgLTYwOSw3ICs2MDAsNyBAQAogICAgICAgZ3JwY19vcCBvcDsKICAgICAgIG1lbXNldCgmb3AsIDAsIHNpemVvZihvcCkpOwogICAgICAgb3Aub3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgICAgIG9wLmRhdGEucmVjdl9tZXNzYWdlID0gJmNhbGxkLT5wYXlsb2FkOworICAgICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJmNhbGxkLT5wYXlsb2FkOwogICAgICAgZ3JwY19jbG9zdXJlX2luaXQoJmNhbGxkLT5wdWJsaXNoLCBwdWJsaXNoX25ld19ycGMsIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NjaGVkdWxlX29uX2V4ZWNfY3R4KTsKICAgICAgIGdycGNfY2FsbF9zdGFydF9iYXRjaF9hbmRfZXhlY3V0ZShleGVjX2N0eCwgY2FsbGQtPmNhbGwsICZvcCwgMSwKQEAgLTYyNywzNSArNjE4LDM5IEBACiAgIHVpbnQzMl90IGhhc2g7CiAgIGNoYW5uZWxfcmVnaXN0ZXJlZF9tZXRob2QgKnJtOwogCi0gIGlmIChjaGFuZC0+cmVnaXN0ZXJlZF9tZXRob2RzICYmIGNhbGxkLT5wYXRoICYmIGNhbGxkLT5ob3N0KSB7CisgIGlmIChjaGFuZC0+cmVnaXN0ZXJlZF9tZXRob2RzICYmIGNhbGxkLT5wYXRoX3NldCAmJiBjYWxsZC0+aG9zdF9zZXQpIHsKICAgICAvKiBUT0RPKGN0aWxsZXIpOiB1bmlmeSB0aGVzZSB0d28gc2VhcmNoZXMgKi8KICAgICAvKiBjaGVjayBmb3IgYW4gZXhhY3QgbWF0Y2ggd2l0aCBob3N0ICovCi0gICAgaGFzaCA9IEdSUENfTURTVFJfS1ZfSEFTSChjYWxsZC0+aG9zdC0+aGFzaCwgY2FsbGQtPnBhdGgtPmhhc2gpOworICAgIGhhc2ggPSBHUlBDX01EU1RSX0tWX0hBU0goZ3JwY19zbGljZV9oYXNoKGNhbGxkLT5ob3N0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfaGFzaChjYWxsZC0+cGF0aCkpOwogICAgIGZvciAoaSA9IDA7IGkgPD0gY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kX21heF9wcm9iZXM7IGkrKykgewogICAgICAgcm0gPSAmY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kc1soaGFzaCArIGkpICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kX3Nsb3RzXTsKICAgICAgIGlmICghcm0pIGJyZWFrOwotICAgICAgaWYgKHJtLT5ob3N0ICE9IGNhbGxkLT5ob3N0KSBjb250aW51ZTsKLSAgICAgIGlmIChybS0+bWV0aG9kICE9IGNhbGxkLT5wYXRoKSBjb250aW51ZTsKKyAgICAgIGlmICghcm0tPmhhc19ob3N0KSBjb250aW51ZTsKKyAgICAgIGlmICghZ3JwY19zbGljZV9lcShybS0+aG9zdCwgY2FsbGQtPmhvc3QpKSBjb250aW51ZTsKKyAgICAgIGlmICghZ3JwY19zbGljZV9lcShybS0+bWV0aG9kLCBjYWxsZC0+cGF0aCkpIGNvbnRpbnVlOwogICAgICAgaWYgKChybS0+ZmxhZ3MgJiBHUlBDX0lOSVRJQUxfTUVUQURBVEFfSURFTVBPVEVOVF9SRVFVRVNUKSAmJgotICAgICAgICAgICFjYWxsZC0+cmVjdl9pZGVtcG90ZW50X3JlcXVlc3QpCisgICAgICAgICAgIWNhbGxkLT5yZWN2X2lkZW1wb3RlbnRfcmVxdWVzdCkgewogICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KICAgICAgIGZpbmlzaF9zdGFydF9uZXdfcnBjKGV4ZWNfY3R4LCBzZXJ2ZXIsIGVsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm0tPnNlcnZlcl9yZWdpc3RlcmVkX21ldGhvZC0+cmVxdWVzdF9tYXRjaGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm0tPnNlcnZlcl9yZWdpc3RlcmVkX21ldGhvZC0+cGF5bG9hZF9oYW5kbGluZyk7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8qIGNoZWNrIGZvciBhIHdpbGRjYXJkIG1ldGhvZCBkZWZpbml0aW9uIChubyBob3N0IHNldCkgKi8KLSAgICBoYXNoID0gR1JQQ19NRFNUUl9LVl9IQVNIKDAsIGNhbGxkLT5wYXRoLT5oYXNoKTsKKyAgICBoYXNoID0gR1JQQ19NRFNUUl9LVl9IQVNIKDAsIGdycGNfc2xpY2VfaGFzaChjYWxsZC0+cGF0aCkpOwogICAgIGZvciAoaSA9IDA7IGkgPD0gY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kX21heF9wcm9iZXM7IGkrKykgewogICAgICAgcm0gPSAmY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kc1soaGFzaCArIGkpICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kX3Nsb3RzXTsKICAgICAgIGlmICghcm0pIGJyZWFrOwotICAgICAgaWYgKHJtLT5ob3N0ICE9IE5VTEwpIGNvbnRpbnVlOwotICAgICAgaWYgKHJtLT5tZXRob2QgIT0gY2FsbGQtPnBhdGgpIGNvbnRpbnVlOworICAgICAgaWYgKHJtLT5oYXNfaG9zdCkgY29udGludWU7CisgICAgICBpZiAoIWdycGNfc2xpY2VfZXEocm0tPm1ldGhvZCwgY2FsbGQtPnBhdGgpKSBjb250aW51ZTsKICAgICAgIGlmICgocm0tPmZsYWdzICYgR1JQQ19JTklUSUFMX01FVEFEQVRBX0lERU1QT1RFTlRfUkVRVUVTVCkgJiYKLSAgICAgICAgICAhY2FsbGQtPnJlY3ZfaWRlbXBvdGVudF9yZXF1ZXN0KQorICAgICAgICAgICFjYWxsZC0+cmVjdl9pZGVtcG90ZW50X3JlcXVlc3QpIHsKICAgICAgICAgY29udGludWU7CisgICAgICB9CiAgICAgICBmaW5pc2hfc3RhcnRfbmV3X3JwYyhleGVjX2N0eCwgc2VydmVyLCBlbGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJtLT5zZXJ2ZXJfcmVnaXN0ZXJlZF9tZXRob2QtPnJlcXVlc3RfbWF0Y2hlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtLT5zZXJ2ZXJfcmVnaXN0ZXJlZF9tZXRob2QtPnBheWxvYWRfaGFuZGxpbmcpOwpAQCAtNzQ0LDQzICs3MzksNDAgQEAKICAgfQogfQogCi1zdGF0aWMgZ3JwY19tZGVsZW0gKnNlcnZlcl9maWx0ZXIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqbWQpIHsKLSAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSB1c2VyX2RhdGE7Ci0gIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7Ci0gIGlmIChtZC0+a2V5ID09IEdSUENfTURTVFJfUEFUSCkgewotICAgIGlmIChjYWxsZC0+cGF0aCA9PSBOVUxMKSB7Ci0gICAgICBjYWxsZC0+cGF0aCA9IEdSUENfTURTVFJfUkVGKG1kLT52YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotICB9IGVsc2UgaWYgKG1kLT5rZXkgPT0gR1JQQ19NRFNUUl9BVVRIT1JJVFkpIHsKLSAgICBpZiAoY2FsbGQtPmhvc3QgPT0gTlVMTCkgewotICAgICAgY2FsbGQtPmhvc3QgPSBHUlBDX01EU1RSX1JFRihtZC0+dmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICByZXR1cm4gbWQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHNlcnZlcl9vbl9yZWN2X2luaXRpYWxfbWV0YWRhdGEoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpIHsKICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSBwdHI7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7CiAgIGdwcl90aW1lc3BlYyBvcF9kZWFkbGluZTsKIAotICBHUlBDX0VSUk9SX1JFRihlcnJvcik7Ci0gIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGV4ZWNfY3R4LCBjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfZmlsdGVyLCBlbGVtKTsKKyAgaWYgKGVycm9yID09IEdSUENfRVJST1JfTk9ORSkgeworICAgIEdQUl9BU1NFUlQoY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLnBhdGggIT0gTlVMTCk7CisgICAgR1BSX0FTU0VSVChjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhLT5pZHgubmFtZWQuYXV0aG9yaXR5ICE9IE5VTEwpOworICAgIGNhbGxkLT5wYXRoID0gZ3JwY19zbGljZV9yZWZfaW50ZXJuYWwoCisgICAgICAgIEdSUENfTURWQUxVRShjYWxsZC0+cmVjdl9pbml0aWFsX21ldGFkYXRhLT5pZHgubmFtZWQucGF0aC0+bWQpKTsKKyAgICBjYWxsZC0+aG9zdCA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKAorICAgICAgICBHUlBDX01EVkFMVUUoY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLmF1dGhvcml0eS0+bWQpKTsKKyAgICBjYWxsZC0+cGF0aF9zZXQgPSB0cnVlOworICAgIGNhbGxkLT5ob3N0X3NldCA9IHRydWU7CisgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9yZW1vdmUoZXhlY19jdHgsIGNhbGxkLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLnBhdGgpOworICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKAorICAgICAgICBleGVjX2N0eCwgY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSwKKyAgICAgICAgY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+aWR4Lm5hbWVkLmF1dGhvcml0eSk7CisgIH0gZWxzZSB7CisgICAgR1JQQ19FUlJPUl9SRUYoZXJyb3IpOworICB9CiAgIG9wX2RlYWRsaW5lID0gY2FsbGQtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS0+ZGVhZGxpbmU7CiAgIGlmICgwICE9IGdwcl90aW1lX2NtcChvcF9kZWFkbGluZSwgZ3ByX2luZl9mdXR1cmUob3BfZGVhZGxpbmUuY2xvY2tfdHlwZSkpKSB7CiAgICAgY2FsbGQtPmRlYWRsaW5lID0gb3BfZGVhZGxpbmU7CiAgIH0KLSAgaWYgKGNhbGxkLT5ob3N0ICYmIGNhbGxkLT5wYXRoKSB7CisgIGlmIChjYWxsZC0+aG9zdF9zZXQgJiYgY2FsbGQtPnBhdGhfc2V0KSB7CiAgICAgLyogZG8gbm90aGluZyAqLwogICB9IGVsc2UgewotICAgIEdSUENfRVJST1JfVU5SRUYoZXJyb3IpOworICAgIGdycGNfZXJyb3IgKnNyY19lcnJvciA9IGVycm9yOwogICAgIGVycm9yID0KICAgICAgICAgR1JQQ19FUlJPUl9DUkVBVEVfUkVGRVJFTkNJTkcoIk1pc3NpbmcgOmF1dGhvcml0eSBvciA6cGF0aCIsICZlcnJvciwgMSk7CisgICAgR1JQQ19FUlJPUl9VTlJFRihzcmNfZXJyb3IpOwogICB9CiAKICAgZ3JwY19jbG9zdXJlX3J1bihleGVjX2N0eCwgY2FsbGQtPm9uX2RvbmVfcmVjdl9pbml0aWFsX21ldGFkYXRhLCBlcnJvcik7CkBAIC04NTcsNyArODQ5LDggQEAKICAgZ3JwY19vcCBvcDsKICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CiAgIG9wLm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmNhbGxkLT5pbml0aWFsX21ldGFkYXRhOworICBvcC5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPQorICAgICAgJmNhbGxkLT5pbml0aWFsX21ldGFkYXRhOwogICBncnBjX2Nsb3N1cmVfaW5pdCgmY2FsbGQtPmdvdF9pbml0aWFsX21ldGFkYXRhLCBnb3RfaW5pdGlhbF9tZXRhZGF0YSwgZWxlbSwKICAgICAgICAgICAgICAgICAgICAgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7CiAgIGdycGNfY2FsbF9zdGFydF9iYXRjaF9hbmRfZXhlY3V0ZShleGVjX2N0eCwgY2FsbCwgJm9wLCAxLApAQCAtOTEwLDExICs5MDMsMTEgQEAKIAogICBHUFJfQVNTRVJUKGNhbGxkLT5zdGF0ZSAhPSBQRU5ESU5HKTsKIAotICBpZiAoY2FsbGQtPmhvc3QpIHsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBjYWxsZC0+aG9zdCk7CisgIGlmIChjYWxsZC0+aG9zdF9zZXQpIHsKKyAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBjYWxsZC0+aG9zdCk7CiAgIH0KLSAgaWYgKGNhbGxkLT5wYXRoKSB7Ci0gICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgY2FsbGQtPnBhdGgpOworICBpZiAoY2FsbGQtPnBhdGhfc2V0KSB7CisgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2FsbGQtPnBhdGgpOwogICB9CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmY2FsbGQtPmluaXRpYWxfbWV0YWRhdGEpOwogCkBAIC05NDYsMTEgKzkzOSw5IEBACiAgIGNoYW5uZWxfZGF0YSAqY2hhbmQgPSBlbGVtLT5jaGFubmVsX2RhdGE7CiAgIGlmIChjaGFuZC0+cmVnaXN0ZXJlZF9tZXRob2RzKSB7CiAgICAgZm9yIChpID0gMDsgaSA8IGNoYW5kLT5yZWdpc3RlcmVkX21ldGhvZF9zbG90czsgaSsrKSB7Ci0gICAgICBpZiAoY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kc1tpXS5tZXRob2QpIHsKLSAgICAgICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kc1tpXS5tZXRob2QpOwotICAgICAgfQotICAgICAgaWYgKGNoYW5kLT5yZWdpc3RlcmVkX21ldGhvZHNbaV0uaG9zdCkgewotICAgICAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBjaGFuZC0+cmVnaXN0ZXJlZF9tZXRob2RzW2ldLmhvc3QpOworICAgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kc1tpXS5tZXRob2QpOworICAgICAgaWYgKGNoYW5kLT5yZWdpc3RlcmVkX21ldGhvZHNbaV0uaGFzX2hvc3QpIHsKKyAgICAgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kc1tpXS5ob3N0KTsKICAgICAgIH0KICAgICB9CiAgICAgZ3ByX2ZyZWUoY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kcyk7CkBAIC0xMTQ4LDggKzExMzksNiBAQAogICBjaGFubmVsX3JlZ2lzdGVyZWRfbWV0aG9kICpjcm07CiAgIGdycGNfY2hhbm5lbCAqY2hhbm5lbDsKICAgY2hhbm5lbF9kYXRhICpjaGFuZDsKLSAgZ3JwY19tZHN0ciAqaG9zdDsKLSAgZ3JwY19tZHN0ciAqbWV0aG9kOwogICB1aW50MzJfdCBoYXNoOwogICBzaXplX3Qgc2xvdHM7CiAgIHVpbnQzMl90IHByb2JlczsKQEAgLTExODgsOSArMTE3NywxOCBAQAogICAgIGNoYW5kLT5yZWdpc3RlcmVkX21ldGhvZHMgPSBncHJfbWFsbG9jKGFsbG9jKTsKICAgICBtZW1zZXQoY2hhbmQtPnJlZ2lzdGVyZWRfbWV0aG9kcywgMCwgYWxsb2MpOwogICAgIGZvciAocm0gPSBzLT5yZWdpc3RlcmVkX21ldGhvZHM7IHJtOyBybSA9IHJtLT5uZXh0KSB7Ci0gICAgICBob3N0ID0gcm0tPmhvc3QgPyBncnBjX21kc3RyX2Zyb21fc3RyaW5nKHJtLT5ob3N0KSA6IE5VTEw7Ci0gICAgICBtZXRob2QgPSBncnBjX21kc3RyX2Zyb21fc3RyaW5nKHJtLT5tZXRob2QpOwotICAgICAgaGFzaCA9IEdSUENfTURTVFJfS1ZfSEFTSChob3N0ID8gaG9zdC0+aGFzaCA6IDAsIG1ldGhvZC0+aGFzaCk7CisgICAgICBncnBjX3NsaWNlIGhvc3Q7CisgICAgICBib29sIGhhc19ob3N0OworICAgICAgZ3JwY19zbGljZSBtZXRob2Q7CisgICAgICBpZiAocm0tPmhvc3QgIT0gTlVMTCkgeworICAgICAgICBob3N0ID0gZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcocm0tPmhvc3QpKTsKKyAgICAgICAgaGFzX2hvc3QgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaGFzX2hvc3QgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIG1ldGhvZCA9IGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKHJtLT5tZXRob2QpKTsKKyAgICAgIGhhc2ggPSBHUlBDX01EU1RSX0tWX0hBU0goaGFzX2hvc3QgPyBncnBjX3NsaWNlX2hhc2goaG9zdCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2hhc2gobWV0aG9kKSk7CiAgICAgICBmb3IgKHByb2JlcyA9IDA7IGNoYW5kLT5yZWdpc3RlcmVkX21ldGhvZHNbKGhhc2ggKyBwcm9iZXMpICUgc2xvdHNdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VydmVyX3JlZ2lzdGVyZWRfbWV0aG9kICE9IE5VTEw7CiAgICAgICAgICAgIHByb2JlcysrKQpAQCAtMTE5OSw2ICsxMTk3LDcgQEAKICAgICAgIGNybSA9ICZjaGFuZC0+cmVnaXN0ZXJlZF9tZXRob2RzWyhoYXNoICsgcHJvYmVzKSAlIHNsb3RzXTsKICAgICAgIGNybS0+c2VydmVyX3JlZ2lzdGVyZWRfbWV0aG9kID0gcm07CiAgICAgICBjcm0tPmZsYWdzID0gcm0tPmZsYWdzOworICAgICAgY3JtLT5oYXNfaG9zdCA9IGhhc19ob3N0OwogICAgICAgY3JtLT5ob3N0ID0gaG9zdDsKICAgICAgIGNybS0+bWV0aG9kID0gbWV0aG9kOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmMgYi9zcmMvY29yZS9saWIvc3VyZmFjZS92YWxpZGF0ZV9tZXRhZGF0YS5jCmluZGV4IGY0OWRkODUuLjdlYzkxMzcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmMKKysrIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvdmFsaWRhdGVfbWV0YWRhdGEuYwpAQCAtMzQsNDAgKzM0LDcxIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlIDxncnBjL2dycGMuaD4KKyNpbmNsdWRlIDxncnBjL3N1cHBvcnQvYWxsb2MuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvcG9ydF9wbGF0Zm9ybS5oPgogCi1zdGF0aWMgaW50IGNvbmZvcm1zX3RvKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4sIGNvbnN0IHVpbnQ4X3QgKmxlZ2FsX2JpdHMpIHsKLSAgY29uc3QgY2hhciAqcCA9IHM7Ci0gIGNvbnN0IGNoYXIgKmUgPSBzICsgbGVuOworI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvci5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5oIgorCitzdGF0aWMgZ3JwY19lcnJvciAqY29uZm9ybXNfdG8oZ3JwY19zbGljZSBzbGljZSwgY29uc3QgdWludDhfdCAqbGVnYWxfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJfZGVzYykgeworICBjb25zdCB1aW50OF90ICpwID0gR1JQQ19TTElDRV9TVEFSVF9QVFIoc2xpY2UpOworICBjb25zdCB1aW50OF90ICplID0gR1JQQ19TTElDRV9FTkRfUFRSKHNsaWNlKTsKICAgZm9yICg7IHAgIT0gZTsgcCsrKSB7Ci0gICAgaW50IGlkeCA9ICh1aW50OF90KSpwOworICAgIGludCBpZHggPSAqcDsKICAgICBpbnQgYnl0ZSA9IGlkeCAvIDg7CiAgICAgaW50IGJpdCA9IGlkeCAlIDg7Ci0gICAgaWYgKChsZWdhbF9iaXRzW2J5dGVdICYgKDEgPDwgYml0KSkgPT0gMCkgcmV0dXJuIDA7CisgICAgaWYgKChsZWdhbF9iaXRzW2J5dGVdICYgKDEgPDwgYml0KSkgPT0gMCkgeworICAgICAgY2hhciAqZHVtcCA9IGdycGNfZHVtcF9zbGljZShzbGljZSwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpOworICAgICAgZ3JwY19lcnJvciAqZXJyb3IgPSBncnBjX2Vycm9yX3NldF9zdHIoCisgICAgICAgICAgZ3JwY19lcnJvcl9zZXRfaW50KEdSUENfRVJST1JfQ1JFQVRFKGVycl9kZXNjKSwgR1JQQ19FUlJPUl9JTlRfT0ZGU0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwIC0gR1JQQ19TTElDRV9TVEFSVF9QVFIoc2xpY2UpKSwKKyAgICAgICAgICBHUlBDX0VSUk9SX1NUUl9SQVdfQllURVMsIGR1bXApOworICAgICAgZ3ByX2ZyZWUoZHVtcCk7CisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQogICB9Ci0gIHJldHVybiAxOworICByZXR1cm4gR1JQQ19FUlJPUl9OT05FOwogfQogCi1pbnQgZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsKGNvbnN0IGNoYXIgKmtleSwgc2l6ZV90IGxlbmd0aCkgeworc3RhdGljIGludCBlcnJvcjJpbnQoZ3JwY19lcnJvciAqZXJyb3IpIHsKKyAgaW50IHIgPSAoZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FKTsKKyAgR1JQQ19FUlJPUl9VTlJFRihlcnJvcik7CisgIHJldHVybiByOworfQorCitncnBjX2Vycm9yICpncnBjX3ZhbGlkYXRlX2hlYWRlcl9rZXlfaXNfbGVnYWwoZ3JwY19zbGljZSBzbGljZSkgewogICBzdGF0aWMgY29uc3QgdWludDhfdCBsZWdhbF9oZWFkZXJfYml0c1syNTYgLyA4XSA9IHsKICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAgICAweDgwLCAweGZlLCAweGZmLCAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0gIGlmIChsZW5ndGggPT0gMCB8fCBrZXlbMF0gPT0gJzonKSB7Ci0gICAgcmV0dXJuIDA7CisgIGlmIChHUlBDX1NMSUNFX0xFTkdUSChzbGljZSkgPT0gMCkgeworICAgIHJldHVybiBHUlBDX0VSUk9SX0NSRUFURSgiTWV0YWRhdGEga2V5cyBjYW5ub3QgYmUgemVybyBsZW5ndGgiKTsKICAgfQotICByZXR1cm4gY29uZm9ybXNfdG8oa2V5LCBsZW5ndGgsIGxlZ2FsX2hlYWRlcl9iaXRzKTsKKyAgaWYgKEdSUENfU0xJQ0VfU1RBUlRfUFRSKHNsaWNlKVswXSA9PSAnOicpIHsKKyAgICByZXR1cm4gR1JQQ19FUlJPUl9DUkVBVEUoIk1ldGFkYXRhIGtleXMgY2Fubm90IHN0YXJ0IHdpdGggOiIpOworICB9CisgIHJldHVybiBjb25mb3Jtc190byhzbGljZSwgbGVnYWxfaGVhZGVyX2JpdHMsICJJbGxlZ2FsIGhlYWRlciBrZXkiKTsKIH0KIAotaW50IGdycGNfaGVhZGVyX25vbmJpbl92YWx1ZV9pc19sZWdhbChjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbmd0aCkgeworaW50IGdycGNfaGVhZGVyX2tleV9pc19sZWdhbChncnBjX3NsaWNlIHNsaWNlKSB7CisgIHJldHVybiBlcnJvcjJpbnQoZ3JwY192YWxpZGF0ZV9oZWFkZXJfa2V5X2lzX2xlZ2FsKHNsaWNlKSk7Cit9CisKK2dycGNfZXJyb3IgKmdycGNfdmFsaWRhdGVfaGVhZGVyX25vbmJpbl92YWx1ZV9pc19sZWdhbChncnBjX3NsaWNlIHNsaWNlKSB7CiAgIHN0YXRpYyBjb25zdCB1aW50OF90IGxlZ2FsX2hlYWRlcl9iaXRzWzI1NiAvIDhdID0gewogICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLSAgcmV0dXJuIGNvbmZvcm1zX3RvKHZhbHVlLCBsZW5ndGgsIGxlZ2FsX2hlYWRlcl9iaXRzKTsKKyAgcmV0dXJuIGNvbmZvcm1zX3RvKHNsaWNlLCBsZWdhbF9oZWFkZXJfYml0cywgIklsbGVnYWwgaGVhZGVyIHZhbHVlIik7CiB9CiAKLWludCBncnBjX2lzX2JpbmFyeV9oZWFkZXIoY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuZ3RoKSB7Ci0gIGlmIChsZW5ndGggPCA1KSByZXR1cm4gMDsKLSAgcmV0dXJuIDAgPT0gbWVtY21wKGtleSArIGxlbmd0aCAtIDQsICItYmluIiwgNCk7CitpbnQgZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsKGdycGNfc2xpY2Ugc2xpY2UpIHsKKyAgcmV0dXJuIGVycm9yMmludChncnBjX3ZhbGlkYXRlX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWwoc2xpY2UpKTsKK30KKworaW50IGdycGNfaXNfYmluYXJ5X2hlYWRlcihncnBjX3NsaWNlIHNsaWNlKSB7CisgIGlmIChHUlBDX1NMSUNFX0xFTkdUSChzbGljZSkgPCA1KSByZXR1cm4gMDsKKyAgcmV0dXJuIDAgPT0gbWVtY21wKEdSUENfU0xJQ0VfRU5EX1BUUihzbGljZSkgLSA0LCAiLWJpbiIsIDQpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmggYi9zcmMvY29yZS9saWIvc3VyZmFjZS92YWxpZGF0ZV9tZXRhZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggNjQlCmNvcHkgZnJvbSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaApjb3B5IHRvIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgKaW5kZXggOTUzYmM5Zi4uMmI4MDBkMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKKysrIGIvc3JjL2NvcmUvbGliL3N1cmZhY2UvdmFsaWRhdGVfbWV0YWRhdGEuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogQ29weXJpZ2h0IDIwMTUsIEdvb2dsZSBJbmMuCisgKiBDb3B5cmlnaHQgMjAxNywgR29vZ2xlIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMSwyMCArMzEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBHUlBDX0NPUkVfRVhUX1RSQU5TUE9SVF9DSFRUUDJfVFJBTlNQT1JUX1NUQVRVU19DT05WRVJTSU9OX0gKLSNkZWZpbmUgR1JQQ19DT1JFX0VYVF9UUkFOU1BPUlRfQ0hUVFAyX1RSQU5TUE9SVF9TVEFUVVNfQ09OVkVSU0lPTl9ICisjaWZuZGVmIEdSUENfQ09SRV9MSUJfU1VSRkFDRV9WQUxJREFURV9NRVRBREFUQV9ICisjZGVmaW5lIEdSUENfQ09SRV9MSUJfU1VSRkFDRV9WQUxJREFURV9NRVRBREFUQV9ICiAKLSNpbmNsdWRlIDxncnBjL2dycGMuaD4KLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCisjaW5jbHVkZSA8Z3JwYy9zbGljZS5oPgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvci5oIgogCi0vKiBDb252ZXJzaW9uIG9mIGdycGMgc3RhdHVzIGNvZGVzIHRvIGh0dHAyIGVycm9yIGNvZGVzIChmb3IgUlNUX1NUUkVBTSkgKi8KLWdycGNfY2h0dHAyX2Vycm9yX2NvZGUgZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfZXJyb3IoCi0gICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpOwotZ3JwY19zdGF0dXNfY29kZSBncnBjX2NodHRwMl9odHRwMl9lcnJvcl90b19ncnBjX3N0YXR1cygKLSAgICBncnBjX2NodHRwMl9lcnJvcl9jb2RlIGVycm9yLCBncHJfdGltZXNwZWMgZGVhZGxpbmUpOworZ3JwY19lcnJvciAqZ3JwY192YWxpZGF0ZV9oZWFkZXJfa2V5X2lzX2xlZ2FsKGdycGNfc2xpY2Ugc2xpY2UpOworZ3JwY19lcnJvciAqZ3JwY192YWxpZGF0ZV9oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsKGdycGNfc2xpY2Ugc2xpY2UpOwogCi0vKiBDb252ZXJzaW9uIG9mIEhUVFAgc3RhdHVzIGNvZGVzICg6c3RhdHVzKSB0byBncnBjIHN0YXR1cyBjb2RlcyAqLwotZ3JwY19zdGF0dXNfY29kZSBncnBjX2NodHRwMl9odHRwMl9zdGF0dXNfdG9fZ3JwY19zdGF0dXMoaW50IHN0YXR1cyk7Ci1pbnQgZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfc3RhdHVzKGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKTsKLQotI2VuZGlmIC8qIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSCAqLworI2VuZGlmIC8qIEdSUENfQ09SRV9MSUJfU1VSRkFDRV9WQUxJREFURV9NRVRBREFUQV9IICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuYwppbmRleCBjNjU2ZDkzLi44ZmM1YmYzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jCisrKyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmMKQEAgLTE2Myw3ICsxNjMsNiBAQAogICAgIGdwcl9sb2coR1BSX0RFQlVHLCAiU0VUOiAlcCAlczogJXMgLS0+ICVzIFslc10gZXJyb3I9JXAgJXMiLCB0cmFja2VyLAogICAgICAgICAgICAgdHJhY2tlci0+bmFtZSwgZ3JwY19jb25uZWN0aXZpdHlfc3RhdGVfbmFtZSh0cmFja2VyLT5jdXJyZW50X3N0YXRlKSwKICAgICAgICAgICAgIGdycGNfY29ubmVjdGl2aXR5X3N0YXRlX25hbWUoc3RhdGUpLCByZWFzb24sIGVycm9yLCBlcnJvcl9zdHJpbmcpOwotICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcoZXJyb3Jfc3RyaW5nKTsKICAgfQogICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBHUlBDX0NIQU5ORUxfSU5JVDoKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTc3ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICoKKyAqIENvcHlyaWdodCAyMDE2LCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuaCIKKworI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIKKworc3RhdGljIGdycGNfZXJyb3IgKnJlY3Vyc2l2ZWx5X2ZpbmRfZXJyb3Jfd2l0aF9maWVsZChncnBjX2Vycm9yICplcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvcl9pbnRzIHdoaWNoKSB7CisgIC8vIElmIHRoZSBlcnJvciBpdHNlbGYgaGFzIGEgc3RhdHVzIGNvZGUsIHJldHVybiBpdC4KKyAgaWYgKGdycGNfZXJyb3JfZ2V0X2ludChlcnJvciwgd2hpY2gsIE5VTEwpKSB7CisgICAgcmV0dXJuIGVycm9yOworICB9CisgIGlmIChncnBjX2Vycm9yX2lzX3NwZWNpYWwoZXJyb3IpKSByZXR1cm4gTlVMTDsKKyAgLy8gT3RoZXJ3aXNlLCBzZWFyY2ggdGhyb3VnaCBpdHMgY2hpbGRyZW4uCisgIGludHB0cl90IGtleSA9IDA7CisgIHdoaWxlICh0cnVlKSB7CisgICAgZ3JwY19lcnJvciAqY2hpbGRfZXJyb3IgPSBncHJfYXZsX2dldChlcnJvci0+ZXJycywgKHZvaWQgKilrZXkrKyk7CisgICAgaWYgKGNoaWxkX2Vycm9yID09IE5VTEwpIGJyZWFrOworICAgIGdycGNfZXJyb3IgKnJlc3VsdCA9IHJlY3Vyc2l2ZWx5X2ZpbmRfZXJyb3Jfd2l0aF9maWVsZChjaGlsZF9lcnJvciwgd2hpY2gpOworICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgcmV0dXJuIHJlc3VsdDsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBncnBjX2Vycm9yX2dldF9zdGF0dXMoZ3JwY19lcnJvciAqZXJyb3IsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgKmNvZGUsIGNvbnN0IGNoYXIgKiptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2h0dHAyX2Vycm9yX2NvZGUgKmh0dHBfZXJyb3IpIHsKKyAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IGVycm9yIGFuZCByZWN1cnNlIHRocm91Z2ggdGhlIHRyZWUgb2YgY2hpbGRyZW4KKyAgLy8gdW50aWwgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaGFzIGEgc3RhdHVzIGNvZGUuCisgIGdycGNfZXJyb3IgKmZvdW5kX2Vycm9yID0KKyAgICAgIHJlY3Vyc2l2ZWx5X2ZpbmRfZXJyb3Jfd2l0aF9maWVsZChlcnJvciwgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMpOworICBpZiAoZm91bmRfZXJyb3IgPT0gTlVMTCkgeworICAgIC8vLyBJZiBubyBncnBjLXN0YXR1cyBleGlzdHMsIHJldHJ5IHRocm91Z2ggdGhlIHRyZWUgdG8gZmluZCBhIGh0dHAyIGVycm9yCisgICAgLy8vIGNvZGUKKyAgICBmb3VuZF9lcnJvciA9CisgICAgICAgIHJlY3Vyc2l2ZWx5X2ZpbmRfZXJyb3Jfd2l0aF9maWVsZChlcnJvciwgR1JQQ19FUlJPUl9JTlRfSFRUUDJfRVJST1IpOworICB9CisKKyAgLy8gSWYgd2UgZm91bmQgYW4gZXJyb3Igd2l0aCBhIHN0YXR1cyBjb2RlIGFib3ZlLCB1c2UgdGhhdDsgb3RoZXJ3aXNlLAorICAvLyBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHBhcmVudCBlcnJvci4KKyAgaWYgKGZvdW5kX2Vycm9yID09IE5VTEwpIGZvdW5kX2Vycm9yID0gZXJyb3I7CisKKyAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMgPSBHUlBDX1NUQVRVU19VTktOT1dOOworICBpbnRwdHJfdCBpbnRlZ2VyOworICBpZiAoZ3JwY19lcnJvcl9nZXRfaW50KGZvdW5kX2Vycm9yLCBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgJmludGVnZXIpKSB7CisgICAgc3RhdHVzID0gKGdycGNfc3RhdHVzX2NvZGUpaW50ZWdlcjsKKyAgfSBlbHNlIGlmIChncnBjX2Vycm9yX2dldF9pbnQoZm91bmRfZXJyb3IsIEdSUENfRVJST1JfSU5UX0hUVFAyX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZWdlcikpIHsKKyAgICBzdGF0dXMgPSBncnBjX2h0dHAyX2Vycm9yX3RvX2dycGNfc3RhdHVzKChncnBjX2h0dHAyX2Vycm9yX2NvZGUpaW50ZWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lKTsKKyAgfQorICBpZiAoY29kZSAhPSBOVUxMKSAqY29kZSA9IHN0YXR1czsKKworICBpZiAoaHR0cF9lcnJvciAhPSBOVUxMKSB7CisgICAgaWYgKGdycGNfZXJyb3JfZ2V0X2ludChmb3VuZF9lcnJvciwgR1JQQ19FUlJPUl9JTlRfSFRUUDJfRVJST1IsICZpbnRlZ2VyKSkgeworICAgICAgKmh0dHBfZXJyb3IgPSAoZ3JwY19odHRwMl9lcnJvcl9jb2RlKWludGVnZXI7CisgICAgfSBlbHNlIGlmIChncnBjX2Vycm9yX2dldF9pbnQoZm91bmRfZXJyb3IsIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlZ2VyKSkgeworICAgICAgKmh0dHBfZXJyb3IgPSBncnBjX3N0YXR1c190b19odHRwMl9lcnJvcigoZ3JwY19zdGF0dXNfY29kZSlpbnRlZ2VyKTsKKyAgICB9IGVsc2UgeworICAgICAgKmh0dHBfZXJyb3IgPSBmb3VuZF9lcnJvciA9PSBHUlBDX0VSUk9SX05PTkUgPyBHUlBDX0hUVFAyX05PX0VSUk9SCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1I7CisgICAgfQorICB9CisKKyAgLy8gSWYgdGhlIGVycm9yIGhhcyBhIHN0YXR1cyBtZXNzYWdlLCB1c2UgaXQuICBPdGhlcndpc2UsIGZhbGwgYmFjayB0bworICAvLyB0aGUgZXJyb3IgZGVzY3JpcHRpb24uCisgIGlmIChtc2cgIT0gTlVMTCkgeworICAgICptc2cgPSBncnBjX2Vycm9yX2dldF9zdHIoZm91bmRfZXJyb3IsIEdSUENfRVJST1JfU1RSX0dSUENfTUVTU0FHRSk7CisgICAgaWYgKCptc2cgPT0gTlVMTCAmJiBlcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKKyAgICAgICptc2cgPSBncnBjX2Vycm9yX2dldF9zdHIoZm91bmRfZXJyb3IsIEdSUENfRVJST1JfU1RSX0RFU0NSSVBUSU9OKTsKKyAgICAgIGlmICgqbXNnID09IE5VTEwpICptc2cgPSAidW5rbm93biBlcnJvciI7ICAvLyBKdXN0IGluIGNhc2UuCisgICAgfQorICB9CisKKyAgaWYgKGZvdW5kX2Vycm9yID09IE5VTEwpIGZvdW5kX2Vycm9yID0gZXJyb3I7Cit9CisKK2Jvb2wgZ3JwY19lcnJvcl9oYXNfY2xlYXJfZ3JwY19zdGF0dXMoZ3JwY19lcnJvciAqZXJyb3IpIHsKKyAgaWYgKGdycGNfZXJyb3JfZ2V0X2ludChlcnJvciwgR1JQQ19FUlJPUl9JTlRfR1JQQ19TVEFUVVMsIE5VTEwpKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaW50cHRyX3Qga2V5ID0gMDsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBncnBjX2Vycm9yICpjaGlsZF9lcnJvciA9IGdwcl9hdmxfZ2V0KGVycm9yLT5lcnJzLCAodm9pZCAqKWtleSsrKTsKKyAgICBpZiAoY2hpbGRfZXJyb3IgPT0gTlVMTCkgYnJlYWs7CisgICAgaWYgKGdycGNfZXJyb3JfaGFzX2NsZWFyX2dycGNfc3RhdHVzKGNoaWxkX2Vycm9yKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuaCBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDUzMzg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IDIwMTYsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIEdSUENfQ09SRV9MSUJfVFJBTlNQT1JUX0VSUk9SX1VUSUxTX0gKKyNkZWZpbmUgR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfRVJST1JfVVRJTFNfSAorCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIKKworLy8vIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIHRvIGJlIHJldHVybmVkCisvLy8gdG8gdGhlIGFwcGxpY2F0aW9uLiAgSWYgbm90IHNldCBpbiB0aGUgdG9wLWxldmVsIG1lc3NhZ2UsIGxvb2tzCisvLy8gdGhyb3VnaCBjaGlsZCBlcnJvcnMgdW50aWwgaXQgZmluZHMgdGhlIGZpcnN0IG9uZSB3aXRoIHRoZXNlIGF0dHJpYnV0ZXMuCisvLy8gQWxsIGF0dHJpYnV0ZXMgYXJlIHB1bGxlZCBmcm9tIHRoZSBzYW1lIGNoaWxkIGVycm9yLiBJZiBhbnkgb2YgdGhlCisvLy8gYXR0cmlidXRlcyAoY29kZSwgbXNnLCBodHRwX3N0YXR1cykgYXJlIHVubmVlZGVkLCB0aGV5IGNhbiBiZSBwYXNzZWQgYXMKKy8vLyBOVUxMLgordm9pZCBncnBjX2Vycm9yX2dldF9zdGF0dXMoZ3JwY19lcnJvciAqZXJyb3IsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgKmNvZGUsIGNvbnN0IGNoYXIgKiptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2h0dHAyX2Vycm9yX2NvZGUgKmh0dHBfc3RhdHVzKTsKKworLy8vIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgY2xlYXIgc3RhdHVzIGNvZGUgdGhhdAorLy8vIGRvZXNuJ3QgbmVlZCB0byBiZSBndWVzc2VkIGluIFxhIGVycm9yLiBUaGlzIG1lYW5zIHRoYXQgXGEgZXJyb3Igb3Igc29tZQorLy8vIGNoaWxkIGhhcyBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUyBzZXQsIG9yIHRoYXQgaXQgaXMgR1JQQ19FUlJPUl9OT05FIG9yCisvLy8gR1JQQ19FUlJPUl9DQU5DRUxMRUQKK2Jvb2wgZ3JwY19lcnJvcl9oYXNfY2xlYXJfZ3JwY19zdGF0dXMoZ3JwY19lcnJvciAqZXJyb3IpOworCisjZW5kaWYgLyogR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfRVJST1JfVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaApzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgKcmVuYW1lIHRvIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgKaW5kZXggZGVhYjJiNy4uMzMwYmM5OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oCisrKyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgKQEAgLTMxLDI2ICszMSwyNiBAQAogICoKICAqLwogCi0jaWZuZGVmIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfSFRUUDJfRVJST1JTX0gKLSNkZWZpbmUgR1JQQ19DT1JFX0VYVF9UUkFOU1BPUlRfQ0hUVFAyX1RSQU5TUE9SVF9IVFRQMl9FUlJPUlNfSAorI2lmbmRlZiBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9IVFRQMl9FUlJPUlNfSAorI2RlZmluZSBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9IVFRQMl9FUlJPUlNfSAogCiAvKiBlcnJvciBjb2RlcyBmb3IgUlNUX1NUUkVBTSBmcm9tIGh0dHAyIGRyYWZ0IDE0IHNlY3Rpb24gNyAqLwogdHlwZWRlZiBlbnVtIHsKLSAgR1JQQ19DSFRUUDJfTk9fRVJST1IgPSAweDAsCi0gIEdSUENfQ0hUVFAyX1BST1RPQ09MX0VSUk9SID0gMHgxLAotICBHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUiA9IDB4MiwKLSAgR1JQQ19DSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SID0gMHgzLAotICBHUlBDX0NIVFRQMl9TRVRUSU5HU19USU1FT1VUID0gMHg0LAotICBHUlBDX0NIVFRQMl9TVFJFQU1fQ0xPU0VEID0gMHg1LAotICBHUlBDX0NIVFRQMl9GUkFNRV9TSVpFX0VSUk9SID0gMHg2LAotICBHUlBDX0NIVFRQMl9SRUZVU0VEX1NUUkVBTSA9IDB4NywKLSAgR1JQQ19DSFRUUDJfQ0FOQ0VMID0gMHg4LAotICBHUlBDX0NIVFRQMl9DT01QUkVTU0lPTl9FUlJPUiA9IDB4OSwKLSAgR1JQQ19DSFRUUDJfQ09OTkVDVF9FUlJPUiA9IDB4YSwKLSAgR1JQQ19DSFRUUDJfRU5IQU5DRV9ZT1VSX0NBTE0gPSAweGIsCi0gIEdSUENfQ0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFkgPSAweGMsCisgIEdSUENfSFRUUDJfTk9fRVJST1IgPSAweDAsCisgIEdSUENfSFRUUDJfUFJPVE9DT0xfRVJST1IgPSAweDEsCisgIEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1IgPSAweDIsCisgIEdSUENfSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SID0gMHgzLAorICBHUlBDX0hUVFAyX1NFVFRJTkdTX1RJTUVPVVQgPSAweDQsCisgIEdSUENfSFRUUDJfU1RSRUFNX0NMT1NFRCA9IDB4NSwKKyAgR1JQQ19IVFRQMl9GUkFNRV9TSVpFX0VSUk9SID0gMHg2LAorICBHUlBDX0hUVFAyX1JFRlVTRURfU1RSRUFNID0gMHg3LAorICBHUlBDX0hUVFAyX0NBTkNFTCA9IDB4OCwKKyAgR1JQQ19IVFRQMl9DT01QUkVTU0lPTl9FUlJPUiA9IDB4OSwKKyAgR1JQQ19IVFRQMl9DT05ORUNUX0VSUk9SID0gMHhhLAorICBHUlBDX0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNID0gMHhiLAorICBHUlBDX0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFkgPSAweGMsCiAgIC8qIGZvcmNlIHVzZSBvZiBhIGRlZmF1bHQgY2xhdXNlICovCi0gIEdSUENfQ0hUVFAyX19FUlJPUl9ET19OT1RfVVNFID0gLTEKLX0gZ3JwY19jaHR0cDJfZXJyb3JfY29kZTsKKyAgR1JQQ19IVFRQMl9fRVJST1JfRE9fTk9UX1VTRSA9IC0xCit9IGdycGNfaHR0cDJfZXJyb3JfY29kZTsKIAotI2VuZGlmIC8qIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfSFRUUDJfRVJST1JTX0ggKi8KKyNlbmRpZiAvKiBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9IVFRQMl9FUlJPUlNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jCmluZGV4IDU0YzM5ZGYuLjQ4OWMyMGMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuYworKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMKQEAgLTQ4LDEyICs0OCwxMSBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci9pb21ncl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9wcm9maWxpbmcvdGltZXJzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cHBvcnQvbXVybXVyX2hhc2guaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oIgogCi1ncnBjX3NsaWNlICgqZ3JwY19jaHR0cDJfYmFzZTY0X2VuY29kZV9hbmRfaHVmZm1hbl9jb21wcmVzcykoZ3JwY19zbGljZSBpbnB1dCk7Ci0KIC8qIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgbWRlbGVtIGFuZCBtZHN0ciBpbnN0YW5jZXMuCiAgKiBTdGF0aWMgaW5zdGFuY2VzIGFyZSBkZWNsYXJlZCBpbiBzdGF0aWNfbWV0YWRhdGEue2gsY30gYW5kCiAgKiBhcmUgaW5pdGlhbGl6ZWQgYnkgZ3JwY19tZGN0eF9nbG9iYWxfaW5pdCgpLgpAQCAtNjMsOSArNjIsNiBAQAogICogdXNlZCB0byBkZXRlcm1pbmUgd2hpY2gga2luZCBvZiBlbGVtZW50IGEgcG9pbnRlciByZWZlcnMgdG8uCiAgKi8KIAotI2RlZmluZSBJTklUSUFMX1NUUlRBQl9DQVBBQ0lUWSA0Ci0jZGVmaW5lIElOSVRJQUxfTURUQUJfQ0FQQUNJVFkgNAotCiAjaWZkZWYgR1JQQ19NRVRBREFUQV9SRUZDT1VOVF9ERUJVRwogI2RlZmluZSBERUJVR19BUkdTICwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUKICNkZWZpbmUgRldEX0RFQlVHX0FSR1MgLCBmaWxlLCBsaW5lCkBAIC03NiwzNyArNzIsMjAgQEAKICNkZWZpbmUgUkVGX01EX0xPQ0tFRChzaGFyZCwgcykgcmVmX21kX2xvY2tlZCgoc2hhcmQpLCAocykpCiAjZW5kaWYKIAotI2RlZmluZSBUQUJMRV9JRFgoaGFzaCwgbG9nMl9zaGFyZHMsIGNhcGFjaXR5KSBcCi0gICgoKGhhc2gpID4+IChsb2cyX3NoYXJkcykpICUgKGNhcGFjaXR5KSkKLSNkZWZpbmUgU0hBUkRfSURYKGhhc2gsIGxvZzJfc2hhcmRzKSAoKGhhc2gpICYgKCgxIDw8IChsb2cyX3NoYXJkcykpIC0gMSkpCisjZGVmaW5lIElOSVRJQUxfU0hBUkRfQ0FQQUNJVFkgOAorI2RlZmluZSBMT0cyX1NIQVJEX0NPVU5UIDQKKyNkZWZpbmUgU0hBUkRfQ09VTlQgKChzaXplX3QpKDEgPDwgTE9HMl9TSEFSRF9DT1VOVCkpCisKKyNkZWZpbmUgVEFCTEVfSURYKGhhc2gsIGNhcGFjaXR5KSAoKChoYXNoKSA+PiAoTE9HMl9TSEFSRF9DT1VOVCkpICUgKGNhcGFjaXR5KSkKKyNkZWZpbmUgU0hBUkRfSURYKGhhc2gpICgoaGFzaCkgJiAoKDEgPDwgKExPRzJfU0hBUkRfQ09VTlQpKSAtIDEpKQogCiB0eXBlZGVmIHZvaWQgKCpkZXN0cm95X3VzZXJfZGF0YV9mdW5jKSh2b2lkICp1c2VyX2RhdGEpOwogCi0jZGVmaW5lIFNJWkVfSU5fREVDT0RFUl9UQUJMRV9OT1RfU0VUIC0xCi0vKiBTaGFkb3cgc3RydWN0dXJlIGZvciBncnBjX21kc3RyIGZvciBub24tc3RhdGljIHZhbHVlcyAqLwotdHlwZWRlZiBzdHJ1Y3QgaW50ZXJuYWxfc3RyaW5nIHsKLSAgLyogbXVzdCBiZSBieXRlIGNvbXBhdGlibGUgd2l0aCBncnBjX21kc3RyICovCi0gIGdycGNfc2xpY2Ugc2xpY2U7Ci0gIHVpbnQzMl90IGhhc2g7Ci0KLSAgLyogcHJpdmF0ZSBvbmx5IGRhdGEgKi8KLSAgZ3ByX2F0bSByZWZjbnQ7Ci0KLSAgdWludDhfdCBoYXNfYmFzZTY0X2FuZF9odWZmbWFuX2VuY29kZWQ7Ci0gIGdycGNfc2xpY2VfcmVmY291bnQgcmVmY291bnQ7Ci0KLSAgZ3JwY19zbGljZSBiYXNlNjRfYW5kX2h1ZmZtYW47Ci0KLSAgZ3ByX2F0bSBzaXplX2luX2RlY29kZXJfdGFibGU7Ci0KLSAgc3RydWN0IGludGVybmFsX3N0cmluZyAqYnVja2V0X25leHQ7Ci19IGludGVybmFsX3N0cmluZzsKLQotLyogU2hhZG93IHN0cnVjdHVyZSBmb3IgZ3JwY19tZGVsZW0gZm9yIG5vbi1zdGF0aWMgZWxlbWVudHMgKi8KLXR5cGVkZWYgc3RydWN0IGludGVybmFsX21ldGFkYXRhIHsKLSAgLyogbXVzdCBiZSBieXRlIGNvbXBhdGlibGUgd2l0aCBncnBjX21kZWxlbSAqLwotICBpbnRlcm5hbF9zdHJpbmcgKmtleTsKLSAgaW50ZXJuYWxfc3RyaW5nICp2YWx1ZTsKKy8qIFNoYWRvdyBzdHJ1Y3R1cmUgZm9yIGdycGNfbWRlbGVtX2RhdGEgZm9yIGludGVybmVkIGVsZW1lbnRzICovCit0eXBlZGVmIHN0cnVjdCBpbnRlcm5lZF9tZXRhZGF0YSB7CisgIC8qIG11c3QgYmUgYnl0ZSBjb21wYXRpYmxlIHdpdGggZ3JwY19tZGVsZW1fZGF0YSAqLworICBncnBjX3NsaWNlIGtleTsKKyAgZ3JwY19zbGljZSB2YWx1ZTsKIAogICAvKiBwcml2YXRlIG9ubHkgZGF0YSAqLwogICBncHJfYXRtIHJlZmNudDsKQEAgLTExNSwxOSArOTQsMjIgQEAKICAgZ3ByX2F0bSBkZXN0cm95X3VzZXJfZGF0YTsKICAgZ3ByX2F0bSB1c2VyX2RhdGE7CiAKLSAgc3RydWN0IGludGVybmFsX21ldGFkYXRhICpidWNrZXRfbmV4dDsKLX0gaW50ZXJuYWxfbWV0YWRhdGE7CisgIHN0cnVjdCBpbnRlcm5lZF9tZXRhZGF0YSAqYnVja2V0X25leHQ7Cit9IGludGVybmVkX21ldGFkYXRhOwogCi10eXBlZGVmIHN0cnVjdCBzdHJ0YWJfc2hhcmQgewotICBncHJfbXUgbXU7Ci0gIGludGVybmFsX3N0cmluZyAqKnN0cnM7Ci0gIHNpemVfdCBjb3VudDsKLSAgc2l6ZV90IGNhcGFjaXR5OwotfSBzdHJ0YWJfc2hhcmQ7CisvKiBTaGFkb3cgc3RydWN0dXJlIGZvciBncnBjX21kZWxlbV9kYXRhIGZvciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KK3R5cGVkZWYgc3RydWN0IGFsbG9jYXRlZF9tZXRhZGF0YSB7CisgIC8qIG11c3QgYmUgYnl0ZSBjb21wYXRpYmxlIHdpdGggZ3JwY19tZGVsZW1fZGF0YSAqLworICBncnBjX3NsaWNlIGtleTsKKyAgZ3JwY19zbGljZSB2YWx1ZTsKKworICAvKiBwcml2YXRlIG9ubHkgZGF0YSAqLworICBncHJfYXRtIHJlZmNudDsKK30gYWxsb2NhdGVkX21ldGFkYXRhOwogCiB0eXBlZGVmIHN0cnVjdCBtZHRhYl9zaGFyZCB7CiAgIGdwcl9tdSBtdTsKLSAgaW50ZXJuYWxfbWV0YWRhdGEgKiplbGVtczsKKyAgaW50ZXJuZWRfbWV0YWRhdGEgKiplbGVtczsKICAgc2l6ZV90IGNvdW50OwogICBzaXplX3QgY2FwYWNpdHk7CiAgIC8qKiBFc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIHVucmVmZXJlbmNlZCBtZGVsZW1zIGluIHRoZSBoYXNoIHRhYmxlLgpAQCAtMTM2LDEwMiArMTE4LDI2IEBACiAgIGdwcl9hdG0gZnJlZV9lc3RpbWF0ZTsKIH0gbWR0YWJfc2hhcmQ7CiAKLSNkZWZpbmUgTE9HMl9TVFJUQUJfU0hBUkRfQ09VTlQgNQotI2RlZmluZSBMT0cyX01EVEFCX1NIQVJEX0NPVU5UIDQKLSNkZWZpbmUgU1RSVEFCX1NIQVJEX0NPVU5UICgoc2l6ZV90KSgxIDw8IExPRzJfU1RSVEFCX1NIQVJEX0NPVU5UKSkKLSNkZWZpbmUgTURUQUJfU0hBUkRfQ09VTlQgKChzaXplX3QpKDEgPDwgTE9HMl9NRFRBQl9TSEFSRF9DT1VOVCkpCi0KLS8qIGhhc2ggc2VlZDogZGVjaWRlZCBhdCBpbml0aWFsaXphdGlvbiB0aW1lICovCi1zdGF0aWMgdWludDMyX3QgZ19oYXNoX3NlZWQ7Ci1zdGF0aWMgaW50IGdfZm9yY2VkX2hhc2hfc2VlZCA9IDA7Ci0KLS8qIGxpbmVhcmx5IHByb2JlZCBoYXNoIHRhYmxlcyBmb3Igc3RhdGljIGVsZW1lbnQgbG9va3VwICovCi1zdGF0aWMgZ3JwY19tZHN0ciAqZ19zdGF0aWNfc3RydGFiW0dSUENfU1RBVElDX01EU1RSX0NPVU5UICogMl07Ci1zdGF0aWMgZ3JwY19tZGVsZW0gKmdfc3RhdGljX21kdGFiW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVCAqIDJdOwotc3RhdGljIHNpemVfdCBnX3N0YXRpY19zdHJ0YWJfbWF4cHJvYmU7Ci1zdGF0aWMgc2l6ZV90IGdfc3RhdGljX21kdGFiX21heHByb2JlOwotCi1zdGF0aWMgc3RydGFiX3NoYXJkIGdfc3RydGFiX3NoYXJkW1NUUlRBQl9TSEFSRF9DT1VOVF07Ci1zdGF0aWMgbWR0YWJfc2hhcmQgZ19tZHRhYl9zaGFyZFtNRFRBQl9TSEFSRF9DT1VOVF07CitzdGF0aWMgbWR0YWJfc2hhcmQgZ19zaGFyZHNbU0hBUkRfQ09VTlRdOwogCiBzdGF0aWMgdm9pZCBnY19tZHRhYihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgbWR0YWJfc2hhcmQgKnNoYXJkKTsKIAotdm9pZCBncnBjX3Rlc3Rfb25seV9zZXRfbWV0YWRhdGFfaGFzaF9zZWVkKHVpbnQzMl90IHNlZWQpIHsKLSAgZ19oYXNoX3NlZWQgPSBzZWVkOwotICBnX2ZvcmNlZF9oYXNoX3NlZWQgPSAxOwotfQotCiB2b2lkIGdycGNfbWRjdHhfZ2xvYmFsX2luaXQodm9pZCkgewotICBzaXplX3QgaSwgajsKLSAgaWYgKCFnX2ZvcmNlZF9oYXNoX3NlZWQpIHsKLSAgICBnX2hhc2hfc2VlZCA9ICh1aW50MzJfdClncHJfbm93KEdQUl9DTE9DS19SRUFMVElNRSkudHZfbnNlYzsKLSAgfQotICBnX3N0YXRpY19zdHJ0YWJfbWF4cHJvYmUgPSAwOwotICBnX3N0YXRpY19tZHRhYl9tYXhwcm9iZSA9IDA7Ci0gIC8qIGJ1aWxkIHN0YXRpYyB0YWJsZXMgKi8KLSAgbWVtc2V0KGdfc3RhdGljX21kdGFiLCAwLCBzaXplb2YoZ19zdGF0aWNfbWR0YWIpKTsKLSAgbWVtc2V0KGdfc3RhdGljX3N0cnRhYiwgMCwgc2l6ZW9mKGdfc3RhdGljX3N0cnRhYikpOwotICBmb3IgKGkgPSAwOyBpIDwgR1JQQ19TVEFUSUNfTURTVFJfQ09VTlQ7IGkrKykgewotICAgIGdycGNfbWRzdHIgKmVsZW0gPSAmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbaV07Ci0gICAgY29uc3QgY2hhciAqc3RyID0gZ3JwY19zdGF0aWNfbWV0YWRhdGFfc3RyaW5nc1tpXTsKLSAgICB1aW50MzJfdCBoYXNoID0gZ3ByX211cm11cl9oYXNoMyhzdHIsIHN0cmxlbihzdHIpLCBnX2hhc2hfc2VlZCk7Ci0gICAgKihncnBjX3NsaWNlICopJmVsZW0tPnNsaWNlID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoc3RyKTsKLSAgICAqKHVpbnQzMl90ICopJmVsZW0tPmhhc2ggPSBoYXNoOwotICAgIGZvciAoaiA9IDA7OyBqKyspIHsKLSAgICAgIHNpemVfdCBpZHggPSAoaGFzaCArIGopICUgR1BSX0FSUkFZX1NJWkUoZ19zdGF0aWNfc3RydGFiKTsKLSAgICAgIGlmIChnX3N0YXRpY19zdHJ0YWJbaWR4XSA9PSBOVUxMKSB7Ci0gICAgICAgIGdfc3RhdGljX3N0cnRhYltpZHhdID0gJmdycGNfc3RhdGljX21kc3RyX3RhYmxlW2ldOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGogPiBnX3N0YXRpY19zdHJ0YWJfbWF4cHJvYmUpIHsKLSAgICAgIGdfc3RhdGljX3N0cnRhYl9tYXhwcm9iZSA9IGo7Ci0gICAgfQotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlQ7IGkrKykgewotICAgIGdycGNfbWRlbGVtICplbGVtID0gJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVtpXTsKLSAgICBncnBjX21kc3RyICprZXkgPQotICAgICAgICAmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbZ3JwY19zdGF0aWNfbWV0YWRhdGFfZWxlbV9pbmRpY2VzWzIgKiBpICsgMF1dOwotICAgIGdycGNfbWRzdHIgKnZhbHVlID0KLSAgICAgICAgJmdycGNfc3RhdGljX21kc3RyX3RhYmxlW2dycGNfc3RhdGljX21ldGFkYXRhX2VsZW1faW5kaWNlc1syICogaSArIDFdXTsKLSAgICB1aW50MzJfdCBoYXNoID0gR1JQQ19NRFNUUl9LVl9IQVNIKGtleS0+aGFzaCwgdmFsdWUtPmhhc2gpOwotICAgICooZ3JwY19tZHN0ciAqKikmZWxlbS0+a2V5ID0ga2V5OwotICAgICooZ3JwY19tZHN0ciAqKikmZWxlbS0+dmFsdWUgPSB2YWx1ZTsKLSAgICBmb3IgKGogPSAwOzsgaisrKSB7Ci0gICAgICBzaXplX3QgaWR4ID0gKGhhc2ggKyBqKSAlIEdQUl9BUlJBWV9TSVpFKGdfc3RhdGljX21kdGFiKTsKLSAgICAgIGlmIChnX3N0YXRpY19tZHRhYltpZHhdID09IE5VTEwpIHsKLSAgICAgICAgZ19zdGF0aWNfbWR0YWJbaWR4XSA9IGVsZW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA+IGdfc3RhdGljX21kdGFiX21heHByb2JlKSB7Ci0gICAgICBnX3N0YXRpY19tZHRhYl9tYXhwcm9iZSA9IGo7Ci0gICAgfQotICB9CiAgIC8qIGluaXRpYWxpemUgc2hhcmRzICovCi0gIGZvciAoaSA9IDA7IGkgPCBTVFJUQUJfU0hBUkRfQ09VTlQ7IGkrKykgewotICAgIHN0cnRhYl9zaGFyZCAqc2hhcmQgPSAmZ19zdHJ0YWJfc2hhcmRbaV07Ci0gICAgZ3ByX211X2luaXQoJnNoYXJkLT5tdSk7Ci0gICAgc2hhcmQtPmNvdW50ID0gMDsKLSAgICBzaGFyZC0+Y2FwYWNpdHkgPSBJTklUSUFMX1NUUlRBQl9DQVBBQ0lUWTsKLSAgICBzaGFyZC0+c3RycyA9IGdwcl9tYWxsb2Moc2l6ZW9mKCpzaGFyZC0+c3RycykgKiBzaGFyZC0+Y2FwYWNpdHkpOwotICAgIG1lbXNldChzaGFyZC0+c3RycywgMCwgc2l6ZW9mKCpzaGFyZC0+c3RycykgKiBzaGFyZC0+Y2FwYWNpdHkpOwotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBNRFRBQl9TSEFSRF9DT1VOVDsgaSsrKSB7Ci0gICAgbWR0YWJfc2hhcmQgKnNoYXJkID0gJmdfbWR0YWJfc2hhcmRbaV07CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgU0hBUkRfQ09VTlQ7IGkrKykgeworICAgIG1kdGFiX3NoYXJkICpzaGFyZCA9ICZnX3NoYXJkc1tpXTsKICAgICBncHJfbXVfaW5pdCgmc2hhcmQtPm11KTsKICAgICBzaGFyZC0+Y291bnQgPSAwOwogICAgIGdwcl9hdG1fbm9fYmFycmllcl9zdG9yZSgmc2hhcmQtPmZyZWVfZXN0aW1hdGUsIDApOwotICAgIHNoYXJkLT5jYXBhY2l0eSA9IElOSVRJQUxfTURUQUJfQ0FQQUNJVFk7CisgICAgc2hhcmQtPmNhcGFjaXR5ID0gSU5JVElBTF9TSEFSRF9DQVBBQ0lUWTsKICAgICBzaGFyZC0+ZWxlbXMgPSBncHJfbWFsbG9jKHNpemVvZigqc2hhcmQtPmVsZW1zKSAqIHNoYXJkLT5jYXBhY2l0eSk7CiAgICAgbWVtc2V0KHNoYXJkLT5lbGVtcywgMCwgc2l6ZW9mKCpzaGFyZC0+ZWxlbXMpICogc2hhcmQtPmNhcGFjaXR5KTsKICAgfQogfQogCiB2b2lkIGdycGNfbWRjdHhfZ2xvYmFsX3NodXRkb3duKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4KSB7Ci0gIHNpemVfdCBpOwotICBmb3IgKGkgPSAwOyBpIDwgTURUQUJfU0hBUkRfQ09VTlQ7IGkrKykgewotICAgIG1kdGFiX3NoYXJkICpzaGFyZCA9ICZnX21kdGFiX3NoYXJkW2ldOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNIQVJEX0NPVU5UOyBpKyspIHsKKyAgICBtZHRhYl9zaGFyZCAqc2hhcmQgPSAmZ19zaGFyZHNbaV07CiAgICAgZ3ByX211X2Rlc3Ryb3koJnNoYXJkLT5tdSk7CiAgICAgZ2NfbWR0YWIoZXhlY19jdHgsIHNoYXJkKTsKICAgICAvKiBUT0RPKGN0aWxsZXIpOiBHUFJfQVNTRVJUKHNoYXJkLT5jb3VudCA9PSAwKTsgKi8KQEAgLTI0NCwyMTIgKzE1MCwzNSBAQAogICAgIH0KICAgICBncHJfZnJlZShzaGFyZC0+ZWxlbXMpOwogICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBTVFJUQUJfU0hBUkRfQ09VTlQ7IGkrKykgewotICAgIHN0cnRhYl9zaGFyZCAqc2hhcmQgPSAmZ19zdHJ0YWJfc2hhcmRbaV07Ci0gICAgZ3ByX211X2Rlc3Ryb3koJnNoYXJkLT5tdSk7Ci0gICAgLyogVE9ETyhjdGlsbGVyKTogR1BSX0FTU0VSVChzaGFyZC0+Y291bnQgPT0gMCk7ICovCi0gICAgaWYgKHNoYXJkLT5jb3VudCAhPSAwKSB7Ci0gICAgICBncHJfbG9nKEdQUl9ERUJVRywgIldBUk5JTkc6ICUiIFBSSXVQVFIgIiBtZXRhZGF0YSBzdHJpbmdzIHdlcmUgbGVha2VkIiwKLSAgICAgICAgICAgICAgc2hhcmQtPmNvdW50KTsKLSAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2hhcmQtPmNhcGFjaXR5OyBqKyspIHsKLSAgICAgICAgZm9yIChpbnRlcm5hbF9zdHJpbmcgKnMgPSBzaGFyZC0+c3Ryc1tqXTsgczsgcyA9IHMtPmJ1Y2tldF9uZXh0KSB7Ci0gICAgICAgICAgZ3ByX2xvZyhHUFJfREVCVUcsICJMRUFLRUQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcoKGdycGNfbWRzdHIgKilzKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChncnBjX2lvbWdyX2Fib3J0X29uX2xlYWtzKCkpIHsKLSAgICAgICAgYWJvcnQoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3ByX2ZyZWUoc2hhcmQtPnN0cnMpOwotICB9CiB9CiAKLXN0YXRpYyBpbnQgaXNfbWRzdHJfc3RhdGljKGdycGNfbWRzdHIgKnMpIHsKLSAgcmV0dXJuIHMgPj0gJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzBdICYmCi0gICAgICAgICBzIDwgJmdycGNfc3RhdGljX21kc3RyX3RhYmxlW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsKLX0KLQotc3RhdGljIGludCBpc19tZGVsZW1fc3RhdGljKGdycGNfbWRlbGVtICplKSB7Ci0gIHJldHVybiBlID49ICZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMF0gJiYKLSAgICAgICAgIGUgPCAmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVF07CitzdGF0aWMgaW50IGlzX21kZWxlbV9zdGF0aWMoZ3JwY19tZGVsZW0gZSkgeworICByZXR1cm4gR1JQQ19NREVMRU1fREFUQShlKSA+PSAmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzBdICYmCisgICAgICAgICBHUlBDX01ERUxFTV9EQVRBKGUpIDwKKyAgICAgICAgICAgICAmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVF07CiB9CiAKIHN0YXRpYyB2b2lkIHJlZl9tZF9sb2NrZWQobWR0YWJfc2hhcmQgKnNoYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9tZXRhZGF0YSAqbWQgREVCVUdfQVJHUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5lZF9tZXRhZGF0YSAqbWQgREVCVUdfQVJHUykgewogI2lmZGVmIEdSUENfTUVUQURBVEFfUkVGQ09VTlRfREVCVUcKKyAgY2hhciAqa2V5X3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobWQtPmtleSk7CisgIGNoYXIgKnZhbHVlX3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobWQtPnZhbHVlKTsKICAgZ3ByX2xvZyhmaWxlLCBsaW5lLCBHUFJfTE9HX1NFVkVSSVRZX0RFQlVHLAogICAgICAgICAgICJFTE0gICBSRUY6JXA6JXp1LT4lenU6ICclcycgPSAnJXMnIiwgKHZvaWQgKiltZCwKICAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCksCi0gICAgICAgICAgZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJm1kLT5yZWZjbnQpICsgMSwKLSAgICAgICAgICBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKChncnBjX21kc3RyICopbWQtPmtleSksCi0gICAgICAgICAgZ3JwY19tZHN0cl9hc19jX3N0cmluZygoZ3JwY19tZHN0ciAqKW1kLT52YWx1ZSkpOworICAgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZtZC0+cmVmY250KSArIDEsIGtleV9zdHIsIHZhbHVlX3N0cik7CisgIGdwcl9mcmVlKGtleV9zdHIpOworICBncHJfZnJlZSh2YWx1ZV9zdHIpOwogI2VuZGlmCiAgIGlmICgwID09IGdwcl9hdG1fbm9fYmFycmllcl9mZXRjaF9hZGQoJm1kLT5yZWZjbnQsIDEpKSB7CiAgICAgZ3ByX2F0bV9ub19iYXJyaWVyX2ZldGNoX2FkZCgmc2hhcmQtPmZyZWVfZXN0aW1hdGUsIC0xKTsKICAgfQogfQogCi1zdGF0aWMgdm9pZCBncm93X3N0cnRhYihzdHJ0YWJfc2hhcmQgKnNoYXJkKSB7Ci0gIHNpemVfdCBjYXBhY2l0eSA9IHNoYXJkLT5jYXBhY2l0eSAqIDI7Ci0gIHNpemVfdCBpOwotICBpbnRlcm5hbF9zdHJpbmcgKipzdHJ0YWI7Ci0gIGludGVybmFsX3N0cmluZyAqcywgKm5leHQ7Ci0KLSAgR1BSX1RJTUVSX0JFR0lOKCJncm93X3N0cnRhYiIsIDApOwotCi0gIHN0cnRhYiA9IGdwcl9tYWxsb2Moc2l6ZW9mKGludGVybmFsX3N0cmluZyAqKSAqIGNhcGFjaXR5KTsKLSAgbWVtc2V0KHN0cnRhYiwgMCwgc2l6ZW9mKGludGVybmFsX3N0cmluZyAqKSAqIGNhcGFjaXR5KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgc2hhcmQtPmNhcGFjaXR5OyBpKyspIHsKLSAgICBmb3IgKHMgPSBzaGFyZC0+c3Ryc1tpXTsgczsgcyA9IG5leHQpIHsKLSAgICAgIHNpemVfdCBpZHggPSBUQUJMRV9JRFgocy0+aGFzaCwgTE9HMl9TVFJUQUJfU0hBUkRfQ09VTlQsIGNhcGFjaXR5KTsKLSAgICAgIG5leHQgPSBzLT5idWNrZXRfbmV4dDsKLSAgICAgIHMtPmJ1Y2tldF9uZXh0ID0gc3RydGFiW2lkeF07Ci0gICAgICBzdHJ0YWJbaWR4XSA9IHM7Ci0gICAgfQotICB9Ci0KLSAgZ3ByX2ZyZWUoc2hhcmQtPnN0cnMpOwotICBzaGFyZC0+c3RycyA9IHN0cnRhYjsKLSAgc2hhcmQtPmNhcGFjaXR5ID0gY2FwYWNpdHk7Ci0KLSAgR1BSX1RJTUVSX0VORCgiZ3Jvd19zdHJ0YWIiLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgaW50ZXJuYWxfZGVzdHJveV9zdHJpbmcoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ0YWJfc2hhcmQgKnNoYXJkLCBpbnRlcm5hbF9zdHJpbmcgKmlzKSB7Ci0gIGludGVybmFsX3N0cmluZyAqKnByZXZfbmV4dDsKLSAgaW50ZXJuYWxfc3RyaW5nICpjdXI7Ci0gIEdQUl9USU1FUl9CRUdJTigiaW50ZXJuYWxfZGVzdHJveV9zdHJpbmciLCAwKTsKLSAgaWYgKGlzLT5oYXNfYmFzZTY0X2FuZF9odWZmbWFuX2VuY29kZWQpIHsKLSAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBpcy0+YmFzZTY0X2FuZF9odWZmbWFuKTsKLSAgfQotICBmb3IgKHByZXZfbmV4dCA9ICZzaGFyZC0+c3Ryc1tUQUJMRV9JRFgoaXMtPmhhc2gsIExPRzJfU1RSVEFCX1NIQVJEX0NPVU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmQtPmNhcGFjaXR5KV0sCi0gICAgICBjdXIgPSAqcHJldl9uZXh0OwotICAgICAgIGN1ciAhPSBpczsgcHJldl9uZXh0ID0gJmN1ci0+YnVja2V0X25leHQsIGN1ciA9IGN1ci0+YnVja2V0X25leHQpCi0gICAgOwotICAqcHJldl9uZXh0ID0gY3VyLT5idWNrZXRfbmV4dDsKLSAgc2hhcmQtPmNvdW50LS07Ci0gIGdwcl9mcmVlKGlzKTsKLSAgR1BSX1RJTUVSX0VORCgiaW50ZXJuYWxfZGVzdHJveV9zdHJpbmciLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY2VfcmVmKHZvaWQgKnApIHsKLSAgaW50ZXJuYWxfc3RyaW5nICppcyA9Ci0gICAgICAoaW50ZXJuYWxfc3RyaW5nICopKChjaGFyICopcCAtIG9mZnNldG9mKGludGVybmFsX3N0cmluZywgcmVmY291bnQpKTsKLSAgR1JQQ19NRFNUUl9SRUYoKGdycGNfbWRzdHIgKikoaXMpKTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY2VfdW5yZWYoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnApIHsKLSAgaW50ZXJuYWxfc3RyaW5nICppcyA9Ci0gICAgICAoaW50ZXJuYWxfc3RyaW5nICopKChjaGFyICopcCAtIG9mZnNldG9mKGludGVybmFsX3N0cmluZywgcmVmY291bnQpKTsKLSAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgKGdycGNfbWRzdHIgKikoaXMpKTsKLX0KLQotZ3JwY19tZHN0ciAqZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhjb25zdCBjaGFyICpzdHIpIHsKLSAgcmV0dXJuIGdycGNfbWRzdHJfZnJvbV9idWZmZXIoKGNvbnN0IHVpbnQ4X3QgKilzdHIsIHN0cmxlbihzdHIpKTsKLX0KLQotZ3JwY19tZHN0ciAqZ3JwY19tZHN0cl9mcm9tX3NsaWNlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIHNsaWNlKSB7Ci0gIGdycGNfbWRzdHIgKnJlc3VsdCA9IGdycGNfbWRzdHJfZnJvbV9idWZmZXIoR1JQQ19TTElDRV9TVEFSVF9QVFIoc2xpY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKHNsaWNlKSk7Ci0gIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIHNsaWNlKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ3JwY19tZHN0ciAqZ3JwY19tZHN0cl9mcm9tX2J1ZmZlcihjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBsZW5ndGgpIHsKLSAgdWludDMyX3QgaGFzaCA9IGdwcl9tdXJtdXJfaGFzaDMoYnVmLCBsZW5ndGgsIGdfaGFzaF9zZWVkKTsKLSAgaW50ZXJuYWxfc3RyaW5nICpzOwotICBzdHJ0YWJfc2hhcmQgKnNoYXJkID0KLSAgICAgICZnX3N0cnRhYl9zaGFyZFtTSEFSRF9JRFgoaGFzaCwgTE9HMl9TVFJUQUJfU0hBUkRfQ09VTlQpXTsKLSAgc2l6ZV90IGk7Ci0gIHNpemVfdCBpZHg7Ci0KLSAgR1BSX1RJTUVSX0JFR0lOKCJncnBjX21kc3RyX2Zyb21fYnVmZmVyIiwgMCk7Ci0KLSAgLyogc2VhcmNoIGZvciBhIHN0YXRpYyBzdHJpbmcgKi8KLSAgZm9yIChpID0gMDsgaSA8PSBnX3N0YXRpY19zdHJ0YWJfbWF4cHJvYmU7IGkrKykgewotICAgIGdycGNfbWRzdHIgKnNzOwotICAgIGlkeCA9IChoYXNoICsgaSkgJSBHUFJfQVJSQVlfU0laRShnX3N0YXRpY19zdHJ0YWIpOwotICAgIHNzID0gZ19zdGF0aWNfc3RydGFiW2lkeF07Ci0gICAgaWYgKHNzID09IE5VTEwpIGJyZWFrOwotICAgIGlmIChzcy0+aGFzaCA9PSBoYXNoICYmIEdSUENfU0xJQ0VfTEVOR1RIKHNzLT5zbGljZSkgPT0gbGVuZ3RoICYmCi0gICAgICAgIChsZW5ndGggPT0gMCB8fAotICAgICAgICAgMCA9PSBtZW1jbXAoYnVmLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihzcy0+c2xpY2UpLCBsZW5ndGgpKSkgewotICAgICAgR1BSX1RJTUVSX0VORCgiZ3JwY19tZHN0cl9mcm9tX2J1ZmZlciIsIDApOwotICAgICAgcmV0dXJuIHNzOwotICAgIH0KLSAgfQotCi0gIGdwcl9tdV9sb2NrKCZzaGFyZC0+bXUpOwotCi0gIC8qIHNlYXJjaCBmb3IgYW4gZXhpc3Rpbmcgc3RyaW5nICovCi0gIGlkeCA9IFRBQkxFX0lEWChoYXNoLCBMT0cyX1NUUlRBQl9TSEFSRF9DT1VOVCwgc2hhcmQtPmNhcGFjaXR5KTsKLSAgZm9yIChzID0gc2hhcmQtPnN0cnNbaWR4XTsgczsgcyA9IHMtPmJ1Y2tldF9uZXh0KSB7Ci0gICAgaWYgKHMtPmhhc2ggPT0gaGFzaCAmJiBHUlBDX1NMSUNFX0xFTkdUSChzLT5zbGljZSkgPT0gbGVuZ3RoICYmCi0gICAgICAgIDAgPT0gbWVtY21wKGJ1ZiwgR1JQQ19TTElDRV9TVEFSVF9QVFIocy0+c2xpY2UpLCBsZW5ndGgpKSB7Ci0gICAgICBpZiAoZ3ByX2F0bV9mdWxsX2ZldGNoX2FkZCgmcy0+cmVmY250LCAxKSA9PSAwKSB7Ci0gICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCB3ZSd2ZSBhZGRlZCBhIHJlZiB0byBzb21ldGhpbmcgdGhhdCB3YXMgYWJvdXQgdG8KLSAgICAgICAgICogZGllIC0gZHJvcCBpdCBpbW1lZGlhdGVseS4KLSAgICAgICAgICogVGhlICpvbmx5KiBwb3NzaWJsZSBwYXRoIGhlcmUgKGdpdmVuIHRoZSBzaGFyZCBtdXRleCkgc2hvdWxkIGJlIHRvCi0gICAgICAgICAqIGRyb3AgZnJvbSBvbmUgcmVmIGJhY2sgdG8gemVybyAtIGFzc2VydCB0aGF0IHdpdGggYSBDQVMgKi8KLSAgICAgICAgR1BSX0FTU0VSVChncHJfYXRtX3JlbF9jYXMoJnMtPnJlZmNudCwgMSwgMCkpOwotICAgICAgICAvKiBhbmQgdHJlYXQgdGhpcyBhcyBpZiB3ZSB3ZXJlIG5ldmVyIGhlcmUuLi4gc3NoaGggKi8KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdwcl9tdV91bmxvY2soJnNoYXJkLT5tdSk7Ci0gICAgICAgIEdQUl9USU1FUl9FTkQoImdycGNfbWRzdHJfZnJvbV9idWZmZXIiLCAwKTsKLSAgICAgICAgcmV0dXJuIChncnBjX21kc3RyICopczsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBub3QgZm91bmQ6IGNyZWF0ZSBhIG5ldyBzdHJpbmcgKi8KLSAgaWYgKGxlbmd0aCArIDEgPCBHUlBDX1NMSUNFX0lOTElORURfU0laRSkgewotICAgIC8qIHN0cmluZyBkYXRhIGdvZXMgZGlyZWN0bHkgaW50byB0aGUgc2xpY2UgKi8KLSAgICBzID0gZ3ByX21hbGxvYyhzaXplb2YoaW50ZXJuYWxfc3RyaW5nKSk7Ci0gICAgZ3ByX2F0bV9yZWxfc3RvcmUoJnMtPnJlZmNudCwgMSk7Ci0gICAgcy0+c2xpY2UucmVmY291bnQgPSBOVUxMOwotICAgIG1lbWNweShzLT5zbGljZS5kYXRhLmlubGluZWQuYnl0ZXMsIGJ1ZiwgbGVuZ3RoKTsKLSAgICBzLT5zbGljZS5kYXRhLmlubGluZWQuYnl0ZXNbbGVuZ3RoXSA9IDA7Ci0gICAgcy0+c2xpY2UuZGF0YS5pbmxpbmVkLmxlbmd0aCA9ICh1aW50OF90KWxlbmd0aDsKLSAgfSBlbHNlIHsKLSAgICAvKiBzdHJpbmcgZGF0YSBnb2VzIGFmdGVyIHRoZSBpbnRlcm5hbF9zdHJpbmcgaGVhZGVyLCBhbmQgd2UgKzEgZm9yIG51bGwKLSAgICAgICB0ZXJtaW5hdG9yICovCi0gICAgcyA9IGdwcl9tYWxsb2Moc2l6ZW9mKGludGVybmFsX3N0cmluZykgKyBsZW5ndGggKyAxKTsKLSAgICBncHJfYXRtX3JlbF9zdG9yZSgmcy0+cmVmY250LCAxKTsKLSAgICBzLT5yZWZjb3VudC5yZWYgPSBzbGljZV9yZWY7Ci0gICAgcy0+cmVmY291bnQudW5yZWYgPSBzbGljZV91bnJlZjsKLSAgICBzLT5zbGljZS5yZWZjb3VudCA9ICZzLT5yZWZjb3VudDsKLSAgICBzLT5zbGljZS5kYXRhLnJlZmNvdW50ZWQuYnl0ZXMgPSAodWludDhfdCAqKShzICsgMSk7Ci0gICAgcy0+c2xpY2UuZGF0YS5yZWZjb3VudGVkLmxlbmd0aCA9IGxlbmd0aDsKLSAgICBtZW1jcHkocy0+c2xpY2UuZGF0YS5yZWZjb3VudGVkLmJ5dGVzLCBidWYsIGxlbmd0aCk7Ci0gICAgLyogYWRkIGEgbnVsbCB0ZXJtaW5hdG9yIGZvciBjaGVhcCBjIHN0cmluZyBjb252ZXJzaW9uIHdoZW4gZGVzaXJlZCAqLwotICAgIHMtPnNsaWNlLmRhdGEucmVmY291bnRlZC5ieXRlc1tsZW5ndGhdID0gMDsKLSAgfQotICBzLT5oYXNfYmFzZTY0X2FuZF9odWZmbWFuX2VuY29kZWQgPSAwOwotICBzLT5oYXNoID0gaGFzaDsKLSAgcy0+c2l6ZV9pbl9kZWNvZGVyX3RhYmxlID0gU0laRV9JTl9ERUNPREVSX1RBQkxFX05PVF9TRVQ7Ci0gIHMtPmJ1Y2tldF9uZXh0ID0gc2hhcmQtPnN0cnNbaWR4XTsKLSAgc2hhcmQtPnN0cnNbaWR4XSA9IHM7Ci0KLSAgc2hhcmQtPmNvdW50Kys7Ci0KLSAgaWYgKHNoYXJkLT5jb3VudCA+IHNoYXJkLT5jYXBhY2l0eSAqIDIpIHsKLSAgICBncm93X3N0cnRhYihzaGFyZCk7Ci0gIH0KLQotICBncHJfbXVfdW5sb2NrKCZzaGFyZC0+bXUpOwotICBHUFJfVElNRVJfRU5EKCJncnBjX21kc3RyX2Zyb21fYnVmZmVyIiwgMCk7Ci0KLSAgcmV0dXJuIChncnBjX21kc3RyICopczsKLX0KLQogc3RhdGljIHZvaWQgZ2NfbWR0YWIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIG1kdGFiX3NoYXJkICpzaGFyZCkgewogICBzaXplX3QgaTsKLSAgaW50ZXJuYWxfbWV0YWRhdGEgKipwcmV2X25leHQ7Ci0gIGludGVybmFsX21ldGFkYXRhICptZCwgKm5leHQ7CisgIGludGVybmVkX21ldGFkYXRhICoqcHJldl9uZXh0OworICBpbnRlcm5lZF9tZXRhZGF0YSAqbWQsICpuZXh0OwogICBncHJfYXRtIG51bV9mcmVlZCA9IDA7CiAKICAgR1BSX1RJTUVSX0JFR0lOKCJnY19tZHRhYiIsIDApOwpAQCAtNDU5LDggKzE4OCw4IEBACiAgICAgICB2b2lkICp1c2VyX2RhdGEgPSAodm9pZCAqKWdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZtZC0+dXNlcl9kYXRhKTsKICAgICAgIG5leHQgPSBtZC0+YnVja2V0X25leHQ7CiAgICAgICBpZiAoZ3ByX2F0bV9hY3FfbG9hZCgmbWQtPnJlZmNudCkgPT0gMCkgewotICAgICAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCAoZ3JwY19tZHN0ciAqKW1kLT5rZXkpOwotICAgICAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCAoZ3JwY19tZHN0ciAqKW1kLT52YWx1ZSk7CisgICAgICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIG1kLT5rZXkpOworICAgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBtZC0+dmFsdWUpOwogICAgICAgICBpZiAobWQtPnVzZXJfZGF0YSkgewogICAgICAgICAgICgoZGVzdHJveV91c2VyX2RhdGFfZnVuYylncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgKICAgICAgICAgICAgICAgJm1kLT5kZXN0cm95X3VzZXJfZGF0YSkpKHVzZXJfZGF0YSk7CkBAIC00ODEsMjEgKzIxMCwyMiBAQAogc3RhdGljIHZvaWQgZ3Jvd19tZHRhYihtZHRhYl9zaGFyZCAqc2hhcmQpIHsKICAgc2l6ZV90IGNhcGFjaXR5ID0gc2hhcmQtPmNhcGFjaXR5ICogMjsKICAgc2l6ZV90IGk7Ci0gIGludGVybmFsX21ldGFkYXRhICoqbWR0YWI7Ci0gIGludGVybmFsX21ldGFkYXRhICptZCwgKm5leHQ7CisgIGludGVybmVkX21ldGFkYXRhICoqbWR0YWI7CisgIGludGVybmVkX21ldGFkYXRhICptZCwgKm5leHQ7CiAgIHVpbnQzMl90IGhhc2g7CiAKICAgR1BSX1RJTUVSX0JFR0lOKCJncm93X21kdGFiIiwgMCk7CiAKLSAgbWR0YWIgPSBncHJfbWFsbG9jKHNpemVvZihpbnRlcm5hbF9tZXRhZGF0YSAqKSAqIGNhcGFjaXR5KTsKLSAgbWVtc2V0KG1kdGFiLCAwLCBzaXplb2YoaW50ZXJuYWxfbWV0YWRhdGEgKikgKiBjYXBhY2l0eSk7CisgIG1kdGFiID0gZ3ByX21hbGxvYyhzaXplb2YoaW50ZXJuZWRfbWV0YWRhdGEgKikgKiBjYXBhY2l0eSk7CisgIG1lbXNldChtZHRhYiwgMCwgc2l6ZW9mKGludGVybmVkX21ldGFkYXRhICopICogY2FwYWNpdHkpOwogCiAgIGZvciAoaSA9IDA7IGkgPCBzaGFyZC0+Y2FwYWNpdHk7IGkrKykgewogICAgIGZvciAobWQgPSBzaGFyZC0+ZWxlbXNbaV07IG1kOyBtZCA9IG5leHQpIHsKICAgICAgIHNpemVfdCBpZHg7Ci0gICAgICBoYXNoID0gR1JQQ19NRFNUUl9LVl9IQVNIKG1kLT5rZXktPmhhc2gsIG1kLT52YWx1ZS0+aGFzaCk7CisgICAgICBoYXNoID0gR1JQQ19NRFNUUl9LVl9IQVNIKGdycGNfc2xpY2VfaGFzaChtZC0+a2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9oYXNoKG1kLT52YWx1ZSkpOwogICAgICAgbmV4dCA9IG1kLT5idWNrZXRfbmV4dDsKLSAgICAgIGlkeCA9IFRBQkxFX0lEWChoYXNoLCBMT0cyX01EVEFCX1NIQVJEX0NPVU5ULCBjYXBhY2l0eSk7CisgICAgICBpZHggPSBUQUJMRV9JRFgoaGFzaCwgY2FwYWNpdHkpOwogICAgICAgbWQtPmJ1Y2tldF9uZXh0ID0gbWR0YWJbaWR4XTsKICAgICAgIG1kdGFiW2lkeF0gPSBtZDsKICAgICB9CkBAIC01MTcsNjIgKzI0Nyw3NyBAQAogICB9CiB9CiAKLWdycGNfbWRlbGVtICpncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHIgKm1rZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRzdHIgKm12YWx1ZSkgewotICBpbnRlcm5hbF9zdHJpbmcgKmtleSA9IChpbnRlcm5hbF9zdHJpbmcgKilta2V5OwotICBpbnRlcm5hbF9zdHJpbmcgKnZhbHVlID0gKGludGVybmFsX3N0cmluZyAqKW12YWx1ZTsKLSAgdWludDMyX3QgaGFzaCA9IEdSUENfTURTVFJfS1ZfSEFTSChta2V5LT5oYXNoLCBtdmFsdWUtPmhhc2gpOwotICBpbnRlcm5hbF9tZXRhZGF0YSAqbWQ7Ci0gIG1kdGFiX3NoYXJkICpzaGFyZCA9ICZnX21kdGFiX3NoYXJkW1NIQVJEX0lEWChoYXNoLCBMT0cyX01EVEFCX1NIQVJEX0NPVU5UKV07Ci0gIHNpemVfdCBpOworZ3JwY19tZGVsZW0gZ3JwY19tZGVsZW1fY3JlYXRlKAorICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIGtleSwgZ3JwY19zbGljZSB2YWx1ZSwKKyAgICBncnBjX21kZWxlbV9kYXRhICpjb21wYXRpYmxlX2V4dGVybmFsX2JhY2tpbmdfc3RvcmUpIHsKKyAgaWYgKCFncnBjX3NsaWNlX2lzX2ludGVybmVkKGtleSkgfHwgIWdycGNfc2xpY2VfaXNfaW50ZXJuZWQodmFsdWUpKSB7CisgICAgaWYgKGNvbXBhdGlibGVfZXh0ZXJuYWxfYmFja2luZ19zdG9yZSAhPSBOVUxMKSB7CisgICAgICByZXR1cm4gR1JQQ19NQUtFX01ERUxFTShjb21wYXRpYmxlX2V4dGVybmFsX2JhY2tpbmdfc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX01ERUxFTV9TVE9SQUdFX0VYVEVSTkFMKTsKKyAgICB9CisKKyAgICBhbGxvY2F0ZWRfbWV0YWRhdGEgKmFsbG9jYXRlZCA9IGdwcl9tYWxsb2Moc2l6ZW9mKCphbGxvY2F0ZWQpKTsKKyAgICBhbGxvY2F0ZWQtPmtleSA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKGtleSk7CisgICAgYWxsb2NhdGVkLT52YWx1ZSA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKHZhbHVlKTsKKyAgICBncHJfYXRtX3JlbF9zdG9yZSgmYWxsb2NhdGVkLT5yZWZjbnQsIDEpOworI2lmZGVmIEdSUENfTUVUQURBVEFfUkVGQ09VTlRfREVCVUcKKyAgICBjaGFyICprZXlfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhhbGxvY2F0ZWQtPmtleSk7CisgICAgY2hhciAqdmFsdWVfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhhbGxvY2F0ZWQtPnZhbHVlKTsKKyAgICBncHJfbG9nKEdQUl9ERUJVRywgIkVMTSBBTExPQzolcDolenU6ICclcycgPSAnJXMnIiwgKHZvaWQgKilhbGxvY2F0ZWQsCisgICAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmYWxsb2NhdGVkLT5yZWZjbnQpLCBrZXlfc3RyLCB2YWx1ZV9zdHIpOworICAgIGdwcl9mcmVlKGtleV9zdHIpOworICAgIGdwcl9mcmVlKHZhbHVlX3N0cik7CisjZW5kaWYKKyAgICByZXR1cm4gR1JQQ19NQUtFX01ERUxFTShhbGxvY2F0ZWQsIEdSUENfTURFTEVNX1NUT1JBR0VfQUxMT0NBVEVEKTsKKyAgfQorCisgIGlmIChHUlBDX0lTX1NUQVRJQ19NRVRBREFUQV9TVFJJTkcoa2V5KSAmJgorICAgICAgR1JQQ19JU19TVEFUSUNfTUVUQURBVEFfU1RSSU5HKHZhbHVlKSkgeworICAgIGdycGNfbWRlbGVtIHN0YXRpY19lbGVtID0gZ3JwY19zdGF0aWNfbWRlbGVtX2Zvcl9zdGF0aWNfc3RyaW5ncygKKyAgICAgICAgR1JQQ19TVEFUSUNfTUVUQURBVEFfSU5ERVgoa2V5KSwgR1JQQ19TVEFUSUNfTUVUQURBVEFfSU5ERVgodmFsdWUpKTsKKyAgICBpZiAoIUdSUENfTURJU05VTEwoc3RhdGljX2VsZW0pKSB7CisgICAgICByZXR1cm4gc3RhdGljX2VsZW07CisgICAgfQorICB9CisKKyAgdWludDMyX3QgaGFzaCA9CisgICAgICBHUlBDX01EU1RSX0tWX0hBU0goZ3JwY19zbGljZV9oYXNoKGtleSksIGdycGNfc2xpY2VfaGFzaCh2YWx1ZSkpOworICBpbnRlcm5lZF9tZXRhZGF0YSAqbWQ7CisgIG1kdGFiX3NoYXJkICpzaGFyZCA9ICZnX3NoYXJkc1tTSEFSRF9JRFgoaGFzaCldOwogICBzaXplX3QgaWR4OwogCiAgIEdQUl9USU1FUl9CRUdJTigiZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzIiwgMCk7CiAKLSAgaWYgKGlzX21kc3RyX3N0YXRpYyhta2V5KSAmJiBpc19tZHN0cl9zdGF0aWMobXZhbHVlKSkgewotICAgIGZvciAoaSA9IDA7IGkgPD0gZ19zdGF0aWNfbWR0YWJfbWF4cHJvYmU7IGkrKykgewotICAgICAgZ3JwY19tZGVsZW0gKnNtZDsKLSAgICAgIGlkeCA9IChoYXNoICsgaSkgJSBHUFJfQVJSQVlfU0laRShnX3N0YXRpY19tZHRhYik7Ci0gICAgICBzbWQgPSBnX3N0YXRpY19tZHRhYltpZHhdOwotICAgICAgaWYgKHNtZCA9PSBOVUxMKSBicmVhazsKLSAgICAgIGlmIChzbWQtPmtleSA9PSBta2V5ICYmIHNtZC0+dmFsdWUgPT0gbXZhbHVlKSB7Ci0gICAgICAgIEdQUl9USU1FUl9FTkQoImdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncyIsIDApOwotICAgICAgICByZXR1cm4gc21kOwotICAgICAgfQotICAgIH0KLSAgfQotCiAgIGdwcl9tdV9sb2NrKCZzaGFyZC0+bXUpOwogCi0gIGlkeCA9IFRBQkxFX0lEWChoYXNoLCBMT0cyX01EVEFCX1NIQVJEX0NPVU5ULCBzaGFyZC0+Y2FwYWNpdHkpOworICBpZHggPSBUQUJMRV9JRFgoaGFzaCwgc2hhcmQtPmNhcGFjaXR5KTsKICAgLyogc2VhcmNoIGZvciBhbiBleGlzdGluZyBwYWlyICovCiAgIGZvciAobWQgPSBzaGFyZC0+ZWxlbXNbaWR4XTsgbWQ7IG1kID0gbWQtPmJ1Y2tldF9uZXh0KSB7Ci0gICAgaWYgKG1kLT5rZXkgPT0ga2V5ICYmIG1kLT52YWx1ZSA9PSB2YWx1ZSkgeworICAgIGlmIChncnBjX3NsaWNlX2VxKGtleSwgbWQtPmtleSkgJiYgZ3JwY19zbGljZV9lcSh2YWx1ZSwgbWQtPnZhbHVlKSkgewogICAgICAgUkVGX01EX0xPQ0tFRChzaGFyZCwgbWQpOwotICAgICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgKGdycGNfbWRzdHIgKilrZXkpOwotICAgICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgKGdycGNfbWRzdHIgKil2YWx1ZSk7CiAgICAgICBncHJfbXVfdW5sb2NrKCZzaGFyZC0+bXUpOwogICAgICAgR1BSX1RJTUVSX0VORCgiZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzIiwgMCk7Ci0gICAgICByZXR1cm4gKGdycGNfbWRlbGVtICopbWQ7CisgICAgICByZXR1cm4gR1JQQ19NQUtFX01ERUxFTShtZCwgR1JQQ19NREVMRU1fU1RPUkFHRV9JTlRFUk5FRCk7CiAgICAgfQogICB9CiAKICAgLyogbm90IGZvdW5kOiBjcmVhdGUgYSBuZXcgcGFpciAqLwotICBtZCA9IGdwcl9tYWxsb2Moc2l6ZW9mKGludGVybmFsX21ldGFkYXRhKSk7CisgIG1kID0gZ3ByX21hbGxvYyhzaXplb2YoaW50ZXJuZWRfbWV0YWRhdGEpKTsKICAgZ3ByX2F0bV9yZWxfc3RvcmUoJm1kLT5yZWZjbnQsIDEpOwotICBtZC0+a2V5ID0ga2V5OwotICBtZC0+dmFsdWUgPSB2YWx1ZTsKKyAgbWQtPmtleSA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKGtleSk7CisgIG1kLT52YWx1ZSA9IGdycGNfc2xpY2VfcmVmX2ludGVybmFsKHZhbHVlKTsKICAgbWQtPnVzZXJfZGF0YSA9IDA7CiAgIG1kLT5kZXN0cm95X3VzZXJfZGF0YSA9IDA7CiAgIG1kLT5idWNrZXRfbmV4dCA9IHNoYXJkLT5lbGVtc1tpZHhdOwogICBzaGFyZC0+ZWxlbXNbaWR4XSA9IG1kOwogICBncHJfbXVfaW5pdCgmbWQtPm11X3VzZXJfZGF0YSk7CiAjaWZkZWYgR1JQQ19NRVRBREFUQV9SRUZDT1VOVF9ERUJVRworICBjaGFyICprZXlfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhtZC0+a2V5KTsKKyAgY2hhciAqdmFsdWVfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhtZC0+dmFsdWUpOwogICBncHJfbG9nKEdQUl9ERUJVRywgIkVMTSAgIE5FVzolcDolenU6ICclcycgPSAnJXMnIiwgKHZvaWQgKiltZCwKLSAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCksCi0gICAgICAgICAgZ3JwY19tZHN0cl9hc19jX3N0cmluZygoZ3JwY19tZHN0ciAqKW1kLT5rZXkpLAotICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcoKGdycGNfbWRzdHIgKiltZC0+dmFsdWUpKTsKKyAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCksIGtleV9zdHIsIHZhbHVlX3N0cik7CisgIGdwcl9mcmVlKGtleV9zdHIpOworICBncHJfZnJlZSh2YWx1ZV9zdHIpOwogI2VuZGlmCiAgIHNoYXJkLT5jb3VudCsrOwogCkBAIC01ODQsMjkgKzMyOSwyNiBAQAogCiAgIEdQUl9USU1FUl9FTkQoImdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncyIsIDApOwogCi0gIHJldHVybiAoZ3JwY19tZGVsZW0gKiltZDsKKyAgcmV0dXJuIEdSUENfTUFLRV9NREVMRU0obWQsIEdSUENfTURFTEVNX1NUT1JBR0VfSU5URVJORUQpOwogfQogCi1ncnBjX21kZWxlbSAqZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBjb25zdCBjaGFyICprZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKSB7Ci0gIHJldHVybiBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCi0gICAgICBleGVjX2N0eCwgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhrZXkpLCBncnBjX21kc3RyX2Zyb21fc3RyaW5nKHZhbHVlKSk7CitncnBjX21kZWxlbSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19zbGljZSBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHZhbHVlKSB7CisgIGdycGNfbWRlbGVtIG91dCA9IGdycGNfbWRlbGVtX2NyZWF0ZShleGVjX2N0eCwga2V5LCB2YWx1ZSwgTlVMTCk7CisgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIGtleSk7CisgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIHZhbHVlKTsKKyAgcmV0dXJuIG91dDsKIH0KIAotZ3JwY19tZGVsZW0gKmdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHZhbHVlKSB7Ci0gIHJldHVybiBncnBjX21kZWxlbV9mcm9tX21ldGFkYXRhX3N0cmluZ3MoCi0gICAgICBleGVjX2N0eCwgZ3JwY19tZHN0cl9mcm9tX3NsaWNlKGV4ZWNfY3R4LCBrZXkpLAotICAgICAgZ3JwY19tZHN0cl9mcm9tX3NsaWNlKGV4ZWNfY3R4LCB2YWx1ZSkpOwotfQotCi1ncnBjX21kZWxlbSAqZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdfYW5kX2J1ZmZlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbHVlX2xlbmd0aCkgewotICByZXR1cm4gZ3JwY19tZGVsZW1fZnJvbV9tZXRhZGF0YV9zdHJpbmdzKAotICAgICAgZXhlY19jdHgsIGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoa2V5KSwKLSAgICAgIGdycGNfbWRzdHJfZnJvbV9idWZmZXIodmFsdWUsIHZhbHVlX2xlbmd0aCkpOworZ3JwY19tZGVsZW0gZ3JwY19tZGVsZW1fZnJvbV9ncnBjX21ldGFkYXRhKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhKSB7CisgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICBncnBjX3NsaWNlIGtleV9zbGljZSA9CisgICAgICBncnBjX3NsaWNlX21heWJlX3N0YXRpY19pbnRlcm4obWV0YWRhdGEtPmtleSwgJmNoYW5nZWQpOworICBncnBjX3NsaWNlIHZhbHVlX3NsaWNlID0KKyAgICAgIGdycGNfc2xpY2VfbWF5YmVfc3RhdGljX2ludGVybihtZXRhZGF0YS0+dmFsdWUsICZjaGFuZ2VkKTsKKyAgcmV0dXJuIGdycGNfbWRlbGVtX2NyZWF0ZShleGVjX2N0eCwga2V5X3NsaWNlLCB2YWx1ZV9zbGljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID8gTlVMTCA6IChncnBjX21kZWxlbV9kYXRhICopbWV0YWRhdGEpOwogfQogCiBzdGF0aWMgc2l6ZV90IGdldF9iYXNlNjRfZW5jb2RlZF9zaXplKHNpemVfdCByYXdfbGVuZ3RoKSB7CkBAIC02MTQsMTYwICszNTYsMTc2IEBACiAgIHJldHVybiByYXdfbGVuZ3RoIC8gMyAqIDQgKyB0YWlsX3h0cmFbcmF3X2xlbmd0aCAlIDNdOwogfQogCi1zaXplX3QgZ3JwY19tZGVsZW1fZ2V0X3NpemVfaW5faHBhY2tfdGFibGUoZ3JwY19tZGVsZW0gKmVsZW0pIHsKLSAgc2l6ZV90IG92ZXJoZWFkX2FuZF9rZXkgPSAzMiArIEdSUENfU0xJQ0VfTEVOR1RIKGVsZW0tPmtleS0+c2xpY2UpOwotICBzaXplX3QgdmFsdWVfbGVuID0gR1JQQ19TTElDRV9MRU5HVEgoZWxlbS0+dmFsdWUtPnNsaWNlKTsKLSAgaWYgKGlzX21kc3RyX3N0YXRpYyhlbGVtLT52YWx1ZSkpIHsKLSAgICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKAotICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilHUlBDX1NMSUNFX1NUQVJUX1BUUihlbGVtLT5rZXktPnNsaWNlKSwKLSAgICAgICAgICAgIEdSUENfU0xJQ0VfTEVOR1RIKGVsZW0tPmtleS0+c2xpY2UpKSkgewotICAgICAgcmV0dXJuIG92ZXJoZWFkX2FuZF9rZXkgKyBnZXRfYmFzZTY0X2VuY29kZWRfc2l6ZSh2YWx1ZV9sZW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gb3ZlcmhlYWRfYW5kX2tleSArIHZhbHVlX2xlbjsKLSAgICB9CitzaXplX3QgZ3JwY19tZGVsZW1fZ2V0X3NpemVfaW5faHBhY2tfdGFibGUoZ3JwY19tZGVsZW0gZWxlbSkgeworICBzaXplX3Qgb3ZlcmhlYWRfYW5kX2tleSA9IDMyICsgR1JQQ19TTElDRV9MRU5HVEgoR1JQQ19NREtFWShlbGVtKSk7CisgIHNpemVfdCB2YWx1ZV9sZW4gPSBHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01EVkFMVUUoZWxlbSkpOworICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKEdSUENfTURLRVkoZWxlbSkpKSB7CisgICAgcmV0dXJuIG92ZXJoZWFkX2FuZF9rZXkgKyBnZXRfYmFzZTY0X2VuY29kZWRfc2l6ZSh2YWx1ZV9sZW4pOwogICB9IGVsc2UgewotICAgIGludGVybmFsX3N0cmluZyAqaXMgPSAoaW50ZXJuYWxfc3RyaW5nICopZWxlbS0+dmFsdWU7Ci0gICAgZ3ByX2F0bSBjdXJyZW50X3NpemUgPSBncHJfYXRtX2FjcV9sb2FkKCZpcy0+c2l6ZV9pbl9kZWNvZGVyX3RhYmxlKTsKLSAgICBpZiAoY3VycmVudF9zaXplID09IFNJWkVfSU5fREVDT0RFUl9UQUJMRV9OT1RfU0VUKSB7Ci0gICAgICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKAotICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKGVsZW0tPmtleS0+c2xpY2UpLAotICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChlbGVtLT5rZXktPnNsaWNlKSkpIHsKLSAgICAgICAgY3VycmVudF9zaXplID0gKGdwcl9hdG0pZ2V0X2Jhc2U2NF9lbmNvZGVkX3NpemUodmFsdWVfbGVuKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnJlbnRfc2l6ZSA9IChncHJfYXRtKXZhbHVlX2xlbjsKLSAgICAgIH0KLSAgICAgIGdwcl9hdG1fcmVsX3N0b3JlKCZpcy0+c2l6ZV9pbl9kZWNvZGVyX3RhYmxlLCBjdXJyZW50X3NpemUpOwotICAgIH0KLSAgICByZXR1cm4gb3ZlcmhlYWRfYW5kX2tleSArIChzaXplX3QpY3VycmVudF9zaXplOworICAgIHJldHVybiBvdmVyaGVhZF9hbmRfa2V5ICsgdmFsdWVfbGVuOwogICB9CiB9CiAKLWdycGNfbWRlbGVtICpncnBjX21kZWxlbV9yZWYoZ3JwY19tZGVsZW0gKmdtZCBERUJVR19BUkdTKSB7Ci0gIGludGVybmFsX21ldGFkYXRhICptZCA9IChpbnRlcm5hbF9tZXRhZGF0YSAqKWdtZDsKLSAgaWYgKGlzX21kZWxlbV9zdGF0aWMoZ21kKSkgcmV0dXJuIGdtZDsKK2dycGNfbWRlbGVtIGdycGNfbWRlbGVtX3JlZihncnBjX21kZWxlbSBnbWQgREVCVUdfQVJHUykgeworICBzd2l0Y2ggKEdSUENfTURFTEVNX1NUT1JBR0UoZ21kKSkgeworICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9FWFRFUk5BTDoKKyAgICBjYXNlIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHUlBDX01ERUxFTV9TVE9SQUdFX0lOVEVSTkVEOiB7CisgICAgICBpbnRlcm5lZF9tZXRhZGF0YSAqbWQgPSAoaW50ZXJuZWRfbWV0YWRhdGEgKilHUlBDX01ERUxFTV9EQVRBKGdtZCk7CiAjaWZkZWYgR1JQQ19NRVRBREFUQV9SRUZDT1VOVF9ERUJVRwotICBncHJfbG9nKGZpbGUsIGxpbmUsIEdQUl9MT0dfU0VWRVJJVFlfREVCVUcsCi0gICAgICAgICAgIkVMTSAgIFJFRjolcDolenUtPiV6dTogJyVzJyA9ICclcyciLCAodm9pZCAqKW1kLAotICAgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZtZC0+cmVmY250KSwKLSAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCkgKyAxLAotICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcoKGdycGNfbWRzdHIgKiltZC0+a2V5KSwKLSAgICAgICAgICBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKChncnBjX21kc3RyICopbWQtPnZhbHVlKSk7CisgICAgICBjaGFyICprZXlfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhtZC0+a2V5KTsKKyAgICAgIGNoYXIgKnZhbHVlX3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobWQtPnZhbHVlKTsKKyAgICAgIGdwcl9sb2coZmlsZSwgbGluZSwgR1BSX0xPR19TRVZFUklUWV9ERUJVRywKKyAgICAgICAgICAgICAgIkVMTSAgIFJFRjolcDolenUtPiV6dTogJyVzJyA9ICclcyciLCAodm9pZCAqKW1kLAorICAgICAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCksCisgICAgICAgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZtZC0+cmVmY250KSArIDEsIGtleV9zdHIsIHZhbHVlX3N0cik7CisgICAgICBncHJfZnJlZShrZXlfc3RyKTsKKyAgICAgIGdwcl9mcmVlKHZhbHVlX3N0cik7CiAjZW5kaWYKLSAgLyogd2UgY2FuIGFzc3VtZSB0aGUgcmVmIGNvdW50IGlzID49IDEgYXMgdGhlIGFwcGxpY2F0aW9uIGlzIGNhbGxpbmcKLSAgICAgdGhpcyBmdW5jdGlvbiAtIG1lYW5pbmcgdGhhdCBubyBhZGp1c3RtZW50IHRvIG1kdGFiX2ZyZWUgaXMgbmVjZXNzYXJ5LAotICAgICBzaW1wbGlmeWluZyB0aGUgbG9naWMgaGVyZSB0byBiZSBqdXN0IGFuIGF0b21pYyBpbmNyZW1lbnQgKi8KLSAgLyogdXNlIEMgYXNzZXJ0IHRvIGhhdmUgdGhpcyByZW1vdmVkIGluIG9wdCBidWlsZHMgKi8KLSAgR1BSX0FTU0VSVChncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCkgPj0gMSk7Ci0gIGdwcl9hdG1fbm9fYmFycmllcl9mZXRjaF9hZGQoJm1kLT5yZWZjbnQsIDEpOworICAgICAgLyogd2UgY2FuIGFzc3VtZSB0aGUgcmVmIGNvdW50IGlzID49IDEgYXMgdGhlIGFwcGxpY2F0aW9uIGlzIGNhbGxpbmcKKyAgICAgICAgIHRoaXMgZnVuY3Rpb24gLSBtZWFuaW5nIHRoYXQgbm8gYWRqdXN0bWVudCB0byBtZHRhYl9mcmVlIGlzIG5lY2Vzc2FyeSwKKyAgICAgICAgIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYyBoZXJlIHRvIGJlIGp1c3QgYW4gYXRvbWljIGluY3JlbWVudCAqLworICAgICAgLyogdXNlIEMgYXNzZXJ0IHRvIGhhdmUgdGhpcyByZW1vdmVkIGluIG9wdCBidWlsZHMgKi8KKyAgICAgIEdQUl9BU1NFUlQoZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJm1kLT5yZWZjbnQpID49IDEpOworICAgICAgZ3ByX2F0bV9ub19iYXJyaWVyX2ZldGNoX2FkZCgmbWQtPnJlZmNudCwgMSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHUlBDX01ERUxFTV9TVE9SQUdFX0FMTE9DQVRFRDogeworICAgICAgYWxsb2NhdGVkX21ldGFkYXRhICptZCA9IChhbGxvY2F0ZWRfbWV0YWRhdGEgKilHUlBDX01ERUxFTV9EQVRBKGdtZCk7CisjaWZkZWYgR1JQQ19NRVRBREFUQV9SRUZDT1VOVF9ERUJVRworICAgICAgY2hhciAqa2V5X3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobWQtPmtleSk7CisgICAgICBjaGFyICp2YWx1ZV9zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKG1kLT52YWx1ZSk7CisgICAgICBncHJfbG9nKGZpbGUsIGxpbmUsIEdQUl9MT0dfU0VWRVJJVFlfREVCVUcsCisgICAgICAgICAgICAgICJFTE0gICBSRUY6JXA6JXp1LT4lenU6ICclcycgPSAnJXMnIiwgKHZvaWQgKiltZCwKKyAgICAgICAgICAgICAgZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJm1kLT5yZWZjbnQpLAorICAgICAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCkgKyAxLCBrZXlfc3RyLCB2YWx1ZV9zdHIpOworICAgICAgZ3ByX2ZyZWUoa2V5X3N0cik7CisgICAgICBncHJfZnJlZSh2YWx1ZV9zdHIpOworI2VuZGlmCisgICAgICAvKiB3ZSBjYW4gYXNzdW1lIHRoZSByZWYgY291bnQgaXMgPj0gMSBhcyB0aGUgYXBwbGljYXRpb24gaXMgY2FsbGluZworICAgICAgICAgdGhpcyBmdW5jdGlvbiAtIG1lYW5pbmcgdGhhdCBubyBhZGp1c3RtZW50IHRvIG1kdGFiX2ZyZWUgaXMgbmVjZXNzYXJ5LAorICAgICAgICAgc2ltcGxpZnlpbmcgdGhlIGxvZ2ljIGhlcmUgdG8gYmUganVzdCBhbiBhdG9taWMgaW5jcmVtZW50ICovCisgICAgICAvKiB1c2UgQyBhc3NlcnQgdG8gaGF2ZSB0aGlzIHJlbW92ZWQgaW4gb3B0IGJ1aWxkcyAqLworICAgICAgZ3ByX2F0bV9ub19iYXJyaWVyX2ZldGNoX2FkZCgmbWQtPnJlZmNudCwgMSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KICAgcmV0dXJuIGdtZDsKIH0KIAotdm9pZCBncnBjX21kZWxlbV91bnJlZihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19tZGVsZW0gKmdtZCBERUJVR19BUkdTKSB7Ci0gIGludGVybmFsX21ldGFkYXRhICptZCA9IChpbnRlcm5hbF9tZXRhZGF0YSAqKWdtZDsKLSAgaWYgKCFtZCkgcmV0dXJuOwotICBpZiAoaXNfbWRlbGVtX3N0YXRpYyhnbWQpKSByZXR1cm47Cit2b2lkIGdycGNfbWRlbGVtX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX21kZWxlbSBnbWQgREVCVUdfQVJHUykgeworICBzd2l0Y2ggKEdSUENfTURFTEVNX1NUT1JBR0UoZ21kKSkgeworICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9FWFRFUk5BTDoKKyAgICBjYXNlIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHUlBDX01ERUxFTV9TVE9SQUdFX0lOVEVSTkVEOiB7CisgICAgICBpbnRlcm5lZF9tZXRhZGF0YSAqbWQgPSAoaW50ZXJuZWRfbWV0YWRhdGEgKilHUlBDX01ERUxFTV9EQVRBKGdtZCk7CiAjaWZkZWYgR1JQQ19NRVRBREFUQV9SRUZDT1VOVF9ERUJVRwotICBncHJfbG9nKGZpbGUsIGxpbmUsIEdQUl9MT0dfU0VWRVJJVFlfREVCVUcsCi0gICAgICAgICAgIkVMTSBVTlJFRjolcDolenUtPiV6dTogJyVzJyA9ICclcyciLCAodm9pZCAqKW1kLAotICAgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZtZC0+cmVmY250KSwKLSAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCkgLSAxLAotICAgICAgICAgIGdycGNfbWRzdHJfYXNfY19zdHJpbmcoKGdycGNfbWRzdHIgKiltZC0+a2V5KSwKLSAgICAgICAgICBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKChncnBjX21kc3RyICopbWQtPnZhbHVlKSk7CisgICAgICBjaGFyICprZXlfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhtZC0+a2V5KTsKKyAgICAgIGNoYXIgKnZhbHVlX3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobWQtPnZhbHVlKTsKKyAgICAgIGdwcl9sb2coZmlsZSwgbGluZSwgR1BSX0xPR19TRVZFUklUWV9ERUJVRywKKyAgICAgICAgICAgICAgIkVMTSBVTlJFRjolcDolenUtPiV6dTogJyVzJyA9ICclcyciLCAodm9pZCAqKW1kLAorICAgICAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCksCisgICAgICAgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZtZC0+cmVmY250KSAtIDEsIGtleV9zdHIsIHZhbHVlX3N0cik7CisgICAgICBncHJfZnJlZShrZXlfc3RyKTsKKyAgICAgIGdwcl9mcmVlKHZhbHVlX3N0cik7CiAjZW5kaWYKLSAgdWludDMyX3QgaGFzaCA9IEdSUENfTURTVFJfS1ZfSEFTSChtZC0+a2V5LT5oYXNoLCBtZC0+dmFsdWUtPmhhc2gpOwotICBjb25zdCBncHJfYXRtIHByZXZfcmVmY291bnQgPSBncHJfYXRtX2Z1bGxfZmV0Y2hfYWRkKCZtZC0+cmVmY250LCAtMSk7Ci0gIEdQUl9BU1NFUlQocHJldl9yZWZjb3VudCA+PSAxKTsKLSAgaWYgKDEgPT0gcHJldl9yZWZjb3VudCkgewotICAgIC8qIG9uY2UgdGhlIHJlZmNvdW50IGhpdHMgemVybywgc29tZSBvdGhlciB0aHJlYWQgY2FuIGNvbWUgYWxvbmcgYW5kCi0gICAgICAgZnJlZSBtZCBhdCBhbnkgdGltZTogaXQncyB1bnNhZmUgZnJvbSB0aGlzIHBvaW50IG9uIHRvIGFjY2VzcyBpdCAqLwotICAgIG1kdGFiX3NoYXJkICpzaGFyZCA9Ci0gICAgICAgICZnX21kdGFiX3NoYXJkW1NIQVJEX0lEWChoYXNoLCBMT0cyX01EVEFCX1NIQVJEX0NPVU5UKV07Ci0gICAgZ3ByX2F0bV9ub19iYXJyaWVyX2ZldGNoX2FkZCgmc2hhcmQtPmZyZWVfZXN0aW1hdGUsIDEpOwotICB9Ci19Ci0KLWNvbnN0IGNoYXIgKmdycGNfbWRzdHJfYXNfY19zdHJpbmcoY29uc3QgZ3JwY19tZHN0ciAqcykgewotICByZXR1cm4gKGNvbnN0IGNoYXIgKilHUlBDX1NMSUNFX1NUQVJUX1BUUihzLT5zbGljZSk7Ci19Ci0KLXNpemVfdCBncnBjX21kc3RyX2xlbmd0aChjb25zdCBncnBjX21kc3RyICpzKSB7IHJldHVybiBHUlBDX01EU1RSX0xFTkdUSChzKTsgfQotCi1ncnBjX21kc3RyICpncnBjX21kc3RyX3JlZihncnBjX21kc3RyICpncyBERUJVR19BUkdTKSB7Ci0gIGludGVybmFsX3N0cmluZyAqcyA9IChpbnRlcm5hbF9zdHJpbmcgKilnczsKLSAgaWYgKGlzX21kc3RyX3N0YXRpYyhncykpIHJldHVybiBnczsKLSNpZmRlZiBHUlBDX01FVEFEQVRBX1JFRkNPVU5UX0RFQlVHCi0gIGdwcl9sb2coZmlsZSwgbGluZSwgR1BSX0xPR19TRVZFUklUWV9ERUJVRywgIlNUUiAgIFJFRjolcDolenUtPiV6dTogJyVzJyIsCi0gICAgICAgICAgKHZvaWQgKilzLCBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmcy0+cmVmY250KSwKLSAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmcy0+cmVmY250KSArIDEsIGdycGNfbWRzdHJfYXNfY19zdHJpbmcoZ3MpKTsKLSNlbmRpZgotICBHUFJfQVNTRVJUKGdwcl9hdG1fZnVsbF9mZXRjaF9hZGQoJnMtPnJlZmNudCwgMSkgPiAwKTsKLSAgcmV0dXJuIGdzOwotfQotCi12b2lkIGdycGNfbWRzdHJfdW5yZWYoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfbWRzdHIgKmdzIERFQlVHX0FSR1MpIHsKLSAgaW50ZXJuYWxfc3RyaW5nICpzID0gKGludGVybmFsX3N0cmluZyAqKWdzOwotICBpZiAoaXNfbWRzdHJfc3RhdGljKGdzKSkgcmV0dXJuOwotI2lmZGVmIEdSUENfTUVUQURBVEFfUkVGQ09VTlRfREVCVUcKLSAgZ3ByX2xvZyhmaWxlLCBsaW5lLCBHUFJfTE9HX1NFVkVSSVRZX0RFQlVHLCAiU1RSIFVOUkVGOiVwOiV6dS0+JXp1OiAnJXMnIiwKLSAgICAgICAgICAodm9pZCAqKXMsIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZzLT5yZWZjbnQpLAotICAgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZzLT5yZWZjbnQpIC0gMSwgZ3JwY19tZHN0cl9hc19jX3N0cmluZyhncykpOwotI2VuZGlmCi0gIGlmICgxID09IGdwcl9hdG1fZnVsbF9mZXRjaF9hZGQoJnMtPnJlZmNudCwgLTEpKSB7Ci0gICAgc3RydGFiX3NoYXJkICpzaGFyZCA9Ci0gICAgICAgICZnX3N0cnRhYl9zaGFyZFtTSEFSRF9JRFgocy0+aGFzaCwgTE9HMl9TVFJUQUJfU0hBUkRfQ09VTlQpXTsKLSAgICBncHJfbXVfbG9jaygmc2hhcmQtPm11KTsKLSAgICBHUFJfQVNTRVJUKDAgPT0gZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJnMtPnJlZmNudCkpOwotICAgIGludGVybmFsX2Rlc3Ryb3lfc3RyaW5nKGV4ZWNfY3R4LCBzaGFyZCwgcyk7Ci0gICAgZ3ByX211X3VubG9jaygmc2hhcmQtPm11KTsKLSAgfQotfQotCi12b2lkICpncnBjX21kZWxlbV9nZXRfdXNlcl9kYXRhKGdycGNfbWRlbGVtICptZCwgdm9pZCAoKmRlc3Ryb3lfZnVuYykodm9pZCAqKSkgewotICBpbnRlcm5hbF9tZXRhZGF0YSAqaW0gPSAoaW50ZXJuYWxfbWV0YWRhdGEgKiltZDsKLSAgdm9pZCAqcmVzdWx0OwotICBpZiAoaXNfbWRlbGVtX3N0YXRpYyhtZCkpIHsKLSAgICByZXR1cm4gKHZvaWQgKilncnBjX3N0YXRpY19tZGVsZW1fdXNlcl9kYXRhW21kIC0gZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlXTsKLSAgfQotICBpZiAoZ3ByX2F0bV9hY3FfbG9hZCgmaW0tPmRlc3Ryb3lfdXNlcl9kYXRhKSA9PSAoZ3ByX2F0bSlkZXN0cm95X2Z1bmMpIHsKLSAgICByZXR1cm4gKHZvaWQgKilncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmaW0tPnVzZXJfZGF0YSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCAqZ3JwY19tZGVsZW1fc2V0X3VzZXJfZGF0YShncnBjX21kZWxlbSAqbWQsIHZvaWQgKCpkZXN0cm95X2Z1bmMpKHZvaWQgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkgewotICBpbnRlcm5hbF9tZXRhZGF0YSAqaW0gPSAoaW50ZXJuYWxfbWV0YWRhdGEgKiltZDsKLSAgR1BSX0FTU0VSVCghaXNfbWRlbGVtX3N0YXRpYyhtZCkpOwotICBHUFJfQVNTRVJUKCh1c2VyX2RhdGEgPT0gTlVMTCkgPT0gKGRlc3Ryb3lfZnVuYyA9PSBOVUxMKSk7Ci0gIGdwcl9tdV9sb2NrKCZpbS0+bXVfdXNlcl9kYXRhKTsKLSAgaWYgKGdwcl9hdG1fbm9fYmFycmllcl9sb2FkKCZpbS0+ZGVzdHJveV91c2VyX2RhdGEpKSB7Ci0gICAgLyogdXNlciBkYXRhIGNhbiBvbmx5IGJlIHNldCBvbmNlICovCi0gICAgZ3ByX211X3VubG9jaygmaW0tPm11X3VzZXJfZGF0YSk7Ci0gICAgaWYgKGRlc3Ryb3lfZnVuYyAhPSBOVUxMKSB7Ci0gICAgICBkZXN0cm95X2Z1bmModXNlcl9kYXRhKTsKKyAgICAgIHVpbnQzMl90IGhhc2ggPSBHUlBDX01EU1RSX0tWX0hBU0goZ3JwY19zbGljZV9oYXNoKG1kLT5rZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2hhc2gobWQtPnZhbHVlKSk7CisgICAgICBjb25zdCBncHJfYXRtIHByZXZfcmVmY291bnQgPSBncHJfYXRtX2Z1bGxfZmV0Y2hfYWRkKCZtZC0+cmVmY250LCAtMSk7CisgICAgICBHUFJfQVNTRVJUKHByZXZfcmVmY291bnQgPj0gMSk7CisgICAgICBpZiAoMSA9PSBwcmV2X3JlZmNvdW50KSB7CisgICAgICAgIC8qIG9uY2UgdGhlIHJlZmNvdW50IGhpdHMgemVybywgc29tZSBvdGhlciB0aHJlYWQgY2FuIGNvbWUgYWxvbmcgYW5kCisgICAgICAgICAgIGZyZWUgbWQgYXQgYW55IHRpbWU6IGl0J3MgdW5zYWZlIGZyb20gdGhpcyBwb2ludCBvbiB0byBhY2Nlc3MgaXQgKi8KKyAgICAgICAgbWR0YWJfc2hhcmQgKnNoYXJkID0gJmdfc2hhcmRzW1NIQVJEX0lEWChoYXNoKV07CisgICAgICAgIGdwcl9hdG1fbm9fYmFycmllcl9mZXRjaF9hZGQoJnNoYXJkLT5mcmVlX2VzdGltYXRlLCAxKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gKHZvaWQgKilncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmaW0tPnVzZXJfZGF0YSk7CisgICAgY2FzZSBHUlBDX01ERUxFTV9TVE9SQUdFX0FMTE9DQVRFRDogeworICAgICAgYWxsb2NhdGVkX21ldGFkYXRhICptZCA9IChhbGxvY2F0ZWRfbWV0YWRhdGEgKilHUlBDX01ERUxFTV9EQVRBKGdtZCk7CisjaWZkZWYgR1JQQ19NRVRBREFUQV9SRUZDT1VOVF9ERUJVRworICAgICAgY2hhciAqa2V5X3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobWQtPmtleSk7CisgICAgICBjaGFyICp2YWx1ZV9zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKG1kLT52YWx1ZSk7CisgICAgICBncHJfbG9nKGZpbGUsIGxpbmUsIEdQUl9MT0dfU0VWRVJJVFlfREVCVUcsCisgICAgICAgICAgICAgICJFTE0gVU5SRUY6JXA6JXp1LT4lenU6ICclcycgPSAnJXMnIiwgKHZvaWQgKiltZCwKKyAgICAgICAgICAgICAgZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJm1kLT5yZWZjbnQpLAorICAgICAgICAgICAgICBncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmbWQtPnJlZmNudCkgLSAxLCBrZXlfc3RyLCB2YWx1ZV9zdHIpOworICAgICAgZ3ByX2ZyZWUoa2V5X3N0cik7CisgICAgICBncHJfZnJlZSh2YWx1ZV9zdHIpOworI2VuZGlmCisgICAgICBjb25zdCBncHJfYXRtIHByZXZfcmVmY291bnQgPSBncHJfYXRtX2Z1bGxfZmV0Y2hfYWRkKCZtZC0+cmVmY250LCAtMSk7CisgICAgICBHUFJfQVNTRVJUKHByZXZfcmVmY291bnQgPj0gMSk7CisgICAgICBpZiAoMSA9PSBwcmV2X3JlZmNvdW50KSB7CisgICAgICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIG1kLT5rZXkpOworICAgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBtZC0+dmFsdWUpOworICAgICAgICBncHJfZnJlZShtZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CiAgIH0KLSAgZ3ByX2F0bV9ub19iYXJyaWVyX3N0b3JlKCZpbS0+dXNlcl9kYXRhLCAoZ3ByX2F0bSl1c2VyX2RhdGEpOwotICBncHJfYXRtX3JlbF9zdG9yZSgmaW0tPmRlc3Ryb3lfdXNlcl9kYXRhLCAoZ3ByX2F0bSlkZXN0cm95X2Z1bmMpOwotICBncHJfbXVfdW5sb2NrKCZpbS0+bXVfdXNlcl9kYXRhKTsKLSAgcmV0dXJuIHVzZXJfZGF0YTsKIH0KIAotZ3JwY19zbGljZSBncnBjX21kc3RyX2FzX2Jhc2U2NF9lbmNvZGVkX2FuZF9odWZmbWFuX2NvbXByZXNzZWQoZ3JwY19tZHN0ciAqZ3MpIHsKLSAgaW50ZXJuYWxfc3RyaW5nICpzID0gKGludGVybmFsX3N0cmluZyAqKWdzOwotICBncnBjX3NsaWNlIHNsaWNlOwotICBzdHJ0YWJfc2hhcmQgKnNoYXJkID0KLSAgICAgICZnX3N0cnRhYl9zaGFyZFtTSEFSRF9JRFgocy0+aGFzaCwgTE9HMl9TVFJUQUJfU0hBUkRfQ09VTlQpXTsKLSAgZ3ByX211X2xvY2soJnNoYXJkLT5tdSk7Ci0gIGlmICghcy0+aGFzX2Jhc2U2NF9hbmRfaHVmZm1hbl9lbmNvZGVkKSB7Ci0gICAgcy0+YmFzZTY0X2FuZF9odWZmbWFuID0KLSAgICAgICAgZ3JwY19jaHR0cDJfYmFzZTY0X2VuY29kZV9hbmRfaHVmZm1hbl9jb21wcmVzcyhzLT5zbGljZSk7Ci0gICAgcy0+aGFzX2Jhc2U2NF9hbmRfaHVmZm1hbl9lbmNvZGVkID0gMTsKK3ZvaWQgKmdycGNfbWRlbGVtX2dldF91c2VyX2RhdGEoZ3JwY19tZGVsZW0gbWQsIHZvaWQgKCpkZXN0cm95X2Z1bmMpKHZvaWQgKikpIHsKKyAgc3dpdGNoIChHUlBDX01ERUxFTV9TVE9SQUdFKG1kKSkgeworICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9FWFRFUk5BTDoKKyAgICBjYXNlIEdSUENfTURFTEVNX1NUT1JBR0VfQUxMT0NBVEVEOgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQzoKKyAgICAgIHJldHVybiAodm9pZCAqKWdycGNfc3RhdGljX21kZWxlbV91c2VyX2RhdGFbR1JQQ19NREVMRU1fREFUQShtZCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXRpY19tZGVsZW1fdGFibGVdOworICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9JTlRFUk5FRDogeworICAgICAgaW50ZXJuZWRfbWV0YWRhdGEgKmltID0gKGludGVybmVkX21ldGFkYXRhICopR1JQQ19NREVMRU1fREFUQShtZCk7CisgICAgICB2b2lkICpyZXN1bHQ7CisgICAgICBpZiAoZ3ByX2F0bV9hY3FfbG9hZCgmaW0tPmRlc3Ryb3lfdXNlcl9kYXRhKSA9PSAoZ3ByX2F0bSlkZXN0cm95X2Z1bmMpIHsKKyAgICAgICAgcmV0dXJuICh2b2lkICopZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJmltLT51c2VyX2RhdGEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgfQotICBzbGljZSA9IHMtPmJhc2U2NF9hbmRfaHVmZm1hbjsKLSAgZ3ByX211X3VubG9jaygmc2hhcmQtPm11KTsKLSAgcmV0dXJuIHNsaWNlOworICBHUFJfVU5SRUFDSEFCTEVfQ09ERShyZXR1cm4gTlVMTCk7Cit9CisKK3ZvaWQgKmdycGNfbWRlbGVtX3NldF91c2VyX2RhdGEoZ3JwY19tZGVsZW0gbWQsIHZvaWQgKCpkZXN0cm95X2Z1bmMpKHZvaWQgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkgeworICBzd2l0Y2ggKEdSUENfTURFTEVNX1NUT1JBR0UobWQpKSB7CisgICAgY2FzZSBHUlBDX01ERUxFTV9TVE9SQUdFX0VYVEVSTkFMOgorICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9BTExPQ0FURUQ6CisgICAgICBkZXN0cm95X2Z1bmModXNlcl9kYXRhKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUM6CisgICAgICBkZXN0cm95X2Z1bmModXNlcl9kYXRhKTsKKyAgICAgIHJldHVybiAodm9pZCAqKWdycGNfc3RhdGljX21kZWxlbV91c2VyX2RhdGFbR1JQQ19NREVMRU1fREFUQShtZCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXRpY19tZGVsZW1fdGFibGVdOworICAgIGNhc2UgR1JQQ19NREVMRU1fU1RPUkFHRV9JTlRFUk5FRDogeworICAgICAgaW50ZXJuZWRfbWV0YWRhdGEgKmltID0gKGludGVybmVkX21ldGFkYXRhICopR1JQQ19NREVMRU1fREFUQShtZCk7CisgICAgICBHUFJfQVNTRVJUKCFpc19tZGVsZW1fc3RhdGljKG1kKSk7CisgICAgICBHUFJfQVNTRVJUKCh1c2VyX2RhdGEgPT0gTlVMTCkgPT0gKGRlc3Ryb3lfZnVuYyA9PSBOVUxMKSk7CisgICAgICBncHJfbXVfbG9jaygmaW0tPm11X3VzZXJfZGF0YSk7CisgICAgICBpZiAoZ3ByX2F0bV9ub19iYXJyaWVyX2xvYWQoJmltLT5kZXN0cm95X3VzZXJfZGF0YSkpIHsKKyAgICAgICAgLyogdXNlciBkYXRhIGNhbiBvbmx5IGJlIHNldCBvbmNlICovCisgICAgICAgIGdwcl9tdV91bmxvY2soJmltLT5tdV91c2VyX2RhdGEpOworICAgICAgICBpZiAoZGVzdHJveV9mdW5jICE9IE5VTEwpIHsKKyAgICAgICAgICBkZXN0cm95X2Z1bmModXNlcl9kYXRhKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHZvaWQgKilncHJfYXRtX25vX2JhcnJpZXJfbG9hZCgmaW0tPnVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBncHJfYXRtX25vX2JhcnJpZXJfc3RvcmUoJmltLT51c2VyX2RhdGEsIChncHJfYXRtKXVzZXJfZGF0YSk7CisgICAgICBncHJfYXRtX3JlbF9zdG9yZSgmaW0tPmRlc3Ryb3lfdXNlcl9kYXRhLCAoZ3ByX2F0bSlkZXN0cm95X2Z1bmMpOworICAgICAgZ3ByX211X3VubG9jaygmaW0tPm11X3VzZXJfZGF0YSk7CisgICAgICByZXR1cm4gdXNlcl9kYXRhOworICAgIH0KKyAgfQorICBHUFJfVU5SRUFDSEFCTEVfQ09ERShyZXR1cm4gTlVMTCk7Cit9CisKK2Jvb2wgZ3JwY19tZGVsZW1fZXEoZ3JwY19tZGVsZW0gYSwgZ3JwY19tZGVsZW0gYikgeworICBpZiAoYS5wYXlsb2FkID09IGIucGF5bG9hZCkgcmV0dXJuIHRydWU7CisgIGlmIChHUlBDX01ERUxFTV9JU19JTlRFUk5FRChhKSAmJiBHUlBDX01ERUxFTV9JU19JTlRFUk5FRChiKSkgcmV0dXJuIGZhbHNlOworICBpZiAoR1JQQ19NRElTTlVMTChhKSB8fCBHUlBDX01ESVNOVUxMKGIpKSByZXR1cm4gZmFsc2U7CisgIHJldHVybiBncnBjX3NsaWNlX2VxKEdSUENfTURLRVkoYSksIEdSUENfTURLRVkoYikpICYmCisgICAgICAgICBncnBjX3NsaWNlX2VxKEdSUENfTURWQUxVRShhKSwgR1JQQ19NRFZBTFVFKGIpKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaAppbmRleCA5OTFlZWU5Li5mNGJhODZjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgKKysrIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oCkBAIC0zNCw2ICszNCw3IEBACiAjaWZuZGVmIEdSUENfQ09SRV9MSUJfVFJBTlNQT1JUX01FVEFEQVRBX0gKICNkZWZpbmUgR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfTUVUQURBVEFfSAogCisjaW5jbHVkZSA8Z3JwYy9ncnBjLmg+CiAjaW5jbHVkZSA8Z3JwYy9zbGljZS5oPgogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC91c2VmdWwuaD4KIApAQCAtNzQsMTEwICs3NSwxMTAgQEAKICAgIGRlY2xhcmVkIGhlcmUgLSBpbiB3aGljaCBjYXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgZWZmZWN0aXZlbHkgbm8tb3BzLiAqLwogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwotdHlwZWRlZiBzdHJ1Y3QgZ3JwY19tZHN0ciBncnBjX21kc3RyOwogdHlwZWRlZiBzdHJ1Y3QgZ3JwY19tZGVsZW0gZ3JwY19tZGVsZW07CiAKLS8qIGlmIGNoYW5naW5nIHRoaXMsIG1ha2UgaWRlbnRpY2FsIGNoYW5nZXMgaW4gaW50ZXJuYWxfc3RyaW5nIGluIG1ldGFkYXRhLmMgKi8KLXN0cnVjdCBncnBjX21kc3RyIHsKLSAgY29uc3QgZ3JwY19zbGljZSBzbGljZTsKLSAgY29uc3QgdWludDMyX3QgaGFzaDsKKy8qIGlmIGNoYW5naW5nIHRoaXMsIG1ha2UgaWRlbnRpY2FsIGNoYW5nZXMgaW46CisgICAtIGludGVybmVkX21ldGFkYXRhLCBhbGxvY2F0ZWRfbWV0YWRhdGEgaW4gbWV0YWRhdGEuYworICAgLSBncnBjX21ldGFkYXRhIGluIGdycGNfdHlwZXMuaCAqLwordHlwZWRlZiBzdHJ1Y3QgZ3JwY19tZGVsZW1fZGF0YSB7CisgIGNvbnN0IGdycGNfc2xpY2Uga2V5OworICBjb25zdCBncnBjX3NsaWNlIHZhbHVlOwogICAvKiB0aGVyZSBpcyBhIHByaXZhdGUgcGFydCB0byB0aGlzIGluIG1ldGFkYXRhLmMgKi8KLX07Cit9IGdycGNfbWRlbGVtX2RhdGE7CiAKLS8qIGlmIGNoYW5naW5nIHRoaXMsIG1ha2UgaWRlbnRpY2FsIGNoYW5nZXMgaW4gaW50ZXJuYWxfbWV0YWRhdGEgaW4KLSAgIG1ldGFkYXRhLmMgKi8KKy8qIEdSUENfTURFTEVNX1NUT1JBR0VfKiBlbnVtIHZhbHVlcyB0aGF0IGNhbiBiZSB0cmVhdGVkIGFzIGludGVybmVkIGFsd2F5cyBoYXZlCisgICB0aGlzIGJpdCBzZXQgaW4gdGhlaXIgaW50ZWdlciB2YWx1ZSAqLworI2RlZmluZSBHUlBDX01ERUxFTV9TVE9SQUdFX0lOVEVSTkVEX0JJVCAxCisKK3R5cGVkZWYgZW51bSB7CisgIC8qIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGdycGNfbWRlbGVtOjpwYXlsb2FkIGlzIG93bmVkIGJ5IGFuIGV4dGVybmFsIHN5c3RlbSAqLworICBHUlBDX01ERUxFTV9TVE9SQUdFX0VYVEVSTkFMID0gMCwKKyAgLyogbWVtb3J5IHBvaW50ZWQgdG8gYnkgZ3JwY19tZGVsZW06OnBheWxvYWQgaXMgaW50ZXJuZWQgYnkgdGhlIG1ldGFkYXRhCisgICAgIHN5c3RlbSAqLworICBHUlBDX01ERUxFTV9TVE9SQUdFX0lOVEVSTkVEID0gR1JQQ19NREVMRU1fU1RPUkFHRV9JTlRFUk5FRF9CSVQsCisgIC8qIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGdycGNfbWRlbGVtOjpwYXlsb2FkIGlzIGFsbG9jYXRlZCBieSB0aGUgbWV0YWRhdGEKKyAgICAgc3lzdGVtICovCisgIEdSUENfTURFTEVNX1NUT1JBR0VfQUxMT0NBVEVEID0gMiwKKyAgLyogbWVtb3J5IGlzIGluIHRoZSBzdGF0aWMgbWV0YWRhdGEgdGFibGUgKi8KKyAgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMgPSAyIHwgR1JQQ19NREVMRU1fU1RPUkFHRV9JTlRFUk5FRF9CSVQsCit9IGdycGNfbWRlbGVtX2RhdGFfc3RvcmFnZTsKKwogc3RydWN0IGdycGNfbWRlbGVtIHsKLSAgZ3JwY19tZHN0ciAqY29uc3Qga2V5OwotICBncnBjX21kc3RyICpjb25zdCB2YWx1ZTsKLSAgLyogdGhlcmUgaXMgYSBwcml2YXRlIHBhcnQgdG8gdGhpcyBpbiBtZXRhZGF0YS5jICovCisgIC8qIGEgZ3JwY19tZGVsZW1fZGF0YSogZ2VuZXJhbGx5LCB3aXRoIHRoZSB0d28gbG93ZXIgYml0cyBzaWduYWxsaW5nIG1lbW9yeQorICAgICBvd25lcnNoaXAgYXMgcGVyIGdycGNfbWRlbGVtX2RhdGFfc3RvcmFnZSAqLworICB1aW50cHRyX3QgcGF5bG9hZDsKIH07CiAKLXZvaWQgZ3JwY190ZXN0X29ubHlfc2V0X21ldGFkYXRhX2hhc2hfc2VlZCh1aW50MzJfdCBzZWVkKTsKKyNkZWZpbmUgR1JQQ19NREVMRU1fREFUQShtZCkgXAorICAoKGdycGNfbWRlbGVtX2RhdGEgKikoKG1kKS5wYXlsb2FkICYgfih1aW50cHRyX3QpMykpCisjZGVmaW5lIEdSUENfTURFTEVNX1NUT1JBR0UobWQpIFwKKyAgKChncnBjX21kZWxlbV9kYXRhX3N0b3JhZ2UpKChtZCkucGF5bG9hZCAmICh1aW50cHRyX3QpMykpCisjZGVmaW5lIEdSUENfTUFLRV9NREVMRU0oZGF0YSwgc3RvcmFnZSkgXAorICAoKGdycGNfbWRlbGVtKXsoKHVpbnRwdHJfdCkoZGF0YSkpIHwgKCh1aW50cHRyX3Qpc3RvcmFnZSl9KQorI2RlZmluZSBHUlBDX01ERUxFTV9JU19JTlRFUk5FRChtZCkgICAgICAgICAgXAorICAoKGdycGNfbWRlbGVtX2RhdGFfc3RvcmFnZSkoKG1kKS5wYXlsb2FkICYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnRwdHJfdClHUlBDX01ERUxFTV9TVE9SQUdFX0lOVEVSTkVEX0JJVCkpCiAKLS8qIENvbnN0cnVjdG9ycyBmb3IgZ3JwY19tZHN0ciBpbnN0YW5jZXM7IHRha2UgYSB2YXJpZXR5IG9mIGRhdGEgdHlwZXMgdGhhdAotICAgY2xpZW50cyBtYXkgaGF2ZSBoYW5keSAqLwotZ3JwY19tZHN0ciAqZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhjb25zdCBjaGFyICpzdHIpOwotLyogVW5yZWZzIHRoZSBzbGljZS4gKi8KLWdycGNfbWRzdHIgKmdycGNfbWRzdHJfZnJvbV9zbGljZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19zbGljZSBzbGljZSk7Ci1ncnBjX21kc3RyICpncnBjX21kc3RyX2Zyb21fYnVmZmVyKGNvbnN0IHVpbnQ4X3QgKnN0ciwgc2l6ZV90IGxlbmd0aCk7Ci0KLS8qIFJldHVybnMgYSBib3Jyb3dlZCBzbGljZSBmcm9tIHRoZSBtZHN0ciB3aXRoIGl0cyBjb250ZW50cyBiYXNlNjQgZW5jb2RlZAotICAgYW5kIGh1ZmZtYW4gY29tcHJlc3NlZCAqLwotZ3JwY19zbGljZSBncnBjX21kc3RyX2FzX2Jhc2U2NF9lbmNvZGVkX2FuZF9odWZmbWFuX2NvbXByZXNzZWQoZ3JwY19tZHN0ciAqc3RyKTsKLQotLyogQ29uc3RydWN0b3JzIGZvciBncnBjX21kZWxlbSBpbnN0YW5jZXM7IHRha2UgYSB2YXJpZXR5IG9mIGRhdGEgdHlwZXMgdGhhdAotICAgY2xpZW50cyBtYXkgaGF2ZSBoYW5keSAqLwotZ3JwY19tZGVsZW0gKmdycGNfbWRlbGVtX2Zyb21fbWV0YWRhdGFfc3RyaW5ncyhncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZHN0ciAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kc3RyICp2YWx1ZSk7Ci1ncnBjX21kZWxlbSAqZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBjb25zdCBjaGFyICprZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKIC8qIFVucmVmcyB0aGUgc2xpY2VzLiAqLwotZ3JwY19tZGVsZW0gKmdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHZhbHVlKTsKLWdycGNfbWRlbGVtICpncnBjX21kZWxlbV9mcm9tX3N0cmluZ19hbmRfYnVmZmVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFsdWVfbGVuZ3RoKTsKK2dycGNfbWRlbGVtIGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgdmFsdWUpOwogCi1zaXplX3QgZ3JwY19tZGVsZW1fZ2V0X3NpemVfaW5faHBhY2tfdGFibGUoZ3JwY19tZGVsZW0gKmVsZW0pOworLyogQ2hlYXBseSBjb252ZXJ0IGEgZ3JwY19tZXRhZGF0YSB0byBhIGdycGNfbWRlbGVtOyBtYXkgdXNlIHRoZSBncnBjX21ldGFkYXRhCisgICBvYmplY3QgYXMgYmFja2luZyBzdG9yYWdlIChzbyBsaWZldGltZXMgc2hvdWxkIGFsaWduKSAqLworZ3JwY19tZGVsZW0gZ3JwY19tZGVsZW1fZnJvbV9ncnBjX21ldGFkYXRhKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhKTsKKworLyogRG9lcyBub3QgdW5yZWYgdGhlIHNsaWNlczsgaWYgYSBuZXcgbm9uLWludGVybmVkIG1kZWxlbSBpcyBuZWVkZWQsIGFsbG9jYXRlcworICAgb25lIGlmIGNvbXBhdGlibGVfZXh0ZXJuYWxfYmFja2luZ19zdG9yZSBpcyBOVUxMLCBvciB1c2VzCisgICBjb21wYXRpYmxlX2V4dGVybmFsX2JhY2tpbmdfc3RvcmUgaWYgaXQgaXMgbm9uLU5VTEwgKGluIHdoaWNoIGNhc2UgaXQncyB0aGUKKyAgIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0IG91dGxpdmVzIHVzYWdlKSAqLworZ3JwY19tZGVsZW0gZ3JwY19tZGVsZW1fY3JlYXRlKAorICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIGtleSwgZ3JwY19zbGljZSB2YWx1ZSwKKyAgICBncnBjX21kZWxlbV9kYXRhICpjb21wYXRpYmxlX2V4dGVybmFsX2JhY2tpbmdfc3RvcmUpOworCitib29sIGdycGNfbWRlbGVtX2VxKGdycGNfbWRlbGVtIGEsIGdycGNfbWRlbGVtIGIpOworCitzaXplX3QgZ3JwY19tZGVsZW1fZ2V0X3NpemVfaW5faHBhY2tfdGFibGUoZ3JwY19tZGVsZW0gZWxlbSk7CiAKIC8qIE11dGF0b3IgYW5kIGFjY2Vzc29yIGZvciBncnBjX21kZWxlbSB1c2VyIGRhdGEuIFRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uCiAgICBpcyB1c2VkIGFzIGEgdHlwZSB0YWcgYW5kIGlzIGNoZWNrZWQgZHVyaW5nIHVzZXJfZGF0YSBmZXRjaC4gKi8KLXZvaWQgKmdycGNfbWRlbGVtX2dldF91c2VyX2RhdGEoZ3JwY19tZGVsZW0gKm1kLAordm9pZCAqZ3JwY19tZGVsZW1fZ2V0X3VzZXJfZGF0YShncnBjX21kZWxlbSBtZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmlmX2Rlc3Ryb3lfZnVuYykodm9pZCAqKSk7Ci12b2lkICpncnBjX21kZWxlbV9zZXRfdXNlcl9kYXRhKGdycGNfbWRlbGVtICptZCwgdm9pZCAoKmRlc3Ryb3lfZnVuYykodm9pZCAqKSwKK3ZvaWQgKmdycGNfbWRlbGVtX3NldF91c2VyX2RhdGEoZ3JwY19tZGVsZW0gbWQsIHZvaWQgKCpkZXN0cm95X2Z1bmMpKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CiAKIC8qIFJlZmVyZW5jZSBjb3VudGluZyAqLwogLy8jZGVmaW5lIEdSUENfTUVUQURBVEFfUkVGQ09VTlRfREVCVUcKICNpZmRlZiBHUlBDX01FVEFEQVRBX1JFRkNPVU5UX0RFQlVHCi0jZGVmaW5lIEdSUENfTURTVFJfUkVGKHMpIGdycGNfbWRzdHJfcmVmKChzKSwgX19GSUxFX18sIF9fTElORV9fKQotI2RlZmluZSBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBzKSBcCi0gIGdycGNfbWRzdHJfdW5yZWYoKGV4ZWNfY3R4KSwgKHMpLCBfX0ZJTEVfXywgX19MSU5FX18pCiAjZGVmaW5lIEdSUENfTURFTEVNX1JFRihzKSBncnBjX21kZWxlbV9yZWYoKHMpLCBfX0ZJTEVfXywgX19MSU5FX18pCiAjZGVmaW5lIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBzKSBcCiAgIGdycGNfbWRlbGVtX3VucmVmKChleGVjX2N0eCksIChzKSwgX19GSUxFX18sIF9fTElORV9fKQotZ3JwY19tZHN0ciAqZ3JwY19tZHN0cl9yZWYoZ3JwY19tZHN0ciAqcywgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOwotdm9pZCBncnBjX21kc3RyX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX21kc3RyICpzLCBjb25zdCBjaGFyICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lKTsKLWdycGNfbWRlbGVtICpncnBjX21kZWxlbV9yZWYoZ3JwY19tZGVsZW0gKm1kLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Ci12b2lkIGdycGNfbWRlbGVtX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX21kZWxlbSAqbWQsCitncnBjX21kZWxlbSBncnBjX21kZWxlbV9yZWYoZ3JwY19tZGVsZW0gbWQsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKK3ZvaWQgZ3JwY19tZGVsZW1fdW5yZWYoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfbWRlbGVtIG1kLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CiAjZWxzZQotI2RlZmluZSBHUlBDX01EU1RSX1JFRihzKSBncnBjX21kc3RyX3JlZigocykpCi0jZGVmaW5lIEdSUENfTURTVFJfVU5SRUYoZXhlY19jdHgsIHMpIGdycGNfbWRzdHJfdW5yZWYoKGV4ZWNfY3R4KSwgKHMpKQogI2RlZmluZSBHUlBDX01ERUxFTV9SRUYocykgZ3JwY19tZGVsZW1fcmVmKChzKSkKICNkZWZpbmUgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIHMpIGdycGNfbWRlbGVtX3VucmVmKChleGVjX2N0eCksIChzKSkKLWdycGNfbWRzdHIgKmdycGNfbWRzdHJfcmVmKGdycGNfbWRzdHIgKnMpOwotdm9pZCBncnBjX21kc3RyX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX21kc3RyICpzKTsKLWdycGNfbWRlbGVtICpncnBjX21kZWxlbV9yZWYoZ3JwY19tZGVsZW0gKm1kKTsKLXZvaWQgZ3JwY19tZGVsZW1fdW5yZWYoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfbWRlbGVtICptZCk7CitncnBjX21kZWxlbSBncnBjX21kZWxlbV9yZWYoZ3JwY19tZGVsZW0gbWQpOwordm9pZCBncnBjX21kZWxlbV91bnJlZihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19tZGVsZW0gbWQpOwogI2VuZGlmCiAKLS8qIFJlY292ZXIgYSBjaGFyKiBmcm9tIGEgZ3JwY19tZHN0ci4gVGhlIHJldHVybmVkIHN0cmluZyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICBEb2VzIG5vdCBwcm9taXNlIHRoYXQgdGhlIHJldHVybmVkIHN0cmluZyBoYXMgbm8gZW1iZWRkZWQgbnVsbHMgaG93ZXZlci4gKi8KLWNvbnN0IGNoYXIgKmdycGNfbWRzdHJfYXNfY19zdHJpbmcoY29uc3QgZ3JwY19tZHN0ciAqcyk7CisjZGVmaW5lIEdSUENfTURLRVkobWQpIChHUlBDX01ERUxFTV9EQVRBKG1kKS0+a2V5KQorI2RlZmluZSBHUlBDX01EVkFMVUUobWQpIChHUlBDX01ERUxFTV9EQVRBKG1kKS0+dmFsdWUpCiAKLSNkZWZpbmUgR1JQQ19NRFNUUl9MRU5HVEgocykgKEdSUENfU0xJQ0VfTEVOR1RIKHMtPnNsaWNlKSkKKyNkZWZpbmUgR1JQQ19NRE5VTEwgR1JQQ19NQUtFX01ERUxFTShOVUxMLCBHUlBDX01ERUxFTV9TVE9SQUdFX0VYVEVSTkFMKQorI2RlZmluZSBHUlBDX01ESVNOVUxMKG1kKSAoR1JQQ19NREVMRU1fREFUQShtZCkgPT0gTlVMTCkKIAogLyogV2UgYWRkIDMyIGJ5dGVzIG9mIHBhZGRpbmcgYXMgcGVyIFJGQy03NTQwIHNlY3Rpb24gNi41LjIuICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0xFTkdUSChlKSBcCi0gIChHUlBDX01EU1RSX0xFTkdUSCgoZSktPmtleSkgKyBHUlBDX01EU1RSX0xFTkdUSCgoZSktPnZhbHVlKSArIDMyKQotCi1pbnQgZ3JwY19tZHN0cl9pc19sZWdhbF9oZWFkZXIoZ3JwY19tZHN0ciAqcyk7Ci1pbnQgZ3JwY19tZHN0cl9pc19sZWdhbF9ub25iaW5faGVhZGVyKGdycGNfbWRzdHIgKnMpOwotaW50IGdycGNfbWRzdHJfaXNfYmluX3N1ZmZpeGVkKGdycGNfbWRzdHIgKnMpOworI2RlZmluZSBHUlBDX01ERUxFTV9MRU5HVEgoZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKEdSUENfU0xJQ0VfTEVOR1RIKEdSUENfTURLRVkoKGUpKSkgKyBHUlBDX1NMSUNFX0xFTkdUSChHUlBDX01EVkFMVUUoKGUpKSkgKyBcCisgICAzMikKIAogI2RlZmluZSBHUlBDX01EU1RSX0tWX0hBU0goa19oYXNoLCB2X2hhc2gpIChHUFJfUk9UTCgoa19oYXNoKSwgMikgXiAodl9oYXNoKSkKIAogdm9pZCBncnBjX21kY3R4X2dsb2JhbF9pbml0KHZvaWQpOwogdm9pZCBncnBjX21kY3R4X2dsb2JhbF9zaHV0ZG93bihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCk7CiAKLS8qIEltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IGNodHRwMl90cmFuc3BvcnQgKi8KLWV4dGVybiBncnBjX3NsaWNlICgqZ3JwY19jaHR0cDJfYmFzZTY0X2VuY29kZV9hbmRfaHVmZm1hbl9jb21wcmVzcykoCi0gICAgZ3JwY19zbGljZSBpbnB1dCk7Ci0KICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmMgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmMKaW5kZXggYjYyZWNjMy4uOTViNzFkMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jCisrKyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KIAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9wcm9maWxpbmcvdGltZXJzLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiCiAKIHN0YXRpYyB2b2lkIGFzc2VydF92YWxpZF9saXN0KGdycGNfbWRlbGVtX2xpc3QgKmxpc3QpIHsKICNpZm5kZWYgTkRFQlVHCkBAIC01MSwxNiArNTMsMzQgQEAKICAgR1BSX0FTU0VSVChsaXN0LT50YWlsLT5uZXh0ID09IE5VTEwpOwogICBHUFJfQVNTRVJUKChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpID09IChsaXN0LT5oZWFkLT5uZXh0ID09IE5VTEwpKTsKIAorICBzaXplX3QgdmVyaWZpZWRfY291bnQgPSAwOwogICBmb3IgKGwgPSBsaXN0LT5oZWFkOyBsOyBsID0gbC0+bmV4dCkgewotICAgIEdQUl9BU1NFUlQobC0+bWQpOworICAgIEdQUl9BU1NFUlQoIUdSUENfTURJU05VTEwobC0+bWQpKTsKICAgICBHUFJfQVNTRVJUKChsLT5wcmV2ID09IE5VTEwpID09IChsID09IGxpc3QtPmhlYWQpKTsKICAgICBHUFJfQVNTRVJUKChsLT5uZXh0ID09IE5VTEwpID09IChsID09IGxpc3QtPnRhaWwpKTsKICAgICBpZiAobC0+bmV4dCkgR1BSX0FTU0VSVChsLT5uZXh0LT5wcmV2ID09IGwpOwogICAgIGlmIChsLT5wcmV2KSBHUFJfQVNTRVJUKGwtPnByZXYtPm5leHQgPT0gbCk7CisgICAgdmVyaWZpZWRfY291bnQrKzsKICAgfQorICBHUFJfQVNTRVJUKGxpc3QtPmNvdW50ID09IHZlcmlmaWVkX2NvdW50KTsKICNlbmRpZiAvKiBOREVCVUcgKi8KIH0KIAorc3RhdGljIHZvaWQgYXNzZXJ0X3ZhbGlkX2NhbGxvdXRzKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoKSB7CisjaWZuZGVmIE5ERUJVRworICBmb3IgKGdycGNfbGlua2VkX21kZWxlbSAqbCA9IGJhdGNoLT5saXN0LmhlYWQ7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKKyAgICBncnBjX3NsaWNlIGtleV9pbnRlcm5lZCA9IGdycGNfc2xpY2VfaW50ZXJuKEdSUENfTURLRVkobC0+bWQpKTsKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX2NhbGxvdXRzX2luZGV4IGNhbGxvdXRfaWR4ID0KKyAgICAgICAgR1JQQ19CQVRDSF9JTkRFWF9PRihrZXlfaW50ZXJuZWQpOworICAgIGlmIChjYWxsb3V0X2lkeCAhPSBHUlBDX0JBVENIX0NBTExPVVRTX0NPVU5UKSB7CisgICAgICBHUFJfQVNTRVJUKGJhdGNoLT5pZHguYXJyYXlbY2FsbG91dF9pZHhdID09IGwpOworICAgIH0KKyAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBrZXlfaW50ZXJuZWQpOworICB9CisjZW5kaWYKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9hc3NlcnRfb2soZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gpIHsKICAgYXNzZXJ0X3ZhbGlkX2xpc3QoJmJhdGNoLT5saXN0KTsKQEAgLTY4LDcgKzg4LDcgQEAKICNlbmRpZiAvKiBOREVCVUcgKi8KIAogdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX2luaXQoZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gpIHsKLSAgYmF0Y2gtPmxpc3QuaGVhZCA9IGJhdGNoLT5saXN0LnRhaWwgPSBOVUxMOworICBtZW1zZXQoYmF0Y2gsIDAsIHNpemVvZigqYmF0Y2gpKTsKICAgYmF0Y2gtPmRlYWRsaW5lID0gZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKTsKIH0KIApAQCAtODAsMTcgKzEwMCw1OCBAQAogICB9CiB9CiAKLXZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfaGVhZChncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKmVsZW1fdG9fYWRkKSB7Ci0gIEdQUl9BU1NFUlQoZWxlbV90b19hZGQpOworZ3JwY19lcnJvciAqZ3JwY19hdHRhY2hfbWRfdG9fZXJyb3IoZ3JwY19lcnJvciAqc3JjLCBncnBjX21kZWxlbSBtZCkgeworICBjaGFyICprID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhHUlBDX01ES0VZKG1kKSk7CisgIGNoYXIgKnYgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKEdSUENfTURWQUxVRShtZCkpOworICBncnBjX2Vycm9yICpvdXQgPSBncnBjX2Vycm9yX3NldF9zdHIoCisgICAgICBncnBjX2Vycm9yX3NldF9zdHIoc3JjLCBHUlBDX0VSUk9SX1NUUl9LRVksIGspLCBHUlBDX0VSUk9SX1NUUl9WQUxVRSwgdik7CisgIGdwcl9mcmVlKGspOworICBncHJfZnJlZSh2KTsKKyAgcmV0dXJuIG91dDsKK30KKworc3RhdGljIGdycGNfZXJyb3IgKm1heWJlX2xpbmtfY2FsbG91dChncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlKQorICAgIEdSUENfTVVTVF9VU0VfUkVTVUxUOworCitzdGF0aWMgZ3JwY19lcnJvciAqbWF5YmVfbGlua19jYWxsb3V0KGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UpIHsKKyAgZ3JwY19tZXRhZGF0YV9iYXRjaF9jYWxsb3V0c19pbmRleCBpZHggPQorICAgICAgR1JQQ19CQVRDSF9JTkRFWF9PRihHUlBDX01ES0VZKHN0b3JhZ2UtPm1kKSk7CisgIGlmIChpZHggPT0gR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVCkgeworICAgIHJldHVybiBHUlBDX0VSUk9SX05PTkU7CisgIH0KKyAgaWYgKGJhdGNoLT5pZHguYXJyYXlbaWR4XSA9PSBOVUxMKSB7CisgICAgYmF0Y2gtPmlkeC5hcnJheVtpZHhdID0gc3RvcmFnZTsKKyAgICByZXR1cm4gR1JQQ19FUlJPUl9OT05FOworICB9CisgIHJldHVybiBncnBjX2F0dGFjaF9tZF90b19lcnJvcigKKyAgICAgIEdSUENfRVJST1JfQ1JFQVRFKCJVbmFsbG93ZWQgZHVwbGljYXRlIG1ldGFkYXRhIiksIHN0b3JhZ2UtPm1kKTsKK30KKworc3RhdGljIHZvaWQgbWF5YmVfdW5saW5rX2NhbGxvdXQoZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UpIHsKKyAgZ3JwY19tZXRhZGF0YV9iYXRjaF9jYWxsb3V0c19pbmRleCBpZHggPQorICAgICAgR1JQQ19CQVRDSF9JTkRFWF9PRihHUlBDX01ES0VZKHN0b3JhZ2UtPm1kKSk7CisgIGlmIChpZHggPT0gR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVCkgeworICAgIHJldHVybjsKKyAgfQorICBHUFJfQVNTRVJUKGJhdGNoLT5pZHguYXJyYXlbaWR4XSAhPSBOVUxMKTsKKyAgYmF0Y2gtPmlkeC5hcnJheVtpZHhdID0gTlVMTDsKK30KKworZ3JwY19lcnJvciAqZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfaGVhZChncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gZWxlbV90b19hZGQpIHsKKyAgR1BSX0FTU0VSVCghR1JQQ19NRElTTlVMTChlbGVtX3RvX2FkZCkpOwogICBzdG9yYWdlLT5tZCA9IGVsZW1fdG9fYWRkOwotICBncnBjX21ldGFkYXRhX2JhdGNoX2xpbmtfaGVhZChiYXRjaCwgc3RvcmFnZSk7CisgIHJldHVybiBncnBjX21ldGFkYXRhX2JhdGNoX2xpbmtfaGVhZChleGVjX2N0eCwgYmF0Y2gsIHN0b3JhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5rX2hlYWQoZ3JwY19tZGVsZW1fbGlzdCAqbGlzdCwgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlKSB7CiAgIGFzc2VydF92YWxpZF9saXN0KGxpc3QpOwotICBHUFJfQVNTRVJUKHN0b3JhZ2UtPm1kKTsKKyAgR1BSX0FTU0VSVCghR1JQQ19NRElTTlVMTChzdG9yYWdlLT5tZCkpOwogICBzdG9yYWdlLT5wcmV2ID0gTlVMTDsKICAgc3RvcmFnZS0+bmV4dCA9IGxpc3QtPmhlYWQ7CiAgIGlmIChsaXN0LT5oZWFkICE9IE5VTEwpIHsKQEAgLTk5LDI1ICsxNjAsMzYgQEAKICAgICBsaXN0LT50YWlsID0gc3RvcmFnZTsKICAgfQogICBsaXN0LT5oZWFkID0gc3RvcmFnZTsKKyAgbGlzdC0+Y291bnQrKzsKICAgYXNzZXJ0X3ZhbGlkX2xpc3QobGlzdCk7CiB9CiAKLXZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9saW5rX2hlYWQoZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSkgeworZ3JwY19lcnJvciAqZ3JwY19tZXRhZGF0YV9iYXRjaF9saW5rX2hlYWQoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSkgeworICBhc3NlcnRfdmFsaWRfY2FsbG91dHMoZXhlY19jdHgsIGJhdGNoKTsKKyAgZ3JwY19lcnJvciAqZXJyID0gbWF5YmVfbGlua19jYWxsb3V0KGJhdGNoLCBzdG9yYWdlKTsKKyAgaWYgKGVyciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKKyAgICBhc3NlcnRfdmFsaWRfY2FsbG91dHMoZXhlY19jdHgsIGJhdGNoKTsKKyAgICByZXR1cm4gZXJyOworICB9CiAgIGxpbmtfaGVhZCgmYmF0Y2gtPmxpc3QsIHN0b3JhZ2UpOworICBhc3NlcnRfdmFsaWRfY2FsbG91dHMoZXhlY19jdHgsIGJhdGNoKTsKKyAgcmV0dXJuIEdSUENfRVJST1JfTk9ORTsKIH0KIAotdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqZWxlbV90b19hZGQpIHsKLSAgR1BSX0FTU0VSVChlbGVtX3RvX2FkZCk7CitncnBjX2Vycm9yICpncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSBlbGVtX3RvX2FkZCkgeworICBHUFJfQVNTRVJUKCFHUlBDX01ESVNOVUxMKGVsZW1fdG9fYWRkKSk7CiAgIHN0b3JhZ2UtPm1kID0gZWxlbV90b19hZGQ7Ci0gIGdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua190YWlsKGJhdGNoLCBzdG9yYWdlKTsKKyAgcmV0dXJuIGdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua190YWlsKGV4ZWNfY3R4LCBiYXRjaCwgc3RvcmFnZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtfdGFpbChncnBjX21kZWxlbV9saXN0ICpsaXN0LCBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UpIHsKICAgYXNzZXJ0X3ZhbGlkX2xpc3QobGlzdCk7Ci0gIEdQUl9BU1NFUlQoc3RvcmFnZS0+bWQpOworICBHUFJfQVNTRVJUKCFHUlBDX01ESVNOVUxMKHN0b3JhZ2UtPm1kKSk7CiAgIHN0b3JhZ2UtPnByZXYgPSBsaXN0LT50YWlsOwogICBzdG9yYWdlLT5uZXh0ID0gTlVMTDsKICAgc3RvcmFnZS0+cmVzZXJ2ZWQgPSBOVUxMOwpAQCAtMTI3LDcwICsxOTksODIgQEAKICAgICBsaXN0LT5oZWFkID0gc3RvcmFnZTsKICAgfQogICBsaXN0LT50YWlsID0gc3RvcmFnZTsKKyAgbGlzdC0+Y291bnQrKzsKICAgYXNzZXJ0X3ZhbGlkX2xpc3QobGlzdCk7CiB9CiAKLXZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9saW5rX3RhaWwoZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSkgewotICBsaW5rX3RhaWwoJmJhdGNoLT5saXN0LCBzdG9yYWdlKTsKLX0KLQotdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX21vdmUoZ3JwY19tZXRhZGF0YV9iYXRjaCAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqc3JjKSB7Ci0gICpkc3QgPSAqc3JjOwotICBtZW1zZXQoc3JjLCAwLCBzaXplb2YoZ3JwY19tZXRhZGF0YV9iYXRjaCkpOwotfQotCi12b2lkIGdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKigqZmlsdGVyKShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gKmVsZW0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpIHsKLSAgZ3JwY19saW5rZWRfbWRlbGVtICpsOwotICBncnBjX2xpbmtlZF9tZGVsZW0gKm5leHQ7Ci0KLSAgR1BSX1RJTUVSX0JFR0lOKCJncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlciIsIDApOwotCi0gIGFzc2VydF92YWxpZF9saXN0KCZiYXRjaC0+bGlzdCk7Ci0gIGZvciAobCA9IGJhdGNoLT5saXN0LmhlYWQ7IGw7IGwgPSBuZXh0KSB7Ci0gICAgZ3JwY19tZGVsZW0gKm9yaWcgPSBsLT5tZDsKLSAgICBncnBjX21kZWxlbSAqZmlsdCA9IGZpbHRlcihleGVjX2N0eCwgdXNlcl9kYXRhLCBvcmlnKTsKLSAgICBuZXh0ID0gbC0+bmV4dDsKLSAgICBpZiAoZmlsdCA9PSBOVUxMKSB7Ci0gICAgICBpZiAobC0+cHJldikgewotICAgICAgICBsLT5wcmV2LT5uZXh0ID0gbC0+bmV4dDsKLSAgICAgIH0KLSAgICAgIGlmIChsLT5uZXh0KSB7Ci0gICAgICAgIGwtPm5leHQtPnByZXYgPSBsLT5wcmV2OwotICAgICAgfQotICAgICAgaWYgKGJhdGNoLT5saXN0LmhlYWQgPT0gbCkgewotICAgICAgICBiYXRjaC0+bGlzdC5oZWFkID0gbC0+bmV4dDsKLSAgICAgIH0KLSAgICAgIGlmIChiYXRjaC0+bGlzdC50YWlsID09IGwpIHsKLSAgICAgICAgYmF0Y2gtPmxpc3QudGFpbCA9IGwtPnByZXY7Ci0gICAgICB9Ci0gICAgICBhc3NlcnRfdmFsaWRfbGlzdCgmYmF0Y2gtPmxpc3QpOwotICAgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIGwtPm1kKTsKLSAgICB9IGVsc2UgaWYgKGZpbHQgIT0gb3JpZykgewotICAgICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIG9yaWcpOwotICAgICAgbC0+bWQgPSBmaWx0OwotICAgIH0KK2dycGNfZXJyb3IgKmdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua190YWlsKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UpIHsKKyAgYXNzZXJ0X3ZhbGlkX2NhbGxvdXRzKGV4ZWNfY3R4LCBiYXRjaCk7CisgIGdycGNfZXJyb3IgKmVyciA9IG1heWJlX2xpbmtfY2FsbG91dChiYXRjaCwgc3RvcmFnZSk7CisgIGlmIChlcnIgIT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgYXNzZXJ0X3ZhbGlkX2NhbGxvdXRzKGV4ZWNfY3R4LCBiYXRjaCk7CisgICAgcmV0dXJuIGVycjsKICAgfQotICBhc3NlcnRfdmFsaWRfbGlzdCgmYmF0Y2gtPmxpc3QpOwotCi0gIEdQUl9USU1FUl9FTkQoImdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyIiwgMCk7CisgIGxpbmtfdGFpbCgmYmF0Y2gtPmxpc3QsIHN0b3JhZ2UpOworICBhc3NlcnRfdmFsaWRfY2FsbG91dHMoZXhlY19jdHgsIGJhdGNoKTsKKyAgcmV0dXJuIEdSUENfRVJST1JfTk9ORTsKIH0KIAotc3RhdGljIGdycGNfbWRlbGVtICpub19tZXRhZGF0YV9mb3JfeW91KGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwgZ3JwY19tZGVsZW0gKmVsZW0pIHsKLSAgcmV0dXJuIE5VTEw7CitzdGF0aWMgdm9pZCB1bmxpbmtfc3RvcmFnZShncnBjX21kZWxlbV9saXN0ICpsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlKSB7CisgIGFzc2VydF92YWxpZF9saXN0KGxpc3QpOworICBpZiAoc3RvcmFnZS0+cHJldiAhPSBOVUxMKSB7CisgICAgc3RvcmFnZS0+cHJldi0+bmV4dCA9IHN0b3JhZ2UtPm5leHQ7CisgIH0gZWxzZSB7CisgICAgbGlzdC0+aGVhZCA9IHN0b3JhZ2UtPm5leHQ7CisgIH0KKyAgaWYgKHN0b3JhZ2UtPm5leHQgIT0gTlVMTCkgeworICAgIHN0b3JhZ2UtPm5leHQtPnByZXYgPSBzdG9yYWdlLT5wcmV2OworICB9IGVsc2UgeworICAgIGxpc3QtPnRhaWwgPSBzdG9yYWdlLT5wcmV2OworICB9CisgIGxpc3QtPmNvdW50LS07CisgIGFzc2VydF92YWxpZF9saXN0KGxpc3QpOworfQorCit2b2lkIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlKSB7CisgIGFzc2VydF92YWxpZF9jYWxsb3V0cyhleGVjX2N0eCwgYmF0Y2gpOworICBtYXliZV91bmxpbmtfY2FsbG91dChiYXRjaCwgc3RvcmFnZSk7CisgIHVubGlua19zdG9yYWdlKCZiYXRjaC0+bGlzdCwgc3RvcmFnZSk7CisgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBzdG9yYWdlLT5tZCk7CisgIGFzc2VydF92YWxpZF9jYWxsb3V0cyhleGVjX2N0eCwgYmF0Y2gpOworfQorCit2b2lkIGdycGNfbWV0YWRhdGFfYmF0Y2hfc2V0X3ZhbHVlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgdmFsdWUpIHsKKyAgZ3JwY19tZGVsZW0gb2xkID0gc3RvcmFnZS0+bWQ7CisgIGdycGNfbWRlbGVtIG5ldyA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgZXhlY19jdHgsIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKEdSUENfTURLRVkob2xkKSksIHZhbHVlKTsKKyAgc3RvcmFnZS0+bWQgPSBuZXc7CisgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBvbGQpOworfQorCitncnBjX2Vycm9yICpncnBjX21ldGFkYXRhX2JhdGNoX3N1YnN0aXR1dGUoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtIG5ldykgeworICBncnBjX2Vycm9yICplcnJvciA9IEdSUENfRVJST1JfTk9ORTsKKyAgZ3JwY19tZGVsZW0gb2xkID0gc3RvcmFnZS0+bWQ7CisgIGlmICghZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG5ldyksIEdSUENfTURLRVkob2xkKSkpIHsKKyAgICBtYXliZV91bmxpbmtfY2FsbG91dChiYXRjaCwgc3RvcmFnZSk7CisgICAgc3RvcmFnZS0+bWQgPSBuZXc7CisgICAgZXJyb3IgPSBtYXliZV9saW5rX2NhbGxvdXQoYmF0Y2gsIHN0b3JhZ2UpOworICB9IGVsc2UgeworICAgIHN0b3JhZ2UtPm1kID0gbmV3OworICB9CisgIEdSUENfTURFTEVNX1VOUkVGKGV4ZWNfY3R4LCBvbGQpOworICByZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9jbGVhcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCkgewotICBiYXRjaC0+ZGVhZGxpbmUgPSBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpOwotICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcihleGVjX2N0eCwgYmF0Y2gsIG5vX21ldGFkYXRhX2Zvcl95b3UsIE5VTEwpOworICBncnBjX21ldGFkYXRhX2JhdGNoX2Rlc3Ryb3koZXhlY19jdHgsIGJhdGNoKTsKKyAgZ3JwY19tZXRhZGF0YV9iYXRjaF9pbml0KGJhdGNoKTsKIH0KIAogYm9vbCBncnBjX21ldGFkYXRhX2JhdGNoX2lzX2VtcHR5KGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoKSB7CkBAIC0yMDcsMyArMjkxLDMzIEBACiAgIH0KICAgcmV0dXJuIHNpemU7CiB9CisKK3N0YXRpYyB2b2lkIGFkZF9lcnJvcihncnBjX2Vycm9yICoqY29tcG9zaXRlLCBncnBjX2Vycm9yICplcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21wb3NpdGVfZXJyb3Jfc3RyaW5nKSB7CisgIGlmIChlcnJvciA9PSBHUlBDX0VSUk9SX05PTkUpIHJldHVybjsKKyAgaWYgKCpjb21wb3NpdGUgPT0gR1JQQ19FUlJPUl9OT05FKSB7CisgICAgKmNvbXBvc2l0ZSA9IEdSUENfRVJST1JfQ1JFQVRFKGNvbXBvc2l0ZV9lcnJvcl9zdHJpbmcpOworICB9CisgICpjb21wb3NpdGUgPSBncnBjX2Vycm9yX2FkZF9jaGlsZCgqY29tcG9zaXRlLCBlcnJvcik7Cit9CisKK2dycGNfZXJyb3IgKmdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcl9mdW5jIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21wb3NpdGVfZXJyb3Jfc3RyaW5nKSB7CisgIGdycGNfbGlua2VkX21kZWxlbSAqbCA9IGJhdGNoLT5saXN0LmhlYWQ7CisgIGdycGNfZXJyb3IgKmVycm9yID0gR1JQQ19FUlJPUl9OT05FOworICB3aGlsZSAobCkgeworICAgIGdycGNfbGlua2VkX21kZWxlbSAqbmV4dCA9IGwtPm5leHQ7CisgICAgZ3JwY19maWx0ZXJlZF9tZGVsZW0gbmV3ID0gZnVuYyhleGVjX2N0eCwgdXNlcl9kYXRhLCBsLT5tZCk7CisgICAgYWRkX2Vycm9yKCZlcnJvciwgbmV3LmVycm9yLCBjb21wb3NpdGVfZXJyb3Jfc3RyaW5nKTsKKyAgICBpZiAoR1JQQ19NRElTTlVMTChuZXcubWQpKSB7CisgICAgICBncnBjX21ldGFkYXRhX2JhdGNoX3JlbW92ZShleGVjX2N0eCwgYmF0Y2gsIGwpOworICAgIH0gZWxzZSBpZiAobmV3Lm1kLnBheWxvYWQgIT0gbC0+bWQucGF5bG9hZCkgeworICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaF9zdWJzdGl0dXRlKGV4ZWNfY3R4LCBiYXRjaCwgbCwgbmV3Lm1kKTsKKyAgICB9CisgICAgbCA9IG5leHQ7CisgIH0KKyAgcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5oIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5oCmluZGV4IGMwYmQ1MTcuLjU0NzE1MzkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGFfYmF0Y2guaAorKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmgKQEAgLTQxLDE5ICs0MSwyMSBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9wb3J0X3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3RpbWUuaD4KICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBncnBjX2xpbmtlZF9tZGVsZW0gewotICBncnBjX21kZWxlbSAqbWQ7CisgIGdycGNfbWRlbGVtIG1kOwogICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpuZXh0OwogICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpwcmV2OwogICB2b2lkICpyZXNlcnZlZDsKIH0gZ3JwY19saW5rZWRfbWRlbGVtOwogCiB0eXBlZGVmIHN0cnVjdCBncnBjX21kZWxlbV9saXN0IHsKKyAgc2l6ZV90IGNvdW50OwogICBncnBjX2xpbmtlZF9tZGVsZW0gKmhlYWQ7CiAgIGdycGNfbGlua2VkX21kZWxlbSAqdGFpbDsKIH0gZ3JwY19tZGVsZW1fbGlzdDsKQEAgLTYxLDYgKzYzLDcgQEAKIHR5cGVkZWYgc3RydWN0IGdycGNfbWV0YWRhdGFfYmF0Y2ggewogICAvKiogTWV0YWRhdGEgZWxlbWVudHMgaW4gdGhpcyBiYXRjaCAqLwogICBncnBjX21kZWxlbV9saXN0IGxpc3Q7CisgIGdycGNfbWV0YWRhdGFfYmF0Y2hfY2FsbG91dHMgaWR4OwogICAvKiogVXNlZCB0byBjYWxjdWxhdGUgZ3JwYy10aW1lb3V0IGF0IHRoZSBwb2ludCBvZiBzZW5kaW5nLAogICAgICAgb3IgZ3ByX2luZl9mdXR1cmUgaWYgdGhpcyBiYXRjaCBkb2VzIG5vdCBuZWVkIHRvIHNlbmQgYQogICAgICAgZ3JwYy10aW1lb3V0ICovCkBAIC03NywyNSArODAsMzcgQEAKIC8qIFJldHVybnMgdGhlIHRyYW5zcG9ydCBzaXplIG9mIHRoZSBiYXRjaC4gKi8KIHNpemVfdCBncnBjX21ldGFkYXRhX2JhdGNoX3NpemUoZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gpOwogCi0vKiogTW92ZXMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZyb20gXGEgc3JjIHRvIFxhIGRzdC4gVXBvbiByZXR1cm4sIFxhIHNyYyBpcwotICogemVyb2VkLiAqLwotdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX21vdmUoZ3JwY19tZXRhZGF0YV9iYXRjaCAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqc3JjKTsKKy8qKiBSZW1vdmUgXGEgc3RvcmFnZSBmcm9tIHRoZSBiYXRjaCwgdW5yZWZmaW5nIHRoZSBtZGVsZW0gY29udGFpbmVkICovCit2b2lkIGdycGNfbWV0YWRhdGFfYmF0Y2hfcmVtb3ZlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlKTsKKworLyoqIFN1YnN0aXR1dGUgYSBuZXcgbWRlbGVtIGZvciBhbiBvbGQgdmFsdWUgKi8KK2dycGNfZXJyb3IgKmdycGNfbWV0YWRhdGFfYmF0Y2hfc3Vic3RpdHV0ZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZGVsZW0gbmV3X3ZhbHVlKTsKKwordm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX3NldF92YWx1ZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHZhbHVlKTsKIAogLyoqIEFkZCBcYSBzdG9yYWdlIHRvIHRoZSBiZWdpbm5pbmcgb2YgXGEgYmF0Y2guIHN0b3JhZ2UtPm1kIGlzCiAgICAgYXNzdW1lZCB0byBiZSB2YWxpZC4KICAgICBcYSBzdG9yYWdlIGlzIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIG11c3Qgc3Vydml2ZSBmb3IgdGhlCiAgICAgbGlmZXRpbWUgb2YgYmF0Y2guIFRoaXMgdXN1YWxseSBtZWFucyBpdCBzaG91bGQgYmUgYXJvdW5kCiAgICAgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY2FsbC4gKi8KLXZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9saW5rX2hlYWQoZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSk7CitncnBjX2Vycm9yICpncnBjX21ldGFkYXRhX2JhdGNoX2xpbmtfaGVhZCgKKyAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlKSBHUlBDX01VU1RfVVNFX1JFU1VMVDsKIC8qKiBBZGQgXGEgc3RvcmFnZSB0byB0aGUgZW5kIG9mIFxhIGJhdGNoLiBzdG9yYWdlLT5tZCBpcwogICAgIGFzc3VtZWQgdG8gYmUgdmFsaWQuCiAgICAgXGEgc3RvcmFnZSBpcyBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBtdXN0IHN1cnZpdmUgZm9yIHRoZQogICAgIGxpZmV0aW1lIG9mIGJhdGNoLiBUaGlzIHVzdWFsbHkgbWVhbnMgaXQgc2hvdWxkIGJlIGFyb3VuZAogICAgIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNhbGwuICovCi12b2lkIGdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua190YWlsKGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2xpbmtlZF9tZGVsZW0gKnN0b3JhZ2UpOworZ3JwY19lcnJvciAqZ3JwY19tZXRhZGF0YV9iYXRjaF9saW5rX3RhaWwoCisgICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAorICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSkgR1JQQ19NVVNUX1VTRV9SRVNVTFQ7CiAKIC8qKiBBZGQgXGEgZWxlbV90b19hZGQgYXMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gXGEgYmF0Y2gsIHVzaW5nCiAgICAgXGEgc3RvcmFnZSBhcyBiYWNraW5nIHN0b3JhZ2UgZm9yIHRoZSBsaW5rZWQgbGlzdCBlbGVtZW50LgpAQCAtMTAzLDI5ICsxMTgsMzggQEAKICAgICBsaWZldGltZSBvZiBiYXRjaC4gVGhpcyB1c3VhbGx5IG1lYW5zIGl0IHNob3VsZCBiZSBhcm91bmQKICAgICBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjYWxsLgogICAgIFRha2VzIG93bmVyc2hpcCBvZiBcYSBlbGVtX3RvX2FkZCAqLwotdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF9oZWFkKGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqZWxlbV90b19hZGQpOworZ3JwY19lcnJvciAqZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfaGVhZCgKKyAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlLCBncnBjX21kZWxlbSBlbGVtX3RvX2FkZCkgR1JQQ19NVVNUX1VTRV9SRVNVTFQ7CiAvKiogQWRkIFxhIGVsZW1fdG9fYWRkIGFzIHRoZSBsYXN0IGVsZW1lbnQgaW4gXGEgYmF0Y2gsIHVzaW5nCiAgICAgXGEgc3RvcmFnZSBhcyBiYWNraW5nIHN0b3JhZ2UgZm9yIHRoZSBsaW5rZWQgbGlzdCBlbGVtZW50LgogICAgIFxhIHN0b3JhZ2UgaXMgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgbXVzdCBzdXJ2aXZlIGZvciB0aGUKICAgICBsaWZldGltZSBvZiBiYXRjaC4gVGhpcyB1c3VhbGx5IG1lYW5zIGl0IHNob3VsZCBiZSBhcm91bmQKICAgICBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjYWxsLgogICAgIFRha2VzIG93bmVyc2hpcCBvZiBcYSBlbGVtX3RvX2FkZCAqLwotdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX2FkZF90YWlsKGdycGNfbWV0YWRhdGFfYmF0Y2ggKmJhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbGlua2VkX21kZWxlbSAqc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21kZWxlbSAqZWxlbV90b19hZGQpOworZ3JwY19lcnJvciAqZ3JwY19tZXRhZGF0YV9iYXRjaF9hZGRfdGFpbCgKKyAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCisgICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlLCBncnBjX21kZWxlbSBlbGVtX3RvX2FkZCkgR1JQQ19NVVNUX1VTRV9SRVNVTFQ7CiAKLS8qKiBGb3IgZWFjaCBlbGVtZW50IGluIFxhIGJhdGNoLCBleGVjdXRlIFxhIGZpbHRlci4KLSAgICBUaGUgcmV0dXJuIHZhbHVlIGZyb20gXGEgZmlsdGVyIHdpbGwgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoZQotICAgIGdycGNfbWRlbGVtIHBhc3NlZCB0byBcYSBmaWx0ZXIuIElmIFxhIGZpbHRlciByZXR1cm5zIE5VTEwsCi0gICAgdGhlIGVsZW1lbnQgd2lsbCBiZSBtb3ZlZCB0byB0aGUgZ2FyYmFnZSBsaXN0LiAqLwotdm9pZCBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9iYXRjaCAqYmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICooKmZpbHRlcikoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtICplbGVtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKK2dycGNfZXJyb3IgKmdycGNfYXR0YWNoX21kX3RvX2Vycm9yKGdycGNfZXJyb3IgKnNyYywgZ3JwY19tZGVsZW0gbWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGdycGNfZXJyb3IgKmVycm9yOworICBncnBjX21kZWxlbSBtZDsKK30gZ3JwY19maWx0ZXJlZF9tZGVsZW07CisKKyNkZWZpbmUgR1JQQ19GSUxURVJFRF9FUlJPUihlcnJvcikgXAorICAoKGdycGNfZmlsdGVyZWRfbWRlbGVtKXsoZXJyb3IpLCBHUlBDX01ETlVMTH0pCisjZGVmaW5lIEdSUENfRklMVEVSRURfTURFTEVNKG1kKSAoKGdycGNfZmlsdGVyZWRfbWRlbGVtKXtHUlBDX0VSUk9SX05PTkUsIChtZCl9KQorI2RlZmluZSBHUlBDX0ZJTFRFUkVEX1JFTU9WRSgpIFwKKyAgKChncnBjX2ZpbHRlcmVkX21kZWxlbSl7R1JQQ19FUlJPUl9OT05FLCBHUlBDX01ETlVMTH0pCisKK3R5cGVkZWYgZ3JwY19maWx0ZXJlZF9tZGVsZW0gKCpncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcl9mdW5jKSgKKyAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdXNlcl9kYXRhLCBncnBjX21kZWxlbSBlbGVtKTsKK2dycGNfZXJyb3IgKmdycGNfbWV0YWRhdGFfYmF0Y2hfZmlsdGVyKAorICAgIGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX21ldGFkYXRhX2JhdGNoICpiYXRjaCwKKyAgICBncnBjX21ldGFkYXRhX2JhdGNoX2ZpbHRlcl9mdW5jIGZ1bmMsIHZvaWQgKnVzZXJfZGF0YSwKKyAgICBjb25zdCBjaGFyICpjb21wb3NpdGVfZXJyb3Jfc3RyaW5nKSBHUlBDX01VU1RfVVNFX1JFU1VMVDsKIAogI2lmbmRlZiBOREVCVUcKIHZvaWQgZ3JwY19tZXRhZGF0YV9iYXRjaF9hc3NlcnRfb2soZ3JwY19tZXRhZGF0YV9iYXRjaCAqY29tZCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGhvZF9jb25maWcuYyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0aG9kX2NvbmZpZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWZiNTRiLi4wMDAwMDAwCi0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0aG9kX2NvbmZpZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgMjAxNSwgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotCi0jaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRob2RfY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdycGMvaW1wbC9jb2RlZ2VuL2dycGNfdHlwZXMuaD4KLSNpbmNsdWRlIDxncnBjL3N1cHBvcnQvYWxsb2MuaD4KLSNpbmNsdWRlIDxncnBjL3N1cHBvcnQvbG9nLmg+Ci0jaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3N0cmluZ191dGlsLmg+Ci0jaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3RpbWUuaD4KLQotI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5oIgotI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKLQotLy8KLS8vIGdycGNfbWV0aG9kX2NvbmZpZwotLy8KLQotLy8gYm9vbCB2dGFibGUKLQotc3RhdGljIHZvaWQqIGJvb2xfY29weSh2b2lkKiB2YWx1ZXApIHsKLSAgYm9vbCB2YWx1ZSA9ICooYm9vbCopdmFsdWVwOwotICBib29sKiBuZXdfdmFsdWUgPSBncHJfbWFsbG9jKHNpemVvZihib29sKSk7Ci0gICpuZXdfdmFsdWUgPSB2YWx1ZTsKLSAgcmV0dXJuIG5ld192YWx1ZTsKLX0KLQotc3RhdGljIGludCBib29sX2NtcCh2b2lkKiB2MSwgdm9pZCogdjIpIHsKLSAgYm9vbCBiMSA9ICooYm9vbCopdjE7Ci0gIGJvb2wgYjIgPSAqKGJvb2wqKXYyOwotICBpZiAoIWIxICYmIGIyKSByZXR1cm4gLTE7Ci0gIGlmIChiMSAmJiAhYjIpIHJldHVybiAxOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9tZW0oZ3JwY19leGVjX2N0eCogZXhlY19jdHgsIHZvaWQqIHApIHsgZ3ByX2ZyZWUocCk7IH0KLQotc3RhdGljIGdycGNfbWRzdHJfaGFzaF90YWJsZV92dGFibGUgYm9vbF92dGFibGUgPSB7ZnJlZV9tZW0sIGJvb2xfY29weSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfY21wfTsKLQotLy8gdGltZXNwZWMgdnRhYmxlCi0KLXN0YXRpYyB2b2lkKiB0aW1lc3BlY19jb3B5KHZvaWQqIHZhbHVlcCkgewotICBncHJfdGltZXNwZWMgdmFsdWUgPSAqKGdwcl90aW1lc3BlYyopdmFsdWVwOwotICBncHJfdGltZXNwZWMqIG5ld192YWx1ZSA9IGdwcl9tYWxsb2Moc2l6ZW9mKGdwcl90aW1lc3BlYykpOwotICAqbmV3X3ZhbHVlID0gdmFsdWU7Ci0gIHJldHVybiBuZXdfdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbnQgdGltZXNwZWNfY21wKHZvaWQqIHYxLCB2b2lkKiB2MikgewotICByZXR1cm4gZ3ByX3RpbWVfY21wKCooZ3ByX3RpbWVzcGVjKil2MSwgKihncHJfdGltZXNwZWMqKXYyKTsKLX0KLQotc3RhdGljIGdycGNfbWRzdHJfaGFzaF90YWJsZV92dGFibGUgdGltZXNwZWNfdnRhYmxlID0ge2ZyZWVfbWVtLCB0aW1lc3BlY19jb3B5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzcGVjX2NtcH07Ci0KLS8vIGludDMyIHZ0YWJsZQotCi1zdGF0aWMgdm9pZCogaW50MzJfY29weSh2b2lkKiB2YWx1ZXApIHsKLSAgaW50MzJfdCB2YWx1ZSA9ICooaW50MzJfdCopdmFsdWVwOwotICBpbnQzMl90KiBuZXdfdmFsdWUgPSBncHJfbWFsbG9jKHNpemVvZihpbnQzMl90KSk7Ci0gICpuZXdfdmFsdWUgPSB2YWx1ZTsKLSAgcmV0dXJuIG5ld192YWx1ZTsKLX0KLQotc3RhdGljIGludCBpbnQzMl9jbXAodm9pZCogdjEsIHZvaWQqIHYyKSB7Ci0gIGludDMyX3QgaTEgPSAqKGludDMyX3QqKXYxOwotICBpbnQzMl90IGkyID0gKihpbnQzMl90Kil2MjsKLSAgaWYgKGkxIDwgaTIpIHJldHVybiAtMTsKLSAgaWYgKGkxID4gaTIpIHJldHVybiAxOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdycGNfbWRzdHJfaGFzaF90YWJsZV92dGFibGUgaW50MzJfdnRhYmxlID0ge2ZyZWVfbWVtLCBpbnQzMl9jb3B5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX2NtcH07Ci0KLS8vIEhhc2ggdGFibGUga2V5cy4KLSNkZWZpbmUgR1JQQ19NRVRIT0RfQ09ORklHX1dBSVRfRk9SX1JFQURZICJncnBjLndhaXRfZm9yX3JlYWR5IiAgLy8gYm9vbAotI2RlZmluZSBHUlBDX01FVEhPRF9DT05GSUdfVElNRU9VVCAiZ3JwYy50aW1lb3V0IiAgICAgICAgICAgICAgICAvLyBncHJfdGltZXNwZWMKLSNkZWZpbmUgR1JQQ19NRVRIT0RfQ09ORklHX01BWF9SRVFVRVNUX01FU1NBR0VfQllURVMgXAotICAiZ3JwYy5tYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzIiAgLy8gaW50MzIKLSNkZWZpbmUgR1JQQ19NRVRIT0RfQ09ORklHX01BWF9SRVNQT05TRV9NRVNTQUdFX0JZVEVTIFwKLSAgImdycGMubWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXMiICAvLyBpbnQzMgotCi1zdHJ1Y3QgZ3JwY19tZXRob2RfY29uZmlnIHsKLSAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiB0YWJsZTsKLSAgZ3JwY19tZHN0ciogd2FpdF9mb3JfcmVhZHlfa2V5OwotICBncnBjX21kc3RyKiB0aW1lb3V0X2tleTsKLSAgZ3JwY19tZHN0ciogbWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlc19rZXk7Ci0gIGdycGNfbWRzdHIqIG1heF9yZXNwb25zZV9tZXNzYWdlX2J5dGVzX2tleTsKLX07Ci0KLWdycGNfbWV0aG9kX2NvbmZpZyogZ3JwY19tZXRob2RfY29uZmlnX2NyZWF0ZSgKLSAgICBib29sKiB3YWl0X2Zvcl9yZWFkeSwgZ3ByX3RpbWVzcGVjKiB0aW1lb3V0LAotICAgIGludDMyX3QqIG1heF9yZXF1ZXN0X21lc3NhZ2VfYnl0ZXMsIGludDMyX3QqIG1heF9yZXNwb25zZV9tZXNzYWdlX2J5dGVzKSB7Ci0gIGdycGNfbWV0aG9kX2NvbmZpZyogbWV0aG9kX2NvbmZpZyA9IGdwcl9tYWxsb2Moc2l6ZW9mKGdycGNfbWV0aG9kX2NvbmZpZykpOwotICBtZW1zZXQobWV0aG9kX2NvbmZpZywgMCwgc2l6ZW9mKGdycGNfbWV0aG9kX2NvbmZpZykpOwotICBtZXRob2RfY29uZmlnLT53YWl0X2Zvcl9yZWFkeV9rZXkgPQotICAgICAgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhHUlBDX01FVEhPRF9DT05GSUdfV0FJVF9GT1JfUkVBRFkpOwotICBtZXRob2RfY29uZmlnLT50aW1lb3V0X2tleSA9Ci0gICAgICBncnBjX21kc3RyX2Zyb21fc3RyaW5nKEdSUENfTUVUSE9EX0NPTkZJR19USU1FT1VUKTsKLSAgbWV0aG9kX2NvbmZpZy0+bWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlc19rZXkgPQotICAgICAgZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhHUlBDX01FVEhPRF9DT05GSUdfTUFYX1JFUVVFU1RfTUVTU0FHRV9CWVRFUyk7Ci0gIG1ldGhvZF9jb25maWctPm1heF9yZXNwb25zZV9tZXNzYWdlX2J5dGVzX2tleSA9Ci0gICAgICBncnBjX21kc3RyX2Zyb21fc3RyaW5nKEdSUENfTUVUSE9EX0NPTkZJR19NQVhfUkVTUE9OU0VfTUVTU0FHRV9CWVRFUyk7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV9lbnRyeSBlbnRyaWVzWzRdOwotICBzaXplX3QgbnVtX2VudHJpZXMgPSAwOwotICBpZiAod2FpdF9mb3JfcmVhZHkgIT0gTlVMTCkgewotICAgIGVudHJpZXNbbnVtX2VudHJpZXNdLmtleSA9IG1ldGhvZF9jb25maWctPndhaXRfZm9yX3JlYWR5X2tleTsKLSAgICBlbnRyaWVzW251bV9lbnRyaWVzXS52YWx1ZSA9IHdhaXRfZm9yX3JlYWR5OwotICAgIGVudHJpZXNbbnVtX2VudHJpZXNdLnZ0YWJsZSA9ICZib29sX3Z0YWJsZTsKLSAgICArK251bV9lbnRyaWVzOwotICB9Ci0gIGlmICh0aW1lb3V0ICE9IE5VTEwpIHsKLSAgICBlbnRyaWVzW251bV9lbnRyaWVzXS5rZXkgPSBtZXRob2RfY29uZmlnLT50aW1lb3V0X2tleTsKLSAgICBlbnRyaWVzW251bV9lbnRyaWVzXS52YWx1ZSA9IHRpbWVvdXQ7Ci0gICAgZW50cmllc1tudW1fZW50cmllc10udnRhYmxlID0gJnRpbWVzcGVjX3Z0YWJsZTsKLSAgICArK251bV9lbnRyaWVzOwotICB9Ci0gIGlmIChtYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzICE9IE5VTEwpIHsKLSAgICBlbnRyaWVzW251bV9lbnRyaWVzXS5rZXkgPSBtZXRob2RfY29uZmlnLT5tYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzX2tleTsKLSAgICBlbnRyaWVzW251bV9lbnRyaWVzXS52YWx1ZSA9IG1heF9yZXF1ZXN0X21lc3NhZ2VfYnl0ZXM7Ci0gICAgZW50cmllc1tudW1fZW50cmllc10udnRhYmxlID0gJmludDMyX3Z0YWJsZTsKLSAgICArK251bV9lbnRyaWVzOwotICB9Ci0gIGlmIChtYXhfcmVzcG9uc2VfbWVzc2FnZV9ieXRlcyAhPSBOVUxMKSB7Ci0gICAgZW50cmllc1tudW1fZW50cmllc10ua2V5ID0gbWV0aG9kX2NvbmZpZy0+bWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXNfa2V5OwotICAgIGVudHJpZXNbbnVtX2VudHJpZXNdLnZhbHVlID0gbWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXM7Ci0gICAgZW50cmllc1tudW1fZW50cmllc10udnRhYmxlID0gJmludDMyX3Z0YWJsZTsKLSAgICArK251bV9lbnRyaWVzOwotICB9Ci0gIG1ldGhvZF9jb25maWctPnRhYmxlID0gZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2NyZWF0ZShudW1fZW50cmllcywgZW50cmllcyk7Ci0gIHJldHVybiBtZXRob2RfY29uZmlnOwotfQotCi1ncnBjX21ldGhvZF9jb25maWcqIGdycGNfbWV0aG9kX2NvbmZpZ19yZWYoZ3JwY19tZXRob2RfY29uZmlnKiBtZXRob2RfY29uZmlnKSB7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV9yZWYobWV0aG9kX2NvbmZpZy0+dGFibGUpOwotICByZXR1cm4gbWV0aG9kX2NvbmZpZzsKLX0KLQotdm9pZCBncnBjX21ldGhvZF9jb25maWdfdW5yZWYoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpIHsKLSAgaWYgKGdycGNfbWRzdHJfaGFzaF90YWJsZV91bnJlZihleGVjX2N0eCwgbWV0aG9kX2NvbmZpZy0+dGFibGUpKSB7Ci0gICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgbWV0aG9kX2NvbmZpZy0+d2FpdF9mb3JfcmVhZHlfa2V5KTsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBtZXRob2RfY29uZmlnLT50aW1lb3V0X2tleSk7Ci0gICAgR1JQQ19NRFNUUl9VTlJFRihleGVjX2N0eCwgbWV0aG9kX2NvbmZpZy0+bWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlc19rZXkpOwotICAgIEdSUENfTURTVFJfVU5SRUYoZXhlY19jdHgsIG1ldGhvZF9jb25maWctPm1heF9yZXNwb25zZV9tZXNzYWdlX2J5dGVzX2tleSk7Ci0gICAgZ3ByX2ZyZWUobWV0aG9kX2NvbmZpZyk7Ci0gIH0KLX0KLQotaW50IGdycGNfbWV0aG9kX2NvbmZpZ19jbXAoY29uc3QgZ3JwY19tZXRob2RfY29uZmlnKiBtZXRob2RfY29uZmlnMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZyogbWV0aG9kX2NvbmZpZzIpIHsKLSAgcmV0dXJuIGdycGNfbWRzdHJfaGFzaF90YWJsZV9jbXAobWV0aG9kX2NvbmZpZzEtPnRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY29uZmlnMi0+dGFibGUpOwotfQotCi1jb25zdCBib29sKiBncnBjX21ldGhvZF9jb25maWdfZ2V0X3dhaXRfZm9yX3JlYWR5KAotICAgIGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZyogbWV0aG9kX2NvbmZpZykgewotICByZXR1cm4gZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2dldChtZXRob2RfY29uZmlnLT50YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NvbmZpZy0+d2FpdF9mb3JfcmVhZHlfa2V5KTsKLX0KLQotY29uc3QgZ3ByX3RpbWVzcGVjKiBncnBjX21ldGhvZF9jb25maWdfZ2V0X3RpbWVvdXQoCi0gICAgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnKiBtZXRob2RfY29uZmlnKSB7Ci0gIHJldHVybiBncnBjX21kc3RyX2hhc2hfdGFibGVfZ2V0KG1ldGhvZF9jb25maWctPnRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY29uZmlnLT50aW1lb3V0X2tleSk7Ci19Ci0KLWNvbnN0IGludDMyX3QqIGdycGNfbWV0aG9kX2NvbmZpZ19nZXRfbWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlcygKLSAgICBjb25zdCBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpIHsKLSAgcmV0dXJuIGdycGNfbWRzdHJfaGFzaF90YWJsZV9nZXQoCi0gICAgICBtZXRob2RfY29uZmlnLT50YWJsZSwgbWV0aG9kX2NvbmZpZy0+bWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlc19rZXkpOwotfQotCi1jb25zdCBpbnQzMl90KiBncnBjX21ldGhvZF9jb25maWdfZ2V0X21heF9yZXNwb25zZV9tZXNzYWdlX2J5dGVzKAotICAgIGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZyogbWV0aG9kX2NvbmZpZykgewotICByZXR1cm4gZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2dldCgKLSAgICAgIG1ldGhvZF9jb25maWctPnRhYmxlLCBtZXRob2RfY29uZmlnLT5tYXhfcmVzcG9uc2VfbWVzc2FnZV9ieXRlc19rZXkpOwotfQotCi0vLwotLy8gZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlCi0vLwotCi1zdGF0aWMgdm9pZCBtZXRob2RfY29uZmlnX3VucmVmKGdycGNfZXhlY19jdHgqIGV4ZWNfY3R4LCB2b2lkKiB2YWx1ZXApIHsKLSAgZ3JwY19tZXRob2RfY29uZmlnX3VucmVmKGV4ZWNfY3R4LCB2YWx1ZXApOwotfQotCi1zdGF0aWMgdm9pZCogbWV0aG9kX2NvbmZpZ19yZWYodm9pZCogdmFsdWVwKSB7Ci0gIHJldHVybiBncnBjX21ldGhvZF9jb25maWdfcmVmKHZhbHVlcCk7Ci19Ci0KLXN0YXRpYyBpbnQgbWV0aG9kX2NvbmZpZ19jbXAodm9pZCogdmFsdWVwMSwgdm9pZCogdmFsdWVwMikgewotICByZXR1cm4gZ3JwY19tZXRob2RfY29uZmlnX2NtcCh2YWx1ZXAxLCB2YWx1ZXAyKTsKLX0KLQotc3RhdGljIGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZV92dGFibGUgbWV0aG9kX2NvbmZpZ190YWJsZV92dGFibGUgPSB7Ci0gICAgbWV0aG9kX2NvbmZpZ191bnJlZiwgbWV0aG9kX2NvbmZpZ19yZWYsIG1ldGhvZF9jb25maWdfY21wfTsKLQotZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiBncnBjX21ldGhvZF9jb25maWdfdGFibGVfY3JlYXRlKAotICAgIHNpemVfdCBudW1fZW50cmllcywgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX2VudHJ5KiBlbnRyaWVzKSB7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV9lbnRyeSogaGFzaF90YWJsZV9lbnRyaWVzID0KLSAgICAgIGdwcl9tYWxsb2Moc2l6ZW9mKGdycGNfbWRzdHJfaGFzaF90YWJsZV9lbnRyeSkgKiBudW1fZW50cmllcyk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7ICsraSkgewotICAgIGhhc2hfdGFibGVfZW50cmllc1tpXS5rZXkgPSBlbnRyaWVzW2ldLm1ldGhvZF9uYW1lOwotICAgIGhhc2hfdGFibGVfZW50cmllc1tpXS52YWx1ZSA9IGVudHJpZXNbaV0ubWV0aG9kX2NvbmZpZzsKLSAgICBoYXNoX3RhYmxlX2VudHJpZXNbaV0udnRhYmxlID0gJm1ldGhvZF9jb25maWdfdGFibGVfdnRhYmxlOwotICB9Ci0gIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogbWV0aG9kX2NvbmZpZ190YWJsZSA9Ci0gICAgICBncnBjX21kc3RyX2hhc2hfdGFibGVfY3JlYXRlKG51bV9lbnRyaWVzLCBoYXNoX3RhYmxlX2VudHJpZXMpOwotICBncHJfZnJlZShoYXNoX3RhYmxlX2VudHJpZXMpOwotICByZXR1cm4gbWV0aG9kX2NvbmZpZ190YWJsZTsKLX0KLQotZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiBncnBjX21ldGhvZF9jb25maWdfdGFibGVfcmVmKAotICAgIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogdGFibGUpIHsKLSAgcmV0dXJuIGdycGNfbWRzdHJfaGFzaF90YWJsZV9yZWYodGFibGUpOwotfQotCi12b2lkIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV91bnJlZihncnBjX2V4ZWNfY3R4KiBleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogdGFibGUpIHsKLSAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3VucmVmKGV4ZWNfY3R4LCB0YWJsZSk7Ci19Ci0KLWludCBncnBjX21ldGhvZF9jb25maWdfdGFibGVfY21wKGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogdGFibGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiB0YWJsZTIpIHsKLSAgcmV0dXJuIGdycGNfbWRzdHJfaGFzaF90YWJsZV9jbXAodGFibGUxLCB0YWJsZTIpOwotfQotCi12b2lkKiBncnBjX21ldGhvZF9jb25maWdfdGFibGVfZ2V0KGdycGNfZXhlY19jdHgqIGV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnBjX21kc3RyX2hhc2hfdGFibGUqIHRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnBjX21kc3RyKiBwYXRoKSB7Ci0gIHZvaWQqIHZhbHVlID0gZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2dldCh0YWJsZSwgcGF0aCk7Ci0gIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgbWF0Y2ggZm9yIHRoZSBwYXRoLCB0cnkgbG9va2luZyBmb3IgYSB3aWxkY2FyZAotICAvLyBlbnRyeSAoaS5lLiwgY2hhbmdlICIvc2VydmljZS9tZXRob2QiIHRvICIvc2VydmljZS8qIikuCi0gIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgY29uc3QgY2hhciogcGF0aF9zdHIgPSBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKHBhdGgpOwotICAgIGNvbnN0IGNoYXIqIHNlcCA9IHN0cnJjaHIocGF0aF9zdHIsICcvJykgKyAxOwotICAgIGNvbnN0IHNpemVfdCBsZW4gPSAoc2l6ZV90KShzZXAgLSBwYXRoX3N0cik7Ci0gICAgY2hhciogYnVmID0gZ3ByX21hbGxvYyhsZW4gKyAyKTsgIC8vICcqJyBhbmQgTlVMCi0gICAgbWVtY3B5KGJ1ZiwgcGF0aF9zdHIsIGxlbik7Ci0gICAgYnVmW2xlbl0gPSAnKic7Ci0gICAgYnVmW2xlbiArIDFdID0gJ1wwJzsKLSAgICBncnBjX21kc3RyKiB3aWxkY2FyZF9wYXRoID0gZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhidWYpOwotICAgIGdwcl9mcmVlKGJ1Zik7Ci0gICAgdmFsdWUgPSBncnBjX21kc3RyX2hhc2hfdGFibGVfZ2V0KHRhYmxlLCB3aWxkY2FyZF9wYXRoKTsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCB3aWxkY2FyZF9wYXRoKTsKLSAgfQotICByZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lkKiBjb3B5X2FyZyh2b2lkKiBwKSB7IHJldHVybiBncnBjX21ldGhvZF9jb25maWdfdGFibGVfcmVmKHApOyB9Ci0KLXN0YXRpYyB2b2lkIGRlc3Ryb3lfYXJnKGdycGNfZXhlY19jdHgqIGV4ZWNfY3R4LCB2b2lkKiBwKSB7Ci0gIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV91bnJlZihleGVjX2N0eCwgcCk7Ci19Ci0KLXN0YXRpYyBpbnQgY21wX2FyZyh2b2lkKiBwMSwgdm9pZCogcDIpIHsKLSAgcmV0dXJuIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV9jbXAocDEsIHAyKTsKLX0KLQotc3RhdGljIGdycGNfYXJnX3BvaW50ZXJfdnRhYmxlIGFyZ192dGFibGUgPSB7Y29weV9hcmcsIGRlc3Ryb3lfYXJnLCBjbXBfYXJnfTsKLQotZ3JwY19hcmcgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX2NyZWF0ZV9jaGFubmVsX2FyZygKLSAgICBncnBjX21ldGhvZF9jb25maWdfdGFibGUqIHRhYmxlKSB7Ci0gIGdycGNfYXJnIGFyZzsKLSAgYXJnLnR5cGUgPSBHUlBDX0FSR19QT0lOVEVSOwotICBhcmcua2V5ID0gR1JQQ19BUkdfU0VSVklDRV9DT05GSUc7Ci0gIGFyZy52YWx1ZS5wb2ludGVyLnAgPSB0YWJsZTsKLSAgYXJnLnZhbHVlLnBvaW50ZXIudnRhYmxlID0gJmFyZ192dGFibGU7Ci0gIHJldHVybiBhcmc7Ci19Ci0KLS8vIFN0YXRlIHVzZWQgYnkgY29udmVydF9lbnRyeSgpIGJlbG93LgotdHlwZWRlZiBzdHJ1Y3QgY29udmVyc2lvbl9zdGF0ZSB7Ci0gIHZvaWQqICgqY29udmVydF92YWx1ZSkoY29uc3QgZ3JwY19tZXRob2RfY29uZmlnKiBtZXRob2RfY29uZmlnKTsKLSAgY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3Z0YWJsZSogdnRhYmxlOwotICBzaXplX3QgbnVtX2VudHJpZXM7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV9lbnRyeSogZW50cmllczsKLX0gY29udmVyc2lvbl9zdGF0ZTsKLQotLy8gQSBmdW5jdGlvbiB0byBiZSBwYXNzZWQgdG8gZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2l0ZXJhdGUoKSB0byBjcmVhdGUKLS8vIGEgY29weSBvZiB0aGUgZW50cmllcy4KLXN0YXRpYyB2b2lkIGNvbnZlcnRfZW50cnkoY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2VudHJ5KiBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdXNlcl9kYXRhKSB7Ci0gIGNvbnZlcnNpb25fc3RhdGUqIHN0YXRlID0gdXNlcl9kYXRhOwotICBzdGF0ZS0+ZW50cmllc1tzdGF0ZS0+bnVtX2VudHJpZXNdLmtleSA9IEdSUENfTURTVFJfUkVGKGVudHJ5LT5rZXkpOwotICBzdGF0ZS0+ZW50cmllc1tzdGF0ZS0+bnVtX2VudHJpZXNdLnZhbHVlID0gc3RhdGUtPmNvbnZlcnRfdmFsdWUoZW50cnktPnZhbHVlKTsKLSAgc3RhdGUtPmVudHJpZXNbc3RhdGUtPm51bV9lbnRyaWVzXS52dGFibGUgPSBzdGF0ZS0+dnRhYmxlOwotICArK3N0YXRlLT5udW1fZW50cmllczsKLX0KLQotZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiBncnBjX21ldGhvZF9jb25maWdfdGFibGVfY29udmVydCgKLSAgICBncnBjX2V4ZWNfY3R4KiBleGVjX2N0eCwgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiB0YWJsZSwKLSAgICB2b2lkKiAoKmNvbnZlcnRfdmFsdWUpKGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZyogbWV0aG9kX2NvbmZpZyksCi0gICAgY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3Z0YWJsZSogdnRhYmxlKSB7Ci0gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdGFibGUgd2l0aCBjb252ZXJ0ZWQgdmFsdWVzLgotICBjb252ZXJzaW9uX3N0YXRlIHN0YXRlOwotICBzdGF0ZS5jb252ZXJ0X3ZhbHVlID0gY29udmVydF92YWx1ZTsKLSAgc3RhdGUudnRhYmxlID0gdnRhYmxlOwotICBzdGF0ZS5udW1fZW50cmllcyA9IDA7Ci0gIHN0YXRlLmVudHJpZXMgPSBncHJfbWFsbG9jKHNpemVvZihncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnkpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX251bV9lbnRyaWVzKHRhYmxlKSk7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV9pdGVyYXRlKHRhYmxlLCBjb252ZXJ0X2VudHJ5LCAmc3RhdGUpOwotICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgYmFzZWQgb24gdGhlIGFycmF5IHdlIGp1c3QgY29uc3RydWN0ZWQuCi0gIGdycGNfbWRzdHJfaGFzaF90YWJsZSogbmV3X3RhYmxlID0KLSAgICAgIGdycGNfbWRzdHJfaGFzaF90YWJsZV9jcmVhdGUoc3RhdGUubnVtX2VudHJpZXMsIHN0YXRlLmVudHJpZXMpOwotICAvLyBDbGVhbiB1cCB0aGUgYXJyYXkuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubnVtX2VudHJpZXM7ICsraSkgewotICAgIEdSUENfTURTVFJfVU5SRUYoZXhlY19jdHgsIHN0YXRlLmVudHJpZXNbaV0ua2V5KTsKLSAgICB2dGFibGUtPmRlc3Ryb3lfdmFsdWUoZXhlY19jdHgsIHN0YXRlLmVudHJpZXNbaV0udmFsdWUpOwotICB9Ci0gIGdwcl9mcmVlKHN0YXRlLmVudHJpZXMpOwotICAvLyBSZXR1cm4gdGhlIG5ldyB0YWJsZS4KLSAgcmV0dXJuIG5ld190YWJsZTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0aG9kX2NvbmZpZy5oIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRob2RfY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxN2E0OTMuLjAwMDAwMDAKLS0tIGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRob2RfY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAyMDE2LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0KLSNpZm5kZWYgR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfTUVUSE9EX0NPTkZJR19ICi0jZGVmaW5lIEdSUENfQ09SRV9MSUJfVFJBTlNQT1JUX01FVEhPRF9DT05GSUdfSAotCi0jaW5jbHVkZSA8c3RkYm9vbC5oPgotCi0jaW5jbHVkZSA8Z3JwYy9pbXBsL2NvZGVnZW4vZ3ByX3R5cGVzLmg+Ci0jaW5jbHVkZSA8Z3JwYy9pbXBsL2NvZGVnZW4vZ3JwY190eXBlcy5oPgotCi0jaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmgiCi0jaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oIgotCi0vLy8gUGVyLW1ldGhvZCBjb25maWd1cmF0aW9uLgotdHlwZWRlZiBzdHJ1Y3QgZ3JwY19tZXRob2RfY29uZmlnIGdycGNfbWV0aG9kX2NvbmZpZzsKLQotLy8vIENyZWF0ZXMgYSBncnBjX21ldGhvZF9jb25maWcgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuCi0vLy8gQW55IHBhcmFtZXRlciBtYXkgYmUgTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB2YWx1ZSBpcyB1bnNldC4KLS8vLwotLy8vIFxhIHdhaXRfZm9yX3JlYWR5IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjbGllbnQgc2hvdWxkIHdhaXQgdW50aWwgdGhlCi0vLy8gcmVxdWVzdCBkZWFkbGluZSBmb3IgdGhlIGNoYW5uZWwgdG8gYmVjb21lIHJlYWR5LCBldmVuIGlmIHRoZXJlIGlzIGEKLS8vLyB0ZW1wb3JhcnkgZmFpbHVyZSBiZWZvcmUgdGhlIGRlYWRsaW5lIHdoaWxlIGF0dGVtcHRpbmcgdG8gY29ubmVjdC4KLS8vLwotLy8vIFxhIHRpbWVvdXQgaW5kaWNhdGVzIHRoZSB0aW1lb3V0IGZvciBjYWxscy4KLS8vLwotLy8vIFxhIG1heF9yZXF1ZXN0X21lc3NhZ2VfYnl0ZXMgYW5kIFxhIG1heF9yZXNwb25zZV9tZXNzYWdlX2J5dGVzCi0vLy8gaW5kaWNhdGUgdGhlIG1heGltdW0gc2l6ZXMgb2YgdGhlIHJlcXVlc3QgKGNoZWNrZWQgd2hlbiBzZW5kaW5nKSBhbmQKLS8vLyByZXNwb25zZSAoY2hlY2tlZCB3aGVuIHJlY2VpdmluZykgbWVzc2FnZXMuCi1ncnBjX21ldGhvZF9jb25maWcqIGdycGNfbWV0aG9kX2NvbmZpZ19jcmVhdGUoCi0gICAgYm9vbCogd2FpdF9mb3JfcmVhZHksIGdwcl90aW1lc3BlYyogdGltZW91dCwKLSAgICBpbnQzMl90KiBtYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzLCBpbnQzMl90KiBtYXhfcmVzcG9uc2VfbWVzc2FnZV9ieXRlcyk7Ci0KLWdycGNfbWV0aG9kX2NvbmZpZyogZ3JwY19tZXRob2RfY29uZmlnX3JlZihncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpOwotdm9pZCBncnBjX21ldGhvZF9jb25maWdfdW5yZWYoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpOwotCi0vLy8gQ29tcGFyZXMgdHdvIGdycGNfbWV0aG9kX2NvbmZpZ3MuCi0vLy8gVGhlIHNvcnQgb3JkZXIgaXMgc3RhYmxlIGJ1dCB1bmRlZmluZWQuCi1pbnQgZ3JwY19tZXRob2RfY29uZmlnX2NtcChjb25zdCBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnKiBtZXRob2RfY29uZmlnMik7Ci0KLS8vLyBUaGVzZSBtZXRob2RzIHJldHVybiBOVUxMIGlmIHRoZSByZXF1ZXN0ZWQgZmllbGQgaXMgdW5zZXQuCi0vLy8gVGhlIGNhbGxlciBkb2VzIE5PVCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgcmVzdWx0LgotY29uc3QgYm9vbCogZ3JwY19tZXRob2RfY29uZmlnX2dldF93YWl0X2Zvcl9yZWFkeSgKLSAgICBjb25zdCBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpOwotY29uc3QgZ3ByX3RpbWVzcGVjKiBncnBjX21ldGhvZF9jb25maWdfZ2V0X3RpbWVvdXQoCi0gICAgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnKiBtZXRob2RfY29uZmlnKTsKLWNvbnN0IGludDMyX3QqIGdycGNfbWV0aG9kX2NvbmZpZ19nZXRfbWF4X3JlcXVlc3RfbWVzc2FnZV9ieXRlcygKLSAgICBjb25zdCBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpOwotY29uc3QgaW50MzJfdCogZ3JwY19tZXRob2RfY29uZmlnX2dldF9tYXhfcmVzcG9uc2VfbWVzc2FnZV9ieXRlcygKLSAgICBjb25zdCBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWcpOwotCi0vLy8gQSB0YWJsZSBvZiBtZXRob2QgY29uZmlncy4KLXR5cGVkZWYgZ3JwY19tZHN0cl9oYXNoX3RhYmxlIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZTsKLQotdHlwZWRlZiBzdHJ1Y3QgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX2VudHJ5IHsKLSAgLy8vIFRoZSBuYW1lIGlzIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgotICAvLy8gICBzZXJ2aWNlL21ldGhvZCAtLSBzcGVjaWZpZXMgZXhhY3Qgc2VydmljZSBhbmQgbWV0aG9kIG5hbWUKLSAgLy8vICAgc2VydmljZS8qICAgICAgLS0gbWF0Y2hlcyBhbGwgbWV0aG9kcyBmb3IgdGhlIHNwZWNpZmllZCBzZXJ2aWNlCi0gIGdycGNfbWRzdHIqIG1ldGhvZF9uYW1lOwotICBncnBjX21ldGhvZF9jb25maWcqIG1ldGhvZF9jb25maWc7Ci19IGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV9lbnRyeTsKLQotLy8vIFRha2VzIG5ldyByZWZlcmVuY2VzIHRvIGFsbCBrZXlzIGFuZCB2YWx1ZXMgaW4gXGEgZW50cmllcy4KLWdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX2NyZWF0ZSgKLSAgICBzaXplX3QgbnVtX2VudHJpZXMsIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV9lbnRyeSogZW50cmllcyk7Ci0KLWdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX3JlZigKLSAgICBncnBjX21ldGhvZF9jb25maWdfdGFibGUqIHRhYmxlKTsKLXZvaWQgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX3VucmVmKGdycGNfZXhlY19jdHgqIGV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiB0YWJsZSk7Ci0KLS8vLyBDb21wYXJlcyB0d28gZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlcy4KLS8vLyBUaGUgc29ydCBvcmRlciBpcyBzdGFibGUgYnV0IHVuZGVmaW5lZC4KLWludCBncnBjX21ldGhvZF9jb25maWdfdGFibGVfY21wKGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogdGFibGUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiB0YWJsZTIpOwotCi0vLy8gR2V0cyB0aGUgbWV0aG9kIGNvbmZpZyBmb3IgdGhlIHNwZWNpZmllZCBcYSBwYXRoLCB3aGljaCBzaG91bGQgYmUgb2YKLS8vLyB0aGUgZm9ybSAiL3NlcnZpY2UvbWV0aG9kIi4KLS8vLyBSZXR1cm5zIE5VTEwgaWYgdGhlIG1ldGhvZCBoYXMgbm8gY29uZmlnLgotLy8vIENhbGxlciBkb2VzIE5PVCBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHJlc3VsdC4KLS8vLwotLy8vIE5vdGU6IFRoaXMgcmV0dXJucyBhIHZvaWQqIGluc3RlYWQgb2YgYSBncnBjX21ldGhvZF9jb25maWcqIHNvIHRoYXQKLS8vLyBpdCBjYW4gYWxzbyBiZSB1c2VkIGZvciB0YWJsZXMgY29uc3RydWN0ZWQgdmlhCi0vLy8gZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlX2NvbnZlcnQoKS4KLXZvaWQqIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV9nZXQoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHIqIHBhdGgpOwotCi0vLy8gUmV0dXJucyBhIGNoYW5uZWwgYXJnIGNvbnRhaW5pbmcgXGEgdGFibGUuCi1ncnBjX2FyZyBncnBjX21ldGhvZF9jb25maWdfdGFibGVfY3JlYXRlX2NoYW5uZWxfYXJnKAotICAgIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZSogdGFibGUpOwotCi0vLy8gR2VuZXJhdGVzIGEgbmV3IHRhYmxlIGZyb20gXGEgdGFibGUgd2hvc2UgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gYQotLy8vIG5ldyBmb3JtIHZpYSB0aGUgXGEgY29udmVydF92YWx1ZSBmdW5jdGlvbi4gIFRoZSBuZXcgdGFibGUgd2lsbCB1c2UKLS8vLyBcYSB2dGFibGUgZm9yIGl0cyB2YWx1ZXMuCi0vLy8KLS8vLyBUaGlzIGlzIGdlbmVyYWxseSB1c2VkIHRvIGNvbnZlcnQgdGhlIHRhYmxlJ3MgdmFsdWUgdHlwZSBmcm9tCi0vLy8gZ3JwY19tZXRob2RfY29uZmlnIHRvIGEgc2ltcGxlIHN0cnVjdCBjb250YWluaW5nIG9ubHkgdGhlIHBhcmFtZXRlcnMKLS8vLyByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgZmlsdGVyLCB0aHVzIGF2b2lkaW5nIHRoZSBuZWVkIGZvciBhIGhhc2gKLS8vLyB0YWJsZSBsb29rdXAgb24gdGhlIGZhc3QgcGF0aC4gIEluIHRoYXQgc2NlbmFyaW8sIFxhIGNvbnZlcnRfdmFsdWUKLS8vLyB3aWxsIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgc3RydWN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmcm9tCi0vLy8gdGhlIGdycGNfbWV0aG9kX2NvbmZpZywgYW5kIFxhIHZ0YWJsZSBwcm92aWRlcyB0aGUgbWV0aG9kcyBmb3IKLS8vLyBvcGVyYXRpbmcgb24gdGhlIHN0cnVjdCB0eXBlLgotZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiBncnBjX21ldGhvZF9jb25maWdfdGFibGVfY29udmVydCgKLSAgICBncnBjX2V4ZWNfY3R4KiBleGVjX2N0eCwgY29uc3QgZ3JwY19tZXRob2RfY29uZmlnX3RhYmxlKiB0YWJsZSwKLSAgICB2b2lkKiAoKmNvbnZlcnRfdmFsdWUpKGNvbnN0IGdycGNfbWV0aG9kX2NvbmZpZyogbWV0aG9kX2NvbmZpZyksCi0gICAgY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3Z0YWJsZSogdnRhYmxlKTsKLQotI2VuZGlmIC8qIEdSUENfQ09SRV9MSUJfVFJBTlNQT1JUX01FVEhPRF9DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5jCmluZGV4IDU1MmQzZWMuLjEyZGEyYTggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc2VydmljZV9jb25maWcuYworKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMKQEAgLTM5LDggKzM5LDEwIEBACiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3N0cmluZ191dGlsLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvanNvbi9qc29uLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VwcG9ydC9zdHJpbmcuaCIKLSNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuaCIKIAogLy8gVGhlIG1haW4gcHVycG9zZSBvZiB0aGUgY29kZSBoZXJlIGlzIHRvIHBhcnNlIHRoZSBzZXJ2aWNlIGNvbmZpZyBpbgogLy8gSlNPTiBmb3JtLCB3aGljaCB3aWxsIGxvb2sgbGlrZSB0aGlzOgpAQCAtMTQ4LDggKzE1MCw4IEBACiBzdGF0aWMgYm9vbCBwYXJzZV9qc29uX21ldGhvZF9jb25maWcoCiAgICAgZ3JwY19leGVjX2N0eCogZXhlY19jdHgsIGdycGNfanNvbioganNvbiwKICAgICB2b2lkKiAoKmNyZWF0ZV92YWx1ZSkoY29uc3QgZ3JwY19qc29uKiBtZXRob2RfY29uZmlnX2pzb24pLAotICAgIGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZV92dGFibGUqIHZ0YWJsZSwKLSAgICBncnBjX21kc3RyX2hhc2hfdGFibGVfZW50cnkqIGVudHJpZXMsIHNpemVfdCogaWR4KSB7CisgICAgY29uc3QgZ3JwY19zbGljZV9oYXNoX3RhYmxlX3Z0YWJsZSogdnRhYmxlLAorICAgIGdycGNfc2xpY2VfaGFzaF90YWJsZV9lbnRyeSogZW50cmllcywgc2l6ZV90KiBpZHgpIHsKICAgLy8gQ29uc3RydWN0IHZhbHVlLgogICB2b2lkKiBtZXRob2RfY29uZmlnID0gY3JlYXRlX3ZhbHVlKGpzb24pOwogICBpZiAobWV0aG9kX2NvbmZpZyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CkBAIC0xNzAsNyArMTcyLDcgQEAKICAgaWYgKHBhdGhzLmNvdW50ID09IDApIGdvdG8gZG9uZTsgIC8vIE5vIG5hbWVzIHNwZWNpZmllZC4KICAgLy8gQWRkIGVudHJ5IGZvciBlYWNoIHBhdGguCiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aHMuY291bnQ7ICsraSkgewotICAgIGVudHJpZXNbKmlkeF0ua2V5ID0gZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhwYXRocy5zdHJzW2ldKTsKKyAgICBlbnRyaWVzWyppZHhdLmtleSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKHBhdGhzLnN0cnNbaV0pOwogICAgIGVudHJpZXNbKmlkeF0udmFsdWUgPSB2dGFibGUtPmNvcHlfdmFsdWUobWV0aG9kX2NvbmZpZyk7CiAgICAgZW50cmllc1sqaWR4XS52dGFibGUgPSB2dGFibGU7CiAgICAgKysqaWR4OwpAQCAtMTgyLDE1ICsxODQsMTUgQEAKICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLWdycGNfbWRzdHJfaGFzaF90YWJsZSogZ3JwY19zZXJ2aWNlX2NvbmZpZ19jcmVhdGVfbWV0aG9kX2NvbmZpZ190YWJsZSgKK2dycGNfc2xpY2VfaGFzaF90YWJsZSogZ3JwY19zZXJ2aWNlX2NvbmZpZ19jcmVhdGVfbWV0aG9kX2NvbmZpZ190YWJsZSgKICAgICBncnBjX2V4ZWNfY3R4KiBleGVjX2N0eCwgY29uc3QgZ3JwY19zZXJ2aWNlX2NvbmZpZyogc2VydmljZV9jb25maWcsCiAgICAgdm9pZCogKCpjcmVhdGVfdmFsdWUpKGNvbnN0IGdycGNfanNvbiogbWV0aG9kX2NvbmZpZ19qc29uKSwKLSAgICBjb25zdCBncnBjX21kc3RyX2hhc2hfdGFibGVfdnRhYmxlKiB2dGFibGUpIHsKKyAgICBjb25zdCBncnBjX3NsaWNlX2hhc2hfdGFibGVfdnRhYmxlKiB2dGFibGUpIHsKICAgY29uc3QgZ3JwY19qc29uKiBqc29uID0gc2VydmljZV9jb25maWctPmpzb25fdHJlZTsKICAgLy8gVHJhdmVyc2UgcGFyc2VkIEpTT04gdHJlZS4KICAgaWYgKGpzb24tPnR5cGUgIT0gR1JQQ19KU09OX09CSkVDVCB8fCBqc29uLT5rZXkgIT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgIHNpemVfdCBudW1fZW50cmllcyA9IDA7Ci0gIGdycGNfbWRzdHJfaGFzaF90YWJsZV9lbnRyeSogZW50cmllcyA9IE5VTEw7CisgIGdycGNfc2xpY2VfaGFzaF90YWJsZV9lbnRyeSogZW50cmllcyA9IE5VTEw7CiAgIGZvciAoZ3JwY19qc29uKiBmaWVsZCA9IGpzb24tPmNoaWxkOyBmaWVsZCAhPSBOVUxMOyBmaWVsZCA9IGZpZWxkLT5uZXh0KSB7CiAgICAgaWYgKGZpZWxkLT5rZXkgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHN0cmNtcChmaWVsZC0+a2V5LCAibWV0aG9kQ29uZmlnIikgPT0gMCkgewpAQCAtMjAyLDcgKzIwNCw3IEBACiAgICAgICAgIG51bV9lbnRyaWVzICs9IGNvdW50X25hbWVzX2luX21ldGhvZF9jb25maWdfanNvbihtZXRob2QpOwogICAgICAgfQogICAgICAgLy8gUG9wdWxhdGUgbWV0aG9kIGNvbmZpZyB0YWJsZSBlbnRyaWVzLgotICAgICAgZW50cmllcyA9IGdwcl9tYWxsb2MobnVtX2VudHJpZXMgKiBzaXplb2YoZ3JwY19tZHN0cl9oYXNoX3RhYmxlX2VudHJ5KSk7CisgICAgICBlbnRyaWVzID0gZ3ByX21hbGxvYyhudW1fZW50cmllcyAqIHNpemVvZihncnBjX3NsaWNlX2hhc2hfdGFibGVfZW50cnkpKTsKICAgICAgIHNpemVfdCBpZHggPSAwOwogICAgICAgZm9yIChncnBjX2pzb24qIG1ldGhvZCA9IGZpZWxkLT5jaGlsZDsgbWV0aG9kICE9IE5VTEw7CiAgICAgICAgICAgIG1ldGhvZCA9IG1ldGhvZC0+bmV4dCkgewpAQCAtMjE1LDEyICsyMTcsMTIgQEAKICAgICB9CiAgIH0KICAgLy8gSW5zdGFudGlhdGUgbWV0aG9kIGNvbmZpZyB0YWJsZS4KLSAgZ3JwY19tZHN0cl9oYXNoX3RhYmxlKiBtZXRob2RfY29uZmlnX3RhYmxlID0gTlVMTDsKKyAgZ3JwY19zbGljZV9oYXNoX3RhYmxlKiBtZXRob2RfY29uZmlnX3RhYmxlID0gTlVMTDsKICAgaWYgKGVudHJpZXMgIT0gTlVMTCkgewotICAgIG1ldGhvZF9jb25maWdfdGFibGUgPSBncnBjX21kc3RyX2hhc2hfdGFibGVfY3JlYXRlKG51bV9lbnRyaWVzLCBlbnRyaWVzKTsKKyAgICBtZXRob2RfY29uZmlnX3RhYmxlID0gZ3JwY19zbGljZV9oYXNoX3RhYmxlX2NyZWF0ZShudW1fZW50cmllcywgZW50cmllcyk7CiAgICAgLy8gQ2xlYW4gdXAuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fZW50cmllczsgKytpKSB7Ci0gICAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCBlbnRyaWVzW2ldLmtleSk7CisgICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCBlbnRyaWVzW2ldLmtleSk7CiAgICAgICB2dGFibGUtPmRlc3Ryb3lfdmFsdWUoZXhlY19jdHgsIGVudHJpZXNbaV0udmFsdWUpOwogICAgIH0KICAgICBncHJfZnJlZShlbnRyaWVzKTsKQEAgLTIyOSwyMyArMjMxLDI0IEBACiB9CiAKIHZvaWQqIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV9nZXQoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHIqIHBhdGgpIHsKLSAgdm9pZCogdmFsdWUgPSBncnBjX21kc3RyX2hhc2hfdGFibGVfZ2V0KHRhYmxlLCBwYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwY19zbGljZV9oYXNoX3RhYmxlKiB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZSBwYXRoKSB7CisgIHZvaWQqIHZhbHVlID0gZ3JwY19zbGljZV9oYXNoX3RhYmxlX2dldCh0YWJsZSwgcGF0aCk7CiAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgbWF0Y2ggZm9yIHRoZSBwYXRoLCB0cnkgbG9va2luZyBmb3IgYSB3aWxkY2FyZAogICAvLyBlbnRyeSAoaS5lLiwgY2hhbmdlICIvc2VydmljZS9tZXRob2QiIHRvICIvc2VydmljZS8qIikuCiAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgY29uc3QgY2hhciogcGF0aF9zdHIgPSBncnBjX21kc3RyX2FzX2Nfc3RyaW5nKHBhdGgpOworICAgIGNoYXIqIHBhdGhfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhwYXRoKTsKICAgICBjb25zdCBjaGFyKiBzZXAgPSBzdHJyY2hyKHBhdGhfc3RyLCAnLycpICsgMTsKICAgICBjb25zdCBzaXplX3QgbGVuID0gKHNpemVfdCkoc2VwIC0gcGF0aF9zdHIpOwogICAgIGNoYXIqIGJ1ZiA9IGdwcl9tYWxsb2MobGVuICsgMik7ICAvLyAnKicgYW5kIE5VTAogICAgIG1lbWNweShidWYsIHBhdGhfc3RyLCBsZW4pOwogICAgIGJ1ZltsZW5dID0gJyonOwogICAgIGJ1ZltsZW4gKyAxXSA9ICdcMCc7Ci0gICAgZ3JwY19tZHN0ciogd2lsZGNhcmRfcGF0aCA9IGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoYnVmKTsKKyAgICBncnBjX3NsaWNlIHdpbGRjYXJkX3BhdGggPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhidWYpOwogICAgIGdwcl9mcmVlKGJ1Zik7Ci0gICAgdmFsdWUgPSBncnBjX21kc3RyX2hhc2hfdGFibGVfZ2V0KHRhYmxlLCB3aWxkY2FyZF9wYXRoKTsKLSAgICBHUlBDX01EU1RSX1VOUkVGKGV4ZWNfY3R4LCB3aWxkY2FyZF9wYXRoKTsKKyAgICB2YWx1ZSA9IGdycGNfc2xpY2VfaGFzaF90YWJsZV9nZXQodGFibGUsIHdpbGRjYXJkX3BhdGgpOworICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsIHdpbGRjYXJkX3BhdGgpOworICAgIGdwcl9mcmVlKHBhdGhfc3RyKTsKICAgfQogICByZXR1cm4gdmFsdWU7CiB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmggYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmgKaW5kZXggZjA4OTcxNy4uY2Q3MzlhNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc2VydmljZV9jb25maWcuaApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGdycGMvaW1wbC9jb2RlZ2VuL2dycGNfdHlwZXMuaD4KIAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9qc29uL2pzb24uaCIKLSNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaGFzaF90YWJsZS5oIgogCiB0eXBlZGVmIHN0cnVjdCBncnBjX3NlcnZpY2VfY29uZmlnIGdycGNfc2VydmljZV9jb25maWc7CiAKQEAgLTUzLDEwICs1MywxMCBAQAogLy8vIHJldHVybmVkIGJ5IFxhIGNyZWF0ZV92YWx1ZSgpLCBiYXNlZCBvbiBkYXRhIHBhcnNlZCBmcm9tIHRoZSBKU09OIHRyZWUuCiAvLy8gXGEgdnRhYmxlIHByb3ZpZGVzIG1ldGhvZHMgdXNlZCB0byBtYW5hZ2UgdGhlIHZhbHVlcy4KIC8vLyBSZXR1cm5zIE5VTEwgb24gZXJyb3IuCi1ncnBjX21kc3RyX2hhc2hfdGFibGUqIGdycGNfc2VydmljZV9jb25maWdfY3JlYXRlX21ldGhvZF9jb25maWdfdGFibGUoCitncnBjX3NsaWNlX2hhc2hfdGFibGUqIGdycGNfc2VydmljZV9jb25maWdfY3JlYXRlX21ldGhvZF9jb25maWdfdGFibGUoCiAgICAgZ3JwY19leGVjX2N0eCogZXhlY19jdHgsIGNvbnN0IGdycGNfc2VydmljZV9jb25maWcqIHNlcnZpY2VfY29uZmlnLAogICAgIHZvaWQqICgqY3JlYXRlX3ZhbHVlKShjb25zdCBncnBjX2pzb24qIG1ldGhvZF9jb25maWdfanNvbiksCi0gICAgY29uc3QgZ3JwY19tZHN0cl9oYXNoX3RhYmxlX3Z0YWJsZSogdnRhYmxlKTsKKyAgICBjb25zdCBncnBjX3NsaWNlX2hhc2hfdGFibGVfdnRhYmxlKiB2dGFibGUpOwogCiAvLy8gQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgdmFsdWVzIGluIHRoZSB0YWJsZSByZXR1cm5lZCBieQogLy8vIFxhIGdycGNfc2VydmljZV9jb25maWdfY3JlYXRlX21ldGhvZF9jb25maWdfdGFibGUoKS4KQEAgLTY1LDcgKzY1LDcgQEAKIC8vLyBSZXR1cm5zIE5VTEwgaWYgdGhlIG1ldGhvZCBoYXMgbm8gY29uZmlnLgogLy8vIENhbGxlciBkb2VzIE5PVCBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHJlc3VsdC4KIHZvaWQqIGdycGNfbWV0aG9kX2NvbmZpZ190YWJsZV9nZXQoZ3JwY19leGVjX2N0eCogZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHJfaGFzaF90YWJsZSogdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfbWRzdHIqIHBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncnBjX3NsaWNlX2hhc2hfdGFibGUqIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHBhdGgpOwogCiAjZW5kaWYgLyogR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfU0VSVklDRV9DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMKaW5kZXggOGIyMjU5Mi4uNzUwNzExYiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYworKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5jCkBAIC00MSwxMjAgKzQxLDc3MCBAQAogCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIKIAotZ3JwY19tZHN0ciBncnBjX3N0YXRpY19tZHN0cl90YWJsZVtHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVF07CisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAKLWdycGNfbWRlbGVtIGdycGNfc3RhdGljX21kZWxlbV90YWJsZVtHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlRdOworc3RhdGljIHVpbnQ4X3QgZ19ieXRlc1tdID0geworICAgIDU4LCAgMTEyLCA5NywgIDExNiwgMTA0LCA1OCwgIDEwOSwgMTAxLCAxMTYsIDEwNCwgMTExLCAxMDAsIDU4LCAgMTE1LCAxMTYsCisgICAgOTcsICAxMTYsIDExNywgMTE1LCA1OCwgIDk3LCAgMTE3LCAxMTYsIDEwNCwgMTExLCAxMTQsIDEwNSwgMTE2LCAxMjEsIDU4LAorICAgIDExNSwgOTksICAxMDQsIDEwMSwgMTA5LCAxMDEsIDExNiwgMTAxLCAxMDMsIDExNCwgMTEyLCA5OSwgIDQ1LCAgMTA5LCAxMDEsCisgICAgMTE1LCAxMTUsIDk3LCAgMTAzLCAxMDEsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDUsICAxMTUsIDExNiwgOTcsICAxMTYsIDExNywKKyAgICAxMTUsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDUsICAxMTIsIDk3LCAgMTIxLCAxMDgsIDExMSwgOTcsICAxMDAsIDQ1LCAgOTgsCisgICAgMTA1LCAxMTAsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDUsICAxMDEsIDExMCwgOTksICAxMTEsIDEwMCwgMTA1LCAxMTAsIDEwMywKKyAgICAxMDMsIDExNCwgMTEyLCA5OSwgIDQ1LCAgOTcsICA5OSwgIDk5LCAgMTAxLCAxMTIsIDExNiwgNDUsICAxMDEsIDExMCwgOTksCisgICAgMTExLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDk5LCAgMTExLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNiwgNDUsICAxMTYsIDEyMSwKKyAgICAxMTIsIDEwMSwgMTAzLCAxMTQsIDExMiwgOTksICA0NSwgIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMTAsIDk3LCAgMTA4LAorICAgIDQ1LCAgMTAxLCAxMTAsIDk5LCAgMTExLCAxMDAsIDEwNSwgMTEwLCAxMDMsIDQ1LCAgMTE0LCAxMDEsIDExMywgMTE3LCAxMDEsCisgICAgMTE1LCAxMTYsIDExNywgMTE1LCAxMDEsIDExNCwgNDUsICA5NywgIDEwMywgMTAxLCAxMTAsIDExNiwgMTA0LCAxMTEsIDExNSwKKyAgICAxMTYsIDEwOCwgOTgsICA0NSwgIDExNiwgMTExLCAxMDcsIDEwMSwgMTEwLCAxMDgsIDk4LCAgNDUsICA5OSwgIDExMSwgMTE1LAorICAgIDExNiwgNDUsICA5OCwgIDEwNSwgMTEwLCAxMDMsIDExNCwgMTEyLCA5OSwgIDQ1LCAgMTE2LCAxMDUsIDEwOSwgMTAxLCAxMTEsCisgICAgMTE3LCAxMTYsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDUsICAxMTYsIDExNCwgOTcsICA5OSwgIDEwNSwgMTEwLCAxMDMsIDQ1LAorICAgIDk4LCAgMTA1LCAxMTAsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDUsICAxMTUsIDExNiwgOTcsICAxMTYsIDExNSwgNDUsICA5OCwKKyAgICAxMDUsIDExMCwgMTAzLCAxMTQsIDExMiwgOTksICA0NiwgIDExOSwgOTcsICAxMDUsIDExNiwgOTUsICAxMDIsIDExMSwgMTE0LAorICAgIDk1LCAgMTE0LCAxMDEsIDk3LCAgMTAwLCAxMjEsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDYsICAxMTYsIDEwNSwgMTA5LCAxMDEsCisgICAgMTExLCAxMTcsIDExNiwgMTAzLCAxMTQsIDExMiwgOTksICA0NiwgIDEwOSwgOTcsICAxMjAsIDk1LCAgMTE0LCAxMDEsIDExMywKKyAgICAxMTcsIDEwMSwgMTE1LCAxMTYsIDk1LCAgMTA5LCAxMDEsIDExNSwgMTE1LCA5NywgIDEwMywgMTAxLCA5NSwgIDk4LCAgMTIxLAorICAgIDExNiwgMTAxLCAxMTUsIDEwMywgMTE0LCAxMTIsIDk5LCAgNDYsICAxMDksIDk3LCAgMTIwLCA5NSwgIDExNCwgMTAxLCAxMTUsCisgICAgMTEyLCAxMTEsIDExMCwgMTE1LCAxMDEsIDk1LCAgMTA5LCAxMDEsIDExNSwgMTE1LCA5NywgIDEwMywgMTAxLCA5NSwgIDk4LAorICAgIDEyMSwgMTE2LCAxMDEsIDExNSwgNDcsICAxMDMsIDExNCwgMTEyLCA5OSwgIDQ2LCAgMTA4LCA5OCwgIDQ2LCAgMTE4LCA0OSwKKyAgICA0NiwgIDc2LCAgMTExLCA5NywgIDEwMCwgNjYsICA5NywgIDEwOCwgOTcsICAxMTAsIDk5LCAgMTAxLCAxMTQsIDQ3LCAgNjYsCisgICAgOTcsICAxMDgsIDk3LCAgMTEwLCA5OSwgIDEwMSwgNzYsICAxMTEsIDk3LCAgMTAwLCA0OCwgIDQ5LCAgNTAsICAxMDUsIDEwMCwKKyAgICAxMDEsIDExMCwgMTE2LCAxMDUsIDExNiwgMTIxLCAxMDMsIDEyMiwgMTA1LCAxMTIsIDEwMCwgMTAxLCAxMDIsIDEwOCwgOTcsCisgICAgMTE2LCAxMDEsIDExNiwgMTE0LCA5NywgIDEwNSwgMTA4LCAxMDEsIDExNCwgMTE1LCA5NywgIDExMiwgMTEyLCAxMDgsIDEwNSwKKyAgICA5OSwgIDk3LCAgMTE2LCAxMDUsIDExMSwgMTEwLCA0NywgIDEwMywgMTE0LCAxMTIsIDk5LCAgODAsICA3OSwgIDgzLCAgODQsCisgICAgNTAsICA0OCwgIDQ4LCAgNTIsICA0OCwgIDUyLCAgMTA0LCAxMTYsIDExNiwgMTEyLCAxMDQsIDExNiwgMTE2LCAxMTIsIDExNSwKKyAgICAxMDMsIDExNCwgMTEyLCA5OSwgIDcxLCAgNjksICA4NCwgIDgwLCAgODUsICA4NCwgIDQ3LCAgNDcsICAxMDUsIDExMCwgMTAwLAorICAgIDEwMSwgMTIwLCA0NiwgIDEwNCwgMTE2LCAxMDksIDEwOCwgNTAsICA0OCwgIDUyLCAgNTAsICA0OCwgIDU0LCAgNTEsICA0OCwKKyAgICA1MiwgIDUyLCAgNDgsICA0OCwgIDUzLCAgNDgsICA0OCwgIDk3LCAgOTksICA5OSwgIDEwMSwgMTEyLCAxMTYsIDQ1LCAgOTksCisgICAgMTA0LCA5NywgIDExNCwgMTE1LCAxMDEsIDExNiwgOTcsICA5OSwgIDk5LCAgMTAxLCAxMTIsIDExNiwgNDUsICAxMDEsIDExMCwKKyAgICA5OSwgIDExMSwgMTAwLCAxMDUsIDExMCwgMTAzLCAxMDMsIDEyMiwgMTA1LCAxMTIsIDQ0LCAgMzIsICAxMDAsIDEwMSwgMTAyLAorICAgIDEwOCwgOTcsICAxMTYsIDEwMSwgOTcsICA5OSwgIDk5LCAgMTAxLCAxMTIsIDExNiwgNDUsICAxMDgsIDk3LCAgMTEwLCAxMDMsCisgICAgMTE3LCA5NywgIDEwMywgMTAxLCA5NywgIDk5LCAgOTksICAxMDEsIDExMiwgMTE2LCA0NSwgIDExNCwgOTcsICAxMTAsIDEwMywKKyAgICAxMDEsIDExNSwgOTcsICA5OSwgIDk5LCAgMTAxLCAxMTIsIDExNiwgOTcsICA5OSwgIDk5LCAgMTAxLCAxMTUsIDExNSwgNDUsCisgICAgOTksICAxMTEsIDExMCwgMTE2LCAxMTQsIDExMSwgMTA4LCA0NSwgIDk3LCAgMTA4LCAxMDgsIDExMSwgMTE5LCA0NSwgIDExMSwKKyAgICAxMTQsIDEwNSwgMTAzLCAxMDUsIDExMCwgOTcsICAxMDMsIDEwMSwgOTcsICAxMDgsIDEwOCwgMTExLCAxMTksIDk3LCAgMTE3LAorICAgIDExNiwgMTA0LCAxMTEsIDExNCwgMTA1LCAxMjIsIDk3LCAgMTE2LCAxMDUsIDExMSwgMTEwLCA5OSwgIDk3LCAgOTksICAxMDQsCisgICAgMTAxLCA0NSwgIDk5LCAgMTExLCAxMTAsIDExNiwgMTE0LCAxMTEsIDEwOCwgOTksICAxMTEsIDExMCwgMTE2LCAxMDEsIDExMCwKKyAgICAxMTYsIDQ1LCAgMTAwLCAxMDUsIDExNSwgMTEyLCAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDk5LCAgMTExLAorICAgIDExMCwgMTE2LCAxMDEsIDExMCwgMTE2LCA0NSwgIDEwMSwgMTEwLCA5OSwgIDExMSwgMTAwLCAxMDUsIDExMCwgMTAzLCA5OSwKKyAgICAxMTEsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE2LCA0NSwgIDEwOCwgOTcsICAxMTAsIDEwMywgMTE3LCA5NywgIDEwMywgMTAxLAorICAgIDk5LCAgMTExLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNiwgNDUsICAxMDgsIDEwMSwgMTEwLCAxMDMsIDExNiwgMTA0LCA5OSwKKyAgICAxMTEsIDExMCwgMTE2LCAxMDEsIDExMCwgMTE2LCA0NSwgIDEwOCwgMTExLCA5OSwgIDk3LCAgMTE2LCAxMDUsIDExMSwgMTEwLAorICAgIDk5LCAgMTExLCAxMTAsIDExNiwgMTAxLCAxMTAsIDExNiwgNDUsICAxMTQsIDk3LCAgMTEwLCAxMDMsIDEwMSwgOTksICAxMTEsCisgICAgMTExLCAxMDcsIDEwNSwgMTAxLCAxMDAsIDk3LCAgMTE2LCAxMDEsIDEwMSwgMTE2LCA5NywgIDEwMywgMTAxLCAxMjAsIDExMiwKKyAgICAxMDEsIDk5LCAgMTE2LCAxMDEsIDEyMCwgMTEyLCAxMDUsIDExNCwgMTAxLCAxMTUsIDEwMiwgMTE0LCAxMTEsIDEwOSwgMTA1LAorICAgIDEwMiwgNDUsICAxMDksIDk3LCAgMTE2LCA5OSwgIDEwNCwgMTA1LCAxMDIsIDQ1LCAgMTA5LCAxMTEsIDEwMCwgMTA1LCAxMDIsCisgICAgMTA1LCAxMDEsIDEwMCwgNDUsICAxMTUsIDEwNSwgMTEwLCA5OSwgIDEwMSwgMTA1LCAxMDIsIDQ1LCAgMTEwLCAxMTEsIDExMCwKKyAgICAxMDEsIDQ1LCAgMTA5LCA5NywgIDExNiwgOTksICAxMDQsIDEwNSwgMTAyLCA0NSwgIDExNCwgOTcsICAxMTAsIDEwMywgMTAxLAorICAgIDEwNSwgMTAyLCA0NSwgIDExNywgMTEwLCAxMDksIDExMSwgMTAwLCAxMDUsIDEwMiwgMTA1LCAxMDEsIDEwMCwgNDUsICAxMTUsCisgICAgMTA1LCAxMTAsIDk5LCAgMTAxLCAxMDgsIDk3LCAgMTE1LCAxMTYsIDQ1LCAgMTA5LCAxMTEsIDEwMCwgMTA1LCAxMDIsIDEwNSwKKyAgICAxMDEsIDEwMCwgMTA4LCAxMDUsIDExMCwgMTA3LCAxMDgsIDExMSwgOTksICA5NywgIDExNiwgMTA1LCAxMTEsIDExMCwgMTA5LAorICAgIDk3LCAgMTIwLCA0NSwgIDEwMiwgMTExLCAxMTQsIDExOSwgOTcsICAxMTQsIDEwMCwgMTE1LCAxMTIsIDExNCwgMTExLCAxMjAsCisgICAgMTIxLCA0NSwgIDk3LCAgMTE3LCAxMTYsIDEwNCwgMTAxLCAxMTAsIDExNiwgMTA1LCA5OSwgIDk3LCAgMTE2LCAxMDEsIDExMiwKKyAgICAxMTQsIDExMSwgMTIwLCAxMjEsIDQ1LCAgOTcsICAxMTcsIDExNiwgMTA0LCAxMTEsIDExNCwgMTA1LCAxMjIsIDk3LCAgMTE2LAorICAgIDEwNSwgMTExLCAxMTAsIDExNCwgOTcsICAxMTAsIDEwMywgMTAxLCAxMTQsIDEwMSwgMTAyLCAxMDEsIDExNCwgMTAxLCAxMTQsCisgICAgMTE0LCAxMDEsIDEwMiwgMTE0LCAxMDEsIDExNSwgMTA0LCAxMTQsIDEwMSwgMTE2LCAxMTQsIDEyMSwgNDUsICA5NywgIDEwMiwKKyAgICAxMTYsIDEwMSwgMTE0LCAxMTUsIDEwMSwgMTE0LCAxMTgsIDEwMSwgMTE0LCAxMTUsIDEwMSwgMTE2LCA0NSwgIDk5LCAgMTExLAorICAgIDExMSwgMTA3LCAxMDUsIDEwMSwgMTE1LCAxMTYsIDExNCwgMTA1LCA5OSwgIDExNiwgNDUsICAxMTYsIDExNCwgOTcsICAxMTAsCisgICAgMTE1LCAxMTIsIDExMSwgMTE0LCAxMTYsIDQ1LCAgMTE1LCAxMDEsIDk5LCAgMTE3LCAxMTQsIDEwNSwgMTE2LCAxMjEsIDExNiwKKyAgICAxMTQsIDk3LCAgMTEwLCAxMTUsIDEwMiwgMTAxLCAxMTQsIDQ1LCAgMTAxLCAxMTAsIDk5LCAgMTExLCAxMDAsIDEwNSwgMTEwLAorICAgIDEwMywgMTE4LCA5NywgIDExNCwgMTIxLCAxMTgsIDEwNSwgOTcsICAxMTksIDExOSwgMTE5LCA0NSwgIDk3LCAgMTE3LCAxMTYsCisgICAgMTA0LCAxMDEsIDExMCwgMTE2LCAxMDUsIDk5LCAgOTcsICAxMTYsIDEwMSwgMTA1LCAxMDAsIDEwMSwgMTEwLCAxMTYsIDEwNSwKKyAgICAxMTYsIDEyMSwgNDQsICAxMDAsIDEwMSwgMTAyLCAxMDgsIDk3LCAgMTE2LCAxMDEsIDEwNSwgMTAwLCAxMDEsIDExMCwgMTE2LAorICAgIDEwNSwgMTE2LCAxMjEsIDQ0LCAgMTAzLCAxMjIsIDEwNSwgMTEyLCAxMDAsIDEwMSwgMTAyLCAxMDgsIDk3LCAgMTE2LCAxMDEsCisgICAgNDQsICAxMDMsIDEyMiwgMTA1LCAxMTIsIDEwNSwgMTAwLCAxMDEsIDExMCwgMTE2LCAxMDUsIDExNiwgMTIxLCA0NCwgIDEwMCwKKyAgICAxMDEsIDEwMiwgMTA4LCA5NywgIDExNiwgMTAxLCA0NCwgIDEwMywgMTIyLCAxMDUsIDExMn07CisKK3N0YXRpYyB2b2lkIHN0YXRpY19yZWYodm9pZCAqdW51c2VkKSB7fQorc3RhdGljIHZvaWQgc3RhdGljX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICp1bnVzZWQpIHt9CitzdGF0aWMgY29uc3QgZ3JwY19zbGljZV9yZWZjb3VudF92dGFibGUgc3RhdGljX3N1Yl92dGFibGUgPSB7CisgICAgc3RhdGljX3JlZiwgc3RhdGljX3VucmVmLCBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbCwKKyAgICBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsfTsKK2NvbnN0IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlIGdycGNfc3RhdGljX21ldGFkYXRhX3Z0YWJsZSA9IHsKKyAgICBzdGF0aWNfcmVmLCBzdGF0aWNfdW5yZWYsIGdycGNfc3RhdGljX3NsaWNlX2VxLCBncnBjX3N0YXRpY19zbGljZV9oYXNofTsKK3N0YXRpYyBncnBjX3NsaWNlX3JlZmNvdW50IHN0YXRpY19zdWJfcmVmY250ID0geyZzdGF0aWNfc3ViX3Z0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0aWNfc3ViX3JlZmNudH07CitncnBjX3NsaWNlX3JlZmNvdW50IGdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1tHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVF0gPSB7CisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCisgICAgeyZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUsICZzdGF0aWNfc3ViX3JlZmNudH0sCit9OworCitjb25zdCBncnBjX3NsaWNlIGdycGNfc3RhdGljX3NsaWNlX3RhYmxlW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXSA9IHsKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1swXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMCwgNX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzFdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1LCA3fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMl0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDEyLCA3fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbM10sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDE5LCAxMH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzRdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyOSwgN319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzVdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNiwgMn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzZdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzOCwgMTJ9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTAsIDExfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDYxLCAxNn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzldLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3NywgMTN9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxMF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkwLCAyMH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzExXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTEwLCAxMn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzEyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTIyLCAzMH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzEzXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTUyLCAxMH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzE0XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTYyLCA0fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMTVdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxNjYsIDh9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxNl0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDE3NCwgMTF9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxN10sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDE4NSwgMTJ9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxOF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDE5NywgMTZ9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxOV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIxMywgMTR9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIxXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAxOX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjQ2LCAxMn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIzXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjU4LCAzMH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzI0XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjg4LCAzMX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzI1XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzE5LCAzNn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzI2XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzU1LCAxfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjddLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNTYsIDF9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syOF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDM1NywgMX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzI5XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzU4LCA4fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzBdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNjYsIDR9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szMV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDM3MCwgN319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzMyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzc3LCA4fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzNdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzODUsIDE2fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzRdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MDEsIDR9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szNV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQwNSwgM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzM2XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDA4LCAzfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzddLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MTEsIDR9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szOF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQxNSwgNX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzM5XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDIwLCA0fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNDBdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MjQsIDN9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0MV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQyNywgM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzQyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDMwLCAxfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNDNdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MzEsIDExfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNDRdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0NDIsIDN9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0NV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQ0NSwgM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzQ2XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDQ4LCAzfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNDddLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0NTEsIDN9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0OF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQ1NCwgM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzQ5XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDU3LCAxNH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzUwXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDcxLCAxNX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzUxXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDg2LCAxM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzUyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDk5LCAxNX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzUzXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTE0LCAxM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzU0XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTI3LCA2fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNTVdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1MzMsIDI3fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNTZdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1NjAsIDN9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1N10sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDU2MywgNX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzU4XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTY4LCAxM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzU5XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTgxLCAxM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzYwXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTk0LCAxOX19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzYxXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjEzLCAxNn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzYyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjI5LCAxNn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzYzXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjQ1LCAxNH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzY0XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjU5LCAxNn19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzY1XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjc1LCAxM319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzY2XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjg4LCA2fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNjddLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA2OTQsIDR9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2OF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDY5OCwgNH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzY5XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNzAyLCA2fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNzBdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MDgsIDd9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3MV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDcxNSwgNH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzcyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNzE5LCA4fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNzNdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MjcsIDE3fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNzRdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3NDQsIDEzfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNzVdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3NTcsIDh9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3Nl0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc2NSwgMTl9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3N10sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc4NCwgMTN9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3OF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc5NywgNH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzc5XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgODAxLCA4fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODBdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4MDksIDEyfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODFdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4MjEsIDE4fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODJdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4MzksIDE5fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODNdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4NTgsIDV9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s4NF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDg2MywgN319LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzg1XSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgODcwLCA3fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODZdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4NzcsIDExfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODddLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4ODgsIDZ9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s4OF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDg5NCwgMTB9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s4OV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkwNCwgMjV9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s5MF0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkyOSwgMTd9fSwKKyAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s5MV0sCisgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDk0NiwgNH19LAorICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzkyXSwKKyAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTUwLCAzfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTNdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5NTMsIDE2fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTRdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5NjksIDE2fX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTVdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5ODUsIDEzfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTZdLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5OTgsIDEyfX0sCisgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTddLAorICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxMDEwLCAyMX19LAorfTsKKwogdWludHB0cl90IGdycGNfc3RhdGljX21kZWxlbV91c2VyX2RhdGFbR1JQQ19TVEFUSUNfTURFTEVNX0NPVU5UXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDQsIDgsIDYsIDIsIDQsIDgsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDQsIDQsIDYsIDYsIDgsIDh9OwogCi1jb25zdCB1aW50OF90IGdycGNfc3RhdGljX21ldGFkYXRhX2VsZW1faW5kaWNlc1tHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlQgKiAyXSA9Ci0gICAgezExLCAzMywgMTAsIDMzLCAxMiwgMzMsIDEyLCA1MCwgMTMsIDMzLCAxNCwgMzMsIDE1LCAzMywgMTYsIDMzLCAxNywgMzMsCi0gICAgIDE5LCAzMywgMjAsIDMzLCAyMSwgMzMsIDIyLCAzMywgMjMsIDMzLCAyNCwgMzMsIDI1LCAzMywgMjYsIDMzLCAyNywgMzMsCi0gICAgIDI4LCAxOCwgMjgsIDMzLCAyOSwgMzMsIDMwLCAzMywgMzQsIDMzLCAzNSwgMzMsIDM2LCAzMywgMzcsIDMzLCA0MCwgMzEsCi0gICAgIDQwLCAzMiwgNDAsIDQ5LCA0MCwgNTQsIDQwLCA1NSwgNDAsIDU2LCA0MCwgNTcsIDQxLCAzMSwgNDEsIDQ5LCA0MSwgNTQsCi0gICAgIDQ2LCAwLCAgNDYsIDEsICA0NiwgMiwgIDUxLCAzMywgNTgsIDMzLCA1OSwgMzMsIDYwLCAzMywgNjEsIDMzLCA2MiwgMzMsCi0gICAgIDYzLCAzMywgNjQsIDMzLCA2NSwgMzMsIDY2LCAzMywgNjcsIDMzLCA2OCwgMzMsIDY5LCAzOCwgNjksIDcxLCA2OSwgNzQsCi0gICAgIDcwLCA4MiwgNzAsIDgzLCA3MiwgMzMsIDczLCAzMywgNzUsIDMzLCA3NiwgMzMsIDc3LCAzMywgNzgsIDMzLCA3OSwgMzksCi0gICAgIDc5LCA1MiwgNzksIDUzLCA4MCwgMzMsIDgxLCAzMywgODQsIDMsICA4NCwgNCwgIDg0LCA1LCAgODQsIDYsICA4NCwgNywKLSAgICAgODQsIDgsICA4NCwgOSwgIDg1LCAzMywgODYsIDg3LCA4OCwgMzMsIDg5LCAzMywgOTAsIDMzLCA5MSwgMzMsIDkyLCAzM307CitzdGF0aWMgY29uc3QgaW50OF90IGVsZW1zX3JbXSA9IHsKKyAgICAxMCwgOCwgICAtMywgIDAsICA5LCAgIDIxLCAgLTc2LCAyMiwgIDAsICAgMTAsICAtNywgIDIwLCAwLCAgMTksIDE4LCAxNywKKyAgICAxNiwgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgMCwgIDAsICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgMCwgIDAsCisgICAgMCwgIC00OSwgLTUwLCAxNiwgLTUyLCAtNTMsIC01NCwgLTU0LCAtNTUsIC01NiwgLTU3LCAwLCAgMzgsIDM3LCAzNiwgMzUsCisgICAgMzQsIDMzLCAgMzIsICAzMSwgMzAsICAyOSwgIDI4LCAgMjcsICAyNiwgIDI1LCAgMjQsICAyMywgMjIsIDIxLCAyMCwgMTksCisgICAgMTgsIDE3LCAgMTYsICAxNSwgMTQsICAxMywgIDEyLCAgMTUsICAxNCwgIDEzLCAgMTIsICAxMSwgMTAsIDksICA4LCAgMH07CitzdGF0aWMgdWludDMyX3QgZWxlbXNfcGhhc2godWludDMyX3QgaSkgeworICBpIC09IDQyOworICB1aW50MzJfdCB4ID0gaSAlIDk2OworICB1aW50MzJfdCB5ID0gaSAvIDk2OworICB1aW50MzJfdCBoID0geDsKKyAgaWYgKHkgPCBHUFJfQVJSQVlfU0laRShlbGVtc19yKSkgeworICAgIHVpbnQzMl90IGRlbHRhID0gKHVpbnQzMl90KWVsZW1zX3JbeV07CisgICAgaCArPSBkZWx0YTsKKyAgfQorICByZXR1cm4gaDsKK30KIAotY29uc3QgY2hhciAqY29uc3QgZ3JwY19zdGF0aWNfbWV0YWRhdGFfc3RyaW5nc1tHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVF0gPSB7Ci0gICAgIjAiLAotICAgICIxIiwKLSAgICAiMiIsCi0gICAgIjIwMCIsCi0gICAgIjIwNCIsCi0gICAgIjIwNiIsCi0gICAgIjMwNCIsCi0gICAgIjQwMCIsCi0gICAgIjQwNCIsCi0gICAgIjUwMCIsCi0gICAgImFjY2VwdCIsCi0gICAgImFjY2VwdC1jaGFyc2V0IiwKLSAgICAiYWNjZXB0LWVuY29kaW5nIiwKLSAgICAiYWNjZXB0LWxhbmd1YWdlIiwKLSAgICAiYWNjZXB0LXJhbmdlcyIsCi0gICAgImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIsCi0gICAgImFnZSIsCi0gICAgImFsbG93IiwKLSAgICAiYXBwbGljYXRpb24vZ3JwYyIsCi0gICAgIjphdXRob3JpdHkiLAotICAgICJhdXRob3JpemF0aW9uIiwKLSAgICAiY2FjaGUtY29udHJvbCIsCi0gICAgImNvbnRlbnQtZGlzcG9zaXRpb24iLAotICAgICJjb250ZW50LWVuY29kaW5nIiwKLSAgICAiY29udGVudC1sYW5ndWFnZSIsCi0gICAgImNvbnRlbnQtbGVuZ3RoIiwKLSAgICAiY29udGVudC1sb2NhdGlvbiIsCi0gICAgImNvbnRlbnQtcmFuZ2UiLAotICAgICJjb250ZW50LXR5cGUiLAotICAgICJjb29raWUiLAotICAgICJkYXRlIiwKLSAgICAiZGVmbGF0ZSIsCi0gICAgImRlZmxhdGUsZ3ppcCIsCi0gICAgIiIsCi0gICAgImV0YWciLAotICAgICJleHBlY3QiLAotICAgICJleHBpcmVzIiwKLSAgICAiZnJvbSIsCi0gICAgIkdFVCIsCi0gICAgImdycGMiLAotICAgICJncnBjLWFjY2VwdC1lbmNvZGluZyIsCi0gICAgImdycGMtZW5jb2RpbmciLAotICAgICJncnBjLWludGVybmFsLWVuY29kaW5nLXJlcXVlc3QiLAotICAgICJncnBjLW1lc3NhZ2UiLAotICAgICJncnBjLXBheWxvYWQtYmluIiwKLSAgICAiZ3JwYy1zdGF0cy1iaW4iLAotICAgICJncnBjLXN0YXR1cyIsCi0gICAgImdycGMtdGltZW91dCIsCi0gICAgImdycGMtdHJhY2luZy1iaW4iLAotICAgICJnemlwIiwKLSAgICAiZ3ppcCwgZGVmbGF0ZSIsCi0gICAgImhvc3QiLAotICAgICJodHRwIiwKLSAgICAiaHR0cHMiLAotICAgICJpZGVudGl0eSIsCi0gICAgImlkZW50aXR5LGRlZmxhdGUiLAotICAgICJpZGVudGl0eSxkZWZsYXRlLGd6aXAiLAotICAgICJpZGVudGl0eSxnemlwIiwKLSAgICAiaWYtbWF0Y2giLAotICAgICJpZi1tb2RpZmllZC1zaW5jZSIsCi0gICAgImlmLW5vbmUtbWF0Y2giLAotICAgICJpZi1yYW5nZSIsCi0gICAgImlmLXVubW9kaWZpZWQtc2luY2UiLAotICAgICJsYXN0LW1vZGlmaWVkIiwKLSAgICAibGItY29zdC1iaW4iLAotICAgICJsYi10b2tlbiIsCi0gICAgImxpbmsiLAotICAgICJsb2NhdGlvbiIsCi0gICAgIm1heC1mb3J3YXJkcyIsCi0gICAgIjptZXRob2QiLAotICAgICI6cGF0aCIsCi0gICAgIlBPU1QiLAotICAgICJwcm94eS1hdXRoZW50aWNhdGUiLAotICAgICJwcm94eS1hdXRob3JpemF0aW9uIiwKLSAgICAiUFVUIiwKLSAgICAicmFuZ2UiLAotICAgICJyZWZlcmVyIiwKLSAgICAicmVmcmVzaCIsCi0gICAgInJldHJ5LWFmdGVyIiwKLSAgICAiOnNjaGVtZSIsCi0gICAgInNlcnZlciIsCi0gICAgInNldC1jb29raWUiLAotICAgICIvIiwKLSAgICAiL2luZGV4Lmh0bWwiLAotICAgICI6c3RhdHVzIiwKLSAgICAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsCi0gICAgInRlIiwKLSAgICAidHJhaWxlcnMiLAotICAgICJ0cmFuc2Zlci1lbmNvZGluZyIsCi0gICAgInVzZXItYWdlbnQiLAotICAgICJ2YXJ5IiwKLSAgICAidmlhIiwKLSAgICAid3d3LWF1dGhlbnRpY2F0ZSJ9Oworc3RhdGljIGNvbnN0IHVpbnQxNl90IGVsZW1fa2V5c1tdID0geworICAgIDEwMDksIDEwMTAsIDEwMTEsIDI0MCwgIDI0MSwgIDI0MiwgIDI0MywgIDI0NCwgIDEzOCwgIDEzOSwgIDQyLCAgIDQzLAorICAgIDQyOSwgIDQzMCwgIDQzMSwgIDkxMSwgIDkxMiwgIDkxMywgIDcxMiwgIDcxMywgIDEwOTgsIDUyMiwgIDcxNCwgIDEyOTQsCisgICAgMTM5MiwgMTQ5MCwgMTU4OCwgNDgyMiwgNDkyMCwgNDk1MSwgNTExNiwgNTIxNCwgNTMxMiwgMTExMSwgNTQxMCwgNTUwOCwKKyAgICA1NjA2LCA1NzA0LCA1ODAyLCA1OTAwLCA1OTk4LCA2MDk2LCA2MTk0LCA2MjkyLCA2MzkwLCA2NDg4LCA2NTg2LCA2Njg0LAorICAgIDY3ODIsIDY4ODAsIDY5NzgsIDcwNzYsIDcxNzQsIDcyNzIsIDczNzAsIDc0NjgsIDc1NjYsIDc2NjQsIDc3NjIsIDc4NjAsCisgICAgNzk1OCwgODA1NiwgODE1NCwgODI1MiwgODM1MCwgMTA3NCwgMTA3NSwgMTA3NiwgMTA3NywgODQ0OCwgODU0NiwgODY0NCwKKyAgICA4NzQyLCA4ODQwLCA4OTM4LCA5MDM2LCA5MTM0LCAzMTQsICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMTMyLCAgMjMxLCAgMjMyLCAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgMH07CitzdGF0aWMgY29uc3QgdWludDhfdCBlbGVtX2lkeHNbXSA9IHsKKyAgICA3NCwgIDc3LCAgNzUsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMTUsICAxNiwgIDE3LCAgMTgsICAxMSwgIDEyLCAgMTMsCisgICAgMywgICA0LCAgIDUsICAgMCwgICAxLCAgIDQxLCAgNiwgICAyLCAgIDcwLCAgNDgsICA1NSwgIDU2LCAgMjQsICAyNSwgIDI2LAorICAgIDI3LCAgMjgsICAyOSwgIDcsICAgMzAsICAzMSwgIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwKKyAgICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NywgIDU4LCAgNTksCisgICAgNjAsICA2MSwgIDYyLCAgNjMsICA2NCwgIDc2LCAgNzgsICA3OSwgIDgwLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcxLAorICAgIDcyLCAgNzMsICAxNCwgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCA4LCAgIDksICAgMTB9OwogCi1jb25zdCB1aW50OF90IGdycGNfc3RhdGljX2FjY2VwdF9lbmNvZGluZ19tZXRhZGF0YVs4XSA9IHswLCAgMjksIDI2LCAzMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4LCAzMiwgMjcsIDMxfTsKK2dycGNfbWRlbGVtIGdycGNfc3RhdGljX21kZWxlbV9mb3Jfc3RhdGljX3N0cmluZ3MoaW50IGEsIGludCBiKSB7CisgIGlmIChhID09IC0xIHx8IGIgPT0gLTEpIHJldHVybiBHUlBDX01ETlVMTDsKKyAgdWludDMyX3QgayA9ICh1aW50MzJfdCkoYSAqIDk4ICsgYik7CisgIHVpbnQzMl90IGggPSBlbGVtc19waGFzaChrKTsKKyAgcmV0dXJuIGggPCBHUFJfQVJSQVlfU0laRShlbGVtX2tleXMpICYmIGVsZW1fa2V5c1toXSA9PSBrCisgICAgICAgICAgICAgPyBHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbZWxlbV9pZHhzW2hdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpCisgICAgICAgICAgICAgOiBHUlBDX01ETlVMTDsKK30KKworZ3JwY19tZGVsZW1fZGF0YSBncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbR1JQQ19TVEFUSUNfTURFTEVNX0NPVU5UXSA9IHsKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbN10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1MCwgMTF9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjZdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzU1LCAxfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDUwLCAxMX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syN10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNTYsIDF9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzddLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTAsIDExfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzI4XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDM1NywgMX19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3NywgMTN9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjldLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzU4LCA4fX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s5XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc3LCAxM319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNjYsIDR9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzldLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNzcsIDEzfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzMxXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDM3MCwgN319fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNiwgMn19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szMl0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNzcsIDh9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzExXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDExMCwgMTJ9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzNdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzg1LCAxNn19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1LCA3fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzM0XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQwMSwgNH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMl0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxMiwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szNV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MDUsIDN9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzJdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTIsIDd9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzZdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDA4LCAzfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDI5LCA3fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzM3XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQxMSwgNH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyOSwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szOF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MTUsIDV9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzRdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjksIDd9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzldLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDIwLCA0fX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDE5LCAxMH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzFdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNSwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0MF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MjQsIDN9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzFdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNSwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0MV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MjcsIDN9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMCwgNX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0Ml0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MzAsIDF9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMCwgNX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0M10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0MzEsIDExfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDEyLCA3fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzQ0XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQ0MiwgM319fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMl0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxMiwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0NV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0NDUsIDN9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzJdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTIsIDd9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNDZdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDQ4LCAzfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDEyLCA3fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzQ3XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQ1MSwgM319fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMl0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxMiwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s0OF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0NTQsIDN9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzQ5XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDQ1NywgMTR9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1MF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0NzEsIDE1fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNTBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNDcxLCAxNX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1MV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0ODYsIDEzfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1Ml0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA0OTksIDE1fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNTNdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTE0LCAxM319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzU0XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDUyNywgNn19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzU1XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDUzMywgMjd9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1Nl0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1NjAsIDN9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1N10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1NjMsIDV9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s1OF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA1NjgsIDEzfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNTldLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNTgxLCAxM319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzYwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDU5NCwgMTl9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2MV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA2MTMsIDE2fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNjJdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjI5LCAxNn19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzYzXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDY0NSwgMTR9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2NF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA2NTksIDE2fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNjVdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNjc1LCAxM319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzExXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDExMCwgMTJ9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2Nl0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA2ODgsIDZ9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2N10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA2OTQsIDR9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2OF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA2OTgsIDR9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s2OV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MDIsIDZ9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3MF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MDgsIDd9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3MV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MTUsIDR9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxNF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxNjIsIDR9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3Ml0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MTksIDh9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3M10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3MjcsIDE3fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbNzRdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgNzQ0LCAxM319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzc1XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc1NywgOH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzc2XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc2NSwgMTl9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s3N10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA3ODQsIDEzfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMTVdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTY2LCA4fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMTZdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMTc0LCAxMX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzc4XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDc5NywgNH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzc5XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDgwMSwgOH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzgwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDgwOSwgMTJ9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s4MV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4MjEsIDE4fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODJdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgODM5LCAxOX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzgzXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDg1OCwgNX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzg0XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDg2MywgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzg1XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDg3MCwgN319LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzg2XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDg3NywgMTF9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s4N10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4ODgsIDZ9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s4OF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA4OTQsIDEwfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbODldLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTA0LCAyNX19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzkwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkyOSwgMTd9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMjBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMjI3LCAwfX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxM10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxNTIsIDEwfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTFdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTQ2LCA0fX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTJdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTUwLCAzfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzIwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDIyNywgMH19fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTNdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTUzLCAxNn19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAyMjcsIDB9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzEwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkwLCAyMH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1syOV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNTgsIDh9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzEwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkwLCAyMH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1szMV0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAzNzAsIDd9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzEwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkwLCAyMH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s5NF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5NjksIDE2fX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5MCwgMjB9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMzBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgMzY2LCA0fX19LAorICAgIHt7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1sxMF0sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyA5MCwgMjB9fSwKKyAgICAgey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbOTVdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTg1LCAxM319fSwKKyAgICB7ey5yZWZjb3VudCA9ICZncnBjX3N0YXRpY19tZXRhZGF0YV9yZWZjb3VudHNbMTBdLAorICAgICAgLmRhdGEucmVmY291bnRlZCA9IHtnX2J5dGVzICsgOTAsIDIwfX0sCisgICAgIHsucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzk2XSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDk5OCwgMTJ9fX0sCisgICAge3sucmVmY291bnQgPSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzWzEwXSwKKyAgICAgIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyArIDkwLCAyMH19LAorICAgICB7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1s5N10sCisgICAgICAuZGF0YS5yZWZjb3VudGVkID0ge2dfYnl0ZXMgKyAxMDEwLCAyMX19fSwKK307Citjb25zdCB1aW50OF90IGdycGNfc3RhdGljX2FjY2VwdF9lbmNvZGluZ19tZXRhZGF0YVs4XSA9IHswLCAgNzQsIDc1LCA3NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc3LCA3OCwgNzksIDgwfTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmggYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oCmluZGV4IDI4YWQ2ZjIuLjc2NDljY2QgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgKKysrIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaApAQCAtNDQsMzc1ICs0NCw1MjEgQEAKIAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKIAotI2RlZmluZSBHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVCA5MwotZXh0ZXJuIGdycGNfbWRzdHIgZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbR1JQQ19TVEFUSUNfTURTVFJfQ09VTlRdOwotLyogIjAiICovCi0jZGVmaW5lIEdSUENfTURTVFJfMCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzBdKQotLyogIjEiICovCi0jZGVmaW5lIEdSUENfTURTVFJfMSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzFdKQotLyogIjIiICovCi0jZGVmaW5lIEdSUENfTURTVFJfMiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzJdKQotLyogIjIwMCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl8yMDAgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVszXSkKLS8qICIyMDQiICovCi0jZGVmaW5lIEdSUENfTURTVFJfMjA0ICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNF0pCi0vKiAiMjA2IiAqLwotI2RlZmluZSBHUlBDX01EU1RSXzIwNiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzVdKQotLyogIjMwNCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl8zMDQgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs2XSkKLS8qICI0MDAiICovCi0jZGVmaW5lIEdSUENfTURTVFJfNDAwICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbN10pCi0vKiAiNDA0IiAqLwotI2RlZmluZSBHUlBDX01EU1RSXzQwNCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzhdKQotLyogIjUwMCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl81MDAgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs5XSkKLS8qICJhY2NlcHQiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQUNDRVBUICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMTBdKQotLyogImFjY2VwdC1jaGFyc2V0IiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0FDQ0VQVF9DSEFSU0VUICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMTFdKQotLyogImFjY2VwdC1lbmNvZGluZyIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9BQ0NFUFRfRU5DT0RJTkcgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVsxMl0pCi0vKiAiYWNjZXB0LWxhbmd1YWdlIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0FDQ0VQVF9MQU5HVUFHRSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzEzXSkKLS8qICJhY2NlcHQtcmFuZ2VzIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0FDQ0VQVF9SQU5HRVMgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVsxNF0pCi0vKiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0FDQ0VTU19DT05UUk9MX0FMTE9XX09SSUdJTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzE1XSkKLS8qICJhZ2UiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQUdFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMTZdKQotLyogImFsbG93IiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0FMTE9XICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMTddKQotLyogImFwcGxpY2F0aW9uL2dycGMiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQVBQTElDQVRJT05fU0xBU0hfR1JQQyAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzE4XSkKKyNkZWZpbmUgR1JQQ19TVEFUSUNfTURTVFJfQ09VTlQgOTgKK2V4dGVybiBjb25zdCBncnBjX3NsaWNlIGdycGNfc3RhdGljX3NsaWNlX3RhYmxlW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsKKy8qICI6cGF0aCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9QQVRIIChncnBjX3N0YXRpY19zbGljZV90YWJsZVswXSkKKy8qICI6bWV0aG9kIiAqLworI2RlZmluZSBHUlBDX01EU1RSX01FVEhPRCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMV0pCisvKiAiOnN0YXR1cyIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9TVEFUVVMgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzJdKQogLyogIjphdXRob3JpdHkiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQVVUSE9SSVRZICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMTldKQotLyogImF1dGhvcml6YXRpb24iICovCi0jZGVmaW5lIEdSUENfTURTVFJfQVVUSE9SSVpBVElPTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzIwXSkKLS8qICJjYWNoZS1jb250cm9sIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0NBQ0hFX0NPTlRST0wgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVsyMV0pCi0vKiAiY29udGVudC1kaXNwb3NpdGlvbiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9DT05URU5UX0RJU1BPU0lUSU9OICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMjJdKQotLyogImNvbnRlbnQtZW5jb2RpbmciICovCi0jZGVmaW5lIEdSUENfTURTVFJfQ09OVEVOVF9FTkNPRElORyAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzIzXSkKLS8qICJjb250ZW50LWxhbmd1YWdlIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0NPTlRFTlRfTEFOR1VBR0UgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVsyNF0pCi0vKiAiY29udGVudC1sZW5ndGgiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQ09OVEVOVF9MRU5HVEggKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVsyNV0pCi0vKiAiY29udGVudC1sb2NhdGlvbiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9DT05URU5UX0xPQ0FUSU9OICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMjZdKQotLyogImNvbnRlbnQtcmFuZ2UiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQ09OVEVOVF9SQU5HRSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzI3XSkKLS8qICJjb250ZW50LXR5cGUiICovCi0jZGVmaW5lIEdSUENfTURTVFJfQ09OVEVOVF9UWVBFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMjhdKQotLyogImNvb2tpZSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9DT09LSUUgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVsyOV0pCi0vKiAiZGF0ZSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9EQVRFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMzBdKQotLyogImRlZmxhdGUiICovCi0jZGVmaW5lIEdSUENfTURTVFJfREVGTEFURSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzMxXSkKLS8qICJkZWZsYXRlLGd6aXAiICovCi0jZGVmaW5lIEdSUENfTURTVFJfREVGTEFURV9DT01NQV9HWklQICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMzJdKQotLyogIiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9FTVBUWSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzMzXSkKLS8qICJldGFnIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0VUQUcgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVszNF0pCi0vKiAiZXhwZWN0IiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0VYUEVDVCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzM1XSkKLS8qICJleHBpcmVzIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0VYUElSRVMgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVszNl0pCi0vKiAiZnJvbSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9GUk9NICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMzddKQotLyogIkdFVCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9HRVQgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVszOF0pCi0vKiAiZ3JwYyIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbMzldKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0dSUENfQUNDRVBUX0VOQ09ESU5HICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNDBdKQotLyogImdycGMtZW5jb2RpbmciICovCi0jZGVmaW5lIEdSUENfTURTVFJfR1JQQ19FTkNPRElORyAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzQxXSkKLS8qICJncnBjLWludGVybmFsLWVuY29kaW5nLXJlcXVlc3QiICovCi0jZGVmaW5lIEdSUENfTURTVFJfR1JQQ19JTlRFUk5BTF9FTkNPRElOR19SRVFVRVNUICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNDJdKQorI2RlZmluZSBHUlBDX01EU1RSX0FVVEhPUklUWSAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbM10pCisvKiAiOnNjaGVtZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9TQ0hFTUUgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzRdKQorLyogInRlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX1RFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs1XSkKIC8qICJncnBjLW1lc3NhZ2UiICovCi0jZGVmaW5lIEdSUENfTURTVFJfR1JQQ19NRVNTQUdFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNDNdKQotLyogImdycGMtcGF5bG9hZC1iaW4iICovCi0jZGVmaW5lIEdSUENfTURTVFJfR1JQQ19QQVlMT0FEX0JJTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzQ0XSkKLS8qICJncnBjLXN0YXRzLWJpbiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX1NUQVRTX0JJTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzQ1XSkKKyNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX01FU1NBR0UgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzZdKQogLyogImdycGMtc3RhdHVzIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0dSUENfU1RBVFVTICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNDZdKQotLyogImdycGMtdGltZW91dCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX1RJTUVPVVQgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs0N10pCi0vKiAiZ3JwYy10cmFjaW5nLWJpbiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX1RSQUNJTkdfQklOICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNDhdKQotLyogImd6aXAiICovCi0jZGVmaW5lIEdSUENfTURTVFJfR1pJUCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzQ5XSkKLS8qICJnemlwLCBkZWZsYXRlIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0daSVBfQ09NTUFfREVGTEFURSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzUwXSkKKyNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX1NUQVRVUyAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbN10pCisvKiAiZ3JwYy1wYXlsb2FkLWJpbiIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX1BBWUxPQURfQklOIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4XSkKKy8qICJncnBjLWVuY29kaW5nIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0dSUENfRU5DT0RJTkcgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzldKQorLyogImdycGMtYWNjZXB0LWVuY29kaW5nIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0dSUENfQUNDRVBUX0VOQ09ESU5HIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsxMF0pCisvKiAiY29udGVudC10eXBlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0NPTlRFTlRfVFlQRSAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMTFdKQorLyogImdycGMtaW50ZXJuYWwtZW5jb2RpbmctcmVxdWVzdCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX0lOVEVSTkFMX0VOQ09ESU5HX1JFUVVFU1QgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzEyXSkKKy8qICJ1c2VyLWFnZW50IiAqLworI2RlZmluZSBHUlBDX01EU1RSX1VTRVJfQUdFTlQgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzEzXSkKIC8qICJob3N0IiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0hPU1QgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs1MV0pCi0vKiAiaHR0cCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9IVFRQICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNTJdKQotLyogImh0dHBzIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0hUVFBTICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNTNdKQorI2RlZmluZSBHUlBDX01EU1RSX0hPU1QgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzE0XSkKKy8qICJsYi10b2tlbiIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9MQl9UT0tFTiAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMTVdKQorLyogImxiLWNvc3QtYmluIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0xCX0NPU1RfQklOIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsxNl0pCisvKiAiZ3JwYy10aW1lb3V0IiAqLworI2RlZmluZSBHUlBDX01EU1RSX0dSUENfVElNRU9VVCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMTddKQorLyogImdycGMtdHJhY2luZy1iaW4iICovCisjZGVmaW5lIEdSUENfTURTVFJfR1JQQ19UUkFDSU5HX0JJTiAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMThdKQorLyogImdycGMtc3RhdHMtYmluIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0dSUENfU1RBVFNfQklOIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsxOV0pCisvKiAiIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0VNUFRZIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsyMF0pCisvKiAiZ3JwYy53YWl0X2Zvcl9yZWFkeSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX0RPVF9XQUlUX0ZPUl9SRUFEWSAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMjFdKQorLyogImdycGMudGltZW91dCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9HUlBDX0RPVF9USU1FT1VUIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsyMl0pCisvKiAiZ3JwYy5tYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0dSUENfRE9UX01BWF9SRVFVRVNUX01FU1NBR0VfQllURVMgXAorICAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMjNdKQorLyogImdycGMubWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXMiICovCisjZGVmaW5lIEdSUENfTURTVFJfR1JQQ19ET1RfTUFYX1JFU1BPTlNFX01FU1NBR0VfQllURVMgXAorICAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMjRdKQorLyogIi9ncnBjLmxiLnYxLkxvYWRCYWxhbmNlci9CYWxhbmNlTG9hZCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9TTEFTSF9HUlBDX0RPVF9MQl9ET1RfVjFfRE9UX0xPQURCQUxBTkNFUl9TTEFTSF9CQUxBTkNFTE9BRCBcCisgIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsyNV0pCisvKiAiMCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl8wIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsyNl0pCisvKiAiMSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl8xIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsyN10pCisvKiAiMiIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl8yIChncnBjX3N0YXRpY19zbGljZV90YWJsZVsyOF0pCiAvKiAiaWRlbnRpdHkiICovCi0jZGVmaW5lIEdSUENfTURTVFJfSURFTlRJVFkgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs1NF0pCisjZGVmaW5lIEdSUENfTURTVFJfSURFTlRJVFkgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzI5XSkKKy8qICJnemlwIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0daSVAgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzMwXSkKKy8qICJkZWZsYXRlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0RFRkxBVEUgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzMxXSkKKy8qICJ0cmFpbGVycyIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9UUkFJTEVSUyAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMzJdKQorLyogImFwcGxpY2F0aW9uL2dycGMiICovCisjZGVmaW5lIEdSUENfTURTVFJfQVBQTElDQVRJT05fU0xBU0hfR1JQQyAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMzNdKQorLyogIlBPU1QiICovCisjZGVmaW5lIEdSUENfTURTVFJfUE9TVCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbMzRdKQorLyogIjIwMCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl8yMDAgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzM1XSkKKy8qICI0MDQiICovCisjZGVmaW5lIEdSUENfTURTVFJfNDA0IChncnBjX3N0YXRpY19zbGljZV90YWJsZVszNl0pCisvKiAiaHR0cCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9IVFRQIChncnBjX3N0YXRpY19zbGljZV90YWJsZVszN10pCisvKiAiaHR0cHMiICovCisjZGVmaW5lIEdSUENfTURTVFJfSFRUUFMgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzM4XSkKKy8qICJncnBjIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0dSUEMgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzM5XSkKKy8qICJHRVQiICovCisjZGVmaW5lIEdSUENfTURTVFJfR0VUIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs0MF0pCisvKiAiUFVUIiAqLworI2RlZmluZSBHUlBDX01EU1RSX1BVVCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNDFdKQorLyogIi8iICovCisjZGVmaW5lIEdSUENfTURTVFJfU0xBU0ggKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzQyXSkKKy8qICIvaW5kZXguaHRtbCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9TTEFTSF9JTkRFWF9ET1RfSFRNTCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNDNdKQorLyogIjIwNCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl8yMDQgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzQ0XSkKKy8qICIyMDYiICovCisjZGVmaW5lIEdSUENfTURTVFJfMjA2IChncnBjX3N0YXRpY19zbGljZV90YWJsZVs0NV0pCisvKiAiMzA0IiAqLworI2RlZmluZSBHUlBDX01EU1RSXzMwNCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNDZdKQorLyogIjQwMCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl80MDAgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzQ3XSkKKy8qICI1MDAiICovCisjZGVmaW5lIEdSUENfTURTVFJfNTAwIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs0OF0pCisvKiAiYWNjZXB0LWNoYXJzZXQiICovCisjZGVmaW5lIEdSUENfTURTVFJfQUNDRVBUX0NIQVJTRVQgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzQ5XSkKKy8qICJhY2NlcHQtZW5jb2RpbmciICovCisjZGVmaW5lIEdSUENfTURTVFJfQUNDRVBUX0VOQ09ESU5HIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs1MF0pCisvKiAiZ3ppcCwgZGVmbGF0ZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9HWklQX0NPTU1BX0RFRkxBVEUgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzUxXSkKKy8qICJhY2NlcHQtbGFuZ3VhZ2UiICovCisjZGVmaW5lIEdSUENfTURTVFJfQUNDRVBUX0xBTkdVQUdFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs1Ml0pCisvKiAiYWNjZXB0LXJhbmdlcyIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9BQ0NFUFRfUkFOR0VTIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs1M10pCisvKiAiYWNjZXB0IiAqLworI2RlZmluZSBHUlBDX01EU1RSX0FDQ0VQVCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNTRdKQorLyogImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU4gKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzU1XSkKKy8qICJhZ2UiICovCisjZGVmaW5lIEdSUENfTURTVFJfQUdFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs1Nl0pCisvKiAiYWxsb3ciICovCisjZGVmaW5lIEdSUENfTURTVFJfQUxMT1cgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzU3XSkKKy8qICJhdXRob3JpemF0aW9uIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0FVVEhPUklaQVRJT04gKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzU4XSkKKy8qICJjYWNoZS1jb250cm9sIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0NBQ0hFX0NPTlRST0wgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzU5XSkKKy8qICJjb250ZW50LWRpc3Bvc2l0aW9uIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0NPTlRFTlRfRElTUE9TSVRJT04gKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzYwXSkKKy8qICJjb250ZW50LWVuY29kaW5nIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0NPTlRFTlRfRU5DT0RJTkcgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzYxXSkKKy8qICJjb250ZW50LWxhbmd1YWdlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0NPTlRFTlRfTEFOR1VBR0UgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzYyXSkKKy8qICJjb250ZW50LWxlbmd0aCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9DT05URU5UX0xFTkdUSCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNjNdKQorLyogImNvbnRlbnQtbG9jYXRpb24iICovCisjZGVmaW5lIEdSUENfTURTVFJfQ09OVEVOVF9MT0NBVElPTiAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNjRdKQorLyogImNvbnRlbnQtcmFuZ2UiICovCisjZGVmaW5lIEdSUENfTURTVFJfQ09OVEVOVF9SQU5HRSAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNjVdKQorLyogImNvb2tpZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9DT09LSUUgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzY2XSkKKy8qICJkYXRlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0RBVEUgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzY3XSkKKy8qICJldGFnIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0VUQUcgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzY4XSkKKy8qICJleHBlY3QiICovCisjZGVmaW5lIEdSUENfTURTVFJfRVhQRUNUIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs2OV0pCisvKiAiZXhwaXJlcyIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9FWFBJUkVTIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs3MF0pCisvKiAiZnJvbSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9GUk9NIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs3MV0pCisvKiAiaWYtbWF0Y2giICovCisjZGVmaW5lIEdSUENfTURTVFJfSUZfTUFUQ0ggKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzcyXSkKKy8qICJpZi1tb2RpZmllZC1zaW5jZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9JRl9NT0RJRklFRF9TSU5DRSAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNzNdKQorLyogImlmLW5vbmUtbWF0Y2giICovCisjZGVmaW5lIEdSUENfTURTVFJfSUZfTk9ORV9NQVRDSCAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbNzRdKQorLyogImlmLXJhbmdlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0lGX1JBTkdFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs3NV0pCisvKiAiaWYtdW5tb2RpZmllZC1zaW5jZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9JRl9VTk1PRElGSUVEX1NJTkNFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs3Nl0pCisvKiAibGFzdC1tb2RpZmllZCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9MQVNUX01PRElGSUVEIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs3N10pCisvKiAibGluayIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9MSU5LIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs3OF0pCisvKiAibG9jYXRpb24iICovCisjZGVmaW5lIEdSUENfTURTVFJfTE9DQVRJT04gKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzc5XSkKKy8qICJtYXgtZm9yd2FyZHMiICovCisjZGVmaW5lIEdSUENfTURTVFJfTUFYX0ZPUldBUkRTIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4MF0pCisvKiAicHJveHktYXV0aGVudGljYXRlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX1BST1hZX0FVVEhFTlRJQ0FURSAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbODFdKQorLyogInByb3h5LWF1dGhvcml6YXRpb24iICovCisjZGVmaW5lIEdSUENfTURTVFJfUFJPWFlfQVVUSE9SSVpBVElPTiAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbODJdKQorLyogInJhbmdlIiAqLworI2RlZmluZSBHUlBDX01EU1RSX1JBTkdFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4M10pCisvKiAicmVmZXJlciIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9SRUZFUkVSIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4NF0pCisvKiAicmVmcmVzaCIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9SRUZSRVNIIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4NV0pCisvKiAicmV0cnktYWZ0ZXIiICovCisjZGVmaW5lIEdSUENfTURTVFJfUkVUUllfQUZURVIgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzg2XSkKKy8qICJzZXJ2ZXIiICovCisjZGVmaW5lIEdSUENfTURTVFJfU0VSVkVSIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4N10pCisvKiAic2V0LWNvb2tpZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9TRVRfQ09PS0lFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4OF0pCisvKiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9TVFJJQ1RfVFJBTlNQT1JUX1NFQ1VSSVRZIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs4OV0pCisvKiAidHJhbnNmZXItZW5jb2RpbmciICovCisjZGVmaW5lIEdSUENfTURTVFJfVFJBTlNGRVJfRU5DT0RJTkcgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzkwXSkKKy8qICJ2YXJ5IiAqLworI2RlZmluZSBHUlBDX01EU1RSX1ZBUlkgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzkxXSkKKy8qICJ2aWEiICovCisjZGVmaW5lIEdSUENfTURTVFJfVklBIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs5Ml0pCisvKiAid3d3LWF1dGhlbnRpY2F0ZSIgKi8KKyNkZWZpbmUgR1JQQ19NRFNUUl9XV1dfQVVUSEVOVElDQVRFIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs5M10pCiAvKiAiaWRlbnRpdHksZGVmbGF0ZSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9JREVOVElUWV9DT01NQV9ERUZMQVRFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNTVdKQorI2RlZmluZSBHUlBDX01EU1RSX0lERU5USVRZX0NPTU1BX0RFRkxBVEUgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzk0XSkKKy8qICJpZGVudGl0eSxnemlwIiAqLworI2RlZmluZSBHUlBDX01EU1RSX0lERU5USVRZX0NPTU1BX0daSVAgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzk1XSkKKy8qICJkZWZsYXRlLGd6aXAiICovCisjZGVmaW5lIEdSUENfTURTVFJfREVGTEFURV9DT01NQV9HWklQIChncnBjX3N0YXRpY19zbGljZV90YWJsZVs5Nl0pCiAvKiAiaWRlbnRpdHksZGVmbGF0ZSxnemlwIiAqLwogI2RlZmluZSBHUlBDX01EU1RSX0lERU5USVRZX0NPTU1BX0RFRkxBVEVfQ09NTUFfR1pJUCBcCi0gICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNTZdKQotLyogImlkZW50aXR5LGd6aXAiICovCi0jZGVmaW5lIEdSUENfTURTVFJfSURFTlRJVFlfQ09NTUFfR1pJUCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzU3XSkKLS8qICJpZi1tYXRjaCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9JRl9NQVRDSCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzU4XSkKLS8qICJpZi1tb2RpZmllZC1zaW5jZSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9JRl9NT0RJRklFRF9TSU5DRSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzU5XSkKLS8qICJpZi1ub25lLW1hdGNoIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0lGX05PTkVfTUFUQ0ggKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs2MF0pCi0vKiAiaWYtcmFuZ2UiICovCi0jZGVmaW5lIEdSUENfTURTVFJfSUZfUkFOR0UgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs2MV0pCi0vKiAiaWYtdW5tb2RpZmllZC1zaW5jZSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9JRl9VTk1PRElGSUVEX1NJTkNFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNjJdKQotLyogImxhc3QtbW9kaWZpZWQiICovCi0jZGVmaW5lIEdSUENfTURTVFJfTEFTVF9NT0RJRklFRCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzYzXSkKLS8qICJsYi1jb3N0LWJpbiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9MQl9DT1NUX0JJTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzY0XSkKLS8qICJsYi10b2tlbiIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9MQl9UT0tFTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzY1XSkKLS8qICJsaW5rIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX0xJTksgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs2Nl0pCi0vKiAibG9jYXRpb24iICovCi0jZGVmaW5lIEdSUENfTURTVFJfTE9DQVRJT04gKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs2N10pCi0vKiAibWF4LWZvcndhcmRzIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX01BWF9GT1JXQVJEUyAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzY4XSkKLS8qICI6bWV0aG9kIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX01FVEhPRCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzY5XSkKLS8qICI6cGF0aCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9QQVRIICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNzBdKQotLyogIlBPU1QiICovCi0jZGVmaW5lIEdSUENfTURTVFJfUE9TVCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzcxXSkKLS8qICJwcm94eS1hdXRoZW50aWNhdGUiICovCi0jZGVmaW5lIEdSUENfTURTVFJfUFJPWFlfQVVUSEVOVElDQVRFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNzJdKQotLyogInByb3h5LWF1dGhvcml6YXRpb24iICovCi0jZGVmaW5lIEdSUENfTURTVFJfUFJPWFlfQVVUSE9SSVpBVElPTiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzczXSkKLS8qICJQVVQiICovCi0jZGVmaW5lIEdSUENfTURTVFJfUFVUICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNzRdKQotLyogInJhbmdlIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX1JBTkdFICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbNzVdKQotLyogInJlZmVyZXIiICovCi0jZGVmaW5lIEdSUENfTURTVFJfUkVGRVJFUiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzc2XSkKLS8qICJyZWZyZXNoIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX1JFRlJFU0ggKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs3N10pCi0vKiAicmV0cnktYWZ0ZXIiICovCi0jZGVmaW5lIEdSUENfTURTVFJfUkVUUllfQUZURVIgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs3OF0pCi0vKiAiOnNjaGVtZSIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9TQ0hFTUUgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs3OV0pCi0vKiAic2VydmVyIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX1NFUlZFUiAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzgwXSkKLS8qICJzZXQtY29va2llIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX1NFVF9DT09LSUUgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs4MV0pCi0vKiAiLyIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9TTEFTSCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzgyXSkKLS8qICIvaW5kZXguaHRtbCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9TTEFTSF9JTkRFWF9ET1RfSFRNTCAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzgzXSkKLS8qICI6c3RhdHVzIiAqLwotI2RlZmluZSBHUlBDX01EU1RSX1NUQVRVUyAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzg0XSkKLS8qICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiAqLwotI2RlZmluZSBHUlBDX01EU1RSX1NUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFkgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs4NV0pCi0vKiAidGUiICovCi0jZGVmaW5lIEdSUENfTURTVFJfVEUgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs4Nl0pCi0vKiAidHJhaWxlcnMiICovCi0jZGVmaW5lIEdSUENfTURTVFJfVFJBSUxFUlMgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs4N10pCi0vKiAidHJhbnNmZXItZW5jb2RpbmciICovCi0jZGVmaW5lIEdSUENfTURTVFJfVFJBTlNGRVJfRU5DT0RJTkcgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVs4OF0pCi0vKiAidXNlci1hZ2VudCIgKi8KLSNkZWZpbmUgR1JQQ19NRFNUUl9VU0VSX0FHRU5UICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbODldKQotLyogInZhcnkiICovCi0jZGVmaW5lIEdSUENfTURTVFJfVkFSWSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzkwXSkKLS8qICJ2aWEiICovCi0jZGVmaW5lIEdSUENfTURTVFJfVklBICgmZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbOTFdKQotLyogInd3dy1hdXRoZW50aWNhdGUiICovCi0jZGVmaW5lIEdSUENfTURTVFJfV1dXX0FVVEhFTlRJQ0FURSAoJmdycGNfc3RhdGljX21kc3RyX3RhYmxlWzkyXSkKKyAgKGdycGNfc3RhdGljX3NsaWNlX3RhYmxlWzk3XSkKKworZXh0ZXJuIGNvbnN0IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlIGdycGNfc3RhdGljX21ldGFkYXRhX3Z0YWJsZTsKK2V4dGVybiBncnBjX3NsaWNlX3JlZmNvdW50CisgICAgZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsKKyNkZWZpbmUgR1JQQ19JU19TVEFUSUNfTUVUQURBVEFfU1RSSU5HKHNsaWNlKSBcCisgICgoc2xpY2UpLnJlZmNvdW50ICE9IE5VTEwgJiYgICAgICAgICAgICAgICAgXAorICAgKHNsaWNlKS5yZWZjb3VudC0+dnRhYmxlID09ICZncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUpCisKKyNkZWZpbmUgR1JQQ19TVEFUSUNfTUVUQURBVEFfSU5ERVgoc3RhdGljX3NsaWNlKSBcCisgICgoaW50KSgoc3RhdGljX3NsaWNlKS5yZWZjb3VudCAtIGdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50cykpCiAKICNkZWZpbmUgR1JQQ19TVEFUSUNfTURFTEVNX0NPVU5UIDgxCi1leHRlcm4gZ3JwY19tZGVsZW0gZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVF07CitleHRlcm4gZ3JwY19tZGVsZW1fZGF0YSBncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbR1JQQ19TVEFUSUNfTURFTEVNX0NPVU5UXTsKIGV4dGVybiB1aW50cHRyX3QgZ3JwY19zdGF0aWNfbWRlbGVtX3VzZXJfZGF0YVtHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlRdOwotLyogImFjY2VwdC1jaGFyc2V0IjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX0NIQVJTRVRfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMF0pCi0vKiAiYWNjZXB0IjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzFdKQotLyogImFjY2VwdC1lbmNvZGluZyI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9FTkNPRElOR19FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsyXSkKLS8qICJhY2NlcHQtZW5jb2RpbmciOiAiZ3ppcCwgZGVmbGF0ZSIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX0VOQ09ESU5HX0daSVBfQ09NTUFfREVGTEFURSBcCi0gICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzNdKQotLyogImFjY2VwdC1sYW5ndWFnZSI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9MQU5HVUFHRV9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0XSkKLS8qICJhY2NlcHQtcmFuZ2VzIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX1JBTkdFU19FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1XSkKLS8qICJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4iOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fRU1QVFkgXAotICAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2XSkKLS8qICJhZ2UiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9BR0VfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbN10pCi0vKiAiYWxsb3ciOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9BTExPV19FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs4XSkKLS8qICI6YXV0aG9yaXR5IjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQVVUSE9SSVRZX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzldKQotLyogImF1dGhvcml6YXRpb24iOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9BVVRIT1JJWkFUSU9OX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzEwXSkKLS8qICJjYWNoZS1jb250cm9sIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQ0FDSEVfQ09OVFJPTF9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxMV0pCi0vKiAiY29udGVudC1kaXNwb3NpdGlvbiI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0NPTlRFTlRfRElTUE9TSVRJT05fRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMTJdKQotLyogImNvbnRlbnQtZW5jb2RpbmciOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX0VOQ09ESU5HX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzEzXSkKLS8qICJjb250ZW50LWxhbmd1YWdlIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQ09OVEVOVF9MQU5HVUFHRV9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxNF0pCi0vKiAiY29udGVudC1sZW5ndGgiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX0xFTkdUSF9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxNV0pCi0vKiAiY29udGVudC1sb2NhdGlvbiI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0NPTlRFTlRfTE9DQVRJT05fRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMTZdKQotLyogImNvbnRlbnQtcmFuZ2UiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX1JBTkdFX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzE3XSkKKy8qICJncnBjLXN0YXR1cyI6ICIwIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18wIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVswXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImdycGMtc3RhdHVzIjogIjEiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0dSUENfU1RBVFVTXzEgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzFdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiZ3JwYy1zdGF0dXMiOiAiMiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fR1JQQ19TVEFUVVNfMiBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJncnBjLWVuY29kaW5nIjogImlkZW50aXR5IiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0VOQ09ESU5HX0lERU5USVRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVszXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImdycGMtZW5jb2RpbmciOiAiZ3ppcCIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fR1JQQ19FTkNPRElOR19HWklQIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImdycGMtZW5jb2RpbmciOiAiZGVmbGF0ZSIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fR1JQQ19FTkNPRElOR19ERUZMQVRFIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogInRlIjogInRyYWlsZXJzIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9URV9UUkFJTEVSUyBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKIC8qICJjb250ZW50LXR5cGUiOiAiYXBwbGljYXRpb24vZ3JwYyIgKi8KICNkZWZpbmUgR1JQQ19NREVMRU1fQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX1NMQVNIX0dSUEMgXAotICAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxOF0pCi0vKiAiY29udGVudC10eXBlIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fQ09OVEVOVF9UWVBFX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzE5XSkKLS8qICJjb29raWUiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9DT09LSUVfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjBdKQotLyogImRhdGUiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9EQVRFX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzIxXSkKLS8qICJldGFnIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fRVRBR19FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsyMl0pCi0vKiAiZXhwZWN0IjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fRVhQRUNUX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzIzXSkKLS8qICJleHBpcmVzIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fRVhQSVJFU19FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsyNF0pCi0vKiAiZnJvbSI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0ZST01fRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjVdKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIjogImRlZmxhdGUiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0dSUENfQUNDRVBUX0VOQ09ESU5HX0RFRkxBVEUgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjZdKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIjogImRlZmxhdGUsZ3ppcCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fR1JQQ19BQ0NFUFRfRU5DT0RJTkdfREVGTEFURV9DT01NQV9HWklQIFwKLSAgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjddKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIjogImd6aXAiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0dSUENfQUNDRVBUX0VOQ09ESU5HX0daSVAgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjhdKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIjogImlkZW50aXR5IiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19JREVOVElUWSBcCi0gICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzI5XSkKLS8qICJncnBjLWFjY2VwdC1lbmNvZGluZyI6ICJpZGVudGl0eSxkZWZsYXRlIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19JREVOVElUWV9DT01NQV9ERUZMQVRFIFwKLSAgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMzBdKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIjogImlkZW50aXR5LGRlZmxhdGUsZ3ppcCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fR1JQQ19BQ0NFUFRfRU5DT0RJTkdfSURFTlRJVFlfQ09NTUFfREVGTEFURV9DT01NQV9HWklQIFwKLSAgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMzFdKQotLyogImdycGMtYWNjZXB0LWVuY29kaW5nIjogImlkZW50aXR5LGd6aXAiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0dSUENfQUNDRVBUX0VOQ09ESU5HX0lERU5USVRZX0NPTU1BX0daSVAgXAotICAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVszMl0pCi0vKiAiZ3JwYy1lbmNvZGluZyI6ICJkZWZsYXRlIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0VOQ09ESU5HX0RFRkxBVEUgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMzNdKQotLyogImdycGMtZW5jb2RpbmciOiAiZ3ppcCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fR1JQQ19FTkNPRElOR19HWklQICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM0XSkKLS8qICJncnBjLWVuY29kaW5nIjogImlkZW50aXR5IiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0VOQ09ESU5HX0lERU5USVRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM1XSkKLS8qICJncnBjLXN0YXR1cyI6ICIwIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18wICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM2XSkKLS8qICJncnBjLXN0YXR1cyI6ICIxIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18xICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM3XSkKLS8qICJncnBjLXN0YXR1cyI6ICIyIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX1NUQVRVU18yICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM4XSkKLS8qICJob3N0IjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fSE9TVF9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVszOV0pCi0vKiAiaWYtbWF0Y2giOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9JRl9NQVRDSF9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0MF0pCi0vKiAiaWYtbW9kaWZpZWQtc2luY2UiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9JRl9NT0RJRklFRF9TSU5DRV9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0MV0pCi0vKiAiaWYtbm9uZS1tYXRjaCI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0lGX05PTkVfTUFUQ0hfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNDJdKQotLyogImlmLXJhbmdlIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fSUZfUkFOR0VfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNDNdKQotLyogImlmLXVubW9kaWZpZWQtc2luY2UiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9JRl9VTk1PRElGSUVEX1NJTkNFX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzQ0XSkKLS8qICJsYXN0LW1vZGlmaWVkIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fTEFTVF9NT0RJRklFRF9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0NV0pCi0vKiAibGItY29zdC1iaW4iOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9MQl9DT1NUX0JJTl9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0Nl0pCi0vKiAibGItdG9rZW4iOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9MQl9UT0tFTl9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0N10pCi0vKiAibGluayI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX0xJTktfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNDhdKQotLyogImxvY2F0aW9uIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fTE9DQVRJT05fRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNDldKQotLyogIm1heC1mb3J3YXJkcyI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX01BWF9GT1JXQVJEU19FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1MF0pCi0vKiAiOm1ldGhvZCI6ICJHRVQiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX01FVEhPRF9HRVQgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNTFdKQorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzddLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCiAvKiAiOm1ldGhvZCI6ICJQT1NUIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9NRVRIT0RfUE9TVCAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1Ml0pCi0vKiAiOm1ldGhvZCI6ICJQVVQiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX01FVEhPRF9QVVQgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNTNdKQotLyogIjpwYXRoIjogIi8iICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1BBVEhfU0xBU0ggKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNTRdKQotLyogIjpwYXRoIjogIi9pbmRleC5odG1sIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9QQVRIX1NMQVNIX0lOREVYX0RPVF9IVE1MICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU1XSkKLS8qICJwcm94eS1hdXRoZW50aWNhdGUiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9QUk9YWV9BVVRIRU5USUNBVEVfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNTZdKQotLyogInByb3h5LWF1dGhvcml6YXRpb24iOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9QUk9YWV9BVVRIT1JJWkFUSU9OX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU3XSkKLS8qICJyYW5nZSI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1JBTkdFX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU4XSkKLS8qICJyZWZlcmVyIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fUkVGRVJFUl9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1OV0pCi0vKiAicmVmcmVzaCI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1JFRlJFU0hfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjBdKQotLyogInJldHJ5LWFmdGVyIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fUkVUUllfQUZURVJfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjFdKQotLyogIjpzY2hlbWUiOiAiZ3JwYyIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU0NIRU1FX0dSUEMgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjJdKQotLyogIjpzY2hlbWUiOiAiaHR0cCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU0NIRU1FX0hUVFAgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjNdKQotLyogIjpzY2hlbWUiOiAiaHR0cHMiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1NDSEVNRV9IVFRQUyAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2NF0pCi0vKiAic2VydmVyIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU0VSVkVSX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzY1XSkKLS8qICJzZXQtY29va2llIjogIiIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU0VUX0NPT0tJRV9FTVBUWSAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2Nl0pCisjZGVmaW5lIEdSUENfTURFTEVNX01FVEhPRF9QT1NUIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs4XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQogLyogIjpzdGF0dXMiOiAiMjAwIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9TVEFUVVNfMjAwICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzY3XSkKLS8qICI6c3RhdHVzIjogIjIwNCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU1RBVFVTXzIwNCAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2OF0pCi0vKiAiOnN0YXR1cyI6ICIyMDYiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1NUQVRVU18yMDYgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjldKQotLyogIjpzdGF0dXMiOiAiMzA0IiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9TVEFUVVNfMzA0ICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzcwXSkKLS8qICI6c3RhdHVzIjogIjQwMCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU1RBVFVTXzQwMCAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3MV0pCisjZGVmaW5lIEdSUENfTURFTEVNX1NUQVRVU18yMDAgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzldLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCiAvKiAiOnN0YXR1cyI6ICI0MDQiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1NUQVRVU180MDQgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNzJdKQorI2RlZmluZSBHUlBDX01ERUxFTV9TVEFUVVNfNDA0IFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxMF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICI6c2NoZW1lIjogImh0dHAiICovCisjZGVmaW5lIEdSUENfTURFTEVNX1NDSEVNRV9IVFRQIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxMV0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICI6c2NoZW1lIjogImh0dHBzIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9TQ0hFTUVfSFRUUFMgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzEyXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogIjpzY2hlbWUiOiAiZ3JwYyIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fU0NIRU1FX0dSUEMgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzEzXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogIjphdXRob3JpdHkiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9BVVRIT1JJVFlfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzE0XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogIjptZXRob2QiOiAiR0VUIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9NRVRIT0RfR0VUIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxNV0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICI6bWV0aG9kIjogIlBVVCIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fTUVUSE9EX1BVVCBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMTZdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiOnBhdGgiOiAiLyIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fUEFUSF9TTEFTSCBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMTddLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiOnBhdGgiOiAiL2luZGV4Lmh0bWwiICovCisjZGVmaW5lIEdSUENfTURFTEVNX1BBVEhfU0xBU0hfSU5ERVhfRE9UX0hUTUwgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzE4XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogIjpzdGF0dXMiOiAiMjA0IiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9TVEFUVVNfMjA0IFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsxOV0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICI6c3RhdHVzIjogIjIwNiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fU1RBVFVTXzIwNiBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjBdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiOnN0YXR1cyI6ICIzMDQiICovCisjZGVmaW5lIEdSUENfTURFTEVNX1NUQVRVU18zMDQgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzIxXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogIjpzdGF0dXMiOiAiNDAwIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9TVEFUVVNfNDAwIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVsyMl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKIC8qICI6c3RhdHVzIjogIjUwMCIgKi8KLSNkZWZpbmUgR1JQQ19NREVMRU1fU1RBVFVTXzUwMCAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3M10pCisjZGVmaW5lIEdSUENfTURFTEVNX1NUQVRVU181MDAgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzIzXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImFjY2VwdC1jaGFyc2V0IjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX0NIQVJTRVRfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzI0XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImFjY2VwdC1lbmNvZGluZyI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9FTkNPRElOR19FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjVdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiYWNjZXB0LWVuY29kaW5nIjogImd6aXAsIGRlZmxhdGUiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9FTkNPRElOR19HWklQX0NPTU1BX0RFRkxBVEUgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzI2XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImFjY2VwdC1sYW5ndWFnZSI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9MQU5HVUFHRV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjddLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiYWNjZXB0LXJhbmdlcyI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9SQU5HRVNfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzI4XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImFjY2VwdCI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0FDQ0VQVF9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMjldLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVszMF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJhZ2UiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9BR0VfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzMxXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImFsbG93IjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fQUxMT1dfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzMyXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImF1dGhvcml6YXRpb24iOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9BVVRIT1JJWkFUSU9OX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVszM10sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJjYWNoZS1jb250cm9sIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fQ0FDSEVfQ09OVFJPTF9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMzRdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiY29udGVudC1kaXNwb3NpdGlvbiI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0NPTlRFTlRfRElTUE9TSVRJT05fRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM1XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImNvbnRlbnQtZW5jb2RpbmciOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX0VOQ09ESU5HX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVszNl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJjb250ZW50LWxhbmd1YWdlIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fQ09OVEVOVF9MQU5HVUFHRV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMzddLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiY29udGVudC1sZW5ndGgiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX0xFTkdUSF9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbMzhdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiY29udGVudC1sb2NhdGlvbiI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0NPTlRFTlRfTE9DQVRJT05fRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzM5XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImNvbnRlbnQtcmFuZ2UiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX1JBTkdFX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0MF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJjb250ZW50LXR5cGUiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9DT05URU5UX1RZUEVfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzQxXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImNvb2tpZSI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0NPT0tJRV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNDJdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiZGF0ZSI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0RBVEVfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzQzXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImV0YWciOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9FVEFHX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0NF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJleHBlY3QiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9FWFBFQ1RfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzQ1XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImV4cGlyZXMiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9FWFBJUkVTX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs0Nl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJmcm9tIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fRlJPTV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNDddLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiaG9zdCI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0hPU1RfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzQ4XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImlmLW1hdGNoIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fSUZfTUFUQ0hfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzQ5XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImlmLW1vZGlmaWVkLXNpbmNlIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fSUZfTU9ESUZJRURfU0lOQ0VfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzUwXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImlmLW5vbmUtbWF0Y2giOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9JRl9OT05FX01BVENIX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1MV0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJpZi1yYW5nZSI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0lGX1JBTkdFX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1Ml0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJpZi11bm1vZGlmaWVkLXNpbmNlIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fSUZfVU5NT0RJRklFRF9TSU5DRV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNTNdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAibGFzdC1tb2RpZmllZCI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0xBU1RfTU9ESUZJRURfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU0XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImxiLXRva2VuIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fTEJfVE9LRU5fRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU1XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImxiLWNvc3QtYmluIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fTEJfQ09TVF9CSU5fRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU2XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogImxpbmsiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9MSU5LX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1N10sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJsb2NhdGlvbiI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0xPQ0FUSU9OX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs1OF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJtYXgtZm9yd2FyZHMiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9NQVhfRk9SV0FSRFNfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzU5XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogInByb3h5LWF1dGhlbnRpY2F0ZSI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX1BST1hZX0FVVEhFTlRJQ0FURV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjBdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAicHJveHktYXV0aG9yaXphdGlvbiI6ICIiICovCisjZGVmaW5lIEdSUENfTURFTEVNX1BST1hZX0FVVEhPUklaQVRJT05fRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzYxXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogInJhbmdlIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fUkFOR0VfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzYyXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQorLyogInJlZmVyZXIiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9SRUZFUkVSX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2M10sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJyZWZyZXNoIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fUkVGUkVTSF9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjRdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAicmV0cnktYWZ0ZXIiOiAiIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9SRVRSWV9BRlRFUl9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjVdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAic2VydmVyIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fU0VSVkVSX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2Nl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJzZXQtY29va2llIjogIiIgKi8KKyNkZWZpbmUgR1JQQ19NREVMRU1fU0VUX0NPT0tJRV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNjddLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCiAvKiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSI6ICIiICovCiAjZGVmaW5lIEdSUENfTURFTEVNX1NUUklDVF9UUkFOU1BPUlRfU0VDVVJJVFlfRU1QVFkgXAotICAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3NF0pCi0vKiAidGUiOiAidHJhaWxlcnMiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1RFX1RSQUlMRVJTICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzc1XSkKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs2OF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKIC8qICJ0cmFuc2Zlci1lbmNvZGluZyI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1RSQU5TRkVSX0VOQ09ESU5HX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzc2XSkKKyNkZWZpbmUgR1JQQ19NREVMRU1fVFJBTlNGRVJfRU5DT0RJTkdfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzY5XSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQogLyogInVzZXItYWdlbnQiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9VU0VSX0FHRU5UX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzc3XSkKKyNkZWZpbmUgR1JQQ19NREVMRU1fVVNFUl9BR0VOVF9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNzBdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCiAvKiAidmFyeSI6ICIiICovCi0jZGVmaW5lIEdSUENfTURFTEVNX1ZBUllfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNzhdKQorI2RlZmluZSBHUlBDX01ERUxFTV9WQVJZX0VNUFRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3MV0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKIC8qICJ2aWEiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9WSUFfRU1QVFkgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNzldKQorI2RlZmluZSBHUlBDX01ERUxFTV9WSUFfRU1QVFkgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzcyXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQogLyogInd3dy1hdXRoZW50aWNhdGUiOiAiIiAqLwotI2RlZmluZSBHUlBDX01ERUxFTV9XV1dfQVVUSEVOVElDQVRFX0VNUFRZICgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzgwXSkKKyNkZWZpbmUgR1JQQ19NREVMRU1fV1dXX0FVVEhFTlRJQ0FURV9FTVBUWSBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNzNdLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiZ3JwYy1hY2NlcHQtZW5jb2RpbmciOiAiaWRlbnRpdHkiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0dSUENfQUNDRVBUX0VOQ09ESU5HX0lERU5USVRZIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3NF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJncnBjLWFjY2VwdC1lbmNvZGluZyI6ICJkZWZsYXRlIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19ERUZMQVRFIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3NV0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJncnBjLWFjY2VwdC1lbmNvZGluZyI6ICJpZGVudGl0eSxkZWZsYXRlIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19JREVOVElUWV9DT01NQV9ERUZMQVRFIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3Nl0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJncnBjLWFjY2VwdC1lbmNvZGluZyI6ICJnemlwIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19HWklQIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3N10sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJncnBjLWFjY2VwdC1lbmNvZGluZyI6ICJpZGVudGl0eSxnemlwIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19JREVOVElUWV9DT01NQV9HWklQIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVs3OF0sIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKSkKKy8qICJncnBjLWFjY2VwdC1lbmNvZGluZyI6ICJkZWZsYXRlLGd6aXAiICovCisjZGVmaW5lIEdSUENfTURFTEVNX0dSUENfQUNDRVBUX0VOQ09ESU5HX0RFRkxBVEVfQ09NTUFfR1pJUCBcCisgIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbNzldLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpCisvKiAiZ3JwYy1hY2NlcHQtZW5jb2RpbmciOiAiaWRlbnRpdHksZGVmbGF0ZSxnemlwIiAqLworI2RlZmluZSBHUlBDX01ERUxFTV9HUlBDX0FDQ0VQVF9FTkNPRElOR19JREVOVElUWV9DT01NQV9ERUZMQVRFX0NPTU1BX0daSVAgXAorICAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWzgwXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQogCi1leHRlcm4gY29uc3QgdWludDhfdAotICAgIGdycGNfc3RhdGljX21ldGFkYXRhX2VsZW1faW5kaWNlc1tHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlQgKiAyXTsKLWV4dGVybiBjb25zdCBjaGFyICpjb25zdCBncnBjX3N0YXRpY19tZXRhZGF0YV9zdHJpbmdzW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsKK2dycGNfbWRlbGVtIGdycGNfc3RhdGljX21kZWxlbV9mb3Jfc3RhdGljX3N0cmluZ3MoaW50IGEsIGludCBiKTsKK3R5cGVkZWYgZW51bSB7CisgIEdSUENfQkFUQ0hfUEFUSCwKKyAgR1JQQ19CQVRDSF9NRVRIT0QsCisgIEdSUENfQkFUQ0hfU1RBVFVTLAorICBHUlBDX0JBVENIX0FVVEhPUklUWSwKKyAgR1JQQ19CQVRDSF9TQ0hFTUUsCisgIEdSUENfQkFUQ0hfVEUsCisgIEdSUENfQkFUQ0hfR1JQQ19NRVNTQUdFLAorICBHUlBDX0JBVENIX0dSUENfU1RBVFVTLAorICBHUlBDX0JBVENIX0dSUENfUEFZTE9BRF9CSU4sCisgIEdSUENfQkFUQ0hfR1JQQ19FTkNPRElORywKKyAgR1JQQ19CQVRDSF9HUlBDX0FDQ0VQVF9FTkNPRElORywKKyAgR1JQQ19CQVRDSF9DT05URU5UX1RZUEUsCisgIEdSUENfQkFUQ0hfR1JQQ19JTlRFUk5BTF9FTkNPRElOR19SRVFVRVNULAorICBHUlBDX0JBVENIX1VTRVJfQUdFTlQsCisgIEdSUENfQkFUQ0hfSE9TVCwKKyAgR1JQQ19CQVRDSF9MQl9UT0tFTiwKKyAgR1JQQ19CQVRDSF9MQl9DT1NUX0JJTiwKKyAgR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVAorfSBncnBjX21ldGFkYXRhX2JhdGNoX2NhbGxvdXRzX2luZGV4OworCit0eXBlZGVmIHVuaW9uIHsKKyAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqYXJyYXlbR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVF07CisgIHN0cnVjdCB7CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqcGF0aDsKKyAgICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICptZXRob2Q7CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqc3RhdHVzOworICAgIHN0cnVjdCBncnBjX2xpbmtlZF9tZGVsZW0gKmF1dGhvcml0eTsKKyAgICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpzY2hlbWU7CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqdGU7CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqZ3JwY19tZXNzYWdlOworICAgIHN0cnVjdCBncnBjX2xpbmtlZF9tZGVsZW0gKmdycGNfc3RhdHVzOworICAgIHN0cnVjdCBncnBjX2xpbmtlZF9tZGVsZW0gKmdycGNfcGF5bG9hZF9iaW47CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqZ3JwY19lbmNvZGluZzsKKyAgICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpncnBjX2FjY2VwdF9lbmNvZGluZzsKKyAgICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpjb250ZW50X3R5cGU7CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqZ3JwY19pbnRlcm5hbF9lbmNvZGluZ19yZXF1ZXN0OworICAgIHN0cnVjdCBncnBjX2xpbmtlZF9tZGVsZW0gKnVzZXJfYWdlbnQ7CisgICAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqaG9zdDsKKyAgICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpsYl90b2tlbjsKKyAgICBzdHJ1Y3QgZ3JwY19saW5rZWRfbWRlbGVtICpsYl9jb3N0X2JpbjsKKyAgfSBuYW1lZDsKK30gZ3JwY19tZXRhZGF0YV9iYXRjaF9jYWxsb3V0czsKKworI2RlZmluZSBHUlBDX0JBVENIX0lOREVYX09GKHNsaWNlKSAgICAgICAgICAgICAgICAgICAgICBcCisgIChHUlBDX0lTX1NUQVRJQ19NRVRBREFUQV9TVFJJTkcoKHNsaWNlKSkgICAgICAgICAgICAgIFwKKyAgICAgICA/IChncnBjX21ldGFkYXRhX2JhdGNoX2NhbGxvdXRzX2luZGV4KUdQUl9DTEFNUCggXAorICAgICAgICAgICAgIEdSUENfU1RBVElDX01FVEFEQVRBX0lOREVYKChzbGljZSkpLCAwLCAgICBcCisgICAgICAgICAgICAgR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVCkgICAgICAgICAgICAgICAgIFwKKyAgICAgICA6IEdSUENfQkFUQ0hfQ0FMTE9VVFNfQ09VTlQpCisKIGV4dGVybiBjb25zdCB1aW50OF90IGdycGNfc3RhdGljX2FjY2VwdF9lbmNvZGluZ19tZXRhZGF0YVs4XTsKLSNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX0VOQ09ESU5HX0ZPUl9BTEdPUklUSE1TKGFsZ3MpIFwKLSAgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbZ3JwY19zdGF0aWNfYWNjZXB0X2VuY29kaW5nX21ldGFkYXRhWyhhbGdzKV1dKQorI2RlZmluZSBHUlBDX01ERUxFTV9BQ0NFUFRfRU5DT0RJTkdfRk9SX0FMR09SSVRITVMoYWxncykgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKEdSUENfTUFLRV9NREVMRU0oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlW2dycGNfc3RhdGljX2FjY2VwdF9lbmNvZGluZ19tZXRhZGF0YVsoYWxncyldXSwgXAorICAgICAgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKQogI2VuZGlmIC8qIEdSUENfQ09SRV9MSUJfVFJBTlNQT1JUX1NUQVRJQ19NRVRBREFUQV9IICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYwpzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYwpyZW5hbWUgdG8gc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jCmluZGV4IDVkY2UyZjIuLmFmMGFjODkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jCisrKyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYwpAQCAtMzEsNTEgKzMxLDUxIEBACiAgKgogICovCiAKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgiCiAKLWludCBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9lcnJvcihncnBjX3N0YXR1c19jb2RlIHN0YXR1cykgeworaW50IGdycGNfc3RhdHVzX3RvX2h0dHAyX2Vycm9yKGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKSB7CiAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBHUlBDX1NUQVRVU19PSzoKLSAgICAgIHJldHVybiBHUlBDX0NIVFRQMl9OT19FUlJPUjsKKyAgICAgIHJldHVybiBHUlBDX0hUVFAyX05PX0VSUk9SOwogICAgIGNhc2UgR1JQQ19TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgcmV0dXJuIEdSUENfQ0hUVFAyX0NBTkNFTDsKKyAgICAgIHJldHVybiBHUlBDX0hUVFAyX0NBTkNFTDsKICAgICBjYXNlIEdSUENfU1RBVFVTX0RFQURMSU5FX0VYQ0VFREVEOgotICAgICAgcmV0dXJuIEdSUENfQ0hUVFAyX0NBTkNFTDsKKyAgICAgIHJldHVybiBHUlBDX0hUVFAyX0NBTkNFTDsKICAgICBjYXNlIEdSUENfU1RBVFVTX1JFU09VUkNFX0VYSEFVU1RFRDoKLSAgICAgIHJldHVybiBHUlBDX0NIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTTsKKyAgICAgIHJldHVybiBHUlBDX0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNOwogICAgIGNhc2UgR1JQQ19TVEFUVVNfUEVSTUlTU0lPTl9ERU5JRUQ6Ci0gICAgICByZXR1cm4gR1JQQ19DSFRUUDJfSU5BREVRVUFURV9TRUNVUklUWTsKKyAgICAgIHJldHVybiBHUlBDX0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFk7CiAgICAgY2FzZSBHUlBDX1NUQVRVU19VTkFWQUlMQUJMRToKLSAgICAgIHJldHVybiBHUlBDX0NIVFRQMl9SRUZVU0VEX1NUUkVBTTsKKyAgICAgIHJldHVybiBHUlBDX0hUVFAyX1JFRlVTRURfU1RSRUFNOwogICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gR1JQQ19DSFRUUDJfSU5URVJOQUxfRVJST1I7CisgICAgICByZXR1cm4gR1JQQ19IVFRQMl9JTlRFUk5BTF9FUlJPUjsKICAgfQogfQogCi1ncnBjX3N0YXR1c19jb2RlIGdycGNfY2h0dHAyX2h0dHAyX2Vycm9yX3RvX2dycGNfc3RhdHVzKAotICAgIGdycGNfY2h0dHAyX2Vycm9yX2NvZGUgZXJyb3IsIGdwcl90aW1lc3BlYyBkZWFkbGluZSkgeworZ3JwY19zdGF0dXNfY29kZSBncnBjX2h0dHAyX2Vycm9yX3RvX2dycGNfc3RhdHVzKGdycGNfaHR0cDJfZXJyb3JfY29kZSBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncHJfdGltZXNwZWMgZGVhZGxpbmUpIHsKICAgc3dpdGNoIChlcnJvcikgewotICAgIGNhc2UgR1JQQ19DSFRUUDJfTk9fRVJST1I6CisgICAgY2FzZSBHUlBDX0hUVFAyX05PX0VSUk9SOgogICAgICAgLyogc2hvdWxkIG5ldmVyIGJlIHJlY2VpdmVkICovCiAgICAgICByZXR1cm4gR1JQQ19TVEFUVVNfSU5URVJOQUw7Ci0gICAgY2FzZSBHUlBDX0NIVFRQMl9DQU5DRUw6CisgICAgY2FzZSBHUlBDX0hUVFAyX0NBTkNFTDoKICAgICAgIC8qIGh0dHAyIGNhbmNlbCB0cmFuc2xhdGVzIHRvIFNUQVRVU19DQU5DRUxMRUQgaWZmIGRlYWRsaW5lIGhhc24ndCBiZWVuCiAgICAgICAgKiBleGNlZWRlZCAqLwogICAgICAgcmV0dXJuIGdwcl90aW1lX2NtcChncHJfbm93KGRlYWRsaW5lLmNsb2NrX3R5cGUpLCBkZWFkbGluZSkgPj0gMAogICAgICAgICAgICAgICAgICA/IEdSUENfU1RBVFVTX0RFQURMSU5FX0VYQ0VFREVECiAgICAgICAgICAgICAgICAgIDogR1JQQ19TVEFUVVNfQ0FOQ0VMTEVEOwotICAgIGNhc2UgR1JQQ19DSFRUUDJfRU5IQU5DRV9ZT1VSX0NBTE06CisgICAgY2FzZSBHUlBDX0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNOgogICAgICAgcmV0dXJuIEdSUENfU1RBVFVTX1JFU09VUkNFX0VYSEFVU1RFRDsKLSAgICBjYXNlIEdSUENfQ0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFk6CisgICAgY2FzZSBHUlBDX0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFk6CiAgICAgICByZXR1cm4gR1JQQ19TVEFUVVNfUEVSTUlTU0lPTl9ERU5JRUQ7Ci0gICAgY2FzZSBHUlBDX0NIVFRQMl9SRUZVU0VEX1NUUkVBTToKKyAgICBjYXNlIEdSUENfSFRUUDJfUkVGVVNFRF9TVFJFQU06CiAgICAgICByZXR1cm4gR1JQQ19TVEFUVVNfVU5BVkFJTEFCTEU7CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiBHUlBDX1NUQVRVU19JTlRFUk5BTDsKICAgfQogfQogCi1ncnBjX3N0YXR1c19jb2RlIGdycGNfY2h0dHAyX2h0dHAyX3N0YXR1c190b19ncnBjX3N0YXR1cyhpbnQgc3RhdHVzKSB7CitncnBjX3N0YXR1c19jb2RlIGdycGNfaHR0cDJfc3RhdHVzX3RvX2dycGNfc3RhdHVzKGludCBzdGF0dXMpIHsKICAgc3dpdGNoIChzdGF0dXMpIHsKICAgICAvKiB0aGVzZSBIVFRQMiBzdGF0dXMgY29kZXMgYXJlIGNhbGxlZCBvdXQgZXhwbGljaXRseSBpbiBzdGF0dXMucHJvdG8gKi8KICAgICBjYXNlIDIwMDoKQEAgLTExMCw2ICsxMTAsNCBAQAogICB9CiB9CiAKLWludCBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpIHsKLSAgcmV0dXJuIDIwMDsKLX0KK2ludCBncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpIHsgcmV0dXJuIDIwMDsgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmggYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKcmVuYW1lIHRvIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaAppbmRleCA5NTNiYzlmLi5lNmEyM2E2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaAorKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgKQEAgLTMxLDIwICszMSwxOSBAQAogICoKICAqLwogCi0jaWZuZGVmIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSAotI2RlZmluZSBHUlBDX0NPUkVfRVhUX1RSQU5TUE9SVF9DSFRUUDJfVFJBTlNQT1JUX1NUQVRVU19DT05WRVJTSU9OX0gKKyNpZm5kZWYgR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSAorI2RlZmluZSBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9TVEFUVVNfQ09OVkVSU0lPTl9ICiAKICNpbmNsdWRlIDxncnBjL2dycGMuaD4KLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIKIAogLyogQ29udmVyc2lvbiBvZiBncnBjIHN0YXR1cyBjb2RlcyB0byBodHRwMiBlcnJvciBjb2RlcyAoZm9yIFJTVF9TVFJFQU0pICovCi1ncnBjX2NodHRwMl9lcnJvcl9jb2RlIGdycGNfY2h0dHAyX2dycGNfc3RhdHVzX3RvX2h0dHAyX2Vycm9yKAotICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKTsKLWdycGNfc3RhdHVzX2NvZGUgZ3JwY19jaHR0cDJfaHR0cDJfZXJyb3JfdG9fZ3JwY19zdGF0dXMoCi0gICAgZ3JwY19jaHR0cDJfZXJyb3JfY29kZSBlcnJvciwgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lKTsKK2dycGNfaHR0cDJfZXJyb3JfY29kZSBncnBjX3N0YXR1c190b19odHRwMl9lcnJvcihncnBjX3N0YXR1c19jb2RlIHN0YXR1cyk7CitncnBjX3N0YXR1c19jb2RlIGdycGNfaHR0cDJfZXJyb3JfdG9fZ3JwY19zdGF0dXMoZ3JwY19odHRwMl9lcnJvcl9jb2RlIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwcl90aW1lc3BlYyBkZWFkbGluZSk7CiAKIC8qIENvbnZlcnNpb24gb2YgSFRUUCBzdGF0dXMgY29kZXMgKDpzdGF0dXMpIHRvIGdycGMgc3RhdHVzIGNvZGVzICovCi1ncnBjX3N0YXR1c19jb2RlIGdycGNfY2h0dHAyX2h0dHAyX3N0YXR1c190b19ncnBjX3N0YXR1cyhpbnQgc3RhdHVzKTsKLWludCBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpOworZ3JwY19zdGF0dXNfY29kZSBncnBjX2h0dHAyX3N0YXR1c190b19ncnBjX3N0YXR1cyhpbnQgc3RhdHVzKTsKK2ludCBncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpOwogCi0jZW5kaWYgLyogR1JQQ19DT1JFX0VYVF9UUkFOU1BPUlRfQ0hUVFAyX1RSQU5TUE9SVF9TVEFUVVNfQ09OVkVSU0lPTl9IICovCisjZW5kaWYgLyogR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuYwppbmRleCBiNThlYmJkLi4wZDRkN2U1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuYworKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuYwpAQCAtMTMxLDIwICsxMzEsMjEgQEAKICAgfQogfQogCi1zdGF0aWMgaW50IGlzX2FsbF93aGl0ZXNwYWNlKGNvbnN0IGNoYXIgKnApIHsKLSAgd2hpbGUgKCpwID09ICcgJykgcCsrOwotICByZXR1cm4gKnAgPT0gMDsKK3N0YXRpYyBpbnQgaXNfYWxsX3doaXRlc3BhY2UoY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqZW5kKSB7CisgIHdoaWxlIChwICE9IGVuZCAmJiAqcCA9PSAnICcpIHArKzsKKyAgcmV0dXJuIHAgPT0gZW5kOwogfQogCi1pbnQgZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dChjb25zdCBjaGFyICpidWZmZXIsIGdwcl90aW1lc3BlYyAqdGltZW91dCkgeworaW50IGdycGNfaHR0cDJfZGVjb2RlX3RpbWVvdXQoZ3JwY19zbGljZSB0ZXh0LCBncHJfdGltZXNwZWMgKnRpbWVvdXQpIHsKICAgaW50MzJfdCB4ID0gMDsKLSAgY29uc3QgdWludDhfdCAqcCA9IChjb25zdCB1aW50OF90ICopYnVmZmVyOworICBjb25zdCB1aW50OF90ICpwID0gR1JQQ19TTElDRV9TVEFSVF9QVFIodGV4dCk7CisgIGNvbnN0IHVpbnQ4X3QgKmVuZCA9IEdSUENfU0xJQ0VfRU5EX1BUUih0ZXh0KTsKICAgaW50IGhhdmVfZGlnaXQgPSAwOwogICAvKiBza2lwIHdoaXRlc3BhY2UgKi8KLSAgZm9yICg7ICpwID09ICcgJzsgcCsrKQorICBmb3IgKDsgcCAhPSBlbmQgJiYgKnAgPT0gJyAnOyBwKyspCiAgICAgOwogICAvKiBkZWNvZGUgbnVtZXJpYyBwYXJ0ICovCi0gIGZvciAoOyAqcCA+PSAnMCcgJiYgKnAgPD0gJzknOyBwKyspIHsKKyAgZm9yICg7IHAgIT0gZW5kICYmICpwID49ICcwJyAmJiAqcCA8PSAnOSc7IHArKykgewogICAgIGludDMyX3QgZGlnaXQgPSAoaW50MzJfdCkoKnAgLSAodWludDhfdCknMCcpOwogICAgIGhhdmVfZGlnaXQgPSAxOwogICAgIC8qIHNwZWMgYWxsb3dzIG1heC4gOCBkaWdpdHMsIGJ1dCB3ZSBhbGxvdyB2YWx1ZXMgdXAgdG8gMSwwMDAsMDAwLDAwMCAqLwpAQCAtMTU4LDggKzE1OSw5IEBACiAgIH0KICAgaWYgKCFoYXZlX2RpZ2l0KSByZXR1cm4gMDsKICAgLyogc2tpcCB3aGl0ZXNwYWNlICovCi0gIGZvciAoOyAqcCA9PSAnICc7IHArKykKKyAgZm9yICg7IHAgIT0gZW5kICYmICpwID09ICcgJzsgcCsrKQogICAgIDsKKyAgaWYgKHAgPT0gZW5kKSByZXR1cm4gMDsKICAgLyogZGVjb2RlIHVuaXQgc3BlY2lmaWVyICovCiAgIHN3aXRjaCAoKnApIHsKICAgICBjYXNlICduJzoKQEAgLTE4NCw1ICsxODYsNSBAQAogICAgICAgcmV0dXJuIDA7CiAgIH0KICAgcCsrOwotICByZXR1cm4gaXNfYWxsX3doaXRlc3BhY2UoKGNvbnN0IGNoYXIgKilwKTsKKyAgcmV0dXJuIGlzX2FsbF93aGl0ZXNwYWNlKChjb25zdCBjaGFyICopcCwgKGNvbnN0IGNoYXIgKillbmQpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmggYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuaAppbmRleCA5MmYwMmY2Li40YzgwMjVkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuaAorKysgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuaApAQCAtMzQsNyArMzQsOSBAQAogI2lmbmRlZiBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9USU1FT1VUX0VOQ09ESU5HX0gKICNkZWZpbmUgR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfVElNRU9VVF9FTkNPRElOR19ICiAKKyNpbmNsdWRlIDxncnBjL3NsaWNlLmg+CiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L3RpbWUuaD4KKwogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXBwb3J0L3N0cmluZy5oIgogCiAjZGVmaW5lIEdSUENfSFRUUDJfVElNRU9VVF9FTkNPREVfTUlOX0JVRlNJWkUgKEdQUl9MVE9BX01JTl9CVUZTSVpFICsgMSkKQEAgLTQyLDYgKzQ0LDYgQEAKIC8qIEVuY29kZS9kZWNvZGUgdGltZW91dHMgdG8gdGhlIEdSUEMgb3ZlciBIVFRQLzIgZm9ybWF0OwogICAgZW5jb2RpbmcgbWF5IHJvdW5kIHVwIGFyYml0cmFyaWx5ICovCiB2b2lkIGdycGNfaHR0cDJfZW5jb2RlX3RpbWVvdXQoZ3ByX3RpbWVzcGVjIHRpbWVvdXQsIGNoYXIgKmJ1ZmZlcik7Ci1pbnQgZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dChjb25zdCBjaGFyICpidWZmZXIsIGdwcl90aW1lc3BlYyAqdGltZW91dCk7CitpbnQgZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dChncnBjX3NsaWNlIHRleHQsIGdwcl90aW1lc3BlYyAqdGltZW91dCk7CiAKICNlbmRpZiAvKiBHUlBDX0NPUkVfTElCX1RSQU5TUE9SVF9USU1FT1VUX0VOQ09ESU5HX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMgYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5jCmluZGV4IDA1NWVkYmIuLjAwNGU3NDggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMKKysrIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3luYy5oPgogCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cHBvcnQvc3RyaW5nLmgiCkBAIC02OSw2ICs3MCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0cmVhbV9yZWZjb3VudCAqcmVmY291bnQpIHsKICNlbmRpZgogICBpZiAoZ3ByX3VucmVmKCZyZWZjb3VudC0+cmVmcykpIHsKKyAgICBpZiAoZXhlY19jdHgtPmZsYWdzICYgR1JQQ19FWEVDX0NUWF9GTEFHX1RIUkVBRF9SRVNPVVJDRV9MT09QKSB7CisgICAgICAvKiBJY2suCisgICAgICAgICBUaGUgdGhyZWFkIHdlJ3JlIHJ1bm5pbmcgb24gTUFZIGJlIG93bmVkIChpbmRpcmVjdGx5KSBieSBhIGNhbGwtc3RhY2suCisgICAgICAgICBJZiB0aGF0J3MgdGhlIGNhc2UsIGRlc3Ryb3lpbmcgdGhlIGNhbGwtc3RhY2sgTUFZIHRyeSB0byBkZXN0cm95IHRoZQorICAgICAgICAgdGhyZWFkLCB3aGljaCBpcyBhIHRhbmdsZWQgbWVzcyB0aGF0IHdlIGp1c3QgZG9uJ3Qgd2FudCB0byBldmVyIGhhdmUgdG8KKyAgICAgICAgIGNvcGUgd2l0aC4KKyAgICAgICAgIFRocm93IHRoaXMgb3ZlciB0byB0aGUgZXhlY3V0b3IgKG9uIGEgY29yZS1vd25lZCB0aHJlYWQpIGFuZCBwcm9jZXNzIGl0CisgICAgICAgICB0aGVyZS4gKi8KKyAgICAgIHJlZmNvdW50LT5kZXN0cm95LnNjaGVkdWxlciA9IGdycGNfZXhlY3V0b3Jfc2NoZWR1bGVyOworICAgIH0KICAgICBncnBjX2Nsb3N1cmVfc2NoZWQoZXhlY19jdHgsICZyZWZjb3VudC0+ZGVzdHJveSwgR1JQQ19FUlJPUl9OT05FKTsKICAgfQogfQpAQCAtMTczLDkzICsxODQsNyBAQAogICBncnBjX2Nsb3N1cmVfc2NoZWQoZXhlY19jdHgsIG9wLT5yZWN2X2luaXRpYWxfbWV0YWRhdGFfcmVhZHksCiAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX1JFRihlcnJvcikpOwogICBncnBjX2Nsb3N1cmVfc2NoZWQoZXhlY19jdHgsIG9wLT5vbl9jb21wbGV0ZSwgZXJyb3IpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGdycGNfZXJyb3IgKmVycm9yOwotICBncnBjX2Nsb3N1cmUgKnRoZW5fY2FsbDsKLSAgZ3JwY19jbG9zdXJlIGNsb3N1cmU7Ci19IGNsb3NlX21lc3NhZ2VfZGF0YTsKLQotc3RhdGljIHZvaWQgZnJlZV9tZXNzYWdlKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICpwLCBncnBjX2Vycm9yICplcnJvcikgewotICBjbG9zZV9tZXNzYWdlX2RhdGEgKmNtZCA9IHA7Ci0gIEdSUENfRVJST1JfVU5SRUYoY21kLT5lcnJvcik7Ci0gIGlmIChjbWQtPnRoZW5fY2FsbCAhPSBOVUxMKSB7Ci0gICAgY21kLT50aGVuX2NhbGwtPmNiKGV4ZWNfY3R4LCBjbWQtPnRoZW5fY2FsbC0+Y2JfYXJnLCBlcnJvcik7Ci0gIH0KLSAgZ3ByX2ZyZWUoY21kKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkX2Vycm9yKGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqb3AsIGdycGNfZXJyb3IgKip3aGljaCwKLSAgICAgICAgICAgICAgICAgICAgICBncnBjX2Vycm9yICplcnJvcikgewotICBjbG9zZV9tZXNzYWdlX2RhdGEgKmNtZDsKLSAgY21kID0gZ3ByX21hbGxvYyhzaXplb2YoKmNtZCkpOwotICBjbWQtPmVycm9yID0gZXJyb3I7Ci0gIGNtZC0+dGhlbl9jYWxsID0gb3AtPm9uX2NvbXBsZXRlOwotICBncnBjX2Nsb3N1cmVfaW5pdCgmY21kLT5jbG9zdXJlLCBmcmVlX21lc3NhZ2UsIGNtZCwKLSAgICAgICAgICAgICAgICAgICAgZ3JwY19zY2hlZHVsZV9vbl9leGVjX2N0eCk7Ci0gIG9wLT5vbl9jb21wbGV0ZSA9ICZjbWQtPmNsb3N1cmU7Ci0gICp3aGljaCA9IGVycm9yOwotfQotCi12b2lkIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9hZGRfY2FuY2VsbGF0aW9uKGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKSB7Ci0gIEdQUl9BU1NFUlQoc3RhdHVzICE9IEdSUENfU1RBVFVTX09LKTsKLSAgaWYgKG9wLT5jYW5jZWxfZXJyb3IgPT0gR1JQQ19FUlJPUl9OT05FKSB7Ci0gICAgb3AtPmNhbmNlbF9lcnJvciA9IGdycGNfZXJyb3Jfc2V0X2ludChHUlBDX0VSUk9SX0NBTkNFTExFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLCBzdGF0dXMpOwotICAgIG9wLT5jbG9zZV9lcnJvciA9IEdSUENfRVJST1JfTk9ORTsKLSAgfQotfQotCi12b2lkIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9hZGRfY2FuY2VsbGF0aW9uX3dpdGhfbWVzc2FnZSgKLSAgICBncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCwKLSAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1cywgZ3JwY19zbGljZSAqb3B0aW9uYWxfbWVzc2FnZSkgewotICBHUFJfQVNTRVJUKHN0YXR1cyAhPSBHUlBDX1NUQVRVU19PSyk7Ci0gIGlmIChvcC0+Y2FuY2VsX2Vycm9yICE9IEdSUENfRVJST1JfTk9ORSkgewotICAgIGlmIChvcHRpb25hbF9tZXNzYWdlKSB7Ci0gICAgICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKGV4ZWNfY3R4LCAqb3B0aW9uYWxfbWVzc2FnZSk7Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotICBncnBjX2Vycm9yICplcnJvcjsKLSAgaWYgKG9wdGlvbmFsX21lc3NhZ2UgIT0gTlVMTCkgewotICAgIGNoYXIgKm1zZyA9IGdycGNfZHVtcF9zbGljZSgqb3B0aW9uYWxfbWVzc2FnZSwgR1BSX0RVTVBfQVNDSUkpOwotICAgIGVycm9yID0gZ3JwY19lcnJvcl9zZXRfc3RyKEdSUENfRVJST1JfQ1JFQVRFKG1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19FUlJPUl9TVFJfR1JQQ19NRVNTQUdFLCBtc2cpOwotICAgIGdwcl9mcmVlKG1zZyk7Ci0gICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgKm9wdGlvbmFsX21lc3NhZ2UpOwotICB9IGVsc2UgewotICAgIGVycm9yID0gR1JQQ19FUlJPUl9DUkVBVEUoIkNhbGwgY2FuY2VsbGVkIik7Ci0gIH0KLSAgZXJyb3IgPSBncnBjX2Vycm9yX3NldF9pbnQoZXJyb3IsIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLCBzdGF0dXMpOwotICBhZGRfZXJyb3Iob3AsICZvcC0+Y2FuY2VsX2Vycm9yLCBlcnJvcik7Ci19Ci0KLXZvaWQgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX2FkZF9jbG9zZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AgKm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgKm9wdGlvbmFsX21lc3NhZ2UpIHsKLSAgR1BSX0FTU0VSVChzdGF0dXMgIT0gR1JQQ19TVEFUVVNfT0spOwotICBpZiAob3AtPmNhbmNlbF9lcnJvciAhPSBHUlBDX0VSUk9SX05PTkUgfHwKLSAgICAgIG9wLT5jbG9zZV9lcnJvciAhPSBHUlBDX0VSUk9SX05PTkUpIHsKLSAgICBpZiAob3B0aW9uYWxfbWVzc2FnZSkgewotICAgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbChleGVjX2N0eCwgKm9wdGlvbmFsX21lc3NhZ2UpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLSAgZ3JwY19lcnJvciAqZXJyb3I7Ci0gIGlmIChvcHRpb25hbF9tZXNzYWdlICE9IE5VTEwpIHsKLSAgICBjaGFyICptc2cgPSBncnBjX2R1bXBfc2xpY2UoKm9wdGlvbmFsX21lc3NhZ2UsIEdQUl9EVU1QX0FTQ0lJKTsKLSAgICBlcnJvciA9IGdycGNfZXJyb3Jfc2V0X3N0cihHUlBDX0VSUk9SX0NSRUFURShtc2cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfRVJST1JfU1RSX0dSUENfTUVTU0FHRSwgbXNnKTsKLSAgICBncHJfZnJlZShtc2cpOwotICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoZXhlY19jdHgsICpvcHRpb25hbF9tZXNzYWdlKTsKLSAgfSBlbHNlIHsKLSAgICBlcnJvciA9IEdSUENfRVJST1JfQ1JFQVRFKCJDYWxsIGZvcmNlIGNsb3NlZCIpOwotICB9Ci0gIGVycm9yID0gZ3JwY19lcnJvcl9zZXRfaW50KGVycm9yLCBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywgc3RhdHVzKTsKLSAgYWRkX2Vycm9yKG9wLCAmb3AtPmNsb3NlX2Vycm9yLCBlcnJvcik7CisgIEdSUENfRVJST1JfVU5SRUYob3AtPmNhbmNlbF9lcnJvcik7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmggYi9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5oCmluZGV4IGQxMjgxODMuLjlhMGFiZTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmgKKysrIGIvc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuaApAQCAtMTUwLDEzICsxNTAsMTggQEAKICAgLyoqIENvbGxlY3QgYW55IHN0YXRzIGludG8gcHJvdmlkZWQgYnVmZmVyLCB6ZXJvIGludGVybmFsIHN0YXQgY291bnRlcnMgKi8KICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX3N0YXRzICpjb2xsZWN0X3N0YXRzOwogCi0gIC8qKiBJZiAhPSBHUlBDX0VSUk9SX05PTkUsIGNhbmNlbCB0aGlzIHN0cmVhbSAqLworICAvKiogSWYgIT0gR1JQQ19FUlJPUl9OT05FLCBmb3JjZWZ1bGx5IGNsb3NlIHRoaXMgc3RyZWFtLgorICAgICAgVGhlIEhUVFAyIHNlbWFudGljcyBzaG91bGQgYmU6CisgICAgICAtIHNlcnZlciBzaWRlOiBpZiBjYW5jZWxfZXJyb3IgaGFzIEdSUENfRVJST1JfSU5UX0dSUENfU1RBVFVTLCBhbmQKKyAgICAgICAgdHJhaWxpbmcgbWV0YWRhdGEgaGFzIG5vdCBiZWVuIHNlbnQsIHNlbmQgdHJhaWxpbmcgbWV0YWRhdGEgd2l0aCBzdGF0dXMKKyAgICAgICAgYW5kIG1lc3NhZ2UgZnJvbSBjYW5jZWxfZXJyb3IgKHVzZSBncnBjX2Vycm9yX2dldF9zdGF0dXMpIGZvbGxvd2VkIGJ5CisgICAgICAgIGEgUlNUX1NUUkVBTSB3aXRoIGVycm9yPUdSUENfQ0hUVFAyX05PX0VSUk9SIHRvIGZvcmNlIGEgZnVsbCBjbG9zZQorICAgICAgLSBhdCBhbGwgb3RoZXIgdGltZXM6IHVzZSBncnBjX2Vycm9yX2dldF9zdGF0dXMgdG8gZ2V0IGEgc3RhdHVzIGNvZGUsIGFuZAorICAgICAgICBjb252ZXJ0IHRvIGEgSFRUUDIgZXJyb3IgY29kZSB1c2luZworICAgICAgICBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9lcnJvci4gU2VuZCBhIFJTVF9TVFJFQU0gd2l0aCB0aGlzCisgICAgICAgIGVycm9yLiAqLwogICBncnBjX2Vycm9yICpjYW5jZWxfZXJyb3I7CiAKLSAgLyoqIElmICE9IEdSUENfRVJST1JfTk9ORSwgc2VuZCBncnBjLXN0YXR1cywgZ3JwYy1tZXNzYWdlLCBhbmQgY2xvc2UgdGhpcwotICAgICAgc3RyZWFtIGZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcgKi8KLSAgZ3JwY19lcnJvciAqY2xvc2VfZXJyb3I7Ci0KICAgLyogSW5kZXhlcyBjb3JyZXNwb25kIHRvIGdycGNfY29udGV4dF9pbmRleCBlbnVtIHZhbHVlcyAqLwogICBncnBjX2NhbGxfY29udGV4dF9lbGVtZW50ICpjb250ZXh0OwogCkBAIC0xNzYsMTMgKzE4MSw4IEBACiAgIGdycGNfY29ubmVjdGl2aXR5X3N0YXRlICpjb25uZWN0aXZpdHlfc3RhdGU7CiAgIC8qKiBzaG91bGQgdGhlIHRyYW5zcG9ydCBiZSBkaXNjb25uZWN0ZWQgKi8KICAgZ3JwY19lcnJvciAqZGlzY29ubmVjdF93aXRoX2Vycm9yOwotICAvKiogc2hvdWxkIHdlIHNlbmQgYSBnb2F3YXk/Ci0gICAgICBhZnRlciBhIGdvYXdheSBpcyBzZW50LCBvbmNlIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSBjYWxscyBvbgotICAgICAgdGhlIHRyYW5zcG9ydCwgdGhlIHRyYW5zcG9ydCBzaG91bGQgZGlzY29ubmVjdCAqLwotICBib29sIHNlbmRfZ29hd2F5OwogICAvKiogd2hhdCBzaG91bGQgdGhlIGdvYXdheSBjb250YWluPyAqLwotICBncnBjX3N0YXR1c19jb2RlIGdvYXdheV9zdGF0dXM7Ci0gIGdycGNfc2xpY2UgKmdvYXdheV9tZXNzYWdlOworICBncnBjX2Vycm9yICpnb2F3YXlfZXJyb3I7CiAgIC8qKiBzZXQgdGhlIGNhbGxiYWNrIGZvciBhY2NlcHRpbmcgbmV3IHN0cmVhbXM7CiAgICAgICB0aGlzIGlzIGEgcGVybWFuZW50IGNhbGxiYWNrLCB1bmxpa2UgdGhlIG90aGVyIG9uZS1zaG90IGNsb3N1cmVzLgogICAgICAgSWYgdHJ1ZSwgdGhlIGNhbGxiYWNrIGlzIHNldCB0byBzZXRfYWNjZXB0X3N0cmVhbV9mbiwgd2l0aCBpdHMKQEAgLTI0NSwxOCArMjQ1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpOwogCi12b2lkIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9hZGRfY2FuY2VsbGF0aW9uKGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzKTsKLQotdm9pZCBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3BfYWRkX2NhbmNlbGxhdGlvbl93aXRoX21lc3NhZ2UoCi0gICAgZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcCAqb3AsCi0gICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMsIGdycGNfc2xpY2UgKm9wdGlvbmFsX21lc3NhZ2UpOwotCi12b2lkIGdycGNfdHJhbnNwb3J0X3N0cmVhbV9vcF9hZGRfY2xvc2UoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wICpvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlICpvcHRpb25hbF9tZXNzYWdlKTsKLQogY2hhciAqZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX3N0cmluZyhncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AgKm9wKTsKIGNoYXIgKmdycGNfdHJhbnNwb3J0X29wX3N0cmluZyhncnBjX3RyYW5zcG9ydF9vcCAqb3ApOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jCmluZGV4IDU4ZDZhZDUuLjI4MzYwZTMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X29wX3N0cmluZy5jCkBAIC00NywxNCArNDcsMTQgQEAKIC8qIFRoZXNlIHJvdXRpbmVzIGFyZSBoZXJlIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nIC0gdGhleSBwcm9kdWNlIHN0cmluZwogICAgcmVwcmVzZW50YXRpb25zIG9mIHZhcmlvdXMgdHJhbnNwb3J0IGRhdGEgc3RydWN0dXJlcyAqLwogCi1zdGF0aWMgdm9pZCBwdXRfbWV0YWRhdGEoZ3ByX3N0cnZlYyAqYiwgZ3JwY19tZGVsZW0gKm1kKSB7CitzdGF0aWMgdm9pZCBwdXRfbWV0YWRhdGEoZ3ByX3N0cnZlYyAqYiwgZ3JwY19tZGVsZW0gbWQpIHsKICAgZ3ByX3N0cnZlY19hZGQoYiwgZ3ByX3N0cmR1cCgia2V5PSIpKTsKICAgZ3ByX3N0cnZlY19hZGQoCi0gICAgICBiLCBncnBjX2R1bXBfc2xpY2UobWQtPmtleS0+c2xpY2UsIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKSk7CisgICAgICBiLCBncnBjX2R1bXBfc2xpY2UoR1JQQ19NREtFWShtZCksIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKSk7CiAKICAgZ3ByX3N0cnZlY19hZGQoYiwgZ3ByX3N0cmR1cCgiIHZhbHVlPSIpKTsKICAgZ3ByX3N0cnZlY19hZGQoCi0gICAgICBiLCBncnBjX2R1bXBfc2xpY2UobWQtPnZhbHVlLT5zbGljZSwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpKTsKKyAgICAgIGIsIGdycGNfZHVtcF9zbGljZShHUlBDX01EVkFMVUUobWQpLCBHUFJfRFVNUF9IRVggfCBHUFJfRFVNUF9BU0NJSSkpOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfbWV0YWRhdGFfbGlzdChncHJfc3RydmVjICpiLCBncnBjX21ldGFkYXRhX2JhdGNoIG1kKSB7CkBAIC0xMjEsMTUgKzEyMSw3IEBACiAgICAgZ3ByX3N0cnZlY19hZGQoJmIsIGdwcl9zdHJkdXAoIiAiKSk7CiAgICAgY29uc3QgY2hhciAqbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcob3AtPmNhbmNlbF9lcnJvcik7CiAgICAgZ3ByX2FzcHJpbnRmKCZ0bXAsICJDQU5DRUw6JXMiLCBtc2cpOwotICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcobXNnKTsKLSAgICBncHJfc3RydmVjX2FkZCgmYiwgdG1wKTsKLSAgfQogCi0gIGlmIChvcC0+Y2xvc2VfZXJyb3IgIT0gR1JQQ19FUlJPUl9OT05FKSB7Ci0gICAgZ3ByX3N0cnZlY19hZGQoJmIsIGdwcl9zdHJkdXAoIiAiKSk7Ci0gICAgY29uc3QgY2hhciAqbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcob3AtPmNsb3NlX2Vycm9yKTsKLSAgICBncHJfYXNwcmludGYoJnRtcCwgIkNMT1NFOiVzIiwgbXNnKTsKLSAgICBncnBjX2Vycm9yX2ZyZWVfc3RyaW5nKG1zZyk7CiAgICAgZ3ByX3N0cnZlY19hZGQoJmIsIHRtcCk7CiAgIH0KIApAQCAtMTY4LDE4ICsxNjAsMTQgQEAKICAgICBjb25zdCBjaGFyICplcnIgPSBncnBjX2Vycm9yX3N0cmluZyhvcC0+ZGlzY29ubmVjdF93aXRoX2Vycm9yKTsKICAgICBncHJfYXNwcmludGYoJnRtcCwgIkRJU0NPTk5FQ1Q6JXMiLCBlcnIpOwogICAgIGdwcl9zdHJ2ZWNfYWRkKCZiLCB0bXApOwotICAgIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcoZXJyKTsKICAgfQogCi0gIGlmIChvcC0+c2VuZF9nb2F3YXkpIHsKKyAgaWYgKG9wLT5nb2F3YXlfZXJyb3IpIHsKICAgICBpZiAoIWZpcnN0KSBncHJfc3RydmVjX2FkZCgmYiwgZ3ByX3N0cmR1cCgiICIpKTsKICAgICBmaXJzdCA9IGZhbHNlOwotICAgIGNoYXIgKm1zZyA9IG9wLT5nb2F3YXlfbWVzc2FnZSA9PSBOVUxMCi0gICAgICAgICAgICAgICAgICAgID8gIm51bGwiCi0gICAgICAgICAgICAgICAgICAgIDogZ3JwY19kdW1wX3NsaWNlKCpvcC0+Z29hd2F5X21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUl9EVU1QX0FTQ0lJIHwgR1BSX0RVTVBfSEVYKTsKLSAgICBncHJfYXNwcmludGYoJnRtcCwgIlNFTkRfR09BV0FZOnN0YXR1cz0lZDptc2c9JXMiLCBvcC0+Z29hd2F5X3N0YXR1cywgbXNnKTsKLSAgICBpZiAob3AtPmdvYXdheV9tZXNzYWdlICE9IE5VTEwpIGdwcl9mcmVlKG1zZyk7CisgICAgY29uc3QgY2hhciAqbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcob3AtPmdvYXdheV9lcnJvcik7CisgICAgZ3ByX2FzcHJpbnRmKCZ0bXAsICJTRU5EX0dPQVdBWTolcyIsIG1zZyk7CisKICAgICBncHJfc3RydmVjX2FkZCgmYiwgdG1wKTsKICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY3BwL2NsaWVudC9jaGFubmVsX2NjLmNjIGIvc3JjL2NwcC9jbGllbnQvY2hhbm5lbF9jYy5jYwppbmRleCAzNTdkODMxLi5jOTg1MTgzIDEwMDY0NAotLS0gYS9zcmMvY3BwL2NsaWVudC9jaGFubmVsX2NjLmNjCisrKyBiL3NyYy9jcHAvY2xpZW50L2NoYW5uZWxfY2MuY2MKQEAgLTEwNywxMCArMTA3LDIwIEBACiAgICAgfSBlbHNlIGlmICghaG9zdF8uZW1wdHkoKSkgewogICAgICAgaG9zdF9zdHIgPSBob3N0Xy5jX3N0cigpOwogICAgIH0KLSAgICBjX2NhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoY19jaGFubmVsXywgY29udGV4dC0+cHJvcGFnYXRlX2Zyb21fY2FsbF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnByb3BhZ2F0aW9uX29wdGlvbnNfLmNfYml0bWFzaygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcS0+Y3EoKSwgbWV0aG9kLm5hbWUoKSwgaG9zdF9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJhd19kZWFkbGluZSgpLCBudWxscHRyKTsKKyAgICBncnBjX3NsaWNlIG1ldGhvZF9zbGljZSA9IFNsaWNlRnJvbUNvcGllZFN0cmluZyhtZXRob2QubmFtZSgpKTsKKyAgICBncnBjX3NsaWNlIGhvc3Rfc2xpY2U7CisgICAgaWYgKGhvc3Rfc3RyICE9IG51bGxwdHIpIHsKKyAgICAgIGhvc3Rfc2xpY2UgPSBTbGljZUZyb21Db3BpZWRTdHJpbmcoaG9zdF9zdHIpOworICAgIH0KKyAgICBjX2NhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCisgICAgICAgIGNfY2hhbm5lbF8sIGNvbnRleHQtPnByb3BhZ2F0ZV9mcm9tX2NhbGxfLAorICAgICAgICBjb250ZXh0LT5wcm9wYWdhdGlvbl9vcHRpb25zXy5jX2JpdG1hc2soKSwgY3EtPmNxKCksIG1ldGhvZF9zbGljZSwKKyAgICAgICAgaG9zdF9zdHIgPT0gbnVsbHB0ciA/IG51bGxwdHIgOiAmaG9zdF9zbGljZSwgY29udGV4dC0+cmF3X2RlYWRsaW5lKCksCisgICAgICAgIG51bGxwdHIpOworICAgIGdycGNfc2xpY2VfdW5yZWYobWV0aG9kX3NsaWNlKTsKKyAgICBpZiAoaG9zdF9zdHIgIT0gbnVsbHB0cikgeworICAgICAgZ3JwY19zbGljZV91bnJlZihob3N0X3NsaWNlKTsKKyAgICB9CiAgIH0KICAgZ3JwY19jZW5zdXNfY2FsbF9zZXRfY29udGV4dChjX2NhbGwsIGNvbnRleHQtPmNlbnN1c19jb250ZXh0KCkpOwogICBjb250ZXh0LT5zZXRfY2FsbChjX2NhbGwsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CmRpZmYgLS1naXQgYS9zcmMvY3BwL2NsaWVudC9zZWN1cmVfY3JlZGVudGlhbHMuY2MgYi9zcmMvY3BwL2NsaWVudC9zZWN1cmVfY3JlZGVudGlhbHMuY2MKaW5kZXggMjY5YzUyMy4uMjVmNmJhYiAxMDA2NDQKLS0tIGEvc3JjL2NwcC9jbGllbnQvc2VjdXJlX2NyZWRlbnRpYWxzLmNjCisrKyBiL3NyYy9jcHAvY2xpZW50L3NlY3VyZV9jcmVkZW50aWFscy5jYwpAQCAtMjA2LDE1ICsyMDYsMTggQEAKICAgc3RkOjp2ZWN0b3I8Z3JwY19tZXRhZGF0YT4gbWQ7CiAgIGZvciAoYXV0byBpdCA9IG1ldGFkYXRhLmJlZ2luKCk7IGl0ICE9IG1ldGFkYXRhLmVuZCgpOyArK2l0KSB7CiAgICAgZ3JwY19tZXRhZGF0YSBtZF9lbnRyeTsKLSAgICBtZF9lbnRyeS5rZXkgPSBpdC0+Zmlyc3QuY19zdHIoKTsKLSAgICBtZF9lbnRyeS52YWx1ZSA9IGl0LT5zZWNvbmQuZGF0YSgpOwotICAgIG1kX2VudHJ5LnZhbHVlX2xlbmd0aCA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIG1kX2VudHJ5LmtleSA9IFNsaWNlRnJvbUNvcGllZFN0cmluZyhpdC0+Zmlyc3QpOworICAgIG1kX2VudHJ5LnZhbHVlID0gU2xpY2VGcm9tQ29waWVkU3RyaW5nKGl0LT5zZWNvbmQpOwogICAgIG1kX2VudHJ5LmZsYWdzID0gMDsKICAgICBtZC5wdXNoX2JhY2sobWRfZW50cnkpOwogICB9CiAgIGNiKHVzZXJfZGF0YSwgbWQuZW1wdHkoKSA/IG51bGxwdHIgOiAmbWRbMF0sIG1kLnNpemUoKSwKICAgICAgc3RhdGljX2Nhc3Q8Z3JwY19zdGF0dXNfY29kZT4oc3RhdHVzLmVycm9yX2NvZGUoKSksCiAgICAgIHN0YXR1cy5lcnJvcl9tZXNzYWdlKCkuY19zdHIoKSk7CisgIGZvciAoYXV0byBpdCA9IG1kLmJlZ2luKCk7IGl0ICE9IG1kLmVuZCgpOyArK2l0KSB7CisgICAgZ3JwY19zbGljZV91bnJlZihpdC0+a2V5KTsKKyAgICBncnBjX3NsaWNlX3VucmVmKGl0LT52YWx1ZSk7CisgIH0KIH0KIAogTWV0YWRhdGFDcmVkZW50aWFsc1BsdWdpbldyYXBwZXI6Ok1ldGFkYXRhQ3JlZGVudGlhbHNQbHVnaW5XcmFwcGVyKApkaWZmIC0tZ2l0IGEvc3JjL2NwcC9jbGllbnQvc2VjdXJlX2NyZWRlbnRpYWxzLmggYi9zcmMvY3BwL2NsaWVudC9zZWN1cmVfY3JlZGVudGlhbHMuaAppbmRleCAyODFkYjE3Li43MTM2NTRhIDEwMDY0NAotLS0gYS9zcmMvY3BwL2NsaWVudC9zZWN1cmVfY3JlZGVudGlhbHMuaAorKysgYi9zcmMvY3BwL2NsaWVudC9zZWN1cmVfY3JlZGVudGlhbHMuaApAQCAtNzAsNyArNzAsNyBAQAogICBncnBjX2NhbGxfY3JlZGVudGlhbHMqIGNvbnN0IGNfY3JlZHNfOwogfTsKIAotY2xhc3MgTWV0YWRhdGFDcmVkZW50aWFsc1BsdWdpbldyYXBwZXIgZmluYWwgeworY2xhc3MgTWV0YWRhdGFDcmVkZW50aWFsc1BsdWdpbldyYXBwZXIgZmluYWwgOiBwcml2YXRlIEdycGNMaWJyYXJ5Q29kZWdlbiB7CiAgcHVibGljOgogICBzdGF0aWMgdm9pZCBEZXN0cm95KHZvaWQqIHdyYXBwZXIpOwogICBzdGF0aWMgdm9pZCBHZXRNZXRhZGF0YSh2b2lkKiB3cmFwcGVyLCBncnBjX2F1dGhfbWV0YWRhdGFfY29udGV4dCBjb250ZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2NwcC9jb21tb24vY2hhbm5lbF9maWx0ZXIuY2MgYi9zcmMvY3BwL2NvbW1vbi9jaGFubmVsX2ZpbHRlci5jYwppbmRleCBjMGRjOWRkLi4yNTM2MTRjIDEwMDY0NAotLS0gYS9zcmMvY3BwL2NvbW1vbi9jaGFubmVsX2ZpbHRlci5jYworKysgYi9zcmMvY3BwL2NvbW1vbi9jaGFubmVsX2ZpbHRlci5jYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9jaGFubmVsL2NoYW5uZWxfc3RhY2suaCIKICNpbmNsdWRlICJzcmMvY3BwL2NvbW1vbi9jaGFubmVsX2ZpbHRlci5oIgogCisjaW5jbHVkZSA8Z3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oPgorCiBuYW1lc3BhY2UgZ3JwYyB7CiAKIC8vIE1ldGFkYXRhQmF0Y2gKQEAgLTQ1LDggKzQ3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyAmdmFsdWUpIHsKICAgZ3JwY19saW5rZWRfbWRlbGVtICpzdG9yYWdlID0gbmV3IGdycGNfbGlua2VkX21kZWxlbTsKICAgbWVtc2V0KHN0b3JhZ2UsIDAsIHNpemVvZihncnBjX2xpbmtlZF9tZGVsZW0pKTsKLSAgc3RvcmFnZS0+bWQgPSBncnBjX21kZWxlbV9mcm9tX3N0cmluZ3MoZXhlY19jdHgsIGtleS5jX3N0cigpLCB2YWx1ZS5jX3N0cigpKTsKLSAgZ3JwY19tZXRhZGF0YV9iYXRjaF9saW5rX2hlYWQoYmF0Y2hfLCBzdG9yYWdlKTsKKyAgc3RvcmFnZS0+bWQgPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcyhleGVjX2N0eCwgU2xpY2VGcm9tQ29waWVkU3RyaW5nKGtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2VGcm9tQ29waWVkU3RyaW5nKHZhbHVlKSk7CisgIEdSUENfTE9HX0lGX0VSUk9SKCJNZXRhZGF0YUJhdGNoOjpBZGRNZXRhZGF0YSIsCisgICAgICAgICAgICAgICAgICAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfbGlua19oZWFkKGV4ZWNfY3R4LCBiYXRjaF8sIHN0b3JhZ2UpKTsKICAgcmV0dXJuIHN0b3JhZ2U7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jcHAvY29tbW9uL2NoYW5uZWxfZmlsdGVyLmggYi9zcmMvY3BwL2NvbW1vbi9jaGFubmVsX2ZpbHRlci5oCmluZGV4IDVkZThmNWUuLjVmOWZkODcgMTAwNjQ0Ci0tLSBhL3NyYy9jcHAvY29tbW9uL2NoYW5uZWxfZmlsdGVyLmgKKysrIGIvc3JjL2NwcC9jb21tb24vY2hhbm5lbF9maWx0ZXIuaApAQCAtNzYsOCArNzYsOCBAQAogICBjbGFzcyBjb25zdF9pdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwY19tZGVsZW0+IHsKICAgIHB1YmxpYzoKLSAgICBjb25zdCBncnBjX21kZWxlbSAmb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmVsZW1fLT5tZDsgfQotICAgIGNvbnN0IGdycGNfbWRlbGVtICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZWxlbV8tPm1kOyB9CisgICAgY29uc3QgZ3JwY19tZGVsZW0gJm9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIGVsZW1fLT5tZDsgfQorICAgIGNvbnN0IGdycGNfbWRlbGVtIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBlbGVtXy0+bWQ7IH0KIAogICAgIGNvbnN0X2l0ZXJhdG9yICZvcGVyYXRvcisrKCkgewogICAgICAgZWxlbV8gPSBlbGVtXy0+bmV4dDsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICBncnBjX2Vycm9yICpkaXNjb25uZWN0X3dpdGhfZXJyb3IoKSBjb25zdCB7CiAgICAgcmV0dXJuIG9wXy0+ZGlzY29ubmVjdF93aXRoX2Vycm9yOwogICB9Ci0gIGJvb2wgc2VuZF9nb2F3YXkoKSBjb25zdCB7IHJldHVybiBvcF8tPnNlbmRfZ29hd2F5OyB9CisgIGJvb2wgc2VuZF9nb2F3YXkoKSBjb25zdCB7IHJldHVybiBvcF8tPmdvYXdheV9lcnJvciAhPSBHUlBDX0VSUk9SX05PTkU7IH0KIAogICAvLyBUT0RPKHJvdGgpOiBBZGQgbWV0aG9kcyBmb3IgYWRkaXRpb25hbCBmaWVsZHMgYXMgbmVlZGVkLgogCmRpZmYgLS1naXQgYS9zcmMvY3BwL2NvbW1vbi9jb3JlX2NvZGVnZW4uY2MgYi9zcmMvY3BwL2NvbW1vbi9jb3JlX2NvZGVnZW4uY2MKaW5kZXggYTA3YWQ1NC4uMzZlNGM4OSAxMDA2NDQKLS0tIGEvc3JjL2NwcC9jb21tb24vY29yZV9jb2RlZ2VuLmNjCisrKyBiL3NyYy9jcHAvY29tbW9uL2NvcmVfY29kZWdlbi5jYwpAQCAtMTIzLDYgKzEyMywxNyBAQAogICByZXR1cm4gOjpncnBjX3NsaWNlX3NwbGl0X3RhaWwocywgc3BsaXQpOwogfQogCitncnBjX3NsaWNlIENvcmVDb2RlZ2VuOjpncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlcihjb25zdCB2b2lkKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSB7CisgIHJldHVybiA6OmdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyKGJ1ZmZlciwgbGVuZ3RoKTsKK30KKworZ3JwY19zbGljZSBDb3JlQ29kZWdlbjo6Z3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoY29uc3Qgdm9pZCogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkgeworICByZXR1cm4gOjpncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKK30KKwogdm9pZCBDb3JlQ29kZWdlbjo6Z3JwY19zbGljZV9idWZmZXJfYWRkKGdycGNfc2xpY2VfYnVmZmVyKiBzYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHNsaWNlKSB7CiAgIDo6Z3JwY19zbGljZV9idWZmZXJfYWRkKHNiLCBzbGljZSk7CkBAIC0xNTIsOCArMTYzLDEwIEBACiAgIHJldHVybiA6Omdwcl90aW1lXzAodHlwZSk7CiB9CiAKLXZvaWQgQ29yZUNvZGVnZW46OmFzc2VydF9mYWlsKGNvbnN0IGNoYXIqIGZhaWxlZF9hc3NlcnRpb24pIHsKLSAgZ3ByX2xvZyhHUFJfRVJST1IsICJhc3NlcnRpb24gZmFpbGVkOiAlcyIsIGZhaWxlZF9hc3NlcnRpb24pOwordm9pZCBDb3JlQ29kZWdlbjo6YXNzZXJ0X2ZhaWwoY29uc3QgY2hhciogZmFpbGVkX2Fzc2VydGlvbiwgY29uc3QgY2hhciogZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lKSB7CisgIGdwcl9sb2coZmlsZSwgbGluZSwgR1BSX0xPR19TRVZFUklUWV9FUlJPUiwgImFzc2VydGlvbiBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICBmYWlsZWRfYXNzZXJ0aW9uKTsKICAgYWJvcnQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NwcC9zZXJ2ZXIvZHluYW1pY190aHJlYWRfcG9vbC5jYyBiL3NyYy9jcHAvc2VydmVyL2R5bmFtaWNfdGhyZWFkX3Bvb2wuY2MKaW5kZXggMWZkYzJlZC4uYWZiNWJlYSAxMDA2NDQKLS0tIGEvc3JjL2NwcC9zZXJ2ZXIvZHluYW1pY190aHJlYWRfcG9vbC5jYworKysgYi9zcmMvY3BwL3NlcnZlci9keW5hbWljX3RocmVhZF9wb29sLmNjCkBAIC0zMSwxMiArMzEsMTUgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgInNyYy9jcHAvc2VydmVyL2R5bmFtaWNfdGhyZWFkX3Bvb2wuaCIKKwogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHRocmVhZD4KIAotI2luY2x1ZGUgInNyYy9jcHAvc2VydmVyL2R5bmFtaWNfdGhyZWFkX3Bvb2wuaCIKKyNpbmNsdWRlIDxncnBjL3N1cHBvcnQvbG9nLmg+CiAKIG5hbWVzcGFjZSBncnBjIHsKKwogRHluYW1pY1RocmVhZFBvb2w6OkR5bmFtaWNUaHJlYWQ6OkR5bmFtaWNUaHJlYWQoRHluYW1pY1RocmVhZFBvb2wqIHBvb2wpCiAgICAgOiBwb29sXyhwb29sKSwKICAgICAgIHRoZF8obmV3IHN0ZDo6dGhyZWFkKCZEeW5hbWljVGhyZWFkUG9vbDo6RHluYW1pY1RocmVhZDo6VGhyZWFkRnVuYywKZGlmZiAtLWdpdCBhL3NyYy9jcHAvc2VydmVyL3NlY3VyZV9zZXJ2ZXJfY3JlZGVudGlhbHMuY2MgYi9zcmMvY3BwL3NlcnZlci9zZWN1cmVfc2VydmVyX2NyZWRlbnRpYWxzLmNjCmluZGV4IDMzYmRjMmEuLjEwZjY2MmMgMTAwNjQ0Ci0tLSBhL3NyYy9jcHAvc2VydmVyL3NlY3VyZV9zZXJ2ZXJfY3JlZGVudGlhbHMuY2MKKysrIGIvc3JjL2NwcC9zZXJ2ZXIvc2VjdXJlX3NlcnZlcl9jcmVkZW50aWFscy5jYwpAQCAtMzUsMTEgKzM1LDEyIEBACiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPG1lbW9yeT4KIAorI2luY2x1ZGUgPGdycGMrKy9pbXBsL2NvZGVnZW4vc2xpY2UuaD4KKyNpbmNsdWRlIDxncnBjKysvc2VjdXJpdHkvYXV0aF9tZXRhZGF0YV9wcm9jZXNzb3IuaD4KKwogI2luY2x1ZGUgInNyYy9jcHAvY29tbW9uL3NlY3VyZV9hdXRoX2NvbnRleHQuaCIKICNpbmNsdWRlICJzcmMvY3BwL3NlcnZlci9zZWN1cmVfc2VydmVyX2NyZWRlbnRpYWxzLmgiCiAKLSNpbmNsdWRlIDxncnBjKysvc2VjdXJpdHkvYXV0aF9tZXRhZGF0YV9wcm9jZXNzb3IuaD4KLQogbmFtZXNwYWNlIGdycGMgewogCiB2b2lkIEF1dGhNZXRhZGF0YVByb2Nlc3NvckF5bmNXcmFwcGVyOjpEZXN0cm95KHZvaWQqIHdyYXBwZXIpIHsKQEAgLTcxLDggKzcyLDggQEAKICAgICBncnBjX3Byb2Nlc3NfYXV0aF9tZXRhZGF0YV9kb25lX2NiIGNiLCB2b2lkKiB1c2VyX2RhdGEpIHsKICAgQXV0aE1ldGFkYXRhUHJvY2Vzc29yOjpJbnB1dE1ldGFkYXRhIG1ldGFkYXRhOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9tZDsgaSsrKSB7Ci0gICAgbWV0YWRhdGEuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKAotICAgICAgICBtZFtpXS5rZXksIGdycGM6OnN0cmluZ19yZWYobWRbaV0udmFsdWUsIG1kW2ldLnZhbHVlX2xlbmd0aCkpKTsKKyAgICBtZXRhZGF0YS5pbnNlcnQoc3RkOjptYWtlX3BhaXIoU3RyaW5nUmVmRnJvbVNsaWNlKCZtZFtpXS5rZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdSZWZGcm9tU2xpY2UoJm1kW2ldLnZhbHVlKSkpOwogICB9CiAgIFNlY3VyZUF1dGhDb250ZXh0IGNvbnRleHQoY3R4LCBmYWxzZSk7CiAgIEF1dGhNZXRhZGF0YVByb2Nlc3Nvcjo6T3V0cHV0TWV0YWRhdGEgY29uc3VtZWRfbWV0YWRhdGE7CkBAIC04NSw5ICs4Niw4IEBACiAgIGZvciAoYXV0byBpdCA9IGNvbnN1bWVkX21ldGFkYXRhLmJlZ2luKCk7IGl0ICE9IGNvbnN1bWVkX21ldGFkYXRhLmVuZCgpOwogICAgICAgICsraXQpIHsKICAgICBncnBjX21ldGFkYXRhIG1kX2VudHJ5OwotICAgIG1kX2VudHJ5LmtleSA9IGl0LT5maXJzdC5jX3N0cigpOwotICAgIG1kX2VudHJ5LnZhbHVlID0gaXQtPnNlY29uZC5kYXRhKCk7Ci0gICAgbWRfZW50cnkudmFsdWVfbGVuZ3RoID0gaXQtPnNlY29uZC5zaXplKCk7CisgICAgbWRfZW50cnkua2V5ID0gU2xpY2VSZWZlcmVuY2luZ1N0cmluZyhpdC0+Zmlyc3QpOworICAgIG1kX2VudHJ5LnZhbHVlID0gU2xpY2VSZWZlcmVuY2luZ1N0cmluZyhpdC0+c2Vjb25kKTsKICAgICBtZF9lbnRyeS5mbGFncyA9IDA7CiAgICAgY29uc3VtZWRfbWQucHVzaF9iYWNrKG1kX2VudHJ5KTsKICAgfQpAQCAtOTUsOSArOTUsOCBAQAogICBmb3IgKGF1dG8gaXQgPSByZXNwb25zZV9tZXRhZGF0YS5iZWdpbigpOyBpdCAhPSByZXNwb25zZV9tZXRhZGF0YS5lbmQoKTsKICAgICAgICArK2l0KSB7CiAgICAgZ3JwY19tZXRhZGF0YSBtZF9lbnRyeTsKLSAgICBtZF9lbnRyeS5rZXkgPSBpdC0+Zmlyc3QuY19zdHIoKTsKLSAgICBtZF9lbnRyeS52YWx1ZSA9IGl0LT5zZWNvbmQuZGF0YSgpOwotICAgIG1kX2VudHJ5LnZhbHVlX2xlbmd0aCA9IGl0LT5zZWNvbmQuc2l6ZSgpOworICAgIG1kX2VudHJ5LmtleSA9IFNsaWNlUmVmZXJlbmNpbmdTdHJpbmcoaXQtPmZpcnN0KTsKKyAgICBtZF9lbnRyeS52YWx1ZSA9IFNsaWNlUmVmZXJlbmNpbmdTdHJpbmcoaXQtPnNlY29uZCk7CiAgICAgbWRfZW50cnkuZmxhZ3MgPSAwOwogICAgIHJlc3BvbnNlX21kLnB1c2hfYmFjayhtZF9lbnRyeSk7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jcHAvc2VydmVyL3NlcnZlcl9jYy5jYyBiL3NyYy9jcHAvc2VydmVyL3NlcnZlcl9jYy5jYwppbmRleCA4MTdkODVhLi5mNmE3ZjFkIDEwMDY0NAotLS0gYS9zcmMvY3BwL3NlcnZlci9zZXJ2ZXJfY2MuY2MKKysrIGIvc3JjL2NwcC9zZXJ2ZXIvc2VydmVyX2NjLmNjCkBAIC0xODYsNyArMTg2LDcgQEAKICAgIHB1YmxpYzoKICAgICBleHBsaWNpdCBDYWxsRGF0YShTZXJ2ZXIqIHNlcnZlciwgU3luY1JlcXVlc3QqIG1yZCkKICAgICAgICAgOiBjcV8obXJkLT5jcV8pLAotICAgICAgICAgIGNhbGxfKG1yZC0+Y2FsbF8sIHNlcnZlciwgJmNxXywgc2VydmVyLT5tYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemVfKSwKKyAgICAgICAgICBjYWxsXyhtcmQtPmNhbGxfLCBzZXJ2ZXIsICZjcV8pLAogICAgICAgICAgIGN0eF8obXJkLT5kZWFkbGluZV8sIG1yZC0+cmVxdWVzdF9tZXRhZGF0YV8ubWV0YWRhdGEsCiAgICAgICAgICAgICAgICBtcmQtPnJlcXVlc3RfbWV0YWRhdGFfLmNvdW50KSwKICAgICAgICAgICBoYXNfcmVxdWVzdF9wYXlsb2FkXyhtcmQtPmhhc19yZXF1ZXN0X3BheWxvYWRfKSwKQEAgLTIwOCw4ICsyMDgsOCBAQAogICAgIHZvaWQgUnVuKHN0ZDo6c2hhcmVkX3B0cjxHbG9iYWxDYWxsYmFja3M+IGdsb2JhbF9jYWxsYmFja3MpIHsKICAgICAgIGN0eF8uQmVnaW5Db21wbGV0aW9uT3AoJmNhbGxfKTsKICAgICAgIGdsb2JhbF9jYWxsYmFja3MtPlByZVN5bmNocm9ub3VzUmVxdWVzdCgmY3R4Xyk7Ci0gICAgICBtZXRob2RfLT5oYW5kbGVyKCktPlJ1bkhhbmRsZXIoTWV0aG9kSGFuZGxlcjo6SGFuZGxlclBhcmFtZXRlcigKLSAgICAgICAgICAmY2FsbF8sICZjdHhfLCByZXF1ZXN0X3BheWxvYWRfLCBjYWxsXy5tYXhfcmVjZWl2ZV9tZXNzYWdlX3NpemUoKSkpOworICAgICAgbWV0aG9kXy0+aGFuZGxlcigpLT5SdW5IYW5kbGVyKAorICAgICAgICAgIE1ldGhvZEhhbmRsZXI6OkhhbmRsZXJQYXJhbWV0ZXIoJmNhbGxfLCAmY3R4XywgcmVxdWVzdF9wYXlsb2FkXykpOwogICAgICAgZ2xvYmFsX2NhbGxiYWNrcy0+UG9zdFN5bmNocm9ub3VzUmVxdWVzdCgmY3R4Xyk7CiAgICAgICByZXF1ZXN0X3BheWxvYWRfID0gbnVsbHB0cjsKICAgICAgIHZvaWQqIGlnbm9yZWRfdGFnOwpAQCAtNTc2LDcgKzU3Niw2IEBACiAgICAgICBkZWxldGVfb25fZmluYWxpemVfKGRlbGV0ZV9vbl9maW5hbGl6ZSksCiAgICAgICBjYWxsXyhudWxscHRyKSB7CiAgIGNhbGxfY3FfLT5SZWdpc3RlckF2YWxhbmNoaW5nKCk7ICAvLyBUaGlzIG9wIHdpbGwgdHJpZ2dlciBtb3JlIG9wcwotICBtZW1zZXQoJmluaXRpYWxfbWV0YWRhdGFfYXJyYXlfLCAwLCBzaXplb2YoaW5pdGlhbF9tZXRhZGF0YV9hcnJheV8pKTsKIH0KIAogU2VydmVySW50ZXJmYWNlOjpCYXNlQXN5bmNSZXF1ZXN0Ojp+QmFzZUFzeW5jUmVxdWVzdCgpIHsKQEAgLTU4NiwxOSArNTg1LDExIEBACiBib29sIFNlcnZlckludGVyZmFjZTo6QmFzZUFzeW5jUmVxdWVzdDo6RmluYWxpemVSZXN1bHQodm9pZCoqIHRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzdGF0dXMpIHsKICAgaWYgKCpzdGF0dXMpIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluaXRpYWxfbWV0YWRhdGFfYXJyYXlfLmNvdW50OyBpKyspIHsKLSAgICAgIGNvbnRleHRfLT5jbGllbnRfbWV0YWRhdGFfLmluc2VydCgKLSAgICAgICAgICBzdGQ6OnBhaXI8Z3JwYzo6c3RyaW5nX3JlZiwgZ3JwYzo6c3RyaW5nX3JlZj4oCi0gICAgICAgICAgICAgIGluaXRpYWxfbWV0YWRhdGFfYXJyYXlfLm1ldGFkYXRhW2ldLmtleSwKLSAgICAgICAgICAgICAgZ3JwYzo6c3RyaW5nX3JlZigKLSAgICAgICAgICAgICAgICAgIGluaXRpYWxfbWV0YWRhdGFfYXJyYXlfLm1ldGFkYXRhW2ldLnZhbHVlLAotICAgICAgICAgICAgICAgICAgaW5pdGlhbF9tZXRhZGF0YV9hcnJheV8ubWV0YWRhdGFbaV0udmFsdWVfbGVuZ3RoKSkpOwotICAgIH0KKyAgICBjb250ZXh0Xy0+Y2xpZW50X21ldGFkYXRhXy5GaWxsTWFwKCk7CiAgIH0KLSAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX2FycmF5Xyk7CiAgIGNvbnRleHRfLT5zZXRfY2FsbChjYWxsXyk7CiAgIGNvbnRleHRfLT5jcV8gPSBjYWxsX2NxXzsKLSAgQ2FsbCBjYWxsKGNhbGxfLCBzZXJ2ZXJfLCBjYWxsX2NxXywgc2VydmVyXy0+bWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplKCkpOworICBDYWxsIGNhbGwoY2FsbF8sIHNlcnZlcl8sIGNhbGxfY3FfKTsKICAgaWYgKCpzdGF0dXMgJiYgY2FsbF8pIHsKICAgICBjb250ZXh0Xy0+QmVnaW5Db21wbGV0aW9uT3AoJmNhbGwpOwogICB9CkBAIC02MjEsOCArNjEyLDggQEAKICAgICBTZXJ2ZXJDb21wbGV0aW9uUXVldWUqIG5vdGlmaWNhdGlvbl9jcSkgewogICBncnBjX3NlcnZlcl9yZXF1ZXN0X3JlZ2lzdGVyZWRfY2FsbCgKICAgICAgIHNlcnZlcl8tPnNlcnZlcigpLCByZWdpc3RlcmVkX21ldGhvZCwgJmNhbGxfLCAmY29udGV4dF8tPmRlYWRsaW5lXywKLSAgICAgICZpbml0aWFsX21ldGFkYXRhX2FycmF5XywgcGF5bG9hZCwgY2FsbF9jcV8tPmNxKCksIG5vdGlmaWNhdGlvbl9jcS0+Y3EoKSwKLSAgICAgIHRoaXMpOworICAgICAgY29udGV4dF8tPmNsaWVudF9tZXRhZGF0YV8uYXJyKCksIHBheWxvYWQsIGNhbGxfY3FfLT5jcSgpLAorICAgICAgbm90aWZpY2F0aW9uX2NxLT5jcSgpLCB0aGlzKTsKIH0KIAogU2VydmVySW50ZXJmYWNlOjpHZW5lcmljQXN5bmNSZXF1ZXN0OjpHZW5lcmljQXN5bmNSZXF1ZXN0KApAQCAtNjM1LDcgKzYyNiw3IEBACiAgIEdQUl9BU1NFUlQobm90aWZpY2F0aW9uX2NxKTsKICAgR1BSX0FTU0VSVChjYWxsX2NxKTsKICAgZ3JwY19zZXJ2ZXJfcmVxdWVzdF9jYWxsKHNlcnZlci0+c2VydmVyKCksICZjYWxsXywgJmNhbGxfZGV0YWlsc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5pdGlhbF9tZXRhZGF0YV9hcnJheV8sIGNhbGxfY3EtPmNxKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGllbnRfbWV0YWRhdGFfLmFycigpLCBjYWxsX2NxLT5jcSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uX2NxLT5jcSgpLCB0aGlzKTsKIH0KIApAQCAtNjQ0LDExICs2MzUsMTIgQEAKICAgLy8gVE9ETyh5YW5nZykgcmVtb3ZlIHRoZSBjb3B5IGhlcmUuCiAgIGlmICgqc3RhdHVzKSB7CiAgICAgc3RhdGljX2Nhc3Q8R2VuZXJpY1NlcnZlckNvbnRleHQqPihjb250ZXh0XyktPm1ldGhvZF8gPQotICAgICAgICBjYWxsX2RldGFpbHNfLm1ldGhvZDsKLSAgICBzdGF0aWNfY2FzdDxHZW5lcmljU2VydmVyQ29udGV4dCo+KGNvbnRleHRfKS0+aG9zdF8gPSBjYWxsX2RldGFpbHNfLmhvc3Q7CisgICAgICAgIFN0cmluZ0Zyb21Db3BpZWRTbGljZShjYWxsX2RldGFpbHNfLm1ldGhvZCk7CisgICAgc3RhdGljX2Nhc3Q8R2VuZXJpY1NlcnZlckNvbnRleHQqPihjb250ZXh0XyktPmhvc3RfID0KKyAgICAgICAgU3RyaW5nRnJvbUNvcGllZFNsaWNlKGNhbGxfZGV0YWlsc18uaG9zdCk7CiAgIH0KLSAgZ3ByX2ZyZWUoY2FsbF9kZXRhaWxzXy5tZXRob2QpOwotICBncHJfZnJlZShjYWxsX2RldGFpbHNfLmhvc3QpOworICBncnBjX3NsaWNlX3VucmVmKGNhbGxfZGV0YWlsc18ubWV0aG9kKTsKKyAgZ3JwY19zbGljZV91bnJlZihjYWxsX2RldGFpbHNfLmhvc3QpOwogICByZXR1cm4gQmFzZUFzeW5jUmVxdWVzdDo6RmluYWxpemVSZXN1bHQodGFnLCBzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvY3BwL3NlcnZlci9zZXJ2ZXJfY29udGV4dC5jYyBiL3NyYy9jcHAvc2VydmVyL3NlcnZlcl9jb250ZXh0LmNjCmluZGV4IGE2NmVjNGEuLmE3YWFhMjUgMTAwNjQ0Ci0tLSBhL3NyYy9jcHAvc2VydmVyL3NlcnZlcl9jb250ZXh0LmNjCisrKyBiL3NyYy9jcHAvc2VydmVyL3NlcnZlcl9jb250ZXh0LmNjCkBAIC0xNDQsOSArMTQ0LDEwIEBACiAgICAgICBzZW50X2luaXRpYWxfbWV0YWRhdGFfKGZhbHNlKSwKICAgICAgIGNvbXByZXNzaW9uX2xldmVsX3NldF8oZmFsc2UpIHsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXRhZGF0YV9jb3VudDsgaSsrKSB7Ci0gICAgY2xpZW50X21ldGFkYXRhXy5pbnNlcnQoc3RkOjpwYWlyPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+KAotICAgICAgICBtZXRhZGF0YVtpXS5rZXksCi0gICAgICAgIGdycGM6OnN0cmluZ19yZWYobWV0YWRhdGFbaV0udmFsdWUsIG1ldGFkYXRhW2ldLnZhbHVlX2xlbmd0aCkpKTsKKyAgICBjbGllbnRfbWV0YWRhdGFfLm1hcCgpLT5pbnNlcnQoCisgICAgICAgIHN0ZDo6cGFpcjxncnBjOjpzdHJpbmdfcmVmLCBncnBjOjpzdHJpbmdfcmVmPigKKyAgICAgICAgICAgIFN0cmluZ1JlZkZyb21TbGljZSgmbWV0YWRhdGFbaV0ua2V5KSwKKyAgICAgICAgICAgIFN0cmluZ1JlZkZyb21TbGljZSgmbWV0YWRhdGFbaV0udmFsdWUpKSk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NwcC90ZXN0L3NlcnZlcl9jb250ZXh0X3Rlc3Rfc3BvdXNlLmNjIGIvc3JjL2NwcC90ZXN0L3NlcnZlcl9jb250ZXh0X3Rlc3Rfc3BvdXNlLmNjCmluZGV4IGI5MzE1MmUuLmI4MTJkMTYgMTAwNjQ0Ci0tLSBhL3NyYy9jcHAvdGVzdC9zZXJ2ZXJfY29udGV4dF90ZXN0X3Nwb3VzZS5jYworKysgYi9zcmMvY3BwL3Rlc3Qvc2VydmVyX2NvbnRleHRfdGVzdF9zcG91c2UuY2MKQEAgLTQwLDExICs0MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JwYzo6c3RyaW5nJiB2YWx1ZSkgewogICBjbGllbnRfbWV0YWRhdGFfc3RvcmFnZV8uaW5zZXJ0KAogICAgICAgc3RkOjpwYWlyPGdycGM6OnN0cmluZywgZ3JwYzo6c3RyaW5nPihrZXksIHZhbHVlKSk7Ci0gIGN0eF8tPmNsaWVudF9tZXRhZGF0YV8uY2xlYXIoKTsKKyAgY3R4Xy0+Y2xpZW50X21ldGFkYXRhXy5tYXAoKS0+Y2xlYXIoKTsKICAgZm9yIChhdXRvIGl0ZXIgPSBjbGllbnRfbWV0YWRhdGFfc3RvcmFnZV8uYmVnaW4oKTsKICAgICAgICBpdGVyICE9IGNsaWVudF9tZXRhZGF0YV9zdG9yYWdlXy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgY3R4Xy0+Y2xpZW50X21ldGFkYXRhXy5pbnNlcnQoc3RkOjpwYWlyPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+KAotICAgICAgICBpdGVyLT5maXJzdC5jX3N0cigpLCBpdGVyLT5zZWNvbmQuY19zdHIoKSkpOworICAgIGN0eF8tPmNsaWVudF9tZXRhZGF0YV8ubWFwKCktPmluc2VydCgKKyAgICAgICAgc3RkOjpwYWlyPGdycGM6OnN0cmluZ19yZWYsIGdycGM6OnN0cmluZ19yZWY+KGl0ZXItPmZpcnN0LmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQuY19zdHIoKSkpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jcHAvdXRpbC9zbGljZV9jYy5jYyBiL3NyYy9jcHAvdXRpbC9zbGljZV9jYy5jYwppbmRleCBjMDVmMWNmLi42ZWZiNjhlIDEwMDY0NAotLS0gYS9zcmMvY3BwL3V0aWwvc2xpY2VfY2MuY2MKKysrIGIvc3JjL2NwcC91dGlsL3NsaWNlX2NjLmNjCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBncnBjIHsKIAotU2xpY2U6OlNsaWNlKCkgOiBzbGljZV8oZ3ByX2VtcHR5X3NsaWNlKCkpIHt9CitTbGljZTo6U2xpY2UoKSA6IHNsaWNlXyhncnBjX2VtcHR5X3NsaWNlKCkpIHt9CiAKIFNsaWNlOjp+U2xpY2UoKSB7IGdycGNfc2xpY2VfdW5yZWYoc2xpY2VfKTsgfQogCmRpZmYgLS1naXQgYS9zcmMvY3NoYXJwL0dycGMuQ29yZS9JbnRlcm5hbC9CYXRjaENvbnRleHRTYWZlSGFuZGxlLmNzIGIvc3JjL2NzaGFycC9HcnBjLkNvcmUvSW50ZXJuYWwvQmF0Y2hDb250ZXh0U2FmZUhhbmRsZS5jcwppbmRleCAyNjQ0OWVlLi4wZTRhNzdiIDEwMDY0NAotLS0gYS9zcmMvY3NoYXJwL0dycGMuQ29yZS9JbnRlcm5hbC9CYXRjaENvbnRleHRTYWZlSGFuZGxlLmNzCisrKyBiL3NyYy9jc2hhcnAvR3JwYy5Db3JlL0ludGVybmFsL0JhdGNoQ29udGV4dFNhZmVIYW5kbGUuY3MKQEAgLTcxLDcgKzcxLDkgQEAKICAgICAgICAgLy8gR2V0cyBkYXRhIG9mIHJlY3Zfc3RhdHVzX29uX2NsaWVudCBjb21wbGV0aW9uLgogICAgICAgICBwdWJsaWMgQ2xpZW50U2lkZVN0YXR1cyBHZXRSZWNlaXZlZFN0YXR1c09uQ2xpZW50KCkKICAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGRldGFpbHMgPSBNYXJzaGFsLlB0clRvU3RyaW5nQW5zaShOYXRpdmUuZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHRfcmVjdl9zdGF0dXNfb25fY2xpZW50X2RldGFpbHModGhpcykpOworICAgICAgICAgICAgVUludFB0ciBkZXRhaWxzTGVuZ3RoOworICAgICAgICAgICAgSW50UHRyIGRldGFpbHNQdHIgPSBOYXRpdmUuZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHRfcmVjdl9zdGF0dXNfb25fY2xpZW50X2RldGFpbHModGhpcywgb3V0IGRldGFpbHNMZW5ndGgpOworICAgICAgICAgICAgc3RyaW5nIGRldGFpbHMgPSBNYXJzaGFsLlB0clRvU3RyaW5nQW5zaShkZXRhaWxzUHRyLCAoaW50KSBkZXRhaWxzTGVuZ3RoLlRvVUludDMyKCkpOwogICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBTdGF0dXMoTmF0aXZlLmdycGNzaGFycF9iYXRjaF9jb250ZXh0X3JlY3Zfc3RhdHVzX29uX2NsaWVudF9zdGF0dXModGhpcyksIGRldGFpbHMpOwogCiAgICAgICAgICAgICBJbnRQdHIgbWV0YWRhdGFBcnJheVB0ciA9IE5hdGl2ZS5ncnBjc2hhcnBfYmF0Y2hfY29udGV4dF9yZWN2X3N0YXR1c19vbl9jbGllbnRfdHJhaWxpbmdfbWV0YWRhdGEodGhpcyk7CmRpZmYgLS1naXQgYS9zcmMvY3NoYXJwL0dycGMuQ29yZS9JbnRlcm5hbC9NZXRhZGF0YUFycmF5U2FmZUhhbmRsZS5jcyBiL3NyYy9jc2hhcnAvR3JwYy5Db3JlL0ludGVybmFsL01ldGFkYXRhQXJyYXlTYWZlSGFuZGxlLmNzCmluZGV4IDA1ZGRhNWIuLmQ1Yjg3YTYgMTAwNjQ0Ci0tLSBhL3NyYy9jc2hhcnAvR3JwYy5Db3JlL0ludGVybmFsL01ldGFkYXRhQXJyYXlTYWZlSGFuZGxlLmNzCisrKyBiL3NyYy9jc2hhcnAvR3JwYy5Db3JlL0ludGVybmFsL01ldGFkYXRhQXJyYXlTYWZlSGFuZGxlLmNzCkBAIC03OSw5ICs3OSwxMyBAQAogICAgICAgICAgICAgZm9yICh1bG9uZyBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbmV3IFVJbnRQdHIoaSk7Ci0gICAgICAgICAgICAgICAgc3RyaW5nIGtleSA9IE1hcnNoYWwuUHRyVG9TdHJpbmdBbnNpKE5hdGl2ZS5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X2tleShtZXRhZGF0YUFycmF5LCBpbmRleCkpOwotICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBieXRlW05hdGl2ZS5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X3ZhbHVlX2xlbmd0aChtZXRhZGF0YUFycmF5LCBpbmRleCkuVG9VSW50NjQoKV07Ci0gICAgICAgICAgICAgICAgTWFyc2hhbC5Db3B5KE5hdGl2ZS5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X3ZhbHVlKG1ldGFkYXRhQXJyYXksIGluZGV4KSwgYnl0ZXMsIDAsIGJ5dGVzLkxlbmd0aCk7CisgICAgICAgICAgICAgICAgVUludFB0ciBrZXlMZW47CisgICAgICAgICAgICAgICAgSW50UHRyIGtleVB0ciA9IE5hdGl2ZS5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X2tleShtZXRhZGF0YUFycmF5LCBpbmRleCwgb3V0IGtleUxlbik7CisgICAgICAgICAgICAgICAgc3RyaW5nIGtleSA9IE1hcnNoYWwuUHRyVG9TdHJpbmdBbnNpKGtleVB0ciwgKGludClrZXlMZW4uVG9VSW50MzIoKSk7CisgICAgICAgICAgICAgICAgVUludFB0ciB2YWx1ZUxlbjsKKyAgICAgICAgICAgICAgICBJbnRQdHIgdmFsdWVQdHIgPSBOYXRpdmUuZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF92YWx1ZShtZXRhZGF0YUFycmF5LCBpbmRleCwgb3V0IHZhbHVlTGVuKTsKKyAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVt2YWx1ZUxlbi5Ub1VJbnQ2NCgpXTsKKyAgICAgICAgICAgICAgICBNYXJzaGFsLkNvcHkodmFsdWVQdHIsIGJ5dGVzLCAwLCBieXRlcy5MZW5ndGgpOwogICAgICAgICAgICAgICAgIG1ldGFkYXRhLkFkZChNZXRhZGF0YS5FbnRyeS5DcmVhdGVVbnNhZmUoa2V5LCBieXRlcykpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhOwpkaWZmIC0tZ2l0IGEvc3JjL2NzaGFycC9HcnBjLkNvcmUvSW50ZXJuYWwvTmF0aXZlTWV0aG9kcy5jcyBiL3NyYy9jc2hhcnAvR3JwYy5Db3JlL0ludGVybmFsL05hdGl2ZU1ldGhvZHMuY3MKaW5kZXggY2UzOGUzNy4uMmYzNzcwNyAxMDA2NDQKLS0tIGEvc3JjL2NzaGFycC9HcnBjLkNvcmUvSW50ZXJuYWwvTmF0aXZlTWV0aG9kcy5jcworKysgYi9zcmMvY3NoYXJwL0dycGMuQ29yZS9JbnRlcm5hbC9OYXRpdmVNZXRob2RzLmNzCkBAIC0xMjgsNyArMTI4LDYgQEAKICAgICAgICAgcHVibGljIHJlYWRvbmx5IERlbGVnYXRlcy5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfY291bnRfZGVsZWdhdGUgZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2NvdW50OwogICAgICAgICBwdWJsaWMgcmVhZG9ubHkgRGVsZWdhdGVzLmdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfa2V5X2RlbGVnYXRlIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfa2V5OwogICAgICAgICBwdWJsaWMgcmVhZG9ubHkgRGVsZWdhdGVzLmdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfdmFsdWVfZGVsZWdhdGUgZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF92YWx1ZTsKLSAgICAgICAgcHVibGljIHJlYWRvbmx5IERlbGVnYXRlcy5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X3ZhbHVlX2xlbmd0aF9kZWxlZ2F0ZSBncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X3ZhbHVlX2xlbmd0aDsKICAgICAgICAgcHVibGljIHJlYWRvbmx5IERlbGVnYXRlcy5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZGVzdHJveV9mdWxsX2RlbGVnYXRlIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9kZXN0cm95X2Z1bGw7CiAKICAgICAgICAgcHVibGljIHJlYWRvbmx5IERlbGVnYXRlcy5ncnBjc2hhcnBfcmVkaXJlY3RfbG9nX2RlbGVnYXRlIGdycGNzaGFycF9yZWRpcmVjdF9sb2c7CkBAIC0yMzcsNyArMjM2LDYgQEAKICAgICAgICAgICAgIHRoaXMuZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2NvdW50ID0gR2V0TWV0aG9kRGVsZWdhdGU8RGVsZWdhdGVzLmdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9jb3VudF9kZWxlZ2F0ZT4obGlicmFyeSk7CiAgICAgICAgICAgICB0aGlzLmdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfa2V5ID0gR2V0TWV0aG9kRGVsZWdhdGU8RGVsZWdhdGVzLmdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfa2V5X2RlbGVnYXRlPihsaWJyYXJ5KTsKICAgICAgICAgICAgIHRoaXMuZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF92YWx1ZSA9IEdldE1ldGhvZERlbGVnYXRlPERlbGVnYXRlcy5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X3ZhbHVlX2RlbGVnYXRlPihsaWJyYXJ5KTsKLSAgICAgICAgICAgIHRoaXMuZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF92YWx1ZV9sZW5ndGggPSBHZXRNZXRob2REZWxlZ2F0ZTxEZWxlZ2F0ZXMuZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF92YWx1ZV9sZW5ndGhfZGVsZWdhdGU+KGxpYnJhcnkpOwogICAgICAgICAgICAgdGhpcy5ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZGVzdHJveV9mdWxsID0gR2V0TWV0aG9kRGVsZWdhdGU8RGVsZWdhdGVzLmdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9kZXN0cm95X2Z1bGxfZGVsZWdhdGU+KGxpYnJhcnkpOwogCiAgICAgICAgICAgICB0aGlzLmdycGNzaGFycF9yZWRpcmVjdF9sb2cgPSBHZXRNZXRob2REZWxlZ2F0ZTxEZWxlZ2F0ZXMuZ3JwY3NoYXJwX3JlZGlyZWN0X2xvZ19kZWxlZ2F0ZT4obGlicmFyeSk7CkBAIC0zMDYsMTUgKzMwNCwxNSBAQAogICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIEludFB0ciBncnBjc2hhcnBfYmF0Y2hfY29udGV4dF9yZWN2X21lc3NhZ2VfbGVuZ3RoX2RlbGVnYXRlKEJhdGNoQ29udGV4dFNhZmVIYW5kbGUgY3R4KTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIGdycGNzaGFycF9iYXRjaF9jb250ZXh0X3JlY3ZfbWVzc2FnZV90b19idWZmZXJfZGVsZWdhdGUoQmF0Y2hDb250ZXh0U2FmZUhhbmRsZSBjdHgsIGJ5dGVbXSBidWZmZXIsIFVJbnRQdHIgYnVmZmVyTGVuKTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBTdGF0dXNDb2RlIGdycGNzaGFycF9iYXRjaF9jb250ZXh0X3JlY3Zfc3RhdHVzX29uX2NsaWVudF9zdGF0dXNfZGVsZWdhdGUoQmF0Y2hDb250ZXh0U2FmZUhhbmRsZSBjdHgpOwotICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIEludFB0ciBncnBjc2hhcnBfYmF0Y2hfY29udGV4dF9yZWN2X3N0YXR1c19vbl9jbGllbnRfZGV0YWlsc19kZWxlZ2F0ZShCYXRjaENvbnRleHRTYWZlSGFuZGxlIGN0eCk7ICAvLyByZXR1cm5zIGNvbnN0IGNoYXIqCisgICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgSW50UHRyIGdycGNzaGFycF9iYXRjaF9jb250ZXh0X3JlY3Zfc3RhdHVzX29uX2NsaWVudF9kZXRhaWxzX2RlbGVnYXRlKEJhdGNoQ29udGV4dFNhZmVIYW5kbGUgY3R4LCBvdXQgVUludFB0ciBkZXRhaWxzTGVuZ3RoKTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBJbnRQdHIgZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHRfcmVjdl9zdGF0dXNfb25fY2xpZW50X3RyYWlsaW5nX21ldGFkYXRhX2RlbGVnYXRlKEJhdGNoQ29udGV4dFNhZmVIYW5kbGUgY3R4KTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBpbnQgZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHRfcmVjdl9jbG9zZV9vbl9zZXJ2ZXJfY2FuY2VsbGVkX2RlbGVnYXRlKEJhdGNoQ29udGV4dFNhZmVIYW5kbGUgY3R4KTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIGdycGNzaGFycF9iYXRjaF9jb250ZXh0X2Rlc3Ryb3lfZGVsZWdhdGUoSW50UHRyIGN0eCk7CiAKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBSZXF1ZXN0Q2FsbENvbnRleHRTYWZlSGFuZGxlIGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9jcmVhdGVfZGVsZWdhdGUoKTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBDYWxsU2FmZUhhbmRsZSBncnBjc2hhcnBfcmVxdWVzdF9jYWxsX2NvbnRleHRfY2FsbF9kZWxlZ2F0ZShSZXF1ZXN0Q2FsbENvbnRleHRTYWZlSGFuZGxlIGN0eCk7Ci0gICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgSW50UHRyIGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9tZXRob2RfZGVsZWdhdGUoUmVxdWVzdENhbGxDb250ZXh0U2FmZUhhbmRsZSBjdHgpOyAgLy8gcmV0dXJucyBjb25zdCBjaGFyKgotICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIEludFB0ciBncnBjc2hhcnBfcmVxdWVzdF9jYWxsX2NvbnRleHRfaG9zdF9kZWxlZ2F0ZShSZXF1ZXN0Q2FsbENvbnRleHRTYWZlSGFuZGxlIGN0eCk7ICAvLyByZXR1cm5zIGNvbnN0IGNoYXIqCisgICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgSW50UHRyIGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9tZXRob2RfZGVsZWdhdGUoUmVxdWVzdENhbGxDb250ZXh0U2FmZUhhbmRsZSBjdHgsIG91dCBVSW50UHRyIG1ldGhvZExlbmd0aCk7CisgICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgSW50UHRyIGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9ob3N0X2RlbGVnYXRlKFJlcXVlc3RDYWxsQ29udGV4dFNhZmVIYW5kbGUgY3R4LCBvdXQgVUludFB0ciBob3N0TGVuZ3RoKTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBUaW1lc3BlYyBncnBjc2hhcnBfcmVxdWVzdF9jYWxsX2NvbnRleHRfZGVhZGxpbmVfZGVsZWdhdGUoUmVxdWVzdENhbGxDb250ZXh0U2FmZUhhbmRsZSBjdHgpOwogICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIEludFB0ciBncnBjc2hhcnBfcmVxdWVzdF9jYWxsX2NvbnRleHRfcmVxdWVzdF9tZXRhZGF0YV9kZWxlZ2F0ZShSZXF1ZXN0Q2FsbENvbnRleHRTYWZlSGFuZGxlIGN0eCk7CiAgICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBncnBjc2hhcnBfcmVxdWVzdF9jYWxsX2NvbnRleHRfZGVzdHJveV9kZWxlZ2F0ZShJbnRQdHIgY3R4KTsKQEAgLTM4NCw5ICszODIsOCBAQAogICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIE1ldGFkYXRhQXJyYXlTYWZlSGFuZGxlIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9jcmVhdGVfZGVsZWdhdGUoVUludFB0ciBjYXBhY2l0eSk7CiAgICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfYWRkX2RlbGVnYXRlKE1ldGFkYXRhQXJyYXlTYWZlSGFuZGxlIGFycmF5LCBzdHJpbmcga2V5LCBieXRlW10gdmFsdWUsIFVJbnRQdHIgdmFsdWVMZW5ndGgpOwogICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIFVJbnRQdHIgZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2NvdW50X2RlbGVnYXRlKEludFB0ciBtZXRhZGF0YUFycmF5KTsKLSAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBJbnRQdHIgZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF9rZXlfZGVsZWdhdGUoSW50UHRyIG1ldGFkYXRhQXJyYXksIFVJbnRQdHIgaW5kZXgpOwotICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIEludFB0ciBncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X3ZhbHVlX2RlbGVnYXRlKEludFB0ciBtZXRhZGF0YUFycmF5LCBVSW50UHRyIGluZGV4KTsKLSAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBVSW50UHRyIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfdmFsdWVfbGVuZ3RoX2RlbGVnYXRlKEludFB0ciBtZXRhZGF0YUFycmF5LCBVSW50UHRyIGluZGV4KTsKKyAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSBJbnRQdHIgZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF9rZXlfZGVsZWdhdGUoSW50UHRyIG1ldGFkYXRhQXJyYXksIFVJbnRQdHIgaW5kZXgsIG91dCBVSW50UHRyIGtleUxlbmd0aCk7CisgICAgICAgICAgICBwdWJsaWMgZGVsZWdhdGUgSW50UHRyIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfdmFsdWVfZGVsZWdhdGUoSW50UHRyIG1ldGFkYXRhQXJyYXksIFVJbnRQdHIgaW5kZXgsIG91dCBVSW50UHRyIHZhbHVlTGVuZ3RoKTsKICAgICAgICAgICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9kZXN0cm95X2Z1bGxfZGVsZWdhdGUoSW50UHRyIGFycmF5KTsKIAogICAgICAgICAgICAgcHVibGljIGRlbGVnYXRlIHZvaWQgZ3JwY3NoYXJwX3JlZGlyZWN0X2xvZ19kZWxlZ2F0ZShHcHJMb2dEZWxlZ2F0ZSBjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9zcmMvY3NoYXJwL0dycGMuQ29yZS9JbnRlcm5hbC9SZXF1ZXN0Q2FsbENvbnRleHRTYWZlSGFuZGxlLmNzIGIvc3JjL2NzaGFycC9HcnBjLkNvcmUvSW50ZXJuYWwvUmVxdWVzdENhbGxDb250ZXh0U2FmZUhhbmRsZS5jcwppbmRleCBlYTc4MTlkLi5jMTU2MGJjIDEwMDY0NAotLS0gYS9zcmMvY3NoYXJwL0dycGMuQ29yZS9JbnRlcm5hbC9SZXF1ZXN0Q2FsbENvbnRleHRTYWZlSGFuZGxlLmNzCisrKyBiL3NyYy9jc2hhcnAvR3JwYy5Db3JlL0ludGVybmFsL1JlcXVlc3RDYWxsQ29udGV4dFNhZmVIYW5kbGUuY3MKQEAgLTY2LDggKzY2LDE0IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBjYWxsID0gTmF0aXZlLmdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9jYWxsKHRoaXMpOwogCi0gICAgICAgICAgICB2YXIgbWV0aG9kID0gTWFyc2hhbC5QdHJUb1N0cmluZ0Fuc2koTmF0aXZlLmdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9tZXRob2QodGhpcykpOwotICAgICAgICAgICAgdmFyIGhvc3QgPSBNYXJzaGFsLlB0clRvU3RyaW5nQW5zaShOYXRpdmUuZ3JwY3NoYXJwX3JlcXVlc3RfY2FsbF9jb250ZXh0X2hvc3QodGhpcykpOworICAgICAgICAgICAgVUludFB0ciBtZXRob2RMZW47CisgICAgICAgICAgICBJbnRQdHIgbWV0aG9kUHRyID0gTmF0aXZlLmdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9tZXRob2QodGhpcywgb3V0IG1ldGhvZExlbik7CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gTWFyc2hhbC5QdHJUb1N0cmluZ0Fuc2kobWV0aG9kUHRyLCAoaW50KSBtZXRob2RMZW4uVG9VSW50MzIoKSk7CisKKyAgICAgICAgICAgIFVJbnRQdHIgaG9zdExlbjsKKyAgICAgICAgICAgIEludFB0ciBob3N0UHRyID0gTmF0aXZlLmdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9ob3N0KHRoaXMsIG91dCBob3N0TGVuKTsKKyAgICAgICAgICAgIHZhciBob3N0ID0gTWFyc2hhbC5QdHJUb1N0cmluZ0Fuc2koaG9zdFB0ciwgKGludCkgaG9zdExlbi5Ub1VJbnQzMigpKTsKKwogICAgICAgICAgICAgdmFyIGRlYWRsaW5lID0gTmF0aXZlLmdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9kZWFkbGluZSh0aGlzKTsKIAogICAgICAgICAgICAgSW50UHRyIG1ldGFkYXRhQXJyYXlQdHIgPSBOYXRpdmUuZ3JwY3NoYXJwX3JlcXVlc3RfY2FsbF9jb250ZXh0X3JlcXVlc3RfbWV0YWRhdGEodGhpcyk7CmRpZmYgLS1naXQgYS9zcmMvY3NoYXJwL2V4dC9ncnBjX2NzaGFycF9leHQuYyBiL3NyYy9jc2hhcnAvZXh0L2dycGNfY3NoYXJwX2V4dC5jCmluZGV4IDk0NmY1ODcuLmUzMDhiMDIgMTAwNjQ0Ci0tLSBhL3NyYy9jc2hhcnAvZXh0L2dycGNfY3NoYXJwX2V4dC5jCisrKyBiL3NyYy9jc2hhcnAvZXh0L2dycGNfY3NoYXJwX2V4dC5jCkBAIC03MywxNSArNzMsMTMgQEAKICAgZ3JwY19ieXRlX2J1ZmZlciAqc2VuZF9tZXNzYWdlOwogICBzdHJ1Y3QgewogICAgIGdycGNfbWV0YWRhdGFfYXJyYXkgdHJhaWxpbmdfbWV0YWRhdGE7Ci0gICAgY2hhciAqc3RhdHVzX2RldGFpbHM7CiAgIH0gc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXI7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgcmVjdl9pbml0aWFsX21ldGFkYXRhOwogICBncnBjX2J5dGVfYnVmZmVyICpyZWN2X21lc3NhZ2U7CiAgIHN0cnVjdCB7CiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSB0cmFpbGluZ19tZXRhZGF0YTsKICAgICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKLSAgICBjaGFyICpzdGF0dXNfZGV0YWlsczsKLSAgICBzaXplX3Qgc3RhdHVzX2RldGFpbHNfY2FwYWNpdHk7CisgICAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlsczsKICAgfSByZWN2X3N0YXR1c19vbl9jbGllbnQ7CiAgIGludCByZWN2X2Nsb3NlX29uX3NlcnZlcl9jYW5jZWxsZWQ7CiB9IGdycGNzaGFycF9iYXRjaF9jb250ZXh0OwpAQCAtMTIyLDggKzEyMCw4IEBACiAgIHNpemVfdCBpOwogICBpZiAoYXJyYXktPm1ldGFkYXRhKSB7CiAgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5jb3VudDsgaSsrKSB7Ci0gICAgICBncHJfZnJlZSgodm9pZCAqKWFycmF5LT5tZXRhZGF0YVtpXS5rZXkpOwotICAgICAgZ3ByX2ZyZWUoKHZvaWQgKilhcnJheS0+bWV0YWRhdGFbaV0udmFsdWUpOworICAgICAgZ3JwY19zbGljZV91bnJlZihhcnJheS0+bWV0YWRhdGFbaV0ua2V5KTsKKyAgICAgIGdycGNfc2xpY2VfdW5yZWYoYXJyYXktPm1ldGFkYXRhW2ldLnZhbHVlKTsKICAgICB9CiAgIH0KICAgZ3ByX2ZyZWUoYXJyYXktPm1ldGFkYXRhKTsKQEAgLTE2NywxMCArMTY1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW5ndGgpIHsKICAgc2l6ZV90IGkgPSBhcnJheS0+Y291bnQ7CiAgIEdQUl9BU1NFUlQoYXJyYXktPmNvdW50IDwgYXJyYXktPmNhcGFjaXR5KTsKLSAgYXJyYXktPm1ldGFkYXRhW2ldLmtleSA9IGdwcl9zdHJkdXAoa2V5KTsKLSAgYXJyYXktPm1ldGFkYXRhW2ldLnZhbHVlID0gKGNoYXIgKilncHJfbWFsbG9jKHZhbHVlX2xlbmd0aCk7Ci0gIG1lbWNweSgodm9pZCAqKWFycmF5LT5tZXRhZGF0YVtpXS52YWx1ZSwgdmFsdWUsIHZhbHVlX2xlbmd0aCk7Ci0gIGFycmF5LT5tZXRhZGF0YVtpXS52YWx1ZV9sZW5ndGggPSB2YWx1ZV9sZW5ndGg7CisgIGFycmF5LT5tZXRhZGF0YVtpXS5rZXkgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhrZXkpOworICBhcnJheS0+bWV0YWRhdGFbaV0udmFsdWUgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcih2YWx1ZSwgdmFsdWVfbGVuZ3RoKTsKICAgYXJyYXktPmNvdW50Kys7CiB9CiAKQEAgLTE4MCwyMSArMTc2LDE3IEBACiB9CiAKIEdQUl9FWFBPUlQgY29uc3QgY2hhciAqR1BSX0NBTExUWVBFCi1ncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X2tleShncnBjX21ldGFkYXRhX2FycmF5ICphcnJheSwgc2l6ZV90IGluZGV4KSB7CitncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZ2V0X2tleShncnBjX21ldGFkYXRhX2FycmF5ICphcnJheSwgc2l6ZV90IGluZGV4LCBzaXplX3QgKmtleV9sZW5ndGgpIHsKICAgR1BSX0FTU0VSVChpbmRleCA8IGFycmF5LT5jb3VudCk7Ci0gIHJldHVybiBhcnJheS0+bWV0YWRhdGFbaW5kZXhdLmtleTsKKyAgKmtleV9sZW5ndGggPSBHUlBDX1NMSUNFX0xFTkdUSChhcnJheS0+bWV0YWRhdGFbaW5kZXhdLmtleSk7CisgIHJldHVybiAoY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKGFycmF5LT5tZXRhZGF0YVtpbmRleF0ua2V5KTsKIH0KIAogR1BSX0VYUE9SVCBjb25zdCBjaGFyICpHUFJfQ0FMTFRZUEUKLWdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfdmFsdWUoZ3JwY19tZXRhZGF0YV9hcnJheSAqYXJyYXksIHNpemVfdCBpbmRleCkgeworZ3JwY3NoYXJwX21ldGFkYXRhX2FycmF5X2dldF92YWx1ZShncnBjX21ldGFkYXRhX2FycmF5ICphcnJheSwgc2l6ZV90IGluZGV4LCBzaXplX3QgKnZhbHVlX2xlbmd0aCkgewogICBHUFJfQVNTRVJUKGluZGV4IDwgYXJyYXktPmNvdW50KTsKLSAgcmV0dXJuIGFycmF5LT5tZXRhZGF0YVtpbmRleF0udmFsdWU7Ci19Ci0KLUdQUl9FWFBPUlQgaW50cHRyX3QgR1BSX0NBTExUWVBFIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9nZXRfdmFsdWVfbGVuZ3RoKAotICAgIGdycGNfbWV0YWRhdGFfYXJyYXkgKmFycmF5LCBzaXplX3QgaW5kZXgpIHsKLSAgR1BSX0FTU0VSVChpbmRleCA8IGFycmF5LT5jb3VudCk7Ci0gIHJldHVybiAoaW50cHRyX3QpYXJyYXktPm1ldGFkYXRhW2luZGV4XS52YWx1ZV9sZW5ndGg7CisgICp2YWx1ZV9sZW5ndGggPSBHUlBDX1NMSUNFX0xFTkdUSChhcnJheS0+bWV0YWRhdGFbaW5kZXhdLnZhbHVlKTsKKyAgcmV0dXJuIChjaGFyICopR1JQQ19TTElDRV9TVEFSVF9QVFIoYXJyYXktPm1ldGFkYXRhW2luZGV4XS52YWx1ZSk7CiB9CiAKIC8qIE1vdmUgY29udGVudHMgb2YgbWV0YWRhdGEgYXJyYXkgKi8KQEAgLTIyNyw3ICsyMTksNiBAQAogCiAgIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9kZXN0cm95X21ldGFkYXRhX2luY2x1ZGluZ19lbnRyaWVzKAogICAgICAgJihjdHgtPnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhKSk7Ci0gIGdwcl9mcmVlKGN0eC0+c2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMpOwogCiAgIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9kZXN0cm95X21ldGFkYXRhX29ubHkoJihjdHgtPnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSkpOwogCkBAIC0yMzUsNyArMjI2LDcgQEAKIAogICBncnBjc2hhcnBfbWV0YWRhdGFfYXJyYXlfZGVzdHJveV9tZXRhZGF0YV9vbmx5KAogICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSkpOwotICBncHJfZnJlZSgodm9pZCAqKWN0eC0+cmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyk7CiAKICAgZ3ByX2ZyZWUoY3R4KTsKIH0KQEAgLTMwNyw4ICsyOTgsOSBAQAogCiBHUFJfRVhQT1JUIGNvbnN0IGNoYXIgKkdQUl9DQUxMVFlQRQogZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHRfcmVjdl9zdGF0dXNfb25fY2xpZW50X2RldGFpbHMoCi0gICAgY29uc3QgZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHQgKmN0eCkgewotICByZXR1cm4gY3R4LT5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHM7CisgICAgY29uc3QgZ3JwY3NoYXJwX2JhdGNoX2NvbnRleHQgKmN0eCwgc2l6ZV90ICpkZXRhaWxzX2xlbmd0aCkgeworICAqZGV0YWlsc19sZW5ndGggPSBHUlBDX1NMSUNFX0xFTkdUSChjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyk7CisgIHJldHVybiAoY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKGN0eC0+cmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzKTsKIH0KIAogR1BSX0VYUE9SVCBjb25zdCBncnBjX21ldGFkYXRhX2FycmF5ICpHUFJfQ0FMTFRZUEUKQEAgLTMyNCwxMyArMzE2LDE1IEBACiAKIEdQUl9FWFBPUlQgY29uc3QgY2hhciAqR1BSX0NBTExUWVBFCiBncnBjc2hhcnBfcmVxdWVzdF9jYWxsX2NvbnRleHRfbWV0aG9kKAotICAgIGNvbnN0IGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dCAqY3R4KSB7Ci0gIHJldHVybiBjdHgtPmNhbGxfZGV0YWlscy5tZXRob2Q7CisgICAgY29uc3QgZ3JwY3NoYXJwX3JlcXVlc3RfY2FsbF9jb250ZXh0ICpjdHgsIHNpemVfdCAqbWV0aG9kX2xlbmd0aCkgeworICAqbWV0aG9kX2xlbmd0aCA9IEdSUENfU0xJQ0VfTEVOR1RIKGN0eC0+Y2FsbF9kZXRhaWxzLm1ldGhvZCk7CisgIHJldHVybiAoY2hhciAqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKGN0eC0+Y2FsbF9kZXRhaWxzLm1ldGhvZCk7CiB9CiAKIEdQUl9FWFBPUlQgY29uc3QgY2hhciAqR1BSX0NBTExUWVBFIGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dF9ob3N0KAotICAgIGNvbnN0IGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dCAqY3R4KSB7Ci0gIHJldHVybiBjdHgtPmNhbGxfZGV0YWlscy5ob3N0OworICAgIGNvbnN0IGdycGNzaGFycF9yZXF1ZXN0X2NhbGxfY29udGV4dCAqY3R4LCBzaXplX3QgKmhvc3RfbGVuZ3RoKSB7CisgICpob3N0X2xlbmd0aCA9IEdSUENfU0xJQ0VfTEVOR1RIKGN0eC0+Y2FsbF9kZXRhaWxzLmhvc3QpOworICByZXR1cm4gKGNoYXIgKilHUlBDX1NMSUNFX1NUQVJUX1BUUihjdHgtPmNhbGxfZGV0YWlscy5ob3N0KTsKIH0KIAogR1BSX0VYUE9SVCBncHJfdGltZXNwZWMgR1BSX0NBTExUWVBFCkBAIC00MDQsOCArMzk4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NvbXBsZXRpb25fcXVldWUgKmNxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLCBjb25zdCBjaGFyICpob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lKSB7CisgIGdycGNfc2xpY2UgbWV0aG9kX3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcobWV0aG9kKTsKKyAgZ3JwY19zbGljZSAqaG9zdF9zbGljZV9wdHIgPSBOVUxMOworICBncnBjX3NsaWNlIGhvc3Rfc2xpY2U7CisgIGlmIChob3N0ICE9IE5VTEwpIHsKKyAgICBob3N0X3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoaG9zdCk7CisgICAgaG9zdF9zbGljZV9wdHIgPSAmaG9zdF9zbGljZTsKKyAgfQogICByZXR1cm4gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNoYW5uZWwsIHBhcmVudF9jYWxsLCBwcm9wYWdhdGlvbl9tYXNrLCBjcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsIGhvc3QsIGRlYWRsaW5lLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc2xpY2UsIGhvc3Rfc2xpY2VfcHRyLCBkZWFkbGluZSwgTlVMTCk7CiB9CiAKIEdQUl9FWFBPUlQgZ3JwY19jb25uZWN0aXZpdHlfc3RhdGUgR1BSX0NBTExUWVBFCkBAIC01MzcsNyArNTM4LDcgQEAKIAogICBvcHNbMV0ub3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKICAgY3R4LT5zZW5kX21lc3NhZ2UgPSBzdHJpbmdfdG9fYnl0ZV9idWZmZXIoc2VuZF9idWZmZXIsIHNlbmRfYnVmZmVyX2xlbik7Ci0gIG9wc1sxXS5kYXRhLnNlbmRfbWVzc2FnZSA9IGN0eC0+c2VuZF9tZXNzYWdlOworICBvcHNbMV0uZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gY3R4LT5zZW5kX21lc3NhZ2U7CiAgIG9wc1sxXS5mbGFncyA9IHdyaXRlX2ZsYWdzOwogICBvcHNbMV0ucmVzZXJ2ZWQgPSBOVUxMOwogCkBAIC01NDYsMTIgKzU0NywxMyBAQAogICBvcHNbMl0ucmVzZXJ2ZWQgPSBOVUxMOwogCiAgIG9wc1szXS5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcHNbM10uZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmKGN0eC0+cmVjdl9pbml0aWFsX21ldGFkYXRhKTsKKyAgb3BzWzNdLmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CisgICAgICAmKGN0eC0+cmVjdl9pbml0aWFsX21ldGFkYXRhKTsKICAgb3BzWzNdLmZsYWdzID0gMDsKICAgb3BzWzNdLnJlc2VydmVkID0gTlVMTDsKIAogICBvcHNbNF0ub3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3BzWzRdLmRhdGEucmVjdl9tZXNzYWdlID0gJihjdHgtPnJlY3ZfbWVzc2FnZSk7CisgIG9wc1s0XS5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmKGN0eC0+cmVjdl9tZXNzYWdlKTsKICAgb3BzWzRdLmZsYWdzID0gMDsKICAgb3BzWzRdLnJlc2VydmVkID0gTlVMTDsKIApAQCAtNTYwLDExICs1NjIsOCBAQAogICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSk7CiAgIG9wc1s1XS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPQogICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMpOwotICAvKiBub3QgdXNpbmcgcHJlYWxsb2NhdGlvbiBmb3Igc3RhdHVzX2RldGFpbHMgKi8KICAgb3BzWzVdLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0KICAgICAgICYoY3R4LT5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMpOwotICBvcHNbNV0uZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPQotICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSk7CiAgIG9wc1s1XS5mbGFncyA9IDA7CiAgIG9wc1s1XS5yZXNlcnZlZCA9IE5VTEw7CiAKQEAgLTU5MCwxMiArNTg5LDEzIEBACiAgIG9wc1swXS5yZXNlcnZlZCA9IE5VTEw7CiAKICAgb3BzWzFdLm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wc1sxXS5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICYoY3R4LT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOworICBvcHNbMV0uZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICYoY3R4LT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOwogICBvcHNbMV0uZmxhZ3MgPSAwOwogICBvcHNbMV0ucmVzZXJ2ZWQgPSBOVUxMOwogCiAgIG9wc1syXS5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcHNbMl0uZGF0YS5yZWN2X21lc3NhZ2UgPSAmKGN0eC0+cmVjdl9tZXNzYWdlKTsKKyAgb3BzWzJdLmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICYoY3R4LT5yZWN2X21lc3NhZ2UpOwogICBvcHNbMl0uZmxhZ3MgPSAwOwogICBvcHNbMl0ucmVzZXJ2ZWQgPSBOVUxMOwogCkBAIC02MDQsMTEgKzYwNCw4IEBACiAgICAgICAmKGN0eC0+cmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhKTsKICAgb3BzWzNdLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9CiAgICAgICAmKGN0eC0+cmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyk7Ci0gIC8qIG5vdCB1c2luZyBwcmVhbGxvY2F0aW9uIGZvciBzdGF0dXNfZGV0YWlscyAqLwogICBvcHNbM10uZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPQogICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyk7Ci0gIG9wc1szXS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9Ci0gICAgICAmKGN0eC0+cmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5KTsKICAgb3BzWzNdLmZsYWdzID0gMDsKICAgb3BzWzNdLnJlc2VydmVkID0gTlVMTDsKIApAQCAtNjM0LDcgKzYzMSw3IEBACiAKICAgb3BzWzFdLm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7CiAgIGN0eC0+c2VuZF9tZXNzYWdlID0gc3RyaW5nX3RvX2J5dGVfYnVmZmVyKHNlbmRfYnVmZmVyLCBzZW5kX2J1ZmZlcl9sZW4pOwotICBvcHNbMV0uZGF0YS5zZW5kX21lc3NhZ2UgPSBjdHgtPnNlbmRfbWVzc2FnZTsKKyAgb3BzWzFdLmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IGN0eC0+c2VuZF9tZXNzYWdlOwogICBvcHNbMV0uZmxhZ3MgPSB3cml0ZV9mbGFnczsKICAgb3BzWzFdLnJlc2VydmVkID0gTlVMTDsKIApAQCAtNjQ3LDExICs2NDQsOCBAQAogICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSk7CiAgIG9wc1szXS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPQogICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMpOwotICAvKiBub3QgdXNpbmcgcHJlYWxsb2NhdGlvbiBmb3Igc3RhdHVzX2RldGFpbHMgKi8KICAgb3BzWzNdLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0KICAgICAgICYoY3R4LT5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMpOwotICBvcHNbM10uZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPQotICAgICAgJihjdHgtPnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSk7CiAgIG9wc1szXS5mbGFncyA9IDA7CiAgIG9wc1szXS5yZXNlcnZlZCA9IE5VTEw7CiAKQEAgLTY4MSwxMSArNjc1LDggQEAKICAgICAgICYoY3R4LT5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEpOwogICBvcHNbMV0uZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0KICAgICAgICYoY3R4LT5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzKTsKLSAgLyogbm90IHVzaW5nIHByZWFsbG9jYXRpb24gZm9yIHN0YXR1c19kZXRhaWxzICovCiAgIG9wc1sxXS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9CiAgICAgICAmKGN0eC0+cmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzKTsKLSAgb3BzWzFdLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICYoY3R4LT5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkpOwogICBvcHNbMV0uZmxhZ3MgPSAwOwogICBvcHNbMV0ucmVzZXJ2ZWQgPSBOVUxMOwogCkBAIC02OTgsNyArNjg5LDggQEAKICAgLyogVE9ETzogZG9uJ3QgdXNlIG1hZ2ljIG51bWJlciAqLwogICBncnBjX29wIG9wc1sxXTsKICAgb3BzWzBdLm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wc1swXS5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICYoY3R4LT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOworICBvcHNbMF0uZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICYoY3R4LT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOwogICBvcHNbMF0uZmxhZ3MgPSAwOwogICBvcHNbMF0ucmVzZXJ2ZWQgPSBOVUxMOwogCkBAIC03MTcsNyArNzA5LDcgQEAKICAgc2l6ZV90IG5vcHMgPSBzZW5kX2VtcHR5X2luaXRpYWxfbWV0YWRhdGEgPyAyIDogMTsKICAgb3BzWzBdLm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7CiAgIGN0eC0+c2VuZF9tZXNzYWdlID0gc3RyaW5nX3RvX2J5dGVfYnVmZmVyKHNlbmRfYnVmZmVyLCBzZW5kX2J1ZmZlcl9sZW4pOwotICBvcHNbMF0uZGF0YS5zZW5kX21lc3NhZ2UgPSBjdHgtPnNlbmRfbWVzc2FnZTsKKyAgb3BzWzBdLmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IGN0eC0+c2VuZF9tZXNzYWdlOwogICBvcHNbMF0uZmxhZ3MgPSB3cml0ZV9mbGFnczsKICAgb3BzWzBdLnJlc2VydmVkID0gTlVMTDsKICAgb3BzWzFdLm9wID0gR1JQQ19PUF9TRU5EX0lOSVRJQUxfTUVUQURBVEE7CkBAIC03NDksMTAgKzc0MSwxMCBAQAogICBncnBjX29wIG9wc1szXTsKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICBzaXplX3Qgbm9wcyA9IDE7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHNfc2xpY2UgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhzdGF0dXNfZGV0YWlscyk7CiAgIG9wc1swXS5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wc1swXS5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IHN0YXR1c19jb2RlOwotICBvcHNbMF0uZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9Ci0gICAgICBncHJfc3RyZHVwKHN0YXR1c19kZXRhaWxzKTsKKyAgb3BzWzBdLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHNfc2xpY2U7CiAgIGdycGNzaGFycF9tZXRhZGF0YV9hcnJheV9tb3ZlKAogICAgICAgJihjdHgtPnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhKSwgdHJhaWxpbmdfbWV0YWRhdGEpOwogICBvcHNbMF0uZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9CkBAIC03NjUsNyArNzU3LDcgQEAKICAgICBvcHNbbm9wc10ub3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKICAgICBjdHgtPnNlbmRfbWVzc2FnZSA9IHN0cmluZ190b19ieXRlX2J1ZmZlcihvcHRpb25hbF9zZW5kX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9zZW5kX2J1ZmZlcl9sZW4pOwotICAgIG9wc1tub3BzXS5kYXRhLnNlbmRfbWVzc2FnZSA9IGN0eC0+c2VuZF9tZXNzYWdlOworICAgIG9wc1tub3BzXS5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSBjdHgtPnNlbmRfbWVzc2FnZTsKICAgICBvcHNbbm9wc10uZmxhZ3MgPSB3cml0ZV9mbGFnczsKICAgICBvcHNbbm9wc10ucmVzZXJ2ZWQgPSBOVUxMOwogICAgIG5vcHMgKys7CkBAIC03ODQsNyArNzc2LDcgQEAKICAgLyogVE9ETzogZG9uJ3QgdXNlIG1hZ2ljIG51bWJlciAqLwogICBncnBjX29wIG9wc1sxXTsKICAgb3BzWzBdLm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wc1swXS5kYXRhLnJlY3ZfbWVzc2FnZSA9ICYoY3R4LT5yZWN2X21lc3NhZ2UpOworICBvcHNbMF0uZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJihjdHgtPnJlY3ZfbWVzc2FnZSk7CiAgIG9wc1swXS5mbGFncyA9IDA7CiAgIG9wc1swXS5yZXNlcnZlZCA9IE5VTEw7CiAgIHJldHVybiBncnBjX2NhbGxfc3RhcnRfYmF0Y2goY2FsbCwgb3BzLCBzaXplb2Yob3BzKSAvIHNpemVvZihvcHNbMF0pLCBjdHgsCmRpZmYgLS1naXQgYS9zcmMvbm9kZS9leHQvYnl0ZV9idWZmZXIuY2MgYi9zcmMvbm9kZS9leHQvYnl0ZV9idWZmZXIuY2MKaW5kZXggZmMzMzlmYy4uN2Q2ZmIxOSAxMDA2NDQKLS0tIGEvc3JjL25vZGUvZXh0L2J5dGVfYnVmZmVyLmNjCisrKyBiL3NyYy9ub2RlL2V4dC9ieXRlX2J1ZmZlci5jYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgImdycGMvc2xpY2UuaCIKIAogI2luY2x1ZGUgImJ5dGVfYnVmZmVyLmgiCisjaW5jbHVkZSAic2xpY2UuaCIKIAogbmFtZXNwYWNlIGdycGMgewogbmFtZXNwYWNlIG5vZGUgewpAQCAtNTQsMTAgKzU1LDcgQEAKIAogZ3JwY19ieXRlX2J1ZmZlciAqQnVmZmVyVG9CeXRlQnVmZmVyKExvY2FsPFZhbHVlPiBidWZmZXIpIHsKICAgTmFuOjpIYW5kbGVTY29wZSBzY29wZTsKLSAgaW50IGxlbmd0aCA9IDo6bm9kZTo6QnVmZmVyOjpMZW5ndGgoYnVmZmVyKTsKLSAgY2hhciAqZGF0YSA9IDo6bm9kZTo6QnVmZmVyOjpEYXRhKGJ1ZmZlcik7Ci0gIGdycGNfc2xpY2Ugc2xpY2UgPSBncnBjX3NsaWNlX21hbGxvYyhsZW5ndGgpOwotICBtZW1jcHkoR1JQQ19TTElDRV9TVEFSVF9QVFIoc2xpY2UpLCBkYXRhLCBsZW5ndGgpOworICBncnBjX3NsaWNlIHNsaWNlID0gQ3JlYXRlU2xpY2VGcm9tQnVmZmVyKGJ1ZmZlcik7CiAgIGdycGNfYnl0ZV9idWZmZXIgKmJ5dGVfYnVmZmVyKGdycGNfcmF3X2J5dGVfYnVmZmVyX2NyZWF0ZSgmc2xpY2UsIDEpKTsKICAgZ3JwY19zbGljZV91bnJlZihzbGljZSk7CiAgIHJldHVybiBieXRlX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL3NyYy9ub2RlL2V4dC9jYWxsLmNjIGIvc3JjL25vZGUvZXh0L2NhbGwuY2MKaW5kZXggMTkxZTc2My4uMjQ0NTQ2ZCAxMDA2NDQKLS0tIGEvc3JjL25vZGUvZXh0L2NhbGwuY2MKKysrIGIvc3JjL25vZGUvZXh0L2NhbGwuY2MKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJjb21wbGV0aW9uX3F1ZXVlLmgiCiAjaW5jbHVkZSAiY29tcGxldGlvbl9xdWV1ZV9hc3luY193b3JrZXIuaCIKICNpbmNsdWRlICJjYWxsX2NyZWRlbnRpYWxzLmgiCisjaW5jbHVkZSAic2xpY2UuaCIKICNpbmNsdWRlICJ0aW1ldmFsLmgiCiAKIHVzaW5nIHN0ZDo6dW5pcXVlX3B0cjsKQEAgLTk2LDggKzk3LDcgQEAKICAgcmV0dXJuIHNjb3BlLkVzY2FwZShlcnIpOwogfQogCi1ib29sIENyZWF0ZU1ldGFkYXRhQXJyYXkoTG9jYWw8T2JqZWN0PiBtZXRhZGF0YSwgZ3JwY19tZXRhZGF0YV9hcnJheSAqYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcykgeworYm9vbCBDcmVhdGVNZXRhZGF0YUFycmF5KExvY2FsPE9iamVjdD4gbWV0YWRhdGEsIGdycGNfbWV0YWRhdGFfYXJyYXkgKmFycmF5KSB7CiAgIEhhbmRsZVNjb3BlIHNjb3BlOwogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoYXJyYXkpOwogICBMb2NhbDxBcnJheT4ga2V5cyA9IE5hbjo6R2V0T3duUHJvcGVydHlOYW1lcyhtZXRhZGF0YSkuVG9Mb2NhbENoZWNrZWQoKTsKQEAgLTExMywzMiArMTEzLDI1IEBACiAgIGFycmF5LT5tZXRhZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z3JwY19tZXRhZGF0YSo+KAogICAgICAgZ3ByX21hbGxvYyhhcnJheS0+Y2FwYWNpdHkgKiBzaXplb2YoZ3JwY19tZXRhZGF0YSkpKTsKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBrZXlzLT5MZW5ndGgoKTsgaSsrKSB7Ci0gICAgTG9jYWw8U3RyaW5nPiBjdXJyZW50X2tleShrZXlzLT5HZXQoaSktPlRvU3RyaW5nKCkpOwotICAgIFV0ZjhTdHJpbmcgKnV0Zjhfa2V5ID0gbmV3IFV0ZjhTdHJpbmcoY3VycmVudF9rZXkpOwotICAgIHJlc291cmNlcy0+c3RyaW5ncy5wdXNoX2JhY2sodW5pcXVlX3B0cjxVdGY4U3RyaW5nPih1dGY4X2tleSkpOworICAgIExvY2FsPFN0cmluZz4gY3VycmVudF9rZXkoTmFuOjpUbzxTdHJpbmc+KGtleXMtPkdldChpKSkuVG9Mb2NhbENoZWNrZWQoKSk7CiAgICAgTG9jYWw8QXJyYXk+IHZhbHVlcyA9IExvY2FsPEFycmF5Pjo6Q2FzdCgKICAgICAgICAgTmFuOjpHZXQobWV0YWRhdGEsIGN1cnJlbnRfa2V5KS5Ub0xvY2FsQ2hlY2tlZCgpKTsKKyAgICBncnBjX3NsaWNlIGtleV9zbGljZSA9IGdycGNfc2xpY2VfaW50ZXJuKENyZWF0ZVNsaWNlRnJvbVN0cmluZyhjdXJyZW50X2tleSkpOwogICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgdmFsdWVzLT5MZW5ndGgoKTsgaisrKSB7CiAgICAgICBMb2NhbDxWYWx1ZT4gdmFsdWUgPSBOYW46OkdldCh2YWx1ZXMsIGopLlRvTG9jYWxDaGVja2VkKCk7CiAgICAgICBncnBjX21ldGFkYXRhICpjdXJyZW50ID0gJmFycmF5LT5tZXRhZGF0YVthcnJheS0+Y291bnRdOwotICAgICAgY3VycmVudC0+a2V5ID0gKip1dGY4X2tleTsKKyAgICAgIGN1cnJlbnQtPmtleSA9IGtleV9zbGljZTsKICAgICAgIC8vIE9ubHkgYWxsb3cgYmluYXJ5IGhlYWRlcnMgZm9yICItYmluIiBrZXlzCi0gICAgICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKGN1cnJlbnQtPmtleSwgc3RybGVuKGN1cnJlbnQtPmtleSkpKSB7CisgICAgICBpZiAoZ3JwY19pc19iaW5hcnlfaGVhZGVyKGtleV9zbGljZSkpIHsKICAgICAgICAgaWYgKDo6bm9kZTo6QnVmZmVyOjpIYXNJbnN0YW5jZSh2YWx1ZSkpIHsKLSAgICAgICAgICBjdXJyZW50LT52YWx1ZSA9IDo6bm9kZTo6QnVmZmVyOjpEYXRhKHZhbHVlKTsKLSAgICAgICAgICBjdXJyZW50LT52YWx1ZV9sZW5ndGggPSA6Om5vZGU6OkJ1ZmZlcjo6TGVuZ3RoKHZhbHVlKTsKLSAgICAgICAgICBQZXJzaXN0ZW50VmFsdWUgKmhhbmRsZSA9IG5ldyBQZXJzaXN0ZW50VmFsdWUodmFsdWUpOwotICAgICAgICAgIHJlc291cmNlcy0+aGFuZGxlcy5wdXNoX2JhY2sodW5pcXVlX3B0cjxQZXJzaXN0ZW50VmFsdWU+KGhhbmRsZSkpOworICAgICAgICAgIGN1cnJlbnQtPnZhbHVlID0gQ3JlYXRlU2xpY2VGcm9tQnVmZmVyKHZhbHVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkgewogICAgICAgICAgIExvY2FsPFN0cmluZz4gc3RyaW5nX3ZhbHVlID0gTmFuOjpUbzxTdHJpbmc+KHZhbHVlKS5Ub0xvY2FsQ2hlY2tlZCgpOwotICAgICAgICAgIFV0ZjhTdHJpbmcgKnV0ZjhfdmFsdWUgPSBuZXcgVXRmOFN0cmluZyhzdHJpbmdfdmFsdWUpOwotICAgICAgICAgIHJlc291cmNlcy0+c3RyaW5ncy5wdXNoX2JhY2sodW5pcXVlX3B0cjxVdGY4U3RyaW5nPih1dGY4X3ZhbHVlKSk7Ci0gICAgICAgICAgY3VycmVudC0+dmFsdWUgPSAqKnV0ZjhfdmFsdWU7Ci0gICAgICAgICAgY3VycmVudC0+dmFsdWVfbGVuZ3RoID0gc3RyaW5nX3ZhbHVlLT5MZW5ndGgoKTsKKyAgICAgICAgICBjdXJyZW50LT52YWx1ZSA9IENyZWF0ZVNsaWNlRnJvbVN0cmluZyhzdHJpbmdfdmFsdWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTUzLDQwICsxNDYsMjUgQEAKICAgRXNjYXBhYmxlSGFuZGxlU2NvcGUgc2NvcGU7CiAgIGdycGNfbWV0YWRhdGEgKm1ldGFkYXRhX2VsZW1lbnRzID0gbWV0YWRhdGFfYXJyYXktPm1ldGFkYXRhOwogICBzaXplX3QgbGVuZ3RoID0gbWV0YWRhdGFfYXJyYXktPmNvdW50OwotICBzdGQ6Om1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiBzaXplX21hcDsKLSAgc3RkOjptYXA8Y29uc3QgY2hhciosIHNpemVfdD4gaW5kZXhfbWFwOwotCi0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICBjb25zdCBjaGFyICprZXkgPSBtZXRhZGF0YV9lbGVtZW50c1tpXS5rZXk7Ci0gICAgaWYgKHNpemVfbWFwLmNvdW50KGtleSkpIHsKLSAgICAgIHNpemVfbWFwW2tleV0gKz0gMTsKLSAgICB9IGVsc2UgewotICAgICAgc2l6ZV9tYXBba2V5XSA9IDE7Ci0gICAgfQotICAgIGluZGV4X21hcFtrZXldID0gMDsKLSAgfQogICBMb2NhbDxPYmplY3Q+IG1ldGFkYXRhX29iamVjdCA9IE5hbjo6TmV3PE9iamVjdD4oKTsKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgIGdycGNfbWV0YWRhdGEqIGVsZW0gPSAmbWV0YWRhdGFfZWxlbWVudHNbaV07Ci0gICAgTG9jYWw8U3RyaW5nPiBrZXlfc3RyaW5nID0gTmFuOjpOZXcoZWxlbS0+a2V5KS5Ub0xvY2FsQ2hlY2tlZCgpOworICAgIC8vIFRPRE8obXVyZ2F0cm9pZDk5KTogVXNlIHplcm8tY29weSBzdHJpbmcgY29uc3RydWN0aW9uIGluc3RlYWQKKyAgICBMb2NhbDxTdHJpbmc+IGtleV9zdHJpbmcgPSBDb3B5U3RyaW5nRnJvbVNsaWNlKGVsZW0tPmtleSk7CiAgICAgTG9jYWw8QXJyYXk+IGFycmF5OwogICAgIE1heWJlTG9jYWw8VmFsdWU+IG1heWJlX2FycmF5ID0gTmFuOjpHZXQobWV0YWRhdGFfb2JqZWN0LCBrZXlfc3RyaW5nKTsKICAgICBpZiAobWF5YmVfYXJyYXkuSXNFbXB0eSgpIHx8ICFtYXliZV9hcnJheS5Ub0xvY2FsQ2hlY2tlZCgpLT5Jc0FycmF5KCkpIHsKLSAgICAgIGFycmF5ID0gTmFuOjpOZXc8QXJyYXk+KHNpemVfbWFwW2VsZW0tPmtleV0pOworICAgICAgYXJyYXkgPSBOYW46Ok5ldzxBcnJheT4oMCk7CiAgICAgICBOYW46OlNldChtZXRhZGF0YV9vYmplY3QsIGtleV9zdHJpbmcsIGFycmF5KTsKICAgICB9IGVsc2UgewogICAgICAgYXJyYXkgPSBMb2NhbDxBcnJheT46OkNhc3QobWF5YmVfYXJyYXkuVG9Mb2NhbENoZWNrZWQoKSk7CiAgICAgfQotICAgIGlmIChncnBjX2lzX2JpbmFyeV9oZWFkZXIoZWxlbS0+a2V5LCBzdHJsZW4oZWxlbS0+a2V5KSkpIHsKLSAgICAgIE5hbjo6U2V0KGFycmF5LCBpbmRleF9tYXBbZWxlbS0+a2V5XSwKLSAgICAgICAgICAgICAgIE1ha2VGYXN0QnVmZmVyKAotICAgICAgICAgICAgICAgICAgIE5hbjo6Q29weUJ1ZmZlcihlbGVtLT52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS0+dmFsdWVfbGVuZ3RoKS5Ub0xvY2FsQ2hlY2tlZCgpKSk7CisgICAgaWYgKGdycGNfaXNfYmluYXJ5X2hlYWRlcihlbGVtLT5rZXkpKSB7CisgICAgICBOYW46OlNldChhcnJheSwgYXJyYXktPkxlbmd0aCgpLCBDcmVhdGVCdWZmZXJGcm9tU2xpY2UoZWxlbS0+dmFsdWUpKTsKICAgICB9IGVsc2UgewotICAgICAgTmFuOjpTZXQoYXJyYXksIGluZGV4X21hcFtlbGVtLT5rZXldLAotICAgICAgICAgICAgICAgTmFuOjpOZXcoZWxlbS0+dmFsdWUpLlRvTG9jYWxDaGVja2VkKCkpOworICAgICAgLy8gVE9ETyhtdXJnYXRyb2lkOTkpOiBVc2UgemVyby1jb3B5IHN0cmluZyBjb25zdHJ1Y3Rpb24gaW5zdGVhZAorICAgICAgTmFuOjpTZXQoYXJyYXksIGFycmF5LT5MZW5ndGgoKSwgQ29weVN0cmluZ0Zyb21TbGljZShlbGVtLT52YWx1ZSkpOwogICAgIH0KLSAgICBpbmRleF9tYXBbZWxlbS0+a2V5XSArPSAxOwogICB9CiAgIHJldHVybiBzY29wZS5Fc2NhcGUobWV0YWRhdGFfb2JqZWN0KTsKIH0KQEAgLTIwNSw4ICsxODMsNyBAQAogICAgIEVzY2FwYWJsZUhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHJldHVybiBzY29wZS5Fc2NhcGUoTmFuOjpUcnVlKCkpOwogICB9Ci0gIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCwKLSAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXMpIHsKKyAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0KSB7CiAgICAgaWYgKCF2YWx1ZS0+SXNPYmplY3QoKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTIxNiw3ICsxOTMsNyBAQAogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIUNyZWF0ZU1ldGFkYXRhQXJyYXkobWF5YmVfbWV0YWRhdGEuVG9Mb2NhbENoZWNrZWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFycmF5LCByZXNvdXJjZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcnJheSkpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgb3V0LT5kYXRhLnNlbmRfaW5pdGlhbF9tZXRhZGF0YS5jb3VudCA9IGFycmF5LmNvdW50OwpAQCAtMjQ2LDggKzIyMyw3IEBACiAgICAgRXNjYXBhYmxlSGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgcmV0dXJuIHNjb3BlLkVzY2FwZShOYW46OlRydWUoKSk7CiAgIH0KLSAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0LAotICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcykgeworICBib29sIFBhcnNlT3AoTG9jYWw8VmFsdWU+IHZhbHVlLCBncnBjX29wICpvdXQpIHsKICAgICBpZiAoITo6bm9kZTo6QnVmZmVyOjpIYXNJbnN0YW5jZSh2YWx1ZSkpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNjIsOSArMjM4LDcgQEAKICAgICAgIH0KICAgICB9CiAgICAgc2VuZF9tZXNzYWdlID0gQnVmZmVyVG9CeXRlQnVmZmVyKHZhbHVlKTsKLSAgICBvdXQtPmRhdGEuc2VuZF9tZXNzYWdlID0gc2VuZF9tZXNzYWdlOwotICAgIFBlcnNpc3RlbnRWYWx1ZSAqaGFuZGxlID0gbmV3IFBlcnNpc3RlbnRWYWx1ZSh2YWx1ZSk7Ci0gICAgcmVzb3VyY2VzLT5oYW5kbGVzLnB1c2hfYmFjayh1bmlxdWVfcHRyPFBlcnNpc3RlbnRWYWx1ZT4oaGFuZGxlKSk7CisgICAgb3V0LT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSBzZW5kX21lc3NhZ2U7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgYm9vbCBJc0ZpbmFsT3AoKSB7CkBAIC0yODQsOCArMjU4LDcgQEAKICAgICBFc2NhcGFibGVIYW5kbGVTY29wZSBzY29wZTsKICAgICByZXR1cm4gc2NvcGUuRXNjYXBlKE5hbjo6VHJ1ZSgpKTsKICAgfQotICBib29sIFBhcnNlT3AoTG9jYWw8VmFsdWU+IHZhbHVlLCBncnBjX29wICpvdXQsCi0gICAgICAgICAgICAgICBzaGFyZWRfcHRyPFJlc291cmNlcz4gcmVzb3VyY2VzKSB7CisgIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCkgewogICAgIHJldHVybiB0cnVlOwogICB9CiAgIGJvb2wgSXNGaW5hbE9wKCkgewpAQCAtMjk5LDEyICsyNzIsMTQgQEAKIAogY2xhc3MgU2VuZFNlcnZlclN0YXR1c09wIDogcHVibGljIE9wIHsKICBwdWJsaWM6CisgIH5TZW5kU2VydmVyU3RhdHVzT3AoKSB7CisgICAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKKyAgfQogICBMb2NhbDxWYWx1ZT4gR2V0Tm9kZVZhbHVlKCkgY29uc3QgewogICAgIEVzY2FwYWJsZUhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHJldHVybiBzY29wZS5Fc2NhcGUoTmFuOjpUcnVlKCkpOwogICB9Ci0gIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCwKLSAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXMpIHsKKyAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0KSB7CiAgICAgaWYgKCF2YWx1ZS0+SXNPYmplY3QoKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTMzOSwxNiArMzE0LDE1IEBACiAgICAgTG9jYWw8U3RyaW5nPiBkZXRhaWxzID0gTmFuOjpUbzxTdHJpbmc+KAogICAgICAgICBtYXliZV9kZXRhaWxzLlRvTG9jYWxDaGVja2VkKCkpLlRvTG9jYWxDaGVja2VkKCk7CiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSBhcnJheTsKLSAgICBpZiAoIUNyZWF0ZU1ldGFkYXRhQXJyYXkobWV0YWRhdGEsICZhcnJheSwgcmVzb3VyY2VzKSkgeworICAgIGlmICghQ3JlYXRlTWV0YWRhdGFBcnJheShtZXRhZGF0YSwgJmFycmF5KSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBvdXQtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSBhcnJheS5jb3VudDsKICAgICBvdXQtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGEgPSBhcnJheS5tZXRhZGF0YTsKICAgICBvdXQtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0KICAgICAgICAgc3RhdGljX2Nhc3Q8Z3JwY19zdGF0dXNfY29kZT4oY29kZSk7Ci0gICAgVXRmOFN0cmluZyAqc3RyID0gbmV3IFV0ZjhTdHJpbmcoZGV0YWlscyk7Ci0gICAgcmVzb3VyY2VzLT5zdHJpbmdzLnB1c2hfYmFjayh1bmlxdWVfcHRyPFV0ZjhTdHJpbmc+KHN0cikpOwotICAgIG91dC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICoqc3RyOworICAgIHRoaXMtPmRldGFpbHMgPSBDcmVhdGVTbGljZUZyb21TdHJpbmcoZGV0YWlscyk7CisgICAgb3V0LT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnRoaXMtPmRldGFpbHM7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgYm9vbCBJc0ZpbmFsT3AoKSB7CkBAIC0zNTgsNiArMzMyLDkgQEAKICAgc3RkOjpzdHJpbmcgR2V0VHlwZVN0cmluZygpIGNvbnN0IHsKICAgICByZXR1cm4gInNlbmRfc3RhdHVzIjsKICAgfQorCisgcHJpdmF0ZToKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogfTsKIAogY2xhc3MgR2V0TWV0YWRhdGFPcCA6IHB1YmxpYyBPcCB7CkBAIC0zNzUsOSArMzUyLDggQEAKICAgICByZXR1cm4gc2NvcGUuRXNjYXBlKFBhcnNlTWV0YWRhdGEoJnJlY3ZfbWV0YWRhdGEpKTsKICAgfQogCi0gIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCwKLSAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXMpIHsKLSAgICBvdXQtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJnJlY3ZfbWV0YWRhdGE7CisgIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCkgeworICAgIG91dC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJnJlY3ZfbWV0YWRhdGE7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgYm9vbCBJc0ZpbmFsT3AoKSB7CkBAIC00MDgsOSArMzg0LDggQEAKICAgICByZXR1cm4gc2NvcGUuRXNjYXBlKEJ5dGVCdWZmZXJUb0J1ZmZlcihyZWN2X21lc3NhZ2UpKTsKICAgfQogCi0gIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCwKLSAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXMpIHsKLSAgICBvdXQtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlY3ZfbWVzc2FnZTsKKyAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0KSB7CisgICAgb3V0LT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVjdl9tZXNzYWdlOwogICAgIHJldHVybiB0cnVlOwogICB9CiAgIGJvb2wgSXNGaW5hbE9wKCkgewpAQCAtNDMwLDIxICs0MDUsMTYgQEAKICBwdWJsaWM6CiAgIENsaWVudFN0YXR1c09wKCkgewogICAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmbWV0YWRhdGFfYXJyYXkpOwotICAgIHN0YXR1c19kZXRhaWxzID0gTlVMTDsKLSAgICBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKICAgfQogCiAgIH5DbGllbnRTdGF0dXNPcCgpIHsKICAgICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJm1ldGFkYXRhX2FycmF5KTsKLSAgICBncHJfZnJlZShzdGF0dXNfZGV0YWlscyk7CiAgIH0KIAotICBib29sIFBhcnNlT3AoTG9jYWw8VmFsdWU+IHZhbHVlLCBncnBjX29wICpvdXQsCi0gICAgICAgICAgICAgICBzaGFyZWRfcHRyPFJlc291cmNlcz4gcmVzb3VyY2VzKSB7CisgIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCkgewogICAgIG91dC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmbWV0YWRhdGFfYXJyYXk7CiAgICAgb3V0LT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICAgIG91dC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7Ci0gICAgb3V0LT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICAgIHJldHVybiB0cnVlOwogICB9CiAKQEAgLTQ1MywxMCArNDIzLDggQEAKICAgICBMb2NhbDxPYmplY3Q+IHN0YXR1c19vYmogPSBOYW46Ok5ldzxPYmplY3Q+KCk7CiAgICAgTmFuOjpTZXQoc3RhdHVzX29iaiwgTmFuOjpOZXcoImNvZGUiKS5Ub0xvY2FsQ2hlY2tlZCgpLAogICAgICAgICAgICAgICAgICAgICBOYW46Ok5ldzxOdW1iZXI+KHN0YXR1cykpOwotICAgIGlmIChzdGF0dXNfZGV0YWlscyAhPSBOVUxMKSB7Ci0gICAgICBOYW46OlNldChzdGF0dXNfb2JqLCBOYW46Ok5ldygiZGV0YWlscyIpLlRvTG9jYWxDaGVja2VkKCksCi0gICAgICAgICAgICAgICBOYW46Ok5ldyhzdGF0dXNfZGV0YWlscykuVG9Mb2NhbENoZWNrZWQoKSk7Ci0gICAgfQorICAgIE5hbjo6U2V0KHN0YXR1c19vYmosIE5hbjo6TmV3KCJkZXRhaWxzIikuVG9Mb2NhbENoZWNrZWQoKSwKKyAgICAgICAgICAgICAgIENvcHlTdHJpbmdGcm9tU2xpY2Uoc3RhdHVzX2RldGFpbHMpKTsKICAgICBOYW46OlNldChzdGF0dXNfb2JqLCBOYW46Ok5ldygibWV0YWRhdGEiKS5Ub0xvY2FsQ2hlY2tlZCgpLAogICAgICAgICAgICAgIFBhcnNlTWV0YWRhdGEoJm1ldGFkYXRhX2FycmF5KSk7CiAgICAgcmV0dXJuIHNjb3BlLkVzY2FwZShzdGF0dXNfb2JqKTsKQEAgLTQ3MSw4ICs0MzksNyBAQAogIHByaXZhdGU6CiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgbWV0YWRhdGFfYXJyYXk7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwotICBjaGFyICpzdGF0dXNfZGV0YWlsczsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHk7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHM7CiB9OwogCiBjbGFzcyBTZXJ2ZXJDbG9zZVJlc3BvbnNlT3AgOiBwdWJsaWMgT3AgewpAQCAtNDgyLDggKzQ0OSw3IEBACiAgICAgcmV0dXJuIHNjb3BlLkVzY2FwZShOYW46Ok5ldzxCb29sZWFuPihjYW5jZWxsZWQpKTsKICAgfQogCi0gIGJvb2wgUGFyc2VPcChMb2NhbDxWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCwKLSAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXMpIHsKKyAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0KSB7CiAgICAgb3V0LT5kYXRhLnJlY3ZfY2xvc2Vfb25fc2VydmVyLmNhbmNlbGxlZCA9ICZjYW5jZWxsZWQ7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KQEAgLTUwMCw5ICs0NjYsOCBAQAogICBpbnQgY2FuY2VsbGVkOwogfTsKIAotdGFnOjp0YWcoQ2FsbGJhY2sgKmNhbGxiYWNrLCBPcFZlYyAqb3BzLAotICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcywgQ2FsbCAqY2FsbCkgOgotICAgIGNhbGxiYWNrKGNhbGxiYWNrKSwgb3BzKG9wcyksIHJlc291cmNlcyhyZXNvdXJjZXMpLCBjYWxsKGNhbGwpewordGFnOjp0YWcoQ2FsbGJhY2sgKmNhbGxiYWNrLCBPcFZlYyAqb3BzLCBDYWxsICpjYWxsKSA6CisgICAgY2FsbGJhY2soY2FsbGJhY2spLCBvcHMob3BzKSwgY2FsbChjYWxsKXsKIH0KIAogdGFnOjp+dGFnKCkgewpAQCAtNjUwLDIwICs2MTUsMjQgQEAKICAgICAgIGlmIChjaGFubmVsLT5HZXRXcmFwcGVkQ2hhbm5lbCgpID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5hbjo6VGhyb3dFcnJvcigiQ2FsbCBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGEgY2xvc2VkIGNoYW5uZWwiKTsKICAgICAgIH0KLSAgICAgIFV0ZjhTdHJpbmcgbWV0aG9kKGluZm9bMV0pOwogICAgICAgZG91YmxlIGRlYWRsaW5lID0gTmFuOjpUbzxkb3VibGU+KGluZm9bMl0pLkZyb21KdXN0KCk7CiAgICAgICBncnBjX2NoYW5uZWwgKndyYXBwZWRfY2hhbm5lbCA9IGNoYW5uZWwtPkdldFdyYXBwZWRDaGFubmVsKCk7CiAgICAgICBncnBjX2NhbGwgKndyYXBwZWRfY2FsbDsKICAgICAgIGlmIChpbmZvWzNdLT5Jc1N0cmluZygpKSB7Ci0gICAgICAgIFV0ZjhTdHJpbmcgaG9zdF9vdmVycmlkZShpbmZvWzNdKTsKKyAgICAgICAgZ3JwY19zbGljZSAqaG9zdCA9IG5ldyBncnBjX3NsaWNlOworICAgICAgICAqaG9zdCA9IENyZWF0ZVNsaWNlRnJvbVN0cmluZygKKyAgICAgICAgICAgIE5hbjo6VG88U3RyaW5nPihpbmZvWzNdKS5Ub0xvY2FsQ2hlY2tlZCgpKTsKICAgICAgICAgd3JhcHBlZF9jYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAogICAgICAgICAgICAgd3JhcHBlZF9jaGFubmVsLCBwYXJlbnRfY2FsbCwgcHJvcGFnYXRlX2ZsYWdzLAotICAgICAgICAgICAgR2V0Q29tcGxldGlvblF1ZXVlKCksICptZXRob2QsCi0gICAgICAgICAgICAqaG9zdF9vdmVycmlkZSwgTWlsbGlzZWNvbmRzVG9UaW1lc3BlYyhkZWFkbGluZSksIE5VTEwpOworICAgICAgICAgICAgR2V0Q29tcGxldGlvblF1ZXVlKCksIENyZWF0ZVNsaWNlRnJvbVN0cmluZygKKyAgICAgICAgICAgICAgICBOYW46OlRvPFN0cmluZz4oaW5mb1sxXSkuVG9Mb2NhbENoZWNrZWQoKSksCisgICAgICAgICAgICBob3N0LCBNaWxsaXNlY29uZHNUb1RpbWVzcGVjKGRlYWRsaW5lKSwgTlVMTCk7CisgICAgICAgIGRlbGV0ZSBob3N0OwogICAgICAgfSBlbHNlIGlmIChpbmZvWzNdLT5Jc1VuZGVmaW5lZCgpIHx8IGluZm9bM10tPklzTnVsbCgpKSB7CiAgICAgICAgIHdyYXBwZWRfY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKICAgICAgICAgICAgIHdyYXBwZWRfY2hhbm5lbCwgcGFyZW50X2NhbGwsIHByb3BhZ2F0ZV9mbGFncywKLSAgICAgICAgICAgIEdldENvbXBsZXRpb25RdWV1ZSgpLCAqbWV0aG9kLAorICAgICAgICAgICAgR2V0Q29tcGxldGlvblF1ZXVlKCksIENyZWF0ZVNsaWNlRnJvbVN0cmluZygKKyAgICAgICAgICAgICAgICBOYW46OlRvPFN0cmluZz4oaW5mb1sxXSkuVG9Mb2NhbENoZWNrZWQoKSksCiAgICAgICAgICAgICBOVUxMLCBNaWxsaXNlY29uZHNUb1RpbWVzcGVjKGRlYWRsaW5lKSwgTlVMTCk7CiAgICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gTmFuOjpUaHJvd1R5cGVFcnJvcigiQ2FsbCdzIGZvdXJ0aCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7CkBAIC03MDAsNyArNjY5LDYgQEAKICAgfQogICBMb2NhbDxGdW5jdGlvbj4gY2FsbGJhY2tfZnVuYyA9IGluZm9bMV0uQXM8RnVuY3Rpb24+KCk7CiAgIENhbGwgKmNhbGwgPSBPYmplY3RXcmFwOjpVbndyYXA8Q2FsbD4oaW5mby5UaGlzKCkpOwotICBzaGFyZWRfcHRyPFJlc291cmNlcz4gcmVzb3VyY2VzKG5ldyBSZXNvdXJjZXMpOwogICBMb2NhbDxPYmplY3Q+IG9iaiA9IE5hbjo6VG88T2JqZWN0PihpbmZvWzBdKS5Ub0xvY2FsQ2hlY2tlZCgpOwogICBMb2NhbDxBcnJheT4ga2V5cyA9IE5hbjo6R2V0T3duUHJvcGVydHlOYW1lcyhvYmopLlRvTG9jYWxDaGVja2VkKCk7CiAgIHNpemVfdCBub3BzID0ga2V5cy0+TGVuZ3RoKCk7CkBAIC03NDUsNyArNzEzLDcgQEAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOYW46OlRocm93RXJyb3IoIkFyZ3VtZW50IG9iamVjdCBoYWQgYW4gdW5yZWNvZ25pemVkIGtleSIpOwogICAgIH0KLSAgICBpZiAoIW9wLT5QYXJzZU9wKG9iai0+R2V0KHR5cGUpLCAmb3BzW2ldLCByZXNvdXJjZXMpKSB7CisgICAgaWYgKCFvcC0+UGFyc2VPcChvYmotPkdldCh0eXBlKSwgJm9wc1tpXSkpIHsKICAgICAgIHJldHVybiBOYW46OlRocm93VHlwZUVycm9yKCJJbmNvcnJlY3RseSB0eXBlZCBhcmd1bWVudHMgdG8gc3RhcnRCYXRjaCIpOwogICAgIH0KICAgICBvcF92ZWN0b3ItPnB1c2hfYmFjayhzdGQ6Om1vdmUob3ApKTsKQEAgLTc1Myw3ICs3MjEsNyBAQAogICBDYWxsYmFjayAqY2FsbGJhY2sgPSBuZXcgQ2FsbGJhY2soY2FsbGJhY2tfZnVuYyk7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvciA9IGdycGNfY2FsbF9zdGFydF9iYXRjaCgKICAgICAgIGNhbGwtPndyYXBwZWRfY2FsbCwgJm9wc1swXSwgbm9wcywgbmV3IHN0cnVjdCB0YWcoCi0gICAgICAgICAgY2FsbGJhY2ssIG9wX3ZlY3Rvci5yZWxlYXNlKCksIHJlc291cmNlcywgY2FsbCksIE5VTEwpOworICAgICAgICAgIGNhbGxiYWNrLCBvcF92ZWN0b3IucmVsZWFzZSgpLCBjYWxsKSwgTlVMTCk7CiAgIGlmIChlcnJvciAhPSBHUlBDX0NBTExfT0spIHsKICAgICByZXR1cm4gTmFuOjpUaHJvd0Vycm9yKG5hbkVycm9yV2l0aENvZGUoInN0YXJ0QmF0Y2ggZmFpbGVkIiwgZXJyb3IpKTsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL25vZGUvZXh0L2NhbGwuaCBiL3NyYy9ub2RlL2V4dC9jYWxsLmgKaW5kZXggMzFjNjU2Ni4uY2ZmZmYwMCAxMDA2NDQKLS0tIGEvc3JjL25vZGUvZXh0L2NhbGwuaAorKysgYi9zcmMvbm9kZS9leHQvY2FsbC5oCkBAIC01MSwyMCArNTEsMTIgQEAKIHVzaW5nIHN0ZDo6dW5pcXVlX3B0cjsKIHVzaW5nIHN0ZDo6c2hhcmVkX3B0cjsKIAotdHlwZWRlZiBOYW46OlBlcnNpc3RlbnQ8djg6OlZhbHVlLCBOYW46OkNvcHlhYmxlUGVyc2lzdGVudFRyYWl0czx2ODo6VmFsdWU+PiBQZXJzaXN0ZW50VmFsdWU7Ci0KIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG5hbkVycm9yV2l0aENvZGUoY29uc3QgY2hhciAqbXNnLCBncnBjX2NhbGxfZXJyb3IgY29kZSk7CiAKIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFBhcnNlTWV0YWRhdGEoY29uc3QgZ3JwY19tZXRhZGF0YV9hcnJheSAqbWV0YWRhdGFfYXJyYXkpOwogCi1zdHJ1Y3QgUmVzb3VyY2VzIHsKLSAgc3RkOjp2ZWN0b3I8dW5pcXVlX3B0cjxOYW46OlV0ZjhTdHJpbmc+ID4gc3RyaW5nczsKLSAgc3RkOjp2ZWN0b3I8dW5pcXVlX3B0cjxQZXJzaXN0ZW50VmFsdWU+ID4gaGFuZGxlczsKLX07Ci0KIGJvb2wgQ3JlYXRlTWV0YWRhdGFBcnJheSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gbWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSAqYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSAqYXJyYXkpOwogCiAvKiBXcmFwcGVyIGNsYXNzIGZvciBncnBjX2NhbGwgc3RydWN0cy4gKi8KIGNsYXNzIENhbGwgOiBwdWJsaWMgTmFuOjpPYmplY3RXcmFwIHsKQEAgLTEwNiw4ICs5OCw3IEBACiBjbGFzcyBPcCB7CiAgcHVibGljOgogICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IEdldE5vZGVWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgdmlydHVhbCBib29sIFBhcnNlT3Aodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGdycGNfb3AgKm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcykgPSAwOworICB2aXJ0dWFsIGJvb2wgUGFyc2VPcCh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0KSA9IDA7CiAgIHZpcnR1YWwgfk9wKCk7CiAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IEdldE9wVHlwZSgpIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgSXNGaW5hbE9wKCkgPSAwOwpAQCAtMTE4LDEyICsxMDksMTAgQEAKIAogdHlwZWRlZiBzdGQ6OnZlY3Rvcjx1bmlxdWVfcHRyPE9wPj4gT3BWZWM7CiBzdHJ1Y3QgdGFnIHsKLSAgdGFnKE5hbjo6Q2FsbGJhY2sgKmNhbGxiYWNrLCBPcFZlYyAqb3BzLAotICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcywgQ2FsbCAqY2FsbCk7CisgIHRhZyhOYW46OkNhbGxiYWNrICpjYWxsYmFjaywgT3BWZWMgKm9wcywgQ2FsbCAqY2FsbCk7CiAgIH50YWcoKTsKICAgTmFuOjpDYWxsYmFjayAqY2FsbGJhY2s7CiAgIE9wVmVjICpvcHM7Ci0gIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXM7CiAgIENhbGwgKmNhbGw7CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvbm9kZS9leHQvY2FsbF9jcmVkZW50aWFscy5jYyBiL3NyYy9ub2RlL2V4dC9jYWxsX2NyZWRlbnRpYWxzLmNjCmluZGV4IDQxZjZjMjkuLmFmY2MzNjMgMTAwNjQ0Ci0tLSBhL3NyYy9ub2RlL2V4dC9jYWxsX2NyZWRlbnRpYWxzLmNjCisrKyBiL3NyYy9ub2RlL2V4dC9jYWxsX2NyZWRlbnRpYWxzLmNjCkBAIC0yMDYsNyArMjA2LDYgQEAKICAgICByZXR1cm4gTmFuOjpUaHJvd1R5cGVFcnJvcigKICAgICAgICAgIlRoZSBjYWxsYmFjaydzIGZvdXJ0aCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCIpOwogICB9Ci0gIHNoYXJlZF9wdHI8UmVzb3VyY2VzPiByZXNvdXJjZXMobmV3IFJlc291cmNlcyk7CiAgIGdycGNfc3RhdHVzX2NvZGUgY29kZSA9IHN0YXRpY19jYXN0PGdycGNfc3RhdHVzX2NvZGU+KAogICAgICAgTmFuOjpUbzx1aW50MzJfdD4oaW5mb1swXSkuRnJvbUp1c3QoKSk7CiAgIFV0ZjhTdHJpbmcgZGV0YWlsc191dGY4X3N0cihpbmZvWzFdKTsKQEAgLTIxNCw3ICsyMTMsNyBAQAogICBncnBjX21ldGFkYXRhX2FycmF5IGFycmF5OwogICBMb2NhbDxPYmplY3Q+IGNhbGxiYWNrX2RhdGEgPSBOYW46OlRvPE9iamVjdD4oaW5mb1szXSkuVG9Mb2NhbENoZWNrZWQoKTsKICAgaWYgKCFDcmVhdGVNZXRhZGF0YUFycmF5KE5hbjo6VG88T2JqZWN0PihpbmZvWzJdKS5Ub0xvY2FsQ2hlY2tlZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFycmF5LCByZXNvdXJjZXMpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcnJheSkpewogICAgIHJldHVybiBOYW46OlRocm93RXJyb3IoIkZhaWxlZCB0byBwYXJzZSBtZXRhZGF0YSIpOwogICB9CiAgIGdycGNfY3JlZGVudGlhbHNfcGx1Z2luX21ldGFkYXRhX2NiIGNiID0KZGlmZiAtLWdpdCBhL3NyYy9ub2RlL2V4dC9jaGFubmVsLmNjIGIvc3JjL25vZGUvZXh0L2NoYW5uZWwuY2MKaW5kZXggNWJjNThiOS4uYzc5NWZmNyAxMDA2NDQKLS0tIGEvc3JjL25vZGUvZXh0L2NoYW5uZWwuY2MKKysrIGIvc3JjL25vZGUvZXh0L2NoYW5uZWwuY2MKQEAgLTI4MCw4ICsyODAsNyBAQAogICAgICAgY2hhbm5lbC0+d3JhcHBlZF9jaGFubmVsLCBsYXN0X3N0YXRlLCBNaWxsaXNlY29uZHNUb1RpbWVzcGVjKGRlYWRsaW5lKSwKICAgICAgIEdldENvbXBsZXRpb25RdWV1ZSgpLAogICAgICAgbmV3IHN0cnVjdCB0YWcoY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICBvcHMucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+KG51bGxwdHIpLCBOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgICBvcHMucmVsZWFzZSgpLCBOVUxMKSk7CiAgIENvbXBsZXRpb25RdWV1ZU5leHQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL25vZGUvZXh0L25vZGVfZ3JwYy5jYyBiL3NyYy9ub2RlL2V4dC9ub2RlX2dycGMuY2MKaW5kZXggNjE0ZjJlOS4uOTVlMjczZiAxMDA2NDQKLS0tIGEvc3JjL25vZGUvZXh0L25vZGVfZ3JwYy5jYworKysgYi9zcmMvbm9kZS9leHQvbm9kZV9ncnBjLmNjCkBAIC01Niw5ICs1NiwxMiBAQAogI2luY2x1ZGUgInNlcnZlci5oIgogI2luY2x1ZGUgImNvbXBsZXRpb25fcXVldWVfYXN5bmNfd29ya2VyLmgiCiAjaW5jbHVkZSAic2VydmVyX2NyZWRlbnRpYWxzLmgiCisjaW5jbHVkZSAic2xpY2UuaCIKICNpbmNsdWRlICJ0aW1ldmFsLmgiCiAjaW5jbHVkZSAiY29tcGxldGlvbl9xdWV1ZS5oIgogCit1c2luZyBncnBjOjpub2RlOjpDcmVhdGVTbGljZUZyb21TdHJpbmc7CisKIHVzaW5nIHY4OjpGdW5jdGlvblRlbXBsYXRlOwogdXNpbmcgdjg6OkxvY2FsOwogdXNpbmcgdjg6OlZhbHVlOwpAQCAtMjgzLDEwICsyODYsOCBAQAogICAgICAgICAiaGVhZGVyS2V5SXNMZWdhbCdzIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTsKICAgfQogICBMb2NhbDxTdHJpbmc+IGtleSA9IE5hbjo6VG88U3RyaW5nPihpbmZvWzBdKS5Ub0xvY2FsQ2hlY2tlZCgpOwotICBOYW46OlV0ZjhTdHJpbmcga2V5X3V0Zjhfc3RyKGtleSk7Ci0gIGNoYXIgKmtleV9zdHIgPSAqa2V5X3V0Zjhfc3RyOwogICBpbmZvLkdldFJldHVyblZhbHVlKCkuU2V0KHN0YXRpY19jYXN0PGJvb2w+KAotICAgICAgZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsKGtleV9zdHIsIHN0YXRpY19jYXN0PHNpemVfdD4oa2V5LT5MZW5ndGgoKSkpKSk7CisgICAgICBncnBjX2hlYWRlcl9rZXlfaXNfbGVnYWwoQ3JlYXRlU2xpY2VGcm9tU3RyaW5nKGtleSkpKSk7CiB9CiAKIE5BTl9NRVRIT0QoTWV0YWRhdGFOb25iaW5WYWx1ZUlzTGVnYWwpIHsKQEAgLTI5NSwxMSArMjk2LDggQEAKICAgICAgICAgIm1ldGFkYXRhTm9uYmluVmFsdWVJc0xlZ2FsJ3MgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOwogICB9CiAgIExvY2FsPFN0cmluZz4gdmFsdWUgPSBOYW46OlRvPFN0cmluZz4oaW5mb1swXSkuVG9Mb2NhbENoZWNrZWQoKTsKLSAgTmFuOjpVdGY4U3RyaW5nIHZhbHVlX3V0Zjhfc3RyKHZhbHVlKTsKLSAgY2hhciAqdmFsdWVfc3RyID0gKnZhbHVlX3V0Zjhfc3RyOwogICBpbmZvLkdldFJldHVyblZhbHVlKCkuU2V0KHN0YXRpY19jYXN0PGJvb2w+KAotICAgICAgZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsKAotICAgICAgICAgIHZhbHVlX3N0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZS0+TGVuZ3RoKCkpKSkpOworICAgICAgZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsKENyZWF0ZVNsaWNlRnJvbVN0cmluZyh2YWx1ZSkpKSk7CiB9CiAKIE5BTl9NRVRIT0QoTWV0YWRhdGFLZXlJc0JpbmFyeSkgewpAQCAtMzA4LDEwICszMDYsOCBAQAogICAgICAgICAibWV0YWRhdGFLZXlJc0xlZ2FsJ3MgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOwogICB9CiAgIExvY2FsPFN0cmluZz4ga2V5ID0gTmFuOjpUbzxTdHJpbmc+KGluZm9bMF0pLlRvTG9jYWxDaGVja2VkKCk7Ci0gIE5hbjo6VXRmOFN0cmluZyBrZXlfdXRmOF9zdHIoa2V5KTsKLSAgY2hhciAqa2V5X3N0ciA9ICprZXlfdXRmOF9zdHI7CiAgIGluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQoc3RhdGljX2Nhc3Q8Ym9vbD4oCi0gICAgICBncnBjX2lzX2JpbmFyeV9oZWFkZXIoa2V5X3N0ciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihrZXktPkxlbmd0aCgpKSkpKTsKKyAgICAgIGdycGNfaXNfYmluYXJ5X2hlYWRlcihDcmVhdGVTbGljZUZyb21TdHJpbmcoa2V5KSkpKTsKIH0KIAogc3RhdGljIGdycGNfc3NsX3Jvb3RzX292ZXJyaWRlX3Jlc3VsdCBnZXRfc3NsX3Jvb3RzX292ZXJyaWRlKApkaWZmIC0tZ2l0IGEvc3JjL25vZGUvZXh0L3NlcnZlci5jYyBiL3NyYy9ub2RlL2V4dC9zZXJ2ZXIuY2MKaW5kZXggNzBkNWI5Ni4uNDc2MWIyOCAxMDA2NDQKLS0tIGEvc3JjL25vZGUvZXh0L3NlcnZlci5jYworKysgYi9zcmMvbm9kZS9leHQvc2VydmVyLmNjCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiZ3JwYy9ncnBjX3NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiZ3JwYy9zdXBwb3J0L2xvZy5oIgogI2luY2x1ZGUgInNlcnZlcl9jcmVkZW50aWFscy5oIgorI2luY2x1ZGUgInNsaWNlLmgiCiAjaW5jbHVkZSAidGltZXZhbC5oIgogCiBuYW1lc3BhY2UgZ3JwYyB7CkBAIC05OSwxMCArMTAwLDExIEBACiAgICAgfQogICAgIExvY2FsPE9iamVjdD4gb2JqID0gTmFuOjpOZXc8T2JqZWN0PigpOwogICAgIE5hbjo6U2V0KG9iaiwgTmFuOjpOZXcoImNhbGwiKS5Ub0xvY2FsQ2hlY2tlZCgpLCBDYWxsOjpXcmFwU3RydWN0KGNhbGwpKTsKKyAgICAvLyBUT0RPKG11cmdhdHJvaWQ5OSk6IFVzZSB6ZXJvLWNvcHkgc3RyaW5nIGNvbnN0cnVjdGlvbiBpbnN0ZWFkCiAgICAgTmFuOjpTZXQob2JqLCBOYW46Ok5ldygibWV0aG9kIikuVG9Mb2NhbENoZWNrZWQoKSwKLSAgICAgICAgICAgICBOYW46Ok5ldyhkZXRhaWxzLm1ldGhvZCkuVG9Mb2NhbENoZWNrZWQoKSk7CisgICAgICAgICAgICAgQ29weVN0cmluZ0Zyb21TbGljZShkZXRhaWxzLm1ldGhvZCkpOwogICAgIE5hbjo6U2V0KG9iaiwgTmFuOjpOZXcoImhvc3QiKS5Ub0xvY2FsQ2hlY2tlZCgpLAotICAgICAgICAgICAgIE5hbjo6TmV3KGRldGFpbHMuaG9zdCkuVG9Mb2NhbENoZWNrZWQoKSk7CisgICAgICAgICAgICAgQ29weVN0cmluZ0Zyb21TbGljZShkZXRhaWxzLmhvc3QpKTsKICAgICBOYW46OlNldChvYmosIE5hbjo6TmV3KCJkZWFkbGluZSIpLlRvTG9jYWxDaGVja2VkKCksCiAgICAgICAgICAgICAgTmFuOjpOZXc8RGF0ZT4oVGltZXNwZWNUb01pbGxpc2Vjb25kcyhkZXRhaWxzLmRlYWRsaW5lKSkKICAgICAgICAgICAgICAgICAgLlRvTG9jYWxDaGVja2VkKCkpOwpAQCAtMTExLDggKzExMyw3IEBACiAgICAgcmV0dXJuIHNjb3BlLkVzY2FwZShvYmopOwogICB9CiAKLSAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0LAotICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcykgeworICBib29sIFBhcnNlT3AoTG9jYWw8VmFsdWU+IHZhbHVlLCBncnBjX29wICpvdXQpIHsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICBib29sIElzRmluYWxPcCgpIHsKQEAgLTEzOSw4ICsxNDAsNyBAQAogICAgIHJldHVybiBOYW46Ok5ldzxFeHRlcm5hbD4ocmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KHNlcnZlcikpOwogICB9CiAKLSAgYm9vbCBQYXJzZU9wKExvY2FsPFZhbHVlPiB2YWx1ZSwgZ3JwY19vcCAqb3V0LAotICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+IHJlc291cmNlcykgeworICBib29sIFBhcnNlT3AoTG9jYWw8VmFsdWU+IHZhbHVlLCBncnBjX29wICpvdXQpIHsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogICBib29sIElzRmluYWxPcCgpIHsKQEAgLTIwNyw4ICsyMDcsNyBAQAogCiAgICAgZ3JwY19zZXJ2ZXJfc2h1dGRvd25fYW5kX25vdGlmeSgKICAgICAgICAgdGhpcy0+d3JhcHBlZF9zZXJ2ZXIsIEdldENvbXBsZXRpb25RdWV1ZSgpLAotICAgICAgICBuZXcgc3RydWN0IHRhZyhuZXcgQ2FsbGJhY2soKipzaHV0ZG93bl9jYWxsYmFjayksIG9wcy5yZWxlYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPihudWxscHRyKSwgTlVMTCkpOworICAgICAgICBuZXcgc3RydWN0IHRhZyhuZXcgQ2FsbGJhY2soKipzaHV0ZG93bl9jYWxsYmFjayksIG9wcy5yZWxlYXNlKCksIE5VTEwpKTsKICAgICBncnBjX3NlcnZlcl9jYW5jZWxfYWxsX2NhbGxzKHRoaXMtPndyYXBwZWRfc2VydmVyKTsKICAgICBDb21wbGV0aW9uUXVldWVOZXh0KCk7CiAgICAgdGhpcy0+d3JhcHBlZF9zZXJ2ZXIgPSBOVUxMOwpAQCAtMjYxLDcgKzI2MCw3IEBACiAgICAgICBHZXRDb21wbGV0aW9uUXVldWUoKSwKICAgICAgIEdldENvbXBsZXRpb25RdWV1ZSgpLAogICAgICAgbmV3IHN0cnVjdCB0YWcobmV3IENhbGxiYWNrKGluZm9bMF0uQXM8RnVuY3Rpb24+KCkpLCBvcHMucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX3B0cjxSZXNvdXJjZXM+KG51bGxwdHIpLCBOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7CiAgIGlmIChlcnJvciAhPSBHUlBDX0NBTExfT0spIHsKICAgICByZXR1cm4gTmFuOjpUaHJvd0Vycm9yKG5hbkVycm9yV2l0aENvZGUoInJlcXVlc3RDYWxsIGZhaWxlZCIsIGVycm9yKSk7CiAgIH0KQEAgLTMxNCw3ICszMTMsNyBAQAogICBncnBjX3NlcnZlcl9zaHV0ZG93bl9hbmRfbm90aWZ5KAogICAgICAgc2VydmVyLT53cmFwcGVkX3NlcnZlciwgR2V0Q29tcGxldGlvblF1ZXVlKCksCiAgICAgICBuZXcgc3RydWN0IHRhZyhuZXcgTmFuOjpDYWxsYmFjayhpbmZvWzBdLkFzPEZ1bmN0aW9uPigpKSwgb3BzLnJlbGVhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9wdHI8UmVzb3VyY2VzPihudWxscHRyKSwgTlVMTCkpOworICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOwogICBDb21wbGV0aW9uUXVldWVOZXh0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9ub2RlL2V4dC9zbGljZS5jYyBiL3NyYy9ub2RlL2V4dC9zbGljZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGE4MGIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25vZGUvZXh0L3NsaWNlLmNjCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICoKKyAqIENvcHlyaWdodCAyMDE2LCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPG5vZGUuaD4KKyNpbmNsdWRlIDxuYW4uaD4KKyNpbmNsdWRlIDxncnBjL3NsaWNlLmg+CisjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2FsbG9jLmg+CisKKyNpbmNsdWRlICJzbGljZS5oIgorI2luY2x1ZGUgImJ5dGVfYnVmZmVyLmgiCisKK25hbWVzcGFjZSBncnBjIHsKK25hbWVzcGFjZSBub2RlIHsKKwordXNpbmcgTmFuOjpQZXJzaXN0ZW50OworCit1c2luZyB2ODo6TG9jYWw7Cit1c2luZyB2ODo6U3RyaW5nOwordXNpbmcgdjg6OlZhbHVlOworCituYW1lc3BhY2Ugewordm9pZCBTbGljZUZyZWVDYWxsYmFjayhjaGFyICpkYXRhLCB2b2lkICpoaW50KSB7CisgIGdycGNfc2xpY2UgKnNsaWNlID0gcmVpbnRlcnByZXRfY2FzdDxncnBjX3NsaWNlKj4oaGludCk7CisgIGdycGNfc2xpY2VfdW5yZWYoKnNsaWNlKTsKKyAgZGVsZXRlIHNsaWNlOworfQorCit2b2lkIHN0cmluZ19kZXN0cm95X2Z1bmModm9pZCAqdXNlcl9kYXRhKSB7CisgIGRlbGV0ZSByZWludGVycHJldF9jYXN0PE5hbjo6VXRmOFN0cmluZyo+KHVzZXJfZGF0YSk7Cit9CisKK3ZvaWQgYnVmZmVyX2Rlc3Ryb3lfZnVuYyh2b2lkICp1c2VyX2RhdGEpIHsKKyAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8UGVyc2lzdGVudFZhbHVlKj4odXNlcl9kYXRhKTsKK30KK30gLy8gbmFtZXNwYWNlCisKK2dycGNfc2xpY2UgQ3JlYXRlU2xpY2VGcm9tU3RyaW5nKGNvbnN0IExvY2FsPFN0cmluZz4gc291cmNlKSB7CisgIE5hbjo6SGFuZGxlU2NvcGUgc2NvcGU7CisgIE5hbjo6VXRmOFN0cmluZyAqdXRmOF92YWx1ZSA9IG5ldyBOYW46OlV0ZjhTdHJpbmcoc291cmNlKTsKKyAgcmV0dXJuIGdycGNfc2xpY2VfbmV3X3dpdGhfdXNlcl9kYXRhKCoqdXRmOF92YWx1ZSwgc291cmNlLT5MZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19kZXN0cm95X2Z1bmMsIHV0ZjhfdmFsdWUpOworfQorCitncnBjX3NsaWNlIENyZWF0ZVNsaWNlRnJvbUJ1ZmZlcihjb25zdCBMb2NhbDxWYWx1ZT4gc291cmNlKSB7CisgIC8vIFByZXJlcXVpc2l0ZTogOjpub2RlOjpCdWZmZXI6Okhhc0luc3RhbmNlKHNvdXJjZSkKKyAgTmFuOjpIYW5kbGVTY29wZSBzY29wZTsKKyAgcmV0dXJuIGdycGNfc2xpY2VfbmV3X3dpdGhfdXNlcl9kYXRhKDo6bm9kZTo6QnVmZmVyOjpEYXRhKHNvdXJjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Om5vZGU6OkJ1ZmZlcjo6TGVuZ3RoKHNvdXJjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfZGVzdHJveV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBlcnNpc3RlbnRWYWx1ZShzb3VyY2UpKTsKK30KK0xvY2FsPFN0cmluZz4gQ29weVN0cmluZ0Zyb21TbGljZShjb25zdCBncnBjX3NsaWNlIHNsaWNlKSB7CisgIE5hbjo6RXNjYXBhYmxlSGFuZGxlU2NvcGUgc2NvcGU7CisgIGlmIChHUlBDX1NMSUNFX0xFTkdUSChzbGljZSkgPT0gMCkgeworICAgIHJldHVybiBzY29wZS5Fc2NhcGUoTmFuOjpFbXB0eVN0cmluZygpKTsKKyAgfQorICByZXR1cm4gc2NvcGUuRXNjYXBlKE5hbjo6TmV3PFN0cmluZz4oCisgICAgICBjb25zdF9jYXN0PGNoYXIgKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KEdSUENfU0xJQ0VfU1RBUlRfUFRSKHNsaWNlKSkpLAorICAgICAgR1JQQ19TTElDRV9MRU5HVEgoc2xpY2UpKS5Ub0xvY2FsQ2hlY2tlZCgpKTsKK30KKworTG9jYWw8VmFsdWU+IENyZWF0ZUJ1ZmZlckZyb21TbGljZShjb25zdCBncnBjX3NsaWNlIHNsaWNlKSB7CisgIE5hbjo6RXNjYXBhYmxlSGFuZGxlU2NvcGUgc2NvcGU7CisgIGdycGNfc2xpY2UgKnNsaWNlX3B0ciA9IG5ldyBncnBjX3NsaWNlOworICAqc2xpY2VfcHRyID0gZ3JwY19zbGljZV9yZWYoc2xpY2UpOworICByZXR1cm4gc2NvcGUuRXNjYXBlKE1ha2VGYXN0QnVmZmVyKE5hbjo6TmV3QnVmZmVyKAorICAgICAgY29uc3RfY2FzdDxjaGFyICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihHUlBDX1NMSUNFX1NUQVJUX1BUUigqc2xpY2VfcHRyKSkpLAorICAgICAgR1JQQ19TTElDRV9MRU5HVEgoKnNsaWNlX3B0ciksIFNsaWNlRnJlZUNhbGxiYWNrLCBzbGljZV9wdHIpLlRvTG9jYWxDaGVja2VkKCkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIG5vZGUKK30gIC8vIG5hbWVzcGFjZSBncnBjCmRpZmYgLS1naXQgYS9zcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCBiL3NyYy9ub2RlL2V4dC9zbGljZS5oCnNpbWlsYXJpdHkgaW5kZXggNjQlCmNvcHkgZnJvbSBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaApjb3B5IHRvIHNyYy9ub2RlL2V4dC9zbGljZS5oCmluZGV4IDk1M2JjOWYuLjdkY2IxYmQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oCisrKyBiL3NyYy9ub2RlL2V4dC9zbGljZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBDb3B5cmlnaHQgMjAxNSwgR29vZ2xlIEluYy4KKyAqIENvcHlyaWdodCAyMDE2LCBHb29nbGUgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMxLDIwICszMSwyMiBAQAogICoKICAqLwogCi0jaWZuZGVmIEdSUENfQ09SRV9FWFRfVFJBTlNQT1JUX0NIVFRQMl9UUkFOU1BPUlRfU1RBVFVTX0NPTlZFUlNJT05fSAotI2RlZmluZSBHUlBDX0NPUkVfRVhUX1RSQU5TUE9SVF9DSFRUUDJfVFJBTlNQT1JUX1NUQVRVU19DT05WRVJTSU9OX0gKKyNpbmNsdWRlIDxub2RlLmg+CisjaW5jbHVkZSA8bmFuLmg+CisjaW5jbHVkZSA8Z3JwYy9zbGljZS5oPgogCi0jaW5jbHVkZSA8Z3JwYy9ncnBjLmg+Ci0jaW5jbHVkZSAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIgorbmFtZXNwYWNlIGdycGMgeworbmFtZXNwYWNlIG5vZGUgewogCi0vKiBDb252ZXJzaW9uIG9mIGdycGMgc3RhdHVzIGNvZGVzIHRvIGh0dHAyIGVycm9yIGNvZGVzIChmb3IgUlNUX1NUUkVBTSkgKi8KLWdycGNfY2h0dHAyX2Vycm9yX2NvZGUgZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfZXJyb3IoCi0gICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpOwotZ3JwY19zdGF0dXNfY29kZSBncnBjX2NodHRwMl9odHRwMl9lcnJvcl90b19ncnBjX3N0YXR1cygKLSAgICBncnBjX2NodHRwMl9lcnJvcl9jb2RlIGVycm9yLCBncHJfdGltZXNwZWMgZGVhZGxpbmUpOwordHlwZWRlZiBOYW46OlBlcnNpc3RlbnQ8djg6OlZhbHVlLCBOYW46OkNvcHlhYmxlUGVyc2lzdGVudFRyYWl0czx2ODo6VmFsdWU+PiBQZXJzaXN0ZW50VmFsdWU7CiAKLS8qIENvbnZlcnNpb24gb2YgSFRUUCBzdGF0dXMgY29kZXMgKDpzdGF0dXMpIHRvIGdycGMgc3RhdHVzIGNvZGVzICovCi1ncnBjX3N0YXR1c19jb2RlIGdycGNfY2h0dHAyX2h0dHAyX3N0YXR1c190b19ncnBjX3N0YXR1cyhpbnQgc3RhdHVzKTsKLWludCBncnBjX2NodHRwMl9ncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMpOworZ3JwY19zbGljZSBDcmVhdGVTbGljZUZyb21TdHJpbmcoY29uc3Qgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHNvdXJjZSk7CiAKLSNlbmRpZiAvKiBHUlBDX0NPUkVfRVhUX1RSQU5TUE9SVF9DSFRUUDJfVFJBTlNQT1JUX1NUQVRVU19DT05WRVJTSU9OX0ggKi8KK2dycGNfc2xpY2UgQ3JlYXRlU2xpY2VGcm9tQnVmZmVyKGNvbnN0IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHNvdXJjZSk7CisKK3Y4OjpMb2NhbDx2ODo6U3RyaW5nPiBDb3B5U3RyaW5nRnJvbVNsaWNlKGNvbnN0IGdycGNfc2xpY2Ugc2xpY2UpOworCit2ODo6TG9jYWw8djg6OlZhbHVlPiBDcmVhdGVCdWZmZXJGcm9tU2xpY2UoY29uc3QgZ3JwY19zbGljZSBzbGljZSk7CisKK30gIC8vIG5hbWVzcGFjZSBub2RlCit9ICAvLyBuYW1lc3BhY2UgZ3JwYwpkaWZmIC0tZ2l0IGEvc3JjL29iamVjdGl2ZS1jL0dSUENDbGllbnQvcHJpdmF0ZS9HUlBDQ2hhbm5lbC5tIGIvc3JjL29iamVjdGl2ZS1jL0dSUENDbGllbnQvcHJpdmF0ZS9HUlBDQ2hhbm5lbC5tCmluZGV4IDIzOTdjOTIuLmM1MzNjNWEgMTAwNjQ0Ci0tLSBhL3NyYy9vYmplY3RpdmUtYy9HUlBDQ2xpZW50L3ByaXZhdGUvR1JQQ0NoYW5uZWwubQorKysgYi9zcmMvb2JqZWN0aXZlLWMvR1JQQ0NsaWVudC9wcml2YXRlL0dSUENDaGFubmVsLm0KQEAgLTIwMCw3ICsyMDAsNyBAQAogICByZXR1cm4gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKF91bm1hbmFnZWRDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnVubWFuYWdlZFF1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguVVRGOFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhwYXRoLlVURjhTdHJpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8vIFBhc3NpbmcgTlVMTCBmb3IgaG9zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL29iamVjdGl2ZS1jL0dSUENDbGllbnQvcHJpdmF0ZS9HUlBDV3JhcHBlZENhbGwubSBiL3NyYy9vYmplY3RpdmUtYy9HUlBDQ2xpZW50L3ByaXZhdGUvR1JQQ1dyYXBwZWRDYWxsLm0KaW5kZXggMzhmY2FlMC4uOWYxOTAxYSAxMDA2NDQKLS0tIGEvc3JjL29iamVjdGl2ZS1jL0dSUENDbGllbnQvcHJpdmF0ZS9HUlBDV3JhcHBlZENhbGwubQorKysgYi9zcmMvb2JqZWN0aXZlLWMvR1JQQ0NsaWVudC9wcml2YXRlL0dSUENXcmFwcGVkQ2FsbC5tCkBAIC0xMDUsMTQgKzEwNSwxNCBAQAogICB9CiAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CiAgICAgX29wLm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gICAgX29wLmRhdGEuc2VuZF9tZXNzYWdlID0gbWVzc2FnZS5ncnBjX2J5dGVCdWZmZXI7CisgICAgX29wLmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IG1lc3NhZ2UuZ3JwY19ieXRlQnVmZmVyOwogICAgIF9oYW5kbGVyID0gaGFuZGxlcjsKICAgfQogICByZXR1cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jIHsKLSAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KF9vcC5kYXRhLnNlbmRfbWVzc2FnZSk7CisgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShfb3AuZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlKTsKIH0KIAogQGVuZApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgIGlmIChzZWxmID0gW3N1cGVyIGluaXRdKSB7CiAgICAgX29wLm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7CiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZfaGVhZGVycyk7Ci0gICAgX29wLmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJl9oZWFkZXJzOworICAgIF9vcC5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmX2hlYWRlcnM7CiAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgIC8vIFByZXZlbnQgcmVmZXJlbmNlIGN5Y2xlIHdpdGggX2hhbmRsZXIKICAgICAgIF9fd2VhayB0eXBlb2Yoc2VsZikgd2Vha1NlbGYgPSBzZWxmOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhIYW5kbGVyOih2b2lkICheKShncnBjX2J5dGVfYnVmZmVyICopKWhhbmRsZXIgewogICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgewogICAgIF9vcC5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgIF9vcC5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZfcmVjZWl2ZWRNZXNzYWdlOworICAgIF9vcC5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmX3JlY2VpdmVkTWVzc2FnZTsKICAgICBpZiAoaGFuZGxlcikgewogICAgICAgLy8gUHJldmVudCByZWZlcmVuY2UgY3ljbGUgd2l0aCBfaGFuZGxlcgogICAgICAgX193ZWFrIHR5cGVvZihzZWxmKSB3ZWFrU2VsZiA9IHNlbGY7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAogQGltcGxlbWVudGF0aW9uIEdSUENPcFJlY3ZTdGF0dXN7CiAgIGdycGNfc3RhdHVzX2NvZGUgX3N0YXR1c0NvZGU7Ci0gIGNoYXIgKl9kZXRhaWxzOworICBncnBjX3NsaWNlIF9kZXRhaWxzOwogICBzaXplX3QgX2RldGFpbHNDYXBhY2l0eTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheSBfdHJhaWxlcnM7CiB9CkBAIC0yMDgsNyArMjA4LDYgQEAKICAgICBfb3Aub3AgPSBHUlBDX09QX1JFQ1ZfU1RBVFVTX09OX0NMSUVOVDsKICAgICBfb3AuZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJl9zdGF0dXNDb2RlOwogICAgIF9vcC5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZfZGV0YWlsczsKLSAgICBfb3AuZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmX2RldGFpbHNDYXBhY2l0eTsKICAgICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJl90cmFpbGVycyk7CiAgICAgX29wLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJl90cmFpbGVyczsKICAgICBpZiAoaGFuZGxlcikgewpAQCAtMjE2LDExICsyMTUsMTUgQEAKICAgICAgIF9fd2VhayB0eXBlb2Yoc2VsZikgd2Vha1NlbGYgPSBzZWxmOwogICAgICAgX2hhbmRsZXIgPSBeewogICAgICAgICBfX3N0cm9uZyB0eXBlb2Yoc2VsZikgc3Ryb25nU2VsZiA9IHdlYWtTZWxmOwotICAgICAgICBOU0Vycm9yICplcnJvciA9IFtOU0Vycm9yIGdycGNfZXJyb3JGcm9tU3RhdHVzQ29kZTpzdHJvbmdTZWxmLT5fc3RhdHVzQ29kZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczpzdHJvbmdTZWxmLT5fZGV0YWlsc107Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqdHJhaWxlcnMgPSBbTlNEaWN0aW9uYXJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19kaWN0aW9uYXJ5RnJvbU1ldGFkYXRhQXJyYXk6c3Ryb25nU2VsZi0+X3RyYWlsZXJzXTsKLSAgICAgICAgaGFuZGxlcihlcnJvciwgdHJhaWxlcnMpOworICAgICAgICBpZiAoc3Ryb25nU2VsZikgeworICAgICAgICAgIGNoYXIgKmRldGFpbHMgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHN0cm9uZ1NlbGYtPl9kZXRhaWxzKTsKKyAgICAgICAgICBOU0Vycm9yICplcnJvciA9IFtOU0Vycm9yIGdycGNfZXJyb3JGcm9tU3RhdHVzQ29kZTpzdHJvbmdTZWxmLT5fc3RhdHVzQ29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOmRldGFpbHNdOworICAgICAgICAgIE5TRGljdGlvbmFyeSAqdHJhaWxlcnMgPSBbTlNEaWN0aW9uYXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2RpY3Rpb25hcnlGcm9tTWV0YWRhdGFBcnJheTpzdHJvbmdTZWxmLT5fdHJhaWxlcnNdOworICAgICAgICAgIGhhbmRsZXIoZXJyb3IsIHRyYWlsZXJzKTsKKyAgICAgICAgICBncHJfZnJlZShkZXRhaWxzKTsKKyAgICAgICAgfQogICAgICAgfTsKICAgICB9CiAgIH0KQEAgLTIyOSw3ICsyMzIsNyBAQAogCiAtICh2b2lkKWRlYWxsb2MgewogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJl90cmFpbGVycyk7Ci0gIGdwcl9mcmVlKF9kZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihfZGV0YWlscyk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL3NyYy9vYmplY3RpdmUtYy9HUlBDQ2xpZW50L3ByaXZhdGUvTlNEaWN0aW9uYXJ5K0dSUEMubSBiL3NyYy9vYmplY3RpdmUtYy9HUlBDQ2xpZW50L3ByaXZhdGUvTlNEaWN0aW9uYXJ5K0dSUEMubQppbmRleCA3NDc3ZGE3Li5mZWIyYmI1IDEwMDY0NAotLS0gYS9zcmMvb2JqZWN0aXZlLWMvR1JQQ0NsaWVudC9wcml2YXRlL05TRGljdGlvbmFyeStHUlBDLm0KKysrIGIvc3JjL29iamVjdGl2ZS1jL0dSUENDbGllbnQvcHJpdmF0ZS9OU0RpY3Rpb25hcnkrR1JQQy5tCkBAIC00NywxMiArNDcsMTIgQEAKIEBpbXBsZW1lbnRhdGlvbiBOU0RhdGEgKEdSUENNZXRhZGF0YSkKICsgKGluc3RhbmNldHlwZSlncnBjX2RhdGFGcm9tTWV0YWRhdGFWYWx1ZTooZ3JwY19tZXRhZGF0YSAqKW1ldGFkYXRhIHsKICAgLy8gVE9ETyhqY2FuaXphbGVzKTogU2hvdWxkIHdlIHVzZSBhIG5vbi1jb3B5IGNvbnN0cnVjdG9yPwotICByZXR1cm4gW3NlbGYgZGF0YVdpdGhCeXRlczptZXRhZGF0YS0+dmFsdWUgbGVuZ3RoOm1ldGFkYXRhLT52YWx1ZV9sZW5ndGhdOworICByZXR1cm4gW3NlbGYgZGF0YVdpdGhCeXRlczpHUlBDX1NMSUNFX1NUQVJUX1BUUihtZXRhZGF0YS0+dmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOkdSUENfU0xJQ0VfTEVOR1RIKG1ldGFkYXRhLT52YWx1ZSldOwogfQogCiAtICh2b2lkKWdycGNfaW5pdE1ldGFkYXRhOihncnBjX21ldGFkYXRhICopbWV0YWRhdGEgewotICBtZXRhZGF0YS0+dmFsdWUgPSBzZWxmLmJ5dGVzOwotICBtZXRhZGF0YS0+dmFsdWVfbGVuZ3RoID0gc2VsZi5sZW5ndGg7CisgIG1ldGFkYXRhLT52YWx1ZSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKHNlbGYuYnl0ZXMsIHNlbGYubGVuZ3RoKTsKIH0KIEBlbmQKIApAQCAtNjcsMTUgKzY3LDE0IEBACiAKIEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoR1JQQ01ldGFkYXRhKQogKyAoaW5zdGFuY2V0eXBlKWdycGNfc3RyaW5nRnJvbU1ldGFkYXRhVmFsdWU6KGdycGNfbWV0YWRhdGEgKiltZXRhZGF0YSB7Ci0gIHJldHVybiBbW3NlbGYgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bWV0YWRhdGEtPnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6bWV0YWRhdGEtPnZhbHVlX2xlbmd0aAorICByZXR1cm4gW1tzZWxmIGFsbG9jXSBpbml0V2l0aEJ5dGVzOkdSUENfU0xJQ0VfU1RBUlRfUFRSKG1ldGFkYXRhLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDpHUlBDX1NMSUNFX0xFTkdUSChtZXRhZGF0YS0+dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nXTsKIH0KIAogLy8gUHJlY29uZGl0aW9uOiBUaGlzIG9iamVjdCBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuCiAtICh2b2lkKWdycGNfaW5pdE1ldGFkYXRhOihncnBjX21ldGFkYXRhICopbWV0YWRhdGEgewotICBtZXRhZGF0YS0+dmFsdWUgPSBzZWxmLlVURjhTdHJpbmc7Ci0gIG1ldGFkYXRhLT52YWx1ZV9sZW5ndGggPSBzZWxmLmxlbmd0aDsKKyAgbWV0YWRhdGEtPnZhbHVlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoc2VsZi5VVEY4U3RyaW5nKTsKIH0KIEBlbmQKIApAQCAtODksNyArODgsMTAgQEAKICsgKGluc3RhbmNldHlwZSlncnBjX2RpY3Rpb25hcnlGcm9tTWV0YWRhdGE6KGdycGNfbWV0YWRhdGEgKillbnRyaWVzIGNvdW50OihzaXplX3QpY291bnQgewogICBOU011dGFibGVEaWN0aW9uYXJ5ICptZXRhZGF0YSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ2FwYWNpdHk6Y291bnRdOwogICBmb3IgKGdycGNfbWV0YWRhdGEgKmVudHJ5ID0gZW50cmllczsgZW50cnkgPCBlbnRyaWVzICsgY291bnQ7IGVudHJ5KyspIHsKLSAgICBOU1N0cmluZyAqbmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzplbnRyeS0+a2V5IGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZ107CisgICAgY2hhciAqa2V5ID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhlbnRyeS0+a2V5KTsKKyAgICBOU1N0cmluZyAqbmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzprZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmddOworICAgIGdwcl9mcmVlKGtleSk7CiAgICAgaWYgKCFuYW1lIHx8IG1ldGFkYXRhW25hbWVdKSB7CiAgICAgICAvLyBMb2cgaWYgbmFtZSBpcyBuaWw/CiAgICAgICBjb250aW51ZTsKQEAgLTExMiw3ICsxMTQsNyBAQAogICBncnBjX21ldGFkYXRhICpjdXJyZW50ID0gbWV0YWRhdGE7CiAgIGZvciAoTlNTdHJpbmcqIGtleSBpbiBzZWxmKSB7CiAgICAgaWQgdmFsdWUgPSBzZWxmW2tleV07Ci0gICAgY3VycmVudC0+a2V5ID0ga2V5LlVURjhTdHJpbmc7CisgICAgY3VycmVudC0+a2V5ID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoa2V5LlVURjhTdHJpbmcpOwogICAgIGlmIChbdmFsdWUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihncnBjX2luaXRNZXRhZGF0YTopXSkgewogICAgICAgW3ZhbHVlIGdycGNfaW5pdE1ldGFkYXRhOmN1cnJlbnRdOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvb2JqZWN0aXZlLWMvdGVzdHMvQ3JvbmV0VW5pdFRlc3RzL0Nyb25ldFVuaXRUZXN0cy5tIGIvc3JjL29iamVjdGl2ZS1jL3Rlc3RzL0Nyb25ldFVuaXRUZXN0cy9Dcm9uZXRVbml0VGVzdHMubQppbmRleCBkYmQyODA3Li40M2I5MWEwIDEwMDY0NAotLS0gYS9zcmMvb2JqZWN0aXZlLWMvdGVzdHMvQ3JvbmV0VW5pdFRlc3RzL0Nyb25ldFVuaXRUZXN0cy5tCisrKyBiL3NyYy9vYmplY3RpdmUtYy90ZXN0cy9Dcm9uZXRVbml0VGVzdHMvQ3JvbmV0VW5pdFRlc3RzLm0KQEAgLTE0Miw3ICsxNDIsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTUxLDEyICsxNTEsMTIgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CmRpZmYgLS1naXQgYS9zcmMvcGhwL2V4dC9ncnBjL2NhbGwuYyBiL3NyYy9waHAvZXh0L2dycGMvY2FsbC5jCmluZGV4IDY0YjExMzcuLmJlMDcxOTAgMTAwNjQ0Ci0tLSBhL3NyYy9waHAvZXh0L2dycGMvY2FsbC5jCisrKyBiL3NyYy9waHAvZXh0L2dycGMvY2FsbC5jCkBAIC0xMDAsMTEgKzEwMCwxMSBAQAogICBncnBjX21ldGFkYXRhICplbGVtOwogICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgIGVsZW0gPSAmZWxlbWVudHNbaV07Ci0gICAga2V5X2xlbiA9IHN0cmxlbihlbGVtLT5rZXkpOworICAgIGtleV9sZW4gPSBHUlBDX1NMSUNFX0xFTkdUSChlbGVtLT5rZXkpOwogICAgIHN0cl9rZXkgPSBlY2FsbG9jKGtleV9sZW4gKyAxLCBzaXplb2YoY2hhcikpOwotICAgIG1lbWNweShzdHJfa2V5LCBlbGVtLT5rZXksIGtleV9sZW4pOwotICAgIHN0cl92YWwgPSBlY2FsbG9jKGVsZW0tPnZhbHVlX2xlbmd0aCArIDEsIHNpemVvZihjaGFyKSk7Ci0gICAgbWVtY3B5KHN0cl92YWwsIGVsZW0tPnZhbHVlLCBlbGVtLT52YWx1ZV9sZW5ndGgpOworICAgIG1lbWNweShzdHJfa2V5LCBHUlBDX1NMSUNFX1NUQVJUX1BUUihlbGVtLT5rZXkpLCBrZXlfbGVuKTsKKyAgICBzdHJfdmFsID0gZWNhbGxvYyhHUlBDX1NMSUNFX0xFTkdUSChlbGVtLT52YWx1ZSkgKyAxLCBzaXplb2YoY2hhcikpOworICAgIG1lbWNweShzdHJfdmFsLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihlbGVtLT52YWx1ZSksIEdSUENfU0xJQ0VfTEVOR1RIKGVsZW0tPnZhbHVlKSk7CiAgICAgaWYgKHBocF9ncnBjX3plbmRfaGFzaF9maW5kKGFycmF5X2hhc2gsIHN0cl9rZXksIGtleV9sZW4sICh2b2lkICoqKSZkYXRhKQogICAgICAgICA9PSBTVUNDRVNTKSB7CiAgICAgICBpZiAoWl9UWVBFX1AoZGF0YSkgIT0gSVNfQVJSQVkpIHsKQEAgLTExNSwxMyArMTE1LDEzIEBACiAgICAgICAgIGVmcmVlKHN0cl92YWwpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgIH0KLSAgICAgIHBocF9ncnBjX2FkZF9uZXh0X2luZGV4X3N0cmluZ2woZGF0YSwgc3RyX3ZhbCwgZWxlbS0+dmFsdWVfbGVuZ3RoLAorICAgICAgcGhwX2dycGNfYWRkX25leHRfaW5kZXhfc3RyaW5nbChkYXRhLCBzdHJfdmFsLCBHUlBDX1NMSUNFX0xFTkdUSChlbGVtLT52YWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICB9IGVsc2UgewogICAgICAgUEhQX0dSUENfTUFLRV9TVERfWlZBTChpbm5lcl9hcnJheSk7CiAgICAgICBhcnJheV9pbml0KGlubmVyX2FycmF5KTsKICAgICAgIHBocF9ncnBjX2FkZF9uZXh0X2luZGV4X3N0cmluZ2woaW5uZXJfYXJyYXksIHN0cl92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0tPnZhbHVlX2xlbmd0aCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX0xFTkdUSChlbGVtLT52YWx1ZSksIGZhbHNlKTsKICAgICAgIGFkZF9hc3NvY196dmFsKGFycmF5LCBzdHJfa2V5LCBpbm5lcl9hcnJheSk7CiAgICAgfQogICB9CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICBpZiAoa2V5X3R5cGUxICE9IEhBU0hfS0VZX0lTX1NUUklORykgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIWdycGNfaGVhZGVyX2tleV9pc19sZWdhbChrZXkxLCBzdHJsZW4oa2V5MSkpKSB7CisgICAgaWYgKCFncnBjX2hlYWRlcl9rZXlfaXNfbGVnYWwoZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoa2V5MSkpKSB7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlubmVyX2FycmF5X2hhc2ggPSBaX0FSUlZBTF9QKGlubmVyX2FycmF5KTsKQEAgLTE3Miw5ICsxNzIsOCBAQAogICAgICAgaWYgKFpfVFlQRV9QKHZhbHVlKSAhPSBJU19TVFJJTkcpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgbWV0YWRhdGEtPm1ldGFkYXRhW21ldGFkYXRhLT5jb3VudF0ua2V5ID0ga2V5MTsKLSAgICAgIG1ldGFkYXRhLT5tZXRhZGF0YVttZXRhZGF0YS0+Y291bnRdLnZhbHVlID0gWl9TVFJWQUxfUCh2YWx1ZSk7Ci0gICAgICBtZXRhZGF0YS0+bWV0YWRhdGFbbWV0YWRhdGEtPmNvdW50XS52YWx1ZV9sZW5ndGggPSBaX1NUUkxFTl9QKHZhbHVlKTsKKyAgICAgIG1ldGFkYXRhLT5tZXRhZGF0YVttZXRhZGF0YS0+Y291bnRdLmtleSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKGtleTEpOworICAgICAgbWV0YWRhdGEtPm1ldGFkYXRhW21ldGFkYXRhLT5jb3VudF0udmFsdWUgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcihaX1NUUlZBTF9QKHZhbHVlKSwgWl9TVFJMRU5fUCh2YWx1ZSkpOwogICAgICAgbWV0YWRhdGEtPmNvdW50ICs9IDE7CiAgICAgUEhQX0dSUENfSEFTSF9GT1JFQUNIX0VORCgpCiAgIFBIUF9HUlBDX0hBU0hfRk9SRUFDSF9FTkQoKQpAQCAtMjI5LDEwICsyMjgsMTUgQEAKICAgfQogICBhZGRfcHJvcGVydHlfenZhbChnZXRUaGlzKCksICJjaGFubmVsIiwgY2hhbm5lbF9vYmopOwogICB3cmFwcGVkX2dycGNfdGltZXZhbCAqZGVhZGxpbmUgPSBaX1dSQVBQRURfR1JQQ19USU1FVkFMX1AoZGVhZGxpbmVfb2JqKTsKKyAgZ3JwY19zbGljZSBtZXRob2Rfc2xpY2UgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhtZXRob2QpOworICBncnBjX3NsaWNlIGhvc3Rfc2xpY2UgPSBob3N0X292ZXJyaWRlICE9IE5VTEwgPworICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoaG9zdF9vdmVycmlkZSkgOiBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIGNhbGwtPndyYXBwZWQgPQogICAgIGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChjaGFubmVsLT53cmFwcGVkLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbl9xdWV1ZSwgbWV0aG9kLCBob3N0X292ZXJyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uX3F1ZXVlLCBtZXRob2Rfc2xpY2UsIGhvc3Rfb3ZlcnJpZGUgIT0gTlVMTCA/ICZob3N0X3NsaWNlIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmUtPndyYXBwZWQsIE5VTEwpOworICBncnBjX3NsaWNlX3VucmVmKG1ldGhvZF9zbGljZSk7CisgIGdycGNfc2xpY2VfdW5yZWYoaG9zdF9zbGljZSk7CiAgIGNhbGwtPm93bmVkID0gdHJ1ZTsKIH0KIApAQCAtMjY3LDggKzI3MSw4IEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgcmVjdl9tZXRhZGF0YTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheSByZWN2X3RyYWlsaW5nX21ldGFkYXRhOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKLSAgY2hhciAqc3RhdHVzX2RldGFpbHMgPSBOVUxMOwotICBzaXplX3Qgc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIHJlY3Zfc3RhdHVzX2RldGFpbHMgPSBncnBjX2VtcHR5X3NsaWNlKCk7CisgIGdycGNfc2xpY2Ugc2VuZF9zdGF0dXNfZGV0YWlscyA9IGdycGNfZW1wdHlfc2xpY2UoKTsKICAgZ3JwY19ieXRlX2J1ZmZlciAqbWVzc2FnZTsKICAgaW50IGNhbmNlbGxlZDsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwpAQCAtMzM1LDcgKzMzOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgVFNSTUxTX0NDKTsKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgfQotICAgICAgb3BzW29wX251bV0uZGF0YS5zZW5kX21lc3NhZ2UgPQorICAgICAgb3BzW29wX251bV0uZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0KICAgICAgICAgICBzdHJpbmdfdG9fYnl0ZV9idWZmZXIoWl9TVFJWQUxfUChtZXNzYWdlX3ZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9TVFJMRU5fUChtZXNzYWdlX3ZhbHVlKSk7CiAgICAgICBicmVhazsKQEAgLTM4MCw4ICszODQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgVFNSTUxTX0NDKTsKICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIH0KLSAgICAgICAgb3BzW29wX251bV0uZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9Ci0gICAgICAgICAgICBaX1NUUlZBTF9QKGlubmVyX3ZhbHVlKTsKKyAgICAgICAgc2VuZF9zdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKFpfU1RSVkFMX1AoaW5uZXJfdmFsdWUpKTsKKyAgICAgICAgb3BzW29wX251bV0uZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzZW5kX3N0YXR1c19kZXRhaWxzOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgemVuZF90aHJvd19leGNlcHRpb24oc3BsX2NlX0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBzdGF0dXMgZGV0YWlscyBpcyByZXF1aXJlZCIsCkBAIC0zOTAsMTkgKzM5NCwxOCBAQAogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQToKLSAgICAgIG9wc1tvcF9udW1dLmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJnJlY3ZfbWV0YWRhdGE7CisgICAgICBvcHNbb3BfbnVtXS5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPQorICAgICAgICAgICZyZWN2X21ldGFkYXRhOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBHUlBDX09QX1JFQ1ZfTUVTU0FHRToKLSAgICAgIG9wc1tvcF9udW1dLmRhdGEucmVjdl9tZXNzYWdlID0gJm1lc3NhZ2U7CisgICAgICBvcHNbb3BfbnVtXS5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmbWVzc2FnZTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ6CiAgICAgICBvcHNbb3BfbnVtXS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9CiAgICAgICAgICAgJnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGE7CiAgICAgICBvcHNbb3BfbnVtXS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICAgICAgb3BzW29wX251bV0uZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPQotICAgICAgICAgICZzdGF0dXNfZGV0YWlsczsKLSAgICAgIG9wc1tvcF9udW1dLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICAgICAmc3RhdHVzX2RldGFpbHNfY2FwYWNpdHk7CisgICAgICAgICAgJnJlY3Zfc3RhdHVzX2RldGFpbHM7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdSUENfT1BfUkVDVl9DTE9TRV9PTl9TRVJWRVI6CiAgICAgICBvcHNbb3BfbnVtXS5kYXRhLnJlY3ZfY2xvc2Vfb25fc2VydmVyLmNhbmNlbGxlZCA9ICZjYW5jZWxsZWQ7CkBAIC00NzQsOCArNDc3LDEwIEBACiAjZW5kaWYKICAgICAgIFBIUF9HUlBDX0RFTFJFRihhcnJheSk7CiAgICAgICBhZGRfcHJvcGVydHlfbG9uZyhyZWN2X3N0YXR1cywgImNvZGUiLCBzdGF0dXMpOwotICAgICAgcGhwX2dycGNfYWRkX3Byb3BlcnR5X3N0cmluZyhyZWN2X3N0YXR1cywgImRldGFpbHMiLCBzdGF0dXNfZGV0YWlscywKKyAgICAgIGNoYXIgKnN0YXR1c19kZXRhaWxzX3RleHQgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHJlY3Zfc3RhdHVzX2RldGFpbHMpOworICAgICAgcGhwX2dycGNfYWRkX3Byb3BlcnR5X3N0cmluZyhyZWN2X3N0YXR1cywgImRldGFpbHMiLCBzdGF0dXNfZGV0YWlsc190ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgIGdwcl9mcmVlKHN0YXR1c19kZXRhaWxzX3RleHQpOwogICAgICAgYWRkX3Byb3BlcnR5X3p2YWwocmVzdWx0LCAic3RhdHVzIiwgcmVjdl9zdGF0dXMpOwogICAgICAgUEhQX0dSUENfREVMUkVGKHJlY3Zfc3RhdHVzKTsKICAgICAgIFBIUF9HUlBDX0ZSRUVfU1REX1pWQUwocmVjdl9zdGF0dXMpOwpAQCAtNDkzLDEyICs0OTgsMTEgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVjdl9tZXRhZGF0YSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVjdl90cmFpbGluZ19tZXRhZGF0YSk7Ci0gIGlmIChzdGF0dXNfZGV0YWlscyAhPSBOVUxMKSB7Ci0gICAgZ3ByX2ZyZWUoc3RhdHVzX2RldGFpbHMpOwotICB9CisgIGdycGNfc2xpY2VfdW5yZWYocmVjdl9zdGF0dXNfZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoc2VuZF9zdGF0dXNfZGV0YWlscyk7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3BfbnVtOyBpKyspIHsKICAgICBpZiAob3BzW2ldLm9wID09IEdSUENfT1BfU0VORF9NRVNTQUdFKSB7Ci0gICAgICBncnBjX2J5dGVfYnVmZmVyX2Rlc3Ryb3kob3BzW2ldLmRhdGEuc2VuZF9tZXNzYWdlKTsKKyAgICAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShvcHNbaV0uZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlKTsKICAgICB9CiAgICAgaWYgKG9wc1tpXS5vcCA9PSBHUlBDX09QX1JFQ1ZfTUVTU0FHRSkgewogICAgICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KG1lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvc3JjL3BocC9leHQvZ3JwYy9zZXJ2ZXIuYyBiL3NyYy9waHAvZXh0L2dycGMvc2VydmVyLmMKaW5kZXggMjIxN2E0Zi4uOWFjNWQyYSAxMDA2NDQKLS0tIGEvc3JjL3BocC9leHQvZ3JwYy9zZXJ2ZXIuYworKysgYi9zcmMvcGhwL2V4dC9ncnBjL3NlcnZlci5jCkBAIC00OSw2ICs0OSw4IEBACiAKICNpbmNsdWRlIDxncnBjL2dycGMuaD4KICNpbmNsdWRlIDxncnBjL2dycGNfc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxncnBjL3NsaWNlLmg+CisjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2FsbG9jLmg+CiAKICNpbmNsdWRlICJjb21wbGV0aW9uX3F1ZXVlLmgiCiAjaW5jbHVkZSAic2VydmVyLmgiCkBAIC0xNDksOCArMTUxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgMSBUU1JNTFNfQ0MpOwogICAgIGdvdG8gY2xlYW51cDsKICAgfQotICBwaHBfZ3JwY19hZGRfcHJvcGVydHlfc3RyaW5nKHJlc3VsdCwgIm1ldGhvZCIsIGRldGFpbHMubWV0aG9kLCB0cnVlKTsKLSAgcGhwX2dycGNfYWRkX3Byb3BlcnR5X3N0cmluZyhyZXN1bHQsICJob3N0IiwgZGV0YWlscy5ob3N0LCB0cnVlKTsKKyAgY2hhciAqbWV0aG9kX3RleHQgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKGRldGFpbHMubWV0aG9kKTsKKyAgY2hhciAqaG9zdF90ZXh0ID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhkZXRhaWxzLmhvc3QpOworICBwaHBfZ3JwY19hZGRfcHJvcGVydHlfc3RyaW5nKHJlc3VsdCwgIm1ldGhvZCIsIG1ldGhvZF90ZXh0LCB0cnVlKTsKKyAgcGhwX2dycGNfYWRkX3Byb3BlcnR5X3N0cmluZyhyZXN1bHQsICJob3N0IiwgaG9zdF90ZXh0LCB0cnVlKTsKKyAgZ3ByX2ZyZWUobWV0aG9kX3RleHQpOworICBncHJfZnJlZShob3N0X3RleHQpOwogI2lmIFBIUF9NQUpPUl9WRVJTSU9OIDwgNwogICBhZGRfcHJvcGVydHlfenZhbChyZXN1bHQsICJjYWxsIiwgZ3JwY19waHBfd3JhcF9jYWxsKGNhbGwsIHRydWUgVFNSTUxTX0NDKSk7CiAgIGFkZF9wcm9wZXJ0eV96dmFsKHJlc3VsdCwgImFic29sdXRlX2RlYWRsaW5lIiwKZGlmZiAtLWdpdCBhL3NyYy9waHAvbGliL0dycGMvQWJzdHJhY3RDYWxsLnBocCBiL3NyYy9waHAvbGliL0dycGMvQWJzdHJhY3RDYWxsLnBocAppbmRleCA5ZjBiMDJiLi40MDM4N2FiIDEwMDY0NAotLS0gYS9zcmMvcGhwL2xpYi9HcnBjL0Fic3RyYWN0Q2FsbC5waHAKKysrIGIvc3JjL3BocC9saWIvR3JwYy9BYnN0cmFjdENhbGwucGhwCkBAIC01OCwxMiArNTgsMTEgQEAKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXNwb25zZQogICAgICAqIEBwYXJhbSBhcnJheSAgICAkb3B0aW9ucyAgICAgQ2FsbCBvcHRpb25zIChvcHRpb25hbCkKICAgICAgKi8KLSAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCi0gICAgICAgIENoYW5uZWwgJGNoYW5uZWwsCi0gICAgICAgICRtZXRob2QsCi0gICAgICAgICRkZXNlcmlhbGl6ZSwKLSAgICAgICAgYXJyYXkgJG9wdGlvbnMgPSBbXQotICAgICkgeworICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDaGFubmVsICRjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVzZXJpYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5ICRvcHRpb25zID0gW10pCisgICAgewogICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndGltZW91dCcsICRvcHRpb25zKSAmJgogICAgICAgICAgICAgaXNfbnVtZXJpYygkdGltZW91dCA9ICRvcHRpb25zWyd0aW1lb3V0J10pCiAgICAgICAgICkgewpAQCAtMTI3LDcgKzEyNiw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcHJvdG9idWYgYmluYXJ5IGZvcm1hdAogICAgICAqLwotICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlKCRkYXRhKQorICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfc2VyaWFsaXplTWVzc2FnZSgkZGF0YSkKICAgICB7CiAgICAgICAgIC8vIFByb3RvMyBpbXBsZW1lbnRhdGlvbgogICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkZGF0YSwgJ2VuY29kZScpKSB7CkBAIC0xNDUsNyArMTQ0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIGRlc2VyaWFsaXplZCB2YWx1ZQogICAgICAqLwotICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVJlc3BvbnNlKCR2YWx1ZSkKKyAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Rlc2VyaWFsaXplUmVzcG9uc2UoJHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCR2YWx1ZSA9PT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL3BocC9saWIvR3JwYy9CYXNlU3R1Yi5waHAgYi9zcmMvcGhwL2xpYi9HcnBjL0Jhc2VTdHViLnBocAppbmRleCBhOWU3N2I5Li5lZDUwNGY4IDEwMDY0NAotLS0gYS9zcmMvcGhwL2xpYi9HcnBjL0Jhc2VTdHViLnBocAorKysgYi9zcmMvcGhwL2xpYi9HcnBjL0Jhc2VTdHViLnBocApAQCAtMTQ2LDYgKzE0NiwxNCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENsb3NlIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3R1Yi4KKyAgICAgKi8KKyAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQorICAgIHsKKyAgICAgICAgJHRoaXMtPmNoYW5uZWwtPmNsb3NlKCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQHBhcmFtICRuZXdfc3RhdGUgQ29ubmVjdCBzdGF0ZQogICAgICAqCiAgICAgICogQHJldHVybiBib29sIHRydWUgaWYgc3RhdGUgaXMgQ0hBTk5FTF9SRUFEWQpAQCAtMTY0LDE0ICsxNzIsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIENsb3NlIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3R1Yi4KLSAgICAgKi8KLSAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQotICAgIHsKLSAgICAgICAgJHRoaXMtPmNoYW5uZWwtPmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogY29uc3RydWN0cyB0aGUgYXV0aCB1cmkgZm9yIHRoZSBqd3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgVGhlIG1ldGhvZCBzdHJpbmcKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBTaW1wbGVTdXJmYWNlQWN0aXZlQ2FsbCBUaGUgYWN0aXZlIGNhbGwgb2JqZWN0CiAgICAgICovCi0gICAgcHVibGljIGZ1bmN0aW9uIF9zaW1wbGVSZXF1ZXN0KCRtZXRob2QsCisgICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9zaW1wbGVSZXF1ZXN0KCRtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmd1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2VyaWFsaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSAkbWV0YWRhdGEgPSBbXSwKQEAgLTI3MCw3ICsyNzAsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBDbGllbnRTdHJlYW1pbmdTdXJmYWNlQWN0aXZlQ2FsbCBUaGUgYWN0aXZlIGNhbGwgb2JqZWN0CiAgICAgICovCi0gICAgcHVibGljIGZ1bmN0aW9uIF9jbGllbnRTdHJlYW1SZXF1ZXN0KCRtZXRob2QsCisgICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9jbGllbnRTdHJlYW1SZXF1ZXN0KCRtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXNlcmlhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgJG1ldGFkYXRhID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5ICRvcHRpb25zID0gW10pCkBAIC0zMDUsNyArMzA1LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gU2VydmVyU3RyZWFtaW5nU3VyZmFjZUFjdGl2ZUNhbGwgVGhlIGFjdGl2ZSBjYWxsIG9iamVjdAogICAgICAqLwotICAgIHB1YmxpYyBmdW5jdGlvbiBfc2VydmVyU3RyZWFtUmVxdWVzdCgkbWV0aG9kLAorICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfc2VydmVyU3RyZWFtUmVxdWVzdCgkbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXNlcmlhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgJG1ldGFkYXRhID0gW10sCkBAIC0zMzksNyArMzM5LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gQmlkaVN0cmVhbWluZ1N1cmZhY2VBY3RpdmVDYWxsIFRoZSBhY3RpdmUgY2FsbCBvYmplY3QKICAgICAgKi8KLSAgICBwdWJsaWMgZnVuY3Rpb24gX2JpZGlSZXF1ZXN0KCRtZXRob2QsCisgICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9iaWRpUmVxdWVzdCgkbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2VyaWFsaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgJG1ldGFkYXRhID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdKQpkaWZmIC0tZ2l0IGEvc3JjL3BocC9saWIvR3JwYy9CaWRpU3RyZWFtaW5nQ2FsbC5waHAgYi9zcmMvcGhwL2xpYi9HcnBjL0JpZGlTdHJlYW1pbmdDYWxsLnBocAppbmRleCBiMDNiYmQyLi43Y2IyMDBkIDEwMDY0NAotLS0gYS9zcmMvcGhwL2xpYi9HcnBjL0JpZGlTdHJlYW1pbmdDYWxsLnBocAorKysgYi9zcmMvcGhwL2xpYi9HcnBjL0JpZGlTdHJlYW1pbmdDYWxsLnBocApAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgJHRoaXMtPm1ldGFkYXRhID0gJHJlYWRfZXZlbnQtPm1ldGFkYXRhOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuICR0aGlzLT5kZXNlcmlhbGl6ZVJlc3BvbnNlKCRyZWFkX2V2ZW50LT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuICR0aGlzLT5fZGVzZXJpYWxpemVSZXNwb25zZSgkcmVhZF9ldmVudC0+bWVzc2FnZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC04Miw3ICs4Miw3IEBACiAgICAgICovCiAgICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRkYXRhLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgIHsKLSAgICAgICAgJG1lc3NhZ2VfYXJyYXkgPSBbJ21lc3NhZ2UnID0+ICR0aGlzLT5zZXJpYWxpemVNZXNzYWdlKCRkYXRhKV07CisgICAgICAgICRtZXNzYWdlX2FycmF5ID0gWydtZXNzYWdlJyA9PiAkdGhpcy0+X3NlcmlhbGl6ZU1lc3NhZ2UoJGRhdGEpXTsKICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2ZsYWdzJywgJG9wdGlvbnMpKSB7CiAgICAgICAgICAgICAkbWVzc2FnZV9hcnJheVsnZmxhZ3MnXSA9ICRvcHRpb25zWydmbGFncyddOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvcGhwL2xpYi9HcnBjL0NsaWVudFN0cmVhbWluZ0NhbGwucGhwIGIvc3JjL3BocC9saWIvR3JwYy9DbGllbnRTdHJlYW1pbmdDYWxsLnBocAppbmRleCBjNTQyZjA4Li42NDU0Y2JjIDEwMDY0NAotLS0gYS9zcmMvcGhwL2xpYi9HcnBjL0NsaWVudFN0cmVhbWluZ0NhbGwucGhwCisrKyBiL3NyYy9waHAvbGliL0dycGMvQ2xpZW50U3RyZWFtaW5nQ2FsbC5waHAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGRhdGEsIGFycmF5ICRvcHRpb25zID0gW10pCiAgICAgewotICAgICAgICAkbWVzc2FnZV9hcnJheSA9IFsnbWVzc2FnZScgPT4gJHRoaXMtPnNlcmlhbGl6ZU1lc3NhZ2UoJGRhdGEpXTsKKyAgICAgICAgJG1lc3NhZ2VfYXJyYXkgPSBbJ21lc3NhZ2UnID0+ICR0aGlzLT5fc2VyaWFsaXplTWVzc2FnZSgkZGF0YSldOwogICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnZmxhZ3MnLCAkb3B0aW9ucykpIHsKICAgICAgICAgICAgICRtZXNzYWdlX2FycmF5WydmbGFncyddID0gJG9wdGlvbnNbJ2ZsYWdzJ107CiAgICAgICAgIH0KQEAgLTkwLDYgKzkwLDYgQEAKICAgICAgICAgJHN0YXR1cyA9ICRldmVudC0+c3RhdHVzOwogICAgICAgICAkdGhpcy0+dHJhaWxpbmdfbWV0YWRhdGEgPSAkc3RhdHVzLT5tZXRhZGF0YTsKIAotICAgICAgICByZXR1cm4gWyR0aGlzLT5kZXNlcmlhbGl6ZVJlc3BvbnNlKCRldmVudC0+bWVzc2FnZSksICRzdGF0dXNdOworICAgICAgICByZXR1cm4gWyR0aGlzLT5fZGVzZXJpYWxpemVSZXNwb25zZSgkZXZlbnQtPm1lc3NhZ2UpLCAkc3RhdHVzXTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvcGhwL2xpYi9HcnBjL1NlcnZlclN0cmVhbWluZ0NhbGwucGhwIGIvc3JjL3BocC9saWIvR3JwYy9TZXJ2ZXJTdHJlYW1pbmdDYWxsLnBocAppbmRleCA0MDY1MTJiLi44NjU5ZjZiIDEwMDY0NAotLS0gYS9zcmMvcGhwL2xpYi9HcnBjL1NlcnZlclN0cmVhbWluZ0NhbGwucGhwCisrKyBiL3NyYy9waHAvbGliL0dycGMvU2VydmVyU3RyZWFtaW5nQ2FsbC5waHAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoJGRhdGEsIGFycmF5ICRtZXRhZGF0YSA9IFtdLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgIHsKLSAgICAgICAgJG1lc3NhZ2VfYXJyYXkgPSBbJ21lc3NhZ2UnID0+ICR0aGlzLT5zZXJpYWxpemVNZXNzYWdlKCRkYXRhKV07CisgICAgICAgICRtZXNzYWdlX2FycmF5ID0gWydtZXNzYWdlJyA9PiAkdGhpcy0+X3NlcmlhbGl6ZU1lc3NhZ2UoJGRhdGEpXTsKICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2ZsYWdzJywgJG9wdGlvbnMpKSB7CiAgICAgICAgICAgICAkbWVzc2FnZV9hcnJheVsnZmxhZ3MnXSA9ICRvcHRpb25zWydmbGFncyddOwogICAgICAgICB9CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBPUF9SRUNWX01FU1NBR0UgPT4gdHJ1ZSwKICAgICAgICAgXSktPm1lc3NhZ2U7CiAgICAgICAgIHdoaWxlICgkcmVzcG9uc2UgIT09IG51bGwpIHsKLSAgICAgICAgICAgIHlpZWxkICR0aGlzLT5kZXNlcmlhbGl6ZVJlc3BvbnNlKCRyZXNwb25zZSk7CisgICAgICAgICAgICB5aWVsZCAkdGhpcy0+X2Rlc2VyaWFsaXplUmVzcG9uc2UoJHJlc3BvbnNlKTsKICAgICAgICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jYWxsLT5zdGFydEJhdGNoKFsKICAgICAgICAgICAgICAgICBPUF9SRUNWX01FU1NBR0UgPT4gdHJ1ZSwKICAgICAgICAgICAgIF0pLT5tZXNzYWdlOwpkaWZmIC0tZ2l0IGEvc3JjL3BocC9saWIvR3JwYy9VbmFyeUNhbGwucGhwIGIvc3JjL3BocC9saWIvR3JwYy9VbmFyeUNhbGwucGhwCmluZGV4IDNjMWNiMTUuLmI4YjFlZDYgMTAwNjQ0Ci0tLSBhL3NyYy9waHAvbGliL0dycGMvVW5hcnlDYWxsLnBocAorKysgYi9zcmMvcGhwL2xpYi9HcnBjL1VuYXJ5Q2FsbC5waHAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoJGRhdGEsIGFycmF5ICRtZXRhZGF0YSA9IFtdLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgIHsKLSAgICAgICAgJG1lc3NhZ2VfYXJyYXkgPSBbJ21lc3NhZ2UnID0+ICR0aGlzLT5zZXJpYWxpemVNZXNzYWdlKCRkYXRhKV07CisgICAgICAgICRtZXNzYWdlX2FycmF5ID0gWydtZXNzYWdlJyA9PiAkdGhpcy0+X3NlcmlhbGl6ZU1lc3NhZ2UoJGRhdGEpXTsKICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmbGFncyddKSkgewogICAgICAgICAgICAgJG1lc3NhZ2VfYXJyYXlbJ2ZsYWdzJ10gPSAkb3B0aW9uc1snZmxhZ3MnXTsKICAgICAgICAgfQpAQCAtNzksNiArNzksNiBAQAogICAgICAgICAkc3RhdHVzID0gJGV2ZW50LT5zdGF0dXM7CiAgICAgICAgICR0aGlzLT50cmFpbGluZ19tZXRhZGF0YSA9ICRzdGF0dXMtPm1ldGFkYXRhOwogCi0gICAgICAgIHJldHVybiBbJHRoaXMtPmRlc2VyaWFsaXplUmVzcG9uc2UoJGV2ZW50LT5tZXNzYWdlKSwgJHN0YXR1c107CisgICAgICAgIHJldHVybiBbJHRoaXMtPl9kZXNlcmlhbGl6ZVJlc3BvbnNlKCRldmVudC0+bWVzc2FnZSksICRzdGF0dXNdOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL2NoYW5uZWwucHl4LnB4aSBiL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL2NoYW5uZWwucHl4LnB4aQppbmRleCA3M2QxZmY3Li4yNDZlODM5IDEwMDY0NAotLS0gYS9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19jeXRob24vX2N5Z3JwYy9jaGFubmVsLnB5eC5weGkKKysrIGIvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvY2hhbm5lbC5weXgucHhpCkBAIC02MCwyMCArNjAsMjUgQEAKICAgICAgICAgICAgICAgICAgIG1ldGhvZCwgaG9zdCwgVGltZXNwZWMgZGVhZGxpbmUgbm90IE5vbmUpOgogICAgIGlmIHF1ZXVlLmlzX3NodXR0aW5nX2Rvd246CiAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJxdWV1ZSBtdXN0IG5vdCBiZSBzaHV0dGluZyBkb3duIG9yIHNodXRkb3duIikKLSAgICBjZGVmIGNoYXIgKm1ldGhvZF9jX3N0cmluZyA9IG1ldGhvZAotICAgIGNkZWYgY2hhciAqaG9zdF9jX3N0cmluZyA9IE5VTEwKKyAgICBjZGVmIGdycGNfc2xpY2UgbWV0aG9kX3NsaWNlID0gX3NsaWNlX2Zyb21fYnl0ZXMobWV0aG9kKQorICAgIGNkZWYgZ3JwY19zbGljZSBob3N0X3NsaWNlCisgICAgY2RlZiBncnBjX3NsaWNlICpob3N0X3NsaWNlX3B0ciA9IE5VTEwKICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgotICAgICAgaG9zdF9jX3N0cmluZyA9IGhvc3QKKyAgICAgIGhvc3Rfc2xpY2UgPSBfc2xpY2VfZnJvbV9ieXRlcyhob3N0KQorICAgICAgaG9zdF9zbGljZV9wdHIgPSAmaG9zdF9zbGljZQogICAgIGNkZWYgQ2FsbCBvcGVyYXRpb25fY2FsbCA9IENhbGwoKQotICAgIG9wZXJhdGlvbl9jYWxsLnJlZmVyZW5jZXMgPSBbc2VsZiwgbWV0aG9kLCBob3N0LCBxdWV1ZV0KKyAgICBvcGVyYXRpb25fY2FsbC5yZWZlcmVuY2VzID0gW3NlbGYsIHF1ZXVlXQogICAgIGNkZWYgZ3JwY19jYWxsICpwYXJlbnRfY2FsbCA9IE5VTEwKICAgICBpZiBwYXJlbnQgaXMgbm90IE5vbmU6CiAgICAgICBwYXJlbnRfY2FsbCA9IHBhcmVudC5jX2NhbGwKICAgICB3aXRoIG5vZ2lsOgogICAgICAgb3BlcmF0aW9uX2NhbGwuY19jYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAogICAgICAgICAgIHNlbGYuY19jaGFubmVsLCBwYXJlbnRfY2FsbCwgZmxhZ3MsCi0gICAgICAgICAgcXVldWUuY19jb21wbGV0aW9uX3F1ZXVlLCBtZXRob2RfY19zdHJpbmcsIGhvc3RfY19zdHJpbmcsCisgICAgICAgICAgcXVldWUuY19jb21wbGV0aW9uX3F1ZXVlLCBtZXRob2Rfc2xpY2UsIGhvc3Rfc2xpY2VfcHRyLAogICAgICAgICAgIGRlYWRsaW5lLmNfdGltZSwgTlVMTCkKKyAgICAgIGdycGNfc2xpY2VfdW5yZWYobWV0aG9kX3NsaWNlKQorICAgICAgaWYgaG9zdF9zbGljZV9wdHI6CisgICAgICAgIGdycGNfc2xpY2VfdW5yZWYoaG9zdF9zbGljZSkKICAgICByZXR1cm4gb3BlcmF0aW9uX2NhbGwKIAogICBkZWYgY2hlY2tfY29ubmVjdGl2aXR5X3N0YXRlKHNlbGYsIGJpbnQgdHJ5X3RvX2Nvbm5lY3QpOgpkaWZmIC0tZ2l0IGEvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvY29tcGxldGlvbl9xdWV1ZS5weXgucHhpIGIvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvY29tcGxldGlvbl9xdWV1ZS5weXgucHhpCmluZGV4IGEyNThiYTQuLmQ4ZGY2YzIgMTAwNjQ0Ci0tLSBhL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL2NvbXBsZXRpb25fcXVldWUucHl4LnB4aQorKysgYi9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19jeXRob24vX2N5Z3JwYy9jb21wbGV0aW9uX3F1ZXVlLnB5eC5weGkKQEAgLTUxLDYgKzUxLDcgQEAKICAgICBjZGVmIENhbGxEZXRhaWxzIHJlcXVlc3RfY2FsbF9kZXRhaWxzID0gTm9uZQogICAgIGNkZWYgTWV0YWRhdGEgcmVxdWVzdF9tZXRhZGF0YSA9IE5vbmUKICAgICBjZGVmIE9wZXJhdGlvbnMgYmF0Y2hfb3BlcmF0aW9ucyA9IE5vbmUKKyAgICBjZGVmIE9wZXJhdGlvbiBiYXRjaF9vcGVyYXRpb24gPSBOb25lCiAgICAgaWYgZXZlbnQudHlwZSA9PSBHUlBDX1FVRVVFX1RJTUVPVVQ6CiAgICAgICByZXR1cm4gRXZlbnQoCiAgICAgICAgICAgZXZlbnQudHlwZSwgRmFsc2UsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIEZhbHNlLCBOb25lKQpAQCAtNjksOCArNzAsMTUgQEAKICAgICAgICAgdXNlcl90YWcgPSB0YWcudXNlcl90YWcKICAgICAgICAgb3BlcmF0aW9uX2NhbGwgPSB0YWcub3BlcmF0aW9uX2NhbGwKICAgICAgICAgcmVxdWVzdF9jYWxsX2RldGFpbHMgPSB0YWcucmVxdWVzdF9jYWxsX2RldGFpbHMKLSAgICAgICAgcmVxdWVzdF9tZXRhZGF0YSA9IHRhZy5yZXF1ZXN0X21ldGFkYXRhCisgICAgICAgIGlmIHRhZy5yZXF1ZXN0X21ldGFkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgIHJlcXVlc3RfbWV0YWRhdGEgPSB0YWcucmVxdWVzdF9tZXRhZGF0YQorICAgICAgICAgIHJlcXVlc3RfbWV0YWRhdGEuX2NsYWltX3NsaWNlX293bmVyc2hpcCgpCiAgICAgICAgIGJhdGNoX29wZXJhdGlvbnMgPSB0YWcuYmF0Y2hfb3BlcmF0aW9ucworICAgICAgICBpZiB0YWcuYmF0Y2hfb3BlcmF0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICBmb3Igb3AgaW4gYmF0Y2hfb3BlcmF0aW9ucy5vcGVyYXRpb25zOgorICAgICAgICAgICAgYmF0Y2hfb3BlcmF0aW9uID0gPE9wZXJhdGlvbj5vcAorICAgICAgICAgICAgaWYgYmF0Y2hfb3BlcmF0aW9uLl9yZWNlaXZlZF9tZXRhZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgYmF0Y2hfb3BlcmF0aW9uLl9yZWNlaXZlZF9tZXRhZGF0YS5fY2xhaW1fc2xpY2Vfb3duZXJzaGlwKCkKICAgICAgICAgaWYgdGFnLmlzX25ld19yZXF1ZXN0OgogICAgICAgICAgICMgU3R1ZmYgaW4gdGhlIHRhZyBub3QgZXhwbGljaXRseSBoYW5kbGVkIGJ5IHVzIG5lZWRzIHRvIGxpdmUgdGhyb3VnaAogICAgICAgICAgICMgdGhlIGxpZmUgb2YgdGhlIGNhbGwKQEAgLTkxLDcgKzk5LDcgQEAKICAgICAgIGNfZGVhZGxpbmUgPSBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpCiAgICAgICBpZiBkZWFkbGluZSBpcyBub3QgTm9uZToKICAgICAgICAgY19kZWFkbGluZSA9IGRlYWRsaW5lLmNfdGltZQotICAgICAgCisKICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgIGNfdGltZW91dCA9IGdwcl90aW1lX2FkZChncHJfbm93KEdQUl9DTE9DS19SRUFMVElNRSksIGNfaW5jcmVtZW50KQogICAgICAgICBpZiBncHJfdGltZV9jbXAoY190aW1lb3V0LCBjX2RlYWRsaW5lKSA+IDA6CkBAIC0xMDAsNyArMTA4LDcgQEAKICAgICAgICAgICBzZWxmLmNfY29tcGxldGlvbl9xdWV1ZSwgY190aW1lb3V0LCBOVUxMKQogICAgICAgICBpZiBldmVudC50eXBlICE9IEdSUENfUVVFVUVfVElNRU9VVCBvciBncHJfdGltZV9jbXAoY190aW1lb3V0LCBjX2RlYWRsaW5lKSA9PSAwOgogICAgICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgICAgICAjIEhhbmRsZSBhbnkgc2lnbmFscwogICAgICAgICB3aXRoIGdpbDoKICAgICAgICAgICBjcHl0aG9uLlB5RXJyX0NoZWNrU2lnbmFscygpCmRpZmYgLS1naXQgYS9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19jeXRob24vX2N5Z3JwYy9ncnBjLnB4aSBiL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL2dycGMucHhpCmluZGV4IGFkNzY2MTguLmJiZDcyNDIgMTAwNjQ0Ci0tLSBhL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL2dycGMucHhpCisrKyBiL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL2dycGMucHhpCkBAIC01MSw2ICs1MSwxMyBAQAogICAgIHBhc3MKIAogCitjZGVmIGV4dGVybiBmcm9tICJncnBjL2ltcGwvY29kZWdlbi9leGVjX2N0eF9md2QuaCI6CisKKyAgc3RydWN0IGdycGNfZXhlY19jdHg6CisgICAgIyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSBpbnRlcm5hbHMKKyAgICBwYXNzCisKKwogY2RlZiBleHRlcm4gZnJvbSAiZ3JwYy9ncnBjLmgiOgogCiAgIGN0eXBlZGVmIHN0cnVjdCBncnBjX3NsaWNlOgpAQCAtNjAsNiArNjcsNyBAQAogCiAgIGdycGNfc2xpY2UgZ3JwY19zbGljZV9yZWYoZ3JwY19zbGljZSBzKSBub2dpbAogICB2b2lkIGdycGNfc2xpY2VfdW5yZWYoZ3JwY19zbGljZSBzKSBub2dpbAorICBncnBjX3NsaWNlIGdycGNfZW1wdHlfc2xpY2UoKSBub2dpbAogICBncnBjX3NsaWNlIGdycGNfc2xpY2VfbmV3KHZvaWQgKnAsIHNpemVfdCBsZW4sIHZvaWQgKCpkZXN0cm95KSh2b2lkICopKSBub2dpbAogICBncnBjX3NsaWNlIGdycGNfc2xpY2VfbmV3X3dpdGhfbGVuKAogICAgICAgdm9pZCAqcCwgc2l6ZV90IGxlbiwgdm9pZCAoKmRlc3Ryb3kpKHZvaWQgKiwgc2l6ZV90KSkgbm9naWwKQEAgLTE3NSw3ICsxODMsNyBAQAogCiAgIGN0eXBlZGVmIHN0cnVjdCBncnBjX2FyZ19wb2ludGVyX3Z0YWJsZToKICAgICB2b2lkICooKmNvcHkpKHZvaWQgKikKLSAgICB2b2lkICgqZGVzdHJveSkodm9pZCAqKQorICAgIHZvaWQgKCpkZXN0cm95KShncnBjX2V4ZWNfY3R4ICosIHZvaWQgKikKICAgICBpbnQgKCpjbXApKHZvaWQgKiwgdm9pZCAqKQogCiAgIGN0eXBlZGVmIHN0cnVjdCBncnBjX2FyZ192YWx1ZV9wb2ludGVyOgpAQCAtMjE3LDkgKzIyNSw4IEBACiAgICAgR1JQQ19DSEFOTkVMX1NIVVRET1dOCiAKICAgY3R5cGVkZWYgc3RydWN0IGdycGNfbWV0YWRhdGE6Ci0gICAgY29uc3QgY2hhciAqa2V5Ci0gICAgY29uc3QgY2hhciAqdmFsdWUKLSAgICBzaXplX3QgdmFsdWVfbGVuZ3RoCisgICAgZ3JwY19zbGljZSBrZXkKKyAgICBncnBjX3NsaWNlIHZhbHVlCiAgICAgIyBpZ25vcmUgdGhlICdpbnRlcm5hbF9kYXRhLm9iZnVzY2F0ZWQnIGZpZWxkcy4KIAogICBjdHlwZWRlZiBlbnVtIGdycGNfY29tcGxldGlvbl90eXBlOgpAQCAtMjQxLDEwICsyNDgsOCBAQAogICB2b2lkIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveShncnBjX21ldGFkYXRhX2FycmF5ICphcnJheSkgbm9naWwKIAogICBjdHlwZWRlZiBzdHJ1Y3QgZ3JwY19jYWxsX2RldGFpbHM6Ci0gICAgY2hhciAqbWV0aG9kCi0gICAgc2l6ZV90IG1ldGhvZF9jYXBhY2l0eQotICAgIGNoYXIgKmhvc3QKLSAgICBzaXplX3QgaG9zdF9jYXBhY2l0eQorICAgIGdycGNfc2xpY2UgbWV0aG9kCisgICAgZ3JwY19zbGljZSBob3N0CiAgICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lCiAKICAgdm9pZCBncnBjX2NhbGxfZGV0YWlsc19pbml0KGdycGNfY2FsbF9kZXRhaWxzICpkZXRhaWxzKSBub2dpbApAQCAtMjY4LDIzICsyNzMsMzEgQEAKICAgICBzaXplX3QgdHJhaWxpbmdfbWV0YWRhdGFfY291bnQKICAgICBncnBjX21ldGFkYXRhICp0cmFpbGluZ19tZXRhZGF0YQogICAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzCi0gICAgY29uc3QgY2hhciAqc3RhdHVzX2RldGFpbHMKKyAgICBncnBjX3NsaWNlICpzdGF0dXNfZGV0YWlscwogCiAgIGN0eXBlZGVmIHN0cnVjdCBncnBjX29wX2RhdGFfcmVjdl9zdGF0dXNfb25fY2xpZW50OgogICAgIGdycGNfbWV0YWRhdGFfYXJyYXkgKnRyYWlsaW5nX21ldGFkYXRhCiAgICAgZ3JwY19zdGF0dXNfY29kZSAqc3RhdHVzCi0gICAgY2hhciAqKnN0YXR1c19kZXRhaWxzCi0gICAgc2l6ZV90ICpzdGF0dXNfZGV0YWlsc19jYXBhY2l0eQorICAgIGdycGNfc2xpY2UgKnN0YXR1c19kZXRhaWxzCiAKICAgY3R5cGVkZWYgc3RydWN0IGdycGNfb3BfZGF0YV9yZWN2X2Nsb3NlX29uX3NlcnZlcjoKICAgICBpbnQgKmNhbmNlbGxlZAogCisgIGN0eXBlZGVmIHN0cnVjdCBncnBjX29wX2RhdGFfc2VuZF9tZXNzYWdlOgorICAgIGdycGNfYnl0ZV9idWZmZXIgKnNlbmRfbWVzc2FnZQorCisgIGN0eXBlZGVmIHN0cnVjdCBncnBjX29wX2RhdGFfcmVjZWl2ZV9tZXNzYWdlOgorICAgIGdycGNfYnl0ZV9idWZmZXIgKipyZWNlaXZlX21lc3NhZ2UgInJlY3ZfbWVzc2FnZSIKKworICBjdHlwZWRlZiBzdHJ1Y3QgZ3JwY19vcF9kYXRhX3JlY2VpdmVfaW5pdGlhbF9tZXRhZGF0YToKKyAgICBncnBjX21ldGFkYXRhX2FycmF5ICpyZWNlaXZlX2luaXRpYWxfbWV0YWRhdGEgInJlY3ZfaW5pdGlhbF9tZXRhZGF0YSIKKwogICB1bmlvbiBncnBjX29wX2RhdGE6CiAgICAgZ3JwY19vcF9kYXRhX3NlbmRfaW5pdGlhbF9tZXRhZGF0YSBzZW5kX2luaXRpYWxfbWV0YWRhdGEKLSAgICBncnBjX2J5dGVfYnVmZmVyICpzZW5kX21lc3NhZ2UKKyAgICBncnBjX29wX2RhdGFfc2VuZF9tZXNzYWdlIHNlbmRfbWVzc2FnZQogICAgIGdycGNfb3BfZGF0YV9zZW5kX3N0YXR1c19mcm9tX3NlcnZlciBzZW5kX3N0YXR1c19mcm9tX3NlcnZlcgotICAgIGdycGNfbWV0YWRhdGFfYXJyYXkgKnJlY2VpdmVfaW5pdGlhbF9tZXRhZGF0YSAicmVjdl9pbml0aWFsX21ldGFkYXRhIgotICAgIGdycGNfYnl0ZV9idWZmZXIgKipyZWNlaXZlX21lc3NhZ2UgInJlY3ZfbWVzc2FnZSIKKyAgICBncnBjX29wX2RhdGFfcmVjZWl2ZV9pbml0aWFsX21ldGFkYXRhIHJlY2VpdmVfaW5pdGlhbF9tZXRhZGF0YSAicmVjdl9pbml0aWFsX21ldGFkYXRhIgorICAgIGdycGNfb3BfZGF0YV9yZWNlaXZlX21lc3NhZ2UgcmVjZWl2ZV9tZXNzYWdlICJyZWN2X21lc3NhZ2UiCiAgICAgZ3JwY19vcF9kYXRhX3JlY3Zfc3RhdHVzX29uX2NsaWVudCByZWNlaXZlX3N0YXR1c19vbl9jbGllbnQgInJlY3Zfc3RhdHVzX29uX2NsaWVudCIKICAgICBncnBjX29wX2RhdGFfcmVjdl9jbG9zZV9vbl9zZXJ2ZXIgcmVjZWl2ZV9jbG9zZV9vbl9zZXJ2ZXIgInJlY3ZfY2xvc2Vfb25fc2VydmVyIgogCkBAIC0zMjEsOSArMzM0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdycGNfY2hhbm5lbF9hcmdzICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVzZXJ2ZWQpIG5vZ2lsCiAgIGdycGNfY2FsbCAqZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZ3JwY19jaGFubmVsICpjaGFubmVsLCBncnBjX2NhbGwgKnBhcmVudF9jYWxsLCB1aW50MzJfdCBwcm9wYWdhdGlvbl9tYXNrLAotICAgICAgZ3JwY19jb21wbGV0aW9uX3F1ZXVlICpjb21wbGV0aW9uX3F1ZXVlLCBjb25zdCBjaGFyICptZXRob2QsCi0gICAgICBjb25zdCBjaGFyICpob3N0LCBncHJfdGltZXNwZWMgZGVhZGxpbmUsIHZvaWQgKnJlc2VydmVkKSBub2dpbAorICAgIGdycGNfY2hhbm5lbCAqY2hhbm5lbCwgZ3JwY19jYWxsICpwYXJlbnRfY2FsbCwgdWludDMyX3QgcHJvcGFnYXRpb25fbWFzaywKKyAgICBncnBjX2NvbXBsZXRpb25fcXVldWUgKmNvbXBsZXRpb25fcXVldWUsIGdycGNfc2xpY2UgbWV0aG9kLAorICAgIGNvbnN0IGdycGNfc2xpY2UgKmhvc3QsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwgdm9pZCAqcmVzZXJ2ZWQpIG5vZ2lsCiAgIGdycGNfY29ubmVjdGl2aXR5X3N0YXRlIGdycGNfY2hhbm5lbF9jaGVja19jb25uZWN0aXZpdHlfc3RhdGUoCiAgICAgICBncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGludCB0cnlfdG9fY29ubmVjdCkgbm9naWwKICAgdm9pZCBncnBjX2NoYW5uZWxfd2F0Y2hfY29ubmVjdGl2aXR5X3N0YXRlKApAQCAtNDczLDggKzQ4Niw3IEBACiAgICAgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZGVmYXVsdF9jb21wcmVzc2lvbl9hbGdvcml0aG0KIAogICBpbnQgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2UoCi0gICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgsCi0gICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSAqYWxnb3JpdGhtKSBub2dpbAorICAgICAgZ3JwY19zbGljZSB2YWx1ZSwgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gKmFsZ29yaXRobSkgbm9naWwKICAgaW50IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX25hbWUoZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gYWxnb3JpdGhtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqbmFtZSkgbm9naWwKICAgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fZm9yX2xldmVsKApkaWZmIC0tZ2l0IGEvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvcmVjb3Jkcy5weGQucHhpIGIvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvcmVjb3Jkcy5weGQucHhpCmluZGV4IDAwZWM5MWIuLmM0YTE3MTEgMTAwNjQ0Ci0tLSBhL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL3JlY29yZHMucHhkLnB4aQorKysgYi9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19jeXRob24vX2N5Z3JwYy9yZWNvcmRzLnB4ZC5weGkKQEAgLTI4LDYgKzI4LDExIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIAorY2RlZiBieXRlcyBfc2xpY2VfYnl0ZXMoZ3JwY19zbGljZSBzbGljZSkKK2NkZWYgZ3JwY19zbGljZSBfY29weV9zbGljZShncnBjX3NsaWNlIHNsaWNlKSBub2dpbAorY2RlZiBncnBjX3NsaWNlIF9zbGljZV9mcm9tX2J5dGVzKGJ5dGVzIHZhbHVlKSBub2dpbAorCisKIGNkZWYgY2xhc3MgVGltZXNwZWM6CiAKICAgY2RlZiBncHJfdGltZXNwZWMgY190aW1lCkBAIC05NywxMyArMTAyLDEzIEBACiBjZGVmIGNsYXNzIE1ldGFkYXR1bToKIAogICBjZGVmIGdycGNfbWV0YWRhdGEgY19tZXRhZGF0YQotICBjZGVmIG9iamVjdCBfa2V5LCBfdmFsdWUKKyAgY2RlZiB2b2lkIF9jb3B5X21ldGFkYXR1bShzZWxmLCBncnBjX21ldGFkYXRhICpkZXN0aW5hdGlvbikgbm9naWwKIAogCiBjZGVmIGNsYXNzIE1ldGFkYXRhOgogCiAgIGNkZWYgZ3JwY19tZXRhZGF0YV9hcnJheSBjX21ldGFkYXRhX2FycmF5Ci0gIGNkZWYgb2JqZWN0IG1ldGFkYXRhCisgIGNkZWYgdm9pZCBfY2xhaW1fc2xpY2Vfb3duZXJzaGlwKHNlbGYpCiAKIAogY2RlZiBjbGFzcyBPcGVyYXRpb246CkBAIC0xMTIsOCArMTE3LDcgQEAKICAgY2RlZiBCeXRlQnVmZmVyIF9yZWNlaXZlZF9tZXNzYWdlCiAgIGNkZWYgTWV0YWRhdGEgX3JlY2VpdmVkX21ldGFkYXRhCiAgIGNkZWYgZ3JwY19zdGF0dXNfY29kZSBfcmVjZWl2ZWRfc3RhdHVzX2NvZGUKLSAgY2RlZiBjaGFyICpfcmVjZWl2ZWRfc3RhdHVzX2RldGFpbHMKLSAgY2RlZiBzaXplX3QgX3JlY2VpdmVkX3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5CisgIGNkZWYgZ3JwY19zbGljZSBfc3RhdHVzX2RldGFpbHMKICAgY2RlZiBpbnQgX3JlY2VpdmVkX2NhbmNlbGxlZAogICBjZGVmIHJlYWRvbmx5IGJpbnQgaXNfdmFsaWQKICAgY2RlZiBvYmplY3QgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvcmVjb3Jkcy5weXgucHhpIGIvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fY3l0aG9uL19jeWdycGMvcmVjb3Jkcy5weXgucHhpCmluZGV4IDY5YjgzN2MuLmMzZDE1OGQgMTAwNjQ0Ci0tLSBhL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX2N5dGhvbi9fY3lncnBjL3JlY29yZHMucHl4LnB4aQorKysgYi9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19jeXRob24vX2N5Z3JwYy9yZWNvcmRzLnB5eC5weGkKQEAgLTI5LDYgKzI5LDI2IEBACiAKIGZyb20gbGliYy5zdGRpbnQgY2ltcG9ydCBpbnRwdHJfdAogCisKK2NkZWYgYnl0ZXMgX3NsaWNlX2J5dGVzKGdycGNfc2xpY2Ugc2xpY2UpOgorICBjZGVmIHZvaWQgKnN0YXJ0ID0gZ3JwY19zbGljZV9zdGFydF9wdHIoc2xpY2UpCisgIGNkZWYgc2l6ZV90IGxlbmd0aCA9IGdycGNfc2xpY2VfbGVuZ3RoKHNsaWNlKQorICByZXR1cm4gKDxjb25zdCBjaGFyICo+c3RhcnQpWzpsZW5ndGhdCisKK2NkZWYgZ3JwY19zbGljZSBfY29weV9zbGljZShncnBjX3NsaWNlIHNsaWNlKSBub2dpbDoKKyAgY2RlZiB2b2lkICpzdGFydCA9IGdycGNfc2xpY2Vfc3RhcnRfcHRyKHNsaWNlKQorICBjZGVmIHNpemVfdCBsZW5ndGggPSBncnBjX3NsaWNlX2xlbmd0aChzbGljZSkKKyAgcmV0dXJuIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKDxjb25zdCBjaGFyICo+c3RhcnQsIGxlbmd0aCkKKworY2RlZiBncnBjX3NsaWNlIF9zbGljZV9mcm9tX2J5dGVzKGJ5dGVzIHZhbHVlKSBub2dpbDoKKyAgY2RlZiBjb25zdCBjaGFyICp2YWx1ZV9wdHIKKyAgY2RlZiBzaXplX3QgbGVuZ3RoCisgIHdpdGggZ2lsOgorICAgIHZhbHVlX3B0ciA9IDxjb25zdCBjaGFyICo+dmFsdWUKKyAgICBsZW5ndGggPSBsZW4odmFsdWUpCisgIHJldHVybiBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcih2YWx1ZV9wdHIsIGxlbmd0aCkKKworCiBjbGFzcyBDb25uZWN0aXZpdHlTdGF0ZToKICAgaWRsZSA9IEdSUENfQ0hBTk5FTF9JRExFCiAgIGNvbm5lY3RpbmcgPSBHUlBDX0NIQU5ORUxfQ09OTkVDVElORwpAQCAtMjA4LDE3ICsyMjgsMTEgQEAKIAogICBAcHJvcGVydHkKICAgZGVmIG1ldGhvZChzZWxmKToKLSAgICBpZiBzZWxmLmNfZGV0YWlscy5tZXRob2QgIT0gTlVMTDoKLSAgICAgIHJldHVybiA8Ynl0ZXM+c2VsZi5jX2RldGFpbHMubWV0aG9kCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIF9zbGljZV9ieXRlcyhzZWxmLmNfZGV0YWlscy5tZXRob2QpCiAKICAgQHByb3BlcnR5CiAgIGRlZiBob3N0KHNlbGYpOgotICAgIGlmIHNlbGYuY19kZXRhaWxzLmhvc3QgIT0gTlVMTDoKLSAgICAgIHJldHVybiA8Ynl0ZXM+c2VsZi5jX2RldGFpbHMuaG9zdAotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBfc2xpY2VfYnl0ZXMoc2VsZi5jX2RldGFpbHMuaG9zdCkKIAogICBAcHJvcGVydHkKICAgZGVmIGRlYWRsaW5lKHNlbGYpOgpAQCAtMzI5LDcgKzM0Myw3IEBACiAgIHJldHVybiBwdHIKIAogCi1jZGVmIHZvaWQgZGVzdHJveV9wdHIodm9pZCogcHRyKToKK2NkZWYgdm9pZCBkZXN0cm95X3B0cihncnBjX2V4ZWNfY3R4KiBjdHgsIHZvaWQqIHB0cik6CiAgIHBhc3MKIAogCkBAIC00MDIsMTkgKzQxNiwyMCBAQAogY2RlZiBjbGFzcyBNZXRhZGF0dW06CiAKICAgZGVmIF9fY2luaXRfXyhzZWxmLCBieXRlcyBrZXksIGJ5dGVzIHZhbHVlKToKLSAgICBzZWxmLl9rZXkgPSBrZXkKLSAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCi0gICAgc2VsZi5jX21ldGFkYXRhLmtleSA9IHNlbGYuX2tleQotICAgIHNlbGYuY19tZXRhZGF0YS52YWx1ZSA9IHNlbGYuX3ZhbHVlCi0gICAgc2VsZi5jX21ldGFkYXRhLnZhbHVlX2xlbmd0aCA9IGxlbihzZWxmLl92YWx1ZSkKKyAgICBzZWxmLmNfbWV0YWRhdGEua2V5ID0gX3NsaWNlX2Zyb21fYnl0ZXMoa2V5KQorICAgIHNlbGYuY19tZXRhZGF0YS52YWx1ZSA9IF9zbGljZV9mcm9tX2J5dGVzKHZhbHVlKQorCisgIGNkZWYgdm9pZCBfY29weV9tZXRhZGF0dW0oc2VsZiwgZ3JwY19tZXRhZGF0YSAqZGVzdGluYXRpb24pIG5vZ2lsOgorICAgIGRlc3RpbmF0aW9uWzBdLmtleSA9IF9jb3B5X3NsaWNlKHNlbGYuY19tZXRhZGF0YS5rZXkpCisgICAgZGVzdGluYXRpb25bMF0udmFsdWUgPSBfY29weV9zbGljZShzZWxmLmNfbWV0YWRhdGEudmFsdWUpCiAKICAgQHByb3BlcnR5CiAgIGRlZiBrZXkoc2VsZik6Ci0gICAgcmV0dXJuIDxieXRlcz5zZWxmLmNfbWV0YWRhdGEua2V5CisgICAgcmV0dXJuIF9zbGljZV9ieXRlcyhzZWxmLmNfbWV0YWRhdGEua2V5KQogCiAgIEBwcm9wZXJ0eQogICBkZWYgdmFsdWUoc2VsZik6Ci0gICAgcmV0dXJuIDxieXRlcz5zZWxmLmNfbWV0YWRhdGEudmFsdWVbOnNlbGYuY19tZXRhZGF0YS52YWx1ZV9sZW5ndGhdCisgICAgcmV0dXJuIF9zbGljZV9ieXRlcyhzZWxmLmNfbWV0YWRhdGEudmFsdWUpCiAKICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgcmV0dXJuIDIKQEAgLTQzMCw2ICs0NDUsOSBAQAogICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgcmV0dXJuIGl0ZXIoKHNlbGYua2V5LCBzZWxmLnZhbHVlKSkKIAorICBkZWYgX19kZWFsbG9jX18oc2VsZik6CisgICAgZ3JwY19zbGljZV91bnJlZihzZWxmLmNfbWV0YWRhdGEua2V5KQorICAgIGdycGNfc2xpY2VfdW5yZWYoc2VsZi5jX21ldGFkYXRhLnZhbHVlKQogCiBjZGVmIGNsYXNzIF9NZXRhZGF0YUl0ZXJhdG9yOgogCkBAIC00NTQsNTEgKzQ3Miw2NSBAQAogCiBjZGVmIGNsYXNzIE1ldGFkYXRhOgogCi0gIGRlZiBfX2Npbml0X18oc2VsZiwgbWV0YWRhdGEpOgotICAgIGdycGNfaW5pdCgpCi0gICAgc2VsZi5tZXRhZGF0YSA9IGxpc3QobWV0YWRhdGEpCisgIGRlZiBfX2Npbml0X18oc2VsZiwgbWV0YWRhdGFfaXRlcmFibGUpOgorICAgIHdpdGggbm9naWw6CisgICAgICBncnBjX2luaXQoKQorICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZzZWxmLmNfbWV0YWRhdGFfYXJyYXkpCisgICAgbWV0YWRhdGEgPSBsaXN0KG1ldGFkYXRhX2l0ZXJhYmxlKQogICAgIGZvciBtZXRhZGF0dW0gaW4gbWV0YWRhdGE6CiAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtZXRhZGF0dW0sIE1ldGFkYXR1bSk6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgbGlzdCBvZiBNZXRhZGF0dW0iKQotICAgIHdpdGggbm9naWw6Ci0gICAgICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJnNlbGYuY19tZXRhZGF0YV9hcnJheSkKLSAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkuY291bnQgPSBsZW4oc2VsZi5tZXRhZGF0YSkKLSAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkuY2FwYWNpdHkgPSBsZW4oc2VsZi5tZXRhZGF0YSkKKyAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkuY291bnQgPSBsZW4obWV0YWRhdGEpCisgICAgc2VsZi5jX21ldGFkYXRhX2FycmF5LmNhcGFjaXR5ID0gbGVuKG1ldGFkYXRhKQogICAgIHdpdGggbm9naWw6CiAgICAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkubWV0YWRhdGEgPSA8Z3JwY19tZXRhZGF0YSAqPmdwcl9tYWxsb2MoCiAgICAgICAgICAgc2VsZi5jX21ldGFkYXRhX2FycmF5LmNvdW50KnNpemVvZihncnBjX21ldGFkYXRhKQogICAgICAgKQogICAgIGZvciBpIGluIHJhbmdlKHNlbGYuY19tZXRhZGF0YV9hcnJheS5jb3VudCk6Ci0gICAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkubWV0YWRhdGFbaV0gPSAoCi0gICAgICAgICAgKDxNZXRhZGF0dW0+c2VsZi5tZXRhZGF0YVtpXSkuY19tZXRhZGF0YSkKKyAgICAgICg8TWV0YWRhdHVtPm1ldGFkYXRhW2ldKS5fY29weV9tZXRhZGF0dW0oJnNlbGYuY19tZXRhZGF0YV9hcnJheS5tZXRhZGF0YVtpXSkKIAogICBkZWYgX19kZWFsbG9jX18oc2VsZik6Ci0gICAgIyB0aGlzIGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgZ3JwY19tZXRhZGF0YV9hcnJheSAoYWx0aG91Z2gKLSAgICAjIGl0J2QgYmUgbmljZSBpZiB0aGF0IHdlcmUgZG9jdW1lbnRlZCBzb21ld2hlcmUuLi4pCi0gICAgIyBUT0RPKGF0YXNoKTogZG9jdW1lbnQgdGhpcyBpbiB0aGUgQyBjb3JlCi0gICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZzZWxmLmNfbWV0YWRhdGFfYXJyYXkpCi0gICAgZ3JwY19zaHV0ZG93bigpCisgICAgd2l0aCBub2dpbDoKKyAgICAgICMgdGhpcyBmcmVlcyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGdycGNfbWV0YWRhdGFfYXJyYXkgKGFsdGhvdWdoCisgICAgICAjIGl0J2QgYmUgbmljZSBpZiB0aGF0IHdlcmUgZG9jdW1lbnRlZCBzb21ld2hlcmUuLi4pCisgICAgICAjIFRPRE8oYXRhc2gpOiBkb2N1bWVudCB0aGlzIGluIHRoZSBDIGNvcmUKKyAgICAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmc2VsZi5jX21ldGFkYXRhX2FycmF5KQorICAgICAgZ3JwY19zaHV0ZG93bigpCiAKICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgcmV0dXJuIHNlbGYuY19tZXRhZGF0YV9hcnJheS5jb3VudAogCiAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBzaXplX3QgaSk6Ci0gICAgcmV0dXJuIE1ldGFkYXR1bSgKLSAgICAgICAga2V5PTxieXRlcz5zZWxmLmNfbWV0YWRhdGFfYXJyYXkubWV0YWRhdGFbaV0ua2V5LAotICAgICAgICB2YWx1ZT08Ynl0ZXM+c2VsZi5jX21ldGFkYXRhX2FycmF5Lm1ldGFkYXRhW2ldLnZhbHVlWwotICAgICAgICAgICAgOnNlbGYuY19tZXRhZGF0YV9hcnJheS5tZXRhZGF0YVtpXS52YWx1ZV9sZW5ndGhdKQorICAgIGlmIGkgPj0gc2VsZi5jX21ldGFkYXRhX2FycmF5LmNvdW50OgorICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgIGtleSA9IF9zbGljZV9ieXRlcyhzZWxmLmNfbWV0YWRhdGFfYXJyYXkubWV0YWRhdGFbaV0ua2V5KQorICAgIHZhbHVlID0gX3NsaWNlX2J5dGVzKHNlbGYuY19tZXRhZGF0YV9hcnJheS5tZXRhZGF0YVtpXS52YWx1ZSkKKyAgICByZXR1cm4gTWV0YWRhdHVtKGtleT1rZXksIHZhbHVlPXZhbHVlKQogCiAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICByZXR1cm4gX01ldGFkYXRhSXRlcmF0b3Ioc2VsZikKIAorICBjZGVmIHZvaWQgX2NsYWltX3NsaWNlX293bmVyc2hpcChzZWxmKToKKyAgICBjZGVmIGdycGNfbWV0YWRhdGFfYXJyYXkgbmV3X2NfbWV0YWRhdGFfYXJyYXkKKyAgICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJm5ld19jX21ldGFkYXRhX2FycmF5KQorICAgIG5ld19jX21ldGFkYXRhX2FycmF5Lm1ldGFkYXRhID0gPGdycGNfbWV0YWRhdGEgKj5ncHJfbWFsbG9jKAorICAgICAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkuY291bnQqc2l6ZW9mKGdycGNfbWV0YWRhdGEpKQorICAgIG5ld19jX21ldGFkYXRhX2FycmF5LmNvdW50ID0gc2VsZi5jX21ldGFkYXRhX2FycmF5LmNvdW50CisgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5jX21ldGFkYXRhX2FycmF5LmNvdW50KToKKyAgICAgIG5ld19jX21ldGFkYXRhX2FycmF5Lm1ldGFkYXRhW2ldLmtleSA9IF9jb3B5X3NsaWNlKAorICAgICAgICAgIHNlbGYuY19tZXRhZGF0YV9hcnJheS5tZXRhZGF0YVtpXS5rZXkpCisgICAgICBuZXdfY19tZXRhZGF0YV9hcnJheS5tZXRhZGF0YVtpXS52YWx1ZSA9IF9jb3B5X3NsaWNlKAorICAgICAgICAgIHNlbGYuY19tZXRhZGF0YV9hcnJheS5tZXRhZGF0YVtpXS52YWx1ZSkKKyAgICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnNlbGYuY19tZXRhZGF0YV9hcnJheSkKKyAgICBzZWxmLmNfbWV0YWRhdGFfYXJyYXkgPSBuZXdfY19tZXRhZGF0YV9hcnJheQorCiAKIGNkZWYgY2xhc3MgT3BlcmF0aW9uOgogCiAgIGRlZiBfX2Npbml0X18oc2VsZik6CiAgICAgZ3JwY19pbml0KCkKICAgICBzZWxmLnJlZmVyZW5jZXMgPSBbXQotICAgIHNlbGYuX3JlY2VpdmVkX3N0YXR1c19kZXRhaWxzID0gTlVMTAotICAgIHNlbGYuX3JlY2VpdmVkX3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gMAorICAgIHNlbGYuX3N0YXR1c19kZXRhaWxzID0gZ3JwY19lbXB0eV9zbGljZSgpCiAgICAgc2VsZi5pc192YWxpZCA9IEZhbHNlCiAKICAgQHByb3BlcnR5CkBAIC01NTUsMTkgKzU4NywxMyBAQAogICBkZWYgcmVjZWl2ZWRfc3RhdHVzX2RldGFpbHMoc2VsZik6CiAgICAgaWYgc2VsZi5jX29wLnR5cGUgIT0gR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ6CiAgICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYgbXVzdCBiZSBhbiBvcGVyYXRpb24gcmVjZWl2aW5nIHN0YXR1cyBkZXRhaWxzIikKLSAgICBpZiBzZWxmLl9yZWNlaXZlZF9zdGF0dXNfZGV0YWlsczoKLSAgICAgIHJldHVybiBzZWxmLl9yZWNlaXZlZF9zdGF0dXNfZGV0YWlscwotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBfc2xpY2VfYnl0ZXMoc2VsZi5fc3RhdHVzX2RldGFpbHMpCiAKICAgQHByb3BlcnR5CiAgIGRlZiByZWNlaXZlZF9zdGF0dXNfZGV0YWlsc19vcl9ub25lKHNlbGYpOgogICAgIGlmIHNlbGYuY19vcC50eXBlICE9IEdSUENfT1BfUkVDVl9TVEFUVVNfT05fQ0xJRU5UOgogICAgICAgcmV0dXJuIE5vbmUKLSAgICBpZiBzZWxmLl9yZWNlaXZlZF9zdGF0dXNfZGV0YWlsczoKLSAgICAgIHJldHVybiBzZWxmLl9yZWNlaXZlZF9zdGF0dXNfZGV0YWlscwotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBfc2xpY2VfYnl0ZXMoc2VsZi5fc3RhdHVzX2RldGFpbHMpCiAKICAgQHByb3BlcnR5CiAgIGRlZiByZWNlaXZlZF9jYW5jZWxsZWQoc2VsZik6CkBAIC01ODMsMTEgKzYwOSw3IEBACiAgICAgcmV0dXJuIEZhbHNlIGlmIHNlbGYuX3JlY2VpdmVkX2NhbmNlbGxlZCA9PSAwIGVsc2UgVHJ1ZQogCiAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKLSAgICAjIFdlICphbG1vc3QqIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmc7IG1vc3Qgb2YgdGhlIG9iamVjdHMgYXJlIGhhbmRsZWQgYnkKLSAgICAjIFB5dGhvbi4gVGhlIHJlbWFpbmluZyBvbmUocykgYXJlIHByaW1pdGl2ZSBmaWVsZHMgZmlsbGVkIGluIGJ5IEdSUEMgY29yZS4KLSAgICAjIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGNsZWFuIHVwIGFmdGVyIHJlY2VpdmVfc3RhdHVzX29uX2NsaWVudC4KLSAgICBpZiBzZWxmLmNfb3AudHlwZSA9PSBHUlBDX09QX1JFQ1ZfU1RBVFVTX09OX0NMSUVOVDoKLSAgICAgIGdwcl9mcmVlKHNlbGYuX3JlY2VpdmVkX3N0YXR1c19kZXRhaWxzKQorICAgIGdycGNfc2xpY2VfdW5yZWYoc2VsZi5fc3RhdHVzX2RldGFpbHMpCiAgICAgZ3JwY19zaHV0ZG93bigpCiAKIGRlZiBvcGVyYXRpb25fc2VuZF9pbml0aWFsX21ldGFkYXRhKE1ldGFkYXRhIG1ldGFkYXRhLCBpbnQgZmxhZ3MpOgpAQCAtNjA2LDcgKzYyOCw3IEBACiAgIG9wLmNfb3AudHlwZSA9IEdSUENfT1BfU0VORF9NRVNTQUdFCiAgIG9wLmNfb3AuZmxhZ3MgPSBmbGFncwogICBieXRlX2J1ZmZlciA9IEJ5dGVCdWZmZXIoZGF0YSkKLSAgb3AuY19vcC5kYXRhLnNlbmRfbWVzc2FnZSA9IGJ5dGVfYnVmZmVyLmNfYnl0ZV9idWZmZXIKKyAgb3AuY19vcC5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSBieXRlX2J1ZmZlci5jX2J5dGVfYnVmZmVyCiAgIG9wLnJlZmVyZW5jZXMuYXBwZW5kKGJ5dGVfYnVmZmVyKQogICBvcC5pc192YWxpZCA9IFRydWUKICAgcmV0dXJuIG9wCkBAIC02MjgsOSArNjUwLDEwIEBACiAgIG9wLmNfb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YSA9ICgKICAgICAgIG1ldGFkYXRhLmNfbWV0YWRhdGFfYXJyYXkubWV0YWRhdGEpCiAgIG9wLmNfb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBjb2RlCi0gIG9wLmNfb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9IGRldGFpbHMKKyAgZ3JwY19zbGljZV91bnJlZihvcC5fc3RhdHVzX2RldGFpbHMpCisgIG9wLl9zdGF0dXNfZGV0YWlscyA9IF9zbGljZV9mcm9tX2J5dGVzKGRldGFpbHMpCisgIG9wLmNfb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZvcC5fc3RhdHVzX2RldGFpbHMKICAgb3AucmVmZXJlbmNlcy5hcHBlbmQobWV0YWRhdGEpCi0gIG9wLnJlZmVyZW5jZXMuYXBwZW5kKGRldGFpbHMpCiAgIG9wLmlzX3ZhbGlkID0gVHJ1ZQogICByZXR1cm4gb3AKIApAQCAtNjM5LDcgKzY2Miw3IEBACiAgIG9wLmNfb3AudHlwZSA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBCiAgIG9wLmNfb3AuZmxhZ3MgPSBmbGFncwogICBvcC5fcmVjZWl2ZWRfbWV0YWRhdGEgPSBNZXRhZGF0YShbXSkKLSAgb3AuY19vcC5kYXRhLnJlY2VpdmVfaW5pdGlhbF9tZXRhZGF0YSA9ICgKKyAgb3AuY19vcC5kYXRhLnJlY2VpdmVfaW5pdGlhbF9tZXRhZGF0YS5yZWNlaXZlX2luaXRpYWxfbWV0YWRhdGEgPSAoCiAgICAgICAmb3AuX3JlY2VpdmVkX21ldGFkYXRhLmNfbWV0YWRhdGFfYXJyYXkpCiAgIG9wLmlzX3ZhbGlkID0gVHJ1ZQogICByZXR1cm4gb3AKQEAgLTY1Miw3ICs2NzUsOCBAQAogICAjIG4uYi4gdGhlIGNfb3AuZGF0YS5yZWNlaXZlX21lc3NhZ2UgZmllbGQgbmVlZHMgdG8gYmUgZGVsZXRlZCBieSB1cywKICAgIyBhbnl3YXksIHNvIHdlIGp1c3QgbGV0IHRoYXQgYmUgaGFuZGxlZCBieSB0aGUgQnl0ZUJ1ZmZlcigpIHdlIGFsbG9jYXRlZAogICAjIHRoZSBsaW5lIGJlZm9yZS4KLSAgb3AuY19vcC5kYXRhLnJlY2VpdmVfbWVzc2FnZSA9ICZvcC5fcmVjZWl2ZWRfbWVzc2FnZS5jX2J5dGVfYnVmZmVyCisgIG9wLmNfb3AuZGF0YS5yZWNlaXZlX21lc3NhZ2UucmVjZWl2ZV9tZXNzYWdlID0gKAorICAgICAgJm9wLl9yZWNlaXZlZF9tZXNzYWdlLmNfYnl0ZV9idWZmZXIpCiAgIG9wLmlzX3ZhbGlkID0gVHJ1ZQogICByZXR1cm4gb3AKIApAQCAtNjY2LDkgKzY5MCw3IEBACiAgIG9wLmNfb3AuZGF0YS5yZWNlaXZlX3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gKAogICAgICAgJm9wLl9yZWNlaXZlZF9zdGF0dXNfY29kZSkKICAgb3AuY19vcC5kYXRhLnJlY2VpdmVfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICgKLSAgICAgICZvcC5fcmVjZWl2ZWRfc3RhdHVzX2RldGFpbHMpCi0gIG9wLmNfb3AuZGF0YS5yZWNlaXZlX3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAoCi0gICAgICAmb3AuX3JlY2VpdmVkX3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5KQorICAgICAgJm9wLl9zdGF0dXNfZGV0YWlscykKICAgb3AuaXNfdmFsaWQgPSBUcnVlCiAgIHJldHVybiBvcAogCmRpZmYgLS1naXQgYS9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19zZXJ2ZXIucHkgYi9zcmMvcHl0aG9uL2dycGNpby9ncnBjL19zZXJ2ZXIucHkKaW5kZXggY2JiZTJkYy4uMzE1NTFlMCAxMDA2NDQKLS0tIGEvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwYy9fc2VydmVyLnB5CisrKyBiL3NyYy9weXRob24vZ3JwY2lvL2dycGMvX3NlcnZlci5weQpAQCAtNTkyLDYgKzU5Miw4IEBACiAKIAogZGVmIF9oYW5kbGVfY2FsbChycGNfZXZlbnQsIGdlbmVyaWNfaGFuZGxlcnMsIHRocmVhZF9wb29sKToKKyAgICBpZiBub3QgcnBjX2V2ZW50LnN1Y2Nlc3M6CisgICAgICAgIHJldHVybiBOb25lCiAgICAgaWYgcnBjX2V2ZW50LnJlcXVlc3RfY2FsbF9kZXRhaWxzLm1ldGhvZCBpcyBub3QgTm9uZToKICAgICAgICAgbWV0aG9kX2hhbmRsZXIgPSBfZmluZF9tZXRob2RfaGFuZGxlcihycGNfZXZlbnQsIGdlbmVyaWNfaGFuZGxlcnMpCiAgICAgICAgIGlmIG1ldGhvZF9oYW5kbGVyIGlzIE5vbmU6CmRpZmYgLS1naXQgYS9zcmMvcHl0aG9uL2dycGNpby9ncnBjX2NvcmVfZGVwZW5kZW5jaWVzLnB5IGIvc3JjL3B5dGhvbi9ncnBjaW8vZ3JwY19jb3JlX2RlcGVuZGVuY2llcy5weQppbmRleCA5ZDQ3MGUxLi42OGU0MGRhIDEwMDY0NAotLS0gYS9zcmMvcHl0aG9uL2dycGNpby9ncnBjX2NvcmVfZGVwZW5kZW5jaWVzLnB5CisrKyBiL3NyYy9weXRob24vZ3JwY2lvL2dycGNfY29yZV9kZXBlbmRlbmNpZXMucHkKQEAgLTE1OSw2ICsxNTksOCBAQAogICAnc3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuYycsCiAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2UuYycsCiAgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfYnVmZmVyLmMnLAorICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYycsCisgICdzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMnLAogICAnc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMnLAogICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvYWxhcm0uYycsCiAgICdzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuYycsCkBAIC0xODAsMTIgKzE4MiwxMyBAQAogICAnc3JjL2NvcmUvbGliL3N1cmZhY2UvdmVyc2lvbi5jJywKICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvYnl0ZV9zdHJlYW0uYycsCiAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jJywKLSAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jJywKKyAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvZXJyb3JfdXRpbHMuYycsCiAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmMnLAogICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jJywKICAgJ3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvcGlkX2NvbnRyb2xsZXIuYycsCiAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmMnLAogICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuYycsCisgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMnLAogICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMnLAogICAnc3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuYycsCiAgICdzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydF9vcF9zdHJpbmcuYycsCkBAIC0yMDYsNyArMjA5LDYgQEAKICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jJywKICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jJywKICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMnLAotICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMnLAogICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jJywKICAgJ3NyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMnLAogICAnc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3ZhcmludC5jJywKZGlmZiAtLWdpdCBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2J5dGVfYnVmZmVyLmMgYi9zcmMvcnVieS9leHQvZ3JwYy9yYl9ieXRlX2J1ZmZlci5jCmluZGV4IDQ3ZmQ2ZDkuLjY1ZmEyZjIgMTAwNjQ0Ci0tLSBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2J5dGVfYnVmZmVyLmMKKysrIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfYnl0ZV9idWZmZXIuYwpAQCAtNjgsMyArNjgsMTAgQEAKICAgZ3JwY19ieXRlX2J1ZmZlcl9yZWFkZXJfZGVzdHJveSgmcmVhZGVyKTsKICAgcmV0dXJuIHJiX3N0cmluZzsKIH0KKworVkFMVUUgZ3JwY19yYl9zbGljZV90b19ydWJ5X3N0cmluZyhncnBjX3NsaWNlIHNsaWNlKSB7CisgIGlmIChHUlBDX1NMSUNFX1NUQVJUX1BUUihzbGljZSkgPT0gTlVMTCkgeworICAgIHJiX3JhaXNlKHJiX2VSdW50aW1lRXJyb3IsICJhdHRlbXB0IHRvIGNvbnZlcnQgdW5pbml0aWFsaXplZCBncnBjX3NsaWNlIHRvIHJ1Ynkgc3RyaW5nIik7CisgIH0KKyAgcmV0dXJuIHJiX3N0cl9uZXcoKGNoYXIqKUdSUENfU0xJQ0VfU1RBUlRfUFRSKHNsaWNlKSwgR1JQQ19TTElDRV9MRU5HVEgoc2xpY2UpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2J5dGVfYnVmZmVyLmggYi9zcmMvcnVieS9leHQvZ3JwYy9yYl9ieXRlX2J1ZmZlci5oCmluZGV4IGM3ZGRkNzYuLmZhYzY4ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2J5dGVfYnVmZmVyLmgKKysrIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfYnl0ZV9idWZmZXIuaApAQCAtNDQsNCArNDQsNyBAQAogLyogQ29udmVydHMgYSBncnBjX2J5dGVfYnVmZmVyIHRvIGEgcnVieSBzdHJpbmcgKi8KIFZBTFVFIGdycGNfcmJfYnl0ZV9idWZmZXJfdG9fcyhncnBjX2J5dGVfYnVmZmVyICpidWZmZXIpOwogCisvKiBDb252ZXJ0cyBhIGdycGNfc2xpY2UgdG8gYSBydWJ5IHN0cmluZyAqLworVkFMVUUgZ3JwY19yYl9zbGljZV90b19ydWJ5X3N0cmluZyhncnBjX3NsaWNlIHNsaWNlKTsKKwogI2VuZGlmIC8qIEdSUENfUkJfQllURV9CVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2NhbGwuYyBiL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2NhbGwuYwppbmRleCA2N2E0MmFmLi44MmQzNDBiIDEwMDY0NAotLS0gYS9zcmMvcnVieS9leHQvZ3JwYy9yYl9jYWxsLmMKKysrIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfY2FsbC5jCkBAIC0xMjEsOCArMTIxLDggQEAKICAgc2l6ZV90IGksIGRhdGFzaXplID0gc2l6ZW9mKGdycGNfbWV0YWRhdGFfYXJyYXkpOwogICBmb3IgKGkgPSAwOyBpIDwgYXJ5LT5jb3VudDsgKytpKSB7CiAgICAgY29uc3QgZ3JwY19tZXRhZGF0YSAqY29uc3QgbWQgPSAmYXJ5LT5tZXRhZGF0YVtpXTsKLSAgICBkYXRhc2l6ZSArPSBzdHJsZW4obWQtPmtleSk7Ci0gICAgZGF0YXNpemUgKz0gbWQtPnZhbHVlX2xlbmd0aDsKKyAgICBkYXRhc2l6ZSArPSBHUlBDX1NMSUNFX0xFTkdUSChtZC0+a2V5KTsKKyAgICBkYXRhc2l6ZSArPSBHUlBDX1NMSUNFX0xFTkdUSChtZC0+dmFsdWUpOwogICB9CiAgIGRhdGFzaXplICs9IGFyeS0+Y2FwYWNpdHkgKiBzaXplb2YoZ3JwY19tZXRhZGF0YSk7CiAgIHJldHVybiBkYXRhc2l6ZTsKQEAgLTM4NiwyMyArMzg2LDIzIEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgKm1kX2FyeSA9IE5VTEw7CiAgIGxvbmcgYXJyYXlfbGVuZ3RoOwogICBsb25nIGk7Ci0gIGNoYXIgKmtleV9zdHI7Ci0gIHNpemVfdCBrZXlfbGVuOwotICBjaGFyICp2YWx1ZV9zdHI7Ci0gIHNpemVfdCB2YWx1ZV9sZW47CisgIGdycGNfc2xpY2Uga2V5X3NsaWNlOworICBncnBjX3NsaWNlIHZhbHVlX3NsaWNlOworICBjaGFyKiB0bXBfc3RyOwogCiAgIGlmIChUWVBFKGtleSkgPT0gVF9TWU1CT0wpIHsKLSAgICBrZXlfc3RyID0gKGNoYXIgKilyYl9pZDJuYW1lKFNZTTJJRChrZXkpKTsKLSAgICBrZXlfbGVuID0gc3RybGVuKGtleV9zdHIpOwotICB9IGVsc2UgeyAvKiBTdHJpbmdWYWx1ZUNTdHIgZG9lcyBhbGwgb3RoZXIgdHlwZSBleGNsdXNpb25zIGZvciB1cyAqLwotICAgIGtleV9zdHIgPSBTdHJpbmdWYWx1ZUNTdHIoa2V5KTsKLSAgICBrZXlfbGVuID0gUlNUUklOR19MRU4oa2V5KTsKKyAgICBrZXlfc2xpY2UgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhyYl9pZDJuYW1lKFNZTTJJRChrZXkpKSk7CisgIH0gZWxzZSBpZiAoVFlQRShrZXkpID09IFRfU1RSSU5HKSB7CisgICAga2V5X3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoUlNUUklOR19QVFIoa2V5KSwgUlNUUklOR19MRU4oa2V5KSk7CisgIH0gZWxzZSB7CisgICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgImdycGNfcmJfbWRfYXJ5X2ZpbGxfaGFzaF9jYjogYmFkIHR5cGUgZm9yIGtleSBwYXJhbWV0ZXIiKTsKICAgfQogCi0gIGlmICghZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsKGtleV9zdHIsIGtleV9sZW4pKSB7CisgIGlmICghZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsKGtleV9zbGljZSkpIHsKKyAgICB0bXBfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhrZXlfc2xpY2UpOwogICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwKICAgICAgICAgICAgICAiJyVzJyBpcyBhbiBpbnZhbGlkIGhlYWRlciBrZXksIG11c3QgbWF0Y2ggW2EtejAtOS1fLl0rIiwKLSAgICAgICAgICAgICBrZXlfc3RyKTsKKyAgICAgICAgICAgICB0bXBfc3RyKTsKICAgICByZXR1cm4gU1RfU1RPUDsKICAgfQogCkBAIC00MTQsMzMgKzQxNCwzMSBAQAogICAgIGFycmF5X2xlbmd0aCA9IFJBUlJBWV9MRU4odmFsKTsKICAgICAvKiBJZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXksIGFkZCBjYXBhY2l0eSBmb3IgZWFjaCB2YWx1ZSBpbiB0aGUgYXJyYXkgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXlfbGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhbHVlX3N0ciA9IFJTVFJJTkdfUFRSKHJiX2FyeV9lbnRyeSh2YWwsIGkpKTsKLSAgICAgIHZhbHVlX2xlbiA9IFJTVFJJTkdfTEVOKHJiX2FyeV9lbnRyeSh2YWwsIGkpKTsKLSAgICAgIGlmICghZ3JwY19pc19iaW5hcnlfaGVhZGVyKGtleV9zdHIsIGtleV9sZW4pICYmCi0gICAgICAgICAgIWdycGNfaGVhZGVyX25vbmJpbl92YWx1ZV9pc19sZWdhbCh2YWx1ZV9zdHIsIHZhbHVlX2xlbikpIHsKKyAgICAgIHZhbHVlX3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoUlNUUklOR19QVFIocmJfYXJ5X2VudHJ5KHZhbCwgaSkpLCBSU1RSSU5HX0xFTihyYl9hcnlfZW50cnkodmFsLCBpKSkpOworICAgICAgaWYgKCFncnBjX2lzX2JpbmFyeV9oZWFkZXIoa2V5X3NsaWNlKSAmJgorICAgICAgICAgICFncnBjX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWwodmFsdWVfc2xpY2UpKSB7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzCisgICAgICAgIHRtcF9zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHZhbHVlX3NsaWNlKTsKICAgICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLAotICAgICAgICAgICAgICAgICAiSGVhZGVyIHZhbHVlICclcycgaGFzIGludmFsaWQgY2hhcmFjdGVycyIsIHZhbHVlX3N0cik7CisgICAgICAgICAgICAgICAgICJIZWFkZXIgdmFsdWUgJyVzJyBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzIiwgdG1wX3N0cik7CiAgICAgICAgIHJldHVybiBTVF9TVE9QOwogICAgICAgfQotICAgICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS5rZXkgPSBrZXlfc3RyOwotICAgICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS52YWx1ZSA9IHZhbHVlX3N0cjsKLSAgICAgIG1kX2FyeS0+bWV0YWRhdGFbbWRfYXJ5LT5jb3VudF0udmFsdWVfbGVuZ3RoID0gdmFsdWVfbGVuOworICAgICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS5rZXkgPSBrZXlfc2xpY2U7CisgICAgICBtZF9hcnktPm1ldGFkYXRhW21kX2FyeS0+Y291bnRdLnZhbHVlID0gdmFsdWVfc2xpY2U7CiAgICAgICBtZF9hcnktPmNvdW50ICs9IDE7CiAgICAgfQogICB9IGVsc2UgaWYgKFRZUEUodmFsKSA9PSBUX1NUUklORykgewotICAgIHZhbHVlX3N0ciA9IFJTVFJJTkdfUFRSKHZhbCk7Ci0gICAgdmFsdWVfbGVuID0gUlNUUklOR19MRU4odmFsKTsKLSAgICBpZiAoIWdycGNfaXNfYmluYXJ5X2hlYWRlcihrZXlfc3RyLCBrZXlfbGVuKSAmJgotICAgICAgICAhZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsKHZhbHVlX3N0ciwgdmFsdWVfbGVuKSkgeworICAgIHZhbHVlX3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoUlNUUklOR19QVFIodmFsKSwgUlNUUklOR19MRU4odmFsKSk7CisgICAgaWYgKCFncnBjX2lzX2JpbmFyeV9oZWFkZXIoa2V5X3NsaWNlKSAmJgorICAgICAgICAhZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsKHZhbHVlX3NsaWNlKSkgewogICAgICAgLy8gVGhlIHZhbHVlIGhhcyBpbnZhbGlkIGNoYXJhY3RlcnMKKyAgICAgIHRtcF9zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHZhbHVlX3NsaWNlKTsKICAgICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwKLSAgICAgICAgICAgICAgICJIZWFkZXIgdmFsdWUgJyVzJyBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzIiwgdmFsdWVfc3RyKTsKKyAgICAgICAgICAgICAgICJIZWFkZXIgdmFsdWUgJyVzJyBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzIiwgdG1wX3N0cik7CiAgICAgICByZXR1cm4gU1RfU1RPUDsKICAgICB9Ci0gICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS5rZXkgPSBrZXlfc3RyOwotICAgIG1kX2FyeS0+bWV0YWRhdGFbbWRfYXJ5LT5jb3VudF0udmFsdWUgPSB2YWx1ZV9zdHI7Ci0gICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS52YWx1ZV9sZW5ndGggPSB2YWx1ZV9sZW47CisgICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS5rZXkgPSBrZXlfc2xpY2U7CisgICAgbWRfYXJ5LT5tZXRhZGF0YVttZF9hcnktPmNvdW50XS52YWx1ZSA9IHZhbHVlX3NsaWNlOwogICAgIG1kX2FyeS0+Y291bnQgKz0gMTsKICAgfSBlbHNlIHsKICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsCkBAIC01MDYsMjIgKzUwNCwxOSBAQAogICBzaXplX3QgaTsKIAogICBmb3IgKGkgPSAwOyBpIDwgbWRfYXJ5LT5jb3VudDsgaSsrKSB7Ci0gICAga2V5ID0gcmJfc3RyX25ldzIobWRfYXJ5LT5tZXRhZGF0YVtpXS5rZXkpOworICAgIGtleSA9IGdycGNfcmJfc2xpY2VfdG9fcnVieV9zdHJpbmcobWRfYXJ5LT5tZXRhZGF0YVtpXS5rZXkpOwogICAgIHZhbHVlID0gcmJfaGFzaF9hcmVmKHJlc3VsdCwga2V5KTsKICAgICBpZiAodmFsdWUgPT0gUW5pbCkgewotICAgICAgdmFsdWUgPSByYl9zdHJfbmV3KG1kX2FyeS0+bWV0YWRhdGFbaV0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWRfYXJ5LT5tZXRhZGF0YVtpXS52YWx1ZV9sZW5ndGgpOworICAgICAgdmFsdWUgPSBncnBjX3JiX3NsaWNlX3RvX3J1Ynlfc3RyaW5nKG1kX2FyeS0+bWV0YWRhdGFbaV0udmFsdWUpOwogICAgICAgcmJfaGFzaF9hc2V0KHJlc3VsdCwga2V5LCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChUWVBFKHZhbHVlKSA9PSBUX0FSUkFZKSB7CiAgICAgICAvKiBBZGQgdGhlIHN0cmluZyB0byB0aGUgcmV0dXJuZWQgYXJyYXkgKi8KLSAgICAgIHJiX2FyeV9wdXNoKHZhbHVlLCByYl9zdHJfbmV3KG1kX2FyeS0+bWV0YWRhdGFbaV0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZF9hcnktPm1ldGFkYXRhW2ldLnZhbHVlX2xlbmd0aCkpOworICAgICAgcmJfYXJ5X3B1c2godmFsdWUsIGdycGNfcmJfc2xpY2VfdG9fcnVieV9zdHJpbmcobWRfYXJ5LT5tZXRhZGF0YVtpXS52YWx1ZSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAvKiBBZGQgdGhlIGN1cnJlbnQgdmFsdWUgd2l0aCB0aGlzIGtleSBhbmQgdGhlIG5ldyBvbmUgdG8gYW4gYXJyYXkgKi8KICAgICAgIG5ld19hcnkgPSByYl9hcnlfbmV3KCk7CiAgICAgICByYl9hcnlfcHVzaChuZXdfYXJ5LCB2YWx1ZSk7Ci0gICAgICByYl9hcnlfcHVzaChuZXdfYXJ5LCByYl9zdHJfbmV3KG1kX2FyeS0+bWV0YWRhdGFbaV0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kX2FyeS0+bWV0YWRhdGFbaV0udmFsdWVfbGVuZ3RoKSk7CisgICAgICByYl9hcnlfcHVzaChuZXdfYXJ5LCBncnBjX3JiX3NsaWNlX3RvX3J1Ynlfc3RyaW5nKG1kX2FyeS0+bWV0YWRhdGFbaV0udmFsdWUpKTsKICAgICAgIHJiX2hhc2hfYXNldChyZXN1bHQsIGtleSwgbmV3X2FyeSk7CiAgICAgfQogICB9CkBAIC01NjMsNiArNTU4LDcgQEAKICovCiBzdGF0aWMgdm9pZCBncnBjX3JiX29wX3VwZGF0ZV9zdGF0dXNfZnJvbV9zZXJ2ZXIoZ3JwY19vcCAqb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheSAqbWRfYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgKnNlbmRfc3RhdHVzX2RldGFpbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUgc3RhdHVzKSB7CiAgIFZBTFVFIGNvZGUgPSByYl9zdHJ1Y3RfYXJlZihzdGF0dXMsIHN5bV9jb2RlKTsKICAgVkFMVUUgZGV0YWlscyA9IHJiX3N0cnVjdF9hcmVmKHN0YXR1cywgc3ltX2RldGFpbHMpOwpAQCAtNTc5LDggKzU3NSwxMSBAQAogICAgICAgICAgICAgIHJiX29ial9jbGFzc25hbWUoY29kZSkpOwogICAgIHJldHVybjsKICAgfQorCisgICpzZW5kX3N0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoUlNUUklOR19QVFIoZGV0YWlscyksIFJTVFJJTkdfTEVOKGRldGFpbHMpKTsKKwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBOVU0ySU5UKGNvZGUpOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9IFN0cmluZ1ZhbHVlQ1N0cihkZXRhaWxzKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSBzZW5kX3N0YXR1c19kZXRhaWxzOwogICBncnBjX3JiX21kX2FyeV9jb252ZXJ0KG1ldGFkYXRhX2hhc2gsIG1kX2FyeSk7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gbWRfYXJ5LT5jb3VudDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGEgPSBtZF9hcnktPm1ldGFkYXRhOwpAQCAtNjAzLDkgKzYwMiw5IEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgcmVjdl90cmFpbGluZ19tZXRhZGF0YTsKICAgaW50IHJlY3ZfY2FuY2VsbGVkOwogICBncnBjX3N0YXR1c19jb2RlIHJlY3Zfc3RhdHVzOwotICBjaGFyICpyZWN2X3N0YXR1c19kZXRhaWxzOwotICBzaXplX3QgcmVjdl9zdGF0dXNfZGV0YWlsc19jYXBhY2l0eTsKKyAgZ3JwY19zbGljZSByZWN2X3N0YXR1c19kZXRhaWxzOwogICB1bnNpZ25lZCB3cml0ZV9mbGFnOworICBncnBjX3NsaWNlIHNlbmRfc3RhdHVzX2RldGFpbHM7CiB9IHJ1bl9iYXRjaF9zdGFjazsKIAogLyogZ3JwY19ydW5fYmF0Y2hfc3RhY2tfaW5pdCBlbnN1cmVzIHRoZSBydW5fYmF0Y2hfc3RhY2sgaXMgcHJvcGVybHkKQEAgLTYzMSw4ICs2MzAsMTIgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZzdC0+cmVjdl9tZXRhZGF0YSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmc3QtPnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGEpOwogCi0gIGlmIChzdC0+cmVjdl9zdGF0dXNfZGV0YWlscyAhPSBOVUxMKSB7Ci0gICAgZ3ByX2ZyZWUoc3QtPnJlY3Zfc3RhdHVzX2RldGFpbHMpOworICBpZiAoR1JQQ19TTElDRV9TVEFSVF9QVFIoc3QtPnNlbmRfc3RhdHVzX2RldGFpbHMpICE9IE5VTEwpIHsKKyAgICBncnBjX3NsaWNlX3VucmVmKHN0LT5zZW5kX3N0YXR1c19kZXRhaWxzKTsKKyAgfQorCisgIGlmIChHUlBDX1NMSUNFX1NUQVJUX1BUUihzdC0+cmVjdl9zdGF0dXNfZGV0YWlscykgIT0gTlVMTCkgeworICAgIGdycGNfc2xpY2VfdW5yZWYoc3QtPnJlY3Zfc3RhdHVzX2RldGFpbHMpOwogICB9CiAKICAgaWYgKHN0LT5yZWN2X21lc3NhZ2UgIT0gTlVMTCkgewpAQCAtNjQxLDcgKzY0NCw3IEBACiAKICAgZm9yIChpID0gMDsgaSA8IHN0LT5vcF9udW07IGkrKykgewogICAgIGlmIChzdC0+b3BzW2ldLm9wID09IEdSUENfT1BfU0VORF9NRVNTQUdFKSB7Ci0gICAgICBncnBjX2J5dGVfYnVmZmVyX2Rlc3Ryb3koc3QtPm9wc1tpXS5kYXRhLnNlbmRfbWVzc2FnZSk7CisgICAgICBncnBjX2J5dGVfYnVmZmVyX2Rlc3Ryb3koc3QtPm9wc1tpXS5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UpOwogICAgIH0KICAgfQogfQpAQCAtNjczLDggKzY3Niw5IEBACiAgICAgICAgICAgICBzdC0+c2VuZF9tZXRhZGF0YS5tZXRhZGF0YTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdSUENfT1BfU0VORF9NRVNTQUdFOgotICAgICAgICBzdC0+b3BzW3N0LT5vcF9udW1dLmRhdGEuc2VuZF9tZXNzYWdlID0gZ3JwY19yYl9zX3RvX2J5dGVfYnVmZmVyKAotICAgICAgICAgICAgUlNUUklOR19QVFIodGhpc192YWx1ZSksIFJTVFJJTkdfTEVOKHRoaXNfdmFsdWUpKTsKKyAgICAgICAgc3QtPm9wc1tzdC0+b3BfbnVtXS5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPQorICAgICAgICAgICAgZ3JwY19yYl9zX3RvX2J5dGVfYnVmZmVyKFJTVFJJTkdfUFRSKHRoaXNfdmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTVFJJTkdfTEVOKHRoaXNfdmFsdWUpKTsKICAgICAgICAgc3QtPm9wc1tzdC0+b3BfbnVtXS5mbGFncyA9IHN0LT53cml0ZV9mbGFnOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR1JQQ19PUF9TRU5EX0NMT1NFX0ZST01fQ0xJRU5UOgpAQCAtNjgzLDEzICs2ODcsMTQgQEAKICAgICAgICAgLyogTi5CLiBsYXRlciB0aGVyZSBpcyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgZGVsZXRlIHRoZSBtZXRhZGF0YSBrZXlzCiAgICAgICAgICAqIGFuZCB2YWx1ZXMsIHRoZXkgYXJlIHJlZmVyZW5jZXMgdG8gZGF0YSBpbiBydWJ5IG9iamVjdHMuICovCiAgICAgICAgIGdycGNfcmJfb3BfdXBkYXRlX3N0YXR1c19mcm9tX3NlcnZlcigKLSAgICAgICAgICAgICZzdC0+b3BzW3N0LT5vcF9udW1dLCAmc3QtPnNlbmRfdHJhaWxpbmdfbWV0YWRhdGEsIHRoaXNfdmFsdWUpOworICAgICAgICAgICAgJnN0LT5vcHNbc3QtPm9wX251bV0sICZzdC0+c2VuZF90cmFpbGluZ19tZXRhZGF0YSwgJnN0LT5zZW5kX3N0YXR1c19kZXRhaWxzLCB0aGlzX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOgotICAgICAgICBzdC0+b3BzW3N0LT5vcF9udW1dLmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJnN0LT5yZWN2X21ldGFkYXRhOworICAgICAgICBzdC0+b3BzW3N0LT5vcF9udW1dLmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CisgICAgICAgICAgICAmc3QtPnJlY3ZfbWV0YWRhdGE7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHUlBDX09QX1JFQ1ZfTUVTU0FHRToKLSAgICAgICAgc3QtPm9wc1tzdC0+b3BfbnVtXS5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZzdC0+cmVjdl9tZXNzYWdlOworICAgICAgICBzdC0+b3BzW3N0LT5vcF9udW1dLmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZzdC0+cmVjdl9tZXNzYWdlOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ6CiAgICAgICAgIHN0LT5vcHNbc3QtPm9wX251bV0uZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPQpAQCAtNjk4LDggKzcwMyw2IEBACiAgICAgICAgICAgICAmc3QtPnJlY3Zfc3RhdHVzOwogICAgICAgICBzdC0+b3BzW3N0LT5vcF9udW1dLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0KICAgICAgICAgICAgICZzdC0+cmVjdl9zdGF0dXNfZGV0YWlsczsKLSAgICAgICAgc3QtPm9wc1tzdC0+b3BfbnVtXS5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9Ci0gICAgICAgICAgICAmc3QtPnJlY3Zfc3RhdHVzX2RldGFpbHNfY2FwYWNpdHk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHUlBDX09QX1JFQ1ZfQ0xPU0VfT05fU0VSVkVSOgogICAgICAgICBzdC0+b3BzW3N0LT5vcF9udW1dLmRhdGEucmVjdl9jbG9zZV9vbl9zZXJ2ZXIuY2FuY2VsbGVkID0KQEAgLTc0Nyw5ICs3NTAsOSBAQAogICAgICAgICByYl9zdHJ1Y3RfYXNldCgKICAgICAgICAgICAgIHJlc3VsdCwgc3ltX3N0YXR1cywKICAgICAgICAgICAgIHJiX3N0cnVjdF9uZXcoZ3JwY19yYl9zU3RhdHVzLCBVSU5UMk5VTShzdC0+cmVjdl9zdGF0dXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoc3QtPnJlY3Zfc3RhdHVzX2RldGFpbHMgPT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAoR1JQQ19TTElDRV9TVEFSVF9QVFIoc3QtPnJlY3Zfc3RhdHVzX2RldGFpbHMpID09IE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJiX3N0cl9uZXcyKHN0LT5yZWN2X3N0YXR1c19kZXRhaWxzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBncnBjX3JiX3NsaWNlX3RvX3J1Ynlfc3RyaW5nKHN0LT5yZWN2X3N0YXR1c19kZXRhaWxzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfcmJfbWRfYXJ5X3RvX2goJnN0LT5yZWN2X3RyYWlsaW5nX21ldGFkYXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2NoYW5uZWwuYyBiL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2NoYW5uZWwuYwppbmRleCAzYjJiODhlLi44NGU0M2QzIDEwMDY0NAotLS0gYS9zcmMvcnVieS9leHQvZ3JwYy9yYl9jaGFubmVsLmMKKysrIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfY2hhbm5lbC5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJyYl9ncnBjX2ltcG9ydHMuZ2VuZXJhdGVkLmgiCiAjaW5jbHVkZSAicmJfY2hhbm5lbC5oIgorI2luY2x1ZGUgInJiX2J5dGVfYnVmZmVyLmgiCiAKICNpbmNsdWRlIDxncnBjL2dycGMuaD4KICNpbmNsdWRlIDxncnBjL2dycGNfc2VjdXJpdHkuaD4KQEAgLTI1MiwxMCArMjUzLDE0IEBACiAgIGdycGNfY2hhbm5lbCAqY2ggPSBOVUxMOwogICBncnBjX2NvbXBsZXRpb25fcXVldWUgKmNxID0gTlVMTDsKICAgaW50IGZsYWdzID0gR1JQQ19QUk9QQUdBVEVfREVGQVVMVFM7Ci0gIGNoYXIgKm1ldGhvZF9jaGFycyA9IFN0cmluZ1ZhbHVlQ1N0cihtZXRob2QpOwotICBjaGFyICpob3N0X2NoYXJzID0gTlVMTDsKKyAgZ3JwY19zbGljZSBtZXRob2Rfc2xpY2U7CisgIGdycGNfc2xpY2UgaG9zdF9zbGljZTsKKyAgZ3JwY19zbGljZSAqaG9zdF9zbGljZV9wdHIgPSBOVUxMOworICBjaGFyKiB0bXBfc3RyID0gTlVMTDsKKwogICBpZiAoaG9zdCAhPSBRbmlsKSB7Ci0gICAgaG9zdF9jaGFycyA9IFN0cmluZ1ZhbHVlQ1N0cihob3N0KTsKKyAgICBob3N0X3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoUlNUUklOR19QVFIoaG9zdCksIFJTVFJJTkdfTEVOKGhvc3QpKTsKKyAgICBob3N0X3NsaWNlX3B0ciA9ICZob3N0X3NsaWNlOwogICB9CiAgIGlmIChtYXNrICE9IFFuaWwpIHsKICAgICBmbGFncyA9IE5VTTJVSU5UKG1hc2spOwpAQCAtMjcyLDE1ICsyNzcsMjUgQEAKICAgICByZXR1cm4gUW5pbDsKICAgfQogCi0gIGNhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoY2gsIHBhcmVudF9jYWxsLCBmbGFncywgY3EsIG1ldGhvZF9jaGFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2NoYXJzLCBncnBjX3JiX3RpbWVfdGltZXZhbCgKKyAgbWV0aG9kX3NsaWNlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoUlNUUklOR19QVFIobWV0aG9kKSwgUlNUUklOR19MRU4obWV0aG9kKSk7CisKKyAgY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChjaCwgcGFyZW50X2NhbGwsIGZsYWdzLCBjcSwgbWV0aG9kX3NsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Rfc2xpY2VfcHRyLCBncnBjX3JiX3RpbWVfdGltZXZhbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFic29sdXRlIHRpbWUgKi8gMCksIE5VTEwpOworCiAgIGlmIChjYWxsID09IE5VTEwpIHsKKyAgICB0bXBfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhtZXRob2Rfc2xpY2UpOwogICAgIHJiX3JhaXNlKHJiX2VSdW50aW1lRXJyb3IsICJjYW5ub3QgY3JlYXRlIGNhbGwgd2l0aCBtZXRob2QgJXMiLAotICAgICAgICAgICAgIG1ldGhvZF9jaGFycyk7CisgICAgICAgICAgICAgdG1wX3N0cik7CiAgICAgcmV0dXJuIFFuaWw7CiAgIH0KKworICBncnBjX3NsaWNlX3VucmVmKG1ldGhvZF9zbGljZSk7CisgIGlmIChob3N0X3NsaWNlX3B0ciAhPSBOVUxMKSB7CisgICAgZ3JwY19zbGljZV91bnJlZihob3N0X3NsaWNlKTsKKyAgfQorCiAgIHJlcyA9IGdycGNfcmJfd3JhcF9jYWxsKGNhbGwsIGNxKTsKIAogICAvKiBNYWtlIHRoaXMgY2hhbm5lbCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb2YgdGhlIGNhbGwgc28gdGhhdCBpdCBpcyBub3QgR0NlZApkaWZmIC0tZ2l0IGEvc3JjL3J1YnkvZXh0L2dycGMvcmJfY29tcHJlc3Npb25fb3B0aW9ucy5jIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfY29tcHJlc3Npb25fb3B0aW9ucy5jCmluZGV4IDYyMDBkYmEuLjZiMjQ2N2UgMTAwNjQ0Ci0tLSBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2NvbXByZXNzaW9uX29wdGlvbnMuYworKysgYi9zcmMvcnVieS9leHQvZ3JwYy9yYl9jb21wcmVzc2lvbl9vcHRpb25zLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxydWJ5L3J1YnkuaD4KIAogI2luY2x1ZGUgInJiX2NvbXByZXNzaW9uX29wdGlvbnMuaCIKKyNpbmNsdWRlICJyYl9ieXRlX2J1ZmZlci5oIgogI2luY2x1ZGUgInJiX2dycGNfaW1wb3J0cy5nZW5lcmF0ZWQuaCIKIAogI2luY2x1ZGUgPGdycGMvY29tcHJlc3Npb24uaD4KQEAgLTE2OCw5ICsxNjksOSBAQAogICogUmFpc2VzIGFuIGVycm9yIGlmIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0gcGFzc2VkIGluIGlzIGludmFsaWQuICovCiB2b2lkIGdycGNfcmJfY29tcHJlc3Npb25fb3B0aW9uc19hbGdvcml0aG1fbmFtZV90b192YWx1ZV9pbnRlcm5hbCgKICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSAqYWxnb3JpdGhtX3ZhbHVlLCBWQUxVRSBhbGdvcml0aG1fbmFtZSkgewotICBjaGFyICpuYW1lX3N0ciA9IE5VTEw7Ci0gIGxvbmcgbmFtZV9sZW4gPSAwOworICBncnBjX3NsaWNlIG5hbWVfc2xpY2U7CiAgIFZBTFVFIGFsZ29yaXRobV9uYW1lX2FzX3N0cmluZyA9IFFuaWw7CisgIGNoYXIgKnRtcF9zdHIgPSBOVUxMOwogCiAgIENoZWNrX1R5cGUoYWxnb3JpdGhtX25hbWUsIFRfU1lNQk9MKTsKIApAQCAtMTc4LDE2ICsxNzksMTggQEAKICAgICogY29ycmVjdCBDIHN0cmluZyBvdXQgb2YgaXQuICovCiAgIGFsZ29yaXRobV9uYW1lX2FzX3N0cmluZyA9IHJiX2Z1bmNhbGwoYWxnb3JpdGhtX25hbWUsIHJiX2ludGVybigidG9fcyIpLCAwKTsKIAotICBuYW1lX3N0ciA9IFJTVFJJTkdfUFRSKGFsZ29yaXRobV9uYW1lX2FzX3N0cmluZyk7Ci0gIG5hbWVfbGVuID0gUlNUUklOR19MRU4oYWxnb3JpdGhtX25hbWVfYXNfc3RyaW5nKTsKKyAgbmFtZV9zbGljZSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyKFJTVFJJTkdfUFRSKGFsZ29yaXRobV9uYW1lX2FzX3N0cmluZyksIFJTVFJJTkdfTEVOKGFsZ29yaXRobV9uYW1lX2FzX3N0cmluZykpOwogCiAgIC8qIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBuYW1lIGlzbid0IHJlY29nbml6ZWQgYXMgYSBjb21wcmVzc2lvbiBhbGdvcml0aG0gYnkKICAgICogdGhlIGFsZ29yaXRobSBwYXJzZSBmdW5jdGlvbgogICAgKiBpbiBHUlBDIGNvcmUuICovCi0gIGlmICghZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2UobmFtZV9zdHIsIG5hbWVfbGVuLCBhbGdvcml0aG1fdmFsdWUpKSB7CisgIGlmKCFncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9wYXJzZShuYW1lX3NsaWNlLCBhbGdvcml0aG1fdmFsdWUpKSB7CisgICAgdG1wX3N0ciA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcobmFtZV9zbGljZSk7CiAgICAgcmJfcmFpc2UocmJfZU5hbWVFcnJvciwgIkludmFsaWQgY29tcHJlc3Npb24gYWxnb3JpdGhtIG5hbWU6ICVzIiwKLSAgICAgICAgICAgICBTdHJpbmdWYWx1ZUNTdHIoYWxnb3JpdGhtX25hbWVfYXNfc3RyaW5nKSk7CisgICAgICAgICAgICAgdG1wX3N0cik7CiAgIH0KKworICBncnBjX3NsaWNlX3VucmVmKG5hbWVfc2xpY2UpOwogfQogCiAvKiBJbmRpY2F0ZXMgd2hldGhlciBhIGdpdmVuIGFsZ29yaXRobSBpcyBlbmFibGVkIG9uIHRoaXMgaW5zdGFuY2UsIGdpdmVuIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL3J1YnkvZXh0L2dycGMvcmJfZ3JwY19pbXBvcnRzLmdlbmVyYXRlZC5jIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfZ3JwY19pbXBvcnRzLmdlbmVyYXRlZC5jCmluZGV4IGIyZDUzNmUuLmQ4ZDc2Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2dycGNfaW1wb3J0cy5nZW5lcmF0ZWQuYworKysgYi9zcmMvcnVieS9leHQvZ3JwYy9yYl9ncnBjX2ltcG9ydHMuZ2VuZXJhdGVkLmMKQEAgLTE3OSwxNyArMTc5LDMwIEBACiBncnBjX3NsaWNlX25ld193aXRoX3VzZXJfZGF0YV90eXBlIGdycGNfc2xpY2VfbmV3X3dpdGhfdXNlcl9kYXRhX2ltcG9ydDsKIGdycGNfc2xpY2VfbmV3X3dpdGhfbGVuX3R5cGUgZ3JwY19zbGljZV9uZXdfd2l0aF9sZW5faW1wb3J0OwogZ3JwY19zbGljZV9tYWxsb2NfdHlwZSBncnBjX3NsaWNlX21hbGxvY19pbXBvcnQ7CitncnBjX3NsaWNlX2ludGVybl90eXBlIGdycGNfc2xpY2VfaW50ZXJuX2ltcG9ydDsKIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nX3R5cGUgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmdfaW1wb3J0OwogZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXJfdHlwZSBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcl9pbXBvcnQ7CiBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZ190eXBlIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nX2ltcG9ydDsKK2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyX3R5cGUgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19idWZmZXJfaW1wb3J0OwogZ3JwY19zbGljZV9zdWJfdHlwZSBncnBjX3NsaWNlX3N1Yl9pbXBvcnQ7CiBncnBjX3NsaWNlX3N1Yl9ub19yZWZfdHlwZSBncnBjX3NsaWNlX3N1Yl9ub19yZWZfaW1wb3J0OwogZ3JwY19zbGljZV9zcGxpdF90YWlsX3R5cGUgZ3JwY19zbGljZV9zcGxpdF90YWlsX2ltcG9ydDsKIGdycGNfc2xpY2Vfc3BsaXRfaGVhZF90eXBlIGdycGNfc2xpY2Vfc3BsaXRfaGVhZF9pbXBvcnQ7Ci1ncHJfZW1wdHlfc2xpY2VfdHlwZSBncHJfZW1wdHlfc2xpY2VfaW1wb3J0OworZ3JwY19lbXB0eV9zbGljZV90eXBlIGdycGNfZW1wdHlfc2xpY2VfaW1wb3J0OworZ3JwY19zbGljZV9kZWZhdWx0X2hhc2hfaW1wbF90eXBlIGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGxfaW1wb3J0OworZ3JwY19zbGljZV9kZWZhdWx0X2VxX2ltcGxfdHlwZSBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbF9pbXBvcnQ7CitncnBjX3NsaWNlX2VxX3R5cGUgZ3JwY19zbGljZV9lcV9pbXBvcnQ7CiBncnBjX3NsaWNlX2NtcF90eXBlIGdycGNfc2xpY2VfY21wX2ltcG9ydDsKIGdycGNfc2xpY2Vfc3RyX2NtcF90eXBlIGdycGNfc2xpY2Vfc3RyX2NtcF9pbXBvcnQ7CitncnBjX3NsaWNlX2J1Zl9jbXBfdHlwZSBncnBjX3NsaWNlX2J1Zl9jbXBfaW1wb3J0OworZ3JwY19zbGljZV9idWZfc3RhcnRfZXFfdHlwZSBncnBjX3NsaWNlX2J1Zl9zdGFydF9lcV9pbXBvcnQ7CitncnBjX3NsaWNlX3JjaHJfdHlwZSBncnBjX3NsaWNlX3JjaHJfaW1wb3J0OworZ3JwY19zbGljZV9jaHJfdHlwZSBncnBjX3NsaWNlX2Nocl9pbXBvcnQ7CitncnBjX3NsaWNlX3NsaWNlX3R5cGUgZ3JwY19zbGljZV9zbGljZV9pbXBvcnQ7CitncnBjX3NsaWNlX2hhc2hfdHlwZSBncnBjX3NsaWNlX2hhc2hfaW1wb3J0OwogZ3JwY19zbGljZV9pc19lcXVpdmFsZW50X3R5cGUgZ3JwY19zbGljZV9pc19lcXVpdmFsZW50X2ltcG9ydDsKK2dycGNfc2xpY2VfZHVwX3R5cGUgZ3JwY19zbGljZV9kdXBfaW1wb3J0OworZ3JwY19zbGljZV90b19jX3N0cmluZ190eXBlIGdycGNfc2xpY2VfdG9fY19zdHJpbmdfaW1wb3J0OwogZ3JwY19zbGljZV9idWZmZXJfaW5pdF90eXBlIGdycGNfc2xpY2VfYnVmZmVyX2luaXRfaW1wb3J0OwogZ3JwY19zbGljZV9idWZmZXJfZGVzdHJveV90eXBlIGdycGNfc2xpY2VfYnVmZmVyX2Rlc3Ryb3lfaW1wb3J0OwogZ3JwY19zbGljZV9idWZmZXJfYWRkX3R5cGUgZ3JwY19zbGljZV9idWZmZXJfYWRkX2ltcG9ydDsKQEAgLTQ1NywxNyArNDcwLDMwIEBACiAgIGdycGNfc2xpY2VfbmV3X3dpdGhfdXNlcl9kYXRhX2ltcG9ydCA9IChncnBjX3NsaWNlX25ld193aXRoX3VzZXJfZGF0YV90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9uZXdfd2l0aF91c2VyX2RhdGEiKTsKICAgZ3JwY19zbGljZV9uZXdfd2l0aF9sZW5faW1wb3J0ID0gKGdycGNfc2xpY2VfbmV3X3dpdGhfbGVuX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX25ld193aXRoX2xlbiIpOwogICBncnBjX3NsaWNlX21hbGxvY19pbXBvcnQgPSAoZ3JwY19zbGljZV9tYWxsb2NfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfbWFsbG9jIik7CisgIGdycGNfc2xpY2VfaW50ZXJuX2ltcG9ydCA9IChncnBjX3NsaWNlX2ludGVybl90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9pbnRlcm4iKTsKICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmdfaW1wb3J0ID0gKGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyIpOwogICBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcl9pbXBvcnQgPSAoZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXJfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfZnJvbV9jb3BpZWRfYnVmZmVyIik7CiAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nX2ltcG9ydCA9IChncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZ190eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmciKTsKKyAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19idWZmZXJfaW1wb3J0ID0gKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlciIpOwogICBncnBjX3NsaWNlX3N1Yl9pbXBvcnQgPSAoZ3JwY19zbGljZV9zdWJfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2Vfc3ViIik7CiAgIGdycGNfc2xpY2Vfc3ViX25vX3JlZl9pbXBvcnQgPSAoZ3JwY19zbGljZV9zdWJfbm9fcmVmX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX3N1Yl9ub19yZWYiKTsKICAgZ3JwY19zbGljZV9zcGxpdF90YWlsX2ltcG9ydCA9IChncnBjX3NsaWNlX3NwbGl0X3RhaWxfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2Vfc3BsaXRfdGFpbCIpOwogICBncnBjX3NsaWNlX3NwbGl0X2hlYWRfaW1wb3J0ID0gKGdycGNfc2xpY2Vfc3BsaXRfaGVhZF90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9zcGxpdF9oZWFkIik7Ci0gIGdwcl9lbXB0eV9zbGljZV9pbXBvcnQgPSAoZ3ByX2VtcHR5X3NsaWNlX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncHJfZW1wdHlfc2xpY2UiKTsKKyAgZ3JwY19lbXB0eV9zbGljZV9pbXBvcnQgPSAoZ3JwY19lbXB0eV9zbGljZV90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19lbXB0eV9zbGljZSIpOworICBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsX2ltcG9ydCA9IChncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsIik7CisgIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsX2ltcG9ydCA9IChncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbF90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9kZWZhdWx0X2VxX2ltcGwiKTsKKyAgZ3JwY19zbGljZV9lcV9pbXBvcnQgPSAoZ3JwY19zbGljZV9lcV90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9lcSIpOwogICBncnBjX3NsaWNlX2NtcF9pbXBvcnQgPSAoZ3JwY19zbGljZV9jbXBfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfY21wIik7CiAgIGdycGNfc2xpY2Vfc3RyX2NtcF9pbXBvcnQgPSAoZ3JwY19zbGljZV9zdHJfY21wX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX3N0cl9jbXAiKTsKKyAgZ3JwY19zbGljZV9idWZfY21wX2ltcG9ydCA9IChncnBjX3NsaWNlX2J1Zl9jbXBfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfYnVmX2NtcCIpOworICBncnBjX3NsaWNlX2J1Zl9zdGFydF9lcV9pbXBvcnQgPSAoZ3JwY19zbGljZV9idWZfc3RhcnRfZXFfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfYnVmX3N0YXJ0X2VxIik7CisgIGdycGNfc2xpY2VfcmNocl9pbXBvcnQgPSAoZ3JwY19zbGljZV9yY2hyX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX3JjaHIiKTsKKyAgZ3JwY19zbGljZV9jaHJfaW1wb3J0ID0gKGdycGNfc2xpY2VfY2hyX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2NociIpOworICBncnBjX3NsaWNlX3NsaWNlX2ltcG9ydCA9IChncnBjX3NsaWNlX3NsaWNlX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX3NsaWNlIik7CisgIGdycGNfc2xpY2VfaGFzaF9pbXBvcnQgPSAoZ3JwY19zbGljZV9oYXNoX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2hhc2giKTsKICAgZ3JwY19zbGljZV9pc19lcXVpdmFsZW50X2ltcG9ydCA9IChncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnRfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfaXNfZXF1aXZhbGVudCIpOworICBncnBjX3NsaWNlX2R1cF9pbXBvcnQgPSAoZ3JwY19zbGljZV9kdXBfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfZHVwIik7CisgIGdycGNfc2xpY2VfdG9fY19zdHJpbmdfaW1wb3J0ID0gKGdycGNfc2xpY2VfdG9fY19zdHJpbmdfdHlwZSkgR2V0UHJvY0FkZHJlc3MobGlicmFyeSwgImdycGNfc2xpY2VfdG9fY19zdHJpbmciKTsKICAgZ3JwY19zbGljZV9idWZmZXJfaW5pdF9pbXBvcnQgPSAoZ3JwY19zbGljZV9idWZmZXJfaW5pdF90eXBlKSBHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCAiZ3JwY19zbGljZV9idWZmZXJfaW5pdCIpOwogICBncnBjX3NsaWNlX2J1ZmZlcl9kZXN0cm95X2ltcG9ydCA9IChncnBjX3NsaWNlX2J1ZmZlcl9kZXN0cm95X3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2J1ZmZlcl9kZXN0cm95Iik7CiAgIGdycGNfc2xpY2VfYnVmZmVyX2FkZF9pbXBvcnQgPSAoZ3JwY19zbGljZV9idWZmZXJfYWRkX3R5cGUpIEdldFByb2NBZGRyZXNzKGxpYnJhcnksICJncnBjX3NsaWNlX2J1ZmZlcl9hZGQiKTsKZGlmZiAtLWdpdCBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2dycGNfaW1wb3J0cy5nZW5lcmF0ZWQuaCBiL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX2dycGNfaW1wb3J0cy5nZW5lcmF0ZWQuaAppbmRleCA0ZjQ5NmI3Li40ZWFiOTYzIDEwMDY0NAotLS0gYS9zcmMvcnVieS9leHQvZ3JwYy9yYl9ncnBjX2ltcG9ydHMuZ2VuZXJhdGVkLmgKKysrIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfZ3JwY19pbXBvcnRzLmdlbmVyYXRlZC5oCkBAIC0xNzYsNyArMTc2LDcgQEAKIHR5cGVkZWYgdm9pZCgqY2Vuc3VzX3JlY29yZF92YWx1ZXNfdHlwZSkoY2Vuc3VzX2NvbnRleHQgKmNvbnRleHQsIGNlbnN1c192YWx1ZSAqdmFsdWVzLCBzaXplX3QgbnZhbHVlcyk7CiBleHRlcm4gY2Vuc3VzX3JlY29yZF92YWx1ZXNfdHlwZSBjZW5zdXNfcmVjb3JkX3ZhbHVlc19pbXBvcnQ7CiAjZGVmaW5lIGNlbnN1c19yZWNvcmRfdmFsdWVzIGNlbnN1c19yZWNvcmRfdmFsdWVzX2ltcG9ydAotdHlwZWRlZiBpbnQoKmdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlX3R5cGUpKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gKmFsZ29yaXRobSk7Cit0eXBlZGVmIGludCgqZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2VfdHlwZSkoZ3JwY19zbGljZSB2YWx1ZSwgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gKmFsZ29yaXRobSk7CiBleHRlcm4gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2VfdHlwZSBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9wYXJzZV9pbXBvcnQ7CiAjZGVmaW5lIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3BhcnNlX2ltcG9ydAogdHlwZWRlZiBpbnQoKmdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX25hbWVfdHlwZSkoZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gYWxnb3JpdGhtLCBjaGFyICoqbmFtZSk7CkBAIC0yNTQsNyArMjU0LDcgQEAKIHR5cGVkZWYgdm9pZCgqZ3JwY19jaGFubmVsX3dhdGNoX2Nvbm5lY3Rpdml0eV9zdGF0ZV90eXBlKShncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGdycGNfY29ubmVjdGl2aXR5X3N0YXRlIGxhc3Rfb2JzZXJ2ZWRfc3RhdGUsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwgZ3JwY19jb21wbGV0aW9uX3F1ZXVlICpjcSwgdm9pZCAqdGFnKTsKIGV4dGVybiBncnBjX2NoYW5uZWxfd2F0Y2hfY29ubmVjdGl2aXR5X3N0YXRlX3R5cGUgZ3JwY19jaGFubmVsX3dhdGNoX2Nvbm5lY3Rpdml0eV9zdGF0ZV9pbXBvcnQ7CiAjZGVmaW5lIGdycGNfY2hhbm5lbF93YXRjaF9jb25uZWN0aXZpdHlfc3RhdGUgZ3JwY19jaGFubmVsX3dhdGNoX2Nvbm5lY3Rpdml0eV9zdGF0ZV9pbXBvcnQKLXR5cGVkZWYgZ3JwY19jYWxsICooKmdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF90eXBlKShncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGdycGNfY2FsbCAqcGFyZW50X2NhbGwsIHVpbnQzMl90IHByb3BhZ2F0aW9uX21hc2ssIGdycGNfY29tcGxldGlvbl9xdWV1ZSAqY29tcGxldGlvbl9xdWV1ZSwgY29uc3QgY2hhciAqbWV0aG9kLCBjb25zdCBjaGFyICpob3N0LCBncHJfdGltZXNwZWMgZGVhZGxpbmUsIHZvaWQgKnJlc2VydmVkKTsKK3R5cGVkZWYgZ3JwY19jYWxsICooKmdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF90eXBlKShncnBjX2NoYW5uZWwgKmNoYW5uZWwsIGdycGNfY2FsbCAqcGFyZW50X2NhbGwsIHVpbnQzMl90IHByb3BhZ2F0aW9uX21hc2ssIGdycGNfY29tcGxldGlvbl9xdWV1ZSAqY29tcGxldGlvbl9xdWV1ZSwgZ3JwY19zbGljZSBtZXRob2QsIGNvbnN0IGdycGNfc2xpY2UgKmhvc3QsIGdwcl90aW1lc3BlYyBkZWFkbGluZSwgdm9pZCAqcmVzZXJ2ZWQpOwogZXh0ZXJuIGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF90eXBlIGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbF9pbXBvcnQ7CiAjZGVmaW5lIGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGxfaW1wb3J0CiB0eXBlZGVmIHZvaWQoKmdycGNfY2hhbm5lbF9waW5nX3R5cGUpKGdycGNfY2hhbm5lbCAqY2hhbm5lbCwgZ3JwY19jb21wbGV0aW9uX3F1ZXVlICpjcSwgdm9pZCAqdGFnLCB2b2lkICpyZXNlcnZlZCk7CkBAIC0zMzgsMTMgKzMzOCwxMyBAQAogdHlwZWRlZiBpbnQoKmdycGNfdHJhY2VyX3NldF9lbmFibGVkX3R5cGUpKGNvbnN0IGNoYXIgKm5hbWUsIGludCBlbmFibGVkKTsKIGV4dGVybiBncnBjX3RyYWNlcl9zZXRfZW5hYmxlZF90eXBlIGdycGNfdHJhY2VyX3NldF9lbmFibGVkX2ltcG9ydDsKICNkZWZpbmUgZ3JwY190cmFjZXJfc2V0X2VuYWJsZWQgZ3JwY190cmFjZXJfc2V0X2VuYWJsZWRfaW1wb3J0Ci10eXBlZGVmIGludCgqZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsX3R5cGUpKGNvbnN0IGNoYXIgKmtleSwgc2l6ZV90IGxlbmd0aCk7Cit0eXBlZGVmIGludCgqZ3JwY19oZWFkZXJfa2V5X2lzX2xlZ2FsX3R5cGUpKGdycGNfc2xpY2Ugc2xpY2UpOwogZXh0ZXJuIGdycGNfaGVhZGVyX2tleV9pc19sZWdhbF90eXBlIGdycGNfaGVhZGVyX2tleV9pc19sZWdhbF9pbXBvcnQ7CiAjZGVmaW5lIGdycGNfaGVhZGVyX2tleV9pc19sZWdhbCBncnBjX2hlYWRlcl9rZXlfaXNfbGVnYWxfaW1wb3J0Ci10eXBlZGVmIGludCgqZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsX3R5cGUpKGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuZ3RoKTsKK3R5cGVkZWYgaW50KCpncnBjX2hlYWRlcl9ub25iaW5fdmFsdWVfaXNfbGVnYWxfdHlwZSkoZ3JwY19zbGljZSBzbGljZSk7CiBleHRlcm4gZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsX3R5cGUgZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsX2ltcG9ydDsKICNkZWZpbmUgZ3JwY19oZWFkZXJfbm9uYmluX3ZhbHVlX2lzX2xlZ2FsIGdycGNfaGVhZGVyX25vbmJpbl92YWx1ZV9pc19sZWdhbF9pbXBvcnQKLXR5cGVkZWYgaW50KCpncnBjX2lzX2JpbmFyeV9oZWFkZXJfdHlwZSkoY29uc3QgY2hhciAqa2V5LCBzaXplX3QgbGVuZ3RoKTsKK3R5cGVkZWYgaW50KCpncnBjX2lzX2JpbmFyeV9oZWFkZXJfdHlwZSkoZ3JwY19zbGljZSBzbGljZSk7CiBleHRlcm4gZ3JwY19pc19iaW5hcnlfaGVhZGVyX3R5cGUgZ3JwY19pc19iaW5hcnlfaGVhZGVyX2ltcG9ydDsKICNkZWZpbmUgZ3JwY19pc19iaW5hcnlfaGVhZGVyIGdycGNfaXNfYmluYXJ5X2hlYWRlcl9pbXBvcnQKIHR5cGVkZWYgY29uc3QgY2hhciAqKCpncnBjX2NhbGxfZXJyb3JfdG9fc3RyaW5nX3R5cGUpKGdycGNfY2FsbF9lcnJvciBlcnJvcik7CkBAIC00ODgsNiArNDg4LDkgQEAKIHR5cGVkZWYgZ3JwY19zbGljZSgqZ3JwY19zbGljZV9tYWxsb2NfdHlwZSkoc2l6ZV90IGxlbmd0aCk7CiBleHRlcm4gZ3JwY19zbGljZV9tYWxsb2NfdHlwZSBncnBjX3NsaWNlX21hbGxvY19pbXBvcnQ7CiAjZGVmaW5lIGdycGNfc2xpY2VfbWFsbG9jIGdycGNfc2xpY2VfbWFsbG9jX2ltcG9ydAordHlwZWRlZiBncnBjX3NsaWNlKCpncnBjX3NsaWNlX2ludGVybl90eXBlKShncnBjX3NsaWNlIHNsaWNlKTsKK2V4dGVybiBncnBjX3NsaWNlX2ludGVybl90eXBlIGdycGNfc2xpY2VfaW50ZXJuX2ltcG9ydDsKKyNkZWZpbmUgZ3JwY19zbGljZV9pbnRlcm4gZ3JwY19zbGljZV9pbnRlcm5faW1wb3J0CiB0eXBlZGVmIGdycGNfc2xpY2UoKmdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nX3R5cGUpKGNvbnN0IGNoYXIgKnNvdXJjZSk7CiBleHRlcm4gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmdfdHlwZSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZ19pbXBvcnQ7CiAjZGVmaW5lIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nX2ltcG9ydApAQCAtNDk3LDYgKzUwMCw5IEBACiB0eXBlZGVmIGdycGNfc2xpY2UoKmdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nX3R5cGUpKGNvbnN0IGNoYXIgKnNvdXJjZSk7CiBleHRlcm4gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmdfdHlwZSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZ19pbXBvcnQ7CiAjZGVmaW5lIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nX2ltcG9ydAordHlwZWRlZiBncnBjX3NsaWNlKCpncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlcl90eXBlKShjb25zdCB2b2lkICpzb3VyY2UsIHNpemVfdCBsZW4pOworZXh0ZXJuIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyX3R5cGUgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19idWZmZXJfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlciBncnBjX3NsaWNlX2Zyb21fc3RhdGljX2J1ZmZlcl9pbXBvcnQKIHR5cGVkZWYgZ3JwY19zbGljZSgqZ3JwY19zbGljZV9zdWJfdHlwZSkoZ3JwY19zbGljZSBzLCBzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogZXh0ZXJuIGdycGNfc2xpY2Vfc3ViX3R5cGUgZ3JwY19zbGljZV9zdWJfaW1wb3J0OwogI2RlZmluZSBncnBjX3NsaWNlX3N1YiBncnBjX3NsaWNlX3N1Yl9pbXBvcnQKQEAgLTUwOSwxOCArNTE1LDUxIEBACiB0eXBlZGVmIGdycGNfc2xpY2UoKmdycGNfc2xpY2Vfc3BsaXRfaGVhZF90eXBlKShncnBjX3NsaWNlICpzLCBzaXplX3Qgc3BsaXQpOwogZXh0ZXJuIGdycGNfc2xpY2Vfc3BsaXRfaGVhZF90eXBlIGdycGNfc2xpY2Vfc3BsaXRfaGVhZF9pbXBvcnQ7CiAjZGVmaW5lIGdycGNfc2xpY2Vfc3BsaXRfaGVhZCBncnBjX3NsaWNlX3NwbGl0X2hlYWRfaW1wb3J0Ci10eXBlZGVmIGdycGNfc2xpY2UoKmdwcl9lbXB0eV9zbGljZV90eXBlKSh2b2lkKTsKLWV4dGVybiBncHJfZW1wdHlfc2xpY2VfdHlwZSBncHJfZW1wdHlfc2xpY2VfaW1wb3J0OwotI2RlZmluZSBncHJfZW1wdHlfc2xpY2UgZ3ByX2VtcHR5X3NsaWNlX2ltcG9ydAordHlwZWRlZiBncnBjX3NsaWNlKCpncnBjX2VtcHR5X3NsaWNlX3R5cGUpKHZvaWQpOworZXh0ZXJuIGdycGNfZW1wdHlfc2xpY2VfdHlwZSBncnBjX2VtcHR5X3NsaWNlX2ltcG9ydDsKKyNkZWZpbmUgZ3JwY19lbXB0eV9zbGljZSBncnBjX2VtcHR5X3NsaWNlX2ltcG9ydAordHlwZWRlZiB1aW50MzJfdCgqZ3JwY19zbGljZV9kZWZhdWx0X2hhc2hfaW1wbF90eXBlKShncnBjX3NsaWNlIHMpOworZXh0ZXJuIGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGxfdHlwZSBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsX2ltcG9ydDsKKyNkZWZpbmUgZ3JwY19zbGljZV9kZWZhdWx0X2hhc2hfaW1wbCBncnBjX3NsaWNlX2RlZmF1bHRfaGFzaF9pbXBsX2ltcG9ydAordHlwZWRlZiBpbnQoKmdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsX3R5cGUpKGdycGNfc2xpY2UgYSwgZ3JwY19zbGljZSBiKTsKK2V4dGVybiBncnBjX3NsaWNlX2RlZmF1bHRfZXFfaW1wbF90eXBlIGdycGNfc2xpY2VfZGVmYXVsdF9lcV9pbXBsX2ltcG9ydDsKKyNkZWZpbmUgZ3JwY19zbGljZV9kZWZhdWx0X2VxX2ltcGwgZ3JwY19zbGljZV9kZWZhdWx0X2VxX2ltcGxfaW1wb3J0Cit0eXBlZGVmIGludCgqZ3JwY19zbGljZV9lcV90eXBlKShncnBjX3NsaWNlIGEsIGdycGNfc2xpY2UgYik7CitleHRlcm4gZ3JwY19zbGljZV9lcV90eXBlIGdycGNfc2xpY2VfZXFfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX2VxIGdycGNfc2xpY2VfZXFfaW1wb3J0CiB0eXBlZGVmIGludCgqZ3JwY19zbGljZV9jbXBfdHlwZSkoZ3JwY19zbGljZSBhLCBncnBjX3NsaWNlIGIpOwogZXh0ZXJuIGdycGNfc2xpY2VfY21wX3R5cGUgZ3JwY19zbGljZV9jbXBfaW1wb3J0OwogI2RlZmluZSBncnBjX3NsaWNlX2NtcCBncnBjX3NsaWNlX2NtcF9pbXBvcnQKIHR5cGVkZWYgaW50KCpncnBjX3NsaWNlX3N0cl9jbXBfdHlwZSkoZ3JwY19zbGljZSBhLCBjb25zdCBjaGFyICpiKTsKIGV4dGVybiBncnBjX3NsaWNlX3N0cl9jbXBfdHlwZSBncnBjX3NsaWNlX3N0cl9jbXBfaW1wb3J0OwogI2RlZmluZSBncnBjX3NsaWNlX3N0cl9jbXAgZ3JwY19zbGljZV9zdHJfY21wX2ltcG9ydAordHlwZWRlZiBpbnQoKmdycGNfc2xpY2VfYnVmX2NtcF90eXBlKShncnBjX3NsaWNlIGEsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBibGVuKTsKK2V4dGVybiBncnBjX3NsaWNlX2J1Zl9jbXBfdHlwZSBncnBjX3NsaWNlX2J1Zl9jbXBfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX2J1Zl9jbXAgZ3JwY19zbGljZV9idWZfY21wX2ltcG9ydAordHlwZWRlZiBpbnQoKmdycGNfc2xpY2VfYnVmX3N0YXJ0X2VxX3R5cGUpKGdycGNfc2xpY2UgYSwgY29uc3Qgdm9pZCAqYiwgc2l6ZV90IGJsZW4pOworZXh0ZXJuIGdycGNfc2xpY2VfYnVmX3N0YXJ0X2VxX3R5cGUgZ3JwY19zbGljZV9idWZfc3RhcnRfZXFfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX2J1Zl9zdGFydF9lcSBncnBjX3NsaWNlX2J1Zl9zdGFydF9lcV9pbXBvcnQKK3R5cGVkZWYgaW50KCpncnBjX3NsaWNlX3JjaHJfdHlwZSkoZ3JwY19zbGljZSBzLCBjaGFyIGMpOworZXh0ZXJuIGdycGNfc2xpY2VfcmNocl90eXBlIGdycGNfc2xpY2VfcmNocl9pbXBvcnQ7CisjZGVmaW5lIGdycGNfc2xpY2VfcmNociBncnBjX3NsaWNlX3JjaHJfaW1wb3J0Cit0eXBlZGVmIGludCgqZ3JwY19zbGljZV9jaHJfdHlwZSkoZ3JwY19zbGljZSBzLCBjaGFyIGMpOworZXh0ZXJuIGdycGNfc2xpY2VfY2hyX3R5cGUgZ3JwY19zbGljZV9jaHJfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX2NociBncnBjX3NsaWNlX2Nocl9pbXBvcnQKK3R5cGVkZWYgaW50KCpncnBjX3NsaWNlX3NsaWNlX3R5cGUpKGdycGNfc2xpY2UgaGF5c3RhY2ssIGdycGNfc2xpY2UgbmVlZGxlKTsKK2V4dGVybiBncnBjX3NsaWNlX3NsaWNlX3R5cGUgZ3JwY19zbGljZV9zbGljZV9pbXBvcnQ7CisjZGVmaW5lIGdycGNfc2xpY2Vfc2xpY2UgZ3JwY19zbGljZV9zbGljZV9pbXBvcnQKK3R5cGVkZWYgdWludDMyX3QoKmdycGNfc2xpY2VfaGFzaF90eXBlKShncnBjX3NsaWNlIHMpOworZXh0ZXJuIGdycGNfc2xpY2VfaGFzaF90eXBlIGdycGNfc2xpY2VfaGFzaF9pbXBvcnQ7CisjZGVmaW5lIGdycGNfc2xpY2VfaGFzaCBncnBjX3NsaWNlX2hhc2hfaW1wb3J0CiB0eXBlZGVmIGludCgqZ3JwY19zbGljZV9pc19lcXVpdmFsZW50X3R5cGUpKGdycGNfc2xpY2UgYSwgZ3JwY19zbGljZSBiKTsKIGV4dGVybiBncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnRfdHlwZSBncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnRfaW1wb3J0OwogI2RlZmluZSBncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnQgZ3JwY19zbGljZV9pc19lcXVpdmFsZW50X2ltcG9ydAordHlwZWRlZiBncnBjX3NsaWNlKCpncnBjX3NsaWNlX2R1cF90eXBlKShncnBjX3NsaWNlIGEpOworZXh0ZXJuIGdycGNfc2xpY2VfZHVwX3R5cGUgZ3JwY19zbGljZV9kdXBfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX2R1cCBncnBjX3NsaWNlX2R1cF9pbXBvcnQKK3R5cGVkZWYgY2hhciAqKCpncnBjX3NsaWNlX3RvX2Nfc3RyaW5nX3R5cGUpKGdycGNfc2xpY2Ugcyk7CitleHRlcm4gZ3JwY19zbGljZV90b19jX3N0cmluZ190eXBlIGdycGNfc2xpY2VfdG9fY19zdHJpbmdfaW1wb3J0OworI2RlZmluZSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nIGdycGNfc2xpY2VfdG9fY19zdHJpbmdfaW1wb3J0CiB0eXBlZGVmIHZvaWQoKmdycGNfc2xpY2VfYnVmZmVyX2luaXRfdHlwZSkoZ3JwY19zbGljZV9idWZmZXIgKnNiKTsKIGV4dGVybiBncnBjX3NsaWNlX2J1ZmZlcl9pbml0X3R5cGUgZ3JwY19zbGljZV9idWZmZXJfaW5pdF9pbXBvcnQ7CiAjZGVmaW5lIGdycGNfc2xpY2VfYnVmZmVyX2luaXQgZ3JwY19zbGljZV9idWZmZXJfaW5pdF9pbXBvcnQKZGlmZiAtLWdpdCBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX3NlcnZlci5jIGIvc3JjL3J1YnkvZXh0L2dycGMvcmJfc2VydmVyLmMKaW5kZXggYzdiMTEyYy4uN2IyZjU3NzQgMTAwNjQ0Ci0tLSBhL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX3NlcnZlci5jCisrKyBiL3NyYy9ydWJ5L2V4dC9ncnBjL3JiX3NlcnZlci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAicmJfY2hhbm5lbF9hcmdzLmgiCiAjaW5jbHVkZSAicmJfY29tcGxldGlvbl9xdWV1ZS5oIgogI2luY2x1ZGUgInJiX3NlcnZlcl9jcmVkZW50aWFscy5oIgorI2luY2x1ZGUgInJiX2J5dGVfYnVmZmVyLmgiCiAjaW5jbHVkZSAicmJfZ3JwYy5oIgogCiAvKiBncnBjX3JiX2NTZXJ2ZXIgaXMgdGhlIHJ1YnkgY2xhc3MgdGhhdCBwcm94aWVzIGdycGNfc2VydmVyLiAqLwpAQCAtMTY2LDggKzE2Nyw2IEBACiAgIE1FTVpFUk8oc3QsIHJlcXVlc3RfY2FsbF9zdGFjaywgMSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmc3QtPm1kX2FyeSk7CiAgIGdycGNfY2FsbF9kZXRhaWxzX2luaXQoJnN0LT5kZXRhaWxzKTsKLSAgc3QtPmRldGFpbHMubWV0aG9kID0gTlVMTDsKLSAgc3QtPmRldGFpbHMuaG9zdCA9IE5VTEw7CiB9CiAKIC8qIGdycGNfcmVxdWVzdF9jYWxsX3N0YWNrX2NsZWFudXAgZW5zdXJlcyB0aGUgcmVxdWVzdF9jYWxsX3N0YWNrIGlzIHByb3Blcmx5CkBAIC0xOTEsNiArMTkwLDcgQEAKICAgdm9pZCAqdGFnID0gKHZvaWQqKSZzdDsKICAgZ3JwY19jb21wbGV0aW9uX3F1ZXVlICpjYWxsX3F1ZXVlID0gZ3JwY19jb21wbGV0aW9uX3F1ZXVlX2NyZWF0ZShOVUxMKTsKICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lOworCiAgIFR5cGVkRGF0YV9HZXRfU3RydWN0KHNlbGYsIGdycGNfcmJfc2VydmVyLCAmZ3JwY19yYl9zZXJ2ZXJfZGF0YV90eXBlLCBzKTsKICAgaWYgKHMtPndyYXBwZWQgPT0gTlVMTCkgewogICAgIHJiX3JhaXNlKHJiX2VSdW50aW1lRXJyb3IsICJkZXN0cm95ZWQhIik7CkBAIC0yMTgsMTEgKzIxOCwxMyBAQAogICAgIHJldHVybiBRbmlsOwogICB9CiAKKworCiAgIC8qIGJ1aWxkIHRoZSBOZXdTZXJ2ZXJScGMgc3RydWN0IHJlc3VsdCAqLwogICBkZWFkbGluZSA9IGdwcl9jb252ZXJ0X2Nsb2NrX3R5cGUoc3QuZGV0YWlscy5kZWFkbGluZSwgR1BSX0NMT0NLX1JFQUxUSU1FKTsKICAgcmVzdWx0ID0gcmJfc3RydWN0X25ldygKLSAgICAgIGdycGNfcmJfc05ld1NlcnZlclJwYywgcmJfc3RyX25ldzIoc3QuZGV0YWlscy5tZXRob2QpLAotICAgICAgcmJfc3RyX25ldzIoc3QuZGV0YWlscy5ob3N0KSwKKyAgICAgIGdycGNfcmJfc05ld1NlcnZlclJwYywgZ3JwY19yYl9zbGljZV90b19ydWJ5X3N0cmluZyhzdC5kZXRhaWxzLm1ldGhvZCksCisgICAgICBncnBjX3JiX3NsaWNlX3RvX3J1Ynlfc3RyaW5nKHN0LmRldGFpbHMuaG9zdCksCiAgICAgICByYl9mdW5jYWxsKHJiX2NUaW1lLCBpZF9hdCwgMiwgSU5UMk5VTShkZWFkbGluZS50dl9zZWMpLAogICAgICAgICAgICAgICAgICBJTlQyTlVNKGRlYWRsaW5lLnR2X25zZWMgLyAxMDAwKSksCiAgICAgICBncnBjX3JiX21kX2FyeV90b19oKCZzdC5tZF9hcnkpLCBncnBjX3JiX3dyYXBfY2FsbChjYWxsLCBjYWxsX3F1ZXVlKSwKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9iYWRfY2xpZW50L3Rlc3RzL2xhcmdlX21ldGFkYXRhLmMgYi90ZXN0L2NvcmUvYmFkX2NsaWVudC90ZXN0cy9sYXJnZV9tZXRhZGF0YS5jCmluZGV4IDljODA0ZTcuLmY2NzI3NzYgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9iYWRfY2xpZW50L3Rlc3RzL2xhcmdlX21ldGFkYXRhLmMKKysrIGIvdGVzdC9jb3JlL2JhZF9jbGllbnQvdGVzdHMvbGFyZ2VfbWV0YWRhdGEuYwpAQCAtMTI2LDggKzEyNiw4IEBACiAgIENRX0VYUEVDVF9DT01QTEVUSU9OKGNxdiwgdGFnKDEwMSksIDEpOwogICBjcV92ZXJpZnkoY3F2KTsKIAotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5ob3N0LCAibG9jYWxob3N0IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vL2JhciIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMuaG9zdCwgImxvY2FsaG9zdCIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2Zvby9iYXIiKSk7CiAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwogICBncnBjX2NhbGxfZGV0YWlsc19kZXN0cm95KCZjYWxsX2RldGFpbHMpOwpAQCAtMTUzLDE2ICsxNTMsMTQgQEAKICAgQ1FfRVhQRUNUX0NPTVBMRVRJT04oY3F2LCB0YWcoMTAxKSwgMSk7CiAgIGNxX3ZlcmlmeShjcXYpOwogCi0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLmhvc3QsICJsb2NhbGhvc3QiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28vYmFyIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5ob3N0LCAibG9jYWxob3N0IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vL2JhciIpKTsKIAogICBjb25zdCBzaXplX3QgbWV0YWRhdGFfdmFsdWVfc2l6ZSA9IDE2ICogMTAyNDsKICAgZ3JwY19tZXRhZGF0YSBtZXRhOwotICBtZXRhLmtleSA9ICJrZXkiOwotICBtZXRhLnZhbHVlID0gZ3ByX21hbGxvYyhtZXRhZGF0YV92YWx1ZV9zaXplICsgMSk7Ci0gIG1lbXNldCgoY2hhciAqKW1ldGEudmFsdWUsICdhJywgbWV0YWRhdGFfdmFsdWVfc2l6ZSk7Ci0gICgoY2hhciAqKW1ldGEudmFsdWUpW21ldGFkYXRhX3ZhbHVlX3NpemVdID0gMDsKLSAgbWV0YS52YWx1ZV9sZW5ndGggPSBtZXRhZGF0YV92YWx1ZV9zaXplOworICBtZXRhLmtleSA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXkiKTsKKyAgbWV0YS52YWx1ZSA9IGdycGNfc2xpY2VfbWFsbG9jKG1ldGFkYXRhX3ZhbHVlX3NpemUpOworICBtZW1zZXQoR1JQQ19TTElDRV9TVEFSVF9QVFIobWV0YS52YWx1ZSksICdhJywgbWV0YWRhdGFfdmFsdWVfc2l6ZSk7CiAKICAgZ3JwY19vcCBvcDsKICAgbWVtc2V0KCZvcCwgMCwgc2l6ZW9mKG9wKSk7CkBAIC0xNzYsNyArMTc0LDcgQEAKICAgQ1FfRVhQRUNUX0NPTVBMRVRJT04oY3F2LCB0YWcoMTAyKSwgMCk7ICAvLyBPcGVyYXRpb24gZmFpbHMuCiAgIGNxX3ZlcmlmeShjcXYpOwogCi0gIGdwcl9mcmVlKChjaGFyICopbWV0YS52YWx1ZSk7CisgIGdycGNfc2xpY2VfdW5yZWYobWV0YS52YWx1ZSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveSgmY2FsbF9kZXRhaWxzKTsKICAgZ3JwY19jYWxsX2Rlc3Ryb3kocyk7CkBAIC0xOTAsMjkgKzE4OCwyNiBAQAogICBncnBjX3NsaWNlX2J1ZmZlcl90cmltX2VuZChpbmNvbWluZywgMTMsICZsYXN0X2ZyYW1lX2J1ZmZlcik7CiAgIEdQUl9BU1NFUlQobGFzdF9mcmFtZV9idWZmZXIuY291bnQgPT0gMSk7CiAgIGdycGNfc2xpY2UgbGFzdF9mcmFtZSA9IGxhc3RfZnJhbWVfYnVmZmVyLnNsaWNlc1swXTsKLSAgLy8gQ29uc3RydWN0IGV4cGVjdGVkIGZyYW1lLgotICBncnBjX3NsaWNlIGV4cGVjdGVkID0gZ3JwY19zbGljZV9tYWxsb2MoMTMpOwotICB1aW50OF90ICpwID0gR1JQQ19TTElDRV9TVEFSVF9QVFIoZXhwZWN0ZWQpOwotICAvLyBMZW5ndGguCi0gICpwKysgPSAwOwotICAqcCsrID0gMDsKLSAgKnArKyA9IDQ7Ci0gIC8vIEZyYW1lIHR5cGUgKFJTVF9TVFJFQU0pLgotICAqcCsrID0gMzsKLSAgLy8gRmxhZ3MuCi0gICpwKysgPSAwOworICBjb25zdCB1aW50OF90ICpwID0gR1JQQ19TTElDRV9TVEFSVF9QVFIobGFzdF9mcmFtZSk7CisgIC8vIExlbmd0aCA9IDQKKyAgR1BSX0FTU0VSVCgqcCsrID09IDApOworICBHUFJfQVNTRVJUKCpwKysgPT0gMCk7CisgIEdQUl9BU1NFUlQoKnArKyA9PSA0KTsKKyAgLy8gRnJhbWUgdHlwZSAoUlNUX1NUUkVBTSkKKyAgR1BSX0FTU0VSVCgqcCsrID09IDMpOworICAvLyBGbGFncworICBHUFJfQVNTRVJUKCpwKysgPT0gMCk7CiAgIC8vIFN0cmVhbSBJRC4KLSAgKnArKyA9IDA7Ci0gICpwKysgPSAwOwotICAqcCsrID0gMDsKLSAgKnArKyA9IDE7Ci0gIC8vIFBheWxvYWQgKGVycm9yIGNvZGUpLgotICAqcCsrID0gMDsKLSAgKnArKyA9IDA7Ci0gICpwKysgPSAwOwotICAqcCsrID0gMTE7Ci0gIC8vIENvbXBhcmUgYWN0dWFsIGFuZCBleHBlY3RlZC4KLSAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2NtcChsYXN0X2ZyYW1lLCBleHBlY3RlZCkgPT0gMCk7CisgIEdQUl9BU1NFUlQoKnArKyA9PSAwKTsKKyAgR1BSX0FTU0VSVCgqcCsrID09IDApOworICBHUFJfQVNTRVJUKCpwKysgPT0gMCk7CisgIEdQUl9BU1NFUlQoKnArKyA9PSAxKTsKKyAgLy8gUGF5bG9hZCAoZXJyb3IgY29kZSkKKyAgR1BSX0FTU0VSVCgqcCsrID09IDApOworICBHUFJfQVNTRVJUKCpwKysgPT0gMCk7CisgIEdQUl9BU1NFUlQoKnArKyA9PSAwKTsKKyAgR1BSX0FTU0VSVCgqcCA9PSAwIHx8ICpwID09IDExKTsKKwogICBncnBjX3NsaWNlX2J1ZmZlcl9kZXN0cm95KCZsYXN0X2ZyYW1lX2J1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9iYWRfY2xpZW50L3Rlc3RzL3NpbXBsZV9yZXF1ZXN0LmMgYi90ZXN0L2NvcmUvYmFkX2NsaWVudC90ZXN0cy9zaW1wbGVfcmVxdWVzdC5jCmluZGV4IGMwOGFhNDAuLmRiMzFiYTYgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9iYWRfY2xpZW50L3Rlc3RzL3NpbXBsZV9yZXF1ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2JhZF9jbGllbnQvdGVzdHMvc2ltcGxlX3JlcXVlc3QuYwpAQCAtMTE3LDggKzExNyw4IEBACiAgIENRX0VYUEVDVF9DT01QTEVUSU9OKGNxdiwgdGFnKDEwMSksIDEpOwogICBjcV92ZXJpZnkoY3F2KTsKIAotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5ob3N0LCAibG9jYWxob3N0IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vL2JhciIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMuaG9zdCwgImxvY2FsaG9zdCIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2Zvby9iYXIiKSk7CiAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwogICBncnBjX2NhbGxfZGV0YWlsc19kZXN0cm95KCZjYWxsX2RldGFpbHMpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2JhZF9zc2wvYmFkX3NzbF90ZXN0LmMgYi90ZXN0L2NvcmUvYmFkX3NzbC9iYWRfc3NsX3Rlc3QuYwppbmRleCBmOGE5ZmU2Li43YTk5ZjU3IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvYmFkX3NzbC9iYWRfc3NsX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvYmFkX3NzbC9iYWRfc3NsX3Rlc3QuYwpAQCAtNTcsOCArNTcsNyBAQAogCiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBncnBjX21ldGFkYXRhX2FycmF5IHRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lID0gR1JQQ19USU1FT1VUX1NFQ09ORFNfVE9fREVBRExJTkUoNSk7CkBAIC04MCw5ICs3OSwxMCBAQAogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogCiAgIGNoYW5uZWwgPSBncnBjX3NlY3VyZV9jaGFubmVsX2NyZWF0ZShzc2xfY3JlZHMsIHRhcmdldCwgJmFyZ3MsIE5VTEwpOworICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiKTsKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChjaGFubmVsLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28iLCAiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBkZWFkbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLCAmaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSwgTlVMTCk7CiAKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICBvcCA9IG9wczsKQEAgLTk1LDEyICs5NSwxMSBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTE3LDcgKzExNiw3IEBACiAgIEdQUl9BU1NFUlQoc3RhdHVzICE9IEdSUENfU1RBVFVTX09LKTsKIAogICBncnBjX2NhbGxfZGVzdHJveShjKTsKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2NoYW5uZWwvY2hhbm5lbF9zdGFja190ZXN0LmMgYi90ZXN0L2NvcmUvY2hhbm5lbC9jaGFubmVsX3N0YWNrX3Rlc3QuYwppbmRleCAwODBjNTZmLi5kZDljNTQ0IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvY2hhbm5lbC9jaGFubmVsX3N0YWNrX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvY2hhbm5lbC9jaGFubmVsX3N0YWNrX3Rlc3QuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3RyaW5nX3V0aWwuaD4KIAorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL3Rlc3RfY29uZmlnLmgiCiAKIHN0YXRpYyBncnBjX2Vycm9yICpjaGFubmVsX2luaXRfZnVuYyhncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwKQEAgLTEyMCw3ICsxMjEsNyBAQAogICBpbnQgKmNoYW5uZWxfZGF0YTsKICAgaW50ICpjYWxsX2RhdGE7CiAgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7Ci0gIGdycGNfbWRzdHIgKnBhdGggPSBncnBjX21kc3RyX2Zyb21fc3RyaW5nKCIvc2VydmljZS9tZXRob2QiKTsKKyAgZ3JwY19zbGljZSBwYXRoID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9zZXJ2aWNlL21ldGhvZCIpOwogCiAgIGFyZy50eXBlID0gR1JQQ19BUkdfSU5URUdFUjsKICAgYXJnLmtleSA9ICJ0ZXN0X2tleSI7CkBAIC0xNTcsNyArMTU4LDcgQEAKIAogICBHUlBDX0NIQU5ORUxfU1RBQ0tfVU5SRUYoJmV4ZWNfY3R4LCBjaGFubmVsX3N0YWNrLCAiZG9uZSIpOwogCi0gIEdSUENfTURTVFJfVU5SRUYoJmV4ZWNfY3R4LCBwYXRoKTsKKyAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbCgmZXhlY19jdHgsIHBhdGgpOwogICBncnBjX2V4ZWNfY3R4X2ZpbmlzaCgmZXhlY19jdHgpOwogfQogCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvY2xpZW50X2NoYW5uZWwvbGJfcG9saWNpZXNfdGVzdC5jIGIvdGVzdC9jb3JlL2NsaWVudF9jaGFubmVsL2xiX3BvbGljaWVzX3Rlc3QuYwppbmRleCBmNDY5ODJhLi44MmU5MjhlIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvY2xpZW50X2NoYW5uZWwvbGJfcG9saWNpZXNfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9jbGllbnRfY2hhbm5lbC9sYl9wb2xpY2llc190ZXN0LmMKQEAgLTE1Nyw4ICsxNTcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdF9kYXRhIHsKICAgZ3JwY19tZXRhZGF0YV9hcnJheSBpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKLSAgY2hhciAqZGV0YWlsczsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHk7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9kZXRhaWxzICpjYWxsX2RldGFpbHM7CiB9IHJlcXVlc3RfZGF0YTsKQEAgLTI3Miw4ICsyNzEsNiBAQAogCiAgIGZvciAoaXRlcl9udW0gPSAwOyBpdGVyX251bSA8IHNwZWMtPm51bV9pdGVyczsgaXRlcl9udW0rKykgewogICAgIGNxX3ZlcmlmaWVyICpjcXYgPSBjcV92ZXJpZmllcl9jcmVhdGUoZi0+Y3EpOwotICAgIHJkYXRhLT5kZXRhaWxzID0gTlVMTDsKLSAgICByZGF0YS0+ZGV0YWlsc19jYXBhY2l0eSA9IDA7CiAgICAgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgZi0+bnVtX3NlcnZlcnM7IGkrKykgewpAQCAtMjk0LDggKzI5MSw5IEBACiAgICAgfQogICAgIG1lbXNldChzX3ZhbGlkLCAwLCBmLT5udW1fc2VydmVycyAqIHNpemVvZihpbnQpKTsKIAorICAgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnIiKTsKICAgICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYtPmNxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28iLCAiZm9vLnRlc3QuZ29vZ2xlLmZyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksICZob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CiAgICAgR1BSX0FTU0VSVChjKTsKICAgICBjb21wbGV0ZWRfY2xpZW50ID0gMDsKQEAgLTMxMiw3ICszMTAsOCBAQAogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgICAgb3ArKzsKICAgICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmcmRhdGEtPmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICAgJnJkYXRhLT5pbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC0zMjEsOCArMzIwLDYgQEAKICAgICAgICAgJnJkYXRhLT50cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmcmRhdGEtPnN0YXR1czsKICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmcmRhdGEtPmRldGFpbHM7Ci0gICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICAgJnJkYXRhLT5kZXRhaWxzX2NhcGFjaXR5OwogICAgIG9wLT5mbGFncyA9IDA7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICBvcCsrOwpAQCAtMzY1LDcgKzM2Miw4IEBACiAgICAgICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgICAgICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICAgIG9wKys7CkBAIC0zODQsMTIgKzM4MiwxMiBAQAogICAgICAgfQogICAgICAgY3FfdmVyaWZ5KGNxdik7CiAKLSAgICAgIGdwcl9sb2coR1BSX0RFQlVHLCAic3RhdHVzPSVkOyAlcyIsIHJkYXRhLT5zdGF0dXMsIHJkYXRhLT5kZXRhaWxzKTsKICAgICAgIEdQUl9BU1NFUlQocmRhdGEtPnN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgICAgIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAocmRhdGEtPmRldGFpbHMsICJ4eXoiKSk7Ci0gICAgICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKHJkYXRhLT5jYWxsX2RldGFpbHNbc19pZHhdLm1ldGhvZCwgIi9mb28iKSk7CisgICAgICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKHJkYXRhLT5kZXRhaWxzLCAieHl6IikpOwogICAgICAgR1BSX0FTU0VSVCgwID09Ci0gICAgICAgICAgICAgICAgIHN0cmNtcChyZGF0YS0+Y2FsbF9kZXRhaWxzW3NfaWR4XS5ob3N0LCAiZm9vLnRlc3QuZ29vZ2xlLmZyIikpOworICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX3N0cl9jbXAocmRhdGEtPmNhbGxfZGV0YWlsc1tzX2lkeF0ubWV0aG9kLCAiL2ZvbyIpKTsKKyAgICAgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAocmRhdGEtPmNhbGxfZGV0YWlsc1tzX2lkeF0uaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvby50ZXN0Lmdvb2dsZS5mciIpKTsKICAgICAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAxKTsKIAogICAgICAgZ3JwY19jYWxsX2Rlc3Ryb3koZi0+c2VydmVyX2NhbGxzW3NfaWR4XSk7CkBAIC00MjIsNyArNDIwLDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgZi0+bnVtX3NlcnZlcnM7IGkrKykgewogICAgICAgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveSgmcmRhdGEtPmNhbGxfZGV0YWlsc1tpXSk7CiAgICAgfQotICAgIGdwcl9mcmVlKHJkYXRhLT5kZXRhaWxzKTsKKyAgICBncnBjX3NsaWNlX3VucmVmKHJkYXRhLT5kZXRhaWxzKTsKICAgfQogCiAgIGdwcl9mcmVlKHNfdmFsaWQpOwpAQCAtNDU0LDEwICs0NTIsMTIgQEAKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKIAorICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyIik7CiAgIGZvciAoaSA9IDA7IGkgPCBjb25jdXJyZW50X2NhbGxzOyBpKyspIHsKLSAgICBjYWxsc1tpXSA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgICAgY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi0+Y3EsICIvZm9vIiwKLSAgICAgICAgImZvby50ZXN0Lmdvb2dsZS5mciIsIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOworICAgIGNhbGxzW2ldID0KKyAgICAgICAgZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYtPmNxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwgJmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpLCBOVUxMKTsKICAgICBHUFJfQVNTRVJUKGNhbGxzW2ldKTsKICAgICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goY2FsbHNbaV0sIG9wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkob3AgLSBvcHMpLCB0YWcoMSksCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvY2xpZW50X2NoYW5uZWwvc2V0X2luaXRpYWxfY29ubmVjdF9zdHJpbmdfdGVzdC5jIGIvdGVzdC9jb3JlL2NsaWVudF9jaGFubmVsL3NldF9pbml0aWFsX2Nvbm5lY3Rfc3RyaW5nX3Rlc3QuYwppbmRleCBiNzhiYTk4Li5mYzBhY2EwIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvY2xpZW50X2NoYW5uZWwvc2V0X2luaXRpYWxfY29ubmVjdF9zdHJpbmdfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9jbGllbnRfY2hhbm5lbC9zZXRfaW5pdGlhbF9jb25uZWN0X3N0cmluZ190ZXN0LmMKQEAgLTE0MSw5ICsxNDEsMTEgQEAKICAgfSBlbHNlIHsKICAgICBzdGF0ZS5jaGFubmVsID0gZ3JwY19pbnNlY3VyZV9jaGFubmVsX2NyZWF0ZShzdGF0ZS50YXJnZXQsIE5VTEwsIE5VTEwpOwogICB9CisgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJsb2NhbGhvc3QiKTsKICAgc3RhdGUuY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIHN0YXRlLmNoYW5uZWwsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBzdGF0ZS5jcSwgIi9TZXJ2aWNlL01ldGhvZCIsCi0gICAgICAibG9jYWxob3N0IiwgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CisgICAgICBzdGF0ZS5jaGFubmVsLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgc3RhdGUuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL1NlcnZpY2UvTWV0aG9kIiksICZob3N0LAorICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CiAgIG1lbXNldCgmc3RhdGUub3AsIDAsIHNpemVvZihzdGF0ZS5vcCkpOwogICBzdGF0ZS5vcC5vcCA9IEdSUENfT1BfU0VORF9JTklUSUFMX01FVEFEQVRBOwogICBzdGF0ZS5vcC5kYXRhLnNlbmRfaW5pdGlhbF9tZXRhZGF0YS5jb3VudCA9IDA7CkBAIC0yMDcsOCArMjA5LDcgQEAKICAgc2l6ZV90IG1hZ2ljX2xlbmd0aCA9IHN0cmxlbihtYWdpY19jb25uZWN0X3N0cmluZyk7CiAgIEdQUl9BU1NFUlQoYnVmZmVyLT5sZW5ndGggPj0gbWFnaWNfbGVuZ3RoKTsKICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzdGF0ZS5pbmNvbWluZ19idWZmZXIuY291bnQgJiYgaiA8IG1hZ2ljX2xlbmd0aDsgaSsrKSB7Ci0gICAgY2hhciAqZHVtcCA9Ci0gICAgICAgIGdycGNfZHVtcF9zbGljZShzdGF0ZS5pbmNvbWluZ19idWZmZXIuc2xpY2VzW2ldLCBHUFJfRFVNUF9BU0NJSSk7CisgICAgY2hhciAqZHVtcCA9IGdycGNfc2xpY2VfdG9fY19zdHJpbmcoc3RhdGUuaW5jb21pbmdfYnVmZmVyLnNsaWNlc1tpXSk7CiAgICAgY21wX2xlbmd0aCA9IEdQUl9NSU4oc3RybGVuKGR1bXApLCBtYWdpY19sZW5ndGggLSBqKTsKICAgICBHUFJfQVNTRVJUKHN0cm5jbXAoZHVtcCwgbWFnaWNfY29ubmVjdF9zdHJpbmcgKyBqLCBjbXBfbGVuZ3RoKSA9PSAwKTsKICAgICBqICs9IGNtcF9sZW5ndGg7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvY29tcHJlc3Npb24vYWxnb3JpdGhtX3Rlc3QuYyBiL3Rlc3QvY29yZS9jb21wcmVzc2lvbi9hbGdvcml0aG1fdGVzdC5jCmluZGV4IGZmMTc2NjcuLjM3Mzk3Y2UgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9jb21wcmVzc2lvbi9hbGdvcml0aG1fdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9jb21wcmVzc2lvbi9hbGdvcml0aG1fdGVzdC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2xvZy5oPgogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC91c2VmdWwuaD4KIAorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiCiAjaW5jbHVkZSAidGVzdC9jb3JlL3V0aWwvdGVzdF9jb25maWcuaCIKIApAQCAtNTEsMzIgKzUyLDMzIEBACiAgIGZvciAoaSA9IDA7IGkgPCBHUlBDX0NPTVBSRVNTX0FMR09SSVRITVNfQ09VTlQ7IGkrKykgewogICAgIGNoYXIgKm5hbWU7CiAgICAgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG0gcGFyc2VkOwotICAgIGdycGNfbWRzdHIgKm1kc3RyOwotICAgIGdycGNfbWRlbGVtICptZGVsZW07CisgICAgZ3JwY19zbGljZSBtZHN0cjsKKyAgICBncnBjX21kZWxlbSBtZGVsZW07CiAgICAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKICAgICBHUFJfQVNTRVJUKAogICAgICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9uYW1lKChncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSlpLCAmbmFtZSkpOwotICAgIEdQUl9BU1NFUlQoZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2UobmFtZSwgc3RybGVuKG5hbWUpLCAmcGFyc2VkKSk7CisgICAgR1BSX0FTU0VSVChncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9wYXJzZSgKKyAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcobmFtZSksICZwYXJzZWQpKTsKICAgICBHUFJfQVNTRVJUKChpbnQpcGFyc2VkID09IGkpOwotICAgIG1kc3RyID0gZ3JwY19tZHN0cl9mcm9tX3N0cmluZyhuYW1lKTsKLSAgICBHUFJfQVNTRVJUKG1kc3RyID09IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX21kc3RyKHBhcnNlZCkpOwotICAgIEdQUl9BU1NFUlQocGFyc2VkID09IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zyb21fbWRzdHIobWRzdHIpKTsKKyAgICBtZHN0ciA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKG5hbWUpOworICAgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShtZHN0ciwgZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fc2xpY2UocGFyc2VkKSkpOworICAgIEdQUl9BU1NFUlQocGFyc2VkID09IGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX2Zyb21fc2xpY2UobWRzdHIpKTsKICAgICBtZGVsZW0gPSBncnBjX2NvbXByZXNzaW9uX2VuY29kaW5nX21kZWxlbShwYXJzZWQpOwotICAgIEdQUl9BU1NFUlQobWRlbGVtLT52YWx1ZSA9PSBtZHN0cik7Ci0gICAgR1BSX0FTU0VSVChtZGVsZW0tPmtleSA9PSBHUlBDX01EU1RSX0dSUENfRU5DT0RJTkcpOwotICAgIEdSUENfTURTVFJfVU5SRUYoJmV4ZWNfY3R4LCBtZHN0cik7CisgICAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2VxKEdSUENfTURWQUxVRShtZGVsZW0pLCBtZHN0cikpOworICAgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShHUlBDX01ES0VZKG1kZWxlbSksIEdSUENfTURTVFJfR1JQQ19FTkNPRElORykpOworICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoJmV4ZWNfY3R4LCBtZHN0cik7CiAgICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBtZGVsZW0pOwogICAgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CiAgIH0KIAogICAvKiB0ZXN0IGZhaWx1cmUgKi8KLSAgR1BSX0FTU0VSVChOVUxMID09Ci0gICAgICAgICAgICAgZ3JwY19jb21wcmVzc2lvbl9lbmNvZGluZ19tZGVsZW0oR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UKSk7CisgIEdQUl9BU1NFUlQoR1JQQ19NRElTTlVMTCgKKyAgICAgIGdycGNfY29tcHJlc3Npb25fZW5jb2RpbmdfbWRlbGVtKEdSUENfQ09NUFJFU1NfQUxHT1JJVEhNU19DT1VOVCkpKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdF9hbGdvcml0aG1fZmFpbHVyZSh2b2lkKSB7CiAgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7Ci0gIGdycGNfbWRzdHIgKm1kc3RyOworICBncnBjX3NsaWNlIG1kc3RyOwogCiAgIGdwcl9sb2coR1BSX0RFQlVHLCAidGVzdF9hbGdvcml0aG1fZmFpbHVyZSIpOwogCkBAIC04NCwxNCArODYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpID09IDApOwogICBHUFJfQVNTRVJUKGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX25hbWUoR1JQQ19DT01QUkVTU19BTEdPUklUSE1TX0NPVU5UICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpID09IDApOwotICBtZHN0ciA9IGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoInRoaXMtaXMtYW4taW52YWxpZC1hbGdvcml0aG0iKTsKLSAgR1BSX0FTU0VSVChncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9mcm9tX21kc3RyKG1kc3RyKSA9PQorICBtZHN0ciA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ0aGlzLWlzLWFuLWludmFsaWQtYWxnb3JpdGhtIik7CisgIEdQUl9BU1NFUlQoZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fZnJvbV9zbGljZShtZHN0cikgPT0KICAgICAgICAgICAgICBHUlBDX0NPTVBSRVNTX0FMR09SSVRITVNfQ09VTlQpOwotICBHUFJfQVNTRVJUKGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX21kc3RyKEdSUENfQ09NUFJFU1NfQUxHT1JJVEhNU19DT1VOVCkgPT0KLSAgICAgICAgICAgICBOVUxMKTsKLSAgR1BSX0FTU0VSVChncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9tZHN0cihHUlBDX0NPTVBSRVNTX0FMR09SSVRITVNfQ09VTlQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpID09IE5VTEwpOwotICBHUlBDX01EU1RSX1VOUkVGKCZleGVjX2N0eCwgbWRzdHIpOworICBHUFJfQVNTRVJUKGdycGNfc2xpY2VfZXEoCisgICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9zbGljZShHUlBDX0NPTVBSRVNTX0FMR09SSVRITVNfQ09VTlQpLAorICAgICAgZ3JwY19lbXB0eV9zbGljZSgpKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcSgKKyAgICAgIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtX3NsaWNlKEdSUENfQ09NUFJFU1NfQUxHT1JJVEhNU19DT1VOVCArIDEpLAorICAgICAgZ3JwY19lbXB0eV9zbGljZSgpKSk7CisgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoJmV4ZWNfY3R4LCBtZHN0cik7CiAgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9jb21wcmVzc2lvbi9jb21wcmVzc2lvbl90ZXN0LmMgYi90ZXN0L2NvcmUvY29tcHJlc3Npb24vY29tcHJlc3Npb25fdGVzdC5jCmluZGV4IDRjNDM3NDYuLjdiMmU1NmQgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9jb21wcmVzc2lvbi9jb21wcmVzc2lvbl90ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2NvbXByZXNzaW9uL2NvbXByZXNzaW9uX3Rlc3QuYwpAQCAtNTQsNyArNTQsNyBAQAogICAgIGNvbnN0IGNoYXIgKnZhbGlkX25hbWUgPSB2YWxpZF9uYW1lc1tpXTsKICAgICBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobSBhbGdvcml0aG07CiAgICAgY29uc3QgaW50IHN1Y2Nlc3MgPSBncnBjX2NvbXByZXNzaW9uX2FsZ29yaXRobV9wYXJzZSgKLSAgICAgICAgdmFsaWRfbmFtZSwgc3RybGVuKHZhbGlkX25hbWUpLCAmYWxnb3JpdGhtKTsKKyAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcodmFsaWRfbmFtZSksICZhbGdvcml0aG0pOwogICAgIEdQUl9BU1NFUlQoc3VjY2VzcyAhPSAwKTsKICAgICBHUFJfQVNTRVJUKGFsZ29yaXRobSA9PSB2YWxpZF9hbGdvcml0aG1zW2ldKTsKICAgfQpAQCAtNjQsNyArNjQsNyBAQAogICAgIGdycGNfY29tcHJlc3Npb25fYWxnb3JpdGhtIGFsZ29yaXRobTsKICAgICBpbnQgc3VjY2VzczsKICAgICBzdWNjZXNzID0gZ3JwY19jb21wcmVzc2lvbl9hbGdvcml0aG1fcGFyc2UoCi0gICAgICAgIGludmFsaWRfbmFtZSwgc3RybGVuKGludmFsaWRfbmFtZSksICZhbGdvcml0aG0pOworICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhpbnZhbGlkX25hbWUpLCAmYWxnb3JpdGhtKTsKICAgICBHUFJfQVNTRVJUKHN1Y2Nlc3MgPT0gMCk7CiAgICAgLyogdGhlIHZhbHVlIG9mICJhbGdvcml0aG0iIGlzIHVuZGVmaW5lZCB1cG9uIGZhaWx1cmUgKi8KICAgfQpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2NvbXByZXNzaW9uL21lc3NhZ2VfY29tcHJlc3NfdGVzdC5jIGIvdGVzdC9jb3JlL2NvbXByZXNzaW9uL21lc3NhZ2VfY29tcHJlc3NfdGVzdC5jCmluZGV4IDI0MzJjYTcuLjI0NmEyYjMgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9jb21wcmVzc2lvbi9tZXNzYWdlX2NvbXByZXNzX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvY29tcHJlc3Npb24vbWVzc2FnZV9jb21wcmVzc190ZXN0LmMKQEAgLTExNCw3ICsxMTQsNyBAQAogICB9CiAKICAgZmluYWwgPSBncnBjX3NsaWNlX21lcmdlKG91dHB1dC5zbGljZXMsIG91dHB1dC5jb3VudCk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX2NtcCh2YWx1ZSwgZmluYWwpKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2VxKHZhbHVlLCBmaW5hbCkpOwogCiAgIGdycGNfc2xpY2VfYnVmZmVyX2Rlc3Ryb3koJmlucHV0KTsKICAgZ3JwY19zbGljZV9idWZmZXJfZGVzdHJveSgmY29tcHJlc3NlZCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9iYWRfc2VydmVyX3Jlc3BvbnNlX3Rlc3QuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2JhZF9zZXJ2ZXJfcmVzcG9uc2VfdGVzdC5jCmluZGV4IGEwNTIwMTYuLjQyYmY0ZmEgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2JhZF9zZXJ2ZXJfcmVzcG9uc2VfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2JhZF9zZXJ2ZXJfcmVzcG9uc2VfdGVzdC5jCkBAIC0xNzIsMTYgKzE3MiwxNyBAQAogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwogICBjcV92ZXJpZmllciAqY3F2OwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAKICAgc3RhdGUuY3EgPSBncnBjX2NvbXBsZXRpb25fcXVldWVfY3JlYXRlKE5VTEwpOwogICBjcXYgPSBjcV92ZXJpZmllcl9jcmVhdGUoc3RhdGUuY3EpOwogICBncHJfam9pbl9ob3N0X3BvcnQoJnN0YXRlLnRhcmdldCwgIjEyNy4wLjAuMSIsIHRhcmdldF9wb3J0KTsKICAgc3RhdGUuY2hhbm5lbCA9IGdycGNfaW5zZWN1cmVfY2hhbm5lbF9jcmVhdGUoc3RhdGUudGFyZ2V0LCBOVUxMLCBOVUxMKTsKKyAgZ3JwY19zbGljZSBob3N0ID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImxvY2FsaG9zdCIpOwogICBzdGF0ZS5jYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgc3RhdGUuY2hhbm5lbCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIHN0YXRlLmNxLCAiL1NlcnZpY2UvTWV0aG9kIiwKLSAgICAgICJsb2NhbGhvc3QiLCBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpLCBOVUxMKTsKKyAgICAgIHN0YXRlLmNoYW5uZWwsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBzdGF0ZS5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvU2VydmljZS9NZXRob2QiKSwgJmhvc3QsCisgICAgICBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpLCBOVUxMKTsKIAogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CkBAIC0xOTgsNyArMTk5LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjA2LDcgKzIwNyw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE4LDEzICsyMTgsMTMgQEAKICAgQ1FfRVhQRUNUX0NPTVBMRVRJT04oY3F2LCB0YWcoMSksIDEpOwogICBjcV92ZXJpZnkoY3F2KTsKIAotICBncHJfbG9nKEdQUl9ERUJVRywgIlJwYyBzdGF0dXM6ICVkLCBkZXRhaWxzOiAlcyIsIHN0YXR1cywgZGV0YWlscyk7CiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IGV4cGVjdGVkX3N0YXR1cyk7Ci0gIEdQUl9BU1NFUlQoTlVMTCAhPSBzdHJzdHIoZGV0YWlscywgZXhwZWN0ZWRfZGV0YWlsKSk7CisgIEdQUl9BU1NFUlQoLTEgIT0gZ3JwY19zbGljZV9zbGljZShkZXRhaWxzLCBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kZXRhaWwpKSk7CiAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgY3FfdmVyaWZpZXJfZGVzdHJveShjcXYpOwogfQogCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9jb25uZWN0aW9uX3JlZnVzZWRfdGVzdC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvY29ubmVjdGlvbl9yZWZ1c2VkX3Rlc3QuYwppbmRleCA0NDMwODA0Li44MWE2Yjg3IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC9jb25uZWN0aW9uX3JlZnVzZWRfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Nvbm5lY3Rpb25fcmVmdXNlZF90ZXN0LmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvc3RyaW5nX3V0aWwuaD4KIAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9jaGFubmVsL2NoYW5uZWxfYXJncy5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmgiCiAKQEAgLTU5LDggKzYwLDcgQEAKICAgZ3JwY19vcCAqb3A7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKIAogICBncHJfbG9nKEdQUl9JTkZPLCAiVEVTVDogd2FpdF9mb3JfcmVhZHk9JWQgdXNlX3NlcnZpY2VfY29uZmlnPSVkIiwKICAgICAgICAgICB3YWl0X2Zvcl9yZWFkeSwgdXNlX3NlcnZpY2VfY29uZmlnKTsKQEAgLTk3LDkgKzk3LDEwIEBACiAgIGdwcl9qb2luX2hvc3RfcG9ydCgmYWRkciwgIjEyNy4wLjAuMSIsIHBvcnQpOwogICBncHJfbG9nKEdQUl9JTkZPLCAic2VydmVyOiAlcyIsIGFkZHIpOwogICBjaGFuID0gZ3JwY19pbnNlY3VyZV9jaGFubmVsX2NyZWF0ZShhZGRyLCBhcmdzLCBOVUxMKTsKLSAgY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChjaGFuLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9zZXJ2aWNlL21ldGhvZCIsICJub25leGlzdGFudCIsIGRlYWRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygibm9uZXhpc3RhbnQiKTsKKyAgY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKKyAgICAgIGNoYW4sIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvc2VydmljZS9tZXRob2QiKSwgJmhvc3QsIGRlYWRsaW5lLCBOVUxMKTsKIAogICBncHJfZnJlZShhZGRyKTsKIApAQCAtMTE2LDcgKzExNyw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgIGdycGNfY2hhbm5lbF9kZXN0cm95KGNoYW4pOwogICBjcV92ZXJpZmllcl9kZXN0cm95KGNxdik7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAKICAgewpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvY3FfdmVyaWZpZXIuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2NxX3ZlcmlmaWVyLmMKaW5kZXggNTczNzM5Ny4uYmMyZDU4OCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvY3FfdmVyaWZpZXIuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9jcV92ZXJpZmllci5jCkBAIC05Miw4ICs5Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkgewogICBzaXplX3QgaTsKICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICBpZiAoMCA9PSBzdHJjbXAoa2V5LCBtZFtpXS5rZXkpICYmIHN0cmxlbih2YWx1ZSkgPT0gbWRbaV0udmFsdWVfbGVuZ3RoICYmCi0gICAgICAgIDAgPT0gbWVtY21wKG1kW2ldLnZhbHVlLCB2YWx1ZSwgbWRbaV0udmFsdWVfbGVuZ3RoKSkgeworICAgIGlmICgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChtZFtpXS5rZXksIGtleSkgJiYKKyAgICAgICAgMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAobWRbaV0udmFsdWUsIHZhbHVlKSkgewogICAgICAgcmV0dXJuIDE7CiAgICAgfQogICB9CkBAIC0xMDUsNiArMTA1LDIyIEBACiAgIHJldHVybiBoYXNfbWV0YWRhdGEoYXJyYXktPm1ldGFkYXRhLCBhcnJheS0+Y291bnQsIGtleSwgdmFsdWUpOwogfQogCitzdGF0aWMgaW50IGhhc19tZXRhZGF0YV9zbGljZXMoY29uc3QgZ3JwY19tZXRhZGF0YSAqbWQsIHNpemVfdCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIGtleSwgZ3JwY19zbGljZSB2YWx1ZSkgeworICBzaXplX3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICBpZiAoZ3JwY19zbGljZV9lcShtZFtpXS5rZXksIGtleSkgJiYgZ3JwY19zbGljZV9lcShtZFtpXS52YWx1ZSwgdmFsdWUpKSB7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjb250YWluc19tZXRhZGF0YV9zbGljZXMoZ3JwY19tZXRhZGF0YV9hcnJheSAqYXJyYXksIGdycGNfc2xpY2Uga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlIHZhbHVlKSB7CisgIHJldHVybiBoYXNfbWV0YWRhdGFfc2xpY2VzKGFycmF5LT5tZXRhZGF0YSwgYXJyYXktPmNvdW50LCBrZXksIHZhbHVlKTsKK30KKwogc3RhdGljIGdycGNfc2xpY2UgbWVyZ2Vfc2xpY2VzKGdycGNfc2xpY2UgKnNsaWNlcywgc2l6ZV90IG5zbGljZXMpIHsKICAgc2l6ZV90IGk7CiAgIHNpemVfdCBsZW4gPSAwOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvY3FfdmVyaWZpZXIuaCBiL3Rlc3QvY29yZS9lbmQyZW5kL2NxX3ZlcmlmaWVyLmgKaW5kZXggYjc1NGRlOS4uMDM1YWEyNyAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvY3FfdmVyaWZpZXIuaAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9jcV92ZXJpZmllci5oCkBAIC03MSw1ICs3MSw3IEBACiBpbnQgYnl0ZV9idWZmZXJfZXFfc3RyaW5nKGdycGNfYnl0ZV9idWZmZXIgKmJ5dGVfYnVmZmVyLCBjb25zdCBjaGFyICpzdHJpbmcpOwogaW50IGNvbnRhaW5zX21ldGFkYXRhKGdycGNfbWV0YWRhdGFfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpOworaW50IGNvbnRhaW5zX21ldGFkYXRhX3NsaWNlcyhncnBjX21ldGFkYXRhX2FycmF5ICphcnJheSwgZ3JwY19zbGljZSBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgdmFsdWUpOwogCiAjZW5kaWYgLyogR1JQQ19URVNUX0NPUkVfRU5EMkVORF9DUV9WRVJJRklFUl9IICovCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9kdWFsc3RhY2tfc29ja2V0X3Rlc3QuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2R1YWxzdGFja19zb2NrZXRfdGVzdC5jCmluZGV4IDExZTg2MDQuLjM1YjFiOGMgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2R1YWxzdGFja19zb2NrZXRfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2R1YWxzdGFja19zb2NrZXRfdGVzdC5jCkBAIC04OCw4ICs4OCw3IEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgcmVxdWVzdF9tZXRhZGF0YV9yZWN2OwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBjaGFyICpwZWVyOwpAQCAtMTM1LDcgKzEzNCw3IEBACiAgICAgZ3JwY19zbGljZV9zcGxpdCh1cmlfc2xpY2UsICIsIiwgJnVyaV9wYXJ0cyk7CiAgICAgaG9zdHNfd2l0aF9wb3J0ID0gZ3ByX21hbGxvYyhzaXplb2YoY2hhciAqKSAqIHVyaV9wYXJ0cy5jb3VudCk7CiAgICAgZm9yIChpID0gMDsgaSA8IHVyaV9wYXJ0cy5jb3VudDsgaSsrKSB7Ci0gICAgICBjaGFyICp1cmlfcGFydF9zdHIgPSBncnBjX2R1bXBfc2xpY2UodXJpX3BhcnRzLnNsaWNlc1tpXSwgR1BSX0RVTVBfQVNDSUkpOworICAgICAgY2hhciAqdXJpX3BhcnRfc3RyID0gZ3JwY19zbGljZV90b19jX3N0cmluZyh1cmlfcGFydHMuc2xpY2VzW2ldKTsKICAgICAgIGdwcl9hc3ByaW50ZigmaG9zdHNfd2l0aF9wb3J0W2ldLCAiJXM6JWQiLCB1cmlfcGFydF9zdHIsIHBvcnQpOwogICAgICAgZ3ByX2ZyZWUodXJpX3BhcnRfc3RyKTsKICAgICB9CkBAIC0xNjgsOCArMTY3LDEwIEBACiAgIH0KIAogICAvKiBTZW5kIGEgdHJpdmlhbCByZXF1ZXN0LiAqLworICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyIik7CiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28iLCAiZm9vLnRlc3QuZ29vZ2xlLmZyIiwgZGVhZGxpbmUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksICZob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lLCBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIAogICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CkBAIC0xODQsNyArMTg1LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTkyLDcgKzE5Myw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE2LDcgKzIxNiw4IEBACiAgICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICAgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcCsrOwogICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9DTE9TRV9PTl9TRVJWRVI7CkBAIC0yMzUsOSArMjM2LDEwIEBACiAgICAgZ3ByX2ZyZWUocGVlcik7CiAKICAgICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gICAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKLSAgICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5ob3N0LCAiZm9vLnRlc3QuZ29vZ2xlLmZyIikpOworICAgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICAgIEdQUl9BU1NFUlQoMCA9PQorICAgICAgICAgICAgICAgZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5ob3N0LCAiZm9vLnRlc3QuZ29vZ2xlLmZyIikpOwogICAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAxKTsKIAogICAgIGdycGNfY2FsbF9kZXN0cm95KHMpOwpAQCAtMjcxLDcgKzI3Myw3IEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKIAogICBncnBjX2NhbGxfZGV0YWlsc19kZXN0cm95KCZjYWxsX2RldGFpbHMpOwotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgaWYgKHBpY2tlZF9wb3J0KSB7CiAgICAgZ3JwY19yZWN5Y2xlX3VudXNlZF9wb3J0KHBvcnQpOwogICB9CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9lbmQyZW5kX3Rlc3RfdXRpbHMuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2VuZDJlbmRfdGVzdF91dGlscy5jCmluZGV4IDQ2ZmI0ZWMuLjg3ODNkODQgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2VuZDJlbmRfdGVzdF91dGlscy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2VuZDJlbmRfdGVzdF91dGlscy5jCkBAIC0zOSwxMyArMzksMjcgQEAKIAogY29uc3QgY2hhciAqZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2VuZDJlbmRfdGVzdF9jb25maWcgY29uZmlnKSB7Ci0gIHJldHVybiAoY29uZmlnLmZlYXR1cmVfbWFzayAmIEZFQVRVUkVfTUFTS19TVVBQT1JUU19BVVRIT1JJVFlfSEVBREVSID8gc3RyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCk7CisgIGlmIChjb25maWcuZmVhdHVyZV9tYXNrICYgRkVBVFVSRV9NQVNLX1NVUFBPUlRTX0FVVEhPUklUWV9IRUFERVIpIHsKKyAgICByZXR1cm4gc3RyOworICB9IGVsc2UgeworICAgIHJldHVybiBOVUxMOworICB9CiB9CiAKLXZvaWQgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyLAorY29uc3QgZ3JwY19zbGljZSAqZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lbmQyZW5kX3Rlc3RfY29uZmlnIGNvbmZpZykgeworICBjb25zdCBjaGFyICpyID0gZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKHN0ciwgY29uZmlnKTsKKyAgaWYgKHIgIT0gTlVMTCkgeworICAgIHN0YXRpYyBncnBjX3NsaWNlIHJldDsKKyAgICByZXQgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhyKTsKKyAgICByZXR1cm4gJnJldDsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKwordm9pZCB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZyhjb25zdCBjaGFyICpwYXR0ZXJuLCBncnBjX3NsaWNlIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lbmQyZW5kX3Rlc3RfY29uZmlnIGNvbmZpZykgewogICBpZiAoY29uZmlnLmZlYXR1cmVfbWFzayAmIEZFQVRVUkVfTUFTS19TVVBQT1JUU19BVVRIT1JJVFlfSEVBREVSKSB7Ci0gICAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChzdHIsIHBhdHRlcm4pKTsKKyAgICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKHN0ciwgcGF0dGVybikpOwogICB9CiB9CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9lbmQyZW5kX3Rlc3RzLmggYi90ZXN0L2NvcmUvZW5kMmVuZC9lbmQyZW5kX3Rlc3RzLmgKaW5kZXggZjI1ZTkwYi4uY2IwYWZkOSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvZW5kMmVuZF90ZXN0cy5oCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2VuZDJlbmRfdGVzdHMuaApAQCAtNzIsOCArNzIsMTIgQEAKIAogY29uc3QgY2hhciAqZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2VuZDJlbmRfdGVzdF9jb25maWcgY29uZmlnKTsKKy8qIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgc2xpY2U6IGZ1dHVyZSBpbnZvY2F0aW9ucworICAgb3ZlcndyaXRlIHBhc3QgaW52b2NhdGlvbnMsIG5vdCB0aHJlYWRzYWZlLCBldGMuLi4gKi8KK2NvbnN0IGdycGNfc2xpY2UgKmdldF9ob3N0X292ZXJyaWRlX3NsaWNlKGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZW5kMmVuZF90ZXN0X2NvbmZpZyBjb25maWcpOwogCi12b2lkIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0ciwKK3ZvaWQgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoY29uc3QgY2hhciAqcGF0dGVybiwgZ3JwY19zbGljZSBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfZW5kMmVuZF90ZXN0X2NvbmZpZyBjb25maWcpOwogCiAjZW5kaWYgLyogR1JQQ19URVNUX0NPUkVfRU5EMkVORF9FTkQyRU5EX1RFU1RTX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Zha2VfcmVzb2x2ZXIuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Zha2VfcmVzb2x2ZXIuYwppbmRleCA5NjY2NDJmLi44ZTcxMWM2IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC9mYWtlX3Jlc29sdmVyLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZmFrZV9yZXNvbHZlci5jCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgYm9vbCBlcnJvcnNfZm91bmQgPSBmYWxzZTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhZGRyZXNzZXMtPm51bV9hZGRyZXNzZXM7IGkrKykgewogICAgIGdycGNfdXJpIGl0aF91cmkgPSAqYXJncy0+dXJpOwotICAgIGNoYXIqIHBhcnRfc3RyID0gZ3JwY19kdW1wX3NsaWNlKHBhdGhfcGFydHMuc2xpY2VzW2ldLCBHUFJfRFVNUF9BU0NJSSk7CisgICAgY2hhciogcGFydF9zdHIgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHBhdGhfcGFydHMuc2xpY2VzW2ldKTsKICAgICBpdGhfdXJpLnBhdGggPSBwYXJ0X3N0cjsKICAgICBpZiAoIXBhcnNlX2lwdjQoJml0aF91cmksICZhZGRyZXNzZXMtPmFkZHJlc3Nlc1tpXS5hZGRyZXNzKSkgewogICAgICAgZXJyb3JzX2ZvdW5kID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2ZpeHR1cmVzL2gyX29hdXRoMi5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvaDJfb2F1dGgyLmMKaW5kZXggODNmNzU5Yy4uMzM1MTY1MiAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvaDJfb2F1dGgyLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvaDJfb2F1dGgyLmMKQEAgLTU5LDggKzU5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKSB7CiAgIHNpemVfdCBpOwogICBmb3IgKGkgPSAwOyBpIDwgbWRfY291bnQ7IGkrKykgewotICAgIGlmIChzdHJjbXAoa2V5LCBtZFtpXS5rZXkpID09IDAgJiYgc3RybGVuKHZhbHVlKSA9PSBtZFtpXS52YWx1ZV9sZW5ndGggJiYKLSAgICAgICAgbWVtY21wKG1kW2ldLnZhbHVlLCB2YWx1ZSwgbWRbaV0udmFsdWVfbGVuZ3RoKSA9PSAwKSB7CisgICAgaWYgKGdycGNfc2xpY2Vfc3RyX2NtcChtZFtpXS5rZXksIGtleSkgPT0gMCAmJgorICAgICAgICBncnBjX3NsaWNlX3N0cl9jbXAobWRbaV0udmFsdWUsIHZhbHVlKSA9PSAwKSB7CiAgICAgICByZXR1cm4gJm1kW2ldOwogICAgIH0KICAgfQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3Byb2Nlc3NfYXV0aF9tZXRhZGF0YV9kb25lX2NiIGNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpIHsKICAgY29uc3QgZ3JwY19tZXRhZGF0YSAqb2F1dGgyID0KLSAgICAgIGZpbmRfbWV0YWRhdGEobWQsIG1kX2NvdW50LCAiQXV0aG9yaXphdGlvbiIsIG9hdXRoMl9tZCk7CisgICAgICBmaW5kX21ldGFkYXRhKG1kLCBtZF9jb3VudCwgImF1dGhvcml6YXRpb24iLCBvYXV0aDJfbWQpOwogICB0ZXN0X3Byb2Nlc3Nvcl9zdGF0ZSAqczsKIAogICBHUFJfQVNTRVJUKHN0YXRlICE9IE5VTEwpOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3Byb2Nlc3NfYXV0aF9tZXRhZGF0YV9kb25lX2NiIGNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpIHsKICAgY29uc3QgZ3JwY19tZXRhZGF0YSAqb2F1dGgyID0KLSAgICAgIGZpbmRfbWV0YWRhdGEobWQsIG1kX2NvdW50LCAiQXV0aG9yaXphdGlvbiIsIG9hdXRoMl9tZCk7CisgICAgICBmaW5kX21ldGFkYXRhKG1kLCBtZF9jb3VudCwgImF1dGhvcml6YXRpb24iLCBvYXV0aDJfbWQpOwogICB0ZXN0X3Byb2Nlc3Nvcl9zdGF0ZSAqczsKICAgR1BSX0FTU0VSVChzdGF0ZSAhPSBOVUxMKTsKICAgcyA9ICh0ZXN0X3Byb2Nlc3Nvcl9zdGF0ZSAqKXN0YXRlOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgIGdycGNfY2hhbm5lbF9jcmVkZW50aWFscyAqc3NsX2NyZWRzID0KICAgICAgIGdycGNfc3NsX2NyZWRlbnRpYWxzX2NyZWF0ZSh0ZXN0X3Jvb3RfY2VydCwgTlVMTCwgTlVMTCk7CiAgIGdycGNfY2FsbF9jcmVkZW50aWFscyAqb2F1dGgyX2NyZWRzID0KLSAgICAgIGdycGNfbWRfb25seV90ZXN0X2NyZWRlbnRpYWxzX2NyZWF0ZSgiQXV0aG9yaXphdGlvbiIsIG9hdXRoMl9tZCwgMSk7CisgICAgICBncnBjX21kX29ubHlfdGVzdF9jcmVkZW50aWFsc19jcmVhdGUoImF1dGhvcml6YXRpb24iLCBvYXV0aDJfbWQsIDEpOwogICBncnBjX2NoYW5uZWxfY3JlZGVudGlhbHMgKnNzbF9vYXV0aDJfY3JlZHMgPQogICAgICAgZ3JwY19jb21wb3NpdGVfY2hhbm5lbF9jcmVkZW50aWFsc19jcmVhdGUoc3NsX2NyZWRzLCBvYXV0aDJfY3JlZHMsIE5VTEwpOwogICBncnBjX2FyZyBzc2xfbmFtZV9vdmVycmlkZSA9IHtHUlBDX0FSR19TVFJJTkcsCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9maXh0dXJlcy9oMl9zc2xfY2VydC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvaDJfc3NsX2NlcnQuYwppbmRleCBhZTQ5Y2M4Li44NDRlOTMzIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC9maXh0dXJlcy9oMl9zc2xfY2VydC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2ZpeHR1cmVzL2gyX3NzbF9jZXJ0LmMKQEAgLTMyMSw5ICszMjEsMTAgQEAKICAgZ3JwY19vcCAqb3A7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKIAorICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiKTsKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28iLCAiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBkZWFkbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLCAmaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSwgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvaHR0cF9wcm94eS5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvaHR0cF9wcm94eS5jCmluZGV4IGI2MjA4MmMuLmRhYzliYWYgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2ZpeHR1cmVzL2h0dHBfcHJveHkuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9maXh0dXJlcy9odHRwX3Byb3h5LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZml4LCBncnBjX2Vycm9yKiBlcnJvcikgewogICBjb25zdCBjaGFyKiBtc2cgPSBncnBjX2Vycm9yX3N0cmluZyhlcnJvcik7CiAgIGdwcl9sb2coR1BSX0lORk8sICIlczogJXMiLCBwcmVmaXgsIG1zZyk7Ci0gIGdycGNfZXJyb3JfZnJlZV9zdHJpbmcobXNnKTsKKwogICBncnBjX2VuZHBvaW50X3NodXRkb3duKGV4ZWNfY3R4LCBjb25uLT5jbGllbnRfZW5kcG9pbnQpOwogICBpZiAoY29ubi0+c2VydmVyX2VuZHBvaW50ICE9IE5VTEwpCiAgICAgZ3JwY19lbmRwb2ludF9zaHV0ZG93bihleGVjX2N0eCwgY29ubi0+c2VydmVyX2VuZHBvaW50KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2ZpeHR1cmVzL3Byb3h5LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC9maXh0dXJlcy9wcm94eS5jCmluZGV4IGJlZWQ4MGQuLmNlZTA1M2UgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2ZpeHR1cmVzL3Byb3h5LmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZml4dHVyZXMvcHJveHkuYwpAQCAtODAsOCArODAsNyBAQAogCiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgcDJzX3RyYWlsaW5nX21ldGFkYXRhOwogICBncnBjX3N0YXR1c19jb2RlIHAyc19zdGF0dXM7Ci0gIGNoYXIgKnAyc19zdGF0dXNfZGV0YWlsczsKLSAgc2l6ZV90IHAyc19zdGF0dXNfZGV0YWlsc19jYXBhY2l0eTsKKyAgZ3JwY19zbGljZSBwMnNfc3RhdHVzX2RldGFpbHM7CiAKICAgaW50IGMycF9zZXJ2ZXJfY2FuY2VsbGVkOwogfSBwcm94eV9jYWxsOwpAQCAtMTEyLDYgKzExMSw3IEBACiAgIGdycGNfc2VydmVyX3JlZ2lzdGVyX2NvbXBsZXRpb25fcXVldWUocHJveHktPnNlcnZlciwgcHJveHktPmNxLCBOVUxMKTsKICAgZ3JwY19zZXJ2ZXJfc3RhcnQocHJveHktPnNlcnZlcik7CiAKKyAgZ3JwY19jYWxsX2RldGFpbHNfaW5pdCgmcHJveHktPm5ld19jYWxsX2RldGFpbHMpOwogICBncHJfdGhkX29wdGlvbnNfc2V0X2pvaW5hYmxlKCZvcHQpOwogICBHUFJfQVNTRVJUKGdwcl90aGRfbmV3KCZwcm94eS0+dGhkLCB0aHJlYWRfbWFpbiwgcHJveHksICZvcHQpKTsKIApAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZwYy0+YzJwX2luaXRpYWxfbWV0YWRhdGEpOwogICAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcGMtPnAyc19pbml0aWFsX21ldGFkYXRhKTsKICAgICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnBjLT5wMnNfdHJhaWxpbmdfbWV0YWRhdGEpOwotICAgIGdwcl9mcmVlKHBjLT5wMnNfc3RhdHVzX2RldGFpbHMpOworICAgIGdycGNfc2xpY2VfdW5yZWYocGMtPnAyc19zdGF0dXNfZGV0YWlscyk7CiAgICAgZ3ByX2ZyZWUocGMpOwogICB9CiB9CkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICBvcC5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwogICAgIG9wLmZsYWdzID0gMDsKICAgICBvcC5yZXNlcnZlZCA9IE5VTEw7Ci0gICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UgPSAmcGMtPmMycF9tc2c7CisgICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnBjLT5jMnBfbXNnOwogICAgIHJlZnBjKHBjLCAib25fYzJwX3JlY3ZfbXNnIik7CiAgICAgZXJyID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHBjLT5jMnAsICZvcCwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2Nsb3N1cmUob25fYzJwX3JlY3ZfbXNnLCBwYyksIE5VTEwpOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICBvcC5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwogICAgICAgb3AuZmxhZ3MgPSAwOwogICAgICAgb3AucmVzZXJ2ZWQgPSBOVUxMOwotICAgICAgb3AuZGF0YS5zZW5kX21lc3NhZ2UgPSBwYy0+YzJwX21zZzsKKyAgICAgIG9wLmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHBjLT5jMnBfbXNnOwogICAgICAgcmVmcGMocGMsICJvbl9wMnNfc2VudF9tZXNzYWdlIik7CiAgICAgICBlcnIgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2gocGMtPnAycywgJm9wLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jbG9zdXJlKG9uX3Ayc19zZW50X21lc3NhZ2UsIHBjKSwgTlVMTCk7CkBAIC0yNTksNyArMjU5LDcgQEAKICAgICBvcC5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwogICAgIG9wLmZsYWdzID0gMDsKICAgICBvcC5yZXNlcnZlZCA9IE5VTEw7Ci0gICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UgPSAmcGMtPnAyc19tc2c7CisgICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnBjLT5wMnNfbXNnOwogICAgIHJlZnBjKHBjLCAib25fcDJzX3JlY3ZfbXNnIik7CiAgICAgZXJyID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHBjLT5wMnMsICZvcCwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2Nsb3N1cmUob25fcDJzX3JlY3ZfbXNnLCBwYyksIE5VTEwpOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAgICAgb3Aub3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKICAgICBvcC5mbGFncyA9IDA7CiAgICAgb3AucmVzZXJ2ZWQgPSBOVUxMOwotICAgIG9wLmRhdGEuc2VuZF9tZXNzYWdlID0gcGMtPnAyc19tc2c7CisgICAgb3AuZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcGMtPnAyc19tc2c7CiAgICAgcmVmcGMocGMsICJvbl9jMnBfc2VudF9tZXNzYWdlIik7CiAgICAgZXJyID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHBjLT5jMnAsICZvcCwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2Nsb3N1cmUob25fYzJwX3NlbnRfbWVzc2FnZSwgcGMpLCBOVUxMKTsKQEAgLTMwOSw3ICszMDksNyBAQAogICAgIG9wLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGEgPQogICAgICAgICBwYy0+cDJzX3RyYWlsaW5nX21ldGFkYXRhLm1ldGFkYXRhOwogICAgIG9wLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gcGMtPnAyc19zdGF0dXM7Ci0gICAgb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9IHBjLT5wMnNfc3RhdHVzX2RldGFpbHM7CisgICAgb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZwYy0+cDJzX3N0YXR1c19kZXRhaWxzOwogICAgIHJlZnBjKHBjLCAib25fYzJwX3NlbnRfc3RhdHVzIik7CiAgICAgZXJyID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHBjLT5jMnAsICZvcCwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2Nsb3N1cmUob25fYzJwX3NlbnRfc3RhdHVzLCBwYyksIE5VTEwpOwpAQCAtMzM5LDcgKzMzOSw3IEBACiAgICAgcGMtPmMycCA9IHByb3h5LT5uZXdfY2FsbDsKICAgICBwYy0+cDJzID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAogICAgICAgICBwcm94eS0+Y2xpZW50LCBwYy0+YzJwLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgcHJveHktPmNxLAotICAgICAgICBwcm94eS0+bmV3X2NhbGxfZGV0YWlscy5tZXRob2QsIHByb3h5LT5uZXdfY2FsbF9kZXRhaWxzLmhvc3QsCisgICAgICAgIHByb3h5LT5uZXdfY2FsbF9kZXRhaWxzLm1ldGhvZCwgJnByb3h5LT5uZXdfY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgIHByb3h5LT5uZXdfY2FsbF9kZXRhaWxzLmRlYWRsaW5lLCBOVUxMKTsKICAgICBncHJfcmVmX2luaXQoJnBjLT5yZWZzLCAxKTsKIApAQCAtMzQ3LDcgKzM0Nyw4IEBACiAKICAgICBvcC5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwogICAgIG9wLmZsYWdzID0gMDsKLSAgICBvcC5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZwYy0+cDJzX2luaXRpYWxfbWV0YWRhdGE7CisgICAgb3AuZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICAgJnBjLT5wMnNfaW5pdGlhbF9tZXRhZGF0YTsKICAgICByZWZwYyhwYywgIm9uX3Ayc19yZWN2X2luaXRpYWxfbWV0YWRhdGEiKTsKICAgICBlcnIgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goCiAgICAgICAgIHBjLT5wMnMsICZvcCwgMSwgbmV3X2Nsb3N1cmUob25fcDJzX3JlY3ZfaW5pdGlhbF9tZXRhZGF0YSwgcGMpLCBOVUxMKTsKQEAgLTM2NCw3ICszNjUsNyBAQAogCiAgICAgb3Aub3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKICAgICBvcC5mbGFncyA9IDA7Ci0gICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UgPSAmcGMtPmMycF9tc2c7CisgICAgb3AuZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnBjLT5jMnBfbXNnOwogICAgIHJlZnBjKHBjLCAib25fYzJwX3JlY3ZfbXNnIik7CiAgICAgZXJyID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHBjLT5jMnAsICZvcCwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2Nsb3N1cmUob25fYzJwX3JlY3ZfbXNnLCBwYyksIE5VTEwpOwpAQCAtMzcyLDcgKzM3Myw3IEBACiAKICAgICBvcC5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwogICAgIG9wLmZsYWdzID0gMDsKLSAgICBvcC5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZwYy0+cDJzX21zZzsKKyAgICBvcC5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcGMtPnAyc19tc2c7CiAgICAgcmVmcGMocGMsICJvbl9wMnNfcmVjdl9tc2ciKTsKICAgICBlcnIgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2gocGMtPnAycywgJm9wLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2xvc3VyZShvbl9wMnNfcmVjdl9tc2csIHBjKSwgTlVMTCk7CkBAIC0zODQsOCArMzg1LDYgQEAKICAgICAgICAgJnBjLT5wMnNfdHJhaWxpbmdfbWV0YWRhdGE7CiAgICAgb3AuZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnBjLT5wMnNfc3RhdHVzOwogICAgIG9wLmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJnBjLT5wMnNfc3RhdHVzX2RldGFpbHM7Ci0gICAgb3AuZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPQotICAgICAgICAmcGMtPnAyc19zdGF0dXNfZGV0YWlsc19jYXBhY2l0eTsKICAgICByZWZwYyhwYywgIm9uX3Ayc19zdGF0dXMiKTsKICAgICBlcnIgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2gocGMtPnAycywgJm9wLCAxLCBuZXdfY2xvc3VyZShvbl9wMnNfc3RhdHVzLCBwYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwpAQCAtNDAxLDYgKzQwMCw5IEBACiAKICAgICByZXF1ZXN0X2NhbGwocHJveHkpOwogCisgICAgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveSgmcHJveHktPm5ld19jYWxsX2RldGFpbHMpOworICAgIGdycGNfY2FsbF9kZXRhaWxzX2luaXQoJnByb3h5LT5uZXdfY2FsbF9kZXRhaWxzKTsKKwogICAgIHVucmVmcGMocGMsICJpbml0Iik7CiAgIH0gZWxzZSB7CiAgICAgR1BSX0FTU0VSVChwcm94eS0+bmV3X2NhbGwgPT0gTlVMTCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXIuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplci5jCmluZGV4IDIwMGE1MTguLjU5M2MxYmIgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplci5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplci5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL3Jlc29sdmVfYWRkcmVzcy5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9pb21nci90Y3BfY2xpZW50LmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL2lvbWdyL3RpbWVyLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2Uvc2VydmVyLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oIgogI2luY2x1ZGUgInRlc3QvY29yZS9lbmQyZW5kL2RhdGEvc3NsX3Rlc3RfZGF0YS5oIgpAQCAtOTAsNyArOTEsNyBAQAogCiBzdGF0aWMgdm9pZCBlbmQoaW5wdXRfc3RyZWFtICppbnApIHsgaW5wLT5jdXIgPSBpbnAtPmVuZDsgfQogCi1zdGF0aWMgY2hhciAqcmVhZF9zdHJpbmcoaW5wdXRfc3RyZWFtICppbnApIHsKK3N0YXRpYyBjaGFyICpyZWFkX3N0cmluZyhpbnB1dF9zdHJlYW0gKmlucCwgYm9vbCAqc3BlY2lhbCkgewogICBjaGFyICpzdHIgPSBOVUxMOwogICBzaXplX3QgY2FwID0gMDsKICAgc2l6ZV90IHN6ID0gMDsKQEAgLTEwMiwxOCArMTAzLDU2IEBACiAgICAgfQogICAgIGMgPSAoY2hhciluZXh0X2J5dGUoaW5wKTsKICAgICBzdHJbc3orK10gPSBjOwotICB9IHdoaWxlIChjICE9IDApOworICB9IHdoaWxlIChjICE9IDAgJiYgYyAhPSAxKTsKKyAgaWYgKHNwZWNpYWwgIT0gTlVMTCkgeworICAgICpzcGVjaWFsID0gKGMgPT0gMSk7CisgIH0KKyAgaWYgKGMgPT0gMSkgeworICAgIHN0cltzeiAtIDFdID0gMDsKKyAgfQogICByZXR1cm4gc3RyOwogfQogCi1zdGF0aWMgdm9pZCByZWFkX2J1ZmZlcihpbnB1dF9zdHJlYW0gKmlucCwgY2hhciAqKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgpIHsKK3N0YXRpYyB2b2lkIHJlYWRfYnVmZmVyKGlucHV0X3N0cmVhbSAqaW5wLCBjaGFyICoqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnNwZWNpYWwpIHsKICAgKmxlbmd0aCA9IG5leHRfYnl0ZShpbnApOworICBpZiAoKmxlbmd0aCA9PSAyNTUpIHsKKyAgICBpZiAoc3BlY2lhbCAhPSBOVUxMKSAqc3BlY2lhbCA9IHRydWU7CisgICAgKmxlbmd0aCA9IG5leHRfYnl0ZShpbnApOworICB9IGVsc2UgeworICAgIGlmIChzcGVjaWFsICE9IE5VTEwpICpzcGVjaWFsID0gZmFsc2U7CisgIH0KICAgKmJ1ZmZlciA9IGdwcl9tYWxsb2MoKmxlbmd0aCk7CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKmxlbmd0aDsgaSsrKSB7CiAgICAgKCpidWZmZXIpW2ldID0gKGNoYXIpbmV4dF9ieXRlKGlucCk7CiAgIH0KIH0KIAorc3RhdGljIGdycGNfc2xpY2UgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2UgcywgYm9vbCBpbnRlcm4pIHsKKyAgZ3JwY19zbGljZSByID0gaW50ZXJuID8gZ3JwY19zbGljZV9pbnRlcm4ocykgOiBncnBjX3NsaWNlX3JlZihzKTsKKyAgZ3JwY19zbGljZV91bnJlZihzKTsKKyAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBncnBjX3NsaWNlIHJlYWRfc3RyaW5nX2xpa2Vfc2xpY2UoaW5wdXRfc3RyZWFtICppbnApIHsKKyAgYm9vbCBzcGVjaWFsOworICBjaGFyICpzID0gcmVhZF9zdHJpbmcoaW5wLCAmc3BlY2lhbCk7CisgIGdycGNfc2xpY2UgciA9IG1heWJlX2ludGVybihncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhzKSwgc3BlY2lhbCk7CisgIGdwcl9mcmVlKHMpOworICByZXR1cm4gcjsKK30KKworc3RhdGljIGdycGNfc2xpY2UgcmVhZF9idWZmZXJfbGlrZV9zbGljZShpbnB1dF9zdHJlYW0gKmlucCkgeworICBjaGFyICpidWZmZXI7CisgIHNpemVfdCBsZW5ndGg7CisgIGJvb2wgc3BlY2lhbDsKKyAgcmVhZF9idWZmZXIoaW5wLCAmYnVmZmVyLCAmbGVuZ3RoLCAmc3BlY2lhbCk7CisgIGdycGNfc2xpY2UgciA9CisgICAgICBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX2NvcGllZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpLCBzcGVjaWFsKTsKKyAgZ3ByX2ZyZWUoYnVmZmVyKTsKKyAgcmV0dXJuIHI7Cit9CisKIHN0YXRpYyB1aW50MzJfdCByZWFkX3VpbnQyMihpbnB1dF9zdHJlYW0gKmlucCkgewogICB1aW50OF90IGIgPSBuZXh0X2J5dGUoaW5wKTsKICAgdWludDMyX3QgeCA9IGIgJiAweDdmOwpAQCAtMTcwLDEyICsyMDksMTIgQEAKICAgICBzd2l0Y2ggKG5leHRfYnl0ZShpbnApKSB7CiAgICAgICBjYXNlIDE6CiAgICAgICAgIGFyZ3NbaV0udHlwZSA9IEdSUENfQVJHX1NUUklORzsKLSAgICAgICAgYXJnc1tpXS5rZXkgPSByZWFkX3N0cmluZyhpbnApOwotICAgICAgICBhcmdzW2ldLnZhbHVlLnN0cmluZyA9IHJlYWRfc3RyaW5nKGlucCk7CisgICAgICAgIGFyZ3NbaV0ua2V5ID0gcmVhZF9zdHJpbmcoaW5wLCBOVUxMKTsKKyAgICAgICAgYXJnc1tpXS52YWx1ZS5zdHJpbmcgPSByZWFkX3N0cmluZyhpbnAsIE5VTEwpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgMjoKICAgICAgICAgYXJnc1tpXS50eXBlID0gR1JQQ19BUkdfSU5URUdFUjsKLSAgICAgICAgYXJnc1tpXS5rZXkgPSByZWFkX3N0cmluZyhpbnApOworICAgICAgICBhcmdzW2ldLmtleSA9IHJlYWRfc3RyaW5nKGlucCwgTlVMTCk7CiAgICAgICAgIGFyZ3NbaV0udmFsdWUuaW50ZWdlciA9IHJlYWRfaW50KGlucCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAzOgpAQCAtMjE3LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1fYnVpbHRpbnMpIHsKICAgdWludDhfdCBiID0gbmV4dF9ieXRlKGlucCk7CiAgIGlmIChiID09IDApIHJldHVybiBOVUxMOwotICBpZiAoYiA9PSAxKSByZXR1cm4gY3R4LT5yZWxlYXNlW2N0eC0+bnVtX3JlbGVhc2UrK10gPSByZWFkX3N0cmluZyhpbnApOworICBpZiAoYiA9PSAxKSByZXR1cm4gY3R4LT5yZWxlYXNlW2N0eC0+bnVtX3JlbGVhc2UrK10gPSByZWFkX3N0cmluZyhpbnAsIE5VTEwpOwogICBpZiAoYiA+PSBudW1fYnVpbHRpbnMgKyAxKSB7CiAgICAgZW5kKGlucCk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MDgsOCArNTQ3LDcgQEAKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgcmVjdl9pbml0aWFsX21ldGFkYXRhOwogICBncnBjX21ldGFkYXRhX2FycmF5IHJlY3ZfdHJhaWxpbmdfbWV0YWRhdGE7Ci0gIGNoYXIgKnJlY3Zfc3RhdHVzX2RldGFpbHM7Ci0gIHNpemVfdCByZWN2X3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5OworICBncnBjX3NsaWNlIHJlY3Zfc3RhdHVzX2RldGFpbHM7CiAgIGludCBjYW5jZWxsZWQ7CiAgIGludCBwZW5kaW5nX29wczsKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwpAQCAtNTIzLDYgKzU2MSwxMSBAQAogICBzaXplX3QgY2FwX3RvX2ZyZWU7CiAgIHZvaWQgKip0b19mcmVlOwogCisgIC8vIGFycmF5IG9mIHNsaWNlcyB0byB1bnJlZgorICBzaXplX3QgbnVtX3NsaWNlc190b191bnJlZjsKKyAgc2l6ZV90IGNhcF9zbGljZXNfdG9fdW5yZWY7CisgIGdycGNfc2xpY2UgKnNsaWNlc190b191bnJlZjsKKwogICBzdHJ1Y3QgY2FsbF9zdGF0ZSAqbmV4dDsKICAgc3RydWN0IGNhbGxfc3RhdGUgKnByZXY7CiB9IGNhbGxfc3RhdGU7CkBAIC01NTgsMTMgKzYwMSwxNyBAQAogICBjYWxsLT5uZXh0LT5wcmV2ID0gY2FsbC0+cHJldjsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZjYWxsLT5yZWN2X2luaXRpYWxfbWV0YWRhdGEpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmNhbGwtPnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGEpOwotICBncHJfZnJlZShjYWxsLT5yZWN2X3N0YXR1c19kZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihjYWxsLT5yZWN2X3N0YXR1c19kZXRhaWxzKTsKICAgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveSgmY2FsbC0+Y2FsbF9kZXRhaWxzKTsKIAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGwtPm51bV90b19mcmVlOyBpKyspIHsKICAgICBncHJfZnJlZShjYWxsLT50b19mcmVlW2ldKTsKICAgfQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGwtPm51bV9zbGljZXNfdG9fdW5yZWY7IGkrKykgeworICAgIGdycGNfc2xpY2VfdW5yZWYoY2FsbC0+c2xpY2VzX3RvX3VucmVmW2ldKTsKKyAgfQogICBncHJfZnJlZShjYWxsLT50b19mcmVlKTsKKyAgZ3ByX2ZyZWUoY2FsbC0+c2xpY2VzX3RvX3VucmVmKTsKIAogICBncHJfZnJlZShjYWxsKTsKIApAQCAtNTgwLDYgKzYyNywxNyBAQAogICBjYWxsLT50b19mcmVlW2NhbGwtPm51bV90b19mcmVlKytdID0gcDsKIH0KIAorc3RhdGljIGdycGNfc2xpY2UgKmFkZF90b19zbGljZV91bnJlZihjYWxsX3N0YXRlICpjYWxsLCBncnBjX3NsaWNlIHMpIHsKKyAgaWYgKGNhbGwtPm51bV9zbGljZXNfdG9fdW5yZWYgPT0gY2FsbC0+Y2FwX3NsaWNlc190b191bnJlZikgeworICAgIGNhbGwtPmNhcF9zbGljZXNfdG9fdW5yZWYgPSBHUFJfTUFYKDgsIDIgKiBjYWxsLT5jYXBfc2xpY2VzX3RvX3VucmVmKTsKKyAgICBjYWxsLT5zbGljZXNfdG9fdW5yZWYgPQorICAgICAgICBncHJfcmVhbGxvYyhjYWxsLT5zbGljZXNfdG9fdW5yZWYsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZigqY2FsbC0+c2xpY2VzX3RvX3VucmVmKSAqIGNhbGwtPmNhcF9zbGljZXNfdG9fdW5yZWYpOworICB9CisgIGNhbGwtPnNsaWNlc190b191bnJlZltjYWxsLT5udW1fc2xpY2VzX3RvX3VucmVmKytdID0gczsKKyAgcmV0dXJuICZjYWxsLT5zbGljZXNfdG9fdW5yZWZbY2FsbC0+bnVtX3NsaWNlc190b191bnJlZiAtIDFdOworfQorCiBzdGF0aWMgdm9pZCByZWFkX21ldGFkYXRhKGlucHV0X3N0cmVhbSAqaW5wLCBzaXplX3QgKmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX21ldGFkYXRhICoqbWV0YWRhdGEsIGNhbGxfc3RhdGUgKmNzKSB7CiAgICpjb3VudCA9IG5leHRfYnl0ZShpbnApOwpAQCAtNTg3LDEyICs2NDUsMTEgQEAKICAgICAqbWV0YWRhdGEgPSBncHJfbWFsbG9jKCpjb3VudCAqIHNpemVvZigqKm1ldGFkYXRhKSk7CiAgICAgbWVtc2V0KCptZXRhZGF0YSwgMCwgKmNvdW50ICogc2l6ZW9mKCoqbWV0YWRhdGEpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpjb3VudDsgaSsrKSB7Ci0gICAgICAoKm1ldGFkYXRhKVtpXS5rZXkgPSByZWFkX3N0cmluZyhpbnApOwotICAgICAgcmVhZF9idWZmZXIoaW5wLCAoY2hhciAqKikmKCptZXRhZGF0YSlbaV0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAmKCptZXRhZGF0YSlbaV0udmFsdWVfbGVuZ3RoKTsKKyAgICAgICgqbWV0YWRhdGEpW2ldLmtleSA9IHJlYWRfc3RyaW5nX2xpa2Vfc2xpY2UoaW5wKTsKKyAgICAgICgqbWV0YWRhdGEpW2ldLnZhbHVlID0gcmVhZF9idWZmZXJfbGlrZV9zbGljZShpbnApOwogICAgICAgKCptZXRhZGF0YSlbaV0uZmxhZ3MgPSByZWFkX3VpbnQzMihpbnApOwotICAgICAgYWRkX3RvX2ZyZWUoY3MsICh2b2lkICopKCptZXRhZGF0YSlbaV0ua2V5KTsKLSAgICAgIGFkZF90b19mcmVlKGNzLCAodm9pZCAqKSgqbWV0YWRhdGEpW2ldLnZhbHVlKTsKKyAgICAgIGFkZF90b19zbGljZV91bnJlZihjcywgKCptZXRhZGF0YSlbaV0ua2V5KTsKKyAgICAgIGFkZF90b19zbGljZV91bnJlZihjcywgKCptZXRhZGF0YSlbaV0udmFsdWUpOwogICAgIH0KICAgfSBlbHNlIHsKICAgICAqbWV0YWRhdGEgPSBncHJfbWFsbG9jKDEpOwpAQCAtNjU2LDcgKzcxMyw3IEBACiB9CiAKIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7Ci0gIGdycGNfdGVzdF9vbmx5X3NldF9tZXRhZGF0YV9oYXNoX3NlZWQoMCk7CisgIGdycGNfdGVzdF9vbmx5X3NldF9zbGljZV9oYXNoX3NlZWQoMCk7CiAgIGlmIChzcXVlbGNoKSBncHJfc2V0X2xvZ19mdW5jdGlvbihkb250X2xvZyk7CiAgIGlucHV0X3N0cmVhbSBpbnAgPSB7ZGF0YSwgZGF0YSArIHNpemV9OwogICBncnBjX3Jlc29sdmVfYWRkcmVzcyA9IG15X3Jlc29sdmVfYWRkcmVzczsKQEAgLTc0Miw3ICs3OTksNyBAQAogICAgICAgLy8gY3JlYXRlIGFuIGluc2VjdXJlIGNoYW5uZWwKICAgICAgIGNhc2UgMjogewogICAgICAgICBpZiAoZ19jaGFubmVsID09IE5VTEwpIHsKLSAgICAgICAgICBjaGFyICp0YXJnZXQgPSByZWFkX3N0cmluZygmaW5wKTsKKyAgICAgICAgICBjaGFyICp0YXJnZXQgPSByZWFkX3N0cmluZygmaW5wLCBOVUxMKTsKICAgICAgICAgICBjaGFyICp0YXJnZXRfdXJpOwogICAgICAgICAgIGdwcl9hc3ByaW50ZigmdGFyZ2V0X3VyaSwgImRuczolcyIsIHRhcmdldCk7CiAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmFyZ3MgPSByZWFkX2FyZ3MoJmlucCk7CkBAIC04NzEsOCArOTI4LDggQEAKICAgICAgICAgICBwYXJlbnRfY2FsbCA9IGdfYWN0aXZlX2NhbGwtPmNhbGw7CiAgICAgICAgIH0KICAgICAgICAgdWludDMyX3QgcHJvcGFnYXRpb25fbWFzayA9IHJlYWRfdWludDMyKCZpbnApOwotICAgICAgICBjaGFyICptZXRob2QgPSByZWFkX3N0cmluZygmaW5wKTsKLSAgICAgICAgY2hhciAqaG9zdCA9IHJlYWRfc3RyaW5nKCZpbnApOworICAgICAgICBncnBjX3NsaWNlIG1ldGhvZCA9IHJlYWRfc3RyaW5nX2xpa2Vfc2xpY2UoJmlucCk7CisgICAgICAgIGdycGNfc2xpY2UgaG9zdCA9IHJlYWRfc3RyaW5nX2xpa2Vfc2xpY2UoJmlucCk7CiAgICAgICAgIGdwcl90aW1lc3BlYyBkZWFkbGluZSA9CiAgICAgICAgICAgICBncHJfdGltZV9hZGQoZ3ByX25vdyhHUFJfQ0xPQ0tfUkVBTFRJTUUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdwcl90aW1lX2Zyb21fbWljcm9zKHJlYWRfdWludDMyKCZpbnApLCBHUFJfVElNRVNQQU4pKTsKQEAgLTg4MSwxMiArOTM4LDEyIEBACiAgICAgICAgICAgY2FsbF9zdGF0ZSAqY3MgPSBuZXdfY2FsbChnX2FjdGl2ZV9jYWxsLCBDTElFTlQpOwogICAgICAgICAgIGNzLT5jYWxsID0KICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGdfY2hhbm5lbCwgcGFyZW50X2NhbGwsIHByb3BhZ2F0aW9uX21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcSwgbWV0aG9kLCBob3N0LCBkZWFkbGluZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcSwgbWV0aG9kLCAmaG9zdCwgZGVhZGxpbmUsIE5VTEwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGVuZCgmaW5wKTsKICAgICAgICAgfQotICAgICAgICBncHJfZnJlZShtZXRob2QpOwotICAgICAgICBncHJfZnJlZShob3N0KTsKKyAgICAgICAgZ3JwY19zbGljZV91bnJlZihtZXRob2QpOworICAgICAgICBncnBjX3NsaWNlX3VucmVmKGhvc3QpOwogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIC8vIHN3aXRjaCB0aGUgJ2N1cnJlbnQnIGNhbGwKQEAgLTkzMyw4ICs5OTAsOCBAQAogICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaGFzX29wcyB8PSAxIDw8IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICAgICAgICAgICAgICAgIGdfYWN0aXZlX2NhbGwtPnNlbmRfbWVzc2FnZSA9IG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRfbWVzc2FnZSgmaW5wKTsKKyAgICAgICAgICAgICAgICBnX2FjdGl2ZV9jYWxsLT5zZW5kX21lc3NhZ2UgPQorICAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVhZF9tZXNzYWdlKCZpbnApOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBHUlBDX09QX1NFTkRfQ0xPU0VfRlJPTV9DTElFTlQ6CkBAIC05NTEsMTggKzEwMDgsMTkgQEAKICAgICAgICAgICAgICAgICAgIGdfYWN0aXZlX2NhbGwpOwogICAgICAgICAgICAgICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBuZXh0X2J5dGUoJmlucCk7CiAgICAgICAgICAgICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0KLSAgICAgICAgICAgICAgICAgIHJlYWRfc3RyaW5nKCZpbnApOworICAgICAgICAgICAgICAgICAgYWRkX3RvX3NsaWNlX3VucmVmKGdfYWN0aXZlX2NhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9idWZmZXJfbGlrZV9zbGljZSgmaW5wKSk7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQToKICAgICAgICAgICAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7CiAgICAgICAgICAgICAgIGhhc19vcHMgfD0gMSA8PCBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgICAgICAgICAgICAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICAgICAgICAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CiAgICAgICAgICAgICAgICAgICAmZ19hY3RpdmVfY2FsbC0+cmVjdl9pbml0aWFsX21ldGFkYXRhOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR1JQQ19PUF9SRUNWX01FU1NBR0U6CiAgICAgICAgICAgICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwogICAgICAgICAgICAgICBoYXNfb3BzIHw9IDEgPDwgR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gICAgICAgICAgICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZnX2FjdGl2ZV9jYWxsLT5yZWN2X21lc3NhZ2U7CisgICAgICAgICAgICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmZ19hY3RpdmVfY2FsbC0+cmVjdl9tZXNzYWdlOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ6CiAgICAgICAgICAgICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9TVEFUVVNfT05fQ0xJRU5UOwpAQCAtOTcxLDggKzEwMjksNiBAQAogICAgICAgICAgICAgICAgICAgJmdfYWN0aXZlX2NhbGwtPnJlY3ZfdHJhaWxpbmdfbWV0YWRhdGE7CiAgICAgICAgICAgICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9CiAgICAgICAgICAgICAgICAgICAmZ19hY3RpdmVfY2FsbC0+cmVjdl9zdGF0dXNfZGV0YWlsczsKLSAgICAgICAgICAgICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICAgICAgICAgICAgICZnX2FjdGl2ZV9jYWxsLT5yZWN2X3N0YXR1c19kZXRhaWxzX2NhcGFjaXR5OwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgR1JQQ19PUF9SRUNWX0NMT1NFX09OX1NFUlZFUjoKICAgICAgICAgICAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0NMT1NFX09OX1NFUlZFUjsKQEAgLTEwNjAsMTQgKzExMTYsMTQgQEAKICAgICAgIH0KICAgICAgIC8vIGVuYWJsZSBhIHRyYWNlcgogICAgICAgY2FzZSAxNzogewotICAgICAgICBjaGFyICp0cmFjZXIgPSByZWFkX3N0cmluZygmaW5wKTsKKyAgICAgICAgY2hhciAqdHJhY2VyID0gcmVhZF9zdHJpbmcoJmlucCwgTlVMTCk7CiAgICAgICAgIGdycGNfdHJhY2VyX3NldF9lbmFibGVkKHRyYWNlciwgMSk7CiAgICAgICAgIGdwcl9mcmVlKHRyYWNlcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgLy8gZGlzYWJsZSBhIHRyYWNlcgogICAgICAgY2FzZSAxODogewotICAgICAgICBjaGFyICp0cmFjZXIgPSByZWFkX3N0cmluZygmaW5wKTsKKyAgICAgICAgY2hhciAqdHJhY2VyID0gcmVhZF9zdHJpbmcoJmlucCwgTlVMTCk7CiAgICAgICAgIGdycGNfdHJhY2VyX3NldF9lbmFibGVkKHRyYWNlciwgMCk7CiAgICAgICAgIGdwcl9mcmVlKHRyYWNlcik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTEwOSw3ICsxMTY1LDcgQEAKICAgICAgIC8vIGNyZWF0ZSBhIHNlY3VyZSBjaGFubmVsCiAgICAgICBjYXNlIDIyOiB7CiAgICAgICAgIGlmIChnX2NoYW5uZWwgPT0gTlVMTCkgewotICAgICAgICAgIGNoYXIgKnRhcmdldCA9IHJlYWRfc3RyaW5nKCZpbnApOworICAgICAgICAgIGNoYXIgKnRhcmdldCA9IHJlYWRfc3RyaW5nKCZpbnAsIE5VTEwpOwogICAgICAgICAgIGNoYXIgKnRhcmdldF91cmk7CiAgICAgICAgICAgZ3ByX2FzcHJpbnRmKCZ0YXJnZXRfdXJpLCAiZG5zOiVzIiwgdGFyZ2V0KTsKICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqYXJncyA9IHJlYWRfYXJncygmaW5wKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDcwYWNhMzhiNWNkMDY2MjZkZmM5ODEyNmVmMTIyNTU5NTgwMDQyNyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDcwYWNhMzhiNWNkMDY2MjZkZmM5ODEyNmVmMTIyNTU5NTgwMDQyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmU4NTNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8wNzBhY2EzOGI1Y2QwNjYyNmRmYzk4MTI2ZWYxMjI1NTk1ODAwNDI3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDgzOTg1MThiOWI0ZTk4ZDQ2MjVkZmIwNjNhYjBiNmQ5Mzk5YTIzOSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDgzOTg1MThiOWI0ZTk4ZDQ2MjVkZmIwNjNhYjBiNmQ5Mzk5YTIzOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzU3MTkzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8wODM5ODUxOGI5YjRlOThkNDYyNWRmYjA2M2FiMGI2ZDkzOTlhMjM5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDk2Zjk0MTNiMWJmNzEyZTA5MmNmOGJkNzA3NTQwMTRkNjI0MmYxMiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDk2Zjk0MTNiMWJmNzEyZTA5MmNmOGJkNzA3NTQwMTRkNjI0MmYxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDRmMDNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8wOTZmOTQxM2IxYmY3MTJlMDkyY2Y4YmQ3MDc1NDAxNGQ2MjQyZjEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMGE4NTg4OTIyOWI3Mjk4ODNmNGMwNDIwZDFhMTNkOWYwYTJjYTdjMiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMGE4NTg4OTIyOWI3Mjk4ODNmNGMwNDIwZDFhMTNkOWYwYTJjYTdjMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDUzN2UzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8wYTg1ODg5MjI5YjcyOTg4M2Y0YzA0MjBkMWExM2Q5ZjBhMmNhN2MyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMWMwZGM4NWZhZWQ5NGJiODliYzkwZjg3Nzk5ZDczODNjZjk5MDdjZiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMWMwZGM4NWZhZWQ5NGJiODliYzkwZjg3Nzk5ZDczODNjZjk5MDdjZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODNhYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8xYzBkYzg1ZmFlZDk0YmI4OWJjOTBmODc3OTlkNzM4M2NmOTkwN2NmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMmE0ZmM3MDlmNjE5NzdmMGY2Yzc1NzYwYWYyYjMzMDA3ZWNkNTk0MSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMmE0ZmM3MDlmNjE5NzdmMGY2Yzc1NzYwYWYyYjMzMDA3ZWNkNTk0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzk3OGViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8yYTRmYzcwOWY2MTk3N2YwZjZjNzU3NjBhZjJiMzMwMDdlY2Q1OTQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMzUyNTk5YjI4NTBhYzVhOTZlYzY1Njc4OGM4OTdjNGIzNjExNGNjNCBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMzUyNTk5YjI4NTBhYzVhOTZlYzY1Njc4OGM4OTdjNGIzNjExNGNjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI4YjgxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8zNTI1OTliMjg1MGFjNWE5NmVjNjU2Nzg4Yzg5N2M0YjM2MTE0Y2M0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMzVmMTcyYjAxNjhjZDBiMmRhNDUwOWMzNDYzYzI1MDIyNzRlMDFhNiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMzVmMTcyYjAxNjhjZDBiMmRhNDUwOWMzNDYzYzI1MDIyNzRlMDFhNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzc5OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy8zNWYxNzJiMDE2OGNkMGIyZGE0NTA5YzM0NjNjMjUwMjI3NGUwMWE2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNDI0YjZhMjBiZTMyMzE4ZDkyMGQ4M2FhMmEyOTJhMGFiYTAxM2ExYiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNDI0YjZhMjBiZTMyMzE4ZDkyMGQ4M2FhMmEyOTJhMGFiYTAxM2ExYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDAyNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy80MjRiNmEyMGJlMzIzMThkOTIwZDgzYWEyYTI5MmEwYWJhMDEzYTFiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNGIzMDNkN2YyNDVhNTY5ZjUwNzAxM2FmMGIzYWZiMmYwMzNiNjc0MSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNGIzMDNkN2YyNDVhNTY5ZjUwNzAxM2FmMGIzYWZiMmYwMzNiNjc0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Q5ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy80YjMwM2Q3ZjI0NWE1NjlmNTA3MDEzYWYwYjNhZmIyZjAzM2I2NzQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNTU5ZDUzNzY3NWRkM2ZjNWUwYzZkNDBlOTQxMzNlOTAxNjAxNGY2YyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNTU5ZDUzNzY3NWRkM2ZjNWUwYzZkNDBlOTQxMzNlOTAxNjAxNGY2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTMyN2YzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy81NTlkNTM3Njc1ZGQzZmM1ZTBjNmQ0MGU5NDEzM2U5MDE2MDE0ZjZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNjBiNGM3OTIxM2I5NzIwNGQxZTRmNjgxOWFkMWVkNWY2ZTE5MTc4OSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNjBiNGM3OTIxM2I5NzIwNGQxZTRmNjgxOWFkMWVkNWY2ZTE5MTc4OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ0ZTVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy82MGI0Yzc5MjEzYjk3MjA0ZDFlNGY2ODE5YWQxZWQ1ZjZlMTkxNzg5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNjcxZDYzYjk5Njg0NDQzMDhkNDkwOGViNmEyNmJjY2RmMzJlNWUyOSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNjcxZDYzYjk5Njg0NDQzMDhkNDkwOGViNmEyNmJjY2RmMzJlNWUyOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGM2OWM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy82NzFkNjNiOTk2ODQ0NDMwOGQ0OTA4ZWI2YTI2YmNjZGYzMmU1ZTI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNmFkM2ExMTcwZWY4ODRhODg0YTZmMzQwMTAxNTQ5ZGY2MjRiZjVhNCBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNmFkM2ExMTcwZWY4ODRhODg0YTZmMzQwMTAxNTQ5ZGY2MjRiZjVhNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NlYTllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy82YWQzYTExNzBlZjg4NGE4ODRhNmYzNDAxMDE1NDlkZjYyNGJmNWE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNzE5NjFlNTM2OThiMDdiZmQ1N2U5ZWEzNzA2N2UwZGQ1MjI5OGEzZCBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNzE5NjFlNTM2OThiMDdiZmQ1N2U5ZWEzNzA2N2UwZGQ1MjI5OGEzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWEyNjNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy83MTk2MWU1MzY5OGIwN2JmZDU3ZTllYTM3MDY3ZTBkZDUyMjk4YTNkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvODA3YTQ4YmQzM2NlMzc1NDM4ZGJjMTU4YzE1MzE4OTFjNWI1NGE1MSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvODA3YTQ4YmQzM2NlMzc1NDM4ZGJjMTU4YzE1MzE4OTFjNWI1NGE1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQzYjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy84MDdhNDhiZDMzY2UzNzU0MzhkYmMxNThjMTUzMTg5MWM1YjU0YTUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvOGRmZGIwNGVmNTU4ZmJhODRkY2JmYTY1YTZhYTMxOGIxMDk4OGZhOSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvOGRmZGIwNGVmNTU4ZmJhODRkY2JmYTY1YTZhYTMxOGIxMDk4OGZhOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTcxZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy84ZGZkYjA0ZWY1NThmYmE4NGRjYmZhNjVhNmFhMzE4YjEwOTg4ZmE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvOTkxNmI2NTMwNWQyOGFjZjc1YTE3NDk1YjlmNDRkN2I4MzliOTQ4ZiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvOTkxNmI2NTMwNWQyOGFjZjc1YTE3NDk1YjlmNDRkN2I4MzliOTQ4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy85OTE2YjY1MzA1ZDI4YWNmNzVhMTc0OTViOWY0NGQ3YjgzOWI5NDhmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYThjMGExNjYwMDRlZTYzN2YyMmY1ODM4OTYwYzhmNDMyMDczODY5NCBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYThjMGExNjYwMDRlZTYzN2YyMmY1ODM4OTYwYzhmNDMyMDczODY5NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU0YTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9hOGMwYTE2NjAwNGVlNjM3ZjIyZjU4Mzg5NjBjOGY0MzIwNzM4Njk0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYWJkNWRlN2I1ZTkyMThkMTlhNTdjNDdkMmNjZDZhMWJjMDIyYzdmYiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYWJkNWRlN2I1ZTkyMThkMTlhNTdjNDdkMmNjZDZhMWJjMDIyYzdmYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhlYmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9hYmQ1ZGU3YjVlOTIxOGQxOWE1N2M0N2QyY2NkNmExYmMwMjJjN2ZiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYjM2YzNlNTg0MWM2YWVkN2IwZDQzOWJkM2I5YzZkOTIyZDU2YzcwYiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYjM2YzNlNTg0MWM2YWVkN2IwZDQzOWJkM2I5YzZkOTIyZDU2YzcwYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzVmYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9iMzZjM2U1ODQxYzZhZWQ3YjBkNDM5YmQzYjljNmQ5MjJkNTZjNzBiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYjhiYzM3N2U1M2NhNTRhZTRlMzBmNDM3YjY5ZTI3MDA0MGMzNWY2NSBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYjhiYzM3N2U1M2NhNTRhZTRlMzBmNDM3YjY5ZTI3MDA0MGMzNWY2NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDkzNGJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9iOGJjMzc3ZTUzY2E1NGFlNGUzMGY0MzdiNjllMjcwMDQwYzM1ZjY1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvY3Jhc2gtNjBhM2Y3ZWQ0YWJkZGFhNmE3YzgzN2FjZTg2ZDA0OGZhMTVlMjg4YiBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvY3Jhc2gtNjBhM2Y3ZWQ0YWJkZGFhNmE3YzgzN2FjZTg2ZDA0OGZhMTVlMjg4YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ0MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9jcmFzaC02MGEzZjdlZDRhYmRkYWE2YTdjODM3YWNlODZkMDQ4ZmExNWUyODhiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvZGIyNWRmMGZhMTQ2ZDAyODc0MTE0Yjg2MDUwMDBlMDEzNWZmMTJkZCBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvZGIyNWRmMGZhMTQ2ZDAyODc0MTE0Yjg2MDUwMDBlMDEzNWZmMTJkZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFmNDBmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9kYjI1ZGYwZmExNDZkMDI4NzQxMTRiODYwNTAwMGUwMTM1ZmYxMmRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvZjUwM2Y4ZDUyNmVhZWM5YmFiNmNhZTk3ZDA5MjA3ZGVlZmE4NWQ4ZCBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvZjUwM2Y4ZDUyNmVhZWM5YmFiNmNhZTk3ZDA5MjA3ZGVlZmE4NWQ4ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRiMmIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9hcGlfZnV6emVyX2NvcnB1cy9mNTAzZjhkNTI2ZWFlYzliYWI2Y2FlOTdkMDkyMDdkZWVmYTg1ZDhkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplci5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyLmMKaW5kZXggMjZiNTIwOC4uZTdlN2RiZSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvYWxsb2MuaD4KIAogI2luY2x1ZGUgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9jaHR0cDJfdHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvY2hhbm5lbC5oIgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL21lbW9yeV9jb3VudGVycy5oIgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL21vY2tfZW5kcG9pbnQuaCIKQEAgLTUxLDcgKzUyLDcgQEAKIHN0YXRpYyB2b2lkIGRvbnRfbG9nKGdwcl9sb2dfZnVuY19hcmdzICphcmdzKSB7fQogCiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgewotICBncnBjX3Rlc3Rfb25seV9zZXRfbWV0YWRhdGFfaGFzaF9zZWVkKDApOworICBncnBjX3Rlc3Rfb25seV9zZXRfc2xpY2VfaGFzaF9zZWVkKDApOwogICBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgY291bnRlcnM7CiAgIGlmIChzcXVlbGNoKSBncHJfc2V0X2xvZ19mdW5jdGlvbihkb250X2xvZyk7CiAgIGlmIChsZWFrX2NoZWNrKSBncnBjX21lbW9yeV9jb3VudGVyc19pbml0KCk7CkBAIC03MSw5ICs3MiwxMCBAQAogCiAgIGdycGNfY2hhbm5lbCAqY2hhbm5lbCA9IGdycGNfY2hhbm5lbF9jcmVhdGUoCiAgICAgICAmZXhlY19jdHgsICJ0ZXN0LXRhcmdldCIsIE5VTEwsIEdSUENfQ0xJRU5UX0RJUkVDVF9DSEFOTkVMLCB0cmFuc3BvcnQpOwotICBncnBjX2NhbGwgKmNhbGwgPQotICAgICAgZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNoYW5uZWwsIE5VTEwsIDAsIGNxLCAiL2ZvbyIsICJsb2NhbGhvc3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOworICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygibG9jYWxob3N0Iik7CisgIGdycGNfY2FsbCAqY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKKyAgICAgIGNoYW5uZWwsIE5VTEwsIDAsIGNxLCBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLCAmaG9zdCwKKyAgICAgIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOwogCiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CkBAIC04MSw4ICs4Myw3IEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlscyA9IGdycGNfZW1wdHlfc2xpY2UoKTsKIAogICBncnBjX29wIG9wc1s2XTsKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwpAQCAtOTcsMTIgKzk4LDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTEwLDcgKzExMSw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgIGdycGNfY29tcGxldGlvbl9xdWV1ZV9kZXN0cm95KGNxKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19jaGFubmVsX2Rlc3Ryb3koY2hhbm5lbCk7CiAgIGlmIChyZXNwb25zZV9wYXlsb2FkX3JlY3YgIT0gTlVMTCkgewogICAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXNwb25zZV9wYXlsb2FkX3JlY3YpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8xNzVmMTY5MDE5OTdmZGVlNDFhYzllYzg4ZjdlMDE4ZDQ2ZDc3NGU3IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8xNzVmMTY5MDE5OTdmZGVlNDFhYzllYzg4ZjdlMDE4ZDQ2ZDc3NGU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZjgxNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzE3NWYxNjkwMTk5N2ZkZWU0MWFjOWVjODhmN2UwMThkNDZkNzc0ZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8yNmYyNTBhZTM4ODY1ZjAzMDE3NmE4ODAxY2U5OTI1MzYzNTFhMzI2IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8yNmYyNTBhZTM4ODY1ZjAzMDE3NmE4ODAxY2U5OTI1MzYzNTFhMzI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTcwYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzI2ZjI1MGFlMzg4NjVmMDMwMTc2YTg4MDFjZTk5MjUzNjM1MWEzMjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8zMjMzZjJhYjNiNmM5NDMxMjg5ZWY3ZGM0ZjQwNjc2ZDAxMjhiY2FkIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8zMjMzZjJhYjNiNmM5NDMxMjg5ZWY3ZGM0ZjQwNjc2ZDAxMjhiY2FkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWVmMDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzMyMzNmMmFiM2I2Yzk0MzEyODllZjdkYzRmNDA2NzZkMDEyOGJjYWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8zNjU2NjE0YzdiMGRjMTFkNGRkN2UxODI2Zjc3ZmE5NmE4OGM0MjBmIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8zNjU2NjE0YzdiMGRjMTFkNGRkN2UxODI2Zjc3ZmE5NmE4OGM0MjBmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTY2N2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzM2NTY2MTRjN2IwZGMxMWQ0ZGQ3ZTE4MjZmNzdmYTk2YTg4YzQyMGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8zZGVjMTk4MWU4Njc3ZWM2YWQyNTE3ZmViYTI5ODY5ZDUzZjhkODg0IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy8zZGVjMTk4MWU4Njc3ZWM2YWQyNTE3ZmViYTI5ODY5ZDUzZjhkODg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmY4YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzNkZWMxOTgxZTg2NzdlYzZhZDI1MTdmZWJhMjk4NjlkNTNmOGQ4ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy80YmVkODQ1OTBhNTViMDZkN2ViMzBkOGZhYTRiMDBhODgxYmE5YjJjIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy80YmVkODQ1OTBhNTViMDZkN2ViMzBkOGZhYTRiMDBhODgxYmE5YjJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzM2NWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzRiZWQ4NDU5MGE1NWIwNmQ3ZWIzMGQ4ZmFhNGIwMGE4ODFiYTliMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy81OTFkNDZiODNkMmU2YmFiYzBjZTNjNzUzYzQ2MDZhMTBjNDZkN2NlIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy81OTFkNDZiODNkMmU2YmFiYzBjZTNjNzUzYzQ2MDZhMTBjNDZkN2NlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZGFjY2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzU5MWQ0NmI4M2QyZTZiYWJjMGNlM2M3NTNjNDYwNmExMGM0NmQ3Y2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy81YTUyZDY4M2M5MzQyZGQzMDFiMGU2OTlkYjM2MTc1YWFkNzE1ZTFkIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy81YTUyZDY4M2M5MzQyZGQzMDFiMGU2OTlkYjM2MTc1YWFkNzE1ZTFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTA5YTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzVhNTJkNjgzYzkzNDJkZDMwMWIwZTY5OWRiMzYxNzVhYWQ3MTVlMWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy81YjdmZjdjMTEzYzJiY2YxMjUyNzFkMjJjOTM3Zjc1OGEwY2QyZWU0IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy81YjdmZjdjMTEzYzJiY2YxMjUyNzFkMjJjOTM3Zjc1OGEwY2QyZWU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjY2MwMmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzViN2ZmN2MxMTNjMmJjZjEyNTI3MWQyMmM5MzdmNzU4YTBjZDJlZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy82MTZlNTUzNTRiYTM1MTdjZTY3NjJkNmNkNTY2MDBmOTc5MTVlNjQ2IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy82MTZlNTUzNTRiYTM1MTdjZTY3NjJkNmNkNTY2MDBmOTc5MTVlNjQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWVlZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzYxNmU1NTM1NGJhMzUxN2NlNjc2MmQ2Y2Q1NjYwMGY5NzkxNWU2NDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy83YTlhMTJiMTVjNzk4Yjg4ZjFhNTk5Nzc5ZjUyZDE0ZWRmOWY0ZWY1IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy83YTlhMTJiMTVjNzk4Yjg4ZjFhNTk5Nzc5ZjUyZDE0ZWRmOWY0ZWY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZThjMzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzdhOWExMmIxNWM3OThiODhmMWE1OTk3NzlmNTJkMTRlZGY5ZjRlZjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy84ZjA1YjhkYTc0OGNjMDRlNjRiNjg4YzRiNDM1ZmU2NDY5OWJkNDgxIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy84ZjA1YjhkYTc0OGNjMDRlNjRiNjg4YzRiNDM1ZmU2NDY5OWJkNDgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTQ0MDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzhmMDViOGRhNzQ4Y2MwNGU2NGI2ODhjNGI0MzVmZTY0Njk5YmQ0ODEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy84ZmQ3NThlMjYwM2YxZTM3NzJjZmNkMjk1ZmYwZjk1MTk4OGQ3NjQ4IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy84ZmQ3NThlMjYwM2YxZTM3NzJjZmNkMjk1ZmYwZjk1MTk4OGQ3NjQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTdiZDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzhmZDc1OGUyNjAzZjFlMzc3MmNmY2QyOTVmZjBmOTUxOTg4ZDc2NDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy85MDE4OTI1YjVlNzkxYWU0YjNhZTljODRiOGE0ZDQ3ZDg2NjcxYzJkIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy85MDE4OTI1YjVlNzkxYWU0YjNhZTljODRiOGE0ZDQ3ZDg2NjcxYzJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjY2FjMmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzkwMTg5MjViNWU3OTFhZTRiM2FlOWM4NGI4YTRkNDdkODY2NzFjMmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy85OTEyZGUxOTc5MThhYzBlMzA1ZjBjMDEwN2Y4NjM4MjNlOGFlODE4IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy85OTEyZGUxOTc5MThhYzBlMzA1ZjBjMDEwN2Y4NjM4MjNlOGFlODE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDRiMWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzk5MTJkZTE5NzkxOGFjMGUzMDVmMGMwMTA3Zjg2MzgyM2U4YWU4MTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9hYjkwYmViZDRjMDE3ODI3YTZkNWRlNjE1MTE0NDVkZjgxMTY5ZWI2IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9hYjkwYmViZDRjMDE3ODI3YTZkNWRlNjE1MTE0NDVkZjgxMTY5ZWI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGNkZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2FiOTBiZWJkNGMwMTc4MjdhNmQ1ZGU2MTUxMTQ0NWRmODExNjllYjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9iMjZhM2E4M2QwYjMxOWNlMTNhOWFlMTY0ZTkwZmE2ZGExYjA1YTU3IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9iMjZhM2E4M2QwYjMxOWNlMTNhOWFlMTY0ZTkwZmE2ZGExYjA1YTU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODM1NWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2IyNmEzYTgzZDBiMzE5Y2UxM2E5YWUxNjRlOTBmYTZkYTFiMDVhNTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9iYTI1YmUxMjNjNjMwYmQzZTRhZWI5YmRhNjMwNGRkMWE3ZTUxMzY1IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9iYTI1YmUxMjNjNjMwYmQzZTRhZWI5YmRhNjMwNGRkMWE3ZTUxMzY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMWI4OGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2JhMjViZTEyM2M2MzBiZDNlNGFlYjliZGE2MzA0ZGQxYTdlNTEzNjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jNzdlZTBiNmNiMjFhYjdiN2NmMjIyYzdmNjU2M2IzYjFiMWI2ZWVkIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jNzdlZTBiNmNiMjFhYjdiN2NmMjIyYzdmNjU2M2IzYjFiMWI2ZWVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTRhMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2M3N2VlMGI2Y2IyMWFiN2I3Y2YyMjJjN2Y2NTYzYjNiMWIxYjZlZWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jN2IxN2Q2YWU1ZjNiMTU1NTMyYTVhOWJmMDIzOWMwOThjMzVlZWMxIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jN2IxN2Q2YWU1ZjNiMTU1NTMyYTVhOWJmMDIzOWMwOThjMzVlZWMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZDU4MjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2M3YjE3ZDZhZTVmM2IxNTU1MzJhNWE5YmYwMjM5YzA5OGMzNWVlYzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jY2MzNmVlMmM2YTBkYWFkNjVhNGQ5Mjk1OTlmZGE1Y2QzOGI4ZmQxIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jY2MzNmVlMmM2YTBkYWFkNjVhNGQ5Mjk1OTlmZGE1Y2QzOGI4ZmQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTJiMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2NjYzM2ZWUyYzZhMGRhYWQ2NWE0ZDkyOTU5OWZkYTVjZDM4YjhmZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jcmFzaC0xMzM1MDAzMTQ4MzNjOTAzN2IzNGE0YzM0YWQ3NzlkZDc4YTBmYThkIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jcmFzaC0xMzM1MDAzMTQ4MzNjOTAzN2IzNGE0YzM0YWQ3NzlkZDc4YTBmYThkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NzU3NjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2NyYXNoLTEzMzUwMDMxNDgzM2M5MDM3YjM0YTRjMzRhZDc3OWRkNzhhMGZhOGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9kMzE0MWE3MWNkYWE3YTA5MTVjOGM1NWFiZjJjOTQwYjBmZDAwMTcyIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9kMzE0MWE3MWNkYWE3YTA5MTVjOGM1NWFiZjJjOTQwYjBmZDAwMTcyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODgxZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2QzMTQxYTcxY2RhYTdhMDkxNWM4YzU1YWJmMmM5NDBiMGZkMDAxNzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9kZTliOWEzNWUxZTcwNDBlODQyYjU5N2I4ZDJmZTRjZDYwMmU2N2YxIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9kZTliOWEzNWUxZTcwNDBlODQyYjU5N2I4ZDJmZTRjZDYwMmU2N2YxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOGQ0M2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2RlOWI5YTM1ZTFlNzA0MGU4NDJiNTk3YjhkMmZlNGNkNjAyZTY3ZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9lNTMxOWE4NTcwYTc2MmJiZGQ2NzEzNWI0OTU3OTA5NzMyNGUzNjlhIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9lNTMxOWE4NTcwYTc2MmJiZGQ2NzEzNWI0OTU3OTA5NzMyNGUzNjlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2U1MzE5YTg1NzBhNzYyYmJkZDY3MTM1YjQ5NTc5MDk3MzI0ZTM2OWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9lNWUyNzZhY2Q2NjVjY2I0N2Y4NjhmZTNiYzM2ZTY0N2JiYjg0MGJkIGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9lNWUyNzZhY2Q2NjVjY2I0N2Y4NjhmZTNiYzM2ZTY0N2JiYjg0MGJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjE0YTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2U1ZTI3NmFjZDY2NWNjYjQ3Zjg2OGZlM2JjMzZlNjQ3YmJiODQwYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9mNjlhYTU2NjZmZDYwYzFiNjgxNDE5OGYxMmQwNDlhYmIwZTlmMTQ4IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9mNjlhYTU2NjZmZDYwYzFiNjgxNDE5OGYxMmQwNDlhYmIwZTlmMTQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGJhYzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzL2Y2OWFhNTY2NmZkNjBjMWI2ODE0MTk4ZjEyZDA0OWFiYjBlOWYxNDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9ocGFjay5kaWN0aW9uYXJ5IGIvdGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9ocGFjay5kaWN0aW9uYXJ5CmluZGV4IDEyZGIwZmYuLjgxYTI0MTkgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvaHBhY2suZGljdGlvbmFyeQorKysgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2hwYWNrLmRpY3Rpb25hcnkKQEAgLTEsMjQgKzEsNjIgQEAKICMgaHBhY2sgZnV6emluZyBkaWN0aW9uYXJ5CisiXHgwNTpwYXRoIgorIlx4MDc6bWV0aG9kIgorIlx4MDc6c3RhdHVzIgorIlx4MEE6YXV0aG9yaXR5IgorIlx4MDc6c2NoZW1lIgorIlx4MDJ0ZSIKKyJceDBDZ3JwYy1tZXNzYWdlIgorIlx4MEJncnBjLXN0YXR1cyIKKyJceDEwZ3JwYy1wYXlsb2FkLWJpbiIKKyJceDBEZ3JwYy1lbmNvZGluZyIKKyJceDE0Z3JwYy1hY2NlcHQtZW5jb2RpbmciCisiXHgwQ2NvbnRlbnQtdHlwZSIKKyJceDFFZ3JwYy1pbnRlcm5hbC1lbmNvZGluZy1yZXF1ZXN0IgorIlx4MEF1c2VyLWFnZW50IgorIlx4MDRob3N0IgorIlx4MDhsYi10b2tlbiIKKyJceDBCbGItY29zdC1iaW4iCisiXHgwQ2dycGMtdGltZW91dCIKKyJceDEwZ3JwYy10cmFjaW5nLWJpbiIKKyJceDBFZ3JwYy1zdGF0cy1iaW4iCisiXHgwMCIKKyJceDEzZ3JwYy53YWl0X2Zvcl9yZWFkeSIKKyJceDBDZ3JwYy50aW1lb3V0IgorIlx4MUVncnBjLm1heF9yZXF1ZXN0X21lc3NhZ2VfYnl0ZXMiCisiXHgxRmdycGMubWF4X3Jlc3BvbnNlX21lc3NhZ2VfYnl0ZXMiCisiJC9ncnBjLmxiLnYxLkxvYWRCYWxhbmNlci9CYWxhbmNlTG9hZCIKICJceDAxMCIKICJceDAxMSIKICJceDAxMiIKKyJceDA4aWRlbnRpdHkiCisiXHgwNGd6aXAiCisiXHgwN2RlZmxhdGUiCisiXHgwOHRyYWlsZXJzIgorIlx4MTBhcHBsaWNhdGlvbi9ncnBjIgorIlx4MDRQT1NUIgogIlx4MDMyMDAiCisiXHgwMzQwNCIKKyJceDA0aHR0cCIKKyJceDA1aHR0cHMiCisiXHgwNGdycGMiCisiXHgwM0dFVCIKKyJceDAzUFVUIgorIlx4MDEvIgorIlx4MEIvaW5kZXguaHRtbCIKICJceDAzMjA0IgogIlx4MDMyMDYiCiAiXHgwMzMwNCIKICJceDAzNDAwIgotIlx4MDM0MDQiCiAiXHgwMzUwMCIKLSJceDA2YWNjZXB0IgogIlx4MEVhY2NlcHQtY2hhcnNldCIKICJceDBGYWNjZXB0LWVuY29kaW5nIgorIlx4MERnemlwLCBkZWZsYXRlIgogIlx4MEZhY2NlcHQtbGFuZ3VhZ2UiCiAiXHgwRGFjY2VwdC1yYW5nZXMiCisiXHgwNmFjY2VwdCIKICJceDFCYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIgogIlx4MDNhZ2UiCiAiXHgwNWFsbG93IgotIlx4MTBhcHBsaWNhdGlvbi9ncnBjIgotIlx4MEE6YXV0aG9yaXR5IgogIlx4MERhdXRob3JpemF0aW9uIgogIlx4MERjYWNoZS1jb250cm9sIgogIlx4MTNjb250ZW50LWRpc3Bvc2l0aW9uIgpAQCAtMjcsODEgKzY1LDcxIEBACiAiXHgwRWNvbnRlbnQtbGVuZ3RoIgogIlx4MTBjb250ZW50LWxvY2F0aW9uIgogIlx4MERjb250ZW50LXJhbmdlIgotIlx4MENjb250ZW50LXR5cGUiCiAiXHgwNmNvb2tpZSIKICJceDA0ZGF0ZSIKLSJceDA3ZGVmbGF0ZSIKLSJceDBDZGVmbGF0ZSxnemlwIgotIlx4MDAiCiAiXHgwNGV0YWciCiAiXHgwNmV4cGVjdCIKICJceDA3ZXhwaXJlcyIKICJceDA0ZnJvbSIKLSJceDAzR0VUIgotIlx4MDRncnBjIgotIlx4MTRncnBjLWFjY2VwdC1lbmNvZGluZyIKLSJceDBEZ3JwYy1lbmNvZGluZyIKLSJceDFFZ3JwYy1pbnRlcm5hbC1lbmNvZGluZy1yZXF1ZXN0IgotIlx4MENncnBjLW1lc3NhZ2UiCi0iXHgxMGdycGMtcGF5bG9hZC1iaW4iCi0iXHgwRWdycGMtc3RhdHMtYmluIgotIlx4MEJncnBjLXN0YXR1cyIKLSJceDBDZ3JwYy10aW1lb3V0IgotIlx4MTBncnBjLXRyYWNpbmctYmluIgotIlx4MDRnemlwIgotIlx4MERnemlwLCBkZWZsYXRlIgotIlx4MDRob3N0IgotIlx4MDRodHRwIgotIlx4MDVodHRwcyIKLSJceDA4aWRlbnRpdHkiCi0iXHgxMGlkZW50aXR5LGRlZmxhdGUiCi0iXHgxNWlkZW50aXR5LGRlZmxhdGUsZ3ppcCIKLSJceDBEaWRlbnRpdHksZ3ppcCIKICJceDA4aWYtbWF0Y2giCiAiXHgxMWlmLW1vZGlmaWVkLXNpbmNlIgogIlx4MERpZi1ub25lLW1hdGNoIgogIlx4MDhpZi1yYW5nZSIKICJceDEzaWYtdW5tb2RpZmllZC1zaW5jZSIKICJceDBEbGFzdC1tb2RpZmllZCIKLSJceDBCbGItY29zdC1iaW4iCi0iXHgwOGxiLXRva2VuIgogIlx4MDRsaW5rIgogIlx4MDhsb2NhdGlvbiIKICJceDBDbWF4LWZvcndhcmRzIgotIlx4MDc6bWV0aG9kIgotIlx4MDU6cGF0aCIKLSJceDA0UE9TVCIKICJceDEycHJveHktYXV0aGVudGljYXRlIgogIlx4MTNwcm94eS1hdXRob3JpemF0aW9uIgotIlx4MDNQVVQiCiAiXHgwNXJhbmdlIgogIlx4MDdyZWZlcmVyIgogIlx4MDdyZWZyZXNoIgogIlx4MEJyZXRyeS1hZnRlciIKLSJceDA3OnNjaGVtZSIKICJceDA2c2VydmVyIgogIlx4MEFzZXQtY29va2llIgotIlx4MDEvIgotIlx4MEIvaW5kZXguaHRtbCIKLSJceDA3OnN0YXR1cyIKICJceDE5c3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIKLSJceDAydGUiCi0iXHgwOHRyYWlsZXJzIgogIlx4MTF0cmFuc2Zlci1lbmNvZGluZyIKLSJceDBBdXNlci1hZ2VudCIKICJceDA0dmFyeSIKICJceDAzdmlhIgogIlx4MTB3d3ctYXV0aGVudGljYXRlIgorIlx4MTBpZGVudGl0eSxkZWZsYXRlIgorIlx4MERpZGVudGl0eSxnemlwIgorIlx4MENkZWZsYXRlLGd6aXAiCisiXHgxNWlkZW50aXR5LGRlZmxhdGUsZ3ppcCIKKyJceDAwXHgwQmdycGMtc3RhdHVzXHgwMTAiCisiXHgwMFx4MEJncnBjLXN0YXR1c1x4MDExIgorIlx4MDBceDBCZ3JwYy1zdGF0dXNceDAxMiIKKyJceDAwXHgwRGdycGMtZW5jb2RpbmdceDA4aWRlbnRpdHkiCisiXHgwMFx4MERncnBjLWVuY29kaW5nXHgwNGd6aXAiCisiXHgwMFx4MERncnBjLWVuY29kaW5nXHgwN2RlZmxhdGUiCisiXHgwMFx4MDJ0ZVx4MDh0cmFpbGVycyIKKyJceDAwXHgwQ2NvbnRlbnQtdHlwZVx4MTBhcHBsaWNhdGlvbi9ncnBjIgorIlx4MDBceDA3Om1ldGhvZFx4MDRQT1NUIgorIlx4MDBceDA3OnN0YXR1c1x4MDMyMDAiCisiXHgwMFx4MDc6c3RhdHVzXHgwMzQwNCIKKyJceDAwXHgwNzpzY2hlbWVceDA0aHR0cCIKKyJceDAwXHgwNzpzY2hlbWVceDA1aHR0cHMiCisiXHgwMFx4MDc6c2NoZW1lXHgwNGdycGMiCisiXHgwMFx4MEE6YXV0aG9yaXR5XHgwMCIKKyJceDAwXHgwNzptZXRob2RceDAzR0VUIgorIlx4MDBceDA3Om1ldGhvZFx4MDNQVVQiCisiXHgwMFx4MDU6cGF0aFx4MDEvIgorIlx4MDBceDA1OnBhdGhceDBCL2luZGV4Lmh0bWwiCisiXHgwMFx4MDc6c3RhdHVzXHgwMzIwNCIKKyJceDAwXHgwNzpzdGF0dXNceDAzMjA2IgorIlx4MDBceDA3OnN0YXR1c1x4MDMzMDQiCisiXHgwMFx4MDc6c3RhdHVzXHgwMzQwMCIKKyJceDAwXHgwNzpzdGF0dXNceDAzNTAwIgogIlx4MDBceDBFYWNjZXB0LWNoYXJzZXRceDAwIgotIlx4MDBceDA2YWNjZXB0XHgwMCIKICJceDAwXHgwRmFjY2VwdC1lbmNvZGluZ1x4MDAiCiAiXHgwMFx4MEZhY2NlcHQtZW5jb2RpbmdceDBEZ3ppcCwgZGVmbGF0ZSIKICJceDAwXHgwRmFjY2VwdC1sYW5ndWFnZVx4MDAiCiAiXHgwMFx4MERhY2NlcHQtcmFuZ2VzXHgwMCIKKyJceDAwXHgwNmFjY2VwdFx4MDAiCiAiXHgwMFx4MUJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5ceDAwIgogIlx4MDBceDAzYWdlXHgwMCIKICJceDAwXHgwNWFsbG93XHgwMCIKLSJceDAwXHgwQTphdXRob3JpdHlceDAwIgogIlx4MDBceDBEYXV0aG9yaXphdGlvblx4MDAiCiAiXHgwMFx4MERjYWNoZS1jb250cm9sXHgwMCIKICJceDAwXHgxM2NvbnRlbnQtZGlzcG9zaXRpb25ceDAwIgpAQCAtMTEwLDcgKzEzOCw2IEBACiAiXHgwMFx4MEVjb250ZW50LWxlbmd0aFx4MDAiCiAiXHgwMFx4MTBjb250ZW50LWxvY2F0aW9uXHgwMCIKICJceDAwXHgwRGNvbnRlbnQtcmFuZ2VceDAwIgotIlx4MDBceDBDY29udGVudC10eXBlXHgxMGFwcGxpY2F0aW9uL2dycGMiCiAiXHgwMFx4MENjb250ZW50LXR5cGVceDAwIgogIlx4MDBceDA2Y29va2llXHgwMCIKICJceDAwXHgwNGRhdGVceDAwIgpAQCAtMTE4LDE5ICsxNDUsNiBAQAogIlx4MDBceDA2ZXhwZWN0XHgwMCIKICJceDAwXHgwN2V4cGlyZXNceDAwIgogIlx4MDBceDA0ZnJvbVx4MDAiCi0iXHgwMFx4MTRncnBjLWFjY2VwdC1lbmNvZGluZ1x4MDdkZWZsYXRlIgotIlx4MDBceDE0Z3JwYy1hY2NlcHQtZW5jb2RpbmdceDBDZGVmbGF0ZSxnemlwIgotIlx4MDBceDE0Z3JwYy1hY2NlcHQtZW5jb2RpbmdceDA0Z3ppcCIKLSJceDAwXHgxNGdycGMtYWNjZXB0LWVuY29kaW5nXHgwOGlkZW50aXR5IgotIlx4MDBceDE0Z3JwYy1hY2NlcHQtZW5jb2RpbmdceDEwaWRlbnRpdHksZGVmbGF0ZSIKLSJceDAwXHgxNGdycGMtYWNjZXB0LWVuY29kaW5nXHgxNWlkZW50aXR5LGRlZmxhdGUsZ3ppcCIKLSJceDAwXHgxNGdycGMtYWNjZXB0LWVuY29kaW5nXHgwRGlkZW50aXR5LGd6aXAiCi0iXHgwMFx4MERncnBjLWVuY29kaW5nXHgwN2RlZmxhdGUiCi0iXHgwMFx4MERncnBjLWVuY29kaW5nXHgwNGd6aXAiCi0iXHgwMFx4MERncnBjLWVuY29kaW5nXHgwOGlkZW50aXR5IgotIlx4MDBceDBCZ3JwYy1zdGF0dXNceDAxMCIKLSJceDAwXHgwQmdycGMtc3RhdHVzXHgwMTEiCi0iXHgwMFx4MEJncnBjLXN0YXR1c1x4MDEyIgogIlx4MDBceDA0aG9zdFx4MDAiCiAiXHgwMFx4MDhpZi1tYXRjaFx4MDAiCiAiXHgwMFx4MTFpZi1tb2RpZmllZC1zaW5jZVx4MDAiCkBAIC0xMzgsMzggKzE1MiwyOSBAQAogIlx4MDBceDA4aWYtcmFuZ2VceDAwIgogIlx4MDBceDEzaWYtdW5tb2RpZmllZC1zaW5jZVx4MDAiCiAiXHgwMFx4MERsYXN0LW1vZGlmaWVkXHgwMCIKLSJceDAwXHgwQmxiLWNvc3QtYmluXHgwMCIKICJceDAwXHgwOGxiLXRva2VuXHgwMCIKKyJceDAwXHgwQmxiLWNvc3QtYmluXHgwMCIKICJceDAwXHgwNGxpbmtceDAwIgogIlx4MDBceDA4bG9jYXRpb25ceDAwIgogIlx4MDBceDBDbWF4LWZvcndhcmRzXHgwMCIKLSJceDAwXHgwNzptZXRob2RceDAzR0VUIgotIlx4MDBceDA3Om1ldGhvZFx4MDRQT1NUIgotIlx4MDBceDA3Om1ldGhvZFx4MDNQVVQiCi0iXHgwMFx4MDU6cGF0aFx4MDEvIgotIlx4MDBceDA1OnBhdGhceDBCL2luZGV4Lmh0bWwiCiAiXHgwMFx4MTJwcm94eS1hdXRoZW50aWNhdGVceDAwIgogIlx4MDBceDEzcHJveHktYXV0aG9yaXphdGlvblx4MDAiCiAiXHgwMFx4MDVyYW5nZVx4MDAiCiAiXHgwMFx4MDdyZWZlcmVyXHgwMCIKICJceDAwXHgwN3JlZnJlc2hceDAwIgogIlx4MDBceDBCcmV0cnktYWZ0ZXJceDAwIgotIlx4MDBceDA3OnNjaGVtZVx4MDRncnBjIgotIlx4MDBceDA3OnNjaGVtZVx4MDRodHRwIgotIlx4MDBceDA3OnNjaGVtZVx4MDVodHRwcyIKICJceDAwXHgwNnNlcnZlclx4MDAiCiAiXHgwMFx4MEFzZXQtY29va2llXHgwMCIKLSJceDAwXHgwNzpzdGF0dXNceDAzMjAwIgotIlx4MDBceDA3OnN0YXR1c1x4MDMyMDQiCi0iXHgwMFx4MDc6c3RhdHVzXHgwMzIwNiIKLSJceDAwXHgwNzpzdGF0dXNceDAzMzA0IgotIlx4MDBceDA3OnN0YXR1c1x4MDM0MDAiCi0iXHgwMFx4MDc6c3RhdHVzXHgwMzQwNCIKLSJceDAwXHgwNzpzdGF0dXNceDAzNTAwIgogIlx4MDBceDE5c3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eVx4MDAiCi0iXHgwMFx4MDJ0ZVx4MDh0cmFpbGVycyIKICJceDAwXHgxMXRyYW5zZmVyLWVuY29kaW5nXHgwMCIKICJceDAwXHgwQXVzZXItYWdlbnRceDAwIgogIlx4MDBceDA0dmFyeVx4MDAiCiAiXHgwMFx4MDN2aWFceDAwIgogIlx4MDBceDEwd3d3LWF1dGhlbnRpY2F0ZVx4MDAiCisiXHgwMFx4MTRncnBjLWFjY2VwdC1lbmNvZGluZ1x4MDhpZGVudGl0eSIKKyJceDAwXHgxNGdycGMtYWNjZXB0LWVuY29kaW5nXHgwN2RlZmxhdGUiCisiXHgwMFx4MTRncnBjLWFjY2VwdC1lbmNvZGluZ1x4MTBpZGVudGl0eSxkZWZsYXRlIgorIlx4MDBceDE0Z3JwYy1hY2NlcHQtZW5jb2RpbmdceDA0Z3ppcCIKKyJceDAwXHgxNGdycGMtYWNjZXB0LWVuY29kaW5nXHgwRGlkZW50aXR5LGd6aXAiCisiXHgwMFx4MTRncnBjLWFjY2VwdC1lbmNvZGluZ1x4MENkZWZsYXRlLGd6aXAiCisiXHgwMFx4MTRncnBjLWFjY2VwdC1lbmNvZGluZ1x4MTVpZGVudGl0eSxkZWZsYXRlLGd6aXAiCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXIuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplci5jCmluZGV4IDExNWZiMDYuLjE4NjU0MmQgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplci5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplci5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8Z3JwYy9ncnBjLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvY2h0dHAyX3RyYW5zcG9ydC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5oIgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL21lbW9yeV9jb3VudGVycy5oIgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL21vY2tfZW5kcG9pbnQuaCIKQEAgLTQ5LDcgKzUwLDcgQEAKIHN0YXRpYyB2b2lkIGRvbnRfbG9nKGdwcl9sb2dfZnVuY19hcmdzICphcmdzKSB7fQogCiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkgewotICBncnBjX3Rlc3Rfb25seV9zZXRfbWV0YWRhdGFfaGFzaF9zZWVkKDApOworICBncnBjX3Rlc3Rfb25seV9zZXRfc2xpY2VfaGFzaF9zZWVkKDApOwogICBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgY291bnRlcnM7CiAgIGlmIChzcXVlbGNoKSBncHJfc2V0X2xvZ19mdW5jdGlvbihkb250X2xvZyk7CiAgIGlmIChsZWFrX2NoZWNrKSBncnBjX21lbW9yeV9jb3VudGVyc19pbml0KCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzA4NGU5ZTAyYjhmMmVkNDFmZjljMjJmZWY4MGU1MjJlNDkxMjI3YzUgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzA4NGU5ZTAyYjhmMmVkNDFmZjljMjJmZWY4MGU1MjJlNDkxMjI3YzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlYWM4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvMDg0ZTllMDJiOGYyZWQ0MWZmOWMyMmZlZjgwZTUyMmU0OTEyMjdjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzEyOTM4MmFhMTFmYTI5MjIwNTNmYTQ3YmE2OTFkZGRiOTg5MDEyNjAgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzEyOTM4MmFhMTFmYTI5MjIwNTNmYTQ3YmE2OTFkZGRiOTg5MDEyNjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhYjc0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvMTI5MzgyYWExMWZhMjkyMjA1M2ZhNDdiYTY5MWRkZGI5ODkwMTI2MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzEzNTNlNDQ3YjdiMTBmYjNlYWJiMDI4NjNhMWZjNWJjOWJiNTA0NjAgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzEzNTNlNDQ3YjdiMTBmYjNlYWJiMDI4NjNhMWZjNWJjOWJiNTA0NjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjMDUwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvMTM1M2U0NDdiN2IxMGZiM2VhYmIwMjg2M2ExZmM1YmM5YmI1MDQ2MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzQ3NTYzMzkxYjczYjZlZjRiZjk4NzAxNGMzZTYzMWZlMjU1NWEzNzcgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzQ3NTYzMzkxYjczYjZlZjRiZjk4NzAxNGMzZTYzMWZlMjU1NWEzNzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5ZjFjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNDc1NjMzOTFiNzNiNmVmNGJmOTg3MDE0YzNlNjMxZmUyNTU1YTM3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzZjMGVjMTgxZTgxYjkxNTA3MTc2Njc2MmY1ZDc4ZTliMWNjYzkxMjggYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzZjMGVjMTgxZTgxYjkxNTA3MTc2Njc2MmY1ZDc4ZTliMWNjYzkxMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3M2MxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNmMwZWMxODFlODFiOTE1MDcxNzY2NzYyZjVkNzhlOWIxY2NjOTEyOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzZjNjYyNzFiNzRhMTFmNGU3MDY1YTZhY2JjODZlNDYxMWU3ZTBkY2MgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzZjNjYyNzFiNzRhMTFmNGU3MDY1YTZhY2JjODZlNDYxMWU3ZTBkY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhNWRkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNmM2NjI3MWI3NGExMWY0ZTcwNjVhNmFjYmM4NmU0NjExZTdlMGRjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzcyZGI5NzgxOTQ2MDlhYzEzOGJjYTM5MzY1MDc0MGEzZWFlOGY0NDggYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzcyZGI5NzgxOTQ2MDlhYzEzOGJjYTM5MzY1MDc0MGEzZWFlOGY0NDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMDIzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNzJkYjk3ODE5NDYwOWFjMTM4YmNhMzkzNjUwNzQwYTNlYWU4ZjQ0OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzdkZjc1NDEyZDEyODk0ZmM1MDFiZDJkODQ5M2ZlOWU1YTc1M2FkODggYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzdkZjc1NDEyZDEyODk0ZmM1MDFiZDJkODQ5M2ZlOWU1YTc1M2FkODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyMDBhMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvN2RmNzU0MTJkMTI4OTRmYzUwMWJkMmQ4NDkzZmU5ZTVhNzUzYWQ4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzk0N2Y1M2MwOTc4NjcyZTU5YmU0NTIzOTU2NzBmYTk0OWEzM2NiNGYgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzk0N2Y1M2MwOTc4NjcyZTU5YmU0NTIzOTU2NzBmYTk0OWEzM2NiNGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxZjE2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvOTQ3ZjUzYzA5Nzg2NzJlNTliZTQ1MjM5NTY3MGZhOTQ5YTMzY2I0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2E4MzA1ZTliYjRhNTQ0ZWFlZjI3ZThiZDIxYjRmYWFiZjUyNGE4NGUgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2E4MzA1ZTliYjRhNTQ0ZWFlZjI3ZThiZDIxYjRmYWFiZjUyNGE4NGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3Njk0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYTgzMDVlOWJiNGE1NDRlYWVmMjdlOGJkMjFiNGZhYWJmNTI0YTg0ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2FjNGUxOWM5ZmUyOTBhZmM1NGJiYjFlNWY2Y2ZlODRhOWMxZjNjMjkgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2FjNGUxOWM5ZmUyOTBhZmM1NGJiYjFlNWY2Y2ZlODRhOWMxZjNjMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiMjE4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYWM0ZTE5YzlmZTI5MGFmYzU0YmJiMWU1ZjZjZmU4NGE5YzFmM2MyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2FlMjk3NDI2NjM4ZWI1YTA2MTEzMjRmNDAzYzMxODk1MTUyNzRmMWIgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2FlMjk3NDI2NjM4ZWI1YTA2MTEzMjRmNDAzYzMxODk1MTUyNzRmMWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MGNiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYWUyOTc0MjY2MzhlYjVhMDYxMTMyNGY0MDNjMzE4OTUxNTI3NGYxYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2I3NGRjZDljMjc4MGYxNDVlMDlhMjdkMmUwMzExOTU3Njg4OWEzMDEgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2I3NGRjZDljMjc4MGYxNDVlMDlhMjdkMmUwMzExOTU3Njg4OWEzMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlNWIzYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYjc0ZGNkOWMyNzgwZjE0NWUwOWEyN2QyZTAzMTE5NTc2ODg5YTMwMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2MzOWMwMTkyZDBkNGYyYjI0ZjA1YzI1YTllNjY5Y2MwOTFiZmY5ZTkgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2MzOWMwMTkyZDBkNGYyYjI0ZjA1YzI1YTllNjY5Y2MwOTFiZmY5ZTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhMDM3OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYzM5YzAxOTJkMGQ0ZjJiMjRmMDVjMjVhOWU2NjljYzA5MWJmZjllOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2NyYXNoLTkwMTcyMzA5MGZmMjA0MmVjYzVhMDA4Y2NkN2FlMDg0NWMxNjgxY2IgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2NyYXNoLTkwMTcyMzA5MGZmMjA0MmVjYzVhMDA4Y2NkN2FlMDg0NWMxNjgxY2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5MDk4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvY3Jhc2gtOTAxNzIzMDkwZmYyMDQyZWNjNWEwMDhjY2Q3YWUwODQ1YzE2ODFjYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2QyOTdiM2Y4NGUzZGVlOWY3NGJmMTE2MjcxOGFmZjY2YTExYTdmNWMgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2QyOTdiM2Y4NGUzZGVlOWY3NGJmMTE2MjcxOGFmZjY2YTExYTdmNWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxOWFlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvZDI5N2IzZjg0ZTNkZWU5Zjc0YmYxMTYyNzE4YWZmNjZhMTFhN2Y1YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2UwMjFjNWI5ODE1ZjAyZWU5ZDFlNWEwMDNjYmYzNTAwZTE5ZGIxM2MgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2UwMjFjNWI5ODE1ZjAyZWU5ZDFlNWEwMDNjYmYzNTAwZTE5ZGIxM2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhZTgyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvZTAyMWM1Yjk4MTVmMDJlZTlkMWU1YTAwM2NiZjM1MDBlMTlkYjEzYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2ZjMTYyZGI0MGY4N2ZhY2I3M2NmZjIwNzUxZTIzYWYyZTFmNTI5NmUgYi90ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2ZjMTYyZGI0MGY4N2ZhY2I3M2NmZjIwNzUxZTIzYWYyZTFmNTI5NmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzZDY5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvZmMxNjJkYjQwZjg3ZmFjYjczY2ZmMjA3NTFlMjNhZjJlMWY1Mjk2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC9nb2F3YXlfc2VydmVyX3Rlc3QuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL2dvYXdheV9zZXJ2ZXJfdGVzdC5jCmluZGV4IGNkNjhiMzkuLjY1ZmNiOTUgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2dvYXdheV9zZXJ2ZXJfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL2dvYXdheV9zZXJ2ZXJfdGVzdC5jCkBAIC0xMDEsOCArMTAxLDcgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheSByZXF1ZXN0X21ldGFkYXRhMTsKICAgZ3JwY19jYWxsX2RldGFpbHMgcmVxdWVzdF9kZXRhaWxzMTsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMxOwotICBjaGFyICpkZXRhaWxzMSA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5MSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczE7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjEpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJnJlcXVlc3RfbWV0YWRhdGExKTsKICAgZ3JwY19jYWxsX2RldGFpbHNfaW5pdCgmcmVxdWVzdF9kZXRhaWxzMSk7CkBAIC0xMTEsOCArMTEwLDcgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheSByZXF1ZXN0X21ldGFkYXRhMjsKICAgZ3JwY19jYWxsX2RldGFpbHMgcmVxdWVzdF9kZXRhaWxzMjsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXMyOwotICBjaGFyICpkZXRhaWxzMiA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5MiA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczI7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjIpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJnJlcXVlc3RfbWV0YWRhdGEyKTsKICAgZ3JwY19jYWxsX2RldGFpbHNfaW5pdCgmcmVxdWVzdF9kZXRhaWxzMik7CkBAIC0xMzcsOSArMTM1LDExIEBACiAgIC8qIGNyZWF0ZSBhIGNoYW5uZWwgdGhhdCBwaWNrcyBmaXJzdCBhbW9uZ3N0IHRoZSBzZXJ2ZXJzICovCiAgIGdycGNfY2hhbm5lbCAqY2hhbiA9IGdycGNfaW5zZWN1cmVfY2hhbm5lbF9jcmVhdGUoInRlc3QiLCAmY2xpZW50X2FyZ3MsIE5VTEwpOwogICAvKiBhbmQgYW4gaW5pdGlhbCBjYWxsIHRvIHRoZW0gKi8KLSAgZ3JwY19jYWxsICpjYWxsMSA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGNoYW4sIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwgIi9mb28iLCAiMTI3LjAuMC4xIiwKLSAgICAgIEdSUENfVElNRU9VVF9TRUNPTkRTX1RPX0RFQURMSU5FKDIwKSwgTlVMTCk7CisgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIxMjcuMC4wLjEiKTsKKyAgZ3JwY19jYWxsICpjYWxsMSA9CisgICAgICBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoY2hhbiwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGNxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksICZob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfVElNRU9VVF9TRUNPTkRTX1RPX0RFQURMSU5FKDIwKSwgTlVMTCk7CiAgIC8qIHNlbmQgaW5pdGlhbCBtZXRhZGF0YSB0byBwcm9iZSBjb25uZWN0aXZpdHkgKi8KICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICBvcCA9IG9wczsKQEAgLTE1OCw3ICsxNTgsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjE7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzMTsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHMxOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTE7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMTMsOSArMjEyLDEwIEBACiAgIGNxX3ZlcmlmeV9lbXB0eShjcXYpOwogCiAgIC8qIGFuZCBhIG5ldyBjYWxsOiBzaG91bGQgZ28gdGhyb3VnaCB0byBzZXJ2ZXIyIHdoZW4gd2Ugc3RhcnQgaXQgKi8KLSAgZ3JwY19jYWxsICpjYWxsMiA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGNoYW4sIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwgIi9mb28iLCAiMTI3LjAuMC4xIiwKLSAgICAgIEdSUENfVElNRU9VVF9TRUNPTkRTX1RPX0RFQURMSU5FKDIwKSwgTlVMTCk7CisgIGdycGNfY2FsbCAqY2FsbDIgPQorICAgICAgZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNoYW4sIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLCAmaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1RJTUVPVVRfU0VDT05EU19UT19ERUFETElORSgyMCksIE5VTEwpOwogICAvKiBzZW5kIGluaXRpYWwgbWV0YWRhdGEgdG8gcHJvYmUgY29ubmVjdGl2aXR5ICovCiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CkBAIC0yMzQsNyArMjM0LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YyOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czI7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzMjsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHkyOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzAwLDExICsyOTksMTEgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2MSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YTEpOwogICBncnBjX2NhbGxfZGV0YWlsc19kZXN0cm95KCZyZXF1ZXN0X2RldGFpbHMxKTsKLSAgZ3ByX2ZyZWUoZGV0YWlsczEpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMxKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2Mik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YTIpOwogICBncnBjX2NhbGxfZGV0YWlsc19kZXN0cm95KCZyZXF1ZXN0X2RldGFpbHMyKTsKLSAgZ3ByX2ZyZWUoZGV0YWlsczIpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMyKTsKIAogICBjcV92ZXJpZmllcl9kZXN0cm95KGNxdik7CiAgIGdycGNfY29tcGxldGlvbl9xdWV1ZV9kZXN0cm95KGNxKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL2ludmFsaWRfY2FsbF9hcmd1bWVudF90ZXN0LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC9pbnZhbGlkX2NhbGxfYXJndW1lbnRfdGVzdC5jCmluZGV4IGQ5NzRkMmMuLmViNmQyM2MgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL2ludmFsaWRfY2FsbF9hcmd1bWVudF90ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvaW52YWxpZF9jYWxsX2FyZ3VtZW50X3Rlc3QuYwpAQCAtNTYsOCArNTYsNyBAQAogICBncnBjX21ldGFkYXRhX2FycmF5IGluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgZ3JwY19tZXRhZGF0YV9hcnJheSB0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKLSAgY2hhciAqZGV0YWlsczsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHk7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgZ3JwY19jYWxsICpzZXJ2ZXJfY2FsbDsKICAgZ3JwY19zZXJ2ZXIgKnNlcnZlcjsKICAgZ3JwY19tZXRhZGF0YV9hcnJheSBzZXJ2ZXJfaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwpAQCAtNzYsMTcgKzc1LDE3IEBACiAgIGdfc3RhdGUuZGVhZGxpbmUgPSBHUlBDX1RJTUVPVVRfU0VDT05EU19UT19ERUFETElORSgyKTsKICAgZ19zdGF0ZS5jcSA9IGdycGNfY29tcGxldGlvbl9xdWV1ZV9jcmVhdGUoTlVMTCk7CiAgIGdfc3RhdGUuY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGdfc3RhdGUuY3EpOwotICBnX3N0YXRlLmRldGFpbHMgPSBOVUxMOwotICBnX3N0YXRlLmRldGFpbHNfY2FwYWNpdHkgPSAwOworICBnX3N0YXRlLmRldGFpbHMgPSBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIG1lbXNldChnX3N0YXRlLm9wcywgMCwgc2l6ZW9mKGdfc3RhdGUub3BzKSk7CiAKICAgaWYgKGlzX2NsaWVudCkgewogICAgIC8qIGNyZWF0ZSBhIGNhbGwsIGNoYW5uZWwgdG8gYSBub24gZXhpc3RhbnQgc2VydmVyICovCiAgICAgZ19zdGF0ZS5jaGFuID0KICAgICAgICAgZ3JwY19pbnNlY3VyZV9jaGFubmVsX2NyZWF0ZSgibm9uZXhpc3RhbnQ6NTQzMjEiLCBOVUxMLCBOVUxMKTsKKyAgICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygibm9uZXhpc3RhbnQiKTsKICAgICBnX3N0YXRlLmNhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICAgIGdfc3RhdGUuY2hhbiwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGdfc3RhdGUuY3EsICIvRm9vIiwKLSAgICAgICAgIm5vbmV4aXN0YW50IiwgZ19zdGF0ZS5kZWFkbGluZSwgTlVMTCk7CisgICAgICAgIGdfc3RhdGUuY2hhbiwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGdfc3RhdGUuY3EsCisgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvRm9vIiksICZob3N0LCBnX3N0YXRlLmRlYWRsaW5lLCBOVUxMKTsKICAgfSBlbHNlIHsKICAgICBnX3N0YXRlLnNlcnZlciA9IGdycGNfc2VydmVyX2NyZWF0ZShOVUxMLCBOVUxMKTsKICAgICBncnBjX3NlcnZlcl9yZWdpc3Rlcl9jb21wbGV0aW9uX3F1ZXVlKGdfc3RhdGUuc2VydmVyLCBnX3N0YXRlLmNxLCBOVUxMKTsKQEAgLTk3LDkgKzk2LDEwIEBACiAgICAgZ3ByX2pvaW5faG9zdF9wb3J0KCZzZXJ2ZXJfaG9zdHBvcnQsICJsb2NhbGhvc3QiLCBwb3J0KTsKICAgICBnX3N0YXRlLmNoYW4gPSBncnBjX2luc2VjdXJlX2NoYW5uZWxfY3JlYXRlKHNlcnZlcl9ob3N0cG9ydCwgTlVMTCwgTlVMTCk7CiAgICAgZ3ByX2ZyZWUoc2VydmVyX2hvc3Rwb3J0KTsKKyAgICBncnBjX3NsaWNlIGhvc3QgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiYmFyIik7CiAgICAgZ19zdGF0ZS5jYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgICBnX3N0YXRlLmNoYW4sIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBnX3N0YXRlLmNxLCAiL0ZvbyIsICJiYXIiLAotICAgICAgICBnX3N0YXRlLmRlYWRsaW5lLCBOVUxMKTsKKyAgICAgICAgZ19zdGF0ZS5jaGFuLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZ19zdGF0ZS5jcSwKKyAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9Gb28iKSwgJmhvc3QsIGdfc3RhdGUuZGVhZGxpbmUsIE5VTEwpOwogICAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmZ19zdGF0ZS5zZXJ2ZXJfaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgICBncnBjX2NhbGxfZGV0YWlsc19pbml0KCZnX3N0YXRlLmNhbGxfZGV0YWlscyk7CiAgICAgb3AgPSBnX3N0YXRlLm9wczsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICBncnBjX2NhbGxfZGVzdHJveShnX3N0YXRlLmNhbGwpOwogICBjcV92ZXJpZmllcl9kZXN0cm95KGdfc3RhdGUuY3F2KTsKICAgZ3JwY19jaGFubmVsX2Rlc3Ryb3koZ19zdGF0ZS5jaGFuKTsKLSAgZ3ByX2ZyZWUoZ19zdGF0ZS5kZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihnX3N0YXRlLmRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmdfc3RhdGUuaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZnX3N0YXRlLnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IE5VTEw7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSBOVUxMOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjYzLDEyICsyNjMsMTIgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHRhZygyKTsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHRhZygyKTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI4OSw3ICsyODksOCBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzA2LDcgKzMwNyw4IEBACiAgIHByZXBhcmVfdGVzdCgxKTsKICAgb3AgPSBnX3N0YXRlLm9wczsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZnX3N0YXRlLmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CisgICAgICAmZ19zdGF0ZS5pbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0zMTcsNyArMzE5LDggQEAKICAgY3FfdmVyaWZ5KGdfc3RhdGUuY3F2KTsKICAgb3AgPSBnX3N0YXRlLm9wczsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZnX3N0YXRlLmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CisgICAgICAmZ19zdGF0ZS5pbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0zMzUsNyArMzM4LDcgQEAKICAgcHJlcGFyZV90ZXN0KDEpOwogICBvcCA9IGdfc3RhdGUub3BzOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnBheWxvYWQ7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMTsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTM1MywxMiArMzU2LDEyIEBACiAgIHByZXBhcmVfdGVzdCgxKTsKICAgb3AgPSBnX3N0YXRlLm9wczsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZwYXlsb2FkOworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnBheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcGF5bG9hZDsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZwYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzk4LDggKzQwMSw2IEBACiAgICAgICAmZ19zdGF0ZS50cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJmdfc3RhdGUuc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZ19zdGF0ZS5kZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPQotICAgICAgJmdfc3RhdGUuZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTQxNCw3ICs0MTUsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSBOVUxMOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gTlVMTDsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gTlVMTDsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gTlVMTDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTQ1Myw4ICs0NTMsNiBAQAogICAgICAgJmdfc3RhdGUudHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZnX3N0YXRlLnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmdfc3RhdGUuZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICZnX3N0YXRlLmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC00NzQsNyArNDcyLDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMTsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTQ5NSw3ICs0OTQsOCBAQAogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9CiAgICAgICAoc2l6ZV90KUlOVF9NQVggKyAxOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTUxNSwxNCArNTE1LDE1IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC01NzcsOSArNTc4LDggQEAKICAgZ3ByX2xvZyhHUFJfSU5GTywgInRlc3RfaW52YWxpZF9pbml0aWFsX21ldGFkYXRhX3Jlc2VydmVkX2tleSIpOwogCiAgIGdycGNfbWV0YWRhdGEgbWV0YWRhdGE7Ci0gIG1ldGFkYXRhLmtleSA9ICI6c3RhcnRfd2l0aF9jb2xvbiI7Ci0gIG1ldGFkYXRhLnZhbHVlID0gInZhbHVlIjsKLSAgbWV0YWRhdGEudmFsdWVfbGVuZ3RoID0gNjsKKyAgbWV0YWRhdGEua2V5ID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIjpzdGFydF93aXRoX2NvbG9uIik7CisgIG1ldGFkYXRhLnZhbHVlID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbHVlIik7CiAKICAgZ3JwY19vcCAqb3A7CiAgIHByZXBhcmVfdGVzdCgxKTsKQEAgLTU5OSw2ICs1OTksNyBAQAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgIGdycGNfdGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwogICBncnBjX2luaXQoKTsKKyAgdGVzdF9pbnZhbGlkX2luaXRpYWxfbWV0YWRhdGFfcmVzZXJ2ZWRfa2V5KCk7CiAgIHRlc3Rfbm9uX251bGxfcmVzZXJ2ZWRfb25fc3RhcnRfYmF0Y2goKTsKICAgdGVzdF9ub25fbnVsbF9yZXNlcnZlZF9vbl9vcCgpOwogICB0ZXN0X3NlbmRfaW5pdGlhbF9tZXRhZGF0YV9tb3JlX3RoYW5fb25jZSgpOwpAQCAtNjE4LDcgKzYxOSw2IEBACiAgIHRlc3Rfc2VuZF9zZXJ2ZXJfc3RhdHVzX3R3aWNlKCk7CiAgIHRlc3RfcmVjdl9jbG9zZV9vbl9zZXJ2ZXJfd2l0aF9pbnZhbGlkX2ZsYWdzKCk7CiAgIHRlc3RfcmVjdl9jbG9zZV9vbl9zZXJ2ZXJfdHdpY2UoKTsKLSAgdGVzdF9pbnZhbGlkX2luaXRpYWxfbWV0YWRhdGFfcmVzZXJ2ZWRfa2V5KCk7CiAgIGdycGNfc2h1dGRvd24oKTsKIAogICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL25vX3NlcnZlcl90ZXN0LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC9ub19zZXJ2ZXJfdGVzdC5jCmluZGV4IDAzZmY3MGEuLjVjMGY3YTAgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL25vX3NlcnZlcl90ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvbm9fc2VydmVyX3Rlc3QuYwpAQCAtNTIsOCArNTIsNyBAQAogICBncnBjX29wICpvcDsKICAgZ3JwY19tZXRhZGF0YV9hcnJheSB0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogCiAgIGdycGNfdGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwogICBncnBjX2luaXQoKTsKQEAgLTY1LDggKzY0LDEwIEBACiAKICAgLyogY3JlYXRlIGEgY2FsbCwgY2hhbm5lbCB0byBhIG5vbiBleGlzdGFudCBzZXJ2ZXIgKi8KICAgY2hhbiA9IGdycGNfaW5zZWN1cmVfY2hhbm5lbF9jcmVhdGUoIm5vbmV4aXN0YW50OjU0MzIxIiwgTlVMTCwgTlVMTCk7CisgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJub25leGlzdGFudCIpOwogICBjYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNoYW4sIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL0ZvbyIsICJub25leGlzdGFudCIsIGRlYWRsaW5lLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL0ZvbyIpLCAmaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSwgTlVMTCk7CiAKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICBvcCA9IG9wczsKQEAgLTc5LDcgKzgwLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgZ3JwY19jaGFubmVsX2Rlc3Ryb3koY2hhbik7CiAgIGNxX3ZlcmlmaWVyX2Rlc3Ryb3koY3F2KTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKIAogICBncnBjX3NodXRkb3duKCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9hdXRob3JpdHlfbm90X3N1cHBvcnRlZC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvYXV0aG9yaXR5X25vdF9zdXBwb3J0ZWQuYwppbmRleCA3MDU5NzBmLi40ZmY4YWNiIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9hdXRob3JpdHlfbm90X3N1cHBvcnRlZC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2F1dGhvcml0eV9ub3Rfc3VwcG9ydGVkLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDMsOSArMTAzLDE0IEBACiAgIGdycGNfYnl0ZV9idWZmZXIgKnJlcXVlc3RfcGF5bG9hZCA9CiAgICAgICBncnBjX3Jhd19ieXRlX2J1ZmZlcl9jcmVhdGUoJnJlcXVlc3RfcGF5bG9hZF9zbGljZSwgMSk7CiAgIGdwcl90aW1lc3BlYyBkZWFkbGluZSA9IGZpdmVfc2Vjb25kc190aW1lKCk7Ci0gIGdycGNfbWV0YWRhdGEgbWV0YV9jWzJdID0gewotICAgICAgeyJrZXkxIiwgInZhbDEiLCA0LCAwLCB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCi0gICAgICB7ImtleTIiLCAidmFsMiIsIDQsIDAsIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CisgIGdycGNfbWV0YWRhdGEgbWV0YV9jWzJdID0ge3tncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5MSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbDEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5MiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbDIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX19OwogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGYgPQogICAgICAgYmVnaW5fdGVzdChjb25maWcsICJ0ZXN0X3dpdGhfYXV0aG9yaXR5X2hlYWRlciIsIE5VTEwsIE5VTEwpOwogICBjcV92ZXJpZmllciAqY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwpAQCAtMTE2LDExICsxMjEsMTIgQEAKICAgZ3JwY19ieXRlX2J1ZmZlciAqcmVzcG9uc2VfcGF5bG9hZF9yZWN2ID0gTlVMTDsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogCisgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnIiKTsKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9mb28iLCAiZm9vLnRlc3QuZ29vZ2xlLmZyIiwgZGVhZGxpbmUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksICZob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lLCBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIAogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CkBAIC0xMzUsNyArMTQxLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE0NCwxMiArMTUwLDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTU3LDcgKzE2Myw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTY5LDcgKzE3NCw3IEBACiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfQ0FOQ0VMTEVEKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9iYWRfaG9zdG5hbWUuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2JhZF9ob3N0bmFtZS5jCmluZGV4IGUwYzdhYzcuLjZlYWRhM2IgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2JhZF9ob3N0bmFtZS5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2JhZF9ob3N0bmFtZS5jCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwpAQCAtMTA5LDExICsxMDksMTIgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAKKyAgZ3JwY19zbGljZSBob3N0ID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInNsYXJ0aWJhcnRmYXN0LmxvY2FsIik7CiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZm9vIiwgInNsYXJ0aWJhcnRmYXN0LmxvY2FsIiwgZGVhZGxpbmUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksICZob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lLCBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIAogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CkBAIC0xMzMsNyArMTM0LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTQxLDcgKzE0Miw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfSU5URVJOQUwpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2JpbmFyeV9tZXRhZGF0YS5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvYmluYXJ5X21ldGFkYXRhLmMKaW5kZXggZGQ3YThhOS4uOWRmOThlYSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvYmluYXJ5X21ldGFkYXRhLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvYmluYXJ5X21ldGFkYXRhLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMTAsMjUgKzExMCwyNSBAQAogICAgICAgZ3JwY19yYXdfYnl0ZV9idWZmZXJfY3JlYXRlKCZyZXNwb25zZV9wYXlsb2FkX3NsaWNlLCAxKTsKICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lID0gZml2ZV9zZWNvbmRzX3RpbWUoKTsKICAgZ3JwY19tZXRhZGF0YSBtZXRhX2NbMl0gPSB7Ci0gICAgICB7ImtleTEtYmluIiwKLSAgICAgICAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjYyIsCi0gICAgICAgMTMsCisgICAgICB7Z3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImtleTEtYmluIiksCisgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoCisgICAgICAgICAgICJceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjIiksCiAgICAgICAgMCwKICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCi0gICAgICB7ImtleTItYmluIiwKLSAgICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWQiLAotICAgICAgIDE0LAorICAgICAge2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXkyLWJpbiIpLAorICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKAorICAgICAgICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWQiKSwKICAgICAgICAwLAogICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CiAgIGdycGNfbWV0YWRhdGEgbWV0YV9zWzJdID0gewotICAgICAgeyJrZXkzLWJpbiIsCi0gICAgICAgIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZSIsCi0gICAgICAgMTUsCisgICAgICB7Z3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImtleTMtYmluIiksCisgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoCisgICAgICAgICAgICJceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWUiKSwKICAgICAgICAwLAogICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fSwKLSAgICAgIHsia2V5NC1iaW4iLAotICAgICAgICJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIiwKLSAgICAgICAxNiwKKyAgICAgIHtncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5NC1iaW4iKSwKKyAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygKKyAgICAgICAgICAgIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiKSwKICAgICAgICAwLAogICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZiA9IGJlZ2luX3Rlc3QoCkBAIC0xNDQsMTMgKzE0NCwxMyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3NywxMiArMTc3LDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTkwLDcgKzE5MCw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjEzLDcgKzIxMiw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMzEsMTQgKzIzMCwxNCBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0KKyAgZ3JwY19zbGljZSBzdGF0dXNfc3RyaW5nID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoCiAgICAgICAiXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMFx4MTFceDEyIgogICAgICAgIlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWZceDIwXHgyMVx4MjJceDIzXHgyNCIKICAgICAgICJceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzYiCkBAIC0yNTMsNyArMjUyLDggQEAKICAgICAgICJceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDgiCiAgICAgICAiXHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhIgogICAgICAgIlx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmYyIKLSAgICAgICJceGZkXHhmZVx4ZmYiOworICAgICAgIlx4ZmRceGZlXHhmZiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfc3RyaW5nOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjY3LDI0ICsyNjcsMjUgQEAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfT0spOwogICBHUFJfQVNTRVJUKAogICAgICAgMCA9PQotICAgICAgc3RyY21wKGRldGFpbHMsCi0gICAgICAgICAgICAgIlx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZlx4MTAiCi0gICAgICAgICAgICAgIlx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZlx4MjAiCi0gICAgICAgICAgICAgIlx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZlx4MzAiCi0gICAgICAgICAgICAgIlx4MzFceDMyXHgzM1x4MzRceDM1XHgzNlx4MzdceDM4XHgzOVx4M2FceDNiXHgzY1x4M2RceDNlXHgzZlx4NDAiCi0gICAgICAgICAgICAgIlx4NDFceDQyXHg0M1x4NDRceDQ1XHg0Nlx4NDdceDQ4XHg0OVx4NGFceDRiXHg0Y1x4NGRceDRlXHg0Zlx4NTAiCi0gICAgICAgICAgICAgIlx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTdceDU4XHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1Zlx4NjAiCi0gICAgICAgICAgICAgIlx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2Zlx4NzAiCi0gICAgICAgICAgICAgIlx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4XHg3OVx4N2FceDdiXHg3Y1x4N2RceDdlXHg3Zlx4ODAiCi0gICAgICAgICAgICAgIlx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTAiCi0gICAgICAgICAgICAgIlx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTAiCi0gICAgICAgICAgICAgIlx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjAiCi0gICAgICAgICAgICAgIlx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzAiCi0gICAgICAgICAgICAgIlx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDAiCi0gICAgICAgICAgICAgIlx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTAiCi0gICAgICAgICAgICAgIlx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjAiCi0gICAgICAgICAgICAgIlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgICAgIGdycGNfc2xpY2Vfc3RyX2NtcCgKKyAgICAgICAgICBkZXRhaWxzLAorICAgICAgICAgICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwIgorICAgICAgICAgICJceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWZceDIwIgorICAgICAgICAgICJceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3XHgyOFx4MjlceDJhXHgyYlx4MmNceDJkXHgyZVx4MmZceDMwIgorICAgICAgICAgICJceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2ZceDQwIgorICAgICAgICAgICJceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3XHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGZceDUwIgorICAgICAgICAgICJceDUxXHg1Mlx4NTNceDU0XHg1NVx4NTZceDU3XHg1OFx4NTlceDVhXHg1Ylx4NWNceDVkXHg1ZVx4NWZceDYwIgorICAgICAgICAgICJceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmZceDcwIgorICAgICAgICAgICJceDcxXHg3Mlx4NzNceDc0XHg3NVx4NzZceDc3XHg3OFx4NzlceDdhXHg3Ylx4N2NceDdkXHg3ZVx4N2ZceDgwIgorICAgICAgICAgICJceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwIgorICAgICAgICAgICJceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwIgorICAgICAgICAgICJceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwIgorICAgICAgICAgICJceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwIgorICAgICAgICAgICJceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwIgorICAgICAgICAgICJceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwIgorICAgICAgICAgICJceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwIgorICAgICAgICAgICJceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMCk7CkBAIC0zMDMsNyArMzA0LDcgQEAKICAgICAgICZpbml0aWFsX21ldGFkYXRhX3JlY3YsICJrZXk0LWJpbiIsCiAgICAgICAiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIpKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYWxsX2NyZWRzLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYWxsX2NyZWRzLmMKaW5kZXggNjA2OTM4Zi4uODEzMDliYiAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FsbF9jcmVkcy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NhbGxfY3JlZHMuYwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWlsX3NlcnZlcl9hdXRoX2NoZWNrKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoTlVMTCwgTlVMTCk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgTlVMTCk7CiAgIGlmIChmYWlsX3NlcnZlcl9hdXRoX2NoZWNrKSB7CkBAIC0xNTYsOCArMTU2LDcgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKICAgZ3JwY19jYWxsX2NyZWRlbnRpYWxzICpjcmVkcyA9IE5VTEw7CiAgIGdycGNfYXV0aF9jb250ZXh0ICpzX2F1dGhfY29udGV4dCA9IE5VTEw7CkBAIC0xNjcsOCArMTY2LDkgQEAKICAgY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogICBjcmVkcyA9IGdycGNfZ29vZ2xlX2lhbV9jcmVkZW50aWFsc19jcmVhdGUoaWFtX3Rva2VuLCBpYW1fc2VsZWN0b3IsIE5VTEwpOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMTIsMTIgKzIxMiwxMiBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIyNSw3ICsyMjUsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI1OSw3ICsyNTgsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjc3LDE0ICsyNzYsMTUgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI5Niw4ICsyOTYsOCBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19PSyk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDApOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKQEAgLTM5MSw4ICszOTEsNyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgZ3JwY19ieXRlX2J1ZmZlciAqcmVzcG9uc2VfcGF5bG9hZF9yZWN2ID0gTlVMTDsKICAgZ3JwY19zbGljZSByZXF1ZXN0X3BheWxvYWRfc2xpY2UgPQogICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoImhlbGxvIHdvcmxkIik7CkBAIC00MDQsOCArNDAzLDkgQEAKICAgY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC00MjUsNyArNDI1LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC00MzUsNyArNDM0LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTQ0NCwxMiArNDQzLDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtNDY4LDcgKzQ2Nyw3IEBACiAKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlcXVlc3RfcGF5bG9hZCk7CiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXNwb25zZV9wYXlsb2FkX3JlY3YpOwotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKIAogICBncnBjX2NhbGxfZGVzdHJveShjKTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2FmdGVyX2FjY2VwdC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2FmdGVyX2FjY2VwdC5jCmluZGV4IGE4ZTMxMGMuLmE4MTI3YzAgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NhbmNlbF9hZnRlcl9hY2NlcHQuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfYWZ0ZXJfYWNjZXB0LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvdXNlZnVsLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX2FyZ3MuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5oIgogCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTE4LDggKzExOSw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBncnBjX2J5dGVfYnVmZmVyICpyZXF1ZXN0X3BheWxvYWRfcmVjdiA9IE5VTEw7CiAgIGdycGNfYnl0ZV9idWZmZXIgKnJlc3BvbnNlX3BheWxvYWRfcmVjdiA9IE5VTEw7CiAgIGdycGNfc2xpY2UgcmVxdWVzdF9wYXlsb2FkX3NsaWNlID0KQEAgLTE1NCw4ICsxNTQsOSBAQAogICBjcV92ZXJpZmllciAqY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvc2VydmljZS9tZXRob2QiLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9zZXJ2aWNlL21ldGhvZCIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTcwLDcgKzE3MSw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTgwLDE3ICsxODAsMTcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMDYsNyArMjA2LDcgQEAKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICBvcCA9IG9wczsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIxNiw3ICsyMTYsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlc3BvbnNlX3BheWxvYWQpOwogICBncnBjX2J5dGVfYnVmZmVyX2Rlc3Ryb3kocmVxdWVzdF9wYXlsb2FkX3JlY3YpOwogICBncnBjX2J5dGVfYnVmZmVyX2Rlc3Ryb3kocmVzcG9uc2VfcGF5bG9hZF9yZWN2KTsKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAKICAgZ3JwY19jYWxsX2Rlc3Ryb3koYyk7CiAgIGdycGNfY2FsbF9kZXN0cm95KHMpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2FmdGVyX2NsaWVudF9kb25lLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfYWZ0ZXJfY2xpZW50X2RvbmUuYwppbmRleCA3NzQyZjlkLi5kM2JlYjA0IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfYWZ0ZXJfY2xpZW50X2RvbmUuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfYWZ0ZXJfY2xpZW50X2RvbmUuYwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExMyw4ICsxMTMsNyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgZ3JwY19ieXRlX2J1ZmZlciAqcmVxdWVzdF9wYXlsb2FkX3JlY3YgPSBOVUxMOwogICBncnBjX2J5dGVfYnVmZmVyICpyZXNwb25zZV9wYXlsb2FkX3JlY3YgPSBOVUxMOwogICBncnBjX3NsaWNlIHJlcXVlc3RfcGF5bG9hZF9zbGljZSA9CkBAIC0xMjgsOCArMTI3LDkgQEAKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xNDQsNyArMTQ0LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTQsNyArMTUzLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE2MywxMiArMTYyLDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTg0LDcgKzE4Myw3IEBACiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xOTksNyArMTk4LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjI0LDcgKzIyMyw3IEBACiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXNwb25zZV9wYXlsb2FkKTsKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlcXVlc3RfcGF5bG9hZF9yZWN2KTsKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlc3BvbnNlX3BheWxvYWRfcmVjdik7Ci0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogCiAgIGdycGNfY2FsbF9kZXN0cm95KGMpOwogICBncnBjX2NhbGxfZGVzdHJveShzKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NhbmNlbF9hZnRlcl9pbnZva2UuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NhbmNlbF9hZnRlcl9pbnZva2UuYwppbmRleCBjM2M1NDE4Li4yZjA5MWNiIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfYWZ0ZXJfaW52b2tlLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2FmdGVyX2ludm9rZS5jCkBAIC01Miw3ICs1Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSwgbW9kZS5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lLAorICAgICAgICAgIG1vZGUubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTEzLDggKzExNCw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBncnBjX2J5dGVfYnVmZmVyICpyZXNwb25zZV9wYXlsb2FkX3JlY3YgPSBOVUxMOwogICBncnBjX3NsaWNlIHJlcXVlc3RfcGF5bG9hZF9zbGljZSA9CiAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZygiaGVsbG8gd29ybGQiKTsKQEAgLTEyMiw4ICsxMjIsOSBAQAogICAgICAgZ3JwY19yYXdfYnl0ZV9idWZmZXJfY3JlYXRlKCZyZXF1ZXN0X3BheWxvYWRfc2xpY2UsIDEpOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xMzgsNyArMTM5LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE1NywxMiArMTU3LDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlcXVlc3RfcGF5bG9hZCk7CiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXNwb25zZV9wYXlsb2FkX3JlY3YpOwotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKIAogICBncnBjX2NhbGxfZGVzdHJveShjKTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2JlZm9yZV9pbnZva2UuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NhbmNlbF9iZWZvcmVfaW52b2tlLmMKaW5kZXggZDQ4NDI4Mi4uZTYxYTgzOCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2JlZm9yZV9pbnZva2UuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfYmVmb3JlX2ludm9rZS5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTExLDggKzExMSw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBncnBjX2J5dGVfYnVmZmVyICpyZXNwb25zZV9wYXlsb2FkX3JlY3YgPSBOVUxMOwogICBncnBjX3NsaWNlIHJlcXVlc3RfcGF5bG9hZF9zbGljZSA9CiAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZygiaGVsbG8gd29ybGQiKTsKQEAgLTEyMCw4ICsxMTksOSBAQAogICAgICAgZ3JwY19yYXdfYnl0ZV9idWZmZXJfY3JlYXRlKCZyZXF1ZXN0X3BheWxvYWRfc2xpY2UsIDEpOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xMzgsNyArMTM4LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNDgsNyArMTQ3LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE1NywxMiArMTU2LDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTgxLDcgKzE4MCw3IEBACiAKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlcXVlc3RfcGF5bG9hZCk7CiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXNwb25zZV9wYXlsb2FkX3JlY3YpOwotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKIAogICBncnBjX2NhbGxfZGVzdHJveShjKTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX2luX2FfdmFjdXVtLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfaW5fYV92YWN1dW0uYwppbmRleCA1YmU4NTBiLi45OGQwMmE1IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfaW5fYV92YWN1dW0uYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9jYW5jZWxfaW5fYV92YWN1dW0uYwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTEwNiw4ICsxMDYsOSBAQAogICBjcV92ZXJpZmllciAqdl9jbGllbnQgPSBjcV92ZXJpZmllcl9jcmVhdGUoZi5jcSk7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NhbmNlbF93aXRoX3N0YXR1cy5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX3dpdGhfc3RhdHVzLmMKaW5kZXggM2FlY2FmNy4uYTUzODg0NCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX3dpdGhfc3RhdHVzLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY2FuY2VsX3dpdGhfc3RhdHVzLmMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDgsMTQgKzEwOCwxNCBAQAogICBncnBjX21ldGFkYXRhX2FycmF5IHRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKIAogICBncHJfbG9nKEdQUl9ERUJVRywgInRlc3Qgd2l0aCAlIiBQUkl1UFRSICIgb3BzIiwgbnVtX29wcyk7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTEyOCwxMiArMTI4LDExIEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTYsOSArMTU1LDkgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2NvbXByZXNzZWRfcGF5bG9hZC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY29tcHJlc3NlZF9wYXlsb2FkLmMKaW5kZXggZDdlZmU3Ny4uNjJjZGI0MSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY29tcHJlc3NlZF9wYXlsb2FkLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvY29tcHJlc3NlZF9wYXlsb2FkLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvY2hhbm5lbC9jaGFubmVsX2FyZ3MuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvc3VyZmFjZS9jYWxsLmgiCiAjaW5jbHVkZSAic3JjL2NvcmUvbGliL3N1cmZhY2UvY2FsbF90ZXN0X29ubHkuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oIgogI2luY2x1ZGUgInRlc3QvY29yZS9lbmQyZW5kL2NxX3ZlcmlmaWVyLmgiCiAKIHN0YXRpYyB2b2lkICp0YWcoaW50cHRyX3QgdCkgeyByZXR1cm4gKHZvaWQgKil0OyB9CkBAIC01Nyw3ICs1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTI1LDggKzEyNiw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAgIGNxX3ZlcmlmaWVyICpjcXY7CiAgIGNoYXIgc3RyWzEwMjRdOwpAQCAtMTUxLDggKzE1MSw5IEBACiAgIGNxdiA9IGNxX3ZlcmlmaWVyX2NyZWF0ZShmLmNxKTsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTc0LDcgKzE3NSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IHNlbmRfZmxhZ3NfYml0bWFzazsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE4Myw3ICsxODQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xOTEsNyArMTkyLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMTIsNyArMjEyLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI0NSwxMyArMjQ1LDEzIEBACiAgIGdwcl9hc3ByaW50ZigmZXhwZWN0ZWRfZGV0YWlscywgIkNvbXByZXNzaW9uIGFsZ29yaXRobSAnJXMnIGlzIGRpc2FibGVkLiIsCiAgICAgICAgICAgICAgICBhbGdvX25hbWUpOwogICAvKiBhbmQgd2UgZXhwZWN0IGEgc3BlY2lmaWMgcmVhc29uIGZvciBpdCAqLwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsIGV4cGVjdGVkX2RldGFpbHMpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCBleHBlY3RlZF9kZXRhaWxzKSk7CiAgIGdwcl9mcmVlKGV4cGVjdGVkX2RldGFpbHMpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CkBAIC0zMDUsOCArMzA1LDcgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKICAgY3FfdmVyaWZpZXIgKmNxdjsKICAgY2hhciByZXF1ZXN0X3N0clsxMDI0XTsKQEAgLTMzMSw4ICszMzAsOSBAQAogICBjcXYgPSBjcV92ZXJpZmllcl9jcmVhdGUoZi5jcSk7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTM1NCw3ICszNTQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0zNjIsNyArMzYyLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC00MTIsMTIgKzQxMSwxMiBAQAogICAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgICBvcCA9IG9wczsKICAgICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgICAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgICBvcC0+ZmxhZ3MgPSBjbGllbnRfc2VuZF9mbGFnc19iaXRtYXNrOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgICAgb3ArKzsKICAgICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICAgIG9wLT5mbGFncyA9IDA7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICBvcCsrOwpAQCAtNDI3LDcgKzQyNiw3IEBACiAgICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICAgIG9wID0gb3BzOwogICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjsKKyAgICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICAgIG9wLT5mbGFncyA9IDA7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICBvcCsrOwpAQCAtNDQ0LDcgKzQ0Myw3IEBACiAgICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICAgIG9wID0gb3BzOwogICAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CisgICAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC00ODksNyArNDg4LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19PSzsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC01MDMsMTMgKzUwMywxMyBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19PSyk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDApOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKQEAgLTU2OSwxNyArNTY5LDE0IEBACiAgIGdycGNfbWV0YWRhdGEgZ3ppcF9jb21wcmVzc2lvbl9vdmVycmlkZTsKICAgZ3JwY19tZXRhZGF0YSBpZGVudGl0eV9jb21wcmVzc2lvbl9vdmVycmlkZTsKIAotICBnemlwX2NvbXByZXNzaW9uX292ZXJyaWRlLmtleSA9IEdSUENfQ09NUFJFU1NJT05fUkVRVUVTVF9BTEdPUklUSE1fTURfS0VZOwotICBnemlwX2NvbXByZXNzaW9uX292ZXJyaWRlLnZhbHVlID0gImd6aXAiOwotICBnemlwX2NvbXByZXNzaW9uX292ZXJyaWRlLnZhbHVlX2xlbmd0aCA9Ci0gICAgICBzdHJsZW4oZ3ppcF9jb21wcmVzc2lvbl9vdmVycmlkZS52YWx1ZSk7CisgIGd6aXBfY29tcHJlc3Npb25fb3ZlcnJpZGUua2V5ID0gR1JQQ19NRFNUUl9HUlBDX0lOVEVSTkFMX0VOQ09ESU5HX1JFUVVFU1Q7CisgIGd6aXBfY29tcHJlc3Npb25fb3ZlcnJpZGUudmFsdWUgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiZ3ppcCIpOwogICBtZW1zZXQoJmd6aXBfY29tcHJlc3Npb25fb3ZlcnJpZGUuaW50ZXJuYWxfZGF0YSwgMCwKICAgICAgICAgIHNpemVvZihnemlwX2NvbXByZXNzaW9uX292ZXJyaWRlLmludGVybmFsX2RhdGEpKTsKIAotICBpZGVudGl0eV9jb21wcmVzc2lvbl9vdmVycmlkZS5rZXkgPSBHUlBDX0NPTVBSRVNTSU9OX1JFUVVFU1RfQUxHT1JJVEhNX01EX0tFWTsKLSAgaWRlbnRpdHlfY29tcHJlc3Npb25fb3ZlcnJpZGUudmFsdWUgPSAiaWRlbnRpdHkiOwotICBpZGVudGl0eV9jb21wcmVzc2lvbl9vdmVycmlkZS52YWx1ZV9sZW5ndGggPQotICAgICAgc3RybGVuKGlkZW50aXR5X2NvbXByZXNzaW9uX292ZXJyaWRlLnZhbHVlKTsKKyAgaWRlbnRpdHlfY29tcHJlc3Npb25fb3ZlcnJpZGUua2V5ID0gR1JQQ19NRFNUUl9HUlBDX0lOVEVSTkFMX0VOQ09ESU5HX1JFUVVFU1Q7CisgIGlkZW50aXR5X2NvbXByZXNzaW9uX292ZXJyaWRlLnZhbHVlID0KKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJpZGVudGl0eSIpOwogICBtZW1zZXQoJmlkZW50aXR5X2NvbXByZXNzaW9uX292ZXJyaWRlLmludGVybmFsX2RhdGEsIDAsCiAgICAgICAgICBzaXplb2YoaWRlbnRpdHlfY29tcHJlc3Npb25fb3ZlcnJpZGUuaW50ZXJuYWxfZGF0YSkpOwogCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9kZWZhdWx0X2hvc3QuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2RlZmF1bHRfaG9zdC5jCmluZGV4IDIwOGUzMTYuLmI4NGVhZjIgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2RlZmF1bHRfaG9zdC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2RlZmF1bHRfaG9zdC5jCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwpAQCAtMTEwLDEzICsxMTAsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKICAgY2hhciAqcGVlcjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2ZvbyIsIE5VTEwsIGRlYWRsaW5lLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lLCBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIAogICBwZWVyID0gZ3JwY19jYWxsX2dldF9wZWVyKGMpOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE0OSw3ICsxNDksNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE4Miw3ICsxODEsOCBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTk5LDEyICsxOTksMTIgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cm5jbXAoY2FsbF9kZXRhaWxzLmhvc3QsICJsb2NhbGhvc3QiLCA5KSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2J1Zl9zdGFydF9lcShjYWxsX2RldGFpbHMuaG9zdCwgImxvY2FsaG9zdCIsIDkpKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDEpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2Rpc2FwcGVhcmluZ19zZXJ2ZXIuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2Rpc2FwcGVhcmluZ19zZXJ2ZXIuYwppbmRleCA4ZWJmN2U2Li42ZDYxYzY2IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9kaXNhcHBlYXJpbmdfc2VydmVyLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZGlzYXBwZWFyaW5nX3NlcnZlci5jCkBAIC05MywxMyArOTMsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi0+Y2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi0+Y3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYtPmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYtPmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xMjgsNyArMTI4LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTYsNyArMTU1LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3NCwxMyArMTc0LDEzIEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAxKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CkBAIC0xOTQsNyArMTk0LDggQEAKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKE5VTEwsIE5VTEwpOwogICBjcV92ZXJpZmllciAqY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwogCi0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsICJkaXNhcHBlYXJpbmdfc2VydmVyX3Rlc3QiLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgImRpc2FwcGVhcmluZ19zZXJ2ZXJfdGVzdCIsCisgICAgICAgICAgY29uZmlnLm5hbWUpOwogCiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgTlVMTCk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgTlVMTCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9lbXB0eV9iYXRjaC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZW1wdHlfYmF0Y2guYwppbmRleCBkYzhlNTJhLi4xYWM2ZWE4IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9lbXB0eV9iYXRjaC5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2VtcHR5X2JhdGNoLmMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDYsOCArMTA2LDkgQEAKICAgZ3JwY19vcCAqb3AgPSBOVUxMOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9maWx0ZXJfY2FsbF9pbml0X2ZhaWxzLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9maWx0ZXJfY2FsbF9pbml0X2ZhaWxzLmMKaW5kZXggYWM5ZDJkZC4uMDJhZGQ3YSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZmlsdGVyX2NhbGxfaW5pdF9mYWlscy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2ZpbHRlcl9jYWxsX2luaXRfZmFpbHMuYwpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTEyNSwxMiArMTI1LDEyIEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjUsNyArMTY1LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODEsOSArMTgwLDkgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfUEVSTUlTU0lPTl9ERU5JRUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJhY2Nlc3MgZGVuaWVkIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJhY2Nlc3MgZGVuaWVkIikpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2ZpbHRlcl9jYXVzZXNfY2xvc2UuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2ZpbHRlcl9jYXVzZXNfY2xvc2UuYwppbmRleCA0NWY2MjNjLi5hOTFiM2RjIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9maWx0ZXJfY2F1c2VzX2Nsb3NlLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZmlsdGVyX2NhdXNlc19jbG9zZS5jCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTIxLDEyICsxMjEsMTIgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE2MSw3ICsxNjEsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3Nyw5ICsxNzYsMTAgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfUEVSTUlTU0lPTl9ERU5JRUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJGYWlsdXJlIHRoYXQncyBub3QgcHJldmVudGFibGUuIikpOworICBHUFJfQVNTRVJUKDAgPT0KKyAgICAgICAgICAgICBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgIkZhaWx1cmUgdGhhdCdzIG5vdCBwcmV2ZW50YWJsZS4iKSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpAQCAtMjA4LDE4ICsyMDgsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19lcnJvciAqZXJyb3IpIHsKICAgZ3JwY19jYWxsX2VsZW1lbnQgKmVsZW0gPSBhcmc7CiAgIGNhbGxfZGF0YSAqY2FsbGQgPSBlbGVtLT5jYWxsX2RhdGE7Ci0gIGlmIChlcnJvciA9PSBHUlBDX0VSUk9SX05PTkUpIHsKLSAgICAvLyBjbG9zZSB0aGUgc3RyZWFtIHdpdGggYW4gZXJyb3IuCi0gICAgZ3JwY19zbGljZSBtZXNzYWdlID0KLSAgICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoIkZhaWx1cmUgdGhhdCdzIG5vdCBwcmV2ZW50YWJsZS4iKTsKLSAgICBncnBjX3RyYW5zcG9ydF9zdHJlYW1fb3AgKm9wID0gZ3JwY19tYWtlX3RyYW5zcG9ydF9zdHJlYW1fb3AoTlVMTCk7Ci0gICAgZ3JwY190cmFuc3BvcnRfc3RyZWFtX29wX2FkZF9jbG9zZShleGVjX2N0eCwgb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19QRVJNSVNTSU9OX0RFTklFRCwgJm1lc3NhZ2UpOwotICAgIGdycGNfY2FsbF9uZXh0X29wKGV4ZWNfY3R4LCBlbGVtLCBvcCk7Ci0gIH0KICAgZ3JwY19jbG9zdXJlX3NjaGVkKAogICAgICAgZXhlY19jdHgsIGNhbGxkLT5yZWN2X2ltX3JlYWR5LAotICAgICAgR1JQQ19FUlJPUl9DUkVBVEVfUkVGRVJFTkNJTkcoIkZvcmNlZCBjYWxsIHRvIGNsb3NlIiwgJmVycm9yLCAxKSk7CisgICAgICBncnBjX2Vycm9yX3NldF9pbnQoR1JQQ19FUlJPUl9DUkVBVEVfUkVGRVJFTkNJTkcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsdXJlIHRoYXQncyBub3QgcHJldmVudGFibGUuIiwgJmVycm9yLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0VSUk9SX0lOVF9HUlBDX1NUQVRVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19QRVJNSVNTSU9OX0RFTklFRCkpOwogfQogCiBzdGF0aWMgdm9pZCBzdGFydF90cmFuc3BvcnRfc3RyZWFtX29wKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZmlsdGVyX2xhdGVuY3kuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2ZpbHRlcl9sYXRlbmN5LmMKaW5kZXggZGJiNWM4ZC4uNWJjNjMxMyAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZmlsdGVyX2xhdGVuY3kuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9maWx0ZXJfbGF0ZW5jeS5jCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTI4LDggKzEyOCw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgZ3ByX211X2xvY2soJmdfbXUpOwpAQCAtMTM4LDggKzEzNywxMCBAQAogICBncHJfbXVfdW5sb2NrKCZnX211KTsKICAgY29uc3QgZ3ByX3RpbWVzcGVjIHN0YXJ0X3RpbWUgPSBncHJfbm93KEdQUl9DTE9DS19NT05PVE9OSUMpOwogCi0gIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZm9vIiwgImZvby50ZXN0Lmdvb2dsZS5mciIsIGRlYWRsaW5lLCBOVUxMKTsKKyAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyIiwgY29uZmlnKSwgZGVhZGxpbmUsIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKQEAgLTE1Niw3ICsxNTcsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTY1LDcgKzE2Niw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3Myw3ICsxNzQsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE5OCw3ICsxOTgsOCBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX3N0cmluZyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX3N0cmluZzsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIxNSw5ICsyMTYsOSBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvZ3JhY2VmdWxfc2VydmVyX3NodXRkb3duLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ncmFjZWZ1bF9zZXJ2ZXJfc2h1dGRvd24uYwppbmRleCA1ZmVjYWRiLi5jNWUzNjY3IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ncmFjZWZ1bF9zZXJ2ZXJfc2h1dGRvd24uYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ncmFjZWZ1bF9zZXJ2ZXJfc2h1dGRvd24uYwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTEwNywxMyArMTA3LDEzIEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNDMsNyArMTQzLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNzEsNyArMTcwLDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE5MSwxMiArMTkxLDEyIEBACiAgIGdycGNfY2FsbF9kZXN0cm95KHMpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDEpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2hpZ2hfaW5pdGlhbF9zZXFuby5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaGlnaF9pbml0aWFsX3NlcW5vLmMKaW5kZXggMDFhNDkwOS4uYzllYWUxMyAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaGlnaF9pbml0aWFsX3NlcW5vLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaGlnaF9pbml0aWFsX3NlcW5vLmMKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMTMsMTMgKzExMywxMyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTcyLDcgKzE3MSw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODksMTMgKzE4OSwxMyBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpAQCAtMjMzLDcgKzIzMyw3IEBACiAgIGYgPSBiZWdpbl90ZXN0KGNvbmZpZywgbmFtZSwgJmNsaWVudF9hcmdzLCBOVUxMKTsKICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgICBzaW1wbGVfcmVxdWVzdF9ib2R5KGNvbmZpZywgZik7Ci0gICAgZ3ByX2xvZyhHUFJfSU5GTywgIlBhc3NlZCBzaW1wbGUgcmVxdWVzdCAlZCIsIGkpOworICAgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6IFBhc3NlZCBzaW1wbGUgcmVxdWVzdCAlZCIsIGkpOwogICB9CiAgIGVuZF90ZXN0KCZmKTsKICAgY29uZmlnLnRlYXJfZG93bl9kYXRhKCZmKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2hwYWNrX3NpemUuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2hwYWNrX3NpemUuYwppbmRleCBjZWM4YjJmLi4xMzc2YmEwIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ocGFja19zaXplLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaHBhY2tfc2l6ZS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0yNTQsMjQgKzI1NCwyNCBAQAogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwogICBncnBjX21ldGFkYXRhIGV4dHJhX21ldGFkYXRhWzNdOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBtZW1zZXQoZXh0cmFfbWV0YWRhdGEsIDAsIHNpemVvZihleHRyYV9tZXRhZGF0YSkpOwotICBleHRyYV9tZXRhZGF0YVswXS5rZXkgPSAiaG9iYml0LWZpcnN0LW5hbWUiOwotICBleHRyYV9tZXRhZGF0YVswXS52YWx1ZSA9IGhvYmJpdHNbaW5kZXggJSBHUFJfQVJSQVlfU0laRShob2JiaXRzKV1bMF07Ci0gIGV4dHJhX21ldGFkYXRhWzBdLnZhbHVlX2xlbmd0aCA9IHN0cmxlbihleHRyYV9tZXRhZGF0YVswXS52YWx1ZSk7Ci0gIGV4dHJhX21ldGFkYXRhWzFdLmtleSA9ICJob2JiaXQtc2Vjb25kLW5hbWUiOwotICBleHRyYV9tZXRhZGF0YVsxXS52YWx1ZSA9IGhvYmJpdHNbaW5kZXggJSBHUFJfQVJSQVlfU0laRShob2JiaXRzKV1bMV07Ci0gIGV4dHJhX21ldGFkYXRhWzFdLnZhbHVlX2xlbmd0aCA9IHN0cmxlbihleHRyYV9tZXRhZGF0YVsxXS52YWx1ZSk7Ci0gIGV4dHJhX21ldGFkYXRhWzJdLmtleSA9ICJkcmFnb24iOwotICBleHRyYV9tZXRhZGF0YVsyXS52YWx1ZSA9IGRyYWdvbnNbaW5kZXggJSBHUFJfQVJSQVlfU0laRShkcmFnb25zKV07Ci0gIGV4dHJhX21ldGFkYXRhWzJdLnZhbHVlX2xlbmd0aCA9IHN0cmxlbihleHRyYV9tZXRhZGF0YVsyXS52YWx1ZSk7CisgIGV4dHJhX21ldGFkYXRhWzBdLmtleSA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJob2JiaXQtZmlyc3QtbmFtZSIpOworICBleHRyYV9tZXRhZGF0YVswXS52YWx1ZSA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKAorICAgICAgaG9iYml0c1tpbmRleCAlIEdQUl9BUlJBWV9TSVpFKGhvYmJpdHMpXVswXSk7CisgIGV4dHJhX21ldGFkYXRhWzFdLmtleSA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJob2JiaXQtc2Vjb25kLW5hbWUiKTsKKyAgZXh0cmFfbWV0YWRhdGFbMV0udmFsdWUgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygKKyAgICAgIGhvYmJpdHNbaW5kZXggJSBHUFJfQVJSQVlfU0laRShob2JiaXRzKV1bMV0pOworICBleHRyYV9tZXRhZGF0YVsyXS5rZXkgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiZHJhZ29uIik7CisgIGV4dHJhX21ldGFkYXRhWzJdLnZhbHVlID0KKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGRyYWdvbnNbaW5kZXggJSBHUFJfQVJSQVlfU0laRShkcmFnb25zKV0pOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzAxLDcgKzMwMSw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzI1LDcgKzMyNCw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0zNDIsMTMgKzM0MiwxMyBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaWRlbXBvdGVudF9yZXF1ZXN0LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9pZGVtcG90ZW50X3JlcXVlc3QuYwppbmRleCA0ZjZkM2JiLi42NWFjY2JiIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9pZGVtcG90ZW50X3JlcXVlc3QuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9pZGVtcG90ZW50X3JlcXVlc3QuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExMSwxNCArMTExLDE0IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAgIGNoYXIgKnBlZXI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTIsNyArMTUyLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODUsNyArMTg0LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIwMiwxNCArMjAyLDE0IEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQoR1JQQ19JTklUSUFMX01FVEFEQVRBX0lERU1QT1RFTlRfUkVRVUVTVCA9PSBjYWxsX2RldGFpbHMuZmxhZ3MpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaW52b2tlX2xhcmdlX3JlcXVlc3QuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2ludm9rZV9sYXJnZV9yZXF1ZXN0LmMKaW5kZXggMjRhYmZhMi4uZWQxNjkwNCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvaW52b2tlX2xhcmdlX3JlcXVlc3QuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9pbnZva2VfbGFyZ2VfcmVxdWVzdC5jCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTQwLDEzICsxNDAsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTYzLDcgKzE2Myw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNzIsMTIgKzE3MiwxMiBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE4NSw3ICsxODUsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIwNyw3ICsyMDYsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjI1LDE0ICsyMjQsMTUgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjQ0LDEzICsyNDQsMTMgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRCk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDEpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2xhcmdlX21ldGFkYXRhLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9sYXJnZV9tZXRhZGF0YS5jCmluZGV4IDY5YjRiMjQuLmRhYzljM2IgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2xhcmdlX21ldGFkYXRhLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbGFyZ2VfbWV0YWRhdGEuYwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTEyMiwyMSArMTIyLDE5IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKLSAgbWV0YS5rZXkgPSAia2V5IjsKLSAgbWV0YS52YWx1ZSA9IGdwcl9tYWxsb2MobGFyZ2Vfc2l6ZSArIDEpOwotICBtZW1zZXQoKGNoYXIgKiltZXRhLnZhbHVlLCAnYScsIGxhcmdlX3NpemUpOwotICAoKGNoYXIgKiltZXRhLnZhbHVlKVtsYXJnZV9zaXplXSA9IDA7Ci0gIG1ldGEudmFsdWVfbGVuZ3RoID0gbGFyZ2Vfc2l6ZTsKKyAgbWV0YS5rZXkgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5Iik7CisgIG1ldGEudmFsdWUgPSBncnBjX3NsaWNlX21hbGxvYyhsYXJnZV9zaXplKTsKKyAgbWVtc2V0KEdSUENfU0xJQ0VfU1RBUlRfUFRSKG1ldGEudmFsdWUpLCAnYScsIGxhcmdlX3NpemUpOwogCiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKQEAgLTE1Myw3ICsxNTEsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTYyLDcgKzE2MCw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3MCw3ICsxNjgsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE5NCw3ICsxOTEsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE2LDcgKzIxMyw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjI4LDE1ICsyMjYsMTcgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfT0spOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAwKTsKICAgR1BSX0FTU0VSVChieXRlX2J1ZmZlcl9lcV9zdHJpbmcocmVxdWVzdF9wYXlsb2FkX3JlY3YsICJoZWxsbyB3b3JsZCIpKTsKLSAgR1BSX0FTU0VSVChjb250YWluc19tZXRhZGF0YSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2LCAia2V5IiwgbWV0YS52YWx1ZSkpOworICBHUFJfQVNTRVJUKGNvbnRhaW5zX21ldGFkYXRhX3NsaWNlcygmcmVxdWVzdF9tZXRhZGF0YV9yZWN2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEudmFsdWUpKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CkBAIC0yNTAsNyArMjUwLDcgQEAKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlcXVlc3RfcGF5bG9hZCk7CiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXF1ZXN0X3BheWxvYWRfcmVjdik7CiAKLSAgZ3ByX2ZyZWUoKGNoYXIgKiltZXRhLnZhbHVlKTsKKyAgZ3JwY19zbGljZV91bnJlZihtZXRhLnZhbHVlKTsKIAogICBlbmRfdGVzdCgmZik7CiAgIGNvbmZpZy50ZWFyX2Rvd25fZGF0YSgmZik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9sb2FkX3JlcG9ydGluZ19ob29rLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9sb2FkX3JlcG9ydGluZ19ob29rLmMKaW5kZXggYWU1YzI3MC4uM2RiNTExNCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbG9hZF9yZXBvcnRpbmdfaG9vay5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL2xvYWRfcmVwb3J0aW5nX2hvb2suYwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogCiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CkBAIC0xNDYsMTMgKzE0NiwxMyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsIG1ldGhvZF9uYW1lLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcobWV0aG9kX25hbWUpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODAsMTIgKzE4MCwxMiBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE5Myw3ICsxOTMsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIxNSw3ICsyMTQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjMzLDcgKzIzMiw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI0Miw3ICsyNDEsOCBAQAogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDE7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhID0gdHJhaWxpbmdfbHJfbWV0YWRhdGE7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI1NSw3ICsyNTUsNyBAQAogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX09LKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CkBAIC0yOTUsMTUgKzI5NSwxMyBAQAogICBncnBjX21ldGFkYXRhIGluaXRpYWxfbHJfbWV0YWRhdGE7CiAgIGdycGNfbWV0YWRhdGEgdHJhaWxpbmdfbHJfbWV0YWRhdGE7CiAKLSAgaW5pdGlhbF9scl9tZXRhZGF0YS5rZXkgPSBHUlBDX0xCX1RPS0VOX01EX0tFWTsKLSAgaW5pdGlhbF9scl9tZXRhZGF0YS52YWx1ZSA9ICJjbGllbnQtdG9rZW4iOwotICBpbml0aWFsX2xyX21ldGFkYXRhLnZhbHVlX2xlbmd0aCA9IHN0cmxlbihpbml0aWFsX2xyX21ldGFkYXRhLnZhbHVlKTsKKyAgaW5pdGlhbF9scl9tZXRhZGF0YS5rZXkgPSBHUlBDX01EU1RSX0xCX1RPS0VOOworICBpbml0aWFsX2xyX21ldGFkYXRhLnZhbHVlID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImNsaWVudC10b2tlbiIpOwogICBtZW1zZXQoJmluaXRpYWxfbHJfbWV0YWRhdGEuaW50ZXJuYWxfZGF0YSwgMCwKICAgICAgICAgIHNpemVvZihpbml0aWFsX2xyX21ldGFkYXRhLmludGVybmFsX2RhdGEpKTsKIAotICB0cmFpbGluZ19scl9tZXRhZGF0YS5rZXkgPSBHUlBDX0xCX0NPU1RfTURfS0VZOwotICB0cmFpbGluZ19scl9tZXRhZGF0YS52YWx1ZSA9ICJzZXJ2ZXItdG9rZW4iOwotICB0cmFpbGluZ19scl9tZXRhZGF0YS52YWx1ZV9sZW5ndGggPSBzdHJsZW4odHJhaWxpbmdfbHJfbWV0YWRhdGEudmFsdWUpOworICB0cmFpbGluZ19scl9tZXRhZGF0YS5rZXkgPSBHUlBDX01EU1RSX0xCX0NPU1RfQklOOworICB0cmFpbGluZ19scl9tZXRhZGF0YS52YWx1ZSA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJzZXJ2ZXItdG9rZW4iKTsKICAgbWVtc2V0KCZ0cmFpbGluZ19scl9tZXRhZGF0YS5pbnRlcm5hbF9kYXRhLCAwLAogICAgICAgICAgc2l6ZW9mKHRyYWlsaW5nX2xyX21ldGFkYXRhLmludGVybmFsX2RhdGEpKTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbWF4X2NvbmN1cnJlbnRfc3RyZWFtcy5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbWF4X2NvbmN1cnJlbnRfc3RyZWFtcy5jCmluZGV4IDkzMzhiYzUuLjM3ZDA0NGMgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL21heF9jb25jdXJyZW50X3N0cmVhbXMuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9tYXhfY29uY3VycmVudF9zdHJlYW1zLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDksMTMgKzEwOSwxMyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xMzYsNyArMTM2LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTQ0LDcgKzE0NCw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTY4LDcgKzE2Nyw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODUsMTMgKzE4NSwxMyBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpAQCAtMjIzLDExICsyMjMsOSBAQAogICBncnBjX21ldGFkYXRhX2FycmF5IHRyYWlsaW5nX21ldGFkYXRhX3JlY3YyOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czE7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlsczEgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eTEgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHMxOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czI7Ci0gIGNoYXIgKmRldGFpbHMyID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkyID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzMjsKICAgZ3JwY19vcCBvcHNbNl07CiAgIGdycGNfb3AgKm9wOwogICBpbnQgd2FzX2NhbmNlbGxlZDsKQEAgLTI2MSwxMyArMjU5LDE1IEBACiAgICAgIHRoZSBmaXJzdCBjb21wbGV0ZXMgKi8KICAgZGVhZGxpbmUgPSBuX3NlY29uZHNfdGltZSgxMDAwKTsKICAgYzEgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvYWxwaGEiLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9hbHBoYSIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjMSk7CiAgIGMyID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2JldGEiLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9iZXRhIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMyKTsKIApAQCAtMjk1LDEyICsyOTUsMTIgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YxOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czE7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzMTsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHkxOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjE7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPQorICAgICAgJmluaXRpYWxfbWV0YWRhdGFfcmVjdjE7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0zMjcsMTIgKzMyNywxMiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjI7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzMjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHMyOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTI7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2MTsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CisgICAgICAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2MTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTM3OCw3ICszNzgsOCBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzkyLDYgKzM5Myw4IEBACiAgIENRX0VYUEVDVF9DT01QTEVUSU9OKGNxdiwgdGFnKGxpdmVfY2FsbCArIDEpLCAxKTsKICAgY3FfdmVyaWZ5KGNxdik7CiAKKyAgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveSgmY2FsbF9kZXRhaWxzKTsKKwogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBncnBjX3NlcnZlcl9yZXF1ZXN0X2NhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLnNlcnZlciwgJnMyLCAmY2FsbF9kZXRhaWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcXVlc3RfbWV0YWRhdGFfcmVjdiwgZi5jcSwgZi5jcSwgdGFnKDIwMSkpKTsKQEAgLTQxMyw3ICs0MTYsNyBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtNDMxLDggKzQzNCw4IEBACiAgIGdycGNfY2FsbF9kZXN0cm95KGMyKTsKICAgZ3JwY19jYWxsX2Rlc3Ryb3koczIpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMxKTsKLSAgZ3ByX2ZyZWUoZGV0YWlsczIpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMxKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzMik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2MSk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjEpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdjIpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbWF4X21lc3NhZ2VfbGVuZ3RoLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9tYXhfbWVzc2FnZV9sZW5ndGguYwppbmRleCA0YTZlZjQ0Li40YzljMjE4IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9tYXhfbWVzc2FnZV9sZW5ndGguYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9tYXhfbWVzc2FnZV9sZW5ndGguYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC91c2VmdWwuaD4KIAogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9jaGFubmVsL2NoYW5uZWxfYXJncy5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCIKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3NlcnZpY2VfY29uZmlnLmgiCiAKQEAgLTU1LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgLy8gV2UgaW50ZW50aW9uYWxseSBkbyBub3QgcGFzcyB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgYXJncyB0bwogICAvLyBjcmVhdGVfZml4dHVyZSgpLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoZSBsaW1pdCBlbmZvcmNlZCBvbiB0aGUKICAgLy8gcHJveHksIG9ubHkgb24gdGhlIGJhY2tlbmQgc2VydmVyLgpAQCAtMTA4LDkgKzEwOSwxMiBAQAogLy8gcmVjdiBsaW1pdCBvbiBzZXJ2ZXIuCiBzdGF0aWMgdm9pZCB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXF1ZXN0KGdycGNfZW5kMmVuZF90ZXN0X2NvbmZpZyBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VuZF9saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc2VydmljZV9jb25maWcpIHsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgInRlc3RpbmcgcmVxdWVzdCB3aXRoIHNlbmRfbGltaXQ9JWQgdXNlX3NlcnZpY2VfY29uZmlnPSVkIiwKLSAgICAgICAgICBzZW5kX2xpbWl0LCB1c2Vfc2VydmljZV9jb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9zZXJ2aWNlX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc3RyaW5nX2pzb25fdmFsdWUpIHsKKyAgZ3ByX2xvZyhHUFJfSU5GTywKKyAgICAgICAgICAidGVzdGluZyByZXF1ZXN0IHdpdGggc2VuZF9saW1pdD0lZCB1c2Vfc2VydmljZV9jb25maWc9JWQgIgorICAgICAgICAgICJ1c2Vfc3RyaW5nX2pzb25fdmFsdWU9JWQiLAorICAgICAgICAgIHNlbmRfbGltaXQsIHVzZV9zZXJ2aWNlX2NvbmZpZywgdXNlX3N0cmluZ19qc29uX3ZhbHVlKTsKIAogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7CiAgIGdycGNfY2FsbCAqYyA9IE5VTEw7CkBAIC0xMjksOCArMTMzLDcgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MgPSBOVUxMOwpAQCAtMTQyLDE0ICsxNDUsMjMgQEAKICAgICBhcmcudHlwZSA9IEdSUENfQVJHX1NUUklORzsKICAgICBhcmcua2V5ID0gR1JQQ19BUkdfU0VSVklDRV9DT05GSUc7CiAgICAgYXJnLnZhbHVlLnN0cmluZyA9Ci0gICAgICAgICJ7XG4iCi0gICAgICAgICIgIFwibWV0aG9kQ29uZmlnXCI6IFsge1xuIgotICAgICAgICAiICAgIFwibmFtZVwiOiBbXG4iCi0gICAgICAgICIgICAgICB7IFwic2VydmljZVwiOiBcInNlcnZpY2VcIiwgXCJtZXRob2RcIjogXCJtZXRob2RcIiB9XG4iCi0gICAgICAgICIgICAgXSxcbiIKLSAgICAgICAgIiAgICBcIm1heFJlcXVlc3RNZXNzYWdlQnl0ZXNcIjogXCI1XCJcbiIKLSAgICAgICAgIiAgfSBdXG4iCi0gICAgICAgICJ9IjsKKyAgICAgICAgdXNlX3N0cmluZ19qc29uX3ZhbHVlCisgICAgICAgICAgICA/ICJ7XG4iCisgICAgICAgICAgICAgICIgIFwibWV0aG9kQ29uZmlnXCI6IFsge1xuIgorICAgICAgICAgICAgICAiICAgIFwibmFtZVwiOiBbXG4iCisgICAgICAgICAgICAgICIgICAgICB7IFwic2VydmljZVwiOiBcInNlcnZpY2VcIiwgXCJtZXRob2RcIjogXCJtZXRob2RcIiB9XG4iCisgICAgICAgICAgICAgICIgICAgXSxcbiIKKyAgICAgICAgICAgICAgIiAgICBcIm1heFJlcXVlc3RNZXNzYWdlQnl0ZXNcIjogXCI1XCJcbiIKKyAgICAgICAgICAgICAgIiAgfSBdXG4iCisgICAgICAgICAgICAgICJ9IgorICAgICAgICAgICAgOiAie1xuIgorICAgICAgICAgICAgICAiICBcIm1ldGhvZENvbmZpZ1wiOiBbIHtcbiIKKyAgICAgICAgICAgICAgIiAgICBcIm5hbWVcIjogW1xuIgorICAgICAgICAgICAgICAiICAgICAgeyBcInNlcnZpY2VcIjogXCJzZXJ2aWNlXCIsIFwibWV0aG9kXCI6IFwibWV0aG9kXCIgfVxuIgorICAgICAgICAgICAgICAiICAgIF0sXG4iCisgICAgICAgICAgICAgICIgICAgXCJtYXhSZXF1ZXN0TWVzc2FnZUJ5dGVzXCI6IDVcbiIKKyAgICAgICAgICAgICAgIiAgfSBdXG4iCisgICAgICAgICAgICAgICJ9IjsKICAgICBjbGllbnRfYXJncyA9IGdycGNfY2hhbm5lbF9hcmdzX2NvcHlfYW5kX2FkZChOVUxMLCAmYXJnLCAxKTsKICAgfSBlbHNlIHsKICAgICAvLyBTZXQgbGltaXQgdmlhIGNoYW5uZWwgYXJncy4KQEAgLTE3OCw4ICsxOTAsOSBAQAogICBjcXYgPSBjcV92ZXJpZmllcl9jcmVhdGUoZi5jcSk7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9zZXJ2aWNlL21ldGhvZCIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvc2VydmljZS9tZXRob2QiKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksCiAgICAgICBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpLCBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTk2LDcgKzIwOSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMDUsNyArMjE4LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjEzLDcgKzIyNiw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjQxLDcgKzI1Myw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVjdl9wYXlsb2FkOworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlY3ZfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI1MiwxOSArMjY0LDIwIEBACiAgIENRX0VYUEVDVF9DT01QTEVUSU9OKGNxdiwgdGFnKDEpLCAxKTsKICAgY3FfdmVyaWZ5KGNxdik7CiAKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL3NlcnZpY2UvbWV0aG9kIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvc2VydmljZS9tZXRob2QiKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKIGRvbmU6CiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX0lOVkFMSURfQVJHVU1FTlQpOwotICBHUFJfQVNTRVJUKHN0cmNtcChkZXRhaWxzLAotICAgICAgICAgICAgICAgICAgICBzZW5kX2xpbWl0Ci0gICAgICAgICAgICAgICAgICAgICAgICA/ICJTZW50IG1lc3NhZ2UgbGFyZ2VyIHRoYW4gbWF4ICgxMSB2cy4gNSkiCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICJSZWNlaXZlZCBtZXNzYWdlIGxhcmdlciB0aGFuIG1heCAoMTEgdnMuIDUpIikgPT0gMCk7CisgIEdQUl9BU1NFUlQoCisgICAgICBncnBjX3NsaWNlX3N0cl9jbXAoCisgICAgICAgICAgZGV0YWlscywgc2VuZF9saW1pdAorICAgICAgICAgICAgICAgICAgICAgICA/ICJTZW50IG1lc3NhZ2UgbGFyZ2VyIHRoYW4gbWF4ICgxMSB2cy4gNSkiCisgICAgICAgICAgICAgICAgICAgICAgIDogIlJlY2VpdmVkIG1lc3NhZ2UgbGFyZ2VyIHRoYW4gbWF4ICgxMSB2cy4gNSkiKSA9PSAwKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CkBAIC0yODYsOSArMjk5LDEyIEBACiAvLyByZWN2IGxpbWl0IG9uIGNsaWVudC4KIHN0YXRpYyB2b2lkIHRlc3RfbWF4X21lc3NhZ2VfbGVuZ3RoX29uX3Jlc3BvbnNlKGdycGNfZW5kMmVuZF90ZXN0X2NvbmZpZyBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlbmRfbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9zZXJ2aWNlX2NvbmZpZykgewotICBncHJfbG9nKEdQUl9JTkZPLCAidGVzdGluZyByZXNwb25zZSB3aXRoIHNlbmRfbGltaXQ9JWQgdXNlX3NlcnZpY2VfY29uZmlnPSVkIiwKLSAgICAgICAgICBzZW5kX2xpbWl0LCB1c2Vfc2VydmljZV9jb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vfc2VydmljZV9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9zdHJpbmdfanNvbl92YWx1ZSkgeworICBncHJfbG9nKEdQUl9JTkZPLAorICAgICAgICAgICJ0ZXN0aW5nIHJlc3BvbnNlIHdpdGggc2VuZF9saW1pdD0lZCB1c2Vfc2VydmljZV9jb25maWc9JWQgIgorICAgICAgICAgICJ1c2Vfc3RyaW5nX2pzb25fdmFsdWU9JWQiLAorICAgICAgICAgIHNlbmRfbGltaXQsIHVzZV9zZXJ2aWNlX2NvbmZpZywgdXNlX3N0cmluZ19qc29uX3ZhbHVlKTsKIAogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7CiAgIGdycGNfY2FsbCAqYyA9IE5VTEw7CkBAIC0zMDcsOCArMzIzLDcgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MgPSBOVUxMOwpAQCAtMzIwLDE0ICszMzUsMjMgQEAKICAgICBhcmcudHlwZSA9IEdSUENfQVJHX1NUUklORzsKICAgICBhcmcua2V5ID0gR1JQQ19BUkdfU0VSVklDRV9DT05GSUc7CiAgICAgYXJnLnZhbHVlLnN0cmluZyA9Ci0gICAgICAgICJ7XG4iCi0gICAgICAgICIgIFwibWV0aG9kQ29uZmlnXCI6IFsge1xuIgotICAgICAgICAiICAgIFwibmFtZVwiOiBbXG4iCi0gICAgICAgICIgICAgICB7IFwic2VydmljZVwiOiBcInNlcnZpY2VcIiwgXCJtZXRob2RcIjogXCJtZXRob2RcIiB9XG4iCi0gICAgICAgICIgICAgXSxcbiIKLSAgICAgICAgIiAgICBcIm1heFJlc3BvbnNlTWVzc2FnZUJ5dGVzXCI6IFwiNVwiXG4iCi0gICAgICAgICIgIH0gXVxuIgotICAgICAgICAifSI7CisgICAgICAgIHVzZV9zdHJpbmdfanNvbl92YWx1ZQorICAgICAgICAgICAgPyAie1xuIgorICAgICAgICAgICAgICAiICBcIm1ldGhvZENvbmZpZ1wiOiBbIHtcbiIKKyAgICAgICAgICAgICAgIiAgICBcIm5hbWVcIjogW1xuIgorICAgICAgICAgICAgICAiICAgICAgeyBcInNlcnZpY2VcIjogXCJzZXJ2aWNlXCIsIFwibWV0aG9kXCI6IFwibWV0aG9kXCIgfVxuIgorICAgICAgICAgICAgICAiICAgIF0sXG4iCisgICAgICAgICAgICAgICIgICAgXCJtYXhSZXNwb25zZU1lc3NhZ2VCeXRlc1wiOiBcIjVcIlxuIgorICAgICAgICAgICAgICAiICB9IF1cbiIKKyAgICAgICAgICAgICAgIn0iCisgICAgICAgICAgICA6ICJ7XG4iCisgICAgICAgICAgICAgICIgIFwibWV0aG9kQ29uZmlnXCI6IFsge1xuIgorICAgICAgICAgICAgICAiICAgIFwibmFtZVwiOiBbXG4iCisgICAgICAgICAgICAgICIgICAgICB7IFwic2VydmljZVwiOiBcInNlcnZpY2VcIiwgXCJtZXRob2RcIjogXCJtZXRob2RcIiB9XG4iCisgICAgICAgICAgICAgICIgICAgXSxcbiIKKyAgICAgICAgICAgICAgIiAgICBcIm1heFJlc3BvbnNlTWVzc2FnZUJ5dGVzXCI6IDVcbiIKKyAgICAgICAgICAgICAgIiAgfSBdXG4iCisgICAgICAgICAgICAgICJ9IjsKICAgICBjbGllbnRfYXJncyA9IGdycGNfY2hhbm5lbF9hcmdzX2NvcHlfYW5kX2FkZChOVUxMLCAmYXJnLCAxKTsKICAgfSBlbHNlIHsKICAgICAvLyBTZXQgbGltaXQgdmlhIGNoYW5uZWwgYXJncy4KQEAgLTM1NCw5ICszNzgsMTEgQEAKICAgfQogICBjcXYgPSBjcV92ZXJpZmllcl9jcmVhdGUoZi5jcSk7CiAKLSAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9zZXJ2aWNlL21ldGhvZCIsICJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CisgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL3NlcnZpY2UvbWV0aG9kIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLAorICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwpAQCAtMzc2LDEyICs0MDIsMTIgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlY3ZfcGF5bG9hZDsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZWN2X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0zODksNyArNDE1LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC00MTYsMTQgKzQ0MSwxNSBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtNDM0LDE2ICs0NjAsMTggQEAKICAgQ1FfRVhQRUNUX0NPTVBMRVRJT04oY3F2LCB0YWcoMSksIDEpOwogICBjcV92ZXJpZnkoY3F2KTsKIAotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvc2VydmljZS9tZXRob2QiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLmhvc3QsICJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL3NlcnZpY2UvbWV0aG9kIikpOworICBHUFJfQVNTRVJUKDAgPT0KKyAgICAgICAgICAgICBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLmhvc3QsICJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIpKTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19JTlZBTElEX0FSR1VNRU5UKTsKLSAgR1BSX0FTU0VSVChzdHJjbXAoZGV0YWlscywKLSAgICAgICAgICAgICAgICAgICAgc2VuZF9saW1pdAotICAgICAgICAgICAgICAgICAgICAgICAgPyAiU2VudCBtZXNzYWdlIGxhcmdlciB0aGFuIG1heCAoMTEgdnMuIDUpIgotICAgICAgICAgICAgICAgICAgICAgICAgOiAiUmVjZWl2ZWQgbWVzc2FnZSBsYXJnZXIgdGhhbiBtYXggKDExIHZzLiA1KSIpID09IDApOworICBHUFJfQVNTRVJUKAorICAgICAgZ3JwY19zbGljZV9zdHJfY21wKAorICAgICAgICAgIGRldGFpbHMsIHNlbmRfbGltaXQKKyAgICAgICAgICAgICAgICAgICAgICAgPyAiU2VudCBtZXNzYWdlIGxhcmdlciB0aGFuIG1heCAoMTEgdnMuIDUpIgorICAgICAgICAgICAgICAgICAgICAgICA6ICJSZWNlaXZlZCBtZXNzYWdlIGxhcmdlciB0aGFuIG1heCAoMTEgdnMuIDUpIikgPT0gMCk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpAQCAtNDYyLDE3ICs0OTAsMjkgQEAKIAogdm9pZCBtYXhfbWVzc2FnZV9sZW5ndGgoZ3JwY19lbmQyZW5kX3Rlc3RfY29uZmlnIGNvbmZpZykgewogICB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXF1ZXN0KGNvbmZpZywgZmFsc2UgLyogc2VuZF9saW1pdCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiB1c2Vfc2VydmljZV9jb25maWcgKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIHVzZV9zZXJ2aWNlX2NvbmZpZyAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiB1c2Vfc3RyaW5nX2pzb25fdmFsdWUgKi8pOwogICB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXF1ZXN0KGNvbmZpZywgdHJ1ZSAvKiBzZW5kX2xpbWl0ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIHVzZV9zZXJ2aWNlX2NvbmZpZyAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogdXNlX3NlcnZpY2VfY29uZmlnICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIHVzZV9zdHJpbmdfanNvbl92YWx1ZSAqLyk7CiAgIHRlc3RfbWF4X21lc3NhZ2VfbGVuZ3RoX29uX3Jlc3BvbnNlKGNvbmZpZywgZmFsc2UgLyogc2VuZF9saW1pdCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogdXNlX3NlcnZpY2VfY29uZmlnICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogdXNlX3NlcnZpY2VfY29uZmlnICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiB1c2Vfc3RyaW5nX2pzb25fdmFsdWUgKi8pOwogICB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXNwb25zZShjb25maWcsIHRydWUgLyogc2VuZF9saW1pdCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogdXNlX3NlcnZpY2VfY29uZmlnICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogdXNlX3NlcnZpY2VfY29uZmlnICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiB1c2Vfc3RyaW5nX2pzb25fdmFsdWUgKi8pOwogICB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXF1ZXN0KGNvbmZpZywgdHJ1ZSAvKiBzZW5kX2xpbWl0ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogdXNlX3NlcnZpY2VfY29uZmlnICovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHVzZV9zZXJ2aWNlX2NvbmZpZyAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiB1c2Vfc3RyaW5nX2pzb25fdmFsdWUgKi8pOworICB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXF1ZXN0KGNvbmZpZywgdHJ1ZSAvKiBzZW5kX2xpbWl0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogdXNlX3NlcnZpY2VfY29uZmlnICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogdXNlX3N0cmluZ19qc29uX3ZhbHVlICovKTsKICAgdGVzdF9tYXhfbWVzc2FnZV9sZW5ndGhfb25fcmVzcG9uc2UoY29uZmlnLCBmYWxzZSAvKiBzZW5kX2xpbWl0ICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHVzZV9zZXJ2aWNlX2NvbmZpZyAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogdXNlX3NlcnZpY2VfY29uZmlnICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiB1c2Vfc3RyaW5nX2pzb25fdmFsdWUgKi8pOworICB0ZXN0X21heF9tZXNzYWdlX2xlbmd0aF9vbl9yZXNwb25zZShjb25maWcsIGZhbHNlIC8qIHNlbmRfbGltaXQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogdXNlX3NlcnZpY2VfY29uZmlnICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHVzZV9zdHJpbmdfanNvbl92YWx1ZSAqLyk7CiB9CiAKIHZvaWQgbWF4X21lc3NhZ2VfbGVuZ3RoX3ByZV9pbml0KHZvaWQpIHt9CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9uZWdhdGl2ZV9kZWFkbGluZS5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbmVnYXRpdmVfZGVhZGxpbmUuYwppbmRleCA5Mjk3NzdkLi5kNjI3MWQ3IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9uZWdhdGl2ZV9kZWFkbGluZS5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL25lZ2F0aXZlX2RlYWRsaW5lLmMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDgsMTQgKzEwOCwxNCBAQAogICBncnBjX21ldGFkYXRhX2FycmF5IHRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKIAogICBncHJfbG9nKEdQUl9ERUJVRywgInRlc3Qgd2l0aCAlIiBQUkl1UFRSICIgb3BzIiwgbnVtX29wcyk7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTEyOCwxMiArMTI4LDExIEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTUsNyArMTU0LDcgQEAKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19ERUFETElORV9FWENFRURFRCk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbmV0d29ya19zdGF0dXNfY2hhbmdlLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9uZXR3b3JrX3N0YXR1c19jaGFuZ2UuYwppbmRleCAyZWJkYTJjLi5mZTNhZmI3IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9uZXR3b3JrX3N0YXR1c19jaGFuZ2UuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9uZXR3b3JrX3N0YXR1c19jaGFuZ2UuYwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExOSwxMyArMTE5LDEzIEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTE0Miw3ICsxNDIsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE1OSw3ICsxNTksNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3OSw3ICsxNzgsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjAxLDcgKzIwMCw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE0LDExICsyMTQsMTEgQEAKIAogICAvLyBFeHBlY3RlZCBiZWhhdmlvciBvZiBhIFJQQyB3aGVuIG5ldHdvcmsgaXMgbG9zdC4KICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfVU5BVkFJTEFCTEUpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ub19sb2dnaW5nLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ub19sb2dnaW5nLmMKaW5kZXggNTQ2MTRjYi4uNzJhNTIzNSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbm9fbG9nZ2luZy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL25vX2xvZ2dpbmcuYwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTEzOSwxNCArMTM5LDE0IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAgIGNoYXIgKnBlZXI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTE3MSw3ICsxNzEsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNzksNyArMTc5LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMTAsNyArMjA5LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIyNywxNCArMjI3LDE0IEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQoMCA9PSBjYWxsX2RldGFpbHMuZmxhZ3MpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbm9fb3AuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL25vX29wLmMKaW5kZXggOGIyOWMyMS4uMDkyOTRiZiAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvbm9fb3AuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9ub19vcC5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvcGF5bG9hZC5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvcGF5bG9hZC5jCmluZGV4IDRhODhjNWYuLmUyMzAxM2QgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3BheWxvYWQuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9wYXlsb2FkLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMzgsMTMgKzEzOCwxMyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3MCwxMiArMTcwLDEyIEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTgzLDcgKzE4Myw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjA1LDcgKzIwNCw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMjMsMTQgKzIyMiwxNSBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjQyLDggKzI0Miw4IEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX09LKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMCk7CkBAIC0yNTEsNyArMjUxLDcgQEAKICAgR1BSX0FTU0VSVCgKICAgICAgIGJ5dGVfYnVmZmVyX2VxX3NsaWNlKHJlc3BvbnNlX3BheWxvYWRfcmVjdiwgcmVzcG9uc2VfcGF5bG9hZF9zbGljZSkpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3BpbmdfcG9uZ19zdHJlYW1pbmcuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3BpbmdfcG9uZ19zdHJlYW1pbmcuYwppbmRleCAwYTE1NjZlLi4xYWEyM2VhIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9waW5nX3Bvbmdfc3RyZWFtaW5nLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvcGluZ19wb25nX3N0cmVhbWluZy5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTEyLDggKzExMiw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAgIGdycGNfYnl0ZV9idWZmZXIgKnJlcXVlc3RfcGF5bG9hZDsKICAgZ3JwY19ieXRlX2J1ZmZlciAqcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CkBAIC0xMjYsOCArMTI1LDkgQEAKICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKCJoZWxsbyB5b3UiKTsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE1Miw3ICsxNTIsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE4OCwxMiArMTg3LDEyIEBACiAgICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICAgIG9wID0gb3BzOwogICAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICAgIG9wLT5mbGFncyA9IDA7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICBvcCsrOwogICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC0yMDMsNyArMjAyLDcgQEAKICAgICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgICAgb3AgPSBvcHM7CiAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC0yMTUsNyArMjE0LDcgQEAKICAgICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgICAgb3AgPSBvcHM7CiAgICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gICAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKKyAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgICAgb3ArKzsKQEAgLTI0OCw3ICsyNDcsOCBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQ7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19jYWxsX2RldGFpbHNfZGVzdHJveSgmY2FsbF9kZXRhaWxzKTsKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAKICAgZW5kX3Rlc3QoJmYpOwogICBjb25maWcudGVhcl9kb3duX2RhdGEoJmYpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvcmVnaXN0ZXJlZF9jYWxsLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9yZWdpc3RlcmVkX2NhbGwuYwppbmRleCA2NTk0YjQyLi45ODQ0ZTNkIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9yZWdpc3RlcmVkX2NhbGwuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9yZWdpc3RlcmVkX2NhbGwuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExMSw4ICsxMTEsNyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX3JlZ2lzdGVyZWRfY2FsbCgKQEAgLTEzNiw3ICsxMzUsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNDQsNyArMTQzLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjgsNyArMTY2LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE4NSwxMyArMTg0LDEzIEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAxKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9yZXF1ZXN0X3dpdGhfZmxhZ3MuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3JlcXVlc3Rfd2l0aF9mbGFncy5jCmluZGV4IDljMThlMTUuLjRhMjk2YTYgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3JlcXVlc3Rfd2l0aF9mbGFncy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3JlcXVlc3Rfd2l0aF9mbGFncy5jCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTE3LDEzICsxMTcsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGdycGNfY2FsbF9lcnJvciBleHBlY3RhdGlvbjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTQwLDcgKzE0MCw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IGZsYWdzX2Zvcl9vcFtvcC0+b3BdOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gZmxhZ3NfZm9yX29wW29wLT5vcF07CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTcsNyArMTU3LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IGZsYWdzX2Zvcl9vcFtvcC0+b3BdOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTY4LDkgKzE2Nyw5IEBACiAgIGlmIChleHBlY3RhdGlvbiA9PSBHUlBDX0NBTExfT0spIHsKICAgICBDUV9FWFBFQ1RfQ09NUExFVElPTihjcXYsIHRhZygxKSwgMSk7CiAgICAgY3FfdmVyaWZ5KGNxdik7CisgICAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgfQogCi0gIGdwcl9mcmVlKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3JlcXVlc3Rfd2l0aF9wYXlsb2FkLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9yZXF1ZXN0X3dpdGhfcGF5bG9hZC5jCmluZGV4IGM4NGUzYWMuLjE1Yzc5MGIgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3JlcXVlc3Rfd2l0aF9wYXlsb2FkLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvcmVxdWVzdF93aXRoX3BheWxvYWQuYwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExNiwxMyArMTE2LDEzIEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE1Niw3ICsxNTYsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3Nyw3ICsxNzYsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTk3LDcgKzE5Niw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjA5LDE0ICsyMDksMTQgQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfT0spOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAwKTsKICAgR1BSX0FTU0VSVChieXRlX2J1ZmZlcl9lcV9zdHJpbmcocmVxdWVzdF9wYXlsb2FkX3JlY3YsICJoZWxsbyB3b3JsZCIpKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9yZXNvdXJjZV9xdW90YV9zZXJ2ZXIuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3Jlc291cmNlX3F1b3RhX3NlcnZlci5jCmluZGV4IGM5MTlmYWUuLjEwMDBiNjMgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3Jlc291cmNlX3F1b3RhX3NlcnZlci5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3Jlc291cmNlX3F1b3RhX3NlcnZlci5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTQ5LDggKzE0OSw3IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzICpjYWxsX2RldGFpbHMgPQogICAgICAgbWFsbG9jKHNpemVvZihncnBjX2NhbGxfZGV0YWlscykgKiBOVU1fQ0FMTFMpOwogICBncnBjX3N0YXR1c19jb2RlICpzdGF0dXMgPSBtYWxsb2Moc2l6ZW9mKGdycGNfc3RhdHVzX2NvZGUpICogTlVNX0NBTExTKTsKLSAgY2hhciAqKmRldGFpbHMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBOVU1fQ0FMTFMpOwotICBzaXplX3QgKmRldGFpbHNfY2FwYWNpdHkgPSBtYWxsb2Moc2l6ZW9mKHNpemVfdCkgKiBOVU1fQ0FMTFMpOworICBncnBjX3NsaWNlICpkZXRhaWxzID0gbWFsbG9jKHNpemVvZihncnBjX3NsaWNlKSAqIE5VTV9DQUxMUyk7CiAgIGdycGNfYnl0ZV9idWZmZXIgKipyZXF1ZXN0X3BheWxvYWRfcmVjdiA9CiAgICAgICBtYWxsb2Moc2l6ZW9mKGdycGNfYnl0ZV9idWZmZXIgKikgKiBOVU1fQ0FMTFMpOwogICBpbnQgKndhc19jYW5jZWxsZWQgPSBtYWxsb2Moc2l6ZW9mKGludCkgKiBOVU1fQ0FMTFMpOwpAQCAtMTczLDggKzE3Miw2IEBACiAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2W2ldKTsKICAgICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJnJlcXVlc3RfbWV0YWRhdGFfcmVjdltpXSk7CiAgICAgZ3JwY19jYWxsX2RldGFpbHNfaW5pdCgmY2FsbF9kZXRhaWxzW2ldKTsKLSAgICBkZXRhaWxzW2ldID0gTlVMTDsKLSAgICBkZXRhaWxzX2NhcGFjaXR5W2ldID0gMDsKICAgICByZXF1ZXN0X3BheWxvYWRfcmVjdltpXSA9IE5VTEw7CiAgICAgd2FzX2NhbmNlbGxlZFtpXSA9IDA7CiAgIH0KQEAgLTE5MCw4ICsxODcsMTAgQEAKIAogICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9DQUxMUzsgaSsrKSB7CiAgICAgY2xpZW50X2NhbGxzW2ldID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgICAgImZvby50ZXN0Lmdvb2dsZS5mciIsIG5fc2Vjb25kc190aW1lKDYwKSwgTlVMTCk7CisgICAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mciIsIGNvbmZpZyksCisgICAgICAgIG5fc2Vjb25kc190aW1lKDYwKSwgTlVMTCk7CiAKICAgICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgICAgb3AgPSBvcHM7CkBAIC0yMDEsNyArMjAwLDcgQEAKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CiAgICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gICAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICAgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC0yMTAsNyArMjA5LDggQEAKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CiAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gICAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdltpXTsKKyAgICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICAgJmluaXRpYWxfbWV0YWRhdGFfcmVjdltpXTsKICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgICAgb3ArKzsKQEAgLTIxOSw4ICsyMTksNiBAQAogICAgICAgICAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdltpXTsKICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1c1tpXTsKICAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsc1tpXTsKLSAgICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPQotICAgICAgICAmZGV0YWlsc19jYXBhY2l0eVtpXTsKICAgICBvcC0+ZmxhZ3MgPSAwOwogICAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgICAgb3ArKzsKQEAgLTI2MCw3ICsyNTgsNyBAQAogICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3ZbY2FsbF9pZF0pOwogICAgICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2W2NhbGxfaWRdKTsKICAgICAgIGdycGNfY2FsbF9kZXN0cm95KGNsaWVudF9jYWxsc1tjYWxsX2lkXSk7Ci0gICAgICBncHJfZnJlZShkZXRhaWxzW2NhbGxfaWRdKTsKKyAgICAgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlsc1tjYWxsX2lkXSk7CiAKICAgICAgIHBlbmRpbmdfY2xpZW50X2NhbGxzLS07CiAgICAgfSBlbHNlIGlmIChldl90YWcgPCBTRVJWRVJfUkVDVl9CQVNFX1RBRykgewpAQCAtMjc3LDcgKzI3NSw3IEBACiAgICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgICAgb3ArKzsKICAgICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2W2NhbGxfaWRdOworICAgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdltjYWxsX2lkXTsKICAgICAgIG9wLT5mbGFncyA9IDA7CiAgICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgICAgb3ArKzsKQEAgLTMxNyw3ICszMTUsOCBAQAogICAgICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgICAgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgICAgICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgICAgIG9wLT5mbGFncyA9IDA7CiAgICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgICAgb3ArKzsKQEAgLTM1MywxMCArMzUyLDYgQEAKICAgICogdGhlIGNsaWVudCBoYXMgcmVjZWl2ZWQgaXQuIFRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgc2VlIHN0cmljdGx5IG1vcmUKICAgICogZmFpbHVyZXMgb24gdGhlIGNsaWVudCB0aGFuIG9uIHRoZSBzZXJ2ZXIuICovCiAgIEdQUl9BU1NFUlQoY2FuY2VsbGVkX2NhbGxzX29uX2NsaWVudCA+PSBjYW5jZWxsZWRfY2FsbHNfb25fc2VydmVyKTsKLSAgLyogSG93ZXZlciwgd2Ugc2hvdWxkbid0IHNlZSByYWRpY2FsbHkgbW9yZS4uLiAwLjkgaXMgYSBndWVzc2VkIGJvdW5kIG9uIHdoYXQKLSAgICogd2UnZCB3YW50IHRoYXQgcmF0aW8gdG8gYmUuLi4gdG8gYXQgbGVhc3QgdHJpZ2dlciBzb21lIGludmVzdGlnYXRpb24gc2hvdWxkCi0gICAqIHRoYXQgcmF0aW8gYmVjb21lIG11Y2ggaGlnaGVyLiAqLwotICBHUFJfQVNTRVJUKGNhbmNlbGxlZF9jYWxsc19vbl9zZXJ2ZXIgPj0gMC45ICogY2FuY2VsbGVkX2NhbGxzX29uX2NsaWVudCk7CiAKICAgZ3JwY19ieXRlX2J1ZmZlcl9kZXN0cm95KHJlcXVlc3RfcGF5bG9hZCk7CiAgIGdycGNfc2xpY2VfdW5yZWYocmVxdWVzdF9wYXlsb2FkX3NsaWNlKTsKQEAgLTM3MCw3ICszNjUsNiBAQAogICBmcmVlKGNhbGxfZGV0YWlscyk7CiAgIGZyZWUoc3RhdHVzKTsKICAgZnJlZShkZXRhaWxzKTsKLSAgZnJlZShkZXRhaWxzX2NhcGFjaXR5KTsKICAgZnJlZShyZXF1ZXN0X3BheWxvYWRfcmVjdik7CiAgIGZyZWUod2FzX2NhbmNlbGxlZCk7CiAKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NlcnZlcl9maW5pc2hlc19yZXF1ZXN0LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zZXJ2ZXJfZmluaXNoZXNfcmVxdWVzdC5jCmluZGV4IDNiYjI1ZmQuLjU3YzQ2ZDMgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NlcnZlcl9maW5pc2hlc19yZXF1ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc2VydmVyX2ZpbmlzaGVzX3JlcXVlc3QuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExMSwxMyArMTExLDEzIEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTEzNCw3ICsxMzQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNDIsNyArMTQyLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjYsNyArMTY1LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE4MywxMyArMTgzLDEzIEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAxKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaHV0ZG93bl9maW5pc2hlc19jYWxscy5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc2h1dGRvd25fZmluaXNoZXNfY2FsbHMuYwppbmRleCBiODBhMmUzLi5iOGM4ZGM5IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaHV0ZG93bl9maW5pc2hlc19jYWxscy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NodXRkb3duX2ZpbmlzaGVzX2NhbGxzLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDAsMTMgKzEwMCwxMyBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsICIvZm9vIiwKLSAgICAgIGdldF9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKKyAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTM2LDcgKzEzNiw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTcyLDEyICsxNzEsMTIgQEAKICAgZ3JwY19zZXJ2ZXJfZGVzdHJveShmLnNlcnZlcik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfVU5BVkFJTEFCTEUpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDEpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NodXRkb3duX2ZpbmlzaGVzX3RhZ3MuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NodXRkb3duX2ZpbmlzaGVzX3RhZ3MuYwppbmRleCAxZDExMGE3Li4wNmY3ZTc1IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaHV0ZG93bl9maW5pc2hlc190YWdzLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc2h1dGRvd25fZmluaXNoZXNfdGFncy5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc2ltcGxlX2NhY2hlYWJsZV9yZXF1ZXN0LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaW1wbGVfY2FjaGVhYmxlX3JlcXVlc3QuYwppbmRleCAyYzIyOWIwLi4zZmJjMzVkIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaW1wbGVfY2FjaGVhYmxlX3JlcXVlc3QuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaW1wbGVfY2FjaGVhYmxlX3JlcXVlc3QuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExMSwxMiArMTExLDIyIEBACiAgIGdycGNfYnl0ZV9idWZmZXIgKnJlc3BvbnNlX3BheWxvYWQgPQogICAgICAgZ3JwY19yYXdfYnl0ZV9idWZmZXJfY3JlYXRlKCZyZXNwb25zZV9wYXlsb2FkX3NsaWNlLCAxKTsKICAgZ3ByX3RpbWVzcGVjIGRlYWRsaW5lID0gZml2ZV9zZWNvbmRzX3RpbWUoKTsKLSAgZ3JwY19tZXRhZGF0YSBtZXRhX2NbMl0gPSB7Ci0gICAgICB7ImtleTEiLCAidmFsMSIsIDQsIDAsIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fSwKLSAgICAgIHsia2V5MiIsICJ2YWwyIiwgNCwgMCwge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19fTsKLSAgZ3JwY19tZXRhZGF0YSBtZXRhX3NbMl0gPSB7Ci0gICAgICB7ImtleTMiLCAidmFsMyIsIDQsIDAsIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fSwKLSAgICAgIHsia2V5NCIsICJ2YWw0IiwgNCwgMCwge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19fTsKKyAgZ3JwY19tZXRhZGF0YSBtZXRhX2NbMl0gPSB7e2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXkxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygidmFsMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXkyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygidmFsMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CisgIGdycGNfbWV0YWRhdGEgbWV0YV9zWzJdID0ge3tncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5MyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbDMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5NCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbDQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX19OwogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGYgPSBiZWdpbl90ZXN0KAogICAgICAgY29uZmlnLCAidGVzdF9jYWNoZWFibGVfcmVxdWVzdF9yZXNwb25zZV93aXRoX21ldGFkYXRhX2FuZF9wYXlsb2FkIiwgTlVMTCwKICAgICAgIE5VTEwpOwpAQCAtMTMxLDEzICsxNDEsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTU1LDcgKzE2NSw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjQsMTIgKzE3NCwxMiBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3Nyw3ICsxODcsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIwMCw3ICsyMDksNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE4LDE0ICsyMjcsMTUgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIzNyw4ICsyNDcsOCBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19PSyk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgaWYgKGNvbmZpZy5mZWF0dXJlX21hc2sgJiBGRUFUVVJFX01BU0tfU1VQUE9SVFNfUkVRVUVTVF9QUk9YWUlORykgewpAQCAtMjU0LDcgKzI2NCw3IEBACiAgIEdQUl9BU1NFUlQoY29udGFpbnNfbWV0YWRhdGEoJmluaXRpYWxfbWV0YWRhdGFfcmVjdiwgImtleTMiLCAidmFsMyIpKTsKICAgR1BSX0FTU0VSVChjb250YWluc19tZXRhZGF0YSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2LCAia2V5NCIsICJ2YWw0IikpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9kZWxheWVkX3JlcXVlc3QuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9kZWxheWVkX3JlcXVlc3QuYwppbmRleCA0MTRhMDNkLi41MGVlN2QzIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaW1wbGVfZGVsYXllZF9yZXF1ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc2ltcGxlX2RlbGF5ZWRfcmVxdWVzdC5jCkBAIC0xMDAsMTUgKzEwMCwxNSBAQAogICBncnBjX2NhbGxfZGV0YWlscyBjYWxsX2RldGFpbHM7CiAgIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7Ci0gIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotICBzaXplX3QgZGV0YWlsc19jYXBhY2l0eSA9IDA7CisgIGdycGNfc2xpY2UgZGV0YWlsczsKICAgaW50IHdhc19jYW5jZWxsZWQgPSAyOwogCiAgIGNvbmZpZy5pbml0X2NsaWVudChmLCBjbGllbnRfYXJncyk7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYtPmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYtPmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLT5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLT5jcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvZm9vIiksCisgICAgICBnZXRfaG9zdF9vdmVycmlkZV9zbGljZSgiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjb25maWcpLCBkZWFkbGluZSwKICAgICAgIE5VTEwpOwogICBHUFJfQVNTRVJUKGMpOwogCkBAIC0xMjksNyArMTI5LDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTM3LDcgKzEzNyw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMTYzLDcgKzE2Miw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODAsMTMgKzE4MCwxMyBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpAQCAtMjA4LDcgKzIwOCw4IEBACiAgIGNsaWVudF9hcmdzLmFyZ3MgPSBhcmdfYXJyYXk7CiAgIGNsaWVudF9hcmdzLm51bV9hcmdzID0gMTsKIAotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCAidGVzdF9zaW1wbGVfZGVsYXllZF9yZXF1ZXN0X3Nob3J0IiwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsICJ0ZXN0X3NpbXBsZV9kZWxheWVkX3JlcXVlc3Rfc2hvcnQiLAorICAgICAgICAgIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShOVUxMLCBOVUxMKTsKIAogICBzaW1wbGVfZGVsYXllZF9yZXF1ZXN0X2JvZHkoY29uZmlnLCAmZiwgJmNsaWVudF9hcmdzLCBOVUxMLCAxMDAwMDApOwpAQCAtMjI2LDcgKzIyNyw4IEBACiAgIGNsaWVudF9hcmdzLmFyZ3MgPSBhcmdfYXJyYXk7CiAgIGNsaWVudF9hcmdzLm51bV9hcmdzID0gMTsKIAotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCAidGVzdF9zaW1wbGVfZGVsYXllZF9yZXF1ZXN0X2xvbmciLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgInRlc3Rfc2ltcGxlX2RlbGF5ZWRfcmVxdWVzdF9sb25nIiwKKyAgICAgICAgICBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoTlVMTCwgTlVMTCk7CiAgIC8qIFRoaXMgdGltZW91dCBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gYSBzaW5nbGUgcmV0cnkgKi8KICAgc2ltcGxlX2RlbGF5ZWRfcmVxdWVzdF9ib2R5KGNvbmZpZywgJmYsICZjbGllbnRfYXJncywgTlVMTCwgMTUwMDAwMCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaW1wbGVfbWV0YWRhdGEuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9tZXRhZGF0YS5jCmluZGV4IDU0OTBjYzIuLjcwODZkNTIgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9tZXRhZGF0YS5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9tZXRhZGF0YS5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTA5LDEyICsxMDksMjIgQEAKICAgZ3JwY19ieXRlX2J1ZmZlciAqcmVzcG9uc2VfcGF5bG9hZCA9CiAgICAgICBncnBjX3Jhd19ieXRlX2J1ZmZlcl9jcmVhdGUoJnJlc3BvbnNlX3BheWxvYWRfc2xpY2UsIDEpOwogICBncHJfdGltZXNwZWMgZGVhZGxpbmUgPSBmaXZlX3NlY29uZHNfdGltZSgpOwotICBncnBjX21ldGFkYXRhIG1ldGFfY1syXSA9IHsKLSAgICAgIHsia2V5MSIsICJ2YWwxIiwgNCwgMCwge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19LAotICAgICAgeyJrZXkyIiwgInZhbDIiLCA0LCAwLCB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX19OwotICBncnBjX21ldGFkYXRhIG1ldGFfc1syXSA9IHsKLSAgICAgIHsia2V5MyIsICJ2YWwzIiwgNCwgMCwge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19LAotICAgICAgeyJrZXk0IiwgInZhbDQiLCA0LCAwLCB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX19OworICBncnBjX21ldGFkYXRhIG1ldGFfY1syXSA9IHt7Z3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImtleTEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ2YWwxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImtleTIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ2YWwyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19fTsKKyAgZ3JwY19tZXRhZGF0YSBtZXRhX3NbMl0gPSB7e2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXkzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygidmFsMyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXk0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygidmFsNCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZiA9IGJlZ2luX3Rlc3QoCiAgICAgICBjb25maWcsICJ0ZXN0X3JlcXVlc3RfcmVzcG9uc2Vfd2l0aF9tZXRhZGF0YV9hbmRfcGF5bG9hZCIsIE5VTEwsIE5VTEwpOwogICBjcV92ZXJpZmllciAqY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwpAQCAtMTI4LDEzICsxMzgsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTUyLDcgKzE2Miw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjEsMTIgKzE3MSwxMiBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3NCw3ICsxODQsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE5Nyw3ICsyMDYsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE1LDE0ICsyMjQsMTUgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIzNCw4ICsyNDQsOCBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19PSyk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDApOwpAQCAtMjQ2LDcgKzI1Niw3IEBACiAgIEdQUl9BU1NFUlQoY29udGFpbnNfbWV0YWRhdGEoJmluaXRpYWxfbWV0YWRhdGFfcmVjdiwgImtleTMiLCAidmFsMyIpKTsKICAgR1BSX0FTU0VSVChjb250YWluc19tZXRhZGF0YSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2LCAia2V5NCIsICJ2YWw0IikpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9yZXF1ZXN0LmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zaW1wbGVfcmVxdWVzdC5jCmluZGV4IDJkZWE1ZDYuLjc1ODBhZDEgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3NpbXBsZV9yZXF1ZXN0LmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc2ltcGxlX3JlcXVlc3QuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqY2xpZW50X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpzZXJ2ZXJfYXJncykgewogICBncnBjX2VuZDJlbmRfdGVzdF9maXh0dXJlIGY7Ci0gIGdwcl9sb2coR1BSX0lORk8sICIlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOworICBncHJfbG9nKEdQUl9JTkZPLCAiUnVubmluZyB0ZXN0OiAlcy8lcyIsIHRlc3RfbmFtZSwgY29uZmlnLm5hbWUpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTExMSwxNCArMTExLDE0IEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAgIGNoYXIgKnBlZXI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNTIsNyArMTUyLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xODUsNyArMTg0LDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19VTklNUExFTUVOVEVEOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIwMiwxNCArMjAyLDE0IEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQoMCA9PSBjYWxsX2RldGFpbHMuZmxhZ3MpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMSk7CiAKLSAgZ3ByX2ZyZWUoZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoZGV0YWlscyk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmaW5pdGlhbF9tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2KTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZyZXF1ZXN0X21ldGFkYXRhX3JlY3YpOwpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICBiZWdpbl90ZXN0KGNvbmZpZywgInRlc3RfaW52b2tlXzEwX3NpbXBsZV9yZXF1ZXN0cyIsIE5VTEwsIE5VTEwpOwogICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogICAgIHNpbXBsZV9yZXF1ZXN0X2JvZHkoY29uZmlnLCBmKTsKLSAgICBncHJfbG9nKEdQUl9JTkZPLCAiUGFzc2VkIHNpbXBsZSByZXF1ZXN0ICVkIiwgaSk7CisgICAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogUGFzc2VkIHNpbXBsZSByZXF1ZXN0ICVkIiwgaSk7CiAgIH0KICAgZW5kX3Rlc3QoJmYpOwogICBjb25maWcudGVhcl9kb3duX2RhdGEoJmYpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvc3RyZWFtaW5nX2Vycm9yX3Jlc3BvbnNlLmMgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zdHJlYW1pbmdfZXJyb3JfcmVzcG9uc2UuYwppbmRleCA1ODNiYzkyLi5kNWZlZmQxIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zdHJlYW1pbmdfZXJyb3JfcmVzcG9uc2UuYworKysgYi90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy9zdHJlYW1pbmdfZXJyb3JfcmVzcG9uc2UuYwpAQCAtNTEsOCArNTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVxdWVzdF9zdGF0dXNfZWFybHkpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMvcmVxdWVzdF9zdGF0dXNfZWFybHk9JXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lLAotICAgICAgICAgIHJlcXVlc3Rfc3RhdHVzX2Vhcmx5ID8gInRydWUiIDogImZhbHNlIik7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzL3JlcXVlc3Rfc3RhdHVzX2Vhcmx5PSVzIiwgdGVzdF9uYW1lLAorICAgICAgICAgIGNvbmZpZy5uYW1lLCByZXF1ZXN0X3N0YXR1c19lYXJseSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICBmID0gY29uZmlnLmNyZWF0ZV9maXh0dXJlKGNsaWVudF9hcmdzLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X3NlcnZlcigmZiwgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9jbGllbnQoJmYsIGNsaWVudF9hcmdzKTsKQEAgLTEyMSwxMyArMTIxLDEzIEBACiAgIGdycGNfY2FsbF9kZXRhaWxzIGNhbGxfZGV0YWlsczsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7CiAgIGdycGNfY2FsbF9lcnJvciBlcnJvcjsKLSAgY2hhciAqZGV0YWlscyA9IE5VTEw7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZ3JwY19zbGljZSBkZXRhaWxzOwogICBpbnQgd2FzX2NhbmNlbGxlZCA9IDI7CiAKICAgYyA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKLSAgICAgIGYuY2xpZW50LCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgZi5jcSwgIi9mb28iLAotICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAorICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgIGdldF9ob3N0X292ZXJyaWRlX3NsaWNlKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNvbmZpZyksIGRlYWRsaW5lLAogICAgICAgTlVMTCk7CiAgIEdQUl9BU1NFUlQoYyk7CiAKQEAgLTE0NCwxNyArMTQ0LDE2IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9DTE9TRV9GUk9NX0NMSUVOVDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWQxX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZDFfcmVjdjsKICAgb3ArKzsKICAgaWYgKHJlcXVlc3Rfc3RhdHVzX2Vhcmx5KSB7CiAgICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ7CiAgICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgICAgb3ArKzsKICAgfQogICBlcnJvciA9IGdycGNfY2FsbF9zdGFydF9iYXRjaChjLCBvcHMsIChzaXplX3QpKG9wIC0gb3BzKSwgdGFnKDEpLCBOVUxMKTsKQEAgLTE3Miw3ICsxNzEsNyBAQAogICBvcC0+ZGF0YS5zZW5kX2luaXRpYWxfbWV0YWRhdGEuY291bnQgPSAwOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDE7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkMTsKICAgb3ArKzsKICAgZXJyb3IgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2gocywgb3BzLCAoc2l6ZV90KShvcCAtIG9wcyksIHRhZygxMDIpLCBOVUxMKTsKICAgR1BSX0FTU0VSVChHUlBDX0NBTExfT0sgPT0gZXJyb3IpOwpAQCAtMTgzLDcgKzE4Miw3IEBACiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkMjsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlc3BvbnNlX3BheWxvYWQyOwogICBvcCsrOwogICBlcnJvciA9IGdycGNfY2FsbF9zdGFydF9iYXRjaChzLCBvcHMsIChzaXplX3QpKG9wIC0gb3BzKSwgdGFnKDEwMyksIE5VTEwpOwogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBlcnJvcik7CkBAIC0yMDIsNyArMjAxLDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19GQUlMRURfUFJFQ09ORElUSU9OOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3ArKzsKICAgZXJyb3IgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2gocywgb3BzLCAoc2l6ZV90KShvcCAtIG9wcyksIHRhZygxMDQpLCBOVUxMKTsKICAgR1BSX0FTU0VSVChHUlBDX0NBTExfT0sgPT0gZXJyb3IpOwpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICAgIG9wID0gb3BzOwogICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkMl9yZWN2OworICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZDJfcmVjdjsKICAgICBvcCsrOwogICAgIGVycm9yID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKGMsIG9wcywgKHNpemVfdCkob3AgLSBvcHMpLCB0YWcoMiksIE5VTEwpOwogICAgIEdQUl9BU1NFUlQoR1JQQ19DQUxMX09LID09IGVycm9yKTsKQEAgLTIzMiw3ICsyMzIsNiBAQAogICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICAgIG9wKys7CiAgICAgZXJyb3IgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goYywgb3BzLCAoc2l6ZV90KShvcCAtIG9wcyksIHRhZygzKSwgTlVMTCk7CiAgICAgR1BSX0FTU0VSVChHUlBDX0NBTExfT0sgPT0gZXJyb3IpOwpAQCAtMjQ1LDEzICsyNDQsMTMgQEAKICAgfQogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX0ZBSUxFRF9QUkVDT05ESVRJT04pOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQod2FzX2NhbmNlbGxlZCA9PSAxKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy90cmFpbGluZ19tZXRhZGF0YS5jIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvdHJhaWxpbmdfbWV0YWRhdGEuYwppbmRleCA5ZmQ0ZmJjLi5jYTVjZjJjIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy90cmFpbGluZ19tZXRhZGF0YS5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3RyYWlsaW5nX21ldGFkYXRhLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKmNsaWVudF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX2NoYW5uZWxfYXJncyAqc2VydmVyX2FyZ3MpIHsKICAgZ3JwY19lbmQyZW5kX3Rlc3RfZml4dHVyZSBmOwotICBncHJfbG9nKEdQUl9JTkZPLCAiJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgIlJ1bm5pbmcgdGVzdDogJXMvJXMiLCB0ZXN0X25hbWUsIGNvbmZpZy5uYW1lKTsKICAgZiA9IGNvbmZpZy5jcmVhdGVfZml4dHVyZShjbGllbnRfYXJncywgc2VydmVyX2FyZ3MpOwogICBjb25maWcuaW5pdF9zZXJ2ZXIoJmYsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfY2xpZW50KCZmLCBjbGllbnRfYXJncyk7CkBAIC0xMDksMTUgKzEwOSwzMCBAQAogICBncnBjX2J5dGVfYnVmZmVyICpyZXNwb25zZV9wYXlsb2FkID0KICAgICAgIGdycGNfcmF3X2J5dGVfYnVmZmVyX2NyZWF0ZSgmcmVzcG9uc2VfcGF5bG9hZF9zbGljZSwgMSk7CiAgIGdwcl90aW1lc3BlYyBkZWFkbGluZSA9IGZpdmVfc2Vjb25kc190aW1lKCk7Ci0gIGdycGNfbWV0YWRhdGEgbWV0YV9jWzJdID0gewotICAgICAgeyJrZXkxIiwgInZhbDEiLCA0LCAwLCB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCi0gICAgICB7ImtleTIiLCAidmFsMiIsIDQsIDAsIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07Ci0gIGdycGNfbWV0YWRhdGEgbWV0YV9zWzJdID0gewotICAgICAgeyJrZXkzIiwgInZhbDMiLCA0LCAwLCB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCi0gICAgICB7ImtleTQiLCAidmFsNCIsIDQsIDAsIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07Ci0gIGdycGNfbWV0YWRhdGEgbWV0YV90WzJdID0gewotICAgICAgeyJrZXk1IiwgInZhbDUiLCA0LCAwLCB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCi0gICAgICB7ImtleTYiLCAidmFsNiIsIDQsIDAsIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CisgIGdycGNfbWV0YWRhdGEgbWV0YV9jWzJdID0ge3tncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5MSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbDEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygia2V5MiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInZhbDIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fX19OworICBncnBjX21ldGFkYXRhIG1ldGFfc1syXSA9IHt7Z3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImtleTMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ2YWwzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImtleTQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ2YWw0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfX19fTsKKyAgZ3JwY19tZXRhZGF0YSBtZXRhX3RbMl0gPSB7e2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXk1IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygidmFsNSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJrZXk2IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygidmFsNiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19fX07CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZiA9IGJlZ2luX3Rlc3QoCiAgICAgICBjb25maWcsICJ0ZXN0X3JlcXVlc3RfcmVzcG9uc2Vfd2l0aF9tZXRhZGF0YV9hbmRfcGF5bG9hZCIsIE5VTEwsIE5VTEwpOwogICBjcV92ZXJpZmllciAqY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGYuY3EpOwpAQCAtMTMxLDEzICsxNDYsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTU1LDcgKzE3MCw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQ7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjQsMTIgKzE3OSwxMiBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE3Nyw3ICsxOTIsNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIwMCw3ICsyMTQsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMjE4LDcgKzIzMiw3IEBACiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIyNiw3ICsyNDAsOCBAQAogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhID0gbWV0YV90OwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19PSzsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yMzgsOCArMjUzLDggQEAKICAgY3FfdmVyaWZ5KGNxdik7CiAKICAgR1BSX0FTU0VSVChzdGF0dXMgPT0gR1JQQ19TVEFUVVNfT0spOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGRldGFpbHMsICJ4eXoiKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoZGV0YWlscywgInh5eiIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKICAgdmFsaWRhdGVfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY2FsbF9kZXRhaWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyk7CiAgIEdQUl9BU1NFUlQoYnl0ZV9idWZmZXJfZXFfc3RyaW5nKHJlcXVlc3RfcGF5bG9hZF9yZWN2LCAiaGVsbG8gd29ybGQiKSk7CkBAIC0yNTEsNyArMjY2LDcgQEAKICAgR1BSX0FTU0VSVChjb250YWluc19tZXRhZGF0YSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdiwgImtleTUiLCAidmFsNSIpKTsKICAgR1BSX0FTU0VSVChjb250YWluc19tZXRhZGF0YSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdiwgImtleTYiLCAidmFsNiIpKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy93cml0ZV9idWZmZXJpbmcuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3dyaXRlX2J1ZmZlcmluZy5jCmluZGV4IDg1NmU5ZjAuLjUwYzBlZDcgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3dyaXRlX2J1ZmZlcmluZy5jCisrKyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3dyaXRlX2J1ZmZlcmluZy5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTIwLDEzICsxMjAsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHMgPSBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTQ2LDcgKzE0Niw3IEBACiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE2Myw3ICsxNjMsNyBAQAogICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgIG9wID0gb3BzOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkMTsKKyAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDE7CiAgIG9wLT5mbGFncyA9IEdSUENfV1JJVEVfQlVGRkVSX0hJTlQ7CiAgIG9wKys7CiAgIGVycm9yID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKGMsIG9wcywgKHNpemVfdCkob3AgLSBvcHMpLCB0YWcoMyksIE5VTEwpOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3YxOworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2MTsKICAgb3ArKzsKICAgZXJyb3IgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2gocywgb3BzLCAoc2l6ZV90KShvcCAtIG9wcyksIHRhZygxMDMpLCBOVUxMKTsKICAgR1BSX0FTU0VSVChHUlBDX0NBTExfT0sgPT0gZXJyb3IpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXF1ZXN0X3BheWxvYWQyOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkMjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3ArKzsKICAgZXJyb3IgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goYywgb3BzLCAoc2l6ZV90KShvcCAtIG9wcyksIHRhZyg0KSwgTlVMTCk7CkBAIC0yMTAsNyArMjEwLDcgQEAKICAgbWVtc2V0KG9wcywgMCwgc2l6ZW9mKG9wcykpOwogICBvcCA9IG9wczsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjI7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3YyOwogICBvcCsrOwogICBlcnJvciA9IGdycGNfY2FsbF9zdGFydF9iYXRjaChzLCBvcHMsIChzaXplX3QpKG9wIC0gb3BzKSwgdGFnKDEwNCksIE5VTEwpOwogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBlcnJvcik7CkBAIC0yMjgsNyArMjI4LDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yNDQsNyArMjQzLDggQEAKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXMgPSBHUlBDX1NUQVRVU19PSzsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAieHl6IjsKKyAgZ3JwY19zbGljZSBzdGF0dXNfZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ4eXoiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yNTYsMTUgKzI1NiwxNSBAQAogICBjcV92ZXJpZnkoY3F2KTsKIAogICBHUFJfQVNTRVJUKHN0YXR1cyA9PSBHUlBDX1NUQVRVU19PSyk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBzdHJjbXAoZGV0YWlscywgInh5eiIpKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL2ZvbyIpKTsKKyAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2Vfc3RyX2NtcChkZXRhaWxzLCAieHl6IikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOwogICB2YWxpZGF0ZV9ob3N0X292ZXJyaWRlX3N0cmluZygiZm9vLnRlc3QuZ29vZ2xlLmZyOjEyMzQiLCBjYWxsX2RldGFpbHMuaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnKTsKICAgR1BSX0FTU0VSVCh3YXNfY2FuY2VsbGVkID09IDApOwogICBHUFJfQVNTRVJUKGJ5dGVfYnVmZmVyX2VxX3N0cmluZyhyZXF1ZXN0X3BheWxvYWRfcmVjdjEsICJoZWxsbyB3b3JsZCIpKTsKICAgR1BSX0FTU0VSVChieXRlX2J1ZmZlcl9lcV9zdHJpbmcocmVxdWVzdF9wYXlsb2FkX3JlY3YyLCAiYWJjMTIzIikpOwogCi0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmcmVxdWVzdF9tZXRhZGF0YV9yZWN2KTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3dyaXRlX2J1ZmZlcmluZ19hdF9lbmQuYyBiL3Rlc3QvY29yZS9lbmQyZW5kL3Rlc3RzL3dyaXRlX2J1ZmZlcmluZ19hdF9lbmQuYwppbmRleCA0M2FlZmNiLi41ZjY4ZWQwIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvZW5kMmVuZC90ZXN0cy93cml0ZV9idWZmZXJpbmdfYXRfZW5kLmMKKysrIGIvdGVzdC9jb3JlL2VuZDJlbmQvdGVzdHMvd3JpdGVfYnVmZmVyaW5nX2F0X2VuZC5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfY2hhbm5lbF9hcmdzICpjbGllbnRfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19jaGFubmVsX2FyZ3MgKnNlcnZlcl9hcmdzKSB7CiAgIGdycGNfZW5kMmVuZF90ZXN0X2ZpeHR1cmUgZjsKLSAgZ3ByX2xvZyhHUFJfSU5GTywgIiVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CisgIGdwcl9sb2coR1BSX0lORk8sICJSdW5uaW5nIHRlc3Q6ICVzLyVzIiwgdGVzdF9uYW1lLCBjb25maWcubmFtZSk7CiAgIGYgPSBjb25maWcuY3JlYXRlX2ZpeHR1cmUoY2xpZW50X2FyZ3MsIHNlcnZlcl9hcmdzKTsKICAgY29uZmlnLmluaXRfc2VydmVyKCZmLCBzZXJ2ZXJfYXJncyk7CiAgIGNvbmZpZy5pbml0X2NsaWVudCgmZiwgY2xpZW50X2FyZ3MpOwpAQCAtMTE3LDEzICsxMTcsMTMgQEAKICAgZ3JwY19jYWxsX2RldGFpbHMgY2FsbF9kZXRhaWxzOwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHMgPSBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIGludCB3YXNfY2FuY2VsbGVkID0gMjsKIAogICBjID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgZi5jbGllbnQsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBmLmNxLCAiL2ZvbyIsCi0gICAgICBnZXRfaG9zdF9vdmVycmlkZV9zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCisgICAgICBmLmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGYuY3EsCisgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL2ZvbyIpLAorICAgICAgZ2V0X2hvc3Rfb3ZlcnJpZGVfc2xpY2UoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0IiwgY29uZmlnKSwgZGVhZGxpbmUsCiAgICAgICBOVUxMKTsKICAgR1BSX0FTU0VSVChjKTsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAgIG1lbXNldChvcHMsIDAsIHNpemVvZihvcHMpKTsKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTE2MCw3ICsxNjAsNyBAQAogICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgIG9wID0gb3BzOwogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICBvcC0+ZmxhZ3MgPSBHUlBDX1dSSVRFX0JVRkZFUl9ISU5UOwogICBvcCsrOwogICBlcnJvciA9IGdycGNfY2FsbF9zdGFydF9iYXRjaChjLCBvcHMsIChzaXplX3QpKG9wIC0gb3BzKSwgdGFnKDMpLCBOVUxMKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgIG9wID0gb3BzOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2MTsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjE7CiAgIG9wKys7CiAgIGVycm9yID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHMsIG9wcywgKHNpemVfdCkob3AgLSBvcHMpLCB0YWcoMTAzKSwgTlVMTCk7CiAgIEdQUl9BU1NFUlQoR1JQQ19DQUxMX09LID09IGVycm9yKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogICBtZW1zZXQob3BzLCAwLCBzaXplb2Yob3BzKSk7CiAgIG9wID0gb3BzOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2MjsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjI7CiAgIG9wKys7CiAgIGVycm9yID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKHMsIG9wcywgKHNpemVfdCkob3AgLSBvcHMpLCB0YWcoMTA0KSwgTlVMTCk7CiAgIEdQUl9BU1NFUlQoR1JQQ19DQUxMX09LID09IGVycm9yKTsKQEAgLTIxOSw3ICsyMTksNiBAQAogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQudHJhaWxpbmdfbWV0YWRhdGEgPSAmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZzdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwotICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHNfY2FwYWNpdHkgPSAmZGV0YWlsc19jYXBhY2l0eTsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTIzNSw3ICsyMzQsOCBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfU1RBVFVTX0ZST01fU0VSVkVSOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICJ4eXoiOworICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpOworICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZzdGF0dXNfZGV0YWlsczsKICAgb3AtPmZsYWdzID0gMDsKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKQEAgLTI0NywxNSArMjQ3LDE1IEBACiAgIGNxX3ZlcmlmeShjcXYpOwogCiAgIEdQUl9BU1NFUlQoc3RhdHVzID09IEdSUENfU1RBVFVTX09LKTsKLSAgR1BSX0FTU0VSVCgwID09IHN0cmNtcChkZXRhaWxzLCAieHl6IikpOwotICBHUFJfQVNTRVJUKDAgPT0gc3RyY21wKGNhbGxfZGV0YWlscy5tZXRob2QsICIvZm9vIikpOworICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGRldGFpbHMsICJ4eXoiKSk7CisgIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAoY2FsbF9kZXRhaWxzLm1ldGhvZCwgIi9mb28iKSk7CiAgIHZhbGlkYXRlX2hvc3Rfb3ZlcnJpZGVfc3RyaW5nKCJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsIGNhbGxfZGV0YWlscy5ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwogICBHUFJfQVNTRVJUKHdhc19jYW5jZWxsZWQgPT0gMCk7CiAgIEdQUl9BU1NFUlQoYnl0ZV9idWZmZXJfZXFfc3RyaW5nKHJlcXVlc3RfcGF5bG9hZF9yZWN2MSwgImhlbGxvIHdvcmxkIikpOwogICBHUFJfQVNTRVJUKHJlcXVlc3RfcGF5bG9hZF9yZWN2MiA9PSBOVUxMKTsKIAotICBncHJfZnJlZShkZXRhaWxzKTsKKyAgZ3JwY19zbGljZV91bnJlZihkZXRhaWxzKTsKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9kZXN0cm95KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJnJlcXVlc3RfbWV0YWRhdGFfcmVjdik7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvZmxpbmcvY2xpZW50LmMgYi90ZXN0L2NvcmUvZmxpbmcvY2xpZW50LmMKaW5kZXggZTcxN2I3Zi4uYzRkZTk0OSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL2ZsaW5nL2NsaWVudC5jCisrKyBiL3Rlc3QvY29yZS9mbGluZy9jbGllbnQuYwpAQCAtNTcsOCArNTcsNyBAQAogc3RhdGljIGdycGNfbWV0YWRhdGFfYXJyYXkgdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKIHN0YXRpYyBncnBjX2J5dGVfYnVmZmVyICpyZXNwb25zZV9wYXlsb2FkX3JlY3YgPSBOVUxMOwogc3RhdGljIGdycGNfc3RhdHVzX2NvZGUgc3RhdHVzOwotc3RhdGljIGNoYXIgKmRldGFpbHMgPSBOVUxMOwotc3RhdGljIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5ID0gMDsKK3N0YXRpYyBncnBjX3NsaWNlIGRldGFpbHM7CiBzdGF0aWMgZ3JwY19vcCAqb3A7CiAKIHN0YXRpYyB2b2lkIGluaXRfcGluZ19wb25nX3JlcXVlc3Qodm9pZCkgewpAQCAtNzIsMjkgKzcxLDMwIEBACiAgIG9wLT5kYXRhLnNlbmRfaW5pdGlhbF9tZXRhZGF0YS5jb3VudCA9IDA7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSB0aGVfYnVmZmVyOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gdGhlX2J1ZmZlcjsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX0NMT1NFX0ZST01fQ0xJRU5UOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnJlc3BvbnNlX3BheWxvYWRfcmVjdjsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX1NUQVRVU19PTl9DTElFTlQ7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcCsrOwogfQogCiBzdGF0aWMgdm9pZCBzdGVwX3BpbmdfcG9uZ19yZXF1ZXN0KHZvaWQpIHsKICAgR1BSX1RJTUVSX0JFR0lOKCJwaW5nX3BvbmciLCAxKTsKLSAgY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbChjaGFubmVsLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgY3EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9SZWZsZWN0b3IvcmVmbGVjdFVuYXJ5IiwgImxvY2FsaG9zdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CisgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJsb2NhbGhvc3QiKTsKKyAgY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKKyAgICAgIGNoYW5uZWwsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvUmVmbGVjdG9yL3JlZmxlY3RVbmFyeSIpLCAmaG9zdCwKKyAgICAgIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOwogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goY2FsbCwgb3BzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkob3AgLSBvcHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikxLCBOVUxMKSk7CkBAIC0xMDksMTMgKzEwOSwxNiBAQAogICBncnBjX21ldGFkYXRhX2FycmF5X2luaXQoJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKGNoYW5uZWwsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL1JlZmxlY3Rvci9yZWZsZWN0U3RyZWFtIiwgImxvY2FsaG9zdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CisgIGdycGNfc2xpY2UgaG9zdCA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJsb2NhbGhvc3QiKTsKKyAgY2FsbCA9IGdycGNfY2hhbm5lbF9jcmVhdGVfY2FsbCgKKyAgICAgIGNoYW5uZWwsIE5VTEwsIEdSUENfUFJPUEFHQVRFX0RFRkFVTFRTLCBjcSwKKyAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIvUmVmbGVjdG9yL3JlZmxlY3RTdHJlYW0iKSwgJmhvc3QsCisgICAgICBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfUkVBTFRJTUUpLCBOVUxMKTsKICAgc3RyZWFtX2luaXRfb3BzWzBdLm9wID0gR1JQQ19PUF9TRU5EX0lOSVRJQUxfTUVUQURBVEE7CiAgIHN0cmVhbV9pbml0X29wc1swXS5kYXRhLnNlbmRfaW5pdGlhbF9tZXRhZGF0YS5jb3VudCA9IDA7CiAgIHN0cmVhbV9pbml0X29wc1sxXS5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBzdHJlYW1faW5pdF9vcHNbMV0uZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBzdHJlYW1faW5pdF9vcHNbMV0uZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIGVycm9yID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKGNhbGwsIHN0cmVhbV9pbml0X29wcywgMiwgKHZvaWQgKikxLCBOVUxMKTsKICAgR1BSX0FTU0VSVChHUlBDX0NBTExfT0sgPT0gZXJyb3IpOwogICBncnBjX2NvbXBsZXRpb25fcXVldWVfbmV4dChjcSwgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CkBAIC0xMjMsOSArMTI2LDkgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheV9pbml0KCZpbml0aWFsX21ldGFkYXRhX3JlY3YpOwogCiAgIHN0cmVhbV9zdGVwX29wc1swXS5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICBzdHJlYW1fc3RlcF9vcHNbMF0uZGF0YS5zZW5kX21lc3NhZ2UgPSB0aGVfYnVmZmVyOworICBzdHJlYW1fc3RlcF9vcHNbMF0uZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gdGhlX2J1ZmZlcjsKICAgc3RyZWFtX3N0ZXBfb3BzWzFdLm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIHN0cmVhbV9zdGVwX29wc1sxXS5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIHN0cmVhbV9zdGVwX29wc1sxXS5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogfQogCiBzdGF0aWMgdm9pZCBzdGVwX3BpbmdfcG9uZ19zdHJlYW0odm9pZCkgewpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL2ZsaW5nL3NlcnZlci5jIGIvdGVzdC9jb3JlL2ZsaW5nL3NlcnZlci5jCmluZGV4IGZkNDQ2ZjEuLjExNzQyY2UgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9mbGluZy9zZXJ2ZXIuYworKysgYi90ZXN0L2NvcmUvZmxpbmcvc2VydmVyLmMKQEAgLTEwNywxOCArMTA3LDE4IEBACiAgIG9wLT5kYXRhLnNlbmRfaW5pdGlhbF9tZXRhZGF0YS5jb3VudCA9IDA7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmdGVybWluYWxfYnVmZmVyOworICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UucmVjdl9tZXNzYWdlID0gJnRlcm1pbmFsX2J1ZmZlcjsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX01FU1NBR0U7CiAgIGlmIChwYXlsb2FkX2J1ZmZlciA9PSBOVUxMKSB7CiAgICAgZ3ByX2xvZyhHUFJfSU5GTywgIk5VTEwgcGF5bG9hZCBidWZmZXIgISEhIik7CiAgIH0KLSAgb3AtPmRhdGEuc2VuZF9tZXNzYWdlID0gcGF5bG9hZF9idWZmZXI7CisgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSBwYXlsb2FkX2J1ZmZlcjsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKLSAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAiIjsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfQ0xPU0VfT05fU0VSVkVSOwogICBvcC0+ZGF0YS5yZWN2X2Nsb3NlX29uX3NlcnZlci5jYW5jZWxsZWQgPSAmd2FzX2NhbmNlbGxlZDsKQEAgLTE0NCw3ICsxNDQsNyBAQAogICBncnBjX2NhbGxfZXJyb3IgZXJyb3I7CiAgIC8qIFN0YXJ0aW5nIHJlYWQgYXQgc2VydmVyICovCiAgIHJlYWRfb3Aub3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgcmVhZF9vcC5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZwYXlsb2FkX2J1ZmZlcjsKKyAgcmVhZF9vcC5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcGF5bG9hZF9idWZmZXI7CiAgIGVycm9yID0gZ3JwY19jYWxsX3N0YXJ0X2JhdGNoKGNhbGwsICZyZWFkX29wLCAxLCB0YWcodCksIE5VTEwpOwogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBlcnJvcik7CiB9CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgaWYgKHBheWxvYWRfYnVmZmVyID09IE5VTEwpIHsKICAgICBncHJfbG9nKEdQUl9JTkZPLCAiTlVMTCBwYXlsb2FkIGJ1ZmZlciAhISEiKTsKICAgfQotICB3cml0ZV9vcC5kYXRhLnNlbmRfbWVzc2FnZSA9IHBheWxvYWRfYnVmZmVyOworICB3cml0ZV9vcC5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSBwYXlsb2FkX2J1ZmZlcjsKICAgZXJyb3IgPSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goY2FsbCwgJndyaXRlX29wLCAxLCB0YWdhcmcsIE5VTEwpOwogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBlcnJvcik7CiB9CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgc3RhdHVzX29wWzBdLm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgc3RhdHVzX29wWzBdLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7CiAgIHN0YXR1c19vcFswXS5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKLSAgc3RhdHVzX29wWzBdLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAiIjsKKyAgc3RhdHVzX29wWzBdLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSBOVUxMOwogICBzdGF0dXNfb3BbMV0ub3AgPSBHUlBDX09QX1JFQ1ZfQ0xPU0VfT05fU0VSVkVSOwogICBzdGF0dXNfb3BbMV0uZGF0YS5yZWN2X2Nsb3NlX29uX3NlcnZlci5jYW5jZWxsZWQgPSAmd2FzX2NhbmNlbGxlZDsKIApAQCAtMjU5LDggKzI1OSw4IEBACiAgICAgICAgIHN3aXRjaCAoKGludHB0cl90KXMpIHsKICAgICAgICAgICBjYXNlIEZMSU5HX1NFUlZFUl9ORVdfUkVRVUVTVDoKICAgICAgICAgICAgIGlmIChjYWxsICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgaWYgKDAgPT0KLSAgICAgICAgICAgICAgICAgIHN0cmNtcChjYWxsX2RldGFpbHMubWV0aG9kLCAiL1JlZmxlY3Rvci9yZWZsZWN0U3RyZWFtIikpIHsKKyAgICAgICAgICAgICAgaWYgKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKGNhbGxfZGV0YWlscy5tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL1JlZmxlY3Rvci9yZWZsZWN0U3RyZWFtIikpIHsKICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCBzdHJlYW1pbmcgY2FsbC4gU2VuZCBtZXRhZGF0YSBoZXJlLiAqLwogICAgICAgICAgICAgICAgIHN0YXJ0X3JlYWRfb3AoRkxJTkdfU0VSVkVSX1JFQURfRk9SX1NUUkVBTUlORyk7CiAgICAgICAgICAgICAgICAgc2VuZF9pbml0aWFsX21ldGFkYXRhKCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvaW9tZ3IvZXZfZXBvbGxfbGludXhfdGVzdC5jIGIvdGVzdC9jb3JlL2lvbWdyL2V2X2Vwb2xsX2xpbnV4X3Rlc3QuYwppbmRleCBkOTVkNTUyLi5hMTBiZTdmIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvaW9tZ3IvZXZfZXBvbGxfbGludXhfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9pb21nci9ldl9lcG9sbF9saW51eF90ZXN0LmMKQEAgLTMxNSw2ICszMTUsNyBAQAogICAgICAgICAgICAgInN0cmF0ZWd5LiBhbmQgdGhlIGN1cnJlbnQgc3RyYXRlZ3kgaXM6ICclcyciLAogICAgICAgICAgICAgcG9sbF9zdHJhdGVneSk7CiAgIH0KKwogICB7CiAgICAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKICAgICBncnBjX2lvbWdyX3NodXRkb3duKCZleGVjX2N0eCk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvbWVtb3J5X3VzYWdlL2NsaWVudC5jIGIvdGVzdC9jb3JlL21lbW9yeV91c2FnZS9jbGllbnQuYwppbmRleCBmNDQzMmJmLi4wOWYwZTJkIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvbWVtb3J5X3VzYWdlL2NsaWVudC5jCisrKyBiL3Rlc3QvY29yZS9tZW1vcnlfdXNhZ2UvY2xpZW50LmMKQEAgLTU4LDggKzU4LDcgQEAKICAgZ3JwY19jYWxsICpjYWxsOwogICBncnBjX21ldGFkYXRhX2FycmF5IGluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgZ3JwY19zdGF0dXNfY29kZSBzdGF0dXM7Ci0gIGNoYXIgKmRldGFpbHM7Ci0gIHNpemVfdCBkZXRhaWxzX2NhcGFjaXR5OworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXkgdHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKIH0gZmxpbmdfY2FsbDsKIApAQCAtODIsMTIgKzgxLDE1IEBACiAgIG9wLT5mbGFncyA9IEdSUENfSU5JVElBTF9NRVRBREFUQV9XQUlUX0ZPUl9SRUFEWTsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZjYWxsc1tjYWxsX2lkeF0uaW5pdGlhbF9tZXRhZGF0YV9yZWN2OworICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0KKyAgICAgICZjYWxsc1tjYWxsX2lkeF0uaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcCsrOwogCisgIGdycGNfc2xpY2UgaG9zdG5hbWUgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygibG9jYWxob3N0Iik7CiAgIGNhbGxzW2NhbGxfaWR4XS5jYWxsID0gZ3JwY19jaGFubmVsX2NyZWF0ZV9jYWxsKAotICAgICAgY2hhbm5lbCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGNxLCAiL1JlZmxlY3Rvci9yZWZsZWN0VW5hcnkiLAotICAgICAgImxvY2FsaG9zdCIsIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOworICAgICAgY2hhbm5lbCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGNxLAorICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9SZWZsZWN0b3IvcmVmbGVjdFVuYXJ5IiksICZob3N0bmFtZSwKKyAgICAgIGdwcl9pbmZfZnV0dXJlKEdQUl9DTE9DS19SRUFMVElNRSksIE5VTEwpOwogCiAgIEdQUl9BU1NFUlQoR1JQQ19DQUxMX09LID09IGdycGNfY2FsbF9zdGFydF9iYXRjaChjYWxsc1tjYWxsX2lkeF0uY2FsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhX29wcywKQEAgLTEwNyw4ICsxMDksNiBAQAogICAgICAgJmNhbGxzW2NhbGxfaWR4XS50cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJmNhbGxzW2NhbGxfaWR4XS5zdGF0dXM7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlscyA9ICZjYWxsc1tjYWxsX2lkeF0uZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0KLSAgICAgICZjYWxsc1tjYWxsX2lkeF0uZGV0YWlsc19jYXBhY2l0eTsKICAgb3ArKzsKIAogICBHUFJfQVNTRVJUKEdSUENfQ0FMTF9PSyA9PSBncnBjX2NhbGxfc3RhcnRfYmF0Y2goY2FsbHNbY2FsbF9pZHhdLmNhbGwsCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogICBncnBjX2NvbXBsZXRpb25fcXVldWVfbmV4dChjcSwgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmY2FsbHNbY2FsbF9pZHhdLmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmY2FsbHNbY2FsbF9pZHhdLnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwotICBncHJfZnJlZShjYWxsc1tjYWxsX2lkeF0uZGV0YWlscyk7CisgIGdycGNfc2xpY2VfdW5yZWYoY2FsbHNbY2FsbF9pZHhdLmRldGFpbHMpOwogICBncnBjX2NhbGxfZGVzdHJveShjYWxsc1tjYWxsX2lkeF0uY2FsbCk7CiAgIGNhbGxzW2NhbGxfaWR4XS5jYWxsID0gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBncnBjX21lbW9yeV9jb3VudGVycyBzZW5kX3NuYXBzaG90X3JlcXVlc3QoCi0gICAgaW50IGNhbGxfaWR4LCBjb25zdCBjaGFyICpjYWxsX3R5cGUpIHsKK3N0YXRpYyBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgc2VuZF9zbmFwc2hvdF9yZXF1ZXN0KGludCBjYWxsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2UgY2FsbF90eXBlKSB7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmY2FsbHNbY2FsbF9pZHhdLmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfaW5pdCgmY2FsbHNbY2FsbF9pZHhdLnRyYWlsaW5nX21ldGFkYXRhX3JlY3YpOwogCkBAIC0xMzksMjIgKzEzOSwyMiBAQAogICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfQ0xPU0VfRlJPTV9DTElFTlQ7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9JTklUSUFMX01FVEFEQVRBOwotICBvcC0+ZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmY2FsbHNbY2FsbF9pZHhdLmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9CisgICAgICAmY2FsbHNbY2FsbF9pZHhdLmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX01FU1NBR0U7Ci0gIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfU1RBVFVTX09OX0NMSUVOVDsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0KICAgICAgICZjYWxsc1tjYWxsX2lkeF0udHJhaWxpbmdfbWV0YWRhdGFfcmVjdjsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1cyA9ICZjYWxsc1tjYWxsX2lkeF0uc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmY2FsbHNbY2FsbF9pZHhdLmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9Ci0gICAgICAmY2FsbHNbY2FsbF9pZHhdLmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wKys7CiAKKyAgZ3JwY19zbGljZSBob3N0bmFtZSA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJsb2NhbGhvc3QiKTsKICAgY2FsbHNbY2FsbF9pZHhdLmNhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoCi0gICAgICBjaGFubmVsLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgY3EsIGNhbGxfdHlwZSwgImxvY2FsaG9zdCIsCisgICAgICBjaGFubmVsLCBOVUxMLCBHUlBDX1BST1BBR0FURV9ERUZBVUxUUywgY3EsIGNhbGxfdHlwZSwgJmhvc3RuYW1lLAogICAgICAgZ3ByX2luZl9mdXR1cmUoR1BSX0NMT0NLX1JFQUxUSU1FKSwgTlVMTCk7CiAgIEdQUl9BU1NFUlQoR1JQQ19DQUxMX09LID09IGdycGNfY2FsbF9zdGFydF9iYXRjaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxzW2NhbGxfaWR4XS5jYWxsLCBzbmFwc2hvdF9vcHMsCkBAIC0xODQsOSArMTg0LDggQEAKICAgZ3JwY19zbGljZV91bnJlZihyZXNwb25zZSk7CiAgIGdycGNfYnl0ZV9idWZmZXJfcmVhZGVyX2Rlc3Ryb3koJnJlYWRlcik7CiAgIGdycGNfYnl0ZV9idWZmZXJfZGVzdHJveShyZXNwb25zZV9wYXlsb2FkX3JlY3YpOwotICBncHJfZnJlZShjYWxsc1tjYWxsX2lkeF0uZGV0YWlscyk7Ci0gIGNhbGxzW2NhbGxfaWR4XS5kZXRhaWxzID0gTlVMTDsKLSAgY2FsbHNbY2FsbF9pZHhdLmRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlX3VucmVmKGNhbGxzW2NhbGxfaWR4XS5kZXRhaWxzKTsKKyAgY2FsbHNbY2FsbF9pZHhdLmRldGFpbHMgPSBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIGdycGNfY2FsbF9kZXN0cm95KGNhbGxzW2NhbGxfaWR4XS5jYWxsKTsKICAgY2FsbHNbY2FsbF9pZHhdLmNhbGwgPSBOVUxMOwogCkBAIC0yMTksOSArMjE4LDggQEAKICAgZ3ByX2NtZGxpbmVfcGFyc2UoY2wsIGFyZ2MsIGFyZ3YpOwogICBncHJfY21kbGluZV9kZXN0cm95KGNsKTsKIAotICBmb3IgKGludCBrID0gMDsgayA8IChpbnQpKHNpemVvZihjYWxscykgLyBzaXplb2YoZmxpbmdfY2FsbCkpOyBrKyspIHsKLSAgICBjYWxsc1trXS5kZXRhaWxzID0gTlVMTDsKLSAgICBjYWxsc1trXS5kZXRhaWxzX2NhcGFjaXR5ID0gMDsKKyAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBHUFJfQVJSQVlfU0laRShjYWxscyk7IGsrKykgeworICAgIGNhbGxzW2tdLmRldGFpbHMgPSBncnBjX2VtcHR5X3NsaWNlKCk7CiAgIH0KIAogICBjcSA9IGdycGNfY29tcGxldGlvbl9xdWV1ZV9jcmVhdGUoTlVMTCk7CkBAIC0yMzIsMTAgKzIzMCwxMCBAQAogCiAgIGludCBjYWxsX2lkeCA9IDA7CiAKLSAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIGJlZm9yZV9zZXJ2ZXJfY3JlYXRlID0KLSAgICAgIHNlbmRfc25hcHNob3RfcmVxdWVzdCgwLCAiUmVmbGVjdG9yL0dldEJlZm9yZVN2ckNyZWF0aW9uIik7Ci0gIHN0cnVjdCBncnBjX21lbW9yeV9jb3VudGVycyBhZnRlcl9zZXJ2ZXJfY3JlYXRlID0KLSAgICAgIHNlbmRfc25hcHNob3RfcmVxdWVzdCgwLCAiUmVmbGVjdG9yL0dldEFmdGVyU3ZyQ3JlYXRpb24iKTsKKyAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIGJlZm9yZV9zZXJ2ZXJfY3JlYXRlID0gc2VuZF9zbmFwc2hvdF9yZXF1ZXN0KAorICAgICAgMCwgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIlJlZmxlY3Rvci9HZXRCZWZvcmVTdnJDcmVhdGlvbiIpKTsKKyAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIGFmdGVyX3NlcnZlcl9jcmVhdGUgPSBzZW5kX3NuYXBzaG90X3JlcXVlc3QoCisgICAgICAwLCBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiUmVmbGVjdG9yL0dldEFmdGVyU3ZyQ3JlYXRpb24iKSk7CiAKICAgLy8gd2FybXVwIHBlcmlvZAogICBmb3IgKGNhbGxfaWR4ID0gMDsgY2FsbF9pZHggPCB3YXJtdXBfaXRlcmF0aW9uczsgKytjYWxsX2lkeCkgewpAQCAtMjQzLDcgKzI0MSw4IEBACiAgIH0KIAogICBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgc2VydmVyX2JlbmNobWFya19jYWxsc19zdGFydCA9Ci0gICAgICBzZW5kX3NuYXBzaG90X3JlcXVlc3QoMCwgIlJlZmxlY3Rvci9TaW1wbGVTbmFwc2hvdCIpOworICAgICAgc2VuZF9zbmFwc2hvdF9yZXF1ZXN0KAorICAgICAgICAgIDAsIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJSZWZsZWN0b3IvU2ltcGxlU25hcHNob3QiKSk7CiAKICAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIGNsaWVudF9iZW5jaG1hcmtfY2FsbHNfc3RhcnQgPQogICAgICAgZ3JwY19tZW1vcnlfY291bnRlcnNfc25hcHNob3QoKTsKQEAgLTI1Niw4ICsyNTUsOCBAQAogICBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgY2xpZW50X2NhbGxzX2luZmxpZ2h0ID0KICAgICAgIGdycGNfbWVtb3J5X2NvdW50ZXJzX3NuYXBzaG90KCk7CiAKLSAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIHNlcnZlcl9jYWxsc19pbmZsaWdodCA9Ci0gICAgICBzZW5kX3NuYXBzaG90X3JlcXVlc3QoMCwgIlJlZmxlY3Rvci9EZXN0cm95Q2FsbHMiKTsKKyAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIHNlcnZlcl9jYWxsc19pbmZsaWdodCA9IHNlbmRfc25hcHNob3RfcmVxdWVzdCgKKyAgICAgIDAsIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJSZWZsZWN0b3IvRGVzdHJveUNhbGxzIikpOwogCiAgIGRvIHsKICAgICBldmVudCA9IGdycGNfY29tcGxldGlvbl9xdWV1ZV9uZXh0KApAQCAtMjcyLDggKzI3MSw4IEBACiAgICAgZmluaXNoX3BpbmdfcG9uZ19yZXF1ZXN0KGNhbGxfaWR4ICsgMSk7CiAgIH0KIAotICBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgc2VydmVyX2NhbGxzX2VuZCA9Ci0gICAgICBzZW5kX3NuYXBzaG90X3JlcXVlc3QoMCwgIlJlZmxlY3Rvci9TaW1wbGVTbmFwc2hvdCIpOworICBzdHJ1Y3QgZ3JwY19tZW1vcnlfY291bnRlcnMgc2VydmVyX2NhbGxzX2VuZCA9IHNlbmRfc25hcHNob3RfcmVxdWVzdCgKKyAgICAgIDAsIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJSZWZsZWN0b3IvU2ltcGxlU25hcHNob3QiKSk7CiAKICAgc3RydWN0IGdycGNfbWVtb3J5X2NvdW50ZXJzIGNsaWVudF9jaGFubmVsX2VuZCA9CiAgICAgICBncnBjX21lbW9yeV9jb3VudGVyc19zbmFwc2hvdCgpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL21lbW9yeV91c2FnZS9zZXJ2ZXIuYyBiL3Rlc3QvY29yZS9tZW1vcnlfdXNhZ2Uvc2VydmVyLmMKaW5kZXggYzA3MTA5My4uMWNhZTRmNCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL21lbW9yeV91c2FnZS9zZXJ2ZXIuYworKysgYi90ZXN0L2NvcmUvbWVtb3J5X3VzYWdlL3NlcnZlci5jCkBAIC0xMTAsNyArMTEwLDggQEAKICAgc3RhdHVzX29wLm9wID0gR1JQQ19PUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUjsKICAgc3RhdHVzX29wLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7CiAgIHN0YXR1c19vcC5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKLSAgc3RhdHVzX29wLmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAiIjsKKyAgZ3JwY19zbGljZSBkZXRhaWxzID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIiIpOworICBzdGF0dXNfb3AuZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci5zdGF0dXNfZGV0YWlscyA9ICZkZXRhaWxzOwogCiAgIEdQUl9BU1NFUlQoR1JQQ19DQUxMX09LID09IGdycGNfY2FsbF9zdGFydF9iYXRjaCgoKihmbGluZ19jYWxsICopdGFnKS5jYWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1c19vcCwgMSwgdGFnLCBOVUxMKSk7CkBAIC0xMjksMTggKzEzMCwxOSBAQAogICBvcC0+ZGF0YS5zZW5kX2luaXRpYWxfbWV0YWRhdGEuY291bnQgPSAwOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfTUVTU0FHRTsKLSAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnRlcm1pbmFsX2J1ZmZlcjsKKyAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZ0ZXJtaW5hbF9idWZmZXI7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwogICBpZiAocGF5bG9hZF9idWZmZXIgPT0gTlVMTCkgewogICAgIGdwcl9sb2coR1BSX0lORk8sICJOVUxMIHBheWxvYWQgYnVmZmVyICEhISIpOwogICB9Ci0gIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHBheWxvYWRfYnVmZmVyOworICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcGF5bG9hZF9idWZmZXI7CiAgIG9wKys7CiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwogICBvcC0+ZGF0YS5zZW5kX3N0YXR1c19mcm9tX3NlcnZlci50cmFpbGluZ19tZXRhZGF0YV9jb3VudCA9IDA7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gIiI7CisgIGdycGNfc2xpY2UgZGV0YWlscyA9IGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIiKTsKKyAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0NMT1NFX09OX1NFUlZFUjsKICAgb3AtPmRhdGEucmVjdl9jbG9zZV9vbl9zZXJ2ZXIuY2FuY2VsbGVkID0gJndhc19jYW5jZWxsZWQ7CkBAIC0yNDUsMjUgKzI0NywyNyBAQAogICAgICAgICBzd2l0Y2ggKHMtPnN0YXRlKSB7CiAgICAgICAgICAgY2FzZSBGTElOR19TRVJWRVJfTkVXX1JFUVVFU1Q6CiAgICAgICAgICAgICByZXF1ZXN0X2NhbGxfdW5hcnkoKytuZXh0X2NhbGxfaWR4KTsKLSAgICAgICAgICAgIGlmICgwID09Ci0gICAgICAgICAgICAgICAgc3RyY21wKHMtPmNhbGxfZGV0YWlscy5tZXRob2QsICIvUmVmbGVjdG9yL3JlZmxlY3RVbmFyeSIpKSB7CisgICAgICAgICAgICBpZiAoMCA9PSBncnBjX3NsaWNlX3N0cl9jbXAocy0+Y2FsbF9kZXRhaWxzLm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL1JlZmxlY3Rvci9yZWZsZWN0VW5hcnkiKSkgewogICAgICAgICAgICAgICBzLT5zdGF0ZSA9IEZMSU5HX1NFUlZFUl9TRU5EX0lOSVRfTUVUQURBVEE7CiAgICAgICAgICAgICAgIHNlbmRfaW5pdGlhbF9tZXRhZGF0YV91bmFyeShzKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAocy0+Y2FsbF9kZXRhaWxzLm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmxlY3Rvci9HZXRCZWZvcmVTdnJDcmVhdGlvbiIpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9zdHJfY21wKHMtPmNhbGxfZGV0YWlscy5tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVmbGVjdG9yL0dldEJlZm9yZVN2ckNyZWF0aW9uIikpIHsKICAgICAgICAgICAgICAgcy0+c3RhdGUgPSBGTElOR19TRVJWRVJfU0VORF9TVEFUVVNfU05BUFNIT1Q7CiAgICAgICAgICAgICAgIHNlbmRfc25hcHNob3QocywgJmJlZm9yZV9zZXJ2ZXJfY3JlYXRlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAocy0+Y2FsbF9kZXRhaWxzLm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmxlY3Rvci9HZXRBZnRlclN2ckNyZWF0aW9uIikpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PQorICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX3N0cl9jbXAocy0+Y2FsbF9kZXRhaWxzLm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZsZWN0b3IvR2V0QWZ0ZXJTdnJDcmVhdGlvbiIpKSB7CiAgICAgICAgICAgICAgIHMtPnN0YXRlID0gRkxJTkdfU0VSVkVSX1NFTkRfU1RBVFVTX1NOQVBTSE9UOwogICAgICAgICAgICAgICBzZW5kX3NuYXBzaG90KHMsICZhZnRlcl9zZXJ2ZXJfY3JlYXRlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAocy0+Y2FsbF9kZXRhaWxzLm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmxlY3Rvci9TaW1wbGVTbmFwc2hvdCIpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKHMtPmNhbGxfZGV0YWlscy5tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZsZWN0b3IvU2ltcGxlU25hcHNob3QiKSkgewogICAgICAgICAgICAgICBzLT5zdGF0ZSA9IEZMSU5HX1NFUlZFUl9TRU5EX1NUQVRVU19TTkFQU0hPVDsKICAgICAgICAgICAgICAgY3VycmVudF9zbmFwc2hvdCA9IGdycGNfbWVtb3J5X2NvdW50ZXJzX3NuYXBzaG90KCk7CiAgICAgICAgICAgICAgIHNlbmRfc25hcHNob3QocywgJmN1cnJlbnRfc25hcHNob3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChzLT5jYWxsX2RldGFpbHMubWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVmbGVjdG9yL0Rlc3Ryb3lDYWxscyIpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gZ3JwY19zbGljZV9zdHJfY21wKHMtPmNhbGxfZGV0YWlscy5tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZsZWN0b3IvRGVzdHJveUNhbGxzIikpIHsKICAgICAgICAgICAgICAgcy0+c3RhdGUgPSBGTElOR19TRVJWRVJfQkFUQ0hfU0VORF9TVEFUVVNfRkxJTkdfQ0FMTDsKICAgICAgICAgICAgICAgY3VycmVudF9zbmFwc2hvdCA9IGdycGNfbWVtb3J5X2NvdW50ZXJzX3NuYXBzaG90KCk7CiAgICAgICAgICAgICAgIHNlbmRfc25hcHNob3QocywgJmN1cnJlbnRfc25hcHNob3QpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3NlY3VyaXR5L2NyZWRlbnRpYWxzX3Rlc3QuYyBiL3Rlc3QvY29yZS9zZWN1cml0eS9jcmVkZW50aWFsc190ZXN0LmMKaW5kZXggMGE3OTI5Mi4uYzA5MzNjNiAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL3NlY3VyaXR5L2NyZWRlbnRpYWxzX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvc2VjdXJpdHkvY3JlZGVudGlhbHNfdGVzdC5jCkBAIC0xOTYsOCArMTk2LDggQEAKICAgZ3JwY19zbGljZSB2YWx1ZSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKHZhbHVlX3N0cik7CiAgIGdycGNfY3JlZGVudGlhbHNfbWRfc3RvcmVfYWRkKHN0b3JlLCBrZXksIHZhbHVlKTsKICAgR1BSX0FTU0VSVChzdG9yZS0+bnVtX2VudHJpZXMgPT0gMSk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9jbXAoa2V5LCBzdG9yZS0+ZW50cmllc1swXS5rZXkpID09IDApOwotICBHUFJfQVNTRVJUKGdycGNfc2xpY2VfY21wKHZhbHVlLCBzdG9yZS0+ZW50cmllc1swXS52YWx1ZSkgPT0gMCk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShrZXksIHN0b3JlLT5lbnRyaWVzWzBdLmtleSkpOworICBHUFJfQVNTRVJUKGdycGNfc2xpY2VfZXEodmFsdWUsIHN0b3JlLT5lbnRyaWVzWzBdLnZhbHVlKSk7CiAgIGdycGNfc2xpY2VfdW5yZWYoa2V5KTsKICAgZ3JwY19zbGljZV91bnJlZih2YWx1ZSk7CiAgIGdycGNfY3JlZGVudGlhbHNfbWRfc3RvcmVfdW5yZWYoJmV4ZWNfY3R4LCBzdG9yZSk7CkBAIC0xMDY1LDkgKzEwNjUsOCBAQAogICAqcyA9IFBMVUdJTl9HRVRfTUVUQURBVEFfQ0FMTEVEX1NUQVRFOwogICBmb3IgKGkgPSAwOyBpIDwgR1BSX0FSUkFZX1NJWkUocGx1Z2luX21kKTsgaSsrKSB7CiAgICAgbWVtc2V0KCZtZFtpXSwgMCwgc2l6ZW9mKGdycGNfbWV0YWRhdGEpKTsKLSAgICBtZFtpXS5rZXkgPSBwbHVnaW5fbWRbaV0ua2V5OwotICAgIG1kW2ldLnZhbHVlID0gcGx1Z2luX21kW2ldLnZhbHVlOwotICAgIG1kW2ldLnZhbHVlX2xlbmd0aCA9IHN0cmxlbihwbHVnaW5fbWRbaV0udmFsdWUpOworICAgIG1kW2ldLmtleSA9IGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKHBsdWdpbl9tZFtpXS5rZXkpOworICAgIG1kW2ldLnZhbHVlID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcocGx1Z2luX21kW2ldLnZhbHVlKTsKICAgfQogICBjYih1c2VyX2RhdGEsIG1kLCBHUFJfQVJSQVlfU0laRShtZCksIEdSUENfU1RBVFVTX09LLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9zZWN1cml0eS9wcmludF9nb29nbGVfZGVmYXVsdF9jcmVkc190b2tlbi5jIGIvdGVzdC9jb3JlL3NlY3VyaXR5L3ByaW50X2dvb2dsZV9kZWZhdWx0X2NyZWRzX3Rva2VuLmMKaW5kZXggMmI3NDY5MC4uZWExMzZmYiAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL3NlY3VyaXR5L3ByaW50X2dvb2dsZV9kZWZhdWx0X2NyZWRzX3Rva2VuLmMKKysrIGIvdGVzdC9jb3JlL3NlY3VyaXR5L3ByaW50X2dvb2dsZV9kZWZhdWx0X2NyZWRzX3Rva2VuLmMKQEAgLTYzLDcgKzYzLDcgQEAKICAgfSBlbHNlIHsKICAgICBjaGFyICp0b2tlbjsKICAgICBHUFJfQVNTRVJUKG51bV9tZCA9PSAxKTsKLSAgICB0b2tlbiA9IGdycGNfZHVtcF9zbGljZShtZF9lbGVtc1swXS52YWx1ZSwgR1BSX0RVTVBfQVNDSUkpOworICAgIHRva2VuID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhtZF9lbGVtc1swXS52YWx1ZSk7CiAgICAgcHJpbnRmKCJcbkdvdCB0b2tlbjogJXNcblxuIiwgdG9rZW4pOwogICAgIGdwcl9mcmVlKHRva2VuKTsKICAgfQpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3NlY3VyaXR5L3NlY3VyZV9lbmRwb2ludF90ZXN0LmMgYi90ZXN0L2NvcmUvc2VjdXJpdHkvc2VjdXJlX2VuZHBvaW50X3Rlc3QuYwppbmRleCBlMWQ2ZmY5Li5iY2M1MGQwIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvc2VjdXJpdHkvc2VjdXJlX2VuZHBvaW50X3Rlc3QuYworKysgYi90ZXN0L2NvcmUvc2VjdXJpdHkvc2VjdXJlX2VuZHBvaW50X3Rlc3QuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CiAgIEdQUl9BU1NFUlQobiA9PSAxKTsKICAgR1BSX0FTU0VSVChpbmNvbWluZy5jb3VudCA9PSAxKTsKLSAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2VfY21wKHMsIGluY29taW5nLnNsaWNlc1swXSkpOworICBHUFJfQVNTRVJUKGdycGNfc2xpY2VfZXEocywgaW5jb21pbmcuc2xpY2VzWzBdKSk7CiAKICAgZ3JwY19lbmRwb2ludF9zaHV0ZG93bigmZXhlY19jdHgsIGYuY2xpZW50X2VwKTsKICAgZ3JwY19lbmRwb2ludF9zaHV0ZG93bigmZXhlY19jdHgsIGYuc2VydmVyX2VwKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9zZWN1cml0eS9zZWN1cml0eV9jb25uZWN0b3JfdGVzdC5jIGIvdGVzdC9jb3JlL3NlY3VyaXR5L3NlY3VyaXR5X2Nvbm5lY3Rvcl90ZXN0LmMKaW5kZXggODg3MmNiZS4uNDIxOWIxMyAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL3NlY3VyaXR5L3NlY3VyaXR5X2Nvbm5lY3Rvcl90ZXN0LmMKKysrIGIvdGVzdC9jb3JlL3NlY3VyaXR5L3NlY3VyaXR5X2Nvbm5lY3Rvcl90ZXN0LmMKQEAgLTM3MCw3ICszNzAsNyBAQAogICBncHJfc2V0ZW52KEdSUENfREVGQVVMVF9TU0xfUk9PVFNfRklMRV9QQVRIX0VOVl9WQVIsICIiKTsKICAgZ3JwY19zZXRfc3NsX3Jvb3RzX292ZXJyaWRlX2NhbGxiYWNrKG92ZXJyaWRlX3Jvb3RzX3N1Y2Nlc3MpOwogICBncnBjX3NsaWNlIHJvb3RzID0gZ3JwY19nZXRfZGVmYXVsdF9zc2xfcm9vdHNfZm9yX3Rlc3RpbmcoKTsKLSAgY2hhciAqcm9vdHNfY29udGVudHMgPSBncnBjX2R1bXBfc2xpY2Uocm9vdHMsIEdQUl9EVU1QX0FTQ0lJKTsKKyAgY2hhciAqcm9vdHNfY29udGVudHMgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHJvb3RzKTsKICAgZ3JwY19zbGljZV91bnJlZihyb290cyk7CiAgIEdQUl9BU1NFUlQoc3RyY21wKHJvb3RzX2NvbnRlbnRzLCByb290c19mb3Jfb3ZlcnJpZGVfYXBpKSA9PSAwKTsKICAgZ3ByX2ZyZWUocm9vdHNfY29udGVudHMpOwpAQCAtMzc5LDcgKzM3OSw3IEBACiAgICAgIGluc3RlYWQuICovCiAgIGdwcl9zZXRlbnYoR1JQQ19ERUZBVUxUX1NTTF9ST09UU19GSUxFX1BBVEhfRU5WX1ZBUiwgcm9vdHNfZW52X3Zhcl9maWxlX3BhdGgpOwogICByb290cyA9IGdycGNfZ2V0X2RlZmF1bHRfc3NsX3Jvb3RzX2Zvcl90ZXN0aW5nKCk7Ci0gIHJvb3RzX2NvbnRlbnRzID0gZ3JwY19kdW1wX3NsaWNlKHJvb3RzLCBHUFJfRFVNUF9BU0NJSSk7CisgIHJvb3RzX2NvbnRlbnRzID0gZ3JwY19zbGljZV90b19jX3N0cmluZyhyb290cyk7CiAgIGdycGNfc2xpY2VfdW5yZWYocm9vdHMpOwogICBHUFJfQVNTRVJUKHN0cmNtcChyb290c19jb250ZW50cywgcm9vdHNfZm9yX2Vudl92YXIpID09IDApOwogICBncHJfZnJlZShyb290c19jb250ZW50cyk7CkBAIC0zODgsNyArMzg4LDcgQEAKICAgICAgdGhlIGFwaS4gKi8KICAgZ3ByX3NldGVudihHUlBDX0RFRkFVTFRfU1NMX1JPT1RTX0ZJTEVfUEFUSF9FTlZfVkFSLCAiIik7CiAgIHJvb3RzID0gZ3JwY19nZXRfZGVmYXVsdF9zc2xfcm9vdHNfZm9yX3Rlc3RpbmcoKTsKLSAgcm9vdHNfY29udGVudHMgPSBncnBjX2R1bXBfc2xpY2Uocm9vdHMsIEdQUl9EVU1QX0FTQ0lJKTsKKyAgcm9vdHNfY29udGVudHMgPSBncnBjX3NsaWNlX3RvX2Nfc3RyaW5nKHJvb3RzKTsKICAgZ3JwY19zbGljZV91bnJlZihyb290cyk7CiAgIEdQUl9BU1NFUlQoc3RyY21wKHJvb3RzX2NvbnRlbnRzLCByb290c19mb3Jfb3ZlcnJpZGVfYXBpKSA9PSAwKTsKICAgZ3ByX2ZyZWUocm9vdHNfY29udGVudHMpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3NsaWNlL3BlcmNlbnRfZW5jb2RlX2Z1enplci5jIGIvdGVzdC9jb3JlL3NsaWNlL3BlcmNlbnRfZW5jb2RlX2Z1enplci5jCmluZGV4IDk2OThlNzkuLjBkNDQwYzUgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9zbGljZS9wZXJjZW50X2VuY29kZV9mdXp6ZXIuYworKysgYi90ZXN0L2NvcmUvc2xpY2UvcGVyY2VudF9lbmNvZGVfZnV6emVyLmMKQEAgLTU1LDggKzU1LDggQEAKICAgZ3JwY19zbGljZSBwZXJtaXNzaXZlX2RlY29kZWRfb3V0cHV0ID0KICAgICAgIGdycGNfcGVybWlzc2l2ZV9wZXJjZW50X2RlY29kZV9zbGljZShvdXRwdXQpOwogICAvLyBhbmQgZGVjb2RlZCBvdXRwdXQgbXVzdCBhbHdheXMgbWF0Y2ggdGhlIGlucHV0Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9jbXAoaW5wdXQsIGRlY29kZWRfb3V0cHV0KSA9PSAwKTsKLSAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2NtcChpbnB1dCwgcGVybWlzc2l2ZV9kZWNvZGVkX291dHB1dCkgPT0gMCk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShpbnB1dCwgZGVjb2RlZF9vdXRwdXQpKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2VxKGlucHV0LCBwZXJtaXNzaXZlX2RlY29kZWRfb3V0cHV0KSk7CiAgIGdycGNfc2xpY2VfdW5yZWYoaW5wdXQpOwogICBncnBjX3NsaWNlX3VucmVmKG91dHB1dCk7CiAgIGdycGNfc2xpY2VfdW5yZWYoZGVjb2RlZF9vdXRwdXQpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmdfdGVzdC5jIGIvdGVzdC9jb3JlL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmdfdGVzdC5jCmluZGV4IGQ3MWM5OWYuLjIyMmU2OTUgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9zbGljZS9wZXJjZW50X2VuY29kaW5nX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvc2xpY2UvcGVyY2VudF9lbmNvZGluZ190ZXN0LmMKQEAgLTgxLDkgKzgxLDkgQEAKICAgZ3ByX2ZyZWUoZW5jb2RlZDJyYXdfbXNnKTsKICAgZ3ByX2ZyZWUoZW5jb2RlZDJyYXdfcGVybWlzc2l2ZV9tc2cpOwogCi0gIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX2NtcChyYXdfc2xpY2UsIGVuY29kZWQycmF3X3NsaWNlKSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX2NtcChyYXdfc2xpY2UsIGVuY29kZWQycmF3X3Blcm1pc3NpdmVfc2xpY2UpKTsKLSAgR1BSX0FTU0VSVCgwID09IGdycGNfc2xpY2VfY21wKGVuY29kZWRfc2xpY2UsIHJhdzJlbmNvZGVkX3NsaWNlKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShyYXdfc2xpY2UsIGVuY29kZWQycmF3X3NsaWNlKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShyYXdfc2xpY2UsIGVuY29kZWQycmF3X3Blcm1pc3NpdmVfc2xpY2UpKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2VxKGVuY29kZWRfc2xpY2UsIHJhdzJlbmNvZGVkX3NsaWNlKSk7CiAKICAgZ3JwY19zbGljZV91bnJlZihlbmNvZGVkMnJhd19zbGljZSk7CiAgIGdycGNfc2xpY2VfdW5yZWYoZW5jb2RlZDJyYXdfcGVybWlzc2l2ZV9zbGljZSk7CkBAIC0xMjMsOCArMTIzLDggQEAKICAgICAgICAgICBlbmNvZGVkMnJhd19wZXJtaXNzaXZlX21zZyk7CiAgIGdwcl9mcmVlKGVuY29kZWQycmF3X3Blcm1pc3NpdmVfbXNnKTsKIAotICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19zbGljZV9jbXAocGVybWlzc2l2ZV91bmVuY29kZWRfc2xpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkMnJhd19wZXJtaXNzaXZlX3NsaWNlKSk7CisgIEdQUl9BU1NFUlQoCisgICAgICBncnBjX3NsaWNlX2VxKHBlcm1pc3NpdmVfdW5lbmNvZGVkX3NsaWNlLCBlbmNvZGVkMnJhd19wZXJtaXNzaXZlX3NsaWNlKSk7CiAKICAgZ3JwY19zbGljZV91bnJlZihwZXJtaXNzaXZlX3VuZW5jb2RlZF9zbGljZSk7CiAgIGdycGNfc2xpY2VfdW5yZWYoZW5jb2RlZDJyYXdfcGVybWlzc2l2ZV9zbGljZSk7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvc2xpY2Uvc2xpY2VfdGVzdC5jIGIvdGVzdC9jb3JlL3NsaWNlL3NsaWNlX3Rlc3QuYwppbmRleCBjYTQ0YmVjLi5mNjhhOTUzIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvc2xpY2Uvc2xpY2VfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS9zbGljZS9zbGljZV90ZXN0LmMKQEAgLTM1LDggKzM1LDEyIEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgPGdycGMvZ3JwYy5oPgogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9hbGxvYy5oPgogI2luY2x1ZGUgPGdycGMvc3VwcG9ydC9sb2cuaD4KKworI2luY2x1ZGUgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmgiCiAjaW5jbHVkZSAidGVzdC9jb3JlL3V0aWwvdGVzdF9jb25maWcuaCIKIAogI2RlZmluZSBMT0dfVEVTVF9OQU1FKHgpIGdwcl9sb2coR1BSX0lORk8sICIlcyIsIHgpOwpAQCAtNjEsOCArNjUsMTAgQEAKICAgICBHUFJfQVNTRVJUKEdSUENfU0xJQ0VfTEVOR1RIKHNsaWNlKSA9PSBsZW5ndGgpOwogICAgIC8qIElmIHRoZSBzbGljZSBoYXMgYSByZWZjb3VudCwgaXQgbXVzdCBiZSBkZXN0cm95YWJsZS4gKi8KICAgICBpZiAoc2xpY2UucmVmY291bnQpIHsKLSAgICAgIEdQUl9BU1NFUlQoc2xpY2UucmVmY291bnQtPnJlZiAhPSBOVUxMKTsKLSAgICAgIEdQUl9BU1NFUlQoc2xpY2UucmVmY291bnQtPnVucmVmICE9IE5VTEwpOworICAgICAgR1BSX0FTU0VSVChzbGljZS5yZWZjb3VudC0+dnRhYmxlICE9IE5VTEwpOworICAgICAgR1BSX0FTU0VSVChzbGljZS5yZWZjb3VudC0+dnRhYmxlLT5yZWYgIT0gTlVMTCk7CisgICAgICBHUFJfQVNTRVJUKHNsaWNlLnJlZmNvdW50LT52dGFibGUtPnVucmVmICE9IE5VTEwpOworICAgICAgR1BSX0FTU0VSVChzbGljZS5yZWZjb3VudC0+dnRhYmxlLT5oYXNoICE9IE5VTEwpOwogICAgIH0KICAgICAvKiBXZSBtdXN0IGJlIGFibGUgdG8gd3JpdGUgdG8gZXZlcnkgYnl0ZSBvZiB0aGUgZGF0YSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMjQ5LDYgKzI1NSw1NSBAQAogICBncnBjX3NsaWNlX3VucmVmKHNsaWNlKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdF9zbGljZV9pbnRlcm5pbmcodm9pZCkgeworICBMT0dfVEVTVF9OQU1FKCJ0ZXN0X3NsaWNlX2ludGVybmluZyIpOworCisgIGdycGNfaW5pdCgpOworICBncnBjX3NsaWNlIHNyYzEgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZygiaGVsbG8xMjM0NTY3ODkxMjM0NTY3ODkiKTsKKyAgZ3JwY19zbGljZSBzcmMyID0gZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoImhlbGxvMTIzNDU2Nzg5MTIzNDU2Nzg5Iik7CisgIEdQUl9BU1NFUlQoR1JQQ19TTElDRV9TVEFSVF9QVFIoc3JjMSkgIT0gR1JQQ19TTElDRV9TVEFSVF9QVFIoc3JjMikpOworICBncnBjX3NsaWNlIGludGVybmVkMSA9IGdycGNfc2xpY2VfaW50ZXJuKHNyYzEpOworICBncnBjX3NsaWNlIGludGVybmVkMiA9IGdycGNfc2xpY2VfaW50ZXJuKHNyYzIpOworICBHUFJfQVNTRVJUKEdSUENfU0xJQ0VfU1RBUlRfUFRSKGludGVybmVkMSkgPT0KKyAgICAgICAgICAgICBHUlBDX1NMSUNFX1NUQVJUX1BUUihpbnRlcm5lZDIpKTsKKyAgR1BSX0FTU0VSVChHUlBDX1NMSUNFX1NUQVJUX1BUUihpbnRlcm5lZDEpICE9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKHNyYzEpKTsKKyAgR1BSX0FTU0VSVChHUlBDX1NMSUNFX1NUQVJUX1BUUihpbnRlcm5lZDIpICE9IEdSUENfU0xJQ0VfU1RBUlRfUFRSKHNyYzIpKTsKKyAgZ3JwY19zbGljZV91bnJlZihzcmMxKTsKKyAgZ3JwY19zbGljZV91bnJlZihzcmMyKTsKKyAgZ3JwY19zbGljZV91bnJlZihpbnRlcm5lZDEpOworICBncnBjX3NsaWNlX3VucmVmKGludGVybmVkMik7CisgIGdycGNfc2h1dGRvd24oKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zdGF0aWNfc2xpY2VfaW50ZXJuaW5nKHZvaWQpIHsKKyAgTE9HX1RFU1RfTkFNRSgidGVzdF9zdGF0aWNfc2xpY2VfaW50ZXJuaW5nIik7CisKKyAgLy8gZ3JwY19pbml0L2dycGNfc2h1dGRvd24gZGVsaWJlcmF0ZWx5IG9taXR0ZWQ6IHRoZXkgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkKKyAgLy8gdG8gaW50ZXJuIGEgc3RhdGljIHNsaWNlCisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVDsgaSsrKSB7CisgICAgR1BSX0FTU0VSVChncnBjX3NsaWNlX2lzX2VxdWl2YWxlbnQoCisgICAgICAgIGdycGNfc3RhdGljX3NsaWNlX3RhYmxlW2ldLAorICAgICAgICBncnBjX3NsaWNlX2ludGVybihncnBjX3N0YXRpY19zbGljZV90YWJsZVtpXSkpKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0X3N0YXRpY19zbGljZV9jb3B5X2ludGVybmluZyh2b2lkKSB7CisgIExPR19URVNUX05BTUUoInRlc3Rfc3RhdGljX3NsaWNlX2NvcHlfaW50ZXJuaW5nIik7CisKKyAgZ3JwY19pbml0KCk7CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVDsgaSsrKSB7CisgICAgZ3JwY19zbGljZSBjb3B5ID0gZ3JwY19zbGljZV9kdXAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbaV0pOworICAgIEdQUl9BU1NFUlQoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbaV0ucmVmY291bnQgIT0gY29weS5yZWZjb3VudCk7CisgICAgR1BSX0FTU0VSVChncnBjX3N0YXRpY19zbGljZV90YWJsZVtpXS5yZWZjb3VudCA9PQorICAgICAgICAgICAgICAgZ3JwY19zbGljZV9pbnRlcm4oY29weSkucmVmY291bnQpOworICAgIGdycGNfc2xpY2VfdW5yZWYoY29weSk7CisgIH0KKworICBncnBjX3NodXRkb3duKCk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewogICB1bnNpZ25lZCBsZW5ndGg7CiAgIGdycGNfdGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwpAQCAtMjYyLDUgKzMxNyw4IEBACiAgICAgdGVzdF9zbGljZV9zcGxpdF90YWlsX3dvcmtzKGxlbmd0aCk7CiAgIH0KICAgdGVzdF9zbGljZV9mcm9tX2NvcGllZF9zdHJpbmdfd29ya3MoKTsKKyAgdGVzdF9zbGljZV9pbnRlcm5pbmcoKTsKKyAgdGVzdF9zdGF0aWNfc2xpY2VfaW50ZXJuaW5nKCk7CisgIHRlc3Rfc3RhdGljX3NsaWNlX2NvcHlfaW50ZXJuaW5nKCk7CiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3N1cmZhY2UvbGFtZV9jbGllbnRfdGVzdC5jIGIvdGVzdC9jb3JlL3N1cmZhY2UvbGFtZV9jbGllbnRfdGVzdC5jCmluZGV4IGI2ZGI2YTYuLmI1YjQyYzEgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS9zdXJmYWNlL2xhbWVfY2xpZW50X3Rlc3QuYworKysgYi90ZXN0L2NvcmUvc3VyZmFjZS9sYW1lX2NsaWVudF90ZXN0LmMKQEAgLTkwLDggKzkwLDcgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheSB0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGNoYXIgKnBlZXI7CiAKICAgZ3JwY190ZXN0X2luaXQoYXJnYywgYXJndik7CkBAIC0xMTEsOCArMTEwLDkgQEAKIAogICBjcSA9IGdycGNfY29tcGxldGlvbl9xdWV1ZV9jcmVhdGUoTlVMTCk7CiAKKyAgZ3JwY19zbGljZSBob3N0ID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImFueXdoZXJlIik7CiAgIGNhbGwgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoY2hhbiwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsIGNxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvRm9vIiwgImFueXdoZXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiL0ZvbyIpLCAmaG9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1RJTUVPVVRfU0VDT05EU19UT19ERUFETElORSgxMDApLCBOVUxMKTsKICAgR1BSX0FTU0VSVChjYWxsKTsKICAgY3F2ID0gY3FfdmVyaWZpZXJfY3JlYXRlKGNxKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwogICBvcC0+b3AgPSBHUlBDX09QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQTsKLSAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhID0gJmluaXRpYWxfbWV0YWRhdGFfcmVjdjsKKyAgb3AtPmRhdGEucmVjdl9pbml0aWFsX21ldGFkYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNDIsNyArMTQyLDYgQEAKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnRyYWlsaW5nX21ldGFkYXRhID0gJnRyYWlsaW5nX21ldGFkYXRhX3JlY3Y7CiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXMgPSAmc3RhdHVzOwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzX2RldGFpbHMgPSAmZGV0YWlsczsKLSAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzX2NhcGFjaXR5ID0gJmRldGFpbHNfY2FwYWNpdHk7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0xNjQsNyArMTYzLDcgQEAKIAogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7Ci0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogCiAgIGdycGNfc2h1dGRvd24oKTsKIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvYmluX2RlY29kZXJfdGVzdC5jIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvYmluX2RlY29kZXJfdGVzdC5jCmluZGV4IDIyMTExMmEuLmE4YjBhNzUgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2Jpbl9kZWNvZGVyX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9iaW5fZGVjb2Rlcl90ZXN0LmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogc3RhdGljIHZvaWQgZXhwZWN0X3NsaWNlX2VxKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCBncnBjX3NsaWNlIGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2Ugc2xpY2UsIGNoYXIgKmRlYnVnLCBpbnQgbGluZSkgewotICBpZiAoMCAhPSBncnBjX3NsaWNlX2NtcChzbGljZSwgZXhwZWN0ZWQpKSB7CisgIGlmICghZ3JwY19zbGljZV9lcShzbGljZSwgZXhwZWN0ZWQpKSB7CiAgICAgY2hhciAqaHMgPSBncnBjX2R1bXBfc2xpY2Uoc2xpY2UsIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKICAgICBjaGFyICpoZSA9IGdycGNfZHVtcF9zbGljZShleHBlY3RlZCwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpOwogICAgIGdwcl9sb2coR1BSX0VSUk9SLCAiRkFJTEVEOiVkOiAlc1xuZ290OiAgJXNcbndhbnQ6ICVzIiwgbGluZSwgZGVidWcsIGhzLApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvYmluX2VuY29kZXJfdGVzdC5jIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvYmluX2VuY29kZXJfdGVzdC5jCmluZGV4IDUzYjU1YTMuLmJkMTBhMWUgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2Jpbl9lbmNvZGVyX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9iaW5fZW5jb2Rlcl90ZXN0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogc3RhdGljIHZvaWQgZXhwZWN0X3NsaWNlX2VxKGdycGNfc2xpY2UgZXhwZWN0ZWQsIGdycGNfc2xpY2Ugc2xpY2UsIGNoYXIgKmRlYnVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lKSB7Ci0gIGlmICgwICE9IGdycGNfc2xpY2VfY21wKHNsaWNlLCBleHBlY3RlZCkpIHsKKyAgaWYgKCFncnBjX3NsaWNlX2VxKHNsaWNlLCBleHBlY3RlZCkpIHsKICAgICBjaGFyICpocyA9IGdycGNfZHVtcF9zbGljZShzbGljZSwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpOwogICAgIGNoYXIgKmhlID0gZ3JwY19kdW1wX3NsaWNlKGV4cGVjdGVkLCBHUFJfRFVNUF9IRVggfCBHUFJfRFVNUF9BU0NJSSk7CiAgICAgZ3ByX2xvZyhHUFJfRVJST1IsICJGQUlMRUQ6JWQ6ICVzXG5nb3Q6ICAlc1xud2FudDogJXMiLCBsaW5lLCBkZWJ1ZywgaHMsCkBAIC04NCw4ICs4NCw4IEBACiAgIGdycGNfc2xpY2UgaW5wdXQgPSBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcihzLCBsZW4pOwogICBncnBjX3NsaWNlIGJhc2U2NCA9IGdycGNfY2h0dHAyX2Jhc2U2NF9lbmNvZGUoaW5wdXQpOwogICBncnBjX3NsaWNlIGV4cGVjdCA9IGdycGNfY2h0dHAyX2h1ZmZtYW5fY29tcHJlc3MoYmFzZTY0KTsKLSAgZ3JwY19zbGljZSBnb3QgPSBncnBjX2NodHRwMl9iYXNlNjRfZW5jb2RlX2FuZF9odWZmbWFuX2NvbXByZXNzX2ltcGwoaW5wdXQpOwotICBpZiAoMCAhPSBncnBjX3NsaWNlX2NtcChleHBlY3QsIGdvdCkpIHsKKyAgZ3JwY19zbGljZSBnb3QgPSBncnBjX2NodHRwMl9iYXNlNjRfZW5jb2RlX2FuZF9odWZmbWFuX2NvbXByZXNzKGlucHV0KTsKKyAgaWYgKCFncnBjX3NsaWNlX2VxKGV4cGVjdCwgZ290KSkgewogICAgIGNoYXIgKnQgPSBncnBjX2R1bXBfc2xpY2UoaW5wdXQsIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKICAgICBjaGFyICplID0gZ3JwY19kdW1wX3NsaWNlKGV4cGVjdCwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpOwogICAgIGNoYXIgKmcgPSBncnBjX2R1bXBfc2xpY2UoZ290LCBHUFJfRFVNUF9IRVggfCBHUFJfRFVNUF9BU0NJSSk7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgZXhwZWN0X2NvbWJpbmVkX2VxdWl2KHgsIHNpemVvZih4KSAtIDEsIF9fTElORV9fKQogCiBzdGF0aWMgdm9pZCBleHBlY3RfYmluYXJ5X2hlYWRlcihjb25zdCBjaGFyICpoZHIsIGludCBiaW5hcnkpIHsKLSAgaWYgKGdycGNfaXNfYmluYXJ5X2hlYWRlcihoZHIsIHN0cmxlbihoZHIpKSAhPSBiaW5hcnkpIHsKKyAgaWYgKGdycGNfaXNfYmluYXJ5X2hlYWRlcihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhoZHIpKSAhPSBiaW5hcnkpIHsKICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIkZBSUxFRDogZXhwZWN0ZWQgaGVhZGVyICclcycgdG8gYmUgJXMiLCBoZHIsCiAgICAgICAgICAgICBiaW5hcnkgPyAiYmluYXJ5IiA6ICJub3QgYmluYXJ5Iik7CiAgICAgYWxsX29rID0gMDsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX2VuY29kZXJfdGVzdC5jIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfZW5jb2Rlcl90ZXN0LmMKaW5kZXggMWZkMjU0MC4uZDU3MmQ3OSAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfZW5jb2Rlcl90ZXN0LmMKKysrIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfZW5jb2Rlcl90ZXN0LmMKQEAgLTgxLDcgKzgxLDkgQEAKICAgICAgIGVbaSAtIDFdLm5leHQgPSAmZVtpXTsKICAgICAgIGVbaV0ucHJldiA9ICZlW2kgLSAxXTsKICAgICB9Ci0gICAgZVtpXS5tZCA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncyhleGVjX2N0eCwga2V5LCB2YWx1ZSk7CisgICAgZVtpXS5tZCA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgICBleGVjX2N0eCwgZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoa2V5KSksCisgICAgICAgIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKHZhbHVlKSkpOwogICB9CiAgIGVbMF0ucHJldiA9IE5VTEw7CiAgIGVbbmhlYWRlcnMgLSAxXS5uZXh0ID0gTlVMTDsKQEAgLTg5LDYgKzkxLDcgQEAKIAogICBiLmxpc3QuaGVhZCA9ICZlWzBdOwogICBiLmxpc3QudGFpbCA9ICZlW25oZWFkZXJzIC0gMV07CisgIGIubGlzdC5jb3VudCA9IG5oZWFkZXJzOwogCiAgIGlmIChjYXBfdG9fZGVsZXRlID09IG51bV90b19kZWxldGUpIHsKICAgICBjYXBfdG9fZGVsZXRlID0gR1BSX01BWCgyICogY2FwX3RvX2RlbGV0ZSwgMTAwMCk7CkBAIC0xMDYsNyArMTA5LDcgQEAKICAgZ3JwY19zbGljZV9idWZmZXJfZGVzdHJveV9pbnRlcm5hbChleGVjX2N0eCwgJm91dHB1dCk7CiAgIGdycGNfbWV0YWRhdGFfYmF0Y2hfZGVzdHJveShleGVjX2N0eCwgJmIpOwogCi0gIGlmICgwICE9IGdycGNfc2xpY2VfY21wKG1lcmdlZCwgZXhwZWN0KSkgeworICBpZiAoIWdycGNfc2xpY2VfZXEobWVyZ2VkLCBleHBlY3QpKSB7CiAgICAgY2hhciAqZXhwZWN0X3N0ciA9IGdycGNfZHVtcF9zbGljZShleHBlY3QsIEdQUl9EVU1QX0hFWCB8IEdQUl9EVU1QX0FTQ0lJKTsKICAgICBjaGFyICpnb3Rfc3RyID0gZ3JwY19kdW1wX3NsaWNlKG1lcmdlZCwgR1BSX0RVTVBfSEVYIHwgR1BSX0RVTVBfQVNDSUkpOwogICAgIGdwcl9sb2coR1BSX0VSUk9SLCAibWlzbWF0Y2hlZCBvdXRwdXQgZm9yICVzIiwgZXhwZWN0ZWQpOwpAQCAtMTkzLDcgKzE5Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpIHsKICAgZ3JwY19zbGljZV9idWZmZXIgb3V0cHV0OwotICBncnBjX21kZWxlbSAqZWxlbSA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncyhleGVjX2N0eCwga2V5LCB2YWx1ZSk7CisgIGdycGNfbWRlbGVtIGVsZW0gPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgIGV4ZWNfY3R4LCBncnBjX3NsaWNlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhrZXkpKSwKKyAgICAgIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKHZhbHVlKSkpOwogICBzaXplX3QgZWxlbV9zaXplID0gZ3JwY19tZGVsZW1fZ2V0X3NpemVfaW5faHBhY2tfdGFibGUoZWxlbSk7CiAgIHNpemVfdCBpbml0aWFsX3RhYmxlX3NpemUgPSBnX2NvbXByZXNzb3IudGFibGVfc2l6ZTsKICAgZ3JwY19saW5rZWRfbWRlbGVtICplID0gZ3ByX21hbGxvYyhzaXplb2YoKmUpKTsKQEAgLTIwNCw2ICsyMDksNyBAQAogICBlWzBdLm5leHQgPSBOVUxMOwogICBiLmxpc3QuaGVhZCA9ICZlWzBdOwogICBiLmxpc3QudGFpbCA9ICZlWzBdOworICBiLmxpc3QuY291bnQgPSAxOwogICBncnBjX3NsaWNlX2J1ZmZlcl9pbml0KCZvdXRwdXQpOwogCiAgIGdycGNfdHJhbnNwb3J0X29uZV93YXlfc3RhdHMgc3RhdHM7CkBAIC0yMzMsNyArMjM5LDcgQEAKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgIHNpemVfdCBpOwotICBncnBjX3Rlc3Rfb25seV9zZXRfbWV0YWRhdGFfaGFzaF9zZWVkKDApOworICBncnBjX3Rlc3Rfb25seV9zZXRfc2xpY2VfaGFzaF9zZWVkKDApOwogICBncnBjX3Rlc3RfaW5pdChhcmdjLCBhcmd2KTsKICAgZ3JwY19pbml0KCk7CiAgIFRFU1QodGVzdF9iYXNpY19oZWFkZXJzKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvMDUxMjY4YWRlNDVkYmVkMGFhYjg5NmQ3ZDlmNGQxMGJhODlkM2IwOSBiL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvMDUxMjY4YWRlNDVkYmVkMGFhYjg5NmQ3ZDlmNGQxMGJhODlkM2IwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2N2ZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy8wNTEyNjhhZGU0NWRiZWQwYWFiODk2ZDdkOWY0ZDEwYmE4OWQzYjA5CkBAIC0wLDAgKzEgQEAKKyqkEKSkEAfwpA8tYmlui2NbKSgH8KQPLWJpbi0nYmluCSEhP6Qf2/AhEAfweygtYmlu8AkhXAkh5TfpGzs/R+0oWyghIVzwKqQPpNvwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy81Mjc4ZTM1ODFjMDY5NjI0MTU3ZmQ5MTc2ZWRkZjUyYzBlNThkZjY3IGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy81Mjc4ZTM1ODFjMDY5NjI0MTU3ZmQ5MTc2ZWRkZjUyYzBlNThkZjY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmM2Q0YTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzLzUyNzhlMzU4MWMwNjk2MjQxNTdmZDkxNzZlZGRmNTJjMGU1OGRmNjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9iYzQyNjNhOTI5NTJkNTYxNjhiMzU0ZjcyM2VhYTQzYTMzY2QwYjM1IGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9iYzQyNjNhOTI5NTJkNTYxNjhiMzU0ZjcyM2VhYTQzYTMzY2QwYjM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MmU3NjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2JjNDI2M2E5Mjk1MmQ1NjE2OGIzNTRmNzIzZWFhNDNhMzNjZDBiMzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9jcmFzaC01YWMzZTFlYTc3NjRjZmI2MzgzNjI5NTc0MjYyZjgyZGM3YjNjYWRhIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9jcmFzaC01YWMzZTFlYTc3NjRjZmI2MzgzNjI5NTc0MjYyZjgyZGM3YjNjYWRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTg0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2NyYXNoLTVhYzNlMWVhNzc2NGNmYjYzODM2Mjk1NzQyNjJmODJkYzdiM2NhZGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9kNmQ4YjQ3OGU2ZDEzOTQ1ZjdhNmY3ZDI3ZjQyNGZmNTdjYTEyZjdmIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9kNmQ4YjQ3OGU2ZDEzOTQ1ZjdhNmY3ZDI3ZjQyNGZmNTdjYTEyZjdmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTg0YWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2Q2ZDhiNDc4ZTZkMTM5NDVmN2E2ZjdkMjdmNDI0ZmY1N2NhMTJmN2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9lNjdjNzlkMGVkODlhYjJkNWU4ZDgxMTI3ZGYyMjg3NmU2MzZhYzQ0IGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9lNjdjNzlkMGVkODlhYjJkNWU4ZDgxMTI3ZGYyMjg3NmU2MzZhYzQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGI2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2U2N2M3OWQwZWQ4OWFiMmQ1ZThkODExMjdkZjIyODc2ZTYzNmFjNDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9mNGI0OGM0ZjNmMzEwZWQ3Njc3NTUyNjcyMTBmMjEyZGQ2MmJkNzE1IGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9mNGI0OGM0ZjNmMzEwZWQ3Njc3NTUyNjcyMTBmMjEyZGQ2MmJkNzE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWE5MDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2Y0YjQ4YzRmM2YzMTBlZDc2Nzc1NTI2NzIxMGYyMTJkZDYyYmQ3MTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9mY2MwNjY5NmU2NDFhNzc0M2JmZDJmM2I3ZWNkODhlN2I3MjdlMDBhIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9mY2MwNjY5NmU2NDFhNzc0M2JmZDJmM2I3ZWNkODhlN2I3MjdlMDBhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWM4MjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2ZjYzA2Njk2ZTY0MWE3NzQzYmZkMmYzYjdlY2Q4OGU3YjcyN2UwMGEKQEAgLTAsMCArMSBAQAorOz8nYwfwWyghCfBbTiFcCSHlR/0hBmFjY2VwdP0uOqRjQSkoISntIbyqKeVn3UkpKNk7KYoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfZnV6emVyX3Rlc3QuYyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9mdXp6ZXJfdGVzdC5jCmluZGV4IDRlMDBmNDkuLmU5YWMxNmQgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9mdXp6ZXJfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9mdXp6ZXJfdGVzdC5jCkBAIC0zOSwyNSArMzksMjYgQEAKICNpbmNsdWRlIDxncnBjL3N1cHBvcnQvbG9nLmg+CiAKICNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmgiCisjaW5jbHVkZSAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmgiCiAKIGJvb2wgc3F1ZWxjaCA9IHRydWU7CiBib29sIGxlYWtfY2hlY2sgPSB0cnVlOwogCi1zdGF0aWMgdm9pZCBvbmhkcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdWQsIGdycGNfbWRlbGVtICptZCkgeworc3RhdGljIHZvaWQgb25oZHIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVkLCBncnBjX21kZWxlbSBtZCkgewogICBHUlBDX01ERUxFTV9VTlJFRihleGVjX2N0eCwgbWQpOwogfQogc3RhdGljIHZvaWQgZG9udF9sb2coZ3ByX2xvZ19mdW5jX2FyZ3MgKmFyZ3MpIHt9CiAKIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKSB7Ci0gIGdycGNfdGVzdF9vbmx5X3NldF9tZXRhZGF0YV9oYXNoX3NlZWQoMCk7CisgIGdycGNfdGVzdF9vbmx5X3NldF9zbGljZV9oYXNoX3NlZWQoMCk7CiAgIGlmIChzcXVlbGNoKSBncHJfc2V0X2xvZ19mdW5jdGlvbihkb250X2xvZyk7CiAgIGdycGNfaW5pdCgpOwogICBncnBjX2NodHRwMl9ocGFja19wYXJzZXIgcGFyc2VyOwogICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwogICBncnBjX2NodHRwMl9ocGFja19wYXJzZXJfaW5pdCgmZXhlY19jdHgsICZwYXJzZXIpOwogICBwYXJzZXIub25faGVhZGVyID0gb25oZHI7Ci0gIEdSUENfRVJST1JfVU5SRUYoCi0gICAgICBncnBjX2NodHRwMl9ocGFja19wYXJzZXJfcGFyc2UoJmV4ZWNfY3R4LCAmcGFyc2VyLCBkYXRhLCBkYXRhICsgc2l6ZSkpOworICBHUlBDX0VSUk9SX1VOUkVGKGdycGNfY2h0dHAyX2hwYWNrX3BhcnNlcl9wYXJzZSgKKyAgICAgICZleGVjX2N0eCwgJnBhcnNlciwgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19idWZmZXIoZGF0YSwgc2l6ZSkpKTsKICAgZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyX2Rlc3Ryb3koJmV4ZWNfY3R4LCAmcGFyc2VyKTsKICAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKICAgZ3JwY19zaHV0ZG93bigpOwpkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX3Rlc3QuYyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl90ZXN0LmMKaW5kZXggOGY0ODg0OS4uMDE3ODljNCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfdGVzdC5jCkBAIC00NSwxNSArNDUsMTUgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgeyB2YV9saXN0IGFyZ3M7IH0gdGVzdF9jaGVja2VyOwogCi1zdGF0aWMgdm9pZCBvbmhkcihncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgdm9pZCAqdWQsIGdycGNfbWRlbGVtICptZCkgeworc3RhdGljIHZvaWQgb25oZHIoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIHZvaWQgKnVkLCBncnBjX21kZWxlbSBtZCkgewogICBjb25zdCBjaGFyICpla2V5LCAqZXZhbHVlOwogICB0ZXN0X2NoZWNrZXIgKmNoayA9IHVkOwogICBla2V5ID0gdmFfYXJnKGNoay0+YXJncywgY2hhciAqKTsKICAgR1BSX0FTU0VSVChla2V5KTsKICAgZXZhbHVlID0gdmFfYXJnKGNoay0+YXJncywgY2hhciAqKTsKICAgR1BSX0FTU0VSVChldmFsdWUpOwotICBHUFJfQVNTRVJUKGdycGNfc2xpY2Vfc3RyX2NtcChtZC0+a2V5LT5zbGljZSwgZWtleSkgPT0gMCk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKG1kLT52YWx1ZS0+c2xpY2UsIGV2YWx1ZSkgPT0gMCk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKEdSUENfTURLRVkobWQpLCBla2V5KSA9PSAwKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX3N0cl9jbXAoR1JQQ19NRFZBTFVFKG1kKSwgZXZhbHVlKSA9PSAwKTsKICAgR1JQQ19NREVMRU1fVU5SRUYoZXhlY19jdHgsIG1kKTsKIH0KIApAQCAtNzYsOSArNzYsOCBAQAogCiAgIGZvciAoaSA9IDA7IGkgPCBuc2xpY2VzOyBpKyspIHsKICAgICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwotICAgIEdQUl9BU1NFUlQoZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyX3BhcnNlKAotICAgICAgICAgICAgICAgICAgICZleGVjX2N0eCwgcGFyc2VyLCBHUlBDX1NMSUNFX1NUQVJUX1BUUihzbGljZXNbaV0pLAotICAgICAgICAgICAgICAgICAgIEdSUENfU0xJQ0VfRU5EX1BUUihzbGljZXNbaV0pKSA9PSBHUlBDX0VSUk9SX05PTkUpOworICAgIEdQUl9BU1NFUlQoZ3JwY19jaHR0cDJfaHBhY2tfcGFyc2VyX3BhcnNlKCZleGVjX2N0eCwgcGFyc2VyLCBzbGljZXNbaV0pID09CisgICAgICAgICAgICAgICBHUlBDX0VSUk9SX05PTkUpOwogICAgIGdycGNfZXhlY19jdHhfZmluaXNoKCZleGVjX2N0eCk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfdGFibGVfdGVzdC5jIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfdGFibGVfdGVzdC5jCmluZGV4IGVmMmFkNjYuLmQyZjZkNWQgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3RhYmxlX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja190YWJsZV90ZXN0LmMKQEAgLTQ2LDE2ICs0NiwxNiBAQAogCiAjZGVmaW5lIExPR19URVNUKHgpIGdwcl9sb2coR1BSX0lORk8sICIlcyIsIHgpCiAKLXN0YXRpYyB2b2lkIGFzc2VydF9zdHIoY29uc3QgZ3JwY19jaHR0cDJfaHB0YmwgKnRibCwgZ3JwY19tZHN0ciAqbWRzdHIsCitzdGF0aWMgdm9pZCBhc3NlcnRfc3RyKGNvbnN0IGdycGNfY2h0dHAyX2hwdGJsICp0YmwsIGdycGNfc2xpY2UgbWRzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cikgewotICBHUFJfQVNTRVJUKGdycGNfc2xpY2Vfc3RyX2NtcChtZHN0ci0+c2xpY2UsIHN0cikgPT0gMCk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKG1kc3RyLCBzdHIpID09IDApOwogfQogCiBzdGF0aWMgdm9pZCBhc3NlcnRfaW5kZXgoY29uc3QgZ3JwY19jaHR0cDJfaHB0YmwgKnRibCwgdWludDMyX3QgaWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpIHsKLSAgZ3JwY19tZGVsZW0gKm1kID0gZ3JwY19jaHR0cDJfaHB0YmxfbG9va3VwKHRibCwgaWR4KTsKLSAgYXNzZXJ0X3N0cih0YmwsIG1kLT5rZXksIGtleSk7Ci0gIGFzc2VydF9zdHIodGJsLCBtZC0+dmFsdWUsIHZhbHVlKTsKKyAgZ3JwY19tZGVsZW0gbWQgPSBncnBjX2NodHRwMl9ocHRibF9sb29rdXAodGJsLCBpZHgpOworICBhc3NlcnRfc3RyKHRibCwgR1JQQ19NREtFWShtZCksIGtleSk7CisgIGFzc2VydF9zdHIodGJsLCBHUlBDX01EVkFMVUUobWQpLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3Rfc3RhdGljX2xvb2t1cCh2b2lkKSB7CkBAIC0xNDMsMTAgKzE0MywxMiBAQAogICBncnBjX2NodHRwMl9ocHRibF9pbml0KCZleGVjX2N0eCwgJnRibCk7CiAKICAgZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Ci0gICAgZ3JwY19tZGVsZW0gKmVsZW07CisgICAgZ3JwY19tZGVsZW0gZWxlbTsKICAgICBncHJfYXNwcmludGYoJmtleSwgIks6JWQiLCBpKTsKICAgICBncHJfYXNwcmludGYoJnZhbHVlLCAiVkFMVUU6JWQiLCBpKTsKLSAgICBlbGVtID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwga2V5LCB2YWx1ZSk7CisgICAgZWxlbSA9CisgICAgICAgIGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKCZleGVjX2N0eCwgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcodmFsdWUpKTsKICAgICBHUFJfQVNTRVJUKGdycGNfY2h0dHAyX2hwdGJsX2FkZCgmZXhlY19jdHgsICZ0YmwsIGVsZW0pID09IEdSUENfRVJST1JfTk9ORSk7CiAgICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBlbGVtKTsKICAgICBhc3NlcnRfaW5kZXgoJnRibCwgMSArIEdSUENfQ0hUVFAyX0xBU1RfU1RBVElDX0VOVFJZLCBrZXksIHZhbHVlKTsKQEAgLTE2OSw3ICsxNzEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkgewogICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwotICBncnBjX21kZWxlbSAqbWQgPSBncnBjX21kZWxlbV9mcm9tX3N0cmluZ3MoJmV4ZWNfY3R4LCBrZXksIHZhbHVlKTsKKyAgZ3JwY19tZGVsZW0gbWQgPQorICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoJmV4ZWNfY3R4LCBncnBjX3NsaWNlX2Zyb21fY29waWVkX3N0cmluZyhrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcodmFsdWUpKTsKICAgZ3JwY19jaHR0cDJfaHB0YmxfZmluZF9yZXN1bHQgciA9IGdycGNfY2h0dHAyX2hwdGJsX2ZpbmQodGJsLCBtZCk7CiAgIEdSUENfTURFTEVNX1VOUkVGKCZleGVjX2N0eCwgbWQpOwogICBncnBjX2V4ZWNfY3R4X2ZpbmlzaCgmZXhlY19jdHgpOwpAQCAtMTgxLDE5ICsxODUsMjQgQEAKICAgZ3JwY19jaHR0cDJfaHB0YmwgdGJsOwogICB1aW50MzJfdCBpOwogICBjaGFyIGJ1ZmZlclszMl07Ci0gIGdycGNfbWRlbGVtICplbGVtOworICBncnBjX21kZWxlbSBlbGVtOwogICBncnBjX2NodHRwMl9ocHRibF9maW5kX3Jlc3VsdCByOwogCiAgIExPR19URVNUKCJ0ZXN0X2ZpbmQiKTsKIAogICBncnBjX2NodHRwMl9ocHRibF9pbml0KCZleGVjX2N0eCwgJnRibCk7Ci0gIGVsZW0gPSBncnBjX21kZWxlbV9mcm9tX3N0cmluZ3MoJmV4ZWNfY3R4LCAiYWJjIiwgInh5eiIpOworICBlbGVtID0KKyAgICAgIGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKCZleGVjX2N0eCwgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImFiYyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoInh5eiIpKTsKICAgR1BSX0FTU0VSVChncnBjX2NodHRwMl9ocHRibF9hZGQoJmV4ZWNfY3R4LCAmdGJsLCBlbGVtKSA9PSBHUlBDX0VSUk9SX05PTkUpOwogICBHUlBDX01ERUxFTV9VTlJFRigmZXhlY19jdHgsIGVsZW0pOwotICBlbGVtID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwgImFiYyIsICIxMjMiKTsKKyAgZWxlbSA9CisgICAgICBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygmZXhlY19jdHgsIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJhYmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIxMjMiKSk7CiAgIEdQUl9BU1NFUlQoZ3JwY19jaHR0cDJfaHB0YmxfYWRkKCZleGVjX2N0eCwgJnRibCwgZWxlbSkgPT0gR1JQQ19FUlJPUl9OT05FKTsKICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBlbGVtKTsKLSAgZWxlbSA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygmZXhlY19jdHgsICJ4IiwgIjEiKTsKKyAgZWxlbSA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKCZleGVjX2N0eCwgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIngiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIxIikpOwogICBHUFJfQVNTRVJUKGdycGNfY2h0dHAyX2hwdGJsX2FkZCgmZXhlY19jdHgsICZ0YmwsIGVsZW0pID09IEdSUENfRVJST1JfTk9ORSk7CiAgIEdSUENfTURFTEVNX1VOUkVGKCZleGVjX2N0eCwgZWxlbSk7CiAKQEAgLTI0NCw3ICsyNTMsOSBAQAogICAvKiBvdmVyZmxvdyB0aGUgc3RyaW5nIGJ1ZmZlciwgY2hlY2sgZmluZCBzdGlsbCB3b3JrcyAqLwogICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewogICAgIGludDY0X3R0b2EoaSwgYnVmZmVyKTsKLSAgICBlbGVtID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwgInRlc3QiLCBidWZmZXIpOworICAgIGVsZW0gPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygmZXhlY19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJ0ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKGJ1ZmZlcikpOwogICAgIEdQUl9BU1NFUlQoZ3JwY19jaHR0cDJfaHB0YmxfYWRkKCZleGVjX2N0eCwgJnRibCwgZWxlbSkgPT0gR1JQQ19FUlJPUl9OT05FKTsKICAgICBHUlBDX01ERUxFTV9VTlJFRigmZXhlY19jdHgsIGVsZW0pOwogICB9CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi92YXJpbnRfdGVzdC5jIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvdmFyaW50X3Rlc3QuYwppbmRleCBlMjliZTRiLi5mMTJjMzQwIDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi92YXJpbnRfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL3ZhcmludF90ZXN0LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgc2xpY2UgPSBncnBjX3NsaWNlX21hbGxvYyhuYnl0ZXMpOwogICBHUlBDX0NIVFRQMl9XUklURV9WQVJJTlQodmFsdWUsIHByZWZpeF9iaXRzLCBwcmVmaXhfb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NMSUNFX1NUQVJUX1BUUihzbGljZSksIG5ieXRlcyk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9jbXAoZXhwZWN0LCBzbGljZSkgPT0gMCk7CisgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9lcShleHBlY3QsIHNsaWNlKSk7CiAgIGdycGNfc2xpY2VfdW5yZWYoZXhwZWN0KTsKICAgZ3JwY19zbGljZV91bnJlZihzbGljZSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvdHJhbnNwb3J0L21ldGFkYXRhX3Rlc3QuYyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvbWV0YWRhdGFfdGVzdC5jCmluZGV4IDM2MjUwNDMuLjkyZTU4ZjIgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS90cmFuc3BvcnQvbWV0YWRhdGFfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvbWV0YWRhdGFfdGVzdC5jCkBAIC00Nyw1NSArNDcsNTEgQEAKICNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oIgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL3Rlc3RfY29uZmlnLmgiCiAKLSNkZWZpbmUgTE9HX1RFU1QoeCkgZ3ByX2xvZyhHUFJfSU5GTywgIiVzIiwgeCkKLQogLyogYSBsYXJnZSBudW1iZXIgKi8KICNkZWZpbmUgTUFOWSAxMDAwMAogCiBzdGF0aWMgdm9pZCB0ZXN0X25vX29wKHZvaWQpIHsKLSAgTE9HX1RFU1QoInRlc3Rfbm9fb3AiKTsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgInRlc3Rfbm9fb3AiKTsKICAgZ3JwY19pbml0KCk7CiAgIGdycGNfc2h1dGRvd24oKTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfc3RyaW5nKHZvaWQpIHsKLSAgZ3JwY19tZHN0ciAqczEsICpzMiwgKnMzOwotCi0gIExPR19URVNUKCJ0ZXN0X2NyZWF0ZV9zdHJpbmciKTsKLQotICBncnBjX2luaXQoKTsKLSAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKLSAgczEgPSBncnBjX21kc3RyX2Zyb21fc3RyaW5nKCJoZWxsbyIpOwotICBzMiA9IGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoImhlbGxvIik7Ci0gIHMzID0gZ3JwY19tZHN0cl9mcm9tX3N0cmluZygidmVyeSBtdWNoIG5vdCBoZWxsbyIpOwotICBHUFJfQVNTRVJUKHMxID09IHMyKTsKLSAgR1BSX0FTU0VSVChzMyAhPSBzMSk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKHMxLT5zbGljZSwgImhlbGxvIikgPT0gMCk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKHMzLT5zbGljZSwgInZlcnkgbXVjaCBub3QgaGVsbG8iKSA9PSAwKTsKLSAgR1JQQ19NRFNUUl9VTlJFRigmZXhlY19jdHgsIHMxKTsKLSAgR1JQQ19NRFNUUl9VTlJFRigmZXhlY19jdHgsIHMyKTsKLSAgR1JQQ19NRFNUUl9VTlJFRigmZXhlY19jdHgsIHMzKTsKLSAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKLSAgZ3JwY19zaHV0ZG93bigpOworc3RhdGljIGdycGNfc2xpY2UgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2UgaW4sIGJvb2wgaW50ZXJuKSB7CisgIGdycGNfc2xpY2Ugb3V0ID0gaW50ZXJuID8gZ3JwY19zbGljZV9pbnRlcm4oaW4pIDogZ3JwY19zbGljZV9yZWYoaW4pOworICBncnBjX3NsaWNlX3VucmVmKGluKTsKKyAgcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfbWV0YWRhdGEodm9pZCkgewotICBncnBjX21kZWxlbSAqbTEsICptMiwgKm0zOworc3RhdGljIGdycGNfc2xpY2UgbWF5YmVfZHVwKGdycGNfc2xpY2UgaW4sIGJvb2wgZHVwKSB7CisgIGdycGNfc2xpY2Ugb3V0ID0gZHVwID8gZ3JwY19zbGljZV9kdXAoaW4pIDogZ3JwY19zbGljZV9yZWYoaW4pOworICBncnBjX3NsaWNlX3VucmVmKGluKTsKKyAgcmV0dXJuIG91dDsKK30KIAotICBMT0dfVEVTVCgidGVzdF9jcmVhdGVfbWV0YWRhdGEiKTsKK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX21ldGFkYXRhKGJvb2wgaW50ZXJuX2tleXMsIGJvb2wgaW50ZXJuX3ZhbHVlcykgeworICBncnBjX21kZWxlbSBtMSwgbTIsIG0zOworCisgIGdwcl9sb2coR1BSX0lORk8sICJ0ZXN0X2NyZWF0ZV9tZXRhZGF0YTogaW50ZXJuX2tleXM9JWQgaW50ZXJuX3ZhbHVlcz0lZCIsCisgICAgICAgICAgaW50ZXJuX2tleXMsIGludGVybl92YWx1ZXMpOwogCiAgIGdycGNfaW5pdCgpOwogICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwotICBtMSA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygmZXhlY19jdHgsICJhIiwgImIiKTsKLSAgbTIgPSBncnBjX21kZWxlbV9mcm9tX3N0cmluZ3MoJmV4ZWNfY3R4LCAiYSIsICJiIik7Ci0gIG0zID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwgImEiLCAiYyIpOwotICBHUFJfQVNTRVJUKG0xID09IG0yKTsKLSAgR1BSX0FTU0VSVChtMyAhPSBtMSk7Ci0gIEdQUl9BU1NFUlQobTMtPmtleSA9PSBtMS0+a2V5KTsKLSAgR1BSX0FTU0VSVChtMy0+dmFsdWUgIT0gbTEtPnZhbHVlKTsKLSAgR1BSX0FTU0VSVChncnBjX3NsaWNlX3N0cl9jbXAobTEtPmtleS0+c2xpY2UsICJhIikgPT0gMCk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKG0xLT52YWx1ZS0+c2xpY2UsICJiIikgPT0gMCk7Ci0gIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9zdHJfY21wKG0zLT52YWx1ZS0+c2xpY2UsICJjIikgPT0gMCk7CisgIG0xID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAmZXhlY19jdHgsIG1heWJlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiYSIpLCBpbnRlcm5fa2V5cyksCisgICAgICBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImIiKSwgaW50ZXJuX3ZhbHVlcykpOworICBtMiA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgJmV4ZWNfY3R4LCBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSwgaW50ZXJuX2tleXMpLAorICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJiIiksIGludGVybl92YWx1ZXMpKTsKKyAgbTMgPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgICZleGVjX2N0eCwgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJhIiksIGludGVybl9rZXlzKSwKKyAgICAgIG1heWJlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiYyIpLCBpbnRlcm5fdmFsdWVzKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19tZGVsZW1fZXEobTEsIG0yKSk7CisgIEdQUl9BU1NFUlQoIWdycGNfbWRlbGVtX2VxKG0zLCBtMSkpOworICBHUFJfQVNTRVJUKGdycGNfc2xpY2VfZXEoR1JQQ19NREtFWShtMyksIEdSUENfTURLRVkobTEpKSk7CisgIEdQUl9BU1NFUlQoIWdycGNfc2xpY2VfZXEoR1JQQ19NRFZBTFVFKG0zKSwgR1JQQ19NRFZBTFVFKG0xKSkpOworICBHUFJfQVNTRVJUKGdycGNfc2xpY2Vfc3RyX2NtcChHUlBDX01ES0VZKG0xKSwgImEiKSA9PSAwKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX3N0cl9jbXAoR1JQQ19NRFZBTFVFKG0xKSwgImIiKSA9PSAwKTsKKyAgR1BSX0FTU0VSVChncnBjX3NsaWNlX3N0cl9jbXAoR1JQQ19NRFZBTFVFKG0zKSwgImMiKSA9PSAwKTsKICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBtMSk7CiAgIEdSUENfTURFTEVNX1VOUkVGKCZleGVjX2N0eCwgbTIpOwogICBHUlBDX01ERUxFTV9VTlJFRigmZXhlY19jdHgsIG0zKTsKQEAgLTEwMywxOSArOTksMjggQEAKICAgZ3JwY19zaHV0ZG93bigpOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9tYW55X2VwaGVtZXJhbF9tZXRhZGF0YSh2b2lkKSB7CitzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV9tYW55X2VwaGVtZXJhbF9tZXRhZGF0YShib29sIGludGVybl9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbnRlcm5fdmFsdWVzKSB7CiAgIGNoYXIgYnVmZmVyW0dQUl9MVE9BX01JTl9CVUZTSVpFXTsKICAgbG9uZyBpOwogCi0gIExPR19URVNUKCJ0ZXN0X2NyZWF0ZV9tYW55X2VwaGVtZXJhbF9tZXRhZGF0YSIpOworICBncHJfbG9nKAorICAgICAgR1BSX0lORk8sCisgICAgICAidGVzdF9jcmVhdGVfbWFueV9lcGhlbWVyYWxfbWV0YWRhdGE6IGludGVybl9rZXlzPSVkIGludGVybl92YWx1ZXM9JWQiLAorICAgICAgaW50ZXJuX2tleXMsIGludGVybl92YWx1ZXMpOwogCiAgIGdycGNfaW5pdCgpOwogICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwogICAvKiBhZGQsIGFuZCBpbW1lZGlhdGVseSBkZWxldGUgYSBidW5jaCBvZiBkaWZmZXJlbnQgZWxlbWVudHMgKi8KICAgZm9yIChpID0gMDsgaSA8IE1BTlk7IGkrKykgewogICAgIGdwcl9sdG9hKGksIGJ1ZmZlcik7Ci0gICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LAotICAgICAgICAgICAgICAgICAgICAgIGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygmZXhlY19jdHgsICJhIiwgYnVmZmVyKSk7CisgICAgR1JQQ19NREVMRU1fVU5SRUYoCisgICAgICAgICZleGVjX2N0eCwKKyAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgICAmZXhlY19jdHgsCisgICAgICAgICAgICBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSwgaW50ZXJuX2tleXMpLAorICAgICAgICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9jb3BpZWRfc3RyaW5nKGJ1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuX3ZhbHVlcykpKTsKICAgfQogICBncnBjX2V4ZWNfY3R4X2ZpbmlzaCgmZXhlY19jdHgpOwogICBncnBjX3NodXRkb3duKCk7CkBAIC0xMjQsMjMgKzEyOSwyNyBAQAogc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfbWFueV9wZXJzaXN0YW50X21ldGFkYXRhKHZvaWQpIHsKICAgY2hhciBidWZmZXJbR1BSX0xUT0FfTUlOX0JVRlNJWkVdOwogICBsb25nIGk7Ci0gIGdycGNfbWRlbGVtICoqY3JlYXRlZCA9IGdwcl9tYWxsb2Moc2l6ZW9mKGdycGNfbWRlbGVtICopICogTUFOWSk7Ci0gIGdycGNfbWRlbGVtICptZDsKKyAgZ3JwY19tZGVsZW0gKmNyZWF0ZWQgPSBncHJfbWFsbG9jKHNpemVvZihncnBjX21kZWxlbSkgKiBNQU5ZKTsKKyAgZ3JwY19tZGVsZW0gbWQ7CiAKLSAgTE9HX1RFU1QoInRlc3RfY3JlYXRlX21hbnlfcGVyc2lzdGFudF9tZXRhZGF0YSIpOworICBncHJfbG9nKEdQUl9JTkZPLCAidGVzdF9jcmVhdGVfbWFueV9wZXJzaXN0YW50X21ldGFkYXRhIik7CiAKICAgZ3JwY19pbml0KCk7CiAgIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7CiAgIC8qIGFkZCBwaGFzZSAqLwogICBmb3IgKGkgPSAwOyBpIDwgTUFOWTsgaSsrKSB7CiAgICAgZ3ByX2x0b2EoaSwgYnVmZmVyKTsKLSAgICBjcmVhdGVkW2ldID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwgImEiLCBidWZmZXIpOworICAgIGNyZWF0ZWRbaV0gPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgICAgJmV4ZWNfY3R4LCBncnBjX3NsaWNlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiYSIpKSwKKyAgICAgICAgZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoYnVmZmVyKSkpOwogICB9CiAgIC8qIHZlcmlmeSBwaGFzZSAqLwogICBmb3IgKGkgPSAwOyBpIDwgTUFOWTsgaSsrKSB7CiAgICAgZ3ByX2x0b2EoaSwgYnVmZmVyKTsKLSAgICBtZCA9IGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygmZXhlY19jdHgsICJhIiwgYnVmZmVyKTsKLSAgICBHUFJfQVNTRVJUKG1kID09IGNyZWF0ZWRbaV0pOworICAgIG1kID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICZleGVjX2N0eCwgZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSksCisgICAgICAgIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGJ1ZmZlcikpKTsKKyAgICBHUFJfQVNTRVJUKGdycGNfbWRlbGVtX2VxKG1kLCBjcmVhdGVkW2ldKSk7CiAgICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBtZCk7CiAgIH0KICAgLyogY2xlYW51cCBwaGFzZSAqLwpAQCAtMTUzLDE0ICsxNjIsNzcgQEAKICAgZ3ByX2ZyZWUoY3JlYXRlZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3Rfc3Bpbl9jcmVhdGluZ190aGVfc2FtZV90aGluZyh2b2lkKSB7Ci0gIExPR19URVNUKCJ0ZXN0X3NwaW5fY3JlYXRpbmdfdGhlX3NhbWVfdGhpbmciKTsKK3N0YXRpYyB2b2lkIHRlc3Rfc3Bpbl9jcmVhdGluZ190aGVfc2FtZV90aGluZyhib29sIGludGVybl9rZXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW50ZXJuX3ZhbHVlcykgeworICBncHJfbG9nKEdQUl9JTkZPLAorICAgICAgICAgICJ0ZXN0X3NwaW5fY3JlYXRpbmdfdGhlX3NhbWVfdGhpbmc6IGludGVybl9rZXlzPSVkIGludGVybl92YWx1ZXM9JWQiLAorICAgICAgICAgIGludGVybl9rZXlzLCBpbnRlcm5fdmFsdWVzKTsKIAogICBncnBjX2luaXQoKTsKICAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKLSAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBncnBjX21kZWxlbV9mcm9tX3N0cmluZ3MoJmV4ZWNfY3R4LCAiYSIsICJiIikpOwotICBHUlBDX01ERUxFTV9VTlJFRigmZXhlY19jdHgsIGdycGNfbWRlbGVtX2Zyb21fc3RyaW5ncygmZXhlY19jdHgsICJhIiwgImIiKSk7Ci0gIEdSUENfTURFTEVNX1VOUkVGKCZleGVjX2N0eCwgZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwgImEiLCAiYiIpKTsKKyAgZ3JwY19tZGVsZW0gYSwgYiwgYzsKKyAgR1JQQ19NREVMRU1fVU5SRUYoCisgICAgICAmZXhlY19jdHgsCisgICAgICBhID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICAgICAgJmV4ZWNfY3R4LAorICAgICAgICAgIG1heWJlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiYSIpLCBpbnRlcm5fa2V5cyksCisgICAgICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJiIiksIGludGVybl92YWx1ZXMpKSk7CisgIEdSUENfTURFTEVNX1VOUkVGKAorICAgICAgJmV4ZWNfY3R4LAorICAgICAgYiA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgICAgICZleGVjX2N0eCwKKyAgICAgICAgICBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSwgaW50ZXJuX2tleXMpLAorICAgICAgICAgIG1heWJlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygiYiIpLCBpbnRlcm5fdmFsdWVzKSkpOworICBHUlBDX01ERUxFTV9VTlJFRigKKyAgICAgICZleGVjX2N0eCwKKyAgICAgIGMgPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgICAgICAmZXhlY19jdHgsCisgICAgICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJhIiksIGludGVybl9rZXlzKSwKKyAgICAgICAgICBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImIiKSwgaW50ZXJuX3ZhbHVlcykpKTsKKyAgaWYgKGludGVybl9rZXlzICYmIGludGVybl92YWx1ZXMpIHsKKyAgICBHUFJfQVNTRVJUKGEucGF5bG9hZCA9PSBiLnBheWxvYWQpOworICAgIEdQUl9BU1NFUlQoYS5wYXlsb2FkID09IGMucGF5bG9hZCk7CisgIH0KKyAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKKyAgZ3JwY19zaHV0ZG93bigpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2lkZW50aXR5X2xhd3MoYm9vbCBpbnRlcm5fa2V5cywgYm9vbCBpbnRlcm5fdmFsdWVzKSB7CisgIGdwcl9sb2coR1BSX0lORk8sICJ0ZXN0X2lkZW50aXR5X2xhd3M6IGludGVybl9rZXlzPSVkIGludGVybl92YWx1ZXM9JWQiLAorICAgICAgICAgIGludGVybl9rZXlzLCBpbnRlcm5fdmFsdWVzKTsKKworICBncnBjX2luaXQoKTsKKyAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKKyAgZ3JwY19tZGVsZW0gYSwgYiwgYzsKKyAgYSA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgJmV4ZWNfY3R4LCBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSwgaW50ZXJuX2tleXMpLAorICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJiIiksIGludGVybl92YWx1ZXMpKTsKKyAgYiA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgJmV4ZWNfY3R4LCBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSwgaW50ZXJuX2tleXMpLAorICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJiIiksIGludGVybl92YWx1ZXMpKTsKKyAgYyA9IGdycGNfbWRlbGVtX2Zyb21fc2xpY2VzKAorICAgICAgJmV4ZWNfY3R4LCBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImEiKSwgaW50ZXJuX2tleXMpLAorICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCJiIiksIGludGVybl92YWx1ZXMpKTsKKyAgR1BSX0FTU0VSVChncnBjX21kZWxlbV9lcShhLCBhKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19tZGVsZW1fZXEoYiwgYikpOworICBHUFJfQVNTRVJUKGdycGNfbWRlbGVtX2VxKGMsIGMpKTsKKyAgR1BSX0FTU0VSVChncnBjX21kZWxlbV9lcShhLCBiKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19tZGVsZW1fZXEoYiwgYykpOworICBHUFJfQVNTRVJUKGdycGNfbWRlbGVtX2VxKGEsIGMpKTsKKyAgR1BSX0FTU0VSVChncnBjX21kZWxlbV9lcShiLCBhKSk7CisgIEdQUl9BU1NFUlQoZ3JwY19tZGVsZW1fZXEoYywgYikpOworICBHUFJfQVNTRVJUKGdycGNfbWRlbGVtX2VxKGMsIGEpKTsKKyAgaWYgKGludGVybl9rZXlzICYmIGludGVybl92YWx1ZXMpIHsKKyAgICBHUFJfQVNTRVJUKGEucGF5bG9hZCA9PSBiLnBheWxvYWQpOworICAgIEdQUl9BU1NFUlQoYS5wYXlsb2FkID09IGMucGF5bG9hZCk7CisgIH0gZWxzZSB7CisgICAgR1BSX0FTU0VSVChhLnBheWxvYWQgIT0gYi5wYXlsb2FkKTsKKyAgICBHUFJfQVNTRVJUKGEucGF5bG9hZCAhPSBjLnBheWxvYWQpOworICAgIEdQUl9BU1NFUlQoYi5wYXlsb2FkICE9IGMucGF5bG9hZCk7CisgIH0KKyAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBhKTsKKyAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBiKTsKKyAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBjKTsKICAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKICAgZ3JwY19zaHV0ZG93bigpOwogfQpAQCAtMTY5LDI1ICsyNDEsMjUgQEAKICAgc2l6ZV90IGksIGo7CiAgIGNoYXIgKmJ1ZmZlcjsKICAgc2l6ZV90IG5zdHJzID0gMTAwMDsKLSAgZ3JwY19tZHN0ciAqKnN0cnMgPSBncHJfbWFsbG9jKHNpemVvZihncnBjX21kc3RyICopICogbnN0cnMpOworICBncnBjX3NsaWNlICpzdHJzID0gZ3ByX21hbGxvYyhzaXplb2YoZ3JwY19zbGljZSkgKiBuc3Rycyk7CiAgIHNpemVfdCAqc2h1ZiA9IGdwcl9tYWxsb2Moc2l6ZW9mKHNpemVfdCkgKiBuc3Rycyk7Ci0gIGdycGNfbWRzdHIgKnRlc3Q7CisgIGdycGNfc2xpY2UgdGVzdDsKIAotICBMT0dfVEVTVCgidGVzdF90aGluZ3Nfc3RpY2tfYXJvdW5kIik7CisgIGdwcl9sb2coR1BSX0lORk8sICJ0ZXN0X3RoaW5nc19zdGlja19hcm91bmQiKTsKIAogICBncnBjX2luaXQoKTsKICAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKIAogICBmb3IgKGkgPSAwOyBpIDwgbnN0cnM7IGkrKykgewogICAgIGdwcl9hc3ByaW50ZigmYnVmZmVyLCAieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHglIiBQUkl1UFRSICJ4IiwgaSk7Ci0gICAgc3Ryc1tpXSA9IGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoYnVmZmVyKTsKKyAgICBzdHJzW2ldID0gZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoYnVmZmVyKSk7CiAgICAgc2h1ZltpXSA9IGk7CiAgICAgZ3ByX2ZyZWUoYnVmZmVyKTsKICAgfQogCiAgIGZvciAoaSA9IDA7IGkgPCBuc3RyczsgaSsrKSB7Ci0gICAgR1JQQ19NRFNUUl9SRUYoc3Ryc1tpXSk7Ci0gICAgR1JQQ19NRFNUUl9VTlJFRigmZXhlY19jdHgsIHN0cnNbaV0pOworICAgIGdycGNfc2xpY2VfcmVmX2ludGVybmFsKHN0cnNbaV0pOworICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoJmV4ZWNfY3R4LCBzdHJzW2ldKTsKICAgfQogCiAgIGZvciAoaSA9IDA7IGkgPCBuc3RyczsgaSsrKSB7CkBAIC0xOTksMTMgKzI3MSwxMyBAQAogICB9CiAKICAgZm9yIChpID0gMDsgaSA8IG5zdHJzOyBpKyspIHsKLSAgICBHUlBDX01EU1RSX1VOUkVGKCZleGVjX2N0eCwgc3Ryc1tzaHVmW2ldXSk7CisgICAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbCgmZXhlY19jdHgsIHN0cnNbc2h1ZltpXV0pOwogICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbnN0cnM7IGorKykgewogICAgICAgZ3ByX2FzcHJpbnRmKCZidWZmZXIsICJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCUiIFBSSXVQVFIgIngiLAogICAgICAgICAgICAgICAgICAgIHNodWZbal0pOwotICAgICAgdGVzdCA9IGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoYnVmZmVyKTsKLSAgICAgIEdQUl9BU1NFUlQodGVzdCA9PSBzdHJzW3NodWZbal1dKTsKLSAgICAgIEdSUENfTURTVFJfVU5SRUYoJmV4ZWNfY3R4LCB0ZXN0KTsKKyAgICAgIHRlc3QgPSBncnBjX3NsaWNlX2ludGVybihncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZyhidWZmZXIpKTsKKyAgICAgIEdQUl9BU1NFUlQoZ3JwY19zbGljZV9pc19lcXVpdmFsZW50KHRlc3QsIHN0cnNbc2h1ZltqXV0pKTsKKyAgICAgIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoJmV4ZWNfY3R4LCB0ZXN0KTsKICAgICAgIGdwcl9mcmVlKGJ1ZmZlcik7CiAgICAgfQogICB9CkBAIC0yMTYsNTcgKzI4OCwxMSBAQAogICBncHJfZnJlZShzaHVmKTsKIH0KIAotc3RhdGljIHZvaWQgdGVzdF9zbGljZXNfd29yayh2b2lkKSB7Ci0gIC8qIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgd2hlbiBzd2l0Y2hpbmcgcmVwcmVzZW50YXRpb24gZnJvbSBtZHN0ciB0byBzbGljZSAqLwotICBncnBjX21kc3RyICpzdHI7Ci0gIGdycGNfc2xpY2Ugc2xpY2U7Ci0KLSAgTE9HX1RFU1QoInRlc3Rfc2xpY2VzX3dvcmsiKTsKLQotICBncnBjX2luaXQoKTsKLSAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKLQotICBzdHIgPSBncnBjX21kc3RyX2Zyb21fc3RyaW5nKAotICAgICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOwotICBzbGljZSA9IGdycGNfc2xpY2VfcmVmKHN0ci0+c2xpY2UpOwotICBHUlBDX01EU1RSX1VOUkVGKCZleGVjX2N0eCwgc3RyKTsKLSAgZ3JwY19zbGljZV91bnJlZl9pbnRlcm5hbCgmZXhlY19jdHgsIHNsaWNlKTsKLQotICBzdHIgPSBncnBjX21kc3RyX2Zyb21fc3RyaW5nKAotICAgICAgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOwotICBzbGljZSA9IGdycGNfc2xpY2VfcmVmKHN0ci0+c2xpY2UpOwotICBncnBjX3NsaWNlX3VucmVmX2ludGVybmFsKCZleGVjX2N0eCwgc2xpY2UpOwotICBHUlBDX01EU1RSX1VOUkVGKCZleGVjX2N0eCwgc3RyKTsKLQotICBncnBjX2V4ZWNfY3R4X2ZpbmlzaCgmZXhlY19jdHgpOwotICBncnBjX3NodXRkb3duKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYmFzZTY0X2FuZF9odWZmbWFuX3dvcmtzKHZvaWQpIHsKLSAgZ3JwY19tZHN0ciAqc3RyOwotICBncnBjX3NsaWNlIHNsaWNlMTsKLSAgZ3JwY19zbGljZSBzbGljZTI7Ci0KLSAgTE9HX1RFU1QoInRlc3RfYmFzZTY0X2FuZF9odWZmbWFuX3dvcmtzIik7Ci0KLSAgZ3JwY19pbml0KCk7Ci0gIGdycGNfZXhlY19jdHggZXhlY19jdHggPSBHUlBDX0VYRUNfQ1RYX0lOSVQ7Ci0gIHN0ciA9IGdycGNfbWRzdHJfZnJvbV9zdHJpbmcoImFiY2RlZmciKTsKLSAgc2xpY2UxID0gZ3JwY19tZHN0cl9hc19iYXNlNjRfZW5jb2RlZF9hbmRfaHVmZm1hbl9jb21wcmVzc2VkKHN0cik7Ci0gIHNsaWNlMiA9IGdycGNfY2h0dHAyX2Jhc2U2NF9lbmNvZGVfYW5kX2h1ZmZtYW5fY29tcHJlc3Moc3RyLT5zbGljZSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBncnBjX3NsaWNlX2NtcChzbGljZTEsIHNsaWNlMikpOwotCi0gIGdycGNfc2xpY2VfdW5yZWZfaW50ZXJuYWwoJmV4ZWNfY3R4LCBzbGljZTIpOwotICBHUlBDX01EU1RSX1VOUkVGKCZleGVjX2N0eCwgc3RyKTsKLSAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKLSAgZ3JwY19zaHV0ZG93bigpOwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0X3VzZXJfZGF0YV93b3Jrcyh2b2lkKSB7CiAgIGludCAqdWQxOwogICBpbnQgKnVkMjsKLSAgZ3JwY19tZGVsZW0gKm1kOwotICBMT0dfVEVTVCgidGVzdF91c2VyX2RhdGFfd29ya3MiKTsKKyAgZ3JwY19tZGVsZW0gbWQ7CisgIGdwcl9sb2coR1BSX0lORk8sICJ0ZXN0X3VzZXJfZGF0YV93b3JrcyIpOwogCiAgIGdycGNfaW5pdCgpOwogICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOwpAQCAtMjc0LDcgKzMwMCw5IEBACiAgICp1ZDEgPSAxOwogICB1ZDIgPSBncHJfbWFsbG9jKHNpemVvZihpbnQpKTsKICAgKnVkMiA9IDI7Ci0gIG1kID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKCZleGVjX2N0eCwgImFiYyIsICIxMjMiKTsKKyAgbWQgPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgICZleGVjX2N0eCwgZ3JwY19zbGljZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImFiYyIpKSwKKyAgICAgIGdycGNfc2xpY2VfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKCIxMjMiKSkpOwogICBncnBjX21kZWxlbV9zZXRfdXNlcl9kYXRhKG1kLCBncHJfZnJlZSwgdWQxKTsKICAgZ3JwY19tZGVsZW1fc2V0X3VzZXJfZGF0YShtZCwgZ3ByX2ZyZWUsIHVkMik7CiAgIEdQUl9BU1NFUlQoZ3JwY19tZGVsZW1fZ2V0X3VzZXJfZGF0YShtZCwgZ3ByX2ZyZWUpID09IHVkMSk7CkBAIC0yODQsOCArMzEyLDExIEBACiB9CiAKIHN0YXRpYyB2b2lkIHZlcmlmeV9hc2NpaV9oZWFkZXJfc2l6ZShncnBjX2V4ZWNfY3R4ICpleGVjX2N0eCwgY29uc3QgY2hhciAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKSB7Ci0gIGdycGNfbWRlbGVtICplbGVtID0gZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdzKGV4ZWNfY3R4LCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwgYm9vbCBpbnRlcm5fa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW50ZXJuX3ZhbHVlKSB7CisgIGdycGNfbWRlbGVtIGVsZW0gPSBncnBjX21kZWxlbV9mcm9tX3NsaWNlcygKKyAgICAgIGV4ZWNfY3R4LCBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoa2V5KSwgaW50ZXJuX2tleSksCisgICAgICBtYXliZV9pbnRlcm4oZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcodmFsdWUpLCBpbnRlcm5fdmFsdWUpKTsKICAgc2l6ZV90IGVsZW1fc2l6ZSA9IGdycGNfbWRlbGVtX2dldF9zaXplX2luX2hwYWNrX3RhYmxlKGVsZW0pOwogICBzaXplX3QgZXhwZWN0ZWRfc2l6ZSA9IDMyICsgc3RybGVuKGtleSkgKyBzdHJsZW4odmFsdWUpOwogICBHUFJfQVNTRVJUKGV4cGVjdGVkX3NpemUgPT0gZWxlbV9zaXplKTsKQEAgLTI5MywxMCArMzI0LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkIHZlcmlmeV9iaW5hcnlfaGVhZGVyX3NpemUoZ3JwY19leGVjX2N0eCAqZXhlY19jdHgsIGNvbnN0IGNoYXIgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pIHsKLSAgZ3JwY19tZGVsZW0gKmVsZW0gPQotICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zdHJpbmdfYW5kX2J1ZmZlcihleGVjX2N0eCwga2V5LCB2YWx1ZSwgdmFsdWVfbGVuKTsKLSAgR1BSX0FTU0VSVChncnBjX2lzX2JpbmFyeV9oZWFkZXIoa2V5LCBzdHJsZW4oa2V5KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbnRlcm5fa2V5LCBib29sIGludGVybl92YWx1ZSkgeworICBncnBjX21kZWxlbSBlbGVtID0gZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoCisgICAgICBleGVjX2N0eCwgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGtleSksIGludGVybl9rZXkpLAorICAgICAgbWF5YmVfaW50ZXJuKGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfYnVmZmVyKHZhbHVlLCB2YWx1ZV9sZW4pLAorICAgICAgICAgICAgICAgICAgIGludGVybl92YWx1ZSkpOworICBHUFJfQVNTRVJUKGdycGNfaXNfYmluYXJ5X2hlYWRlcihHUlBDX01ES0VZKGVsZW0pKSk7CiAgIHNpemVfdCBlbGVtX3NpemUgPSBncnBjX21kZWxlbV9nZXRfc2l6ZV9pbl9ocGFja190YWJsZShlbGVtKTsKICAgZ3JwY19zbGljZSB2YWx1ZV9zbGljZSA9CiAgICAgICBncnBjX3NsaWNlX2Zyb21fY29waWVkX2J1ZmZlcigoY29uc3QgY2hhciAqKXZhbHVlLCB2YWx1ZV9sZW4pOwpAQCAtMzA5LDggKzM0Myw5IEBACiB9CiAKICNkZWZpbmUgQlVGRkVSX1NJWkUgNjQKLXN0YXRpYyB2b2lkIHRlc3RfbWRlbGVtX3NpemVzX2luX2hwYWNrKHZvaWQpIHsKLSAgTE9HX1RFU1QoInRlc3RfbWRlbGVtX3NpemUiKTsKK3N0YXRpYyB2b2lkIHRlc3RfbWRlbGVtX3NpemVzX2luX2hwYWNrKGJvb2wgaW50ZXJuX2tleSwgYm9vbCBpbnRlcm5fdmFsdWUpIHsKKyAgZ3ByX2xvZyhHUFJfSU5GTywgInRlc3RfbWRlbGVtX3NpemU6IGludGVybl9rZXk9JWQgaW50ZXJuX3ZhbHVlPSVkIiwKKyAgICAgICAgICBpbnRlcm5fa2V5LCBpbnRlcm5fdmFsdWUpOwogICBncnBjX2luaXQoKTsKICAgZ3JwY19leGVjX2N0eCBleGVjX2N0eCA9IEdSUENfRVhFQ19DVFhfSU5JVDsKIApAQCAtMzE5LDE5ICszNTQsNDQgQEAKICAgICBiaW5hcnlfdmFsdWVbaV0gPSBpOwogICB9CiAKLSAgdmVyaWZ5X2FzY2lpX2hlYWRlcl9zaXplKCZleGVjX2N0eCwgImhlbGxvIiwgIndvcmxkIik7CisgIHZlcmlmeV9hc2NpaV9oZWFkZXJfc2l6ZSgmZXhlY19jdHgsICJoZWxsbyIsICJ3b3JsZCIsIGludGVybl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5fdmFsdWUpOwogICB2ZXJpZnlfYXNjaWlfaGVhZGVyX3NpemUoJmV4ZWNfY3R4LCAiaGVsbG8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvcmxkeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Iik7Ci0gIHZlcmlmeV9hc2NpaV9oZWFkZXJfc2l6ZSgmZXhlY19jdHgsICI6c2NoZW1lIiwgImh0dHAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3JsZHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIsIGludGVybl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5fdmFsdWUpOworICB2ZXJpZnlfYXNjaWlfaGVhZGVyX3NpemUoJmV4ZWNfY3R4LCAiOnNjaGVtZSIsICJodHRwIiwgaW50ZXJuX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybl92YWx1ZSk7CiAKICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgQlVGRkVSX1NJWkU7IGkrKykgewotICAgIHZlcmlmeV9iaW5hcnlfaGVhZGVyX3NpemUoJmV4ZWNfY3R4LCAiaGVsbG8tYmluIiwgYmluYXJ5X3ZhbHVlLCBpKTsKKyAgICB2ZXJpZnlfYmluYXJ5X2hlYWRlcl9zaXplKCZleGVjX2N0eCwgImhlbGxvLWJpbiIsIGJpbmFyeV92YWx1ZSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybl9rZXksIGludGVybl92YWx1ZSk7CiAgIH0KIAotICBjb25zdCBjaGFyICpzdGF0aWNfbWV0YWRhdGEgPSBncnBjX3N0YXRpY19tZXRhZGF0YV9zdHJpbmdzWzBdOwotICBtZW1jcHkoYmluYXJ5X3ZhbHVlLCBzdGF0aWNfbWV0YWRhdGEsIHN0cmxlbihzdGF0aWNfbWV0YWRhdGEpKTsKLSAgdmVyaWZ5X2JpbmFyeV9oZWFkZXJfc2l6ZSgmZXhlY19jdHgsICJoZWxsby1iaW4iLCBiaW5hcnlfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHN0YXRpY19tZXRhZGF0YSkpOworICBncnBjX2V4ZWNfY3R4X2ZpbmlzaCgmZXhlY19jdHgpOworICBncnBjX3NodXRkb3duKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY29waWVkX3N0YXRpY19tZXRhZGF0YShib29sIGR1cF9rZXksIGJvb2wgZHVwX3ZhbHVlKSB7CisgIGdwcl9sb2coR1BSX0lORk8sICJ0ZXN0X3N0YXRpY19tZXRhZGF0YTogZHVwX2tleT0lZCBkdXBfdmFsdWU9JWQiLCBkdXBfa2V5LAorICAgICAgICAgIGR1cF92YWx1ZSk7CisgIGdycGNfaW5pdCgpOworICBncnBjX2V4ZWNfY3R4IGV4ZWNfY3R4ID0gR1JQQ19FWEVDX0NUWF9JTklUOworCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR1JQQ19TVEFUSUNfTURFTEVNX0NPVU5UOyBpKyspIHsKKyAgICBncnBjX21kZWxlbSBwID0gR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfTURFTEVNX1NUT1JBR0VfU1RBVElDKTsKKyAgICBncnBjX21kZWxlbSBxID0KKyAgICAgICAgZ3JwY19tZGVsZW1fZnJvbV9zbGljZXMoJmV4ZWNfY3R4LCBtYXliZV9kdXAoR1JQQ19NREtFWShwKSwgZHVwX2tleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlX2R1cChHUlBDX01EVkFMVUUocCksIGR1cF92YWx1ZSkpOworICAgIEdQUl9BU1NFUlQoZ3JwY19tZGVsZW1fZXEocCwgcSkpOworICAgIGlmIChkdXBfa2V5IHx8IGR1cF92YWx1ZSkgeworICAgICAgR1BSX0FTU0VSVChwLnBheWxvYWQgIT0gcS5wYXlsb2FkKTsKKyAgICB9IGVsc2UgeworICAgICAgR1BSX0FTU0VSVChwLnBheWxvYWQgPT0gcS5wYXlsb2FkKTsKKyAgICB9CisgICAgR1JQQ19NREVMRU1fVU5SRUYoJmV4ZWNfY3R4LCBwKTsKKyAgICBHUlBDX01ERUxFTV9VTlJFRigmZXhlY19jdHgsIHEpOworICB9CiAKICAgZ3JwY19leGVjX2N0eF9maW5pc2goJmV4ZWNfY3R4KTsKICAgZ3JwY19zaHV0ZG93bigpOwpAQCAtMzQwLDE1ICs0MDAsMTggQEAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewogICBncnBjX3Rlc3RfaW5pdChhcmdjLCBhcmd2KTsKICAgdGVzdF9ub19vcCgpOwotICB0ZXN0X2NyZWF0ZV9zdHJpbmcoKTsKLSAgdGVzdF9jcmVhdGVfbWV0YWRhdGEoKTsKLSAgdGVzdF9jcmVhdGVfbWFueV9lcGhlbWVyYWxfbWV0YWRhdGEoKTsKKyAgZm9yIChpbnQgayA9IDA7IGsgPD0gMTsgaysrKSB7CisgICAgZm9yIChpbnQgdiA9IDA7IHYgPD0gMTsgdisrKSB7CisgICAgICB0ZXN0X2NyZWF0ZV9tZXRhZGF0YShrLCB2KTsKKyAgICAgIHRlc3RfY3JlYXRlX21hbnlfZXBoZW1lcmFsX21ldGFkYXRhKGssIHYpOworICAgICAgdGVzdF9pZGVudGl0eV9sYXdzKGssIHYpOworICAgICAgdGVzdF9zcGluX2NyZWF0aW5nX3RoZV9zYW1lX3RoaW5nKGssIHYpOworICAgICAgdGVzdF9tZGVsZW1fc2l6ZXNfaW5faHBhY2soaywgdik7CisgICAgICB0ZXN0X2NvcGllZF9zdGF0aWNfbWV0YWRhdGEoaywgdik7CisgICAgfQorICB9CiAgIHRlc3RfY3JlYXRlX21hbnlfcGVyc2lzdGFudF9tZXRhZGF0YSgpOwotICB0ZXN0X3NwaW5fY3JlYXRpbmdfdGhlX3NhbWVfdGhpbmcoKTsKICAgdGVzdF90aGluZ3Nfc3RpY2tfYXJvdW5kKCk7Ci0gIHRlc3Rfc2xpY2VzX3dvcmsoKTsKLSAgdGVzdF9iYXNlNjRfYW5kX2h1ZmZtYW5fd29ya3MoKTsKICAgdGVzdF91c2VyX2RhdGFfd29ya3MoKTsKLSAgdGVzdF9tZGVsZW1fc2l6ZXNfaW5faHBhY2soKTsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9zdGF0dXNfY29udmVyc2lvbl90ZXN0LmMgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QuYwpzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSB0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9zdGF0dXNfY29udmVyc2lvbl90ZXN0LmMKcmVuYW1lIHRvIHRlc3QvY29yZS90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb25fdGVzdC5jCmluZGV4IGY1YTVjZDEuLjY1Zjg0MGIgMTAwNjQ0Ci0tLSBhL3Rlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL3N0YXR1c19jb252ZXJzaW9uX3Rlc3QuYworKysgYi90ZXN0L2NvcmUvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QuYwpAQCAtMzEsNTAgKzMxLDUwIEBACiAgKgogICovCiAKLSNpbmNsdWRlICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmgiCiAjaW5jbHVkZSA8Z3JwYy9zdXBwb3J0L2xvZy5oPgogI2luY2x1ZGUgInRlc3QvY29yZS91dGlsL3Rlc3RfY29uZmlnLmgiCiAKICNkZWZpbmUgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoYSwgYikgXAotICBHUFJfQVNTRVJUKGdycGNfY2h0dHAyX2dycGNfc3RhdHVzX3RvX2h0dHAyX2Vycm9yKGEpID09IChiKSkKKyAgR1BSX0FTU0VSVChncnBjX3N0YXR1c190b19odHRwMl9lcnJvcihhKSA9PSAoYikpCiAjZGVmaW5lIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKGEsIGRlYWRsaW5lLCBiKSBcCi0gIEdQUl9BU1NFUlQoZ3JwY19jaHR0cDJfaHR0cDJfZXJyb3JfdG9fZ3JwY19zdGF0dXMoYSwgZGVhZGxpbmUpID09IChiKSkKKyAgR1BSX0FTU0VSVChncnBjX2h0dHAyX2Vycm9yX3RvX2dycGNfc3RhdHVzKGEsIGRlYWRsaW5lKSA9PSAoYikpCiAjZGVmaW5lIEdSUENfU1RBVFVTX1RPX0hUVFAyX1NUQVRVUyhhLCBiKSBcCi0gIEdQUl9BU1NFUlQoZ3JwY19jaHR0cDJfZ3JwY19zdGF0dXNfdG9faHR0cDJfc3RhdHVzKGEpID09IChiKSkKKyAgR1BSX0FTU0VSVChncnBjX3N0YXR1c190b19odHRwMl9zdGF0dXMoYSkgPT0gKGIpKQogI2RlZmluZSBIVFRQMl9TVEFUVVNfVE9fR1JQQ19TVEFUVVMoYSwgYikgXAotICBHUFJfQVNTRVJUKGdycGNfY2h0dHAyX2h0dHAyX3N0YXR1c190b19ncnBjX3N0YXR1cyhhKSA9PSAoYikpCisgIEdQUl9BU1NFUlQoZ3JwY19odHRwMl9zdGF0dXNfdG9fZ3JwY19zdGF0dXMoYSkgPT0gKGIpKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAgaW50IGk7CiAKICAgZ3JwY190ZXN0X2luaXQoYXJnYywgYXJndik7CiAKLSAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfT0ssIEdSUENfQ0hUVFAyX05PX0VSUk9SKTsKLSAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfQ0FOQ0VMTEVELCBHUlBDX0NIVFRQMl9DQU5DRUwpOwotICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19VTktOT1dOLCBHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX09LLCBHUlBDX0hUVFAyX05PX0VSUk9SKTsKKyAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfQ0FOQ0VMTEVELCBHUlBDX0hUVFAyX0NBTkNFTCk7CisgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX1VOS05PV04sIEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1IpOwogICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19JTlZBTElEX0FSR1VNRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUik7Ci0gIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX0RFQURMSU5FX0VYQ0VFREVELCBHUlBDX0NIVFRQMl9DQU5DRUwpOwotICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19OT1RfRk9VTkQsIEdSUENfQ0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19IVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX0RFQURMSU5FX0VYQ0VFREVELCBHUlBDX0hUVFAyX0NBTkNFTCk7CisgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX05PVF9GT1VORCwgR1JQQ19IVFRQMl9JTlRFUk5BTF9FUlJPUik7CiAgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX0FMUkVBRFlfRVhJU1RTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1IpOwogICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19QRVJNSVNTSU9OX0RFTklFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19DSFRUUDJfSU5BREVRVUFURV9TRUNVUklUWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfSFRUUDJfSU5BREVRVUFURV9TRUNVUklUWSk7CiAgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX1VOQVVUSEVOVElDQVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19DSFRUUDJfSU5URVJOQUxfRVJST1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKICAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfUkVTT1VSQ0VfRVhIQVVTVEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0NIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfSFRUUDJfRU5IQU5DRV9ZT1VSX0NBTE0pOwogICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19GQUlMRURfUFJFQ09ORElUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUik7Ci0gIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX0FCT1JURUQsIEdSUENfQ0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19IVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX0FCT1JURUQsIEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1IpOwogICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19PVVRfT0ZfUkFOR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfQ0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19IVFRQMl9JTlRFUk5BTF9FUlJPUik7CiAgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX1VOSU1QTEVNRU5URUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfQ0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKLSAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfSU5URVJOQUwsIEdSUENfQ0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19IVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgIEdSUENfU1RBVFVTX1RPX0hUVFAyX0VSUk9SKEdSUENfU1RBVFVTX0lOVEVSTkFMLCBHUlBDX0hUVFAyX0lOVEVSTkFMX0VSUk9SKTsKICAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfVU5BVkFJTEFCTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfQ0hUVFAyX1JFRlVTRURfU1RSRUFNKTsKLSAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfRVJST1IoR1JQQ19TVEFUVVNfREFUQV9MT1NTLCBHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfSFRUUDJfUkVGVVNFRF9TVFJFQU0pOworICBHUlBDX1NUQVRVU19UT19IVFRQMl9FUlJPUihHUlBDX1NUQVRVU19EQVRBX0xPU1MsIEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1IpOwogCiAgIEdSUENfU1RBVFVTX1RPX0hUVFAyX1NUQVRVUyhHUlBDX1NUQVRVU19PSywgMjAwKTsKICAgR1JQQ19TVEFUVVNfVE9fSFRUUDJfU1RBVFVTKEdSUENfU1RBVFVTX0NBTkNFTExFRCwgMjAwKTsKQEAgLTk1LDU5ICs5NSw1OSBAQAogICBHUlBDX1NUQVRVU19UT19IVFRQMl9TVEFUVVMoR1JQQ19TVEFUVVNfREFUQV9MT1NTLCAyMDApOwogCiAgIGNvbnN0IGdwcl90aW1lc3BlYyBiZWZvcmVfZGVhZGxpbmUgPSBncHJfaW5mX2Z1dHVyZShHUFJfQ0xPQ0tfTU9OT1RPTklDKTsKLSAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19DSFRUUDJfTk9fRVJST1IsIGJlZm9yZV9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9OT19FUlJPUiwgYmVmb3JlX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19JTlRFUk5BTCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX1BST1RPQ09MX0VSUk9SLCBiZWZvcmVfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfUFJPVE9DT0xfRVJST1IsIGJlZm9yZV9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUiwgYmVmb3JlX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0lOVEVSTkFMX0VSUk9SLCBiZWZvcmVfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0lOVEVSTkFMKTsKLSAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19DSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SLCBiZWZvcmVfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SLCBiZWZvcmVfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0lOVEVSTkFMKTsKLSAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19DSFRUUDJfU0VUVElOR1NfVElNRU9VVCwgYmVmb3JlX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX1NFVFRJTkdTX1RJTUVPVVQsIGJlZm9yZV9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9TVFJFQU1fQ0xPU0VELCBiZWZvcmVfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfU1RSRUFNX0NMT1NFRCwgYmVmb3JlX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19JTlRFUk5BTCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0ZSQU1FX1NJWkVfRVJST1IsIGJlZm9yZV9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9GUkFNRV9TSVpFX0VSUk9SLCBiZWZvcmVfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0lOVEVSTkFMKTsKLSAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19DSFRUUDJfUkVGVVNFRF9TVFJFQU0sIGJlZm9yZV9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9SRUZVU0VEX1NUUkVBTSwgYmVmb3JlX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19VTkFWQUlMQUJMRSk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0NBTkNFTCwgYmVmb3JlX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0NBTkNFTCwgYmVmb3JlX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19DQU5DRUxMRUQpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9DT01QUkVTU0lPTl9FUlJPUiwgYmVmb3JlX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0NPTVBSRVNTSU9OX0VSUk9SLCBiZWZvcmVfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0lOVEVSTkFMKTsKLSAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19DSFRUUDJfQ09OTkVDVF9FUlJPUiwgYmVmb3JlX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0NPTk5FQ1RfRVJST1IsIGJlZm9yZV9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTSwgYmVmb3JlX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNLCBiZWZvcmVfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX1JFU09VUkNFX0VYSEFVU1RFRCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFksIGJlZm9yZV9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9JTkFERVFVQVRFX1NFQ1VSSVRZLCBiZWZvcmVfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX1BFUk1JU1NJT05fREVOSUVEKTsKIAogICBjb25zdCBncHJfdGltZXNwZWMgYWZ0ZXJfZGVhZGxpbmUgPSBncHJfaW5mX3Bhc3QoR1BSX0NMT0NLX01PTk9UT05JQyk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX05PX0VSUk9SLCBhZnRlcl9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9OT19FUlJPUiwgYWZ0ZXJfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX0lOVEVSTkFMKTsKLSAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19DSFRUUDJfUFJPVE9DT0xfRVJST1IsIGFmdGVyX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX1BST1RPQ09MX0VSUk9SLCBhZnRlcl9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9JTlRFUk5BTF9FUlJPUiwgYWZ0ZXJfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfSU5URVJOQUxfRVJST1IsIGFmdGVyX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19JTlRFUk5BTCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0ZMT1dfQ09OVFJPTF9FUlJPUiwgYWZ0ZXJfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfRkxPV19DT05UUk9MX0VSUk9SLCBhZnRlcl9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9TRVRUSU5HU19USU1FT1VULCBhZnRlcl9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9TRVRUSU5HU19USU1FT1VULCBhZnRlcl9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9TVFJFQU1fQ0xPU0VELCBhZnRlcl9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9TVFJFQU1fQ0xPU0VELCBhZnRlcl9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9GUkFNRV9TSVpFX0VSUk9SLCBhZnRlcl9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9GUkFNRV9TSVpFX0VSUk9SLCBhZnRlcl9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfSU5URVJOQUwpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9SRUZVU0VEX1NUUkVBTSwgYWZ0ZXJfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfUkVGVVNFRF9TVFJFQU0sIGFmdGVyX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19VTkFWQUlMQUJMRSk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0NBTkNFTCwgYWZ0ZXJfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfQ0FOQ0VMLCBhZnRlcl9kZWFkbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19TVEFUVVNfREVBRExJTkVfRVhDRUVERUQpOwotICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0NIVFRQMl9DT01QUkVTU0lPTl9FUlJPUiwgYWZ0ZXJfZGVhZGxpbmUsCisgIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfSFRUUDJfQ09NUFJFU1NJT05fRVJST1IsIGFmdGVyX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19JTlRFUk5BTCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0NPTk5FQ1RfRVJST1IsIGFmdGVyX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0NPTk5FQ1RfRVJST1IsIGFmdGVyX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19JTlRFUk5BTCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0VOSEFOQ0VfWU9VUl9DQUxNLCBhZnRlcl9kZWFkbGluZSwKKyAgSFRUUDJfRVJST1JfVE9fR1JQQ19TVEFUVVMoR1JQQ19IVFRQMl9FTkhBTkNFX1lPVVJfQ0FMTSwgYWZ0ZXJfZGVhZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSUENfU1RBVFVTX1JFU09VUkNFX0VYSEFVU1RFRCk7Ci0gIEhUVFAyX0VSUk9SX1RPX0dSUENfU1RBVFVTKEdSUENfQ0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFksIGFmdGVyX2RlYWRsaW5lLAorICBIVFRQMl9FUlJPUl9UT19HUlBDX1NUQVRVUyhHUlBDX0hUVFAyX0lOQURFUVVBVEVfU0VDVVJJVFksIGFmdGVyX2RlYWRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUlBDX1NUQVRVU19QRVJNSVNTSU9OX0RFTklFRCk7CiAKICAgSFRUUDJfU1RBVFVTX1RPX0dSUENfU1RBVFVTKDIwMCwgR1JQQ19TVEFUVVNfT0spOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgLyogY2hlY2sgYWxsIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIGNvbnZlcnRlZCAqLwogICBmb3IgKGkgPSAwOyBpIDw9IDk5OTsgaSsrKSB7Ci0gICAgZ3JwY19jaHR0cDJfaHR0cDJfc3RhdHVzX3RvX2dycGNfc3RhdHVzKGkpOworICAgIGdycGNfaHR0cDJfc3RhdHVzX3RvX2dycGNfc3RhdHVzKGkpOwogICB9CiAKICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90ZXN0L2NvcmUvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmdfdGVzdC5jIGIvdGVzdC9jb3JlL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nX3Rlc3QuYwppbmRleCBiNjAwNGFmLi4xMGUxODA0IDEwMDY0NAotLS0gYS90ZXN0L2NvcmUvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmdfdGVzdC5jCisrKyBiL3Rlc3QvY29yZS90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZ190ZXN0LmMKQEAgLTg4LDcgKzg4LDggQEAKIHN0YXRpYyB2b2lkIGFzc2VydF9kZWNvZGVzX2FzKGNvbnN0IGNoYXIgKmJ1ZmZlciwgZ3ByX3RpbWVzcGVjIGV4cGVjdGVkKSB7CiAgIGdwcl90aW1lc3BlYyBnb3Q7CiAgIGdwcl9sb2coR1BSX0lORk8sICJjaGVjayBkZWNvZGluZyAnJXMnIiwgYnVmZmVyKTsKLSAgR1BSX0FTU0VSVCgxID09IGdycGNfaHR0cDJfZGVjb2RlX3RpbWVvdXQoYnVmZmVyLCAmZ290KSk7CisgIEdQUl9BU1NFUlQoMSA9PSBncnBjX2h0dHAyX2RlY29kZV90aW1lb3V0KAorICAgICAgICAgICAgICAgICAgICAgIGdycGNfc2xpY2VfZnJvbV9zdGF0aWNfc3RyaW5nKGJ1ZmZlciksICZnb3QpKTsKICAgR1BSX0FTU0VSVCgwID09IGdwcl90aW1lX2NtcChnb3QsIGV4cGVjdGVkKSk7CiB9CiAKQEAgLTEzNCwxOCArMTM1LDIzIEBACiAgIGFzc2VydF9kZWNvZGVzX2FzKCI5OTk5OTk5OTk5UyIsIGdwcl9pbmZfZnV0dXJlKEdQUl9USU1FU1BBTikpOwogfQogCi12b2lkIHRlc3RfZGVjb2RpbmdfZmFpbHModm9pZCkgeworc3RhdGljIHZvaWQgYXNzZXJ0X2RlY29kaW5nX2ZhaWxzKGNvbnN0IGNoYXIgKnMpIHsKICAgZ3ByX3RpbWVzcGVjIHg7CisgIEdQUl9BU1NFUlQoMCA9PQorICAgICAgICAgICAgIGdycGNfaHR0cDJfZGVjb2RlX3RpbWVvdXQoZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcocyksICZ4KSk7Cit9CisKK3ZvaWQgdGVzdF9kZWNvZGluZ19mYWlscyh2b2lkKSB7CiAgIExPR19URVNUKCJ0ZXN0X2RlY29kaW5nX2ZhaWxzIik7Ci0gIEdQUl9BU1NFUlQoMCA9PSBncnBjX2h0dHAyX2RlY29kZV90aW1lb3V0KCIiLCAmeCkpOwotICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dCgiICIsICZ4KSk7Ci0gIEdQUl9BU1NFUlQoMCA9PSBncnBjX2h0dHAyX2RlY29kZV90aW1lb3V0KCJ4IiwgJngpKTsKLSAgR1BSX0FTU0VSVCgwID09IGdycGNfaHR0cDJfZGVjb2RlX3RpbWVvdXQoIjEiLCAmeCkpOwotICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dCgiMXgiLCAmeCkpOwotICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dCgiMXV4IiwgJngpKTsKLSAgR1BSX0FTU0VSVCgwID09IGdycGNfaHR0cDJfZGVjb2RlX3RpbWVvdXQoIiEiLCAmeCkpOwotICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dCgibjEiLCAmeCkpOwotICBHUFJfQVNTRVJUKDAgPT0gZ3JwY19odHRwMl9kZWNvZGVfdGltZW91dCgiLTF1IiwgJngpKTsKKyAgYXNzZXJ0X2RlY29kaW5nX2ZhaWxzKCIiKTsKKyAgYXNzZXJ0X2RlY29kaW5nX2ZhaWxzKCIgIik7CisgIGFzc2VydF9kZWNvZGluZ19mYWlscygieCIpOworICBhc3NlcnRfZGVjb2RpbmdfZmFpbHMoIjEiKTsKKyAgYXNzZXJ0X2RlY29kaW5nX2ZhaWxzKCIxeCIpOworICBhc3NlcnRfZGVjb2RpbmdfZmFpbHMoIjF1eCIpOworICBhc3NlcnRfZGVjb2RpbmdfZmFpbHMoIiEiKTsKKyAgYXNzZXJ0X2RlY29kaW5nX2ZhaWxzKCJuMSIpOworICBhc3NlcnRfZGVjb2RpbmdfZmFpbHMoIi0xdSIpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS91dGlsL3BvcnRfc2VydmVyX2NsaWVudC5jIGIvdGVzdC9jb3JlL3V0aWwvcG9ydF9zZXJ2ZXJfY2xpZW50LmMKaW5kZXggNGJhZjYzZC4uMTE4NzA4ZCAxMDA2NDQKLS0tIGEvdGVzdC9jb3JlL3V0aWwvcG9ydF9zZXJ2ZXJfY2xpZW50LmMKKysrIGIvdGVzdC9jb3JlL3V0aWwvcG9ydF9zZXJ2ZXJfY2xpZW50LmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgIGZhaWxlZCA9IDE7CiAgICAgY29uc3QgY2hhciAqbXNnID0gZ3JwY19lcnJvcl9zdHJpbmcoZXJyb3IpOwogICAgIGdwcl9sb2coR1BSX0RFQlVHLCAiZmFpbGVkIHBvcnQgcGljayBmcm9tIHNlcnZlcjogcmV0cnlpbmcgWyVzXSIsIG1zZyk7Ci0gICAgZ3JwY19lcnJvcl9mcmVlX3N0cmluZyhtc2cpOworCiAgIH0gZWxzZSBpZiAocmVzcG9uc2UtPnN0YXR1cyAhPSAyMDApIHsKICAgICBmYWlsZWQgPSAxOwogICAgIGdwcl9sb2coR1BSX0RFQlVHLCAiZmFpbGVkIHBvcnQgcGljayBmcm9tIHNlcnZlcjogc3RhdHVzPSVkIiwKZGlmZiAtLWdpdCBhL3Rlc3QvY3BwL2VuZDJlbmQvYXN5bmNfZW5kMmVuZF90ZXN0LmNjIGIvdGVzdC9jcHAvZW5kMmVuZC9hc3luY19lbmQyZW5kX3Rlc3QuY2MKaW5kZXggMmNlM2YyZi4uZjUzNjAxMiAxMDA2NDQKLS0tIGEvdGVzdC9jcHAvZW5kMmVuZC9hc3luY19lbmQyZW5kX3Rlc3QuY2MKKysrIGIvdGVzdC9jcHAvZW5kMmVuZC9hc3luY19lbmQyZW5kX3Rlc3QuY2MKQEAgLTIyOCwxMiArMjI4LDcgQEAKICAgICAgIDogZGlzYWJsZV9ibG9ja2luZyhub25fYmxvY2spLAogICAgICAgICBjcmVkZW50aWFsc190eXBlKGNyZWRzX3R5cGUpLAogICAgICAgICBtZXNzYWdlX2NvbnRlbnQoY29udGVudCkge30KLSAgdm9pZCBMb2coKSBjb25zdCB7Ci0gICAgZ3ByX2xvZygKLSAgICAgICAgR1BSX0lORk8sCi0gICAgICAgICJTY2VuYXJpbzogZGlzYWJsZV9ibG9ja2luZyAlZCwgY3JlZGVudGlhbHMgJXMsIG1lc3NhZ2Ugc2l6ZSAlIiBQUkl1UFRSLAotICAgICAgICBkaXNhYmxlX2Jsb2NraW5nLCBjcmVkZW50aWFsc190eXBlLmNfc3RyKCksIG1lc3NhZ2VfY29udGVudC5zaXplKCkpOwotICB9CisgIHZvaWQgTG9nKCkgY29uc3Q7CiAgIGJvb2wgZGlzYWJsZV9ibG9ja2luZzsKICAgLy8gQWx0aG91Z2ggdGhlIGJlbG93IGdycGM6OnN0cmluZydzIGFyZSBsb2dpY2FsbHkgY29uc3QsIHdlIGNhbid0IGRlY2xhcmUKICAgLy8gdGhlbSBjb25zdCBiZWNhdXNlIG9mIGEgbGltaXRhdGlvbiBpbiB0aGUgd2F5IG9sZCBjb21waWxlcnMgKGUuZy4sIGdjYy00LjQpCkBAIC0yNDIsNiArMjM3LDIwIEBACiAgIGdycGM6OnN0cmluZyBtZXNzYWdlX2NvbnRlbnQ7CiB9OwogCitzdGF0aWMgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXN0U2NlbmFyaW8mIHNjZW5hcmlvKSB7CisgIHJldHVybiBvdXQgPDwgIlRlc3RTY2VuYXJpb3tkaXNhYmxlX2Jsb2NraW5nPSIKKyAgICAgICAgICAgICA8PCAoc2NlbmFyaW8uZGlzYWJsZV9ibG9ja2luZyA/ICJ0cnVlIiA6ICJmYWxzZSIpCisgICAgICAgICAgICAgPDwgIiwgY3JlZGVudGlhbHM9JyIgPDwgc2NlbmFyaW8uY3JlZGVudGlhbHNfdHlwZQorICAgICAgICAgICAgIDw8ICInLCBtZXNzYWdlX3NpemU9IiA8PCBzY2VuYXJpby5tZXNzYWdlX2NvbnRlbnQuc2l6ZSgpIDw8ICJ9IjsKK30KKwordm9pZCBUZXN0U2NlbmFyaW86OkxvZygpIGNvbnN0IHsKKyAgc3RkOjpvc3RyaW5nc3RyZWFtIG91dDsKKyAgb3V0IDw8ICp0aGlzOworICBncHJfbG9nKEdQUl9ERUJVRywgIiVzIiwgb3V0LnN0cigpLmNfc3RyKCkpOworfQorCiBjbGFzcyBBc3luY0VuZDJlbmRUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdFdpdGhQYXJhbTxUZXN0U2NlbmFyaW8+IHsKICBwcm90ZWN0ZWQ6CiAgIEFzeW5jRW5kMmVuZFRlc3QoKSB7IEdldFBhcmFtKCkuTG9nKCk7IH0KZGlmZiAtLWdpdCBhL3Rlc3QvY3BwL2VuZDJlbmQvZW5kMmVuZF90ZXN0LmNjIGIvdGVzdC9jcHAvZW5kMmVuZC9lbmQyZW5kX3Rlc3QuY2MKaW5kZXggMWExYTk0ZS4uNDdlNWM1YiAxMDA2NDQKLS0tIGEvdGVzdC9jcHAvZW5kMmVuZC9lbmQyZW5kX3Rlc3QuY2MKKysrIGIvdGVzdC9jcHAvZW5kMmVuZC9lbmQyZW5kX3Rlc3QuY2MKQEAgLTIwOSwxMCArMjA5LDcgQEAKICBwdWJsaWM6CiAgIFRlc3RTY2VuYXJpbyhib29sIHByb3h5LCBjb25zdCBncnBjOjpzdHJpbmcmIGNyZWRzX3R5cGUpCiAgICAgICA6IHVzZV9wcm94eShwcm94eSksIGNyZWRlbnRpYWxzX3R5cGUoY3JlZHNfdHlwZSkge30KLSAgdm9pZCBMb2coKSBjb25zdCB7Ci0gICAgZ3ByX2xvZyhHUFJfSU5GTywgIlNjZW5hcmlvOiBwcm94eSAlZCwgY3JlZGVudGlhbHMgJXMiLCB1c2VfcHJveHksCi0gICAgICAgICAgICBjcmVkZW50aWFsc190eXBlLmNfc3RyKCkpOwotICB9CisgIHZvaWQgTG9nKCkgY29uc3Q7CiAgIGJvb2wgdXNlX3Byb3h5OwogICAvLyBBbHRob3VnaCB0aGUgYmVsb3cgZ3JwYzo6c3RyaW5nIGlzIGxvZ2ljYWxseSBjb25zdCwgd2UgY2FuJ3QgZGVjbGFyZQogICAvLyB0aGVtIGNvbnN0IGJlY2F1c2Ugb2YgYSBsaW1pdGF0aW9uIGluIHRoZSB3YXkgb2xkIGNvbXBpbGVycyAoZS5nLiwgZ2NjLTQuNCkKQEAgLTIyMCw2ICsyMTcsMTkgQEAKICAgZ3JwYzo6c3RyaW5nIGNyZWRlbnRpYWxzX3R5cGU7CiB9OwogCitzdGF0aWMgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXN0U2NlbmFyaW8mIHNjZW5hcmlvKSB7CisgIHJldHVybiBvdXQgPDwgIlRlc3RTY2VuYXJpb3t1c2VfcHJveHk9IgorICAgICAgICAgICAgIDw8IChzY2VuYXJpby51c2VfcHJveHkgPyAidHJ1ZSIgOiAiZmFsc2UiKSA8PCAiLCBjcmVkZW50aWFscz0nIgorICAgICAgICAgICAgIDw8IHNjZW5hcmlvLmNyZWRlbnRpYWxzX3R5cGUgPDwgIid9IjsKK30KKwordm9pZCBUZXN0U2NlbmFyaW86OkxvZygpIGNvbnN0IHsKKyAgc3RkOjpvc3RyaW5nc3RyZWFtIG91dDsKKyAgb3V0IDw8ICp0aGlzOworICBncHJfbG9nKEdQUl9ERUJVRywgIiVzIiwgb3V0LnN0cigpLmNfc3RyKCkpOworfQorCiBjbGFzcyBFbmQyZW5kVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08VGVzdFNjZW5hcmlvPiB7CiAgcHJvdGVjdGVkOgogICBFbmQyZW5kVGVzdCgpCkBAIC02MzYsNyArNjQ2LDcgQEAKICAgVGVzdEJpZGlTdHJlYW1TZXJ2ZXJDYW5jZWwoQ0FOQ0VMX0FGVEVSX1BST0NFU1NJTkcsIDUpOwogfQogCi1URVNUX1AoRW5kMmVuZFRlc3QsIFNpbXBsZVJwY1dpdGhDdXN0b21lVXNlckFnZW50UHJlZml4KSB7CitURVNUX1AoRW5kMmVuZFRlc3QsIFNpbXBsZVJwY1dpdGhDdXN0b21Vc2VyQWdlbnRQcmVmaXgpIHsKICAgdXNlcl9hZ2VudF9wcmVmaXhfID0gImN1c3RvbV9wcmVmaXgiOwogICBSZXNldFN0dWIoKTsKICAgRWNob1JlcXVlc3QgcmVxdWVzdDsKQEAgLTg5MSw2ICs5MDEsOCBAQAogICBFY2hvUmVxdWVzdCByZXF1ZXN0OwogICBFY2hvUmVzcG9uc2UgcmVzcG9uc2U7CiAgIHJlcXVlc3Quc2V0X21lc3NhZ2Uoc3RyaW5nKGtNYXhNZXNzYWdlU2l6ZV8gKiAyLCAnYScpKTsKKyAgLy8gY2FuY2VsbGVkIGlzIG5vdCBndWFyYW50ZWVkIHRvIGFwcGVhciBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VydmljZSBoYW5kbGVyCisgIHJlcXVlc3QubXV0YWJsZV9wYXJhbSgpLT5zZXRfc2tpcF9jYW5jZWxsZWRfY2hlY2sodHJ1ZSk7CiAKICAgQ2xpZW50Q29udGV4dCBjb250ZXh0OwogICBTdGF0dXMgcyA9IHN0dWJfLT5FY2hvKCZjb250ZXh0LCByZXF1ZXN0LCAmcmVzcG9uc2UpOwpAQCAtMTI5Myw2ICsxMzA1LDcgQEAKICAgRVhQRUNUX0ZBTFNFKHMub2soKSk7CiAgIEVYUEVDVF9FUShzLmVycm9yX2NvZGUoKSwgU3RhdHVzQ29kZTo6VU5BVVRIRU5USUNBVEVEKTsKIH0KKwogVEVTVF9QKFNlY3VyZUVuZDJlbmRUZXN0LCBTZXRQZXJDYWxsQ3JlZGVudGlhbHMpIHsKICAgUmVzZXRTdHViKCk7CiAgIEVjaG9SZXF1ZXN0IHJlcXVlc3Q7CmRpZmYgLS1naXQgYS90ZXN0L2NwcC9ncnBjbGIvZ3JwY2xiX3Rlc3QuY2MgYi90ZXN0L2NwcC9ncnBjbGIvZ3JwY2xiX3Rlc3QuY2MKaW5kZXggZGUzMDRiOS4uYTEwY2RhNyAxMDA2NDQKLS0tIGEvdGVzdC9jcHAvZ3JwY2xiL2dycGNsYl90ZXN0LmNjCisrKyBiL3Rlc3QvY3BwL2dycGNsYi9ncnBjbGJfdGVzdC5jYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAgIC8vIHJlY2VpdmUgcmVxdWVzdCBmb3IgYmFja2VuZHMKICAgb3AgPSBvcHM7CiAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICBvcC0+ZGF0YS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZS5yZWN2X21lc3NhZ2UgPSAmcmVxdWVzdF9wYXlsb2FkX3JlY3Y7CiAgIG9wLT5mbGFncyA9IDA7CiAgIG9wLT5yZXNlcnZlZCA9IE5VTEw7CiAgIG9wKys7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICByZXNwb25zZV9wYXlsb2FkID0gZ3JwY19yYXdfYnl0ZV9idWZmZXJfY3JlYXRlKCZyZXNwb25zZV9wYXlsb2FkX3NsaWNlLCAxKTsKICAgICBvcCA9IG9wczsKICAgICBvcC0+b3AgPSBHUlBDX09QX1NFTkRfTUVTU0FHRTsKLSAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOworICAgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOwogICAgIG9wLT5mbGFncyA9IDA7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICBvcCsrOwpAQCAtMjg4LDcgKzI4OCw4IEBACiAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnRyYWlsaW5nX21ldGFkYXRhX2NvdW50ID0gMDsKICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzID0gR1JQQ19TVEFUVVNfT0s7Ci0gIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gInh5eiI7CisgIGdycGNfc2xpY2Ugc3RhdHVzX2RldGFpbHMgPSBncnBjX3NsaWNlX2Zyb21fc3RhdGljX3N0cmluZygieHl6Iik7CisgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gJnN0YXR1c19kZXRhaWxzOwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtMzcyLDcgKzM3Myw3IEBACiAgICAgd2hpbGUgKCFleGl0KSB7CiAgICAgICBvcCA9IG9wczsKICAgICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlID0gJnJlcXVlc3RfcGF5bG9hZF9yZWN2OworICAgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXF1ZXN0X3BheWxvYWRfcmVjdjsKICAgICAgIG9wLT5mbGFncyA9IDA7CiAgICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgICAgb3ArKzsKQEAgLTQwMSw3ICs0MDIsNyBAQAogICAgICAgICAgICAgZ3JwY19yYXdfYnl0ZV9idWZmZXJfY3JlYXRlKCZyZXNwb25zZV9wYXlsb2FkX3NsaWNlLCAxKTsKICAgICAgICAgb3AgPSBvcHM7CiAgICAgICAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICAgICAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2UgPSByZXNwb25zZV9wYXlsb2FkOworICAgICAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVzcG9uc2VfcGF5bG9hZDsKICAgICAgICAgb3AtPmZsYWdzID0gMDsKICAgICAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICAgICAgb3ArKzsKQEAgLTQzMyw3ICs0MzQsOSBAQAogICAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9TVEFUVVNfRlJPTV9TRVJWRVI7CiAgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIudHJhaWxpbmdfbWV0YWRhdGFfY291bnQgPSAwOwogICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1cyA9IEdSUENfU1RBVFVTX09LOwotICAgIG9wLT5kYXRhLnNlbmRfc3RhdHVzX2Zyb21fc2VydmVyLnN0YXR1c19kZXRhaWxzID0gIkJhY2tlbmQgc2VydmVyIG91dCBhLW9rIjsKKyAgICBncnBjX3NsaWNlIHN0YXR1c19kZXRhaWxzID0KKyAgICAgICAgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIkJhY2tlbmQgc2VydmVyIG91dCBhLW9rIik7CisgICAgb3AtPmRhdGEuc2VuZF9zdGF0dXNfZnJvbV9zZXJ2ZXIuc3RhdHVzX2RldGFpbHMgPSAmc3RhdHVzX2RldGFpbHM7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC00NjIsOCArNDY1LDcgQEAKICAgZ3JwY19tZXRhZGF0YV9hcnJheSB0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBncnBjX3N0YXR1c19jb2RlIHN0YXR1czsKICAgZ3JwY19jYWxsX2Vycm9yIGVycm9yOwotICBjaGFyICpkZXRhaWxzID0gTlVMTDsKLSAgc2l6ZV90IGRldGFpbHNfY2FwYWNpdHkgPSAwOworICBncnBjX3NsaWNlIGRldGFpbHM7CiAgIGdycGNfYnl0ZV9idWZmZXIgKnJlcXVlc3RfcGF5bG9hZDsKICAgZ3JwY19ieXRlX2J1ZmZlciAqcmVzcG9uc2VfcGF5bG9hZF9yZWN2OwogICBpbnQgaTsKQEAgLTQ3Miw5ICs0NzQsMTEgQEAKICAgZ3JwY19zbGljZSByZXF1ZXN0X3BheWxvYWRfc2xpY2UgPQogICAgICAgZ3JwY19zbGljZV9mcm9tX2NvcGllZF9zdHJpbmcoImhlbGxvIHdvcmxkIik7CiAKKyAgZ3JwY19zbGljZSBob3N0ID0gZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoImZvby50ZXN0Lmdvb2dsZS5mcjoxMjM0Iik7CiAgIGMgPSBncnBjX2NoYW5uZWxfY3JlYXRlX2NhbGwoY2YtPmNsaWVudCwgTlVMTCwgR1JQQ19QUk9QQUdBVEVfREVGQVVMVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YtPmNxLCAiL2ZvbyIsICJmb28udGVzdC5nb29nbGUuZnI6MTIzNCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JQQ19USU1FT1VUX1NFQ09ORFNfVE9fREVBRExJTkUoNSksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5jcSwgZ3JwY19zbGljZV9mcm9tX3N0YXRpY19zdHJpbmcoIi9mb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCwgR1JQQ19USU1FT1VUX1NFQ09ORFNfVE9fREVBRExJTkUoNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgIGdwcl9sb2coR1BSX0lORk8sICJDYWxsIDB4JSIgUFJJeFBUUiAiIGNyZWF0ZWQiLCAoaW50cHRyX3QpYyk7CiAgIEdQUl9BU1NFUlQoYyk7CiAgIGNoYXIgKnBlZXI7CkBAIC00ODksNyArNDkzLDcgQEAKICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgb3ArKzsKICAgb3AtPm9wID0gR1JQQ19PUF9SRUNWX0lOSVRJQUxfTUVUQURBVEE7Ci0gIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YSA9ICZpbml0aWFsX21ldGFkYXRhX3JlY3Y7CisgIG9wLT5kYXRhLnJlY3ZfaW5pdGlhbF9tZXRhZGF0YS5yZWN2X2luaXRpYWxfbWV0YWRhdGEgPSAmaW5pdGlhbF9tZXRhZGF0YV9yZWN2OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtNDk3LDcgKzUwMSw2IEBACiAgIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC50cmFpbGluZ19tZXRhZGF0YSA9ICZ0cmFpbGluZ19tZXRhZGF0YV9yZWN2OwogICBvcC0+ZGF0YS5yZWN2X3N0YXR1c19vbl9jbGllbnQuc3RhdHVzID0gJnN0YXR1czsKICAgb3AtPmRhdGEucmVjdl9zdGF0dXNfb25fY2xpZW50LnN0YXR1c19kZXRhaWxzID0gJmRldGFpbHM7Ci0gIG9wLT5kYXRhLnJlY3Zfc3RhdHVzX29uX2NsaWVudC5zdGF0dXNfZGV0YWlsc19jYXBhY2l0eSA9ICZkZXRhaWxzX2NhcGFjaXR5OwogICBvcC0+ZmxhZ3MgPSAwOwogICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICBvcCsrOwpAQCAtNTA5LDEyICs1MTIsMTIgQEAKIAogICAgIG9wID0gb3BzOwogICAgIG9wLT5vcCA9IEdSUENfT1BfU0VORF9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnNlbmRfbWVzc2FnZSA9IHJlcXVlc3RfcGF5bG9hZDsKKyAgICBvcC0+ZGF0YS5zZW5kX21lc3NhZ2Uuc2VuZF9tZXNzYWdlID0gcmVxdWVzdF9wYXlsb2FkOwogICAgIG9wLT5mbGFncyA9IDA7CiAgICAgb3AtPnJlc2VydmVkID0gTlVMTDsKICAgICBvcCsrOwogICAgIG9wLT5vcCA9IEdSUENfT1BfUkVDVl9NRVNTQUdFOwotICAgIG9wLT5kYXRhLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CisgICAgb3AtPmRhdGEucmVjdl9tZXNzYWdlLnJlY3ZfbWVzc2FnZSA9ICZyZXNwb25zZV9wYXlsb2FkX3JlY3Y7CiAgICAgb3AtPmZsYWdzID0gMDsKICAgICBvcC0+cmVzZXJ2ZWQgPSBOVUxMOwogICAgIG9wKys7CkBAIC01NTMsNyArNTU2LDcgQEAKIAogICBncnBjX21ldGFkYXRhX2FycmF5X2Rlc3Ryb3koJmluaXRpYWxfbWV0YWRhdGFfcmVjdik7CiAgIGdycGNfbWV0YWRhdGFfYXJyYXlfZGVzdHJveSgmdHJhaWxpbmdfbWV0YWRhdGFfcmVjdik7Ci0gIGdwcl9mcmVlKGRldGFpbHMpOworICBncnBjX3NsaWNlX3VucmVmKGRldGFpbHMpOwogICBncHJfbG9nKEdQUl9JTkZPLCAiQ2xpZW50IGNhbGwgKHBlZXIgJXMpIERFU1RST1lFRC4iLCBwZWVyKTsKICAgZ3ByX2ZyZWUocGVlcik7CiB9CmRpZmYgLS1naXQgYS90ZXN0L2NwcC9pbnRlcm9wL2NsaWVudC5jYyBiL3Rlc3QvY3BwL2ludGVyb3AvY2xpZW50LmNjCmluZGV4IDMyNjU1NTQuLjFkZjJmYzggMTAwNjQ0Ci0tLSBhL3Rlc3QvY3BwL2ludGVyb3AvY2xpZW50LmNjCisrKyBiL3Rlc3QvY3BwL2ludGVyb3AvY2xpZW50LmNjCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKQEAgLTEwOCwxMTkgKzEwOSw3OCBAQAogICBncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50IGNsaWVudChDcmVhdGVDaGFubmVsRm9yVGVzdENhc2UoRkxBR1NfdGVzdF9jYXNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR1NfZG9fbm90X2Fib3J0X29uX3RyYW5zaWVudF9mYWlsdXJlcyk7Ci0gIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gImVtcHR5X3VuYXJ5IikgewotICAgIGNsaWVudC5Eb0VtcHR5KCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJsYXJnZV91bmFyeSIpIHsKLSAgICBjbGllbnQuRG9MYXJnZVVuYXJ5KCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJzZXJ2ZXJfY29tcHJlc3NlZF91bmFyeSIpIHsKLSAgICBjbGllbnQuRG9TZXJ2ZXJDb21wcmVzc2VkVW5hcnkoKTsKLSAgfSBlbHNlIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gImNsaWVudF9jb21wcmVzc2VkX3VuYXJ5IikgewotICAgIGNsaWVudC5Eb0NsaWVudENvbXByZXNzZWRVbmFyeSgpOwotICB9IGVsc2UgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAiY2xpZW50X3N0cmVhbWluZyIpIHsKLSAgICBjbGllbnQuRG9SZXF1ZXN0U3RyZWFtaW5nKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJzZXJ2ZXJfc3RyZWFtaW5nIikgewotICAgIGNsaWVudC5Eb1Jlc3BvbnNlU3RyZWFtaW5nKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJzZXJ2ZXJfY29tcHJlc3NlZF9zdHJlYW1pbmciKSB7Ci0gICAgY2xpZW50LkRvU2VydmVyQ29tcHJlc3NlZFN0cmVhbWluZygpOwotICB9IGVsc2UgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAiY2xpZW50X2NvbXByZXNzZWRfc3RyZWFtaW5nIikgewotICAgIGNsaWVudC5Eb0NsaWVudENvbXByZXNzZWRTdHJlYW1pbmcoKTsKLSAgfSBlbHNlIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gInNsb3dfY29uc3VtZXIiKSB7Ci0gICAgY2xpZW50LkRvUmVzcG9uc2VTdHJlYW1pbmdXaXRoU2xvd0NvbnN1bWVyKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJoYWxmX2R1cGxleCIpIHsKLSAgICBjbGllbnQuRG9IYWxmRHVwbGV4KCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJwaW5nX3BvbmciKSB7Ci0gICAgY2xpZW50LkRvUGluZ1BvbmcoKTsKLSAgfSBlbHNlIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gImNhbmNlbF9hZnRlcl9iZWdpbiIpIHsKLSAgICBjbGllbnQuRG9DYW5jZWxBZnRlckJlZ2luKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJjYW5jZWxfYWZ0ZXJfZmlyc3RfcmVzcG9uc2UiKSB7Ci0gICAgY2xpZW50LkRvQ2FuY2VsQWZ0ZXJGaXJzdFJlc3BvbnNlKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJ0aW1lb3V0X29uX3NsZWVwaW5nX3NlcnZlciIpIHsKLSAgICBjbGllbnQuRG9UaW1lb3V0T25TbGVlcGluZ1NlcnZlcigpOwotICB9IGVsc2UgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAiZW1wdHlfc3RyZWFtIikgewotICAgIGNsaWVudC5Eb0VtcHR5U3RyZWFtKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJjb21wdXRlX2VuZ2luZV9jcmVkcyIpIHsKLSAgICBjbGllbnQuRG9Db21wdXRlRW5naW5lQ3JlZHMoRkxBR1NfZGVmYXVsdF9zZXJ2aWNlX2FjY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQUdTX29hdXRoX3Njb3BlKTsKLSAgfSBlbHNlIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gImp3dF90b2tlbl9jcmVkcyIpIHsKLSAgICBncnBjOjpzdHJpbmcganNvbl9rZXkgPSBHZXRTZXJ2aWNlQWNjb3VudEpzb25LZXkoKTsKLSAgICBjbGllbnQuRG9Kd3RUb2tlbkNyZWRzKGpzb25fa2V5KTsKLSAgfSBlbHNlIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gIm9hdXRoMl9hdXRoX3Rva2VuIikgewotICAgIGNsaWVudC5Eb09hdXRoMkF1dGhUb2tlbihGTEFHU19kZWZhdWx0X3NlcnZpY2VfYWNjb3VudCwgRkxBR1Nfb2F1dGhfc2NvcGUpOwotICB9IGVsc2UgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAicGVyX3JwY19jcmVkcyIpIHsKLSAgICBncnBjOjpzdHJpbmcganNvbl9rZXkgPSBHZXRTZXJ2aWNlQWNjb3VudEpzb25LZXkoKTsKLSAgICBjbGllbnQuRG9QZXJScGNDcmVkcyhqc29uX2tleSk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJzdGF0dXNfY29kZV9hbmRfbWVzc2FnZSIpIHsKLSAgICBjbGllbnQuRG9TdGF0dXNXaXRoTWVzc2FnZSgpOwotICB9IGVsc2UgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAiY3VzdG9tX21ldGFkYXRhIikgewotICAgIGNsaWVudC5Eb0N1c3RvbU1ldGFkYXRhKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJ1bmltcGxlbWVudGVkX21ldGhvZCIpIHsKLSAgICBjbGllbnQuRG9VbmltcGxlbWVudGVkTWV0aG9kKCk7Ci0gIH0gZWxzZSBpZiAoRkxBR1NfdGVzdF9jYXNlID09ICJ1bmltcGxlbWVudGVkX3NlcnZpY2UiKSB7Ci0gICAgY2xpZW50LkRvVW5pbXBsZW1lbnRlZFNlcnZpY2UoKTsKLSAgfSBlbHNlIGlmIChGTEFHU190ZXN0X2Nhc2UgPT0gImNhY2hlYWJsZV91bmFyeSIpIHsKLSAgICBjbGllbnQuRG9DYWNoZWFibGVVbmFyeSgpOwotICB9IGVsc2UgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAiYWxsIikgewotICAgIGNsaWVudC5Eb0VtcHR5KCk7Ci0gICAgY2xpZW50LkRvTGFyZ2VVbmFyeSgpOwotICAgIGNsaWVudC5Eb0NsaWVudENvbXByZXNzZWRVbmFyeSgpOwotICAgIGNsaWVudC5Eb1NlcnZlckNvbXByZXNzZWRVbmFyeSgpOwotICAgIGNsaWVudC5Eb1JlcXVlc3RTdHJlYW1pbmcoKTsKLSAgICBjbGllbnQuRG9SZXNwb25zZVN0cmVhbWluZygpOwotICAgIGNsaWVudC5Eb0NsaWVudENvbXByZXNzZWRTdHJlYW1pbmcoKTsKLSAgICBjbGllbnQuRG9TZXJ2ZXJDb21wcmVzc2VkU3RyZWFtaW5nKCk7Ci0gICAgY2xpZW50LkRvSGFsZkR1cGxleCgpOwotICAgIGNsaWVudC5Eb1BpbmdQb25nKCk7Ci0gICAgY2xpZW50LkRvQ2FuY2VsQWZ0ZXJCZWdpbigpOwotICAgIGNsaWVudC5Eb0NhbmNlbEFmdGVyRmlyc3RSZXNwb25zZSgpOwotICAgIGNsaWVudC5Eb1RpbWVvdXRPblNsZWVwaW5nU2VydmVyKCk7Ci0gICAgY2xpZW50LkRvRW1wdHlTdHJlYW0oKTsKLSAgICBjbGllbnQuRG9TdGF0dXNXaXRoTWVzc2FnZSgpOwotICAgIGNsaWVudC5Eb0N1c3RvbU1ldGFkYXRhKCk7Ci0gICAgY2xpZW50LkRvVW5pbXBsZW1lbnRlZE1ldGhvZCgpOwotICAgIGNsaWVudC5Eb1VuaW1wbGVtZW50ZWRTZXJ2aWNlKCk7Ci0gICAgY2xpZW50LkRvQ2FjaGVhYmxlVW5hcnkoKTsKLSAgICAvLyBzZXJ2aWNlX2FjY291bnRfY3JlZHMgYW5kIGp3dF90b2tlbl9jcmVkcyBjYW4gb25seSBydW4gd2l0aCBzc2wuCi0gICAgaWYgKEZMQUdTX3VzZV90bHMpIHsKLSAgICAgIGdycGM6OnN0cmluZyBqc29uX2tleSA9IEdldFNlcnZpY2VBY2NvdW50SnNvbktleSgpOwotICAgICAgY2xpZW50LkRvSnd0VG9rZW5DcmVkcyhqc29uX2tleSk7Ci0gICAgICBjbGllbnQuRG9PYXV0aDJBdXRoVG9rZW4oRkxBR1NfZGVmYXVsdF9zZXJ2aWNlX2FjY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR1Nfb2F1dGhfc2NvcGUpOwotICAgICAgY2xpZW50LkRvUGVyUnBjQ3JlZHMoanNvbl9rZXkpOwotICAgIH0KLSAgICAvLyBjb21wdXRlX2VuZ2luZV9jcmVkcyBvbmx5IHJ1bnMgaW4gR0NFLgotICB9IGVsc2UgewotICAgIGNvbnN0IGNoYXIqIHRlc3RjYXNlc1tdID0geyJhbGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWNoZWFibGVfdW5hcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5jZWxfYWZ0ZXJfYmVnaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5jZWxfYWZ0ZXJfZmlyc3RfcmVzcG9uc2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnRfY29tcHJlc3NlZF9zdHJlYW1pbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnRfY29tcHJlc3NlZF91bmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudF9zdHJlYW1pbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wdXRlX2VuZ2luZV9jcmVkcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1c3RvbV9tZXRhZGF0YSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVtcHR5X3N0cmVhbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVtcHR5X3VuYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFsZl9kdXBsZXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqd3RfdG9rZW5fY3JlZHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXJnZV91bmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9hdXRoMl9hdXRoX3Rva2VuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2F1dGgyX2F1dGhfdG9rZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJfcnBjX2NyZWRzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyX3JwY19jcmVkcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpbmdfcG9uZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlcl9jb21wcmVzc2VkX3N0cmVhbWluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlcl9jb21wcmVzc2VkX3VuYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyX3N0cmVhbWluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1c19jb2RlX2FuZF9tZXNzYWdlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dF9vbl9zbGVlcGluZ19zZXJ2ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmltcGxlbWVudGVkX21ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaW1wbGVtZW50ZWRfc2VydmljZSJ9OwotICAgIGNoYXIqIGpvaW5lZF90ZXN0Y2FzZXMgPQotICAgICAgICBncHJfc3Ryam9pbl9zZXAodGVzdGNhc2VzLCBHUFJfQVJSQVlfU0laRSh0ZXN0Y2FzZXMpLCAiXG4iLCBOVUxMKTsKIAorICBzdGQ6OnVub3JkZXJlZF9tYXA8Z3JwYzo6c3RyaW5nLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4+IGFjdGlvbnM7CisgIGFjdGlvbnNbImVtcHR5X3VuYXJ5Il0gPQorICAgICAgc3RkOjpiaW5kKCZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb0VtcHR5LCAmY2xpZW50KTsKKyAgYWN0aW9uc1sibGFyZ2VfdW5hcnkiXSA9CisgICAgICBzdGQ6OmJpbmQoJmdycGM6OnRlc3Rpbmc6OkludGVyb3BDbGllbnQ6OkRvTGFyZ2VVbmFyeSwgJmNsaWVudCk7CisgIGFjdGlvbnNbInNlcnZlcl9jb21wcmVzc2VkX3VuYXJ5Il0gPSBzdGQ6OmJpbmQoCisgICAgICAmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9TZXJ2ZXJDb21wcmVzc2VkVW5hcnksICZjbGllbnQpOworICBhY3Rpb25zWyJjbGllbnRfY29tcHJlc3NlZF91bmFyeSJdID0gc3RkOjpiaW5kKAorICAgICAgJmdycGM6OnRlc3Rpbmc6OkludGVyb3BDbGllbnQ6OkRvQ2xpZW50Q29tcHJlc3NlZFVuYXJ5LCAmY2xpZW50KTsKKyAgYWN0aW9uc1siY2xpZW50X3N0cmVhbWluZyJdID0KKyAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9SZXF1ZXN0U3RyZWFtaW5nLCAmY2xpZW50KTsKKyAgYWN0aW9uc1sic2VydmVyX3N0cmVhbWluZyJdID0KKyAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9SZXNwb25zZVN0cmVhbWluZywgJmNsaWVudCk7CisgIGFjdGlvbnNbInNlcnZlcl9jb21wcmVzc2VkX3N0cmVhbWluZyJdID0gc3RkOjpiaW5kKAorICAgICAgJmdycGM6OnRlc3Rpbmc6OkludGVyb3BDbGllbnQ6OkRvU2VydmVyQ29tcHJlc3NlZFN0cmVhbWluZywgJmNsaWVudCk7CisgIGFjdGlvbnNbImNsaWVudF9jb21wcmVzc2VkX3N0cmVhbWluZyJdID0gc3RkOjpiaW5kKAorICAgICAgJmdycGM6OnRlc3Rpbmc6OkludGVyb3BDbGllbnQ6OkRvQ2xpZW50Q29tcHJlc3NlZFN0cmVhbWluZywgJmNsaWVudCk7CisgIGFjdGlvbnNbInNsb3dfY29uc3VtZXIiXSA9IHN0ZDo6YmluZCgKKyAgICAgICZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb1Jlc3BvbnNlU3RyZWFtaW5nV2l0aFNsb3dDb25zdW1lciwKKyAgICAgICZjbGllbnQpOworICBhY3Rpb25zWyJoYWxmX2R1cGxleCJdID0KKyAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9IYWxmRHVwbGV4LCAmY2xpZW50KTsKKyAgYWN0aW9uc1sicGluZ19wb25nIl0gPQorICAgICAgc3RkOjpiaW5kKCZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb1BpbmdQb25nLCAmY2xpZW50KTsKKyAgYWN0aW9uc1siY2FuY2VsX2FmdGVyX2JlZ2luIl0gPQorICAgICAgc3RkOjpiaW5kKCZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb0NhbmNlbEFmdGVyQmVnaW4sICZjbGllbnQpOworICBhY3Rpb25zWyJjYW5jZWxfYWZ0ZXJfZmlyc3RfcmVzcG9uc2UiXSA9IHN0ZDo6YmluZCgKKyAgICAgICZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb0NhbmNlbEFmdGVyRmlyc3RSZXNwb25zZSwgJmNsaWVudCk7CisgIGFjdGlvbnNbInRpbWVvdXRfb25fc2xlZXBpbmdfc2VydmVyIl0gPSBzdGQ6OmJpbmQoCisgICAgICAmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9UaW1lb3V0T25TbGVlcGluZ1NlcnZlciwgJmNsaWVudCk7CisgIGFjdGlvbnNbImVtcHR5X3N0cmVhbSJdID0KKyAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9FbXB0eVN0cmVhbSwgJmNsaWVudCk7CisgIGlmIChGTEFHU191c2VfdGxzKSB7CisgICAgYWN0aW9uc1siY29tcHV0ZV9lbmdpbmVfY3JlZHMiXSA9CisgICAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9Db21wdXRlRW5naW5lQ3JlZHMsICZjbGllbnQsCisgICAgICAgICAgICAgICAgICBGTEFHU19kZWZhdWx0X3NlcnZpY2VfYWNjb3VudCwgRkxBR1Nfb2F1dGhfc2NvcGUpOworICAgIGFjdGlvbnNbImp3dF90b2tlbl9jcmVkcyJdID0KKyAgICAgICAgc3RkOjpiaW5kKCZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb0p3dFRva2VuQ3JlZHMsICZjbGllbnQsCisgICAgICAgICAgICAgICAgICBHZXRTZXJ2aWNlQWNjb3VudEpzb25LZXkoKSk7CisgICAgYWN0aW9uc1sib2F1dGgyX2F1dGhfdG9rZW4iXSA9CisgICAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9PYXV0aDJBdXRoVG9rZW4sICZjbGllbnQsCisgICAgICAgICAgICAgICAgICBGTEFHU19kZWZhdWx0X3NlcnZpY2VfYWNjb3VudCwgRkxBR1Nfb2F1dGhfc2NvcGUpOworICAgIGFjdGlvbnNbInBlcl9ycGNfY3JlZHMiXSA9CisgICAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9QZXJScGNDcmVkcywgJmNsaWVudCwKKyAgICAgICAgICAgICAgICAgIEdldFNlcnZpY2VBY2NvdW50SnNvbktleSgpKTsKKyAgfQorICBhY3Rpb25zWyJzdGF0dXNfY29kZV9hbmRfbWVzc2FnZSJdID0KKyAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9TdGF0dXNXaXRoTWVzc2FnZSwgJmNsaWVudCk7CisgIGFjdGlvbnNbImN1c3RvbV9tZXRhZGF0YSJdID0KKyAgICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9DdXN0b21NZXRhZGF0YSwgJmNsaWVudCk7CisgIGFjdGlvbnNbInVuaW1wbGVtZW50ZWRfbWV0aG9kIl0gPQorICAgICAgc3RkOjpiaW5kKCZncnBjOjp0ZXN0aW5nOjpJbnRlcm9wQ2xpZW50OjpEb1VuaW1wbGVtZW50ZWRNZXRob2QsICZjbGllbnQpOworICBhY3Rpb25zWyJ1bmltcGxlbWVudGVkX3NlcnZpY2UiXSA9CisgICAgICBzdGQ6OmJpbmQoJmdycGM6OnRlc3Rpbmc6OkludGVyb3BDbGllbnQ6OkRvVW5pbXBsZW1lbnRlZFNlcnZpY2UsICZjbGllbnQpOworICAvLyBhY3Rpb25zWyJjYWNoZWFibGVfdW5hcnkiXSA9CisgIC8vICAgIHN0ZDo6YmluZCgmZ3JwYzo6dGVzdGluZzo6SW50ZXJvcENsaWVudDo6RG9DYWNoZWFibGVVbmFyeSwgJmNsaWVudCk7CisKKyAgaWYgKEZMQUdTX3Rlc3RfY2FzZSA9PSAiYWxsIikgeworICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogYWN0aW9ucykgeworICAgICAgYWN0aW9uLnNlY29uZCgpOworICAgIH0KKyAgfSBlbHNlIGlmIChhY3Rpb25zLmZpbmQoRkxBR1NfdGVzdF9jYXNlKSAhPSBhY3Rpb25zLmVuZCgpKSB7CisgICAgYWN0aW9ucy5maW5kKEZMQUdTX3Rlc3RfY2FzZSktPnNlY29uZCgpOworICB9IGVsc2UgeworICAgIGdycGM6OnN0cmluZyB0ZXN0X2Nhc2VzOworICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogYWN0aW9ucykgeworICAgICAgaWYgKCF0ZXN0X2Nhc2VzLmVtcHR5KCkpIHRlc3RfY2FzZXMgKz0gIlxuIjsKKyAgICAgIHRlc3RfY2FzZXMgKz0gYWN0aW9uLmZpcnN0OworICAgIH0KICAgICBncHJfbG9nKEdQUl9FUlJPUiwgIlVuc3VwcG9ydGVkIHRlc3QgY2FzZSAlcy4gVmFsaWQgb3B0aW9ucyBhcmVcbiVzIiwKLSAgICAgICAgICAgIEZMQUdTX3Rlc3RfY2FzZS5jX3N0cigpLCBqb2luZWRfdGVzdGNhc2VzKTsKLSAgICBncHJfZnJlZShqb2luZWRfdGVzdGNhc2VzKTsKKyAgICAgICAgICAgIEZMQUdTX3Rlc3RfY2FzZS5jX3N0cigpLCB0ZXN0X2Nhc2VzLmNfc3RyKCkpOwogICAgIHJldCA9IDE7CiAgIH0KIApkaWZmIC0tZ2l0IGEvdGVzdC9jcHAvaW50ZXJvcC9pbnRlcm9wX2NsaWVudC5jYyBiL3Rlc3QvY3BwL2ludGVyb3AvaW50ZXJvcF9jbGllbnQuY2MKaW5kZXggZDEyNDI2Mi4uYWEzNGQ5NCAxMDA2NDQKLS0tIGEvdGVzdC9jcHAvaW50ZXJvcC9pbnRlcm9wX2NsaWVudC5jYworKysgYi90ZXN0L2NwcC9pbnRlcm9wL2ludGVyb3BfY2xpZW50LmNjCkBAIC0xMDksNyArMTA5LDEwIEBACiAKIFVuaW1wbGVtZW50ZWRTZXJ2aWNlOjpTdHViKgogSW50ZXJvcENsaWVudDo6U2VydmljZVN0dWI6OkdldFVuaW1wbGVtZW50ZWRTZXJ2aWNlU3R1YigpIHsKLSAgcmV0dXJuIFVuaW1wbGVtZW50ZWRTZXJ2aWNlOjpOZXdTdHViKGNoYW5uZWxfKS5nZXQoKTsKKyAgaWYgKHVuaW1wbGVtZW50ZWRfc2VydmljZV9zdHViXyA9PSBudWxscHRyKSB7CisgICAgdW5pbXBsZW1lbnRlZF9zZXJ2aWNlX3N0dWJfID0gVW5pbXBsZW1lbnRlZFNlcnZpY2U6Ok5ld1N0dWIoY2hhbm5lbF8pOworICB9CisgIHJldHVybiB1bmltcGxlbWVudGVkX3NlcnZpY2Vfc3R1Yl8uZ2V0KCk7CiB9CiAKIHZvaWQgSW50ZXJvcENsaWVudDo6U2VydmljZVN0dWI6OlJlc2V0KHN0ZDo6c2hhcmVkX3B0cjxDaGFubmVsPiBjaGFubmVsKSB7CkBAIC05NDMsNyArOTQ2LDcgQEAKICAgICBjb25zdCBhdXRvJiBzZXJ2ZXJfaW5pdGlhbF9tZXRhZGF0YSA9IGNvbnRleHQuR2V0U2VydmVySW5pdGlhbE1ldGFkYXRhKCk7CiAgICAgYXV0byBpdGVyID0gc2VydmVyX2luaXRpYWxfbWV0YWRhdGEuZmluZChrRWNob0luaXRpYWxNZXRhZGF0YUtleSk7CiAgICAgR1BSX0FTU0VSVChpdGVyICE9IHNlcnZlcl9pbml0aWFsX21ldGFkYXRhLmVuZCgpKTsKLSAgICBHUFJfQVNTRVJUKGl0ZXItPnNlY29uZC5kYXRhKCkgPT0ga0luaXRpYWxNZXRhZGF0YVZhbHVlKTsKKyAgICBHUFJfQVNTRVJUKGl0ZXItPnNlY29uZCA9PSBrSW5pdGlhbE1ldGFkYXRhVmFsdWUpOwogICAgIGNvbnN0IGF1dG8mIHNlcnZlcl90cmFpbGluZ19tZXRhZGF0YSA9IGNvbnRleHQuR2V0U2VydmVyVHJhaWxpbmdNZXRhZGF0YSgpOwogICAgIGl0ZXIgPSBzZXJ2ZXJfdHJhaWxpbmdfbWV0YWRhdGEuZmluZChrRWNob1RyYWlsaW5nQmluTWV0YWRhdGFLZXkpOwogICAgIEdQUl9BU1NFUlQoaXRlciAhPSBzZXJ2ZXJfdHJhaWxpbmdfbWV0YWRhdGEuZW5kKCkpOwpAQCAtOTk0LDcgKzk5Nyw3IEBACiAgICAgY29uc3QgYXV0byYgc2VydmVyX2luaXRpYWxfbWV0YWRhdGEgPSBjb250ZXh0LkdldFNlcnZlckluaXRpYWxNZXRhZGF0YSgpOwogICAgIGF1dG8gaXRlciA9IHNlcnZlcl9pbml0aWFsX21ldGFkYXRhLmZpbmQoa0VjaG9Jbml0aWFsTWV0YWRhdGFLZXkpOwogICAgIEdQUl9BU1NFUlQoaXRlciAhPSBzZXJ2ZXJfaW5pdGlhbF9tZXRhZGF0YS5lbmQoKSk7Ci0gICAgR1BSX0FTU0VSVChpdGVyLT5zZWNvbmQuZGF0YSgpID09IGtJbml0aWFsTWV0YWRhdGFWYWx1ZSk7CisgICAgR1BSX0FTU0VSVChpdGVyLT5zZWNvbmQgPT0ga0luaXRpYWxNZXRhZGF0YVZhbHVlKTsKICAgICBjb25zdCBhdXRvJiBzZXJ2ZXJfdHJhaWxpbmdfbWV0YWRhdGEgPSBjb250ZXh0LkdldFNlcnZlclRyYWlsaW5nTWV0YWRhdGEoKTsKICAgICBpdGVyID0gc2VydmVyX3RyYWlsaW5nX21ldGFkYXRhLmZpbmQoa0VjaG9UcmFpbGluZ0Jpbk1ldGFkYXRhS2V5KTsKICAgICBHUFJfQVNTRVJUKGl0ZXIgIT0gc2VydmVyX3RyYWlsaW5nX21ldGFkYXRhLmVuZCgpKTsKZGlmZiAtLWdpdCBhL3Rlc3QvY3BwL2ludGVyb3AvaW50ZXJvcF9jbGllbnQuaCBiL3Rlc3QvY3BwL2ludGVyb3AvaW50ZXJvcF9jbGllbnQuaAppbmRleCA3ZWM3ZWJlLi43NGY0ZGI2IDEwMDY0NAotLS0gYS90ZXN0L2NwcC9pbnRlcm9wL2ludGVyb3BfY2xpZW50LmgKKysrIGIvdGVzdC9jcHAvaW50ZXJvcC9pbnRlcm9wX2NsaWVudC5oCkBAIC0xMDcsNiArMTA3LDcgQEAKIAogICAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdFNlcnZpY2U6OlN0dWI+IHN0dWJfOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbmltcGxlbWVudGVkU2VydmljZTo6U3R1Yj4gdW5pbXBsZW1lbnRlZF9zZXJ2aWNlX3N0dWJfOwogICAgIHN0ZDo6c2hhcmVkX3B0cjxDaGFubmVsPiBjaGFubmVsXzsKICAgICBib29sIG5ld19zdHViX2V2ZXJ5X2NhbGxfOyAgLy8gSWYgdHJ1ZSwgYSBuZXcgc3R1YiBpcyByZXR1cm5lZCBieSBldmVyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQoKSBjYWxsCmRpZmYgLS1naXQgYS90ZXN0L2NwcC9pbnRlcm9wL2ludGVyb3Bfc2VydmVyLmNjIGIvdGVzdC9jcHAvaW50ZXJvcC9pbnRlcm9wX3NlcnZlci5jYwppbmRleCA5NTY4NDBiLi4xODEwY2QwIDEwMDY0NAotLS0gYS90ZXN0L2NwcC9pbnRlcm9wL2ludGVyb3Bfc2VydmVyLmNjCisrKyBiL3Rlc3QvY3BwL2ludGVyb3AvaW50ZXJvcF9zZXJ2ZXIuY2MKQEAgLTkxLDcgKzkxLDkgQEAKIAogICBhdXRvIGl0ZXIgPSBjbGllbnRfbWV0YWRhdGEuZmluZChrRWNob0luaXRpYWxNZXRhZGF0YUtleSk7CiAgIGlmIChpdGVyICE9IGNsaWVudF9tZXRhZGF0YS5lbmQoKSkgewotICAgIGNvbnRleHQtPkFkZEluaXRpYWxNZXRhZGF0YShrRWNob0luaXRpYWxNZXRhZGF0YUtleSwgaXRlci0+c2Vjb25kLmRhdGEoKSk7CisgICAgY29udGV4dC0+QWRkSW5pdGlhbE1ldGFkYXRhKAorICAgICAgICBrRWNob0luaXRpYWxNZXRhZGF0YUtleSwKKyAgICAgICAgZ3JwYzo6c3RyaW5nKGl0ZXItPnNlY29uZC5iZWdpbigpLCBpdGVyLT5zZWNvbmQuZW5kKCkpKTsKICAgfQogICBpdGVyID0gY2xpZW50X21ldGFkYXRhLmZpbmQoa0VjaG9UcmFpbGluZ0Jpbk1ldGFkYXRhS2V5KTsKICAgaWYgKGl0ZXIgIT0gY2xpZW50X21ldGFkYXRhLmVuZCgpKSB7CmRpZmYgLS1naXQgYS90ZXN0L2NwcC9taWNyb2JlbmNobWFya3MvYm1fZnVsbHN0YWNrLmNjIGIvdGVzdC9jcHAvbWljcm9iZW5jaG1hcmtzL2JtX2Z1bGxzdGFjay5jYwppbmRleCA2YzBiZjgwLi5iZDE1OGRiIDEwMDY0NAotLS0gYS90ZXN0L2NwcC9taWNyb2JlbmNobWFya3MvYm1fZnVsbHN0YWNrLmNjCisrKyBiL3Rlc3QvY3BwL21pY3JvYmVuY2htYXJrcy9ibV9mdWxsc3RhY2suY2MKQEAgLTQ0Myw2ICs0NDMsOCBAQAogICAgICAgICAgICAgICAgICAgIFNlcnZlcl9BZGRJbml0aWFsTWV0YWRhdGE8UmFuZG9tQXNjaWlNZXRhZGF0YTwzMT4sIDE+KTsKIEJFTkNITUFSS19URU1QTEFURShCTV9VbmFyeVBpbmdQb25nLCBJblByb2Nlc3NDSFRUUDIsIE5vT3BNdXRhdG9yLAogICAgICAgICAgICAgICAgICAgIFNlcnZlcl9BZGRJbml0aWFsTWV0YWRhdGE8UmFuZG9tQXNjaWlNZXRhZGF0YTwxMDA+LCAxPik7CitCRU5DSE1BUktfVEVNUExBVEUoQk1fVW5hcnlQaW5nUG9uZywgSW5Qcm9jZXNzQ0hUVFAyLCBOb09wTXV0YXRvciwKKyAgICAgICAgICAgICAgICAgICBTZXJ2ZXJfQWRkSW5pdGlhbE1ldGFkYXRhPFJhbmRvbUFzY2lpTWV0YWRhdGE8MTA+LCAxMDA+KTsKIAogfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKIH0gIC8vIG5hbWVzcGFjZSBncnBjCmRpZmYgLS1naXQgYS90ZXN0L2NwcC90ZXN0L3NlcnZlcl9jb250ZXh0X3Rlc3Rfc3BvdXNlX3Rlc3QuY2MgYi90ZXN0L2NwcC90ZXN0L3NlcnZlcl9jb250ZXh0X3Rlc3Rfc3BvdXNlX3Rlc3QuY2MKaW5kZXggZTBkNmEyZi4uZWIyNzllMiAxMDA2NDQKLS0tIGEvdGVzdC9jcHAvdGVzdC9zZXJ2ZXJfY29udGV4dF90ZXN0X3Nwb3VzZV90ZXN0LmNjCisrKyBiL3Rlc3QvY3BwL3Rlc3Qvc2VydmVyX2NvbnRleHRfdGVzdF9zcG91c2VfdGVzdC5jYwpAQCAtMzYsMTEgKzM2LDE0IEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxncnBjKysvaW1wbC9ncnBjX2xpYnJhcnkuaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiBuYW1lc3BhY2UgZ3JwYyB7CiBuYW1lc3BhY2UgdGVzdGluZyB7CiAKK3N0YXRpYyBpbnRlcm5hbDo6R3JwY0xpYnJhcnlJbml0aWFsaXplciBnX2luaXRpYWxpemVyOworCiBjb25zdCBjaGFyIGtleTFbXSA9ICJtZXRhZGF0YS1rZXkxIjsKIGNvbnN0IGNoYXIga2V5MltdID0gIm1ldGFkYXRhLWtleTIiOwogY29uc3QgY2hhciB2YWwxW10gPSAibWV0YWRhdGEtdmFsMSI7CmRpZmYgLS1naXQgYS90b29scy9jb2RlZ2VuL2NvcmUvZ2VuX3N0YXRpY19tZXRhZGF0YS5weSBiL3Rvb2xzL2NvZGVnZW4vY29yZS9nZW5fc3RhdGljX21ldGFkYXRhLnB5CmluZGV4IGNmMzc2MmQuLjQ3MDM3MDggMTAwNzU1Ci0tLSBhL3Rvb2xzL2NvZGVnZW4vY29yZS9nZW5fc3RhdGljX21ldGFkYXRhLnB5CisrKyBiL3Rvb2xzL2NvZGVnZW4vY29yZS9nZW5fc3RhdGljX21ldGFkYXRhLnB5CkBAIC0zMSw4ICszMSwxMiBAQAogCiBpbXBvcnQgaGFzaGxpYgogaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2ltcG9ydCBwZXJmZWN0aW9uCiAKICMgY29uZmlndXJhdGlvbjogYSBsaXN0IG9mIGVpdGhlciBzdHJpbmdzIG9yIDItdHVwbGVzIG9mIHN0cmluZ3MKICMgYSBzaW5nbGUgc3RyaW5nIHJlcHJlc2VudHMgYSBzdGF0aWMgZ3JwY19tZHN0cgpAQCAtNDAsNiArNDQsOCBAQAogIyBhbHNvIGJlIGNyZWF0ZWQpCiAKIENPTkZJRyA9IFsKKyAgICAjIG1ldGFkYXRhIHN0cmluZ3MKKyAgICAnaG9zdCcsCiAgICAgJ2dycGMtdGltZW91dCcsCiAgICAgJ2dycGMtaW50ZXJuYWwtZW5jb2RpbmctcmVxdWVzdCcsCiAgICAgJ2dycGMtcGF5bG9hZC1iaW4nLApAQCAtNDgsMTIgKzU0LDE5IEBACiAgICAgJ2dycGMtYWNjZXB0LWVuY29kaW5nJywKICAgICAndXNlci1hZ2VudCcsCiAgICAgJzphdXRob3JpdHknLAotICAgICdob3N0JywKICAgICAnZ3JwYy1tZXNzYWdlJywKICAgICAnZ3JwYy1zdGF0dXMnLAogICAgICdncnBjLXRyYWNpbmctYmluJywKICAgICAnZ3JwYy1zdGF0cy1iaW4nLAogICAgICcnLAorICAgICMgY2hhbm5lbCBhcmcga2V5cworICAgICdncnBjLndhaXRfZm9yX3JlYWR5JywKKyAgICAnZ3JwYy50aW1lb3V0JywKKyAgICAnZ3JwYy5tYXhfcmVxdWVzdF9tZXNzYWdlX2J5dGVzJywKKyAgICAnZ3JwYy5tYXhfcmVzcG9uc2VfbWVzc2FnZV9ieXRlcycsCisgICAgIyB3ZWxsIGtub3duIG1ldGhvZCBuYW1lcworICAgICcvZ3JwYy5sYi52MS5Mb2FkQmFsYW5jZXIvQmFsYW5jZUxvYWQnLAorICAgICMgbWV0YWRhdGEgZWxlbWVudHMKICAgICAoJ2dycGMtc3RhdHVzJywgJzAnKSwKICAgICAoJ2dycGMtc3RhdHVzJywgJzEnKSwKICAgICAoJ2dycGMtc3RhdHVzJywgJzInKSwKQEAgLTEzMCw2ICsxNDMsMjYgQEAKICAgICAoJ3d3dy1hdXRoZW50aWNhdGUnLCAnJyksCiBdCiAKK01FVEFEQVRBX0JBVENIX0NBTExPVVRTID0gWworICAgICc6cGF0aCcsCisgICAgJzptZXRob2QnLAorICAgICc6c3RhdHVzJywKKyAgICAnOmF1dGhvcml0eScsCisgICAgJzpzY2hlbWUnLAorICAgICd0ZScsCisgICAgJ2dycGMtbWVzc2FnZScsCisgICAgJ2dycGMtc3RhdHVzJywKKyAgICAnZ3JwYy1wYXlsb2FkLWJpbicsCisgICAgJ2dycGMtZW5jb2RpbmcnLAorICAgICdncnBjLWFjY2VwdC1lbmNvZGluZycsCisgICAgJ2NvbnRlbnQtdHlwZScsCisgICAgJ2dycGMtaW50ZXJuYWwtZW5jb2RpbmctcmVxdWVzdCcsCisgICAgJ3VzZXItYWdlbnQnLAorICAgICdob3N0JywKKyAgICAnbGItdG9rZW4nLAorICAgICdsYi1jb3N0LWJpbicsCitdCisKIENPTVBSRVNTSU9OX0FMR09SSVRITVMgPSBbCiAgICAgJ2lkZW50aXR5JywKICAgICAnZGVmbGF0ZScsCkBAIC0xMzcsNyArMTcwLDcgQEAKIF0KIAogIyB1dGlsaXR5OiBtYW5nbGUgdGhlIG5hbWUgb2YgYSBjb25maWcKLWRlZiBtYW5nbGUoZWxlbSk6CitkZWYgbWFuZ2xlKGVsZW0sIG5hbWU9Tm9uZSk6CiAgIHhsID0gewogICAgICAgJy0nOiAnXycsCiAgICAgICAnOic6ICcnLApAQCAtMTYyLDEwICsxOTUsMTQgQEAKICAgICAgICAgciArPSBwdXQKICAgICBpZiByWy0xXSA9PSAnXyc6IHIgPSByWzotMV0KICAgICByZXR1cm4gcgorICBkZWYgbihkZWZhdWx0LCBuYW1lPW5hbWUpOgorICAgIGlmIG5hbWUgaXMgTm9uZTogcmV0dXJuICdncnBjXyVzXycgJSBkZWZhdWx0CisgICAgaWYgbmFtZSA9PSAnJzogcmV0dXJuICcnCisgICAgcmV0dXJuICdncnBjXyVzXycgJSBuYW1lCiAgIGlmIGlzaW5zdGFuY2UoZWxlbSwgdHVwbGUpOgotICAgIHJldHVybiAnZ3JwY19tZGVsZW1fJXNfJXMnICUgKG0wKGVsZW1bMF0pLCBtMChlbGVtWzFdKSkKKyAgICByZXR1cm4gJyVzJXNfJXMnICUgKG4oJ21kZWxlbScpLCBtMChlbGVtWzBdKSwgbTAoZWxlbVsxXSkpCiAgIGVsc2U6Ci0gICAgcmV0dXJuICdncnBjX21kc3RyXyVzJyAlIChtMChlbGVtKSkKKyAgICByZXR1cm4gJyVzJXMnICUgKG4oJ21kc3RyJyksIG0wKGVsZW0pKQogCiAjIHV0aWxpdHk6IGdlbmVyYXRlIHNvbWUgaGFzaCB2YWx1ZSBmb3IgYSBzdHJpbmcKIGRlZiBmYWtlX2hhc2goZWxlbSk6CkBAIC0xODEsMjggKzIxOCwzNyBAQAogICAgIHByaW50ID4+ZgogCiAjIGJ1aWxkIGEgbGlzdCBvZiBhbGwgdGhlIHN0cmluZ3Mgd2UgbmVlZAotYWxsX3N0cnMgPSBzZXQoKQotYWxsX2VsZW1zID0gc2V0KCkKK2FsbF9zdHJzID0gbGlzdCgpCithbGxfZWxlbXMgPSBsaXN0KCkKIHN0YXRpY191c2VyZGF0YSA9IHt9CisjIHB1dCBtZXRhZGF0YSBiYXRjaCBjYWxsb3V0cyBmaXJzdCwgdG8gbWFrZSB0aGUgY2hlY2sgb2YgaWYgYSBzdGF0aWMgbWV0YWRhdGEKKyMgc3RyaW5nIGlzIGEgY2FsbG91dCB0cml2aWFsCitmb3IgZWxlbSBpbiBNRVRBREFUQV9CQVRDSF9DQUxMT1VUUzoKKyAgaWYgZWxlbSBub3QgaW4gYWxsX3N0cnM6CisgICAgYWxsX3N0cnMuYXBwZW5kKGVsZW0pCiBmb3IgZWxlbSBpbiBDT05GSUc6CiAgIGlmIGlzaW5zdGFuY2UoZWxlbSwgdHVwbGUpOgotICAgIGFsbF9zdHJzLmFkZChlbGVtWzBdKQotICAgIGFsbF9zdHJzLmFkZChlbGVtWzFdKQotICAgIGFsbF9lbGVtcy5hZGQoZWxlbSkKKyAgICBpZiBlbGVtWzBdIG5vdCBpbiBhbGxfc3RyczoKKyAgICAgIGFsbF9zdHJzLmFwcGVuZChlbGVtWzBdKQorICAgIGlmIGVsZW1bMV0gbm90IGluIGFsbF9zdHJzOgorICAgICAgYWxsX3N0cnMuYXBwZW5kKGVsZW1bMV0pCisgICAgaWYgZWxlbSBub3QgaW4gYWxsX2VsZW1zOgorICAgICAgYWxsX2VsZW1zLmFwcGVuZChlbGVtKQogICBlbHNlOgotICAgIGFsbF9zdHJzLmFkZChlbGVtKQorICAgIGlmIGVsZW0gbm90IGluIGFsbF9zdHJzOgorICAgICAgYWxsX3N0cnMuYXBwZW5kKGVsZW0pCiBjb21wcmVzc2lvbl9lbGVtcyA9IFtdCiBmb3IgbWFzayBpbiByYW5nZSgxLCAxPDxsZW4oQ09NUFJFU1NJT05fQUxHT1JJVEhNUykpOgogICB2YWwgPSAnLCcuam9pbihDT01QUkVTU0lPTl9BTEdPUklUSE1TW2FsZ10KICAgICAgICAgICAgICAgICAgZm9yIGFsZyBpbiByYW5nZSgwLCBsZW4oQ09NUFJFU1NJT05fQUxHT1JJVEhNUykpCiAgICAgICAgICAgICAgICAgIGlmICgxIDw8IGFsZykgJiBtYXNrKQogICBlbGVtID0gKCdncnBjLWFjY2VwdC1lbmNvZGluZycsIHZhbCkKLSAgYWxsX3N0cnMuYWRkKHZhbCkKLSAgYWxsX2VsZW1zLmFkZChlbGVtKQorICBpZiB2YWwgbm90IGluIGFsbF9zdHJzOgorICAgIGFsbF9zdHJzLmFwcGVuZCh2YWwpCisgIGlmIGVsZW0gbm90IGluIGFsbF9lbGVtczoKKyAgICBhbGxfZWxlbXMuYXBwZW5kKGVsZW0pCiAgIGNvbXByZXNzaW9uX2VsZW1zLmFwcGVuZChlbGVtKQogICBzdGF0aWNfdXNlcmRhdGFbZWxlbV0gPSAxICsgKG1hc2sgfCAxKQotYWxsX3N0cnMgPSBzb3J0ZWQobGlzdChhbGxfc3RycyksIGtleT1tYW5nbGUpCi1hbGxfZWxlbXMgPSBzb3J0ZWQobGlzdChhbGxfZWxlbXMpLCBrZXk9bWFuZ2xlKQogCiAjIG91dHB1dCBjb25maWd1cmF0aW9uCiBhcmdzID0gc3lzLmFyZ3ZbMTpdCkBAIC0yNzksMTUgKzMyNSw1MiBAQAogCiBwcmludCA+PkMsICcjaW5jbHVkZSAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCInCiBwcmludCA+PkMKK3ByaW50ID4+QywgJyNpbmNsdWRlICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCInCitwcmludCA+PkMKKworc3RyX29mcyA9IDAKK2lkMnN0cm9mcyA9IHt9Citmb3IgaSwgZWxlbSBpbiBlbnVtZXJhdGUoYWxsX3N0cnMpOgorICBpZDJzdHJvZnNbaV0gPSBzdHJfb2ZzCisgIHN0cl9vZnMgKz0gbGVuKGVsZW0pOworZGVmIHNsaWNlX2RlZihpKToKKyAgcmV0dXJuICd7LnJlZmNvdW50ID0gJmdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1slZF0sIC5kYXRhLnJlZmNvdW50ZWQgPSB7Z19ieXRlcyslZCwgJWR9fScgJSAoaSwgaWQyc3Ryb2ZzW2ldLCBsZW4oYWxsX3N0cnNbaV0pKQorCisjIHZhbGlkYXRlIGNvbmZpZ3VyYXRpb24KK2ZvciBlbGVtIGluIE1FVEFEQVRBX0JBVENIX0NBTExPVVRTOgorICBhc3NlcnQgZWxlbSBpbiBhbGxfc3RycwogCiBwcmludCA+PkgsICcjZGVmaW5lIEdSUENfU1RBVElDX01EU1RSX0NPVU5UICVkJyAlIGxlbihhbGxfc3RycykKLXByaW50ID4+SCwgJ2V4dGVybiBncnBjX21kc3RyIGdycGNfc3RhdGljX21kc3RyX3RhYmxlW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsnCitwcmludCA+PkgsICdleHRlcm4gY29uc3QgZ3JwY19zbGljZSBncnBjX3N0YXRpY19zbGljZV90YWJsZVtHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVF07JwogZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFsbF9zdHJzKToKICAgcHJpbnQgPj5ILCAnLyogIiVzIiAqLycgJSBlbGVtCi0gIHByaW50ID4+SCwgJyNkZWZpbmUgJXMgKCZncnBjX3N0YXRpY19tZHN0cl90YWJsZVslZF0pJyAlIChtYW5nbGUoZWxlbSkudXBwZXIoKSwgaSkKKyAgcHJpbnQgPj5ILCAnI2RlZmluZSAlcyAoZ3JwY19zdGF0aWNfc2xpY2VfdGFibGVbJWRdKScgJSAobWFuZ2xlKGVsZW0pLnVwcGVyKCksIGkpCiBwcmludCA+PkgKLXByaW50ID4+QywgJ2dycGNfbWRzdHIgZ3JwY19zdGF0aWNfbWRzdHJfdGFibGVbR1JQQ19TVEFUSUNfTURTVFJfQ09VTlRdOycKK3ByaW50ID4+QywgJ3N0YXRpYyB1aW50OF90IGdfYnl0ZXNbXSA9IHslc307JyAlICgnLCcuam9pbignJWQnICUgb3JkKGMpIGZvciBjIGluICcnLmpvaW4oYWxsX3N0cnMpKSkKIHByaW50ID4+QworcHJpbnQgPj5DLCAnc3RhdGljIHZvaWQgc3RhdGljX3JlZih2b2lkICp1bnVzZWQpIHt9JworcHJpbnQgPj5DLCAnc3RhdGljIHZvaWQgc3RhdGljX3VucmVmKGdycGNfZXhlY19jdHggKmV4ZWNfY3R4LCB2b2lkICp1bnVzZWQpIHt9JworcHJpbnQgPj5DLCAnc3RhdGljIGNvbnN0IGdycGNfc2xpY2VfcmVmY291bnRfdnRhYmxlIHN0YXRpY19zdWJfdnRhYmxlID0ge3N0YXRpY19yZWYsIHN0YXRpY191bnJlZiwgZ3JwY19zbGljZV9kZWZhdWx0X2VxX2ltcGwsIGdycGNfc2xpY2VfZGVmYXVsdF9oYXNoX2ltcGx9Oyc7CitwcmludCA+PkgsICdleHRlcm4gY29uc3QgZ3JwY19zbGljZV9yZWZjb3VudF92dGFibGUgZ3JwY19zdGF0aWNfbWV0YWRhdGFfdnRhYmxlOyc7CitwcmludCA+PkMsICdjb25zdCBncnBjX3NsaWNlX3JlZmNvdW50X3Z0YWJsZSBncnBjX3N0YXRpY19tZXRhZGF0YV92dGFibGUgPSB7c3RhdGljX3JlZiwgc3RhdGljX3VucmVmLCBncnBjX3N0YXRpY19zbGljZV9lcSwgZ3JwY19zdGF0aWNfc2xpY2VfaGFzaH07JzsKK3ByaW50ID4+QywgJ3N0YXRpYyBncnBjX3NsaWNlX3JlZmNvdW50IHN0YXRpY19zdWJfcmVmY250ID0geyZzdGF0aWNfc3ViX3Z0YWJsZSwgJnN0YXRpY19zdWJfcmVmY250fTsnOworcHJpbnQgPj5ILCAnZXh0ZXJuIGdycGNfc2xpY2VfcmVmY291bnQgZ3JwY19zdGF0aWNfbWV0YWRhdGFfcmVmY291bnRzW0dSUENfU1RBVElDX01EU1RSX0NPVU5UXTsnCitwcmludCA+PkMsICdncnBjX3NsaWNlX3JlZmNvdW50IGdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50c1tHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVF0gPSB7JworZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFsbF9zdHJzKToKKyAgcHJpbnQgPj5DLCAnICB7JmdycGNfc3RhdGljX21ldGFkYXRhX3Z0YWJsZSwgJnN0YXRpY19zdWJfcmVmY250fSwnCitwcmludCA+PkMsICd9OycKK3ByaW50ID4+QworcHJpbnQgPj5ILCAnI2RlZmluZSBHUlBDX0lTX1NUQVRJQ19NRVRBREFUQV9TVFJJTkcoc2xpY2UpIFxcJworcHJpbnQgPj5ILCAnICAoKHNsaWNlKS5yZWZjb3VudCAhPSBOVUxMICYmIChzbGljZSkucmVmY291bnQtPnZ0YWJsZSA9PSAmZ3JwY19zdGF0aWNfbWV0YWRhdGFfdnRhYmxlKScKK3ByaW50ID4+SAorcHJpbnQgPj5DLCAnY29uc3QgZ3JwY19zbGljZSBncnBjX3N0YXRpY19zbGljZV90YWJsZVtHUlBDX1NUQVRJQ19NRFNUUl9DT1VOVF0gPSB7JworZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFsbF9zdHJzKToKKyAgcHJpbnQgPj5DLCBzbGljZV9kZWYoaSkgKyAnLCcKK3ByaW50ID4+QywgJ307JworcHJpbnQgPj5DCitwcmludCA+PkgsICcjZGVmaW5lIEdSUENfU1RBVElDX01FVEFEQVRBX0lOREVYKHN0YXRpY19zbGljZSkgXFwnCitwcmludCA+PkgsICcgICgoaW50KSgoc3RhdGljX3NsaWNlKS5yZWZjb3VudCAtIGdycGNfc3RhdGljX21ldGFkYXRhX3JlZmNvdW50cykpJworcHJpbnQgPj5ICiAKIHByaW50ID4+RCwgJyMgaHBhY2sgZnV6emluZyBkaWN0aW9uYXJ5JwogZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFsbF9zdHJzKToKQEAgLTI5NywxMyArMzgwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGVuKGVsZW1bMV0pXSArIFtvcmQoYykgZm9yIGMgaW4gZWxlbVsxXV0pKQogCiBwcmludCA+PkgsICcjZGVmaW5lIEdSUENfU1RBVElDX01ERUxFTV9DT1VOVCAlZCcgJSBsZW4oYWxsX2VsZW1zKQotcHJpbnQgPj5ILCAnZXh0ZXJuIGdycGNfbWRlbGVtIGdycGNfc3RhdGljX21kZWxlbV90YWJsZVtHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlRdOycKK3ByaW50ID4+SCwgJ2V4dGVybiBncnBjX21kZWxlbV9kYXRhIGdycGNfc3RhdGljX21kZWxlbV90YWJsZVtHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlRdOycKIHByaW50ID4+SCwgJ2V4dGVybiB1aW50cHRyX3QgZ3JwY19zdGF0aWNfbWRlbGVtX3VzZXJfZGF0YVtHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlRdOycKIGZvciBpLCBlbGVtIGluIGVudW1lcmF0ZShhbGxfZWxlbXMpOgogICBwcmludCA+PkgsICcvKiAiJXMiOiAiJXMiICovJyAlIGVsZW0KLSAgcHJpbnQgPj5ILCAnI2RlZmluZSAlcyAoJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVslZF0pJyAlIChtYW5nbGUoZWxlbSkudXBwZXIoKSwgaSkKKyAgcHJpbnQgPj5ILCAnI2RlZmluZSAlcyAoR1JQQ19NQUtFX01ERUxFTSgmZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlWyVkXSwgR1JQQ19NREVMRU1fU1RPUkFHRV9TVEFUSUMpKScgJSAobWFuZ2xlKGVsZW0pLnVwcGVyKCksIGkpCiBwcmludCA+PkgKLXByaW50ID4+QywgJ2dycGNfbWRlbGVtIGdycGNfc3RhdGljX21kZWxlbV90YWJsZVtHUlBDX1NUQVRJQ19NREVMRU1fQ09VTlRdOycKIHByaW50ID4+QywgJ3VpbnRwdHJfdCBncnBjX3N0YXRpY19tZGVsZW1fdXNlcl9kYXRhW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVF0gPSB7JwogcHJpbnQgPj5DLCAnICAlcycgJSAnLCcuam9pbignJWQnICUgc3RhdGljX3VzZXJkYXRhLmdldChlbGVtLCAwKSBmb3IgZWxlbSBpbiBhbGxfZWxlbXMpCiBwcmludCA+PkMsICd9OycKQEAgLTMxOSwyNSArNDAxLDEwMCBAQAogICAgIGlmIG0gPT0gbTI6CiAgICAgICByZXR1cm4gaQogCi1wcmludCA+PkgsICdleHRlcm4gY29uc3QgdWludDhfdCBncnBjX3N0YXRpY19tZXRhZGF0YV9lbGVtX2luZGljZXNbR1JQQ19TVEFUSUNfTURFTEVNX0NPVU5UKjJdOycKLXByaW50ID4+QywgJ2NvbnN0IHVpbnQ4X3QgZ3JwY19zdGF0aWNfbWV0YWRhdGFfZWxlbV9pbmRpY2VzW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVCoyXSA9IHsnCi1wcmludCA+PkMsICcsJy5qb2luKCclZCcgJSBzdHJfaWR4KHgpIGZvciB4IGluIGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxlKFthLGJdIGZvciBhLCBiIGluIGFsbF9lbGVtcykpCi1wcmludCA+PkMsICd9OycKK2RlZiBvZmZzZXRfdHJpYWxzKG1pbmspOgorICB5aWVsZCAwCisgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CisgICAgZm9yIG11bCBpbiBbLTEsIDFdOgorICAgICAgeWllbGQgbXVsICogaQorCitkZWYgcGVyZmVjdF9oYXNoKGtleXMsIG5hbWUpOgorICBwID0gcGVyZmVjdGlvbi5oYXNoX3BhcmFtZXRlcnMoa2V5cykKKyAgZGVmIGYoaSwgcD1wKToKKyAgICBpICs9IHAub2Zmc2V0CisgICAgeCA9IGkgJSBwLnQKKyAgICB5ID0gaSAvIHAudAorICAgIHJldHVybiB4ICsgcC5yW3ldCisgIHJldHVybiB7CisgICAgJ1BIQVNIUkFOR0UnOiBwLnQgLSAxICsgbWF4KHAuciksCisgICAgJ1BIQVNITktFWVMnOiBsZW4ocC5zbG90cyksCisgICAgJ3B5ZnVuYyc6IGYsCisgICAgJ2NvZGUnOiAiIiIKK3N0YXRpYyBjb25zdCBpbnQ4X3QgJShuYW1lKXNfcltdID0geyUocilzfTsKK3N0YXRpYyB1aW50MzJfdCAlKG5hbWUpc19waGFzaCh1aW50MzJfdCBpKSB7CisgIGkgJShvZmZzZXRfc2lnbilzPSAlKG9mZnNldClkOworICB1aW50MzJfdCB4ID0gaSAlJSAlKHQpZDsKKyAgdWludDMyX3QgeSA9IGkgLyAlKHQpZDsKKyAgdWludDMyX3QgaCA9IHg7CisgIGlmICh5IDwgR1BSX0FSUkFZX1NJWkUoJShuYW1lKXNfcikpIHsKKyAgICB1aW50MzJfdCBkZWx0YSA9ICh1aW50MzJfdCklKG5hbWUpc19yW3ldOworICAgIGggKz0gZGVsdGE7CisgIH0KKyAgcmV0dXJuIGg7Cit9CisgICAgIiIiICUgeworICAgICAgJ25hbWUnOiBuYW1lLAorICAgICAgJ3InOiAnLCcuam9pbignJWQnICUgKHIgaWYgciBpcyBub3QgTm9uZSBlbHNlIDApIGZvciByIGluIHAuciksCisgICAgICAndCc6IHAudCwKKyAgICAgICdvZmZzZXQnOiBhYnMocC5vZmZzZXQpLAorICAgICAgJ29mZnNldF9zaWduJzogJysnIGlmIHAub2Zmc2V0ID4gMCBlbHNlICctJworICAgIH0KKyAgfQorCisKK2VsZW1fa2V5cyA9IFtzdHJfaWR4KGVsZW1bMF0pICogbGVuKGFsbF9zdHJzKSArIHN0cl9pZHgoZWxlbVsxXSkgZm9yIGVsZW0gaW4gYWxsX2VsZW1zXQorZWxlbV9oYXNoID0gcGVyZmVjdF9oYXNoKGVsZW1fa2V5cywgImVsZW1zIikKK3ByaW50ID4+QywgZWxlbV9oYXNoWydjb2RlJ10KKwora2V5cyA9IFswXSAqIGludChlbGVtX2hhc2hbJ1BIQVNIUkFOR0UnXSkKK2lkeHMgPSBbMjU1XSAqIGludChlbGVtX2hhc2hbJ1BIQVNITktFWVMnXSkKK2ZvciBpLCBrIGluIGVudW1lcmF0ZShlbGVtX2tleXMpOgorICAgIGggPSBlbGVtX2hhc2hbJ3B5ZnVuYyddKGspCisgICAgYXNzZXJ0IGtleXNbaF0gPT0gMAorICAgIGtleXNbaF0gPSBrCisgICAgaWR4c1toXSA9IGkKK3ByaW50ID4+QywgJ3N0YXRpYyBjb25zdCB1aW50MTZfdCBlbGVtX2tleXNbXSA9IHslc307JyAlICcsJy5qb2luKCclZCcgJSBrIGZvciBrIGluIGtleXMpCitwcmludCA+PkMsICdzdGF0aWMgY29uc3QgdWludDhfdCBlbGVtX2lkeHNbXSA9IHslc307JyAlICcsJy5qb2luKCclZCcgJSBpIGZvciBpIGluIGlkeHMpCiBwcmludCA+PkMKIAotcHJpbnQgPj5ILCAnZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGdycGNfc3RhdGljX21ldGFkYXRhX3N0cmluZ3NbR1JQQ19TVEFUSUNfTURTVFJfQ09VTlRdOycKLXByaW50ID4+QywgJ2NvbnN0IGNoYXIgKmNvbnN0IGdycGNfc3RhdGljX21ldGFkYXRhX3N0cmluZ3NbR1JQQ19TVEFUSUNfTURTVFJfQ09VTlRdID0geycKLXByaW50ID4+QywgJyVzJyAlICcsXG4nLmpvaW4oJyAgIiVzIicgJSBzIGZvciBzIGluIGFsbF9zdHJzKQotcHJpbnQgPj5DLCAnfTsnCitwcmludCA+PkgsICdncnBjX21kZWxlbSBncnBjX3N0YXRpY19tZGVsZW1fZm9yX3N0YXRpY19zdHJpbmdzKGludCBhLCBpbnQgYik7JworcHJpbnQgPj5DLCAnZ3JwY19tZGVsZW0gZ3JwY19zdGF0aWNfbWRlbGVtX2Zvcl9zdGF0aWNfc3RyaW5ncyhpbnQgYSwgaW50IGIpIHsnCitwcmludCA+PkMsICcgIGlmIChhID09IC0xIHx8IGIgPT0gLTEpIHJldHVybiBHUlBDX01ETlVMTDsnCitwcmludCA+PkMsICcgIHVpbnQzMl90IGsgPSAodWludDMyX3QpKGEgKiAlZCArIGIpOycgJSBsZW4oYWxsX3N0cnMpCitwcmludCA+PkMsICcgIHVpbnQzMl90IGggPSBlbGVtc19waGFzaChrKTsnCitwcmludCA+PkMsICcgIHJldHVybiBoIDwgR1BSX0FSUkFZX1NJWkUoZWxlbV9rZXlzKSAmJiBlbGVtX2tleXNbaF0gPT0gayA/IEdSUENfTUFLRV9NREVMRU0oJmdycGNfc3RhdGljX21kZWxlbV90YWJsZVtlbGVtX2lkeHNbaF1dLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykgOiBHUlBDX01ETlVMTDsnCitwcmludCA+PkMsICd9JwogcHJpbnQgPj5DCiAKK3ByaW50ID4+QywgJ2dycGNfbWRlbGVtX2RhdGEgZ3JwY19zdGF0aWNfbWRlbGVtX3RhYmxlW0dSUENfU1RBVElDX01ERUxFTV9DT1VOVF0gPSB7JworZm9yIGEsIGIgaW4gYWxsX2VsZW1zOgorICBwcmludCA+PkMsICd7JXMsJXN9LCcgJSAoc2xpY2VfZGVmKHN0cl9pZHgoYSkpLCBzbGljZV9kZWYoc3RyX2lkeChiKSkpCitwcmludCA+PkMsICd9OycKKworcHJpbnQgPj5ILCAndHlwZWRlZiBlbnVtIHsnCitmb3IgZWxlbSBpbiBNRVRBREFUQV9CQVRDSF9DQUxMT1VUUzoKKyAgcHJpbnQgPj5ILCAnICAlcywnICUgbWFuZ2xlKGVsZW0sICdiYXRjaCcpLnVwcGVyKCkKK3ByaW50ID4+SCwgJyAgR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVCcKK3ByaW50ID4+SCwgJ30gZ3JwY19tZXRhZGF0YV9iYXRjaF9jYWxsb3V0c19pbmRleDsnCitwcmludCA+PkgKK3ByaW50ID4+SCwgJ3R5cGVkZWYgdW5pb24geycKK3ByaW50ID4+SCwgJyAgc3RydWN0IGdycGNfbGlua2VkX21kZWxlbSAqYXJyYXlbR1JQQ19CQVRDSF9DQUxMT1VUU19DT1VOVF07JworcHJpbnQgPj5ILCAnICBzdHJ1Y3QgeycKK2ZvciBlbGVtIGluIE1FVEFEQVRBX0JBVENIX0NBTExPVVRTOgorICBwcmludCA+PkgsICcgIHN0cnVjdCBncnBjX2xpbmtlZF9tZGVsZW0gKiVzOycgJSBtYW5nbGUoZWxlbSwgJycpLmxvd2VyKCkKK3ByaW50ID4+SCwgJyAgfSBuYW1lZDsnCitwcmludCA+PkgsICd9IGdycGNfbWV0YWRhdGFfYmF0Y2hfY2FsbG91dHM7JworcHJpbnQgPj5ICitwcmludCA+PkgsICcjZGVmaW5lIEdSUENfQkFUQ0hfSU5ERVhfT0Yoc2xpY2UpIFxcJworcHJpbnQgPj5ILCAnICAoR1JQQ19JU19TVEFUSUNfTUVUQURBVEFfU1RSSU5HKChzbGljZSkpID8gKGdycGNfbWV0YWRhdGFfYmF0Y2hfY2FsbG91dHNfaW5kZXgpR1BSX0NMQU1QKEdSUENfU1RBVElDX01FVEFEQVRBX0lOREVYKChzbGljZSkpLCAwLCBHUlBDX0JBVENIX0NBTExPVVRTX0NPVU5UKSA6IEdSUENfQkFUQ0hfQ0FMTE9VVFNfQ09VTlQpJworcHJpbnQgPj5ICisKIHByaW50ID4+SCwgJ2V4dGVybiBjb25zdCB1aW50OF90IGdycGNfc3RhdGljX2FjY2VwdF9lbmNvZGluZ19tZXRhZGF0YVslZF07JyAlICgxIDw8IGxlbihDT01QUkVTU0lPTl9BTEdPUklUSE1TKSkKIHByaW50ID4+QywgJ2NvbnN0IHVpbnQ4X3QgZ3JwY19zdGF0aWNfYWNjZXB0X2VuY29kaW5nX21ldGFkYXRhWyVkXSA9IHsnICUgKDEgPDwgbGVuKENPTVBSRVNTSU9OX0FMR09SSVRITVMpKQogcHJpbnQgPj5DLCAnMCwlcycgJSAnLCcuam9pbignJWQnICUgbWRfaWR4KGVsZW0pIGZvciBlbGVtIGluIGNvbXByZXNzaW9uX2VsZW1zKQogcHJpbnQgPj5DLCAnfTsnCiBwcmludCA+PkMKIAotcHJpbnQgPj5ILCAnI2RlZmluZSBHUlBDX01ERUxFTV9BQ0NFUFRfRU5DT0RJTkdfRk9SX0FMR09SSVRITVMoYWxncykgKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbZ3JwY19zdGF0aWNfYWNjZXB0X2VuY29kaW5nX21ldGFkYXRhWyhhbGdzKV1dKScKK3ByaW50ID4+SCwgJyNkZWZpbmUgR1JQQ19NREVMRU1fQUNDRVBUX0VOQ09ESU5HX0ZPUl9BTEdPUklUSE1TKGFsZ3MpIChHUlBDX01BS0VfTURFTEVNKCZncnBjX3N0YXRpY19tZGVsZW1fdGFibGVbZ3JwY19zdGF0aWNfYWNjZXB0X2VuY29kaW5nX21ldGFkYXRhWyhhbGdzKV1dLCBHUlBDX01ERUxFTV9TVE9SQUdFX1NUQVRJQykpJwogCiBwcmludCA+PkgsICcjZW5kaWYgLyogR1JQQ19DT1JFX0xJQl9UUkFOU1BPUlRfU1RBVElDX01FVEFEQVRBX0ggKi8nCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2RveHlnZW4vRG94eWZpbGUuYysrIGIvdG9vbHMvZG94eWdlbi9Eb3h5ZmlsZS5jKysKaW5kZXggYWY4NDRkNi4uMTI4YTQwOSAxMDA2NDQKLS0tIGEvdG9vbHMvZG94eWdlbi9Eb3h5ZmlsZS5jKysKKysrIGIvdG9vbHMvZG94eWdlbi9Eb3h5ZmlsZS5jKysKQEAgLTgyMiw2ICs4MjIsNyBAQAogaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9jb250ZXh0LmggXAogaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9pbnRlcmZhY2UuaCBcCiBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmljZV90eXBlLmggXAoraW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NsaWNlLmggXAogaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1cy5oIFwKIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfY29kZV9lbnVtLmggXAogaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1c19oZWxwZXIuaCBcCmRpZmYgLS1naXQgYS90b29scy9kb3h5Z2VuL0RveHlmaWxlLmMrKy5pbnRlcm5hbCBiL3Rvb2xzL2RveHlnZW4vRG94eWZpbGUuYysrLmludGVybmFsCmluZGV4IDJiMmQ4YTMuLjViZDQzMjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2RveHlnZW4vRG94eWZpbGUuYysrLmludGVybmFsCisrKyBiL3Rvb2xzL2RveHlnZW4vRG94eWZpbGUuYysrLmludGVybmFsCkBAIC04MjMsNiArODIzLDcgQEAKIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfY29udGV4dC5oIFwKIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmggXAogaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oIFwKK2luY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zbGljZS5oIFwKIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaCBcCiBpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oIFwKIGluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfaGVscGVyLmggXApkaWZmIC0tZ2l0IGEvdG9vbHMvZG94eWdlbi9Eb3h5ZmlsZS5jb3JlLmludGVybmFsIGIvdG9vbHMvZG94eWdlbi9Eb3h5ZmlsZS5jb3JlLmludGVybmFsCmluZGV4IDMwZDRlOGYuLjEwNjgxN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2RveHlnZW4vRG94eWZpbGUuY29yZS5pbnRlcm5hbAorKysgYi90b29scy9kb3h5Z2VuL0RveHlmaWxlLmNvcmUuaW50ZXJuYWwKQEAgLTk4NywxNSArOTg3LDEyIEBACiBzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmggXAogc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3RhYmxlLmMgXAogc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2hwYWNrX3RhYmxlLmggXAotc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5jIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5oIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5oIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbnRlcm5hbC5oIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMgXAotc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmMgXAotc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uLmggXAogc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jIFwKIHNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmMgXAogc3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuaCBcCkBAIC0xMDU1LDYgKzEwNTIsNyBAQAogc3JjL2NvcmUvbGliL2lvbWdyL2VuZHBvaW50X3BhaXJfd2luZG93cy5jIFwKIHNyYy9jb3JlL2xpYi9pb21nci9lcnJvci5jIFwKIHNyYy9jb3JlL2xpYi9pb21nci9lcnJvci5oIFwKK3NyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oIFwKIHNyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5jIFwKIHNyYy9jb3JlL2xpYi9pb21nci9ldl9lcG9sbF9saW51eC5oIFwKIHNyYy9jb3JlL2xpYi9pb21nci9ldl9wb2xsX3Bvc2l4LmMgXApAQCAtMTIxMCw2ICsxMjA4LDkgQEAKIHNyYy9jb3JlL2xpYi9zbGljZS9wZXJjZW50X2VuY29kaW5nLmggXAogc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlLmMgXAogc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIFwKK3NyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmMgXAorc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuaCBcCitzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMgXAogc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2ludGVybmFsLmggXAogc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmMgXAogc3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmggXApAQCAtMTI5NywxNCArMTI5OCwxNiBAQAogc3JjL2NvcmUvbGliL3N1cmZhY2Uvc2VydmVyLmMgXAogc3JjL2NvcmUvbGliL3N1cmZhY2Uvc2VydmVyLmggXAogc3JjL2NvcmUvbGliL3N1cmZhY2UvdmFsaWRhdGVfbWV0YWRhdGEuYyBcCitzcmMvY29yZS9saWIvc3VyZmFjZS92YWxpZGF0ZV9tZXRhZGF0YS5oIFwKIHNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZlcnNpb24uYyBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L1JFQURNRS5tZCBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMgXAogc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9ieXRlX3N0cmVhbS5oIFwKIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvY29ubmVjdGl2aXR5X3N0YXRlLmMgXAogc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuaCBcCi1zcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuYyBcCi1zcmMvY29yZS9saWIvdHJhbnNwb3J0L21kc3RyX2hhc2hfdGFibGUuaCBcCitzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMgXAorc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9lcnJvcl91dGlscy5oIFwKK3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvaHR0cDJfZXJyb3JzLmggXAogc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIFwKIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWV0YWRhdGEuaCBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L21ldGFkYXRhX2JhdGNoLmMgXApAQCAtMTMxNSw2ICsxMzE4LDggQEAKIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc2VydmljZV9jb25maWcuaCBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5jIFwKIHNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmggXAorc3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIFwKK3NyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuYyBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuaCBcCiBzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RyYW5zcG9ydC5jIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL2plbmtpbnMvcnVuX2ludGVyb3Auc2ggYi90b29scy9qZW5raW5zL3J1bl9pbnRlcm9wLnNoCmluZGV4IDRhN2JmZjMuLjE3NmVlMTggMTAwNzU1Ci0tLSBhL3Rvb2xzL2plbmtpbnMvcnVuX2ludGVyb3Auc2gKKysrIGIvdG9vbHMvamVua2lucy9ydW5faW50ZXJvcC5zaApAQCAtMzcsMyArMzcsNSBAQAogY2QgJChkaXJuYW1lICQwKS8uLi8uLgogCiB0b29scy9ydW5fdGVzdHMvcnVuX2ludGVyb3BfdGVzdHMucHkgLWwgYWxsIC1zIGFsbCAtLWNsb3VkX3RvX3Byb2QgLS1jbG91ZF90b19wcm9kX2F1dGggLS11c2VfZG9ja2VyIC0taHR0cDJfaW50ZXJvcCAtdCAtaiAxMiAkQCB8fCB0cnVlCit0b29scy9ydW5fdGVzdHMvcnVuX2ludGVyb3BfdGVzdHMucHkgLWwgamF2YSAtLXVzZV9kb2NrZXIgLS1odHRwMl9iYWRzZXJ2ZXJfaW50ZXJvcCAkQCB8fCB0cnVlCit0b29scy9ydW5fdGVzdHMvcnVuX2ludGVyb3BfdGVzdHMucHkgLWwgcHl0aG9uIC0tdXNlX2RvY2tlciAtLWh0dHAyX2JhZHNlcnZlcl9pbnRlcm9wICRAIHx8IHRydWUKZGlmZiAtLWdpdCBhL3Rvb2xzL3J1bl90ZXN0cy9nZW5lcmF0ZWQvY29uZmlncy5qc29uIGIvdG9vbHMvcnVuX3Rlc3RzL2dlbmVyYXRlZC9jb25maWdzLmpzb24KaW5kZXggYjA4MzllZi4uZjJjMTEwNyAxMDA2NDQKLS0tIGEvdG9vbHMvcnVuX3Rlc3RzL2dlbmVyYXRlZC9jb25maWdzLmpzb24KKysrIGIvdG9vbHMvcnVuX3Rlc3RzL2dlbmVyYXRlZC9jb25maWdzLmpzb24KQEAgLTMsMzcgKzMsNiBAQAogICAgICJjb25maWciOiAib3B0IgogICB9LCAKICAgewotICAgICJjb25maWciOiAiYXNhbi10cmFjZS1jbXAiLCAKLSAgICAiZW52aXJvbiI6IHsKLSAgICAgICJBU0FOX09QVElPTlMiOiAiZGV0ZWN0X2xlYWtzPTE6Y29sb3I9YWx3YXlzIiwgCi0gICAgICAiTFNBTl9PUFRJT05TIjogInN1cHByZXNzaW9ucz10b29scy9sc2FuX3N1cHByZXNzaW9ucy50eHQ6cmVwb3J0X29iamVjdHM9MSIKLSAgICB9LCAKLSAgICAidGltZW91dF9tdWx0aXBsaWVyIjogMwotICB9LCAKLSAgewotICAgICJjb25maWciOiAiZGJnIgotICB9LCAKLSAgewotICAgICJjb25maWciOiAiZWFzYW4iLCAKLSAgICAiZW52aXJvbiI6IHsKLSAgICAgICJBU0FOX09QVElPTlMiOiAiZGV0ZWN0X2xlYWtzPTE6Y29sb3I9YWx3YXlzIiwgCi0gICAgICAiTFNBTl9PUFRJT05TIjogInN1cHByZXNzaW9ucz10b29scy9sc2FuX3N1cHByZXNzaW9ucy50eHQ6cmVwb3J0X29iamVjdHM9MSIKLSAgICB9LCAKLSAgICAidGltZW91dF9tdWx0aXBsaWVyIjogMwotICB9LCAKLSAgewotICAgICJjb25maWciOiAiYXNhbiIsIAotICAgICJlbnZpcm9uIjogewotICAgICAgIkFTQU5fT1BUSU9OUyI6ICJkZXRlY3RfbGVha3M9MTpjb2xvcj1hbHdheXMiLCAKLSAgICAgICJMU0FOX09QVElPTlMiOiAic3VwcHJlc3Npb25zPXRvb2xzL2xzYW5fc3VwcHJlc3Npb25zLnR4dDpyZXBvcnRfb2JqZWN0cz0xIgotICAgIH0sIAotICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiAzCi0gIH0sIAotICB7Ci0gICAgImNvbmZpZyI6ICJtc2FuIiwgCi0gICAgInRpbWVvdXRfbXVsdGlwbGllciI6IDQKLSAgfSwgCi0gIHsKICAgICAiY29uZmlnIjogImJhc2ljcHJvZiIKICAgfSwgCiAgIHsKQEAgLTUyLDI3ICsyMSwyMSBAQAogICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiAzCiAgIH0sIAogICB7Ci0gICAgImNvbmZpZyI6ICJlZGJnIgorICAgICJjb25maWciOiAiYXNhbi10cmFjZS1jbXAiLCAKKyAgICAiZW52aXJvbiI6IHsKKyAgICAgICJBU0FOX09QVElPTlMiOiAiZGV0ZWN0X2xlYWtzPTE6Y29sb3I9YWx3YXlzIiwgCisgICAgICAiTFNBTl9PUFRJT05TIjogInN1cHByZXNzaW9ucz10b29scy9sc2FuX3N1cHByZXNzaW9ucy50eHQ6cmVwb3J0X29iamVjdHM9MSIKKyAgICB9LCAKKyAgICAidGltZW91dF9tdWx0aXBsaWVyIjogMwogICB9LCAKICAgewotICAgICJjb25maWciOiAidWJzYW4iLCAKLSAgICAiZW52aXJvbiI6IHsKLSAgICAgICJVQlNBTl9PUFRJT05TIjogImhhbHRfb25fZXJyb3I9MTpwcmludF9zdGFja3RyYWNlPTEiCi0gICAgfSwgCi0gICAgInRpbWVvdXRfbXVsdGlwbGllciI6IDEuNQotICB9LCAKLSAgewotICAgICJjb25maWciOiAidHNhbiIsIAotICAgICJlbnZpcm9uIjogewotICAgICAgIlRTQU5fT1BUSU9OUyI6ICJzdXBwcmVzc2lvbnM9dG9vbHMvdHNhbl9zdXBwcmVzc2lvbnMudHh0OmhhbHRfb25fZXJyb3I9MTpzZWNvbmRfZGVhZGxvY2tfc3RhY2s9MSIKLSAgICB9LCAKLSAgICAidGltZW91dF9tdWx0aXBsaWVyIjogNQorICAgICJjb25maWciOiAiZGJnIgogICB9LCAKICAgewogICAgICJjb25maWciOiAic3RhcHByb2YiCiAgIH0sIAogICB7Ci0gICAgImNvbmZpZyI6ICJtdXRyYWNlIgorICAgICJjb25maWciOiAiZ2NvdiIKICAgfSwgCiAgIHsKICAgICAiY29uZmlnIjogIm1lbWNoZWNrIiwgCkBAIC04NCwxMyArNDcsMzIgQEAKICAgICBdCiAgIH0sIAogICB7Ci0gICAgImNvbmZpZyI6ICJldHNhbiIsIAorICAgICJjb25maWciOiAiYXNhbiIsIAorICAgICJlbnZpcm9uIjogeworICAgICAgIkFTQU5fT1BUSU9OUyI6ICJkZXRlY3RfbGVha3M9MTpjb2xvcj1hbHdheXMiLCAKKyAgICAgICJMU0FOX09QVElPTlMiOiAic3VwcHJlc3Npb25zPXRvb2xzL2xzYW5fc3VwcHJlc3Npb25zLnR4dDpyZXBvcnRfb2JqZWN0cz0xIgorICAgIH0sIAorICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiAzCisgIH0sIAorICB7CisgICAgImNvbmZpZyI6ICJ0c2FuIiwgCiAgICAgImVudmlyb24iOiB7CiAgICAgICAiVFNBTl9PUFRJT05TIjogInN1cHByZXNzaW9ucz10b29scy90c2FuX3N1cHByZXNzaW9ucy50eHQ6aGFsdF9vbl9lcnJvcj0xOnNlY29uZF9kZWFkbG9ja19zdGFjaz0xIgogICAgIH0sIAogICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiA1CiAgIH0sIAogICB7Ci0gICAgImNvbmZpZyI6ICJnY292IgorICAgICJjb25maWciOiAidWJzYW4iLCAKKyAgICAiZW52aXJvbiI6IHsKKyAgICAgICJVQlNBTl9PUFRJT05TIjogImhhbHRfb25fZXJyb3I9MTpwcmludF9zdGFja3RyYWNlPTEiCisgICAgfSwgCisgICAgInRpbWVvdXRfbXVsdGlwbGllciI6IDEuNQorICB9LCAKKyAgeworICAgICJjb25maWciOiAibXNhbiIsIAorICAgICJ0aW1lb3V0X211bHRpcGxpZXIiOiA0CisgIH0sIAorICB7CisgICAgImNvbmZpZyI6ICJtdXRyYWNlIgogICB9CiBdCmRpZmYgLS1naXQgYS90b29scy9ydW5fdGVzdHMvZ2VuZXJhdGVkL3NvdXJjZXNfYW5kX2hlYWRlcnMuanNvbiBiL3Rvb2xzL3J1bl90ZXN0cy9nZW5lcmF0ZWQvc291cmNlc19hbmRfaGVhZGVycy5qc29uCmluZGV4IDA4ZjRiYTQuLjIwMGEwODkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3J1bl90ZXN0cy9nZW5lcmF0ZWQvc291cmNlc19hbmRfaGVhZGVycy5qc29uCisrKyBiL3Rvb2xzL3J1bl90ZXN0cy9nZW5lcmF0ZWQvc291cmNlc19hbmRfaGVhZGVycy5qc29uCkBAIC0yMjcsMjMgKzIyNyw2IEBACiAgICAgImhlYWRlcnMiOiBbXSwgCiAgICAgImlzX2ZpbGVncm91cCI6IGZhbHNlLCAKICAgICAibGFuZ3VhZ2UiOiAiYyIsIAotICAgICJuYW1lIjogImNodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0IiwgCi0gICAgInNyYyI6IFsKLSAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9zdGF0dXNfY29udmVyc2lvbl90ZXN0LmMiCi0gICAgXSwgCi0gICAgInRoaXJkX3BhcnR5IjogZmFsc2UsIAotICAgICJ0eXBlIjogInRhcmdldCIKLSAgfSwgCi0gIHsKLSAgICAiZGVwcyI6IFsKLSAgICAgICJncHIiLCAKLSAgICAgICJncHJfdGVzdF91dGlsIiwgCi0gICAgICAiZ3JwYyIsIAotICAgICAgImdycGNfdGVzdF91dGlsIgotICAgIF0sIAotICAgICJoZWFkZXJzIjogW10sIAotICAgICJpc19maWxlZ3JvdXAiOiBmYWxzZSwgCi0gICAgImxhbmd1YWdlIjogImMiLCAKICAgICAibmFtZSI6ICJjaHR0cDJfc3RyZWFtX21hcF90ZXN0IiwgCiAgICAgInNyYyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9zdHJlYW1fbWFwX3Rlc3QuYyIKQEAgLTIwMjcsNiArMjAxMCwyMyBAQAogICAgICJoZWFkZXJzIjogW10sIAogICAgICJpc19maWxlZ3JvdXAiOiBmYWxzZSwgCiAgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzdGF0dXNfY29udmVyc2lvbl90ZXN0IiwgCisgICAgInNyYyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QuYyIKKyAgICBdLCAKKyAgICAidGhpcmRfcGFydHkiOiBmYWxzZSwgCisgICAgInR5cGUiOiAidGFyZ2V0IgorICB9LCAKKyAgeworICAgICJkZXBzIjogWworICAgICAgImdwciIsIAorICAgICAgImdwcl90ZXN0X3V0aWwiLCAKKyAgICAgICJncnBjIiwgCisgICAgICAiZ3JwY190ZXN0X3V0aWwiCisgICAgXSwgCisgICAgImhlYWRlcnMiOiBbXSwgCisgICAgImlzX2ZpbGVncm91cCI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAogICAgICJuYW1lIjogInRjcF9jbGllbnRfcG9zaXhfdGVzdCIsIAogICAgICJzcmMiOiBbCiAgICAgICAidGVzdC9jb3JlL2lvbWdyL3RjcF9jbGllbnRfcG9zaXhfdGVzdC5jIgpAQCAtNzAyOCw2ICs3MDI4LDcgQEAKICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZW5kcG9pbnQuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9lbmRwb2ludF9wYWlyLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaCIsIAorICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL2lvbWdyL2V2X2Vwb2xsX2xpbnV4LmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZXZfcG9sbF9wb3NpeC5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL2lvbWdyL2V2X3Bvc2l4LmgiLCAKQEAgLTcwODAsNiArNzA4MSw3IEBACiAgICAgICAic3JjL2NvcmUvbGliL2pzb24vanNvbl9yZWFkZXIuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9qc29uL2pzb25fd3JpdGVyLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvc2xpY2UvcGVyY2VudF9lbmNvZGluZy5oIiwgCisgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9pbnRlcm5hbC5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvc3VyZmFjZS9hcGlfdHJhY2UuaCIsIApAQCAtNzA5MywxNCArNzA5NSwxNyBAQAogICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2luaXQuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL2xhbWVfY2xpZW50LmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvc3VyZmFjZS9zZXJ2ZXIuaCIsIAorICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5oIiwgCi0gICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmgiLCAKKyAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmgiLCAKKyAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9waWRfY29udHJvbGxlci5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zZXJ2aWNlX2NvbmZpZy5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0aWNfbWV0YWRhdGEuaCIsIAorICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdGltZW91dF9lbmNvZGluZy5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90cmFuc3BvcnQuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0X2ltcGwuaCIKQEAgLTcxNjcsNiArNzE3Miw3IEBACiAgICAgICAic3JjL2NvcmUvbGliL2lvbWdyL2VuZHBvaW50X3BhaXJfd2luZG93cy5jIiwgCiAgICAgICAic3JjL2NvcmUvbGliL2lvbWdyL2Vycm9yLmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZXJyb3IuaCIsIAorICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9lcnJvcl9pbnRlcm5hbC5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL2lvbWdyL2V2X2Vwb2xsX2xpbnV4LmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvaW9tZ3IvZXZfZXBvbGxfbGludXguaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9pb21nci9ldl9wb2xsX3Bvc2l4LmMiLCAKQEAgLTcyNzgsNiArNzI4NCw5IEBACiAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3BlcmNlbnRfZW5jb2RpbmcuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZS5jIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2J1ZmZlci5jIiwgCisgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX2hhc2hfdGFibGUuYyIsIAorICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9oYXNoX3RhYmxlLmgiLCAKKyAgICAgICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuLmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvc2xpY2Uvc2xpY2VfaW50ZXJuYWwuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi9zbGljZS9zbGljZV9zdHJpbmdfaGVscGVycy5jIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3NsaWNlL3NsaWNlX3N0cmluZ19oZWxwZXJzLmgiLCAKQEAgLTczMDksMTMgKzczMTgsMTUgQEAKICAgICAgICJzcmMvY29yZS9saWIvc3VyZmFjZS9zZXJ2ZXIuYyIsIAogICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3NlcnZlci5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3N1cmZhY2UvdmFsaWRhdGVfbWV0YWRhdGEuYyIsIAorICAgICAgInNyYy9jb3JlL2xpYi9zdXJmYWNlL3ZhbGlkYXRlX21ldGFkYXRhLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvc3VyZmFjZS92ZXJzaW9uLmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2J5dGVfc3RyZWFtLmgiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Nvbm5lY3Rpdml0eV9zdGF0ZS5jIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9jb25uZWN0aXZpdHlfc3RhdGUuaCIsIAotICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvbWRzdHJfaGFzaF90YWJsZS5jIiwgCi0gICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZHN0cl9oYXNoX3RhYmxlLmgiLCAKKyAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmMiLCAKKyAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2Vycm9yX3V0aWxzLmgiLCAKKyAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5jIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YS5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9tZXRhZGF0YV9iYXRjaC5jIiwgCkBAIC03MzI2LDYgKzczMzcsOCBAQAogICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc2VydmljZV9jb25maWcuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvc3RhdGljX21ldGFkYXRhLmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3N0YXRpY19tZXRhZGF0YS5oIiwgCisgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5jIiwgCisgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oIiwgCiAgICAgICAic3JjL2NvcmUvbGliL3RyYW5zcG9ydC90aW1lb3V0X2VuY29kaW5nLmMiLCAKICAgICAgICJzcmMvY29yZS9saWIvdHJhbnNwb3J0L3RpbWVvdXRfZW5jb2RpbmcuaCIsIAogICAgICAgInNyYy9jb3JlL2xpYi90cmFuc3BvcnQvdHJhbnNwb3J0LmMiLCAKQEAgLTc3MDQsMTEgKzc3MTcsOSBAQAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja19lbmNvZGVyLmgiLCAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmgiLCAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfdGFibGUuaCIsIAotICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odHRwMl9lcnJvcnMuaCIsIAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9odWZmc3ltcy5oIiwgCiAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgiLCAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaCIsIAotICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oIiwgCiAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuaCIsIAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC92YXJpbnQuaCIKICAgICBdLCAKQEAgLTc3NDIsMTUgKzc3NTMsMTIgQEAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfcGFyc2VyLmgiLCAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHBhY2tfdGFibGUuYyIsIAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9ocGFja190YWJsZS5oIiwgCi0gICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h0dHAyX2Vycm9ycy5oIiwgCiAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2h1ZmZzeW1zLmMiLCAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaHVmZnN5bXMuaCIsIAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9pbmNvbWluZ19tZXRhZGF0YS5jIiwgCiAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L2luY29taW5nX21ldGFkYXRhLmgiLCAKICAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvaW50ZXJuYWwuaCIsIAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9wYXJzaW5nLmMiLCAKLSAgICAgICJzcmMvY29yZS9leHQvdHJhbnNwb3J0L2NodHRwMi90cmFuc3BvcnQvc3RhdHVzX2NvbnZlcnNpb24uYyIsIAotICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdGF0dXNfY29udmVyc2lvbi5oIiwgCiAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9saXN0cy5jIiwgCiAgICAgICAic3JjL2NvcmUvZXh0L3RyYW5zcG9ydC9jaHR0cDIvdHJhbnNwb3J0L3N0cmVhbV9tYXAuYyIsIAogICAgICAgInNyYy9jb3JlL2V4dC90cmFuc3BvcnQvY2h0dHAyL3RyYW5zcG9ydC9zdHJlYW1fbWFwLmgiLCAKQEAgLTgxMTksNiArODEyNyw3IEBACiAgICAgICAiaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZlcl9jb250ZXh0LmgiLCAKICAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2ludGVyZmFjZS5oIiwgCiAgICAgICAiaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NlcnZpY2VfdHlwZS5oIiwgCisgICAgICAiaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3NsaWNlLmgiLCAKICAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzLmgiLCAKICAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2NvZGVfZW51bS5oIiwgCiAgICAgICAiaW5jbHVkZS9ncnBjKysvaW1wbC9jb2RlZ2VuL3N0YXR1c19oZWxwZXIuaCIsIApAQCAtODE1Miw2ICs4MTYxLDcgQEAKICAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmVyX2NvbnRleHQuaCIsIAogICAgICAgImluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zZXJ2ZXJfaW50ZXJmYWNlLmgiLCAKICAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2VydmljZV90eXBlLmgiLCAKKyAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc2xpY2UuaCIsIAogICAgICAgImluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXMuaCIsIAogICAgICAgImluY2x1ZGUvZ3JwYysrL2ltcGwvY29kZWdlbi9zdGF0dXNfY29kZV9lbnVtLmgiLCAKICAgICAgICJpbmNsdWRlL2dycGMrKy9pbXBsL2NvZGVnZW4vc3RhdHVzX2hlbHBlci5oIiwgCmRpZmYgLS1naXQgYS90b29scy9ydW5fdGVzdHMvZ2VuZXJhdGVkL3Rlc3RzLmpzb24gYi90b29scy9ydW5fdGVzdHMvZ2VuZXJhdGVkL3Rlc3RzLmpzb24KaW5kZXggODE1ZDVkMy4uMTc0ZjhjOCAxMDA2NDQKLS0tIGEvdG9vbHMvcnVuX3Rlc3RzL2dlbmVyYXRlZC90ZXN0cy5qc29uCisrKyBiL3Rvb2xzL3J1bl90ZXN0cy9nZW5lcmF0ZWQvdGVzdHMuanNvbgpAQCAtMjgxLDI4ICsyODEsNiBAQAogICAgICJmbGFreSI6IGZhbHNlLCAKICAgICAiZ3Rlc3QiOiBmYWxzZSwgCiAgICAgImxhbmd1YWdlIjogImMiLCAKLSAgICAibmFtZSI6ICJjaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdCIsIAotICAgICJwbGF0Zm9ybXMiOiBbCi0gICAgICAibGludXgiLCAKLSAgICAgICJtYWMiLCAKLSAgICAgICJwb3NpeCIsIAotICAgICAgIndpbmRvd3MiCi0gICAgXQotICB9LCAKLSAgewotICAgICJhcmdzIjogW10sIAotICAgICJjaV9wbGF0Zm9ybXMiOiBbCi0gICAgICAibGludXgiLCAKLSAgICAgICJtYWMiLCAKLSAgICAgICJwb3NpeCIsIAotICAgICAgIndpbmRvd3MiCi0gICAgXSwgCi0gICAgImNwdV9jb3N0IjogMS4wLCAKLSAgICAiZXhjbHVkZV9jb25maWdzIjogW10sIAotICAgICJleGNsdWRlX2lvbWdycyI6IFtdLCAKLSAgICAiZmxha3kiOiBmYWxzZSwgCi0gICAgImd0ZXN0IjogZmFsc2UsIAotICAgICJsYW5ndWFnZSI6ICJjIiwgCiAgICAgIm5hbWUiOiAiY2h0dHAyX3N0cmVhbV9tYXBfdGVzdCIsIAogICAgICJwbGF0Zm9ybXMiOiBbCiAgICAgICAibGludXgiLCAKQEAgLTIwNTYsNiArMjAzNCwyOCBAQAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCiAgICAgICAibGludXgiLCAKICAgICAgICJtYWMiLCAKKyAgICAgICJwb3NpeCIsIAorICAgICAgIndpbmRvd3MiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMS4wLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogW10sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFtdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImd0ZXN0IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic3RhdHVzX2NvbnZlcnNpb25fdGVzdCIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiLCAKKyAgICAgICJtYWMiLCAKKyAgICAgICJwb3NpeCIsIAorICAgICAgIndpbmRvd3MiCisgICAgXQorICB9LCAKKyAgeworICAgICJhcmdzIjogW10sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiLCAKKyAgICAgICJtYWMiLCAKICAgICAgICJwb3NpeCIKICAgICBdLCAKICAgICAiY3B1X2Nvc3QiOiAwLjUsIApAQCAtMzkxNTcsOSArMzkxNTcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzkxOTQsOSArMzkxOTEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzkyMzEsOSArMzkyMjUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzkyNjgsOSArMzkyNTksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzkzMDUsOSArMzkyOTMsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzkzNDIsOSArMzkzMjcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzkzNzksOSArMzkzNjEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk0MTYsOSArMzkzOTUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk0NTMsOSArMzk0MjksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk0OTAsOSArMzk0NjMsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk1MjcsOSArMzk0OTcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk1NjQsOSArMzk1MzEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk2MDEsOSArMzk1NjUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk2MzgsOSArMzk1OTksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk2NzUsOSArMzk2MzMsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk3MTIsOSArMzk2NjcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk3NDksOSArMzk3MDEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk3ODYsOSArMzk3MzUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk4MjMsOSArMzk3NjksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk4NjAsOSArMzk4MDMsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk4OTcsOSArMzk4MzcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk5MzQsOSArMzk4NzEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtMzk5NzEsOSArMzk5MDUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAwMDgsOSArMzk5MzksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAwNDUsOSArMzk5NzMsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAwODIsOSArNDAwMDcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAxMTksOSArNDAwNDEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAxNTYsOSArNDAwNzUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAxOTMsOSArNDAxMDksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAyMzAsOSArNDAxNDMsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAyNjcsOSArNDAxNzcsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAzMDQsOSArNDAyMTEsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAzNDEsOSArNDAyNDUsNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDAzNzgsOSArNDAyNzksNiBAQAogICAgICAgImFzYW4tdHJhY2UtY21wIiwgCiAgICAgICAiYmFzaWNwcm9mIiwgCiAgICAgICAiZGJnIiwgCi0gICAgICAiZWFzYW4iLCAKLSAgICAgICJlZGJnIiwgCi0gICAgICAiZXRzYW4iLCAKICAgICAgICJnY292IiwgCiAgICAgICAiaGVsZ3JpbmQiLCAKICAgICAgICJtZW1jaGVjayIsIApAQCAtNDE0MTMsNiArNDEzMTEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzA3MGFjYTM4YjVjZDA2NjI2ZGZjOTgxMjZlZjEyMjU1OTU4MDA0MjciCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDcwYzcwMDVlNjNhYmJhNzJjNmJjMWEwZWU2ZDQ0ZTM0MGYyZDJiZSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDE3NDMsNiArNDE2NjMsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzA4Mzk4NTE4YjliNGU5OGQ0NjI1ZGZiMDYzYWIwYjZkOTM5OWEyMzkiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDg0NTViM2VmOWQ1MTZkZWI4MTU1ZDhkYjdkNTFjNDNjZTBmZjA3YSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDE5MTksNiArNDE4NjEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzA5NmY5NDEzYjFiZjcxMmUwOTJjZjhiZDcwNzU0MDE0ZDYyNDJmMTIiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMDk3NmRlMTQ2MWZiMDM3YzY5ODdkNzdkMDg4NDE2NDQwYjUyNGRkZSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDIwNzMsNiArNDIwMzcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzBhODU4ODkyMjliNzI5ODgzZjRjMDQyMGQxYTEzZDlmMGEyY2E3YzIiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMGE5MDgyNmUzMTczNjQyYmUxNWVhMDA1YzJjYmU4Y2EzNmFjMWMzZCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDQ3NTcsNiArNDQ3NDMsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzFjMGRjODVmYWVkOTRiYjg5YmM5MGY4Nzc5OWQ3MzgzY2Y5OTA3Y2YiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMWMxYTE5ODBhMTk1OTQyMzc2NmM1YTI2YWM3OWQwNzI2NDIyNDI3OCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDY4MDMsNiArNDY4MTEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzJhNGZjNzA5ZjYxOTc3ZjBmNmM3NTc2MGFmMmIzMzAwN2VjZDU5NDEiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMmE2MDBjYWUzNDJlOGU5ZTIzNDA2YmIxZTc2MTMzZjQ4ZDkzNjc2NiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDg2OTUsNiArNDg3MjUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzM1MjU5OWIyODUwYWM1YTk2ZWM2NTY3ODhjODk3YzRiMzYxMTRjYzQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMzU2MjMyNTljMGQ1ZDczZDIzZWE1MmVmYzNlNGJkODA4YzExOTQ0MCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNDg3ODMsNiArNDg4MzUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzM1ZjE3MmIwMTY4Y2QwYjJkYTQ1MDljMzQ2M2MyNTAyMjc0ZTAxYTYiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvMzYwNmMwNzQ4MDg5ZjUzZTI1MmI1NzdmZjdhYjJkZjIwM2QwOThmZiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTA1NjUsNiArNTA2MzksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzQyNGI2YTIwYmUzMjMxOGQ5MjBkODNhYTJhMjkyYTBhYmEwMTNhMWIiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNDI3MzkyNjU5YmYzYTk0NTA5N2M2Yzc1NGExN2Q4YzE1ZTIzODE2ZiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTIxNDksNiArNTIyNDUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzRiMzAzZDdmMjQ1YTU2OWY1MDcwMTNhZjBiM2FmYjJmMDMzYjY3NDEiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNGI1MzhlZGEwYTdhZDVkMzhiOWQ5NTg2N2I3YzE4MWNiZTg0NTg5YiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTM0NDcsNiArNTM1NjUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzU1OWQ1Mzc2NzVkZDNmYzVlMGM2ZDQwZTk0MTMzZTkwMTYwMTRmNmMiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNTVjMWIxYmQ2ZTUzMjkyOGFkNDdjYWRkOGU1YzUzNjM4NDlkN2RmNSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTUyNTEsNiArNTUzOTEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzYwYjRjNzkyMTNiOTcyMDRkMWU0ZjY4MTlhZDFlZDVmNmUxOTE3ODkiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNjBlODYxOGMwNzVlYzVmZDQ3YTE2OTkyNzFjNmRhMWI1YmVmZDU3OSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTYzMjksNiArNTY0OTEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzY3MWQ2M2I5OTY4NDQ0MzA4ZDQ5MDhlYjZhMjZiY2NkZjMyZTVlMjkiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNjcyMjkyOWI0OTI0ZjRkNTBjY2ZiOTk5NDYwZTlhMzFjYTEwNGI0YyIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTY3MjUsNiArNTY5MDksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzZhZDNhMTE3MGVmODg0YTg4NGE2ZjM0MDEwMTU0OWRmNjI0YmY1YTQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNmFkN2FmY2YyZDEyMDI1ZmFmMGUxODEyZWU3YTBhNWQ3NTQ2MjBjNiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNTc4MjUsNiArNTgwMzEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzcxOTYxZTUzNjk4YjA3YmZkNTdlOWVhMzcwNjdlMGRkNTIyOThhM2QiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvNzFjMDE4MTg4MjNkNWM1ZmQ4YTNkMWNiNGM1ZGI0YWNhNTFlZmRiMiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjAyNjcsNiArNjA0OTUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzgwN2E0OGJkMzNjZTM3NTQzOGRiYzE1OGMxNTMxODkxYzViNTRhNTEiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvODBhMjQ5ZDE3MjQ4ZTBkYzdkY2M5ZmI2NGQ4YWMyZGQwMzIwYTU0NCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjI0ODksNiArNjI3MzksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzhkZmRiMDRlZjU1OGZiYTg0ZGNiZmE2NWE2YWEzMThiMTA5ODhmYTkiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvOGUyMjZhN2Y2N2I3YzZlOWQ0MzljMzYyN2JmYTU2NDRhZjk5MjU5MyIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjM4MzEsNiArNjQxMDMsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzLzk5MTZiNjUzMDVkMjhhY2Y3NWExNzQ5NWI5ZjQ0ZDdiODM5Yjk0OGYiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvOTk4OTUzNDUyNGEyMTIwOTJlOWQ3ZmVkZTE2MTA2YjU4NmM0MzRmNCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjYwNzUsNiArNjYzNjksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2E4YzBhMTY2MDA0ZWU2MzdmMjJmNTgzODk2MGM4ZjQzMjA3Mzg2OTQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYThjOWY3MDQzYzU3OGU0OGJlNDk2NjFiZTUyMDdjZWI5ZWMxYjYxZiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjY1NTksNiArNjY4NzUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2FiZDVkZTdiNWU5MjE4ZDE5YTU3YzQ3ZDJjY2Q2YTFiYzAyMmM3ZmIiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYWJkYjc4OTE1NjkwODVlM2RmMGY2YzdhNTM0OGMxMmJmM2RkMWFlMCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjc0MTcsNiArNjc3NTUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2IzNmMzZTU4NDFjNmFlZDdiMGQ0MzliZDNiOWM2ZDkyMmQ1NmM3MGIiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYjM3NzZlZjg0NGI0OTEwYTJjZDZkMTQ5ZGMxM2ZiNTdiZDUyM2FjMyIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNjgyOTcsNiArNjg2NTcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2I4YmMzNzdlNTNjYTU0YWU0ZTMwZjQzN2I2OWUyNzAwNDBjMzVmNjUiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvYjhiZWRiOWMzOGZkMTQ5YmM0OTRhNjU2NzRhNGFmNWU2MWRmYjMxMSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNzI5ODMsNiArNzMzNjUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2NyYXNoLTYwYTNmN2VkNGFiZGRhYTZhN2M4MzdhY2U4NmQwNDhmYTE1ZTI4OGIiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvY3Jhc2gtNmRiODZjNTU2Y2FmNTQyZmU4YzMzNDVlZjM5NjQ2N2IxZDYwOWQzMiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtNzYwODUsNiArNzY0ODksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2RiMjVkZjBmYTE0NmQwMjg3NDExNGI4NjA1MDAwZTAxMzVmZjEyZGQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvZGI3YzRiNTZlNzAxODMyNjM0ZTYxY2MwYjNhYjUyMDZmYWJmNTE4ZCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODAyMjEsNiArODA2NDcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2FwaV9mdXp6ZXJfY29ycHVzL2Y1MDNmOGQ1MjZlYWVjOWJhYjZjYWU5N2QwOTIwN2RlZWZhODVkOGQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiYXBpX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvYXBpX2Z1enplcl9jb3JwdXMvZjU4NjdmN2RiYWNkMjI4NzhlMjk1NWY0YmU4ZmNhMTQ3NDQyYWE5ZCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODM0MzMsNiArODM4ODEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzE3NWYxNjkwMTk5N2ZkZWU0MWFjOWVjODhmN2UwMThkNDZkNzc0ZTciCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvMTdiMTc1OGZjN2NkNjlhMDBkMTQwZjExM2IxYWM4OTQwMjNmZjIwYiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODQ2NjUsNiArODUxMzUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzI2ZjI1MGFlMzg4NjVmMDMwMTc2YTg4MDFjZTk5MjUzNjM1MWEzMjYiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvMjcxNzA2N2JiYzBlOWJmYzFkOTBkMTVjZGRmNjE1NDgwMGEyNWVjNiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODU1ODksNiArODYwODEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzMyMzNmMmFiM2I2Yzk0MzEyODllZjdkYzRmNDA2NzZkMDEyOGJjYWQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvMzMwZGQyMjE0MmZmNDgwNzhiMTg5ZjQ1MzNjY2M1Njg3OGQ4OGY5MiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODU3NjUsNiArODYyNzksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzM2NTY2MTRjN2IwZGMxMWQ0ZGQ3ZTE4MjZmNzdmYTk2YTg4YzQyMGYiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvMzY4Yzc1MTM1YTczNDFhOTY2MjdkMGRjZmM0YjIwODEwMDNkODk3OSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODYxNjEsNiArODY2OTcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzNkZWMxOTgxZTg2NzdlYzZhZDI1MTdmZWJhMjk4NjlkNTNmOGQ4ODQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvM2U4ZjUzMTA0M2EwN2RmMjI4MGJjYTczZmU0YTc5ODdkODJjZTY3ZSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODY5OTcsNiArODc1NTUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzRiZWQ4NDU5MGE1NWIwNmQ3ZWIzMGQ4ZmFhNGIwMGE4ODFiYTliMmMiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvNGUwNWQ2Y2YxYzNmMGMwNGY2ZWU5MmQwOWE1M2VlMGZlMzVjMDg1YSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODc3ODksNiArODgzNjksMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzU5MWQ0NmI4M2QyZTZiYWJjMGNlM2M3NTNjNDYwNmExMGM0NmQ3Y2UiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvNTkxZWY0MzZlZjhjYzk4MmI0OGZkODI3YTQ1NTViNTdjZDk3ODBlNSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODc5MjEsNiArODg1MjMsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzVhNTJkNjgzYzkzNDJkZDMwMWIwZTY5OWRiMzYxNzVhYWQ3MTVlMWQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvNWE4Y2JkNDJhMDMzYjc4OTkzODNkNDhjMzkyOWU1MTdkYWZiYjk5NSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODc5NDMsNiArODg1NjcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzViN2ZmN2MxMTNjMmJjZjEyNTI3MWQyMmM5MzdmNzU4YTBjZDJlZTQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvNWMxNGI0OGRhNzRhYjA2YjNjYzIwYzRmZTM1NWUyNGY3ZGQ3ODUyYSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODgyMjksNiArODg4NzUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzYxNmU1NTM1NGJhMzUxN2NlNjc2MmQ2Y2Q1NjYwMGY5NzkxNWU2NDYiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvNjIyZDQ2ODU0YzJkMzhiNWZlNjMyNjQ5ZDU4YTY5YjdkYTA4MDNjMCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtODk0MzksNiArOTAxMDcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzdhOWExMmIxNWM3OThiODhmMWE1OTk3NzlmNTJkMTRlZGY5ZjRlZjUiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvN2FmMzE1NmQyODZhMzJhNmE2ZmVkZTQ2ZDkzZWMxMmRlZDFhYzEzOCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtOTA1MTcsNiArOTEyMDcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzhmMDViOGRhNzQ4Y2MwNGU2NGI2ODhjNGI0MzVmZTY0Njk5YmQ0ODEiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvOGY5ODBkZDI1ZjFjNzdlMzUzNjEzMWMyYzYyMGFhMzJlOGMxMzE4MCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtOTA1NjEsNiArOTEyNzMsNTAgQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL2NsaWVudF9mdXp6ZXJfY29ycHVzLzhmZDc1OGUyNjAzZjFlMzc3MmNmY2QyOTVmZjBmOTUxOTg4ZDc2NDgiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiY2xpZW50X2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvOTAxODkyNWI1ZTc5MWFlNGIzYWU5Yzg0YjhhNGQ0N2Q4NjY3MWMyZCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy85MGE5YzMzOTA3NTJiOTRjYTE5YTU4Y2IyZmU2MjY3YmM4MThmNzE4IgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MTA2Nyw2ICs5MTgyMywyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvOTkxMmRlMTk3OTE4YWMwZTMwNWYwYzAxMDdmODYzODIzZThhZTgxOCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy85OThhNTRkYzk0YWI2ZTdkNmE2MDY2NDE1ZmIwZGQ5YjUyMzU2MTcxIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MjI1NSw2ICs5MzAzMywyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvYWI5MGJlYmQ0YzAxNzgyN2E2ZDVkZTYxNTExNDQ1ZGY4MTE2OWViNiIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9hYmQ1MmRhNTg4Mjg1NWE2MzYzMmE2OTE3ZGYzNjM5NTM4OTI4Y2QzIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MjYyOSw2ICs5MzQyOSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvYjI2YTNhODNkMGIzMTljZTEzYTlhZTE2NGU5MGZhNmRhMWIwNWE1NyIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9iMjgzZWI4ODg0Yzk4ZGQ1MDUyMzk5NWNlMjIxYWExZWNiM2NhMTgyIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MzAwMyw2ICs5MzgyNSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvYmEyNWJlMTIzYzYzMGJkM2U0YWViOWJkYTYzMDRkZDFhN2U1MTM2NSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9iYTM1NjY3MzU4ODhiNTM3MTJjNmIyZTZkNTJmZjVmMjE5N2FmZDZhIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MzU3NSw2ICs5NDQxOSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvYzc3ZWUwYjZjYjIxYWI3YjdjZjIyMmM3ZjY1NjNiM2IxYjFiNmVlZCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jNzg0YWQyZTIwNWJhNDliNWJiMTMwMjc0NjcyM2RiYzU3MzIwOTgxIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MzU5Nyw2ICs5NDQ2MywyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvYzdiMTdkNmFlNWYzYjE1NTUzMmE1YTliZjAyMzljMDk4YzM1ZWVjMSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jODRkYTU0ZGFjZjA0NDQ1YjUwNDQ4YTcwZmIwZWNkZDA4ZTkyMzRhIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05MzkwNSw2ICs5NDc5MywyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvY2NjMzZlZTJjNmEwZGFhZDY1YTRkOTI5NTk5ZmRhNWNkMzhiOGZkMSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jY2ViNGM2MjBjMDIzMzcxMzhlNDg5MzgzZGIwZDRmNGUyYzdhNzIyIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05NDE5MSw2ICs5NTEwMSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvY3Jhc2gtMTMzNTAwMzE0ODMzYzkwMzdiMzRhNGMzNGFkNzc5ZGQ3OGEwZmE4ZCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9jcmFzaC0xNGVkNzBjZDllYTc5ODdjZGQwYzhmNmUzOTM5OGVlN2M2MGVlMmZmIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05NDY5Nyw2ICs5NTYyOSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvZDMxNDFhNzFjZGFhN2EwOTE1YzhjNTVhYmYyYzk0MGIwZmQwMDE3MiIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9kMzM4NjcwMjkxODg4MTEwMTM2OGNkYmEyYzQ5NjdlODZmZjNhN2I5IgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05NTU3Nyw2ICs5NjUzMSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvZGU5YjlhMzVlMWU3MDQwZTg0MmI1OTdiOGQyZmU0Y2Q2MDJlNjdmMSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9kZjIwYmJiYjg1NGNiOTk3YTczMjg1ZWYzMGQyMjdhYTEyZDkwZTRlIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05NTk5NSw2ICs5Njk3MSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvZTUzMTlhODU3MGE3NjJiYmRkNjcxMzViNDk1NzkwOTczMjRlMzY5YSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9lNWE3YzA4NjIwODI0OGExNWVlNmZhNTE5NWZjNGNlMjI0NjlkZTE1IgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05NjAzOSw2ICs5NzAzNywyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvZTVlMjc2YWNkNjY1Y2NiNDdmODY4ZmUzYmMzNmU2NDdiYmI4NDBiZCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9lNjFmNzI4MjEwY2U3MmVkOGIyYzA2NmJkMWIxZWNmOWU2ODI0Yjc3IgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05Njg5Nyw2ICs5NzkxNywyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvY2xpZW50X2Z1enplcl9jb3JwdXMvZjY5YWE1NjY2ZmQ2MGMxYjY4MTQxOThmMTJkMDQ5YWJiMGU5ZjE0OCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJjbGllbnRfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9jbGllbnRfZnV6emVyX2NvcnB1cy9mNmFmM2Y0NmFhY2VlMzk1ODc3ZDdmNzkwOWY4ZTQxMmE2NTM4ZWZiIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC05Nzg4Nyw2ICs5ODkyOSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvMDUxMjY4YWRlNDVkYmVkMGFhYjg5NmQ3ZDlmNGQxMGJhODlkM2IwOSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJocGFja19wYXJzZXJfZnV6emVyX3Rlc3Rfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzLzA2OTZlN2JmNzgzN2Q5OGRlMDFjOTE1ZDNjOWQ4MGU1ZDIxYjMwZDIiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTk5OTc3LDYgKzEwMTA0MSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvNTI3OGUzNTgxYzA2OTYyNDE1N2ZkOTE3NmVkZGY1MmMwZTU4ZGY2NyIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJocGFja19wYXJzZXJfZnV6emVyX3Rlc3Rfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzLzUyZmU4ZjBlMWZhMjcwZWExNmY2NmM5M2YyZmZhYjI2NWNlMDU5ZTgiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEwMjg4MSw2ICsxMDM5NjcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2JjNDI2M2E5Mjk1MmQ1NjE2OGIzNTRmNzIzZWFhNDNhMzNjZDBiMzUiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiaHBhY2tfcGFyc2VyX2Z1enplcl90ZXN0X29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9iY2FhNzFhYmYyM2IyZTUxMzBlMGNjNDY0NzU1ZmU3NjliZjRhYWE3IgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMDM1ODUsNiArMTA0NjkzLDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9jcmFzaC01YWMzZTFlYTc3NjRjZmI2MzgzNjI5NTc0MjYyZjgyZGM3YjNjYWRhIgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogImhwYWNrX3BhcnNlcl9mdXp6ZXJfdGVzdF9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvZDAwMDUwMmYzMmNhNTYyMGQ3NzQ1ZjM5ZmY2YmUzYjU0N2UyNmE2ZCIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTAzNzYxLDYgKzEwNDg5MSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvZDZkOGI0NzhlNmQxMzk0NWY3YTZmN2QyN2Y0MjRmZjU3Y2ExMmY3ZiIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJocGFja19wYXJzZXJfZnV6emVyX3Rlc3Rfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2Q3NmQwYzdmMjRhZTNjYzNmNTMwZDUzMDZiOGRjYzE1MjkwYzdmZjIiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEwNDIyMyw2ICsxMDUzNzUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2U2N2M3OWQwZWQ4OWFiMmQ1ZThkODExMjdkZjIyODc2ZTYzNmFjNDQiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAiaHBhY2tfcGFyc2VyX2Z1enplcl90ZXN0X29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9lNmZhYjc1NzJmYjJhMWM2ZTEwN2I2ZjgzY2ZmZDEwM2EyMzNkMDIxIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMDQ3MjksNiArMTA1OTAzLDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL3RyYW5zcG9ydC9jaHR0cDIvaHBhY2tfcGFyc2VyX2NvcnB1cy9mNGI0OGM0ZjNmMzEwZWQ3Njc3NTUyNjcyMTBmMjEyZGQ2MmJkNzE1IgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogImhwYWNrX3BhcnNlcl9mdXp6ZXJfdGVzdF9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvZjRkNmZmNjM1YWU0ZmRhNDk3MjIxZGE0YmZhM2U1OTNkZjU5YTQ0ZSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTA0ODgzLDYgKzEwNjA3OSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS90cmFuc3BvcnQvY2h0dHAyL2hwYWNrX3BhcnNlcl9jb3JwdXMvZmNjMDY2OTZlNjQxYTc3NDNiZmQyZjNiN2VjZDg4ZTdiNzI3ZTAwYSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJocGFja19wYXJzZXJfZnV6emVyX3Rlc3Rfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvdHJhbnNwb3J0L2NodHRwMi9ocGFja19wYXJzZXJfY29ycHVzL2ZkMzRlYzkwZmU4ZjkyMThmZDI1YzNlYWMxNTFhZWM5OThjZmY2ZDgiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEyNTA1Nyw2ICsxMjYyNzUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzA4NGU5ZTAyYjhmMmVkNDFmZjljMjJmZWY4MGU1MjJlNDkxMjI3YzUiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvMDhjNDJlZjI5ZWZmODMwNTJjNTg4Nzg1NWYyZmEzZTA3ZWJlNDcwYyIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTI1NDMxLDYgKzEyNjY3MSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvMTI5MzgyYWExMWZhMjkyMjA1M2ZhNDdiYTY5MWRkZGI5ODkwMTI2MCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzZXJ2ZXJfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy8xMzUwMTQxOWYzNDliNzg1NWQyZTk0MDYwYmQwOGIyODkyM2QxZjM3IgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMjU0NTMsNiArMTI2NzE1LDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy8xMzUzZTQ0N2I3YjEwZmIzZWFiYjAyODYzYTFmYzViYzliYjUwNDYwIgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogInNlcnZlcl9mdXp6ZXJfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzE0MjFhOGU5ZjA0NWFjNjVhMGY2OTM4ZmFlOTNmZWNlMTA2MGM0MWQiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEyNzU4Nyw2ICsxMjg4NzEsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzQ3NTYzMzkxYjczYjZlZjRiZjk4NzAxNGMzZTYzMWZlMjU1NWEzNzciCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNDljYjMzY2JiNjBmMDQxZThlOTlkZDcxODk5M2FjZDJjMzM1NDQxNiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTI4ODg1LDYgKzEzMDE5MSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNmMwZWMxODFlODFiOTE1MDcxNzY2NzYyZjVkNzhlOWIxY2NjOTEyOCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzZXJ2ZXJfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy82YzViYjc4YjUxY2Y1MDA2YzkyMjU4MjkyZGUxOTU1MDk4NWMwMGJhIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMjg5MDcsNiArMTMwMjM1LDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy82YzY2MjcxYjc0YTExZjRlNzA2NWE2YWNiYzg2ZTQ2MTFlN2UwZGNjIgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogInNlcnZlcl9mdXp6ZXJfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzZkYjQyZDBjNTQ3MWFjNjk3ZDgyZTg4MmMwMTg2N2I3M2Y3MWM3MWYiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEyOTEwNSw2ICsxMzA0NTUsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzcyZGI5NzgxOTQ2MDlhYzEzOGJjYTM5MzY1MDc0MGEzZWFlOGY0NDgiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvNzM0MmIzZmViYjA3NTIxZTM5YWJkZjRlZTk3NmQxNjE5OWQ1MTIzOSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTI5MzAzLDYgKzEzMDY3NSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvN2RmNzU0MTJkMTI4OTRmYzUwMWJkMmQ4NDkzZmU5ZTVhNzUzYWQ4OCIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzZXJ2ZXJfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy83ZjE1YmJjZS5iaW4iCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEzMDA3Myw2ICsxMzE0NjcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzLzk0N2Y1M2MwOTc4NjcyZTU5YmU0NTIzOTU2NzBmYTk0OWEzM2NiNGYiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvOTU0MGQzYWQzZmE3NWJmYjk1YzBkNTdjZWZkNzM3NjExYzcwNjlhNSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTMwNjIzLDYgKzEzMjAzOSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYTgzMDVlOWJiNGE1NDRlYWVmMjdlOGJkMjFiNGZhYWJmNTI0YTg0ZSIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzZXJ2ZXJfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy9hOGI0MDQ5MjQwYjUzOTQ3YThiYzc2Y2FkZjhkNGZmOWE4MDJjNzgzIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMzA5MDksNiArMTMyMzQ3LDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy9hYzRlMTljOWZlMjkwYWZjNTRiYmIxZTVmNmNmZTg0YTljMWYzYzI5IgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogInNlcnZlcl9mdXp6ZXJfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2FkODEwZjdmLmJpbiIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTMwOTMxLDYgKzEzMjM5MSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYWUyOTc0MjY2MzhlYjVhMDYxMTMyNGY0MDNjMzE4OTUxNTI3NGYxYiIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzZXJ2ZXJfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy9hZWRlZmNkOWJkN2ZjMTBiN2JmNjAzNzJkYTU0YzQzZTk1MzUyM2JkIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMzExMDcsNiArMTMyNTg5LDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy9iNzRkY2Q5YzI3ODBmMTQ1ZTA5YTI3ZDJlMDMxMTk1NzY4ODlhMzAxIgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogInNlcnZlcl9mdXp6ZXJfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2I3Y2U0YTRmNmVlYTIwYzBiODNkOWY3ZmE4NDA2YTA3MzBlZTAwNDAiCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEzMTUwMyw2ICsxMzMwMDcsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2MzOWMwMTkyZDBkNGYyYjI0ZjA1YzI1YTllNjY5Y2MwOTFiZmY5ZTkiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvYzQzZDk3ZjIuYmluIgogICAgIF0sIAogICAgICJjaV9wbGF0Zm9ybXMiOiBbCkBAIC0xMzIwMDksNiArMTMzNTM1LDI4IEBACiAgIH0sIAogICB7CiAgICAgImFyZ3MiOiBbCisgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy9jcmFzaC05MDE3MjMwOTBmZjIwNDJlY2M1YTAwOGNjZDdhZTA4NDVjMTY4MWNiIgorICAgIF0sIAorICAgICJjaV9wbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgImNwdV9jb3N0IjogMC4xLCAKKyAgICAiZXhjbHVkZV9jb25maWdzIjogWworICAgICAgInRzYW4iCisgICAgXSwgCisgICAgImV4Y2x1ZGVfaW9tZ3JzIjogWworICAgICAgInV2IgorICAgIF0sIAorICAgICJmbGFreSI6IGZhbHNlLCAKKyAgICAibGFuZ3VhZ2UiOiAiYyIsIAorICAgICJuYW1lIjogInNlcnZlcl9mdXp6ZXJfb25lX2VudHJ5IiwgCisgICAgInBsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAidXNlc19wb2xsaW5nIjogZmFsc2UKKyAgfSwgCisgIHsKKyAgICAiYXJncyI6IFsKICAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2NyYXNoLWMxZjY2ODQwNjI3ZTNiZmRlZGYyZTRjMjI1YmM0ZGUwYzI2N2VkMzciCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEzMjE4NSw2ICsxMzM3MzMsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2QyOTdiM2Y4NGUzZGVlOWY3NGJmMTE2MjcxOGFmZjY2YTExYTdmNWMiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvZDQ0ZDk0NzY0ZTE3NjFjYjcyNzhmZmU1Y2IxNzg3MWFiYWI3ZWQ4OSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpAQCAtMTMyNTE1LDYgKzEzNDA4NSwyOCBAQAogICB9LCAKICAgewogICAgICJhcmdzIjogWworICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvZTAyMWM1Yjk4MTVmMDJlZTlkMWU1YTAwM2NiZjM1MDBlMTlkYjEzYyIKKyAgICBdLCAKKyAgICAiY2lfcGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJjcHVfY29zdCI6IDAuMSwgCisgICAgImV4Y2x1ZGVfY29uZmlncyI6IFsKKyAgICAgICJ0c2FuIgorICAgIF0sIAorICAgICJleGNsdWRlX2lvbWdycyI6IFsKKyAgICAgICJ1diIKKyAgICBdLCAKKyAgICAiZmxha3kiOiBmYWxzZSwgCisgICAgImxhbmd1YWdlIjogImMiLCAKKyAgICAibmFtZSI6ICJzZXJ2ZXJfZnV6emVyX29uZV9lbnRyeSIsIAorICAgICJwbGF0Zm9ybXMiOiBbCisgICAgICAibGludXgiCisgICAgXSwgCisgICAgInVzZXNfcG9sbGluZyI6IGZhbHNlCisgIH0sIAorICB7CisgICAgImFyZ3MiOiBbCiAgICAgICAidGVzdC9jb3JlL2VuZDJlbmQvZnV6emVycy9zZXJ2ZXJfZnV6emVyX2NvcnB1cy9lMGQ5YTlhNy5iaW4iCiAgICAgXSwgCiAgICAgImNpX3BsYXRmb3JtcyI6IFsKQEAgLTEzMzI0MSw2ICsxMzQ4MzMsMjggQEAKICAgfSwgCiAgIHsKICAgICAiYXJncyI6IFsKKyAgICAgICJ0ZXN0L2NvcmUvZW5kMmVuZC9mdXp6ZXJzL3NlcnZlcl9mdXp6ZXJfY29ycHVzL2ZjMTYyZGI0MGY4N2ZhY2I3M2NmZjIwNzUxZTIzYWYyZTFmNTI5NmUiCisgICAgXSwgCisgICAgImNpX3BsYXRmb3JtcyI6IFsKKyAgICAgICJsaW51eCIKKyAgICBdLCAKKyAgICAiY3B1X2Nvc3QiOiAwLjEsIAorICAgICJleGNsdWRlX2NvbmZpZ3MiOiBbCisgICAgICAidHNhbiIKKyAgICBdLCAKKyAgICAiZXhjbHVkZV9pb21ncnMiOiBbCisgICAgICAidXYiCisgICAgXSwgCisgICAgImZsYWt5IjogZmFsc2UsIAorICAgICJsYW5ndWFnZSI6ICJjIiwgCisgICAgIm5hbWUiOiAic2VydmVyX2Z1enplcl9vbmVfZW50cnkiLCAKKyAgICAicGxhdGZvcm1zIjogWworICAgICAgImxpbnV4IgorICAgIF0sIAorICAgICJ1c2VzX3BvbGxpbmciOiBmYWxzZQorICB9LCAKKyAgeworICAgICJhcmdzIjogWwogICAgICAgInRlc3QvY29yZS9lbmQyZW5kL2Z1enplcnMvc2VydmVyX2Z1enplcl9jb3JwdXMvZmQxNGJlYTQ1ZWNhZjEzYWYwMDUzOTAwZWRiMmYxN2I3MWEwYmYwOSIKICAgICBdLCAKICAgICAiY2lfcGxhdGZvcm1zIjogWwpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy9idWlsZHRlc3RzX2Muc2xuIGIvdnNwcm9qZWN0cy9idWlsZHRlc3RzX2Muc2xuCmluZGV4IGY0ODRmMjkuLmFhMzgyMTUgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvYnVpbGR0ZXN0c19jLnNsbgorKysgYi92c3Byb2plY3RzL2J1aWxkdGVzdHNfYy5zbG4KQEAgLTE1MywxNyArMTUzLDYgQEAKIAkJe0IyM0QzRDFBLTk0MzgtNEVEQS1CRUI2LTlBMEEwM0QxNzc5Mn0gPSB7QjIzRDNEMUEtOTQzOC00RURBLUJFQjYtOUEwQTAzRDE3NzkyfQogCUVuZFByb2plY3RTZWN0aW9uCiBFbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImNodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0IiwgInZjeHByb2pcdGVzdFxjaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdFxjaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdC52Y3hwcm9qIiwgIntBQkFEM0QyQy0wNzhDLTc4NTAtQjQxMy0zMzUyQTA3QzYxNzZ9IgotCVByb2plY3RTZWN0aW9uKG15UHJvcGVydGllcykgPSBwcmVQcm9qZWN0Ci0gICAgICAgIAlsaWIgPSAiRmFsc2UiCi0JRW5kUHJvamVjdFNlY3Rpb24KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0Ci0JCXsxN0JDQUZDMC01RkRDLTRDOTQtQUVCOS05NUYzRTIyMDYxNEJ9ID0gezE3QkNBRkMwLTVGREMtNEM5NC1BRUI5LTk1RjNFMjIwNjE0Qn0KLQkJezI5RDE2ODg1LTcyMjgtNEMzMS04MUVELTVGOTE4N0M3RjJBOX0gPSB7MjlEMTY4ODUtNzIyOC00QzMxLTgxRUQtNUY5MTg3QzdGMkE5fQotCQl7RUFCMEE2MjktMTdBOS00NERCLUI1RkYtRTkxQTcyMUZFMDM3fSA9IHtFQUIwQTYyOS0xN0E5LTQ0REItQjVGRi1FOTFBNzIxRkUwMzd9Ci0JCXtCMjNEM0QxQS05NDM4LTRFREEtQkVCNi05QTBBMDNEMTc3OTJ9ID0ge0IyM0QzRDFBLTk0MzgtNEVEQS1CRUI2LTlBMEEwM0QxNzc5Mn0KLQlFbmRQcm9qZWN0U2VjdGlvbgotRW5kUHJvamVjdAogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJjaHR0cDJfc3RyZWFtX21hcF90ZXN0IiwgInZjeHByb2pcdGVzdFxjaHR0cDJfc3RyZWFtX21hcF90ZXN0XGNodHRwMl9zdHJlYW1fbWFwX3Rlc3QudmN4cHJvaiIsICJ7MTJGOUM1RjgtMUJEQS0zMDVGLTVBMEItQjBGOUNDN0FBN0E0fSIKIAlQcm9qZWN0U2VjdGlvbihteVByb3BlcnRpZXMpID0gcHJlUHJvamVjdAogICAgICAgICAJbGliID0gIkZhbHNlIgpAQCAtMTQ1Niw2ICsxNDQ1LDE3IEBACiAJCXtCMjNEM0QxQS05NDM4LTRFREEtQkVCNi05QTBBMDNEMTc3OTJ9ID0ge0IyM0QzRDFBLTk0MzgtNEVEQS1CRUI2LTlBMEEwM0QxNzc5Mn0KIAlFbmRQcm9qZWN0U2VjdGlvbgogRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzdGF0dXNfY29udmVyc2lvbl90ZXN0IiwgInZjeHByb2pcdGVzdFxzdGF0dXNfY29udmVyc2lvbl90ZXN0XHN0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvaiIsICJ7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fSIKKwlQcm9qZWN0U2VjdGlvbihteVByb3BlcnRpZXMpID0gcHJlUHJvamVjdAorICAgICAgICAJbGliID0gIkZhbHNlIgorCUVuZFByb2plY3RTZWN0aW9uCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7MTdCQ0FGQzAtNUZEQy00Qzk0LUFFQjktOTVGM0UyMjA2MTRCfSA9IHsxN0JDQUZDMC01RkRDLTRDOTQtQUVCOS05NUYzRTIyMDYxNEJ9CisJCXsyOUQxNjg4NS03MjI4LTRDMzEtODFFRC01RjkxODdDN0YyQTl9ID0gezI5RDE2ODg1LTcyMjgtNEMzMS04MUVELTVGOTE4N0M3RjJBOX0KKwkJe0VBQjBBNjI5LTE3QTktNDREQi1CNUZGLUU5MUE3MjFGRTAzN30gPSB7RUFCMEE2MjktMTdBOS00NERCLUI1RkYtRTkxQTcyMUZFMDM3fQorCQl7QjIzRDNEMUEtOTQzOC00RURBLUJFQjYtOUEwQTAzRDE3NzkyfSA9IHtCMjNEM0QxQS05NDM4LTRFREEtQkVCNi05QTBBMDNEMTc3OTJ9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGVzdF90Y3Bfc2VydmVyIiwgInZjeHByb2pcLlx0ZXN0X3RjcF9zZXJ2ZXJcdGVzdF90Y3Bfc2VydmVyLnZjeHByb2oiLCAie0UzMTEwQzQ2LUExNDgtRkY2NS0wOEZELTMzMjQ4MjlCRTdGRX0iCiAJUHJvamVjdFNlY3Rpb24obXlQcm9wZXJ0aWVzKSA9IHByZVByb2plY3QKICAgICAgICAgCWxpYiA9ICJUcnVlIgpAQCAtMTgxNSwyMiArMTgxNSw2IEBACiAJCXsxOUY5Mjk2Ni0zQjBFLTRGRjgtQ0Q3Qy00MzVEMzUzRTA3OUV9LlJlbGVhc2UtRExMfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCiAJCXsxOUY5Mjk2Ni0zQjBFLTRGRjgtQ0Q3Qy00MzVEMzUzRTA3OUV9LlJlbGVhc2UtRExMfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAogCQl7MTlGOTI5NjYtM0IwRS00RkY4LUNEN0MtNDM1RDM1M0UwNzlFfS5SZWxlYXNlLURMTHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0Ci0JCXtBQkFEM0QyQy0wNzhDLTc4NTAtQjQxMy0zMzUyQTA3QzYxNzZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCi0JCXtBQkFEM0QyQy0wNzhDLTc4NTAtQjQxMy0zMzUyQTA3QzYxNzZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKLQkJe0FCQUQzRDJDLTA3OEMtNzg1MC1CNDEzLTMzNTJBMDdDNjE3Nn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXtBQkFEM0QyQy0wNzhDLTc4NTAtQjQxMy0zMzUyQTA3QzYxNzZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0Ci0JCXtBQkFEM0QyQy0wNzhDLTc4NTAtQjQxMy0zMzUyQTA3QzYxNzZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXtBQkFEM0QyQy0wNzhDLTc4NTAtQjQxMy0zMzUyQTA3QzYxNzZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5EZWJ1Zy1ETEx8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKLQkJe0FCQUQzRDJDLTA3OEMtNzg1MC1CNDEzLTMzNTJBMDdDNjE3Nn0uRGVidWctRExMfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5EZWJ1Zy1ETEx8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5EZWJ1Zy1ETEx8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKLQkJe0FCQUQzRDJDLTA3OEMtNzg1MC1CNDEzLTMzNTJBMDdDNjE3Nn0uUmVsZWFzZS1ETEx8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5SZWxlYXNlLURMTHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7QUJBRDNEMkMtMDc4Qy03ODUwLUI0MTMtMzM1MkEwN0M2MTc2fS5SZWxlYXNlLURMTHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKLQkJe0FCQUQzRDJDLTA3OEMtNzg1MC1CNDEzLTMzNTJBMDdDNjE3Nn0uUmVsZWFzZS1ETEx8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7MTJGOUM1RjgtMUJEQS0zMDVGLTVBMEItQjBGOUNDN0FBN0E0fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7MTJGOUM1RjgtMUJEQS0zMDVGLTVBMEItQjBGOUNDN0FBN0E0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CiAJCXsxMkY5QzVGOC0xQkRBLTMwNUYtNUEwQi1CMEY5Q0M3QUE3QTR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgpAQCAtMzc2Nyw2ICszNzUxLDIyIEBACiAJCXs1Mjk3NzFGMC0xMEIwLTlCMUEtMUU3RS04QThFMDE4NzAzNDh9LlJlbGVhc2UtRExMfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCiAJCXs1Mjk3NzFGMC0xMEIwLTlCMUEtMUU3RS04QThFMDE4NzAzNDh9LlJlbGVhc2UtRExMfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAogCQl7NTI5NzcxRjAtMTBCMC05QjFBLTFFN0UtOEE4RTAxODcwMzQ4fS5SZWxlYXNlLURMTHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0CisJCXsyMUUyQTI0MS05RDQ4LTAyQ0QtOTJFNC00RUVDOTg0MjRDRjV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXsyMUUyQTI0MS05RDQ4LTAyQ0QtOTJFNC00RUVDOTg0MjRDRjV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKKwkJezIxRTJBMjQxLTlENDgtMDJDRC05MkU0LTRFRUM5ODQyNENGNX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsyMUUyQTI0MS05RDQ4LTAyQ0QtOTJFNC00RUVDOTg0MjRDRjV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0CisJCXsyMUUyQTI0MS05RDQ4LTAyQ0QtOTJFNC00RUVDOTg0MjRDRjV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NAorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXsyMUUyQTI0MS05RDQ4LTAyQ0QtOTJFNC00RUVDOTg0MjRDRjV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5EZWJ1Zy1ETEx8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezIxRTJBMjQxLTlENDgtMDJDRC05MkU0LTRFRUM5ODQyNENGNX0uRGVidWctRExMfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5EZWJ1Zy1ETEx8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NAorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5EZWJ1Zy1ETEx8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKKwkJezIxRTJBMjQxLTlENDgtMDJDRC05MkU0LTRFRUM5ODQyNENGNX0uUmVsZWFzZS1ETEx8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5SZWxlYXNlLURMTHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fS5SZWxlYXNlLURMTHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQKKwkJezIxRTJBMjQxLTlENDgtMDJDRC05MkU0LTRFRUM5ODQyNENGNX0uUmVsZWFzZS1ETEx8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NAogCQl7RTMxMTBDNDYtQTE0OC1GRjY1LTA4RkQtMzMyNDgyOUJFN0ZFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgogCQl7RTMxMTBDNDYtQTE0OC1GRjY1LTA4RkQtMzMyNDgyOUJFN0ZFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0CiAJCXtFMzExMEM0Ni1BMTQ4LUZGNjUtMDhGRC0zMzI0ODI5QkU3RkV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrKy9ncnBjKysudmN4cHJvaiBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKysvZ3JwYysrLnZjeHByb2oKaW5kZXggYmQ5YzU0Ni4uODZjMmZlMyAxMDA2NDQKLS0tIGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrKy9ncnBjKysudmN4cHJvagorKysgYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrL2dycGMrKy52Y3hwcm9qCkBAIC0zMjEsNiArMzIxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2ZXJfY29udGV4dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZlcl9pbnRlcmZhY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2aWNlX3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzbGljZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1c19jb2RlX2VudW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXNfaGVscGVyLmgiIC8+CmRpZmYgLS1naXQgYS92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrL2dycGMrKy52Y3hwcm9qLmZpbHRlcnMgYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrL2dycGMrKy52Y3hwcm9qLmZpbHRlcnMKaW5kZXggOTNkODI3NC4uZGZmYzcwZiAxMDA2NDQKLS0tIGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrKy9ncnBjKysudmN4cHJvai5maWx0ZXJzCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKysvZ3JwYysrLnZjeHByb2ouZmlsdGVycwpAQCAtMzAzLDYgKzMwMyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmljZV90eXBlLmgiPgogICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzbGljZS5oIj4KKyAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzLmgiPgogICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdGVzdF91dGlsL2dycGMrK190ZXN0X3V0aWwudmN4cHJvaiBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdGVzdF91dGlsL2dycGMrK190ZXN0X3V0aWwudmN4cHJvagppbmRleCA3ZWJhNWM1Li41OGI4N2VmIDEwMDY0NAotLS0gYS92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrX3Rlc3RfdXRpbC9ncnBjKytfdGVzdF91dGlsLnZjeHByb2oKKysrIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrK190ZXN0X3V0aWwvZ3JwYysrX3Rlc3RfdXRpbC52Y3hwcm9qCkBAIC0xNjgsNiArMTY4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2ZXJfY29udGV4dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZlcl9pbnRlcmZhY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2aWNlX3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzbGljZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1c19jb2RlX2VudW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXNfaGVscGVyLmgiIC8+CmRpZmYgLS1naXQgYS92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrX3Rlc3RfdXRpbC9ncnBjKytfdGVzdF91dGlsLnZjeHByb2ouZmlsdGVycyBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdGVzdF91dGlsL2dycGMrK190ZXN0X3V0aWwudmN4cHJvai5maWx0ZXJzCmluZGV4IDlhMTBlMDcuLmFhYmI0NWQgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdGVzdF91dGlsL2dycGMrK190ZXN0X3V0aWwudmN4cHJvai5maWx0ZXJzCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdGVzdF91dGlsL2dycGMrK190ZXN0X3V0aWwudmN4cHJvai5maWx0ZXJzCkBAIC05Niw2ICs5Niw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmljZV90eXBlLmgiPgogICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzbGljZS5oIj4KKyAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzLmgiPgogICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdW5zZWN1cmUvZ3JwYysrX3Vuc2VjdXJlLnZjeHByb2ogYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrX3Vuc2VjdXJlL2dycGMrK191bnNlY3VyZS52Y3hwcm9qCmluZGV4IDdmMmU4MTUuLjMzYTc0YmEgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdW5zZWN1cmUvZ3JwYysrX3Vuc2VjdXJlLnZjeHByb2oKKysrIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrK191bnNlY3VyZS9ncnBjKytfdW5zZWN1cmUudmN4cHJvagpAQCAtMzIxLDYgKzMyMSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmVyX2NvbnRleHQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2ZXJfaW50ZXJmYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmljZV90eXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2xpY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXNfY29kZV9lbnVtLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzX2hlbHBlci5oIiAvPgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrK191bnNlY3VyZS9ncnBjKytfdW5zZWN1cmUudmN4cHJvai5maWx0ZXJzIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMrK191bnNlY3VyZS9ncnBjKytfdW5zZWN1cmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGRmNjIzODQuLmI4N2Q3ODkgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjKytfdW5zZWN1cmUvZ3JwYysrX3Vuc2VjdXJlLnZjeHByb2ouZmlsdGVycworKysgYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYysrX3Vuc2VjdXJlL2dycGMrK191bnNlY3VyZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTI4OCw2ICsyODgsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZpY2VfdHlwZS5oIj4KICAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2xpY2UuaCI+CisgICAgICA8RmlsdGVyPmluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1cy5oIj4KICAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYy9ncnBjLnZjeHByb2ogYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwYy9ncnBjLnZjeHByb2oKaW5kZXggYjUzMWM2Zi4uMTNkODI1YSAxMDA2NDQKLS0tIGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMvZ3JwYy52Y3hwcm9qCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjL2dycGMudmN4cHJvagpAQCAtMzIzLDYgKzMyMyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZW5kcG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxlbmRwb2ludF9wYWlyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXJyb3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxlcnJvcl9pbnRlcm5hbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X2Vwb2xsX2xpbnV4LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXZfcG9sbF9wb3NpeC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X3Bvc2l4LmgiIC8+CkBAIC0zNzUsNiArMzc2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxqc29uXGpzb25fcmVhZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcanNvblxqc29uX3dyaXRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHBlcmNlbnRfZW5jb2RpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9oYXNoX3RhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfaW50ZXJuYWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9zdHJpbmdfaGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcYXBpX3RyYWNlLmgiIC8+CkBAIC0zODgsMTQgKzM5MCwxNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcaW5pdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcbGFtZV9jbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXHNlcnZlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcdmFsaWRhdGVfbWV0YWRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcYnl0ZV9zdHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcY29ubmVjdGl2aXR5X3N0YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1kc3RyX2hhc2hfdGFibGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcZXJyb3JfdXRpbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcaHR0cDJfZXJyb3JzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhX2JhdGNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHBpZF9jb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHNlcnZpY2VfY29uZmlnLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXRpY19tZXRhZGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFx0aW1lb3V0X2VuY29kaW5nLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRyYW5zcG9ydC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFx0cmFuc3BvcnRfaW1wbC5oIiAvPgpAQCAtNDEyLDExICs0MTcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XGhwYWNrX2VuY29kZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxocGFja19wYXJzZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxocGFja190YWJsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XGh0dHAyX2Vycm9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XGh1ZmZzeW1zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaW5jb21pbmdfbWV0YWRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxpbnRlcm5hbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0YXR1c19jb252ZXJzaW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RyZWFtX21hcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHZhcmludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcYWxwblxhbHBuLmgiIC8+CkBAIC02NTYsNiArNjU5LDEwIEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfYnVmZmVyLmMiPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2hhc2hfdGFibGUuYyI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfaW50ZXJuLmMiPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX3N0cmluZ19oZWxwZXJzLmMiPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcYWxhcm0uYyI+CkBAIC02OTgsNyArNzA1LDcgQEAKICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcY29ubmVjdGl2aXR5X3N0YXRlLmMiPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZHN0cl9oYXNoX3RhYmxlLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxlcnJvcl91dGlscy5jIj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWV0YWRhdGEuYyI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC03MTAsNiArNzE3LDggQEAKICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdGljX21ldGFkYXRhLmMiPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbi5jIj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcdGltZW91dF9lbmNvZGluZy5jIj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcdHJhbnNwb3J0LmMiPgpAQCAtNzUwLDggKzc1OSw2IEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRccGFyc2luZy5jIj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbi5jIj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxzdHJlYW1fbGlzdHMuYyI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RyZWFtX21hcC5jIj4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjL2dycGMudmN4cHJvai5maWx0ZXJzIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMvZ3JwYy52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNzliYmFlYy4uZGUyZTgyMSAxMDA2NDQKLS0tIGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMvZ3JwYy52Y3hwcm9qLmZpbHRlcnMKKysrIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGMvZ3JwYy52Y3hwcm9qLmZpbHRlcnMKQEAgLTI1Niw2ICsyNTYsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9idWZmZXIuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2hhc2hfdGFibGUuYyI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2ludGVybi5jIj4KKyAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHNsaWNlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2Vfc3RyaW5nX2hlbHBlcnMuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzE5LDcgKzMyNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGNvbm5lY3Rpdml0eV9zdGF0ZS5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZHN0cl9oYXNoX3RhYmxlLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxlcnJvcl91dGlscy5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZXRhZGF0YS5jIj4KQEAgLTMzNyw2ICszNDMsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0aWNfbWV0YWRhdGEuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uYyI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcdGltZW91dF9lbmNvZGluZy5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzk3LDkgKzQwNiw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRccGFyc2luZy5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uYyI+Ci0gICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0cmVhbV9saXN0cy5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC04MjcsNiArODMzLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxlcnJvci5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXGlvbWdyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXJyb3JfaW50ZXJuYWwuaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxpb21ncjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X2Vwb2xsX2xpbnV4LmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcaW9tZ3I8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTk4Myw2ICs5OTIsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHBlcmNlbnRfZW5jb2RpbmcuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2hhc2hfdGFibGUuaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2ludGVybmFsLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTEwMjIsMTMgKzEwMzQsMTkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXHNlcnZlci5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHN1cmZhY2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXHZhbGlkYXRlX21ldGFkYXRhLmgiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc3VyZmFjZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxieXRlX3N0cmVhbS5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxjb25uZWN0aXZpdHlfc3RhdGUuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWRzdHJfaGFzaF90YWJsZS5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcZXJyb3JfdXRpbHMuaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcaHR0cDJfZXJyb3JzLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhLmgiPgpAQCAtMTA0Niw2ICsxMDY0LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdGljX21ldGFkYXRhLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXR1c19jb252ZXJzaW9uLmgiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRpbWVvdXRfZW5jb2RpbmcuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTEwOTQsOSArMTExNSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaHBhY2tfdGFibGUuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XGh0dHAyX2Vycm9ycy5oIj4KLSAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaHVmZnN5bXMuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTEwNiw5ICsxMTI0LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxpbnRlcm5hbC5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uaCI+Ci0gICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0cmVhbV9tYXAuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGNfdGVzdF91dGlsL2dycGNfdGVzdF91dGlsLnZjeHByb2ogYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwY190ZXN0X3V0aWwvZ3JwY190ZXN0X3V0aWwudmN4cHJvagppbmRleCAyMzBjM2ViLi43ZDY2ODVkIDEwMDY0NAotLS0gYS92c3Byb2plY3RzL3ZjeHByb2ovZ3JwY190ZXN0X3V0aWwvZ3JwY190ZXN0X3V0aWwudmN4cHJvagorKysgYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwY190ZXN0X3V0aWwvZ3JwY190ZXN0X3V0aWwudmN4cHJvagpAQCAtMjE2LDYgKzIxNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZW5kcG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxlbmRwb2ludF9wYWlyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXJyb3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxlcnJvcl9pbnRlcm5hbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X2Vwb2xsX2xpbnV4LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXZfcG9sbF9wb3NpeC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X3Bvc2l4LmgiIC8+CkBAIC0yNjgsNiArMjY5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxqc29uXGpzb25fcmVhZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcanNvblxqc29uX3dyaXRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHBlcmNlbnRfZW5jb2RpbmcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9oYXNoX3RhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfaW50ZXJuYWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9zdHJpbmdfaGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcYXBpX3RyYWNlLmgiIC8+CkBAIC0yODEsMTQgKzI4MywxNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcaW5pdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcbGFtZV9jbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXHNlcnZlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcdmFsaWRhdGVfbWV0YWRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcYnl0ZV9zdHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcY29ubmVjdGl2aXR5X3N0YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1kc3RyX2hhc2hfdGFibGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcZXJyb3JfdXRpbHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcaHR0cDJfZXJyb3JzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhX2JhdGNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHBpZF9jb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHNlcnZpY2VfY29uZmlnLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXRpY19tZXRhZGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFx0aW1lb3V0X2VuY29kaW5nLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRyYW5zcG9ydC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFx0cmFuc3BvcnRfaW1wbC5oIiAvPgpAQCAtNTAyLDYgKzUwNywxMCBAQAogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2J1ZmZlci5jIj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9oYXNoX3RhYmxlLmMiPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2ludGVybi5jIj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9zdHJpbmdfaGVscGVycy5jIj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXGFsYXJtLmMiPgpAQCAtNTQ0LDcgKzU1Myw3IEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGNvbm5lY3Rpdml0eV9zdGF0ZS5jIj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWRzdHJfaGFzaF90YWJsZS5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcZXJyb3JfdXRpbHMuYyI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhLmMiPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNTU2LDYgKzU2NSw4IEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXRpY19tZXRhZGF0YS5jIj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uYyI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRpbWVvdXRfZW5jb2RpbmcuYyI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRyYW5zcG9ydC5jIj4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjX3Rlc3RfdXRpbC9ncnBjX3Rlc3RfdXRpbC52Y3hwcm9qLmZpbHRlcnMgYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwY190ZXN0X3V0aWwvZ3JwY190ZXN0X3V0aWwudmN4cHJvai5maWx0ZXJzCmluZGV4IDQ2YTM4MTUuLjFjMjFmZjMgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjX3Rlc3RfdXRpbC9ncnBjX3Rlc3RfdXRpbC52Y3hwcm9qLmZpbHRlcnMKKysrIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGNfdGVzdF91dGlsL2dycGNfdGVzdF91dGlsLnZjeHByb2ouZmlsdGVycwpAQCAtMzEzLDYgKzMxMywxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2J1ZmZlci5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHNsaWNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfaGFzaF90YWJsZS5jIj4KKyAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHNsaWNlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfaW50ZXJuLmMiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9zdHJpbmdfaGVscGVycy5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHNsaWNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0zNzYsNyArMzgyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcY29ubmVjdGl2aXR5X3N0YXRlLmMiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1kc3RyX2hhc2hfdGFibGUuYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGVycm9yX3V0aWxzLmMiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhLmMiPgpAQCAtMzk0LDYgKzQwMCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXRpY19tZXRhZGF0YS5jIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbi5jIj4KKyAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFx0aW1lb3V0X2VuY29kaW5nLmMiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC02MDgsNiArNjE3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxlcnJvci5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXGlvbWdyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXJyb3JfaW50ZXJuYWwuaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxpb21ncjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X2Vwb2xsX2xpbnV4LmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcaW9tZ3I8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTc2NCw2ICs3NzYsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHBlcmNlbnRfZW5jb2RpbmcuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2hhc2hfdGFibGUuaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2ludGVybmFsLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTgwMywxMyArODE4LDE5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc3VyZmFjZVxzZXJ2ZXIuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzdXJmYWNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc3VyZmFjZVx2YWxpZGF0ZV9tZXRhZGF0YS5oIj4KKyAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHN1cmZhY2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcYnl0ZV9zdHJlYW0uaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcY29ubmVjdGl2aXR5X3N0YXRlLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1kc3RyX2hhc2hfdGFibGUuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGVycm9yX3V0aWxzLmgiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGh0dHAyX2Vycm9ycy5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZXRhZGF0YS5oIj4KQEAgLTgyNyw2ICs4NDgsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0aWNfbWV0YWRhdGEuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcdGltZW91dF9lbmNvZGluZy5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGNfdW5zZWN1cmUvZ3JwY191bnNlY3VyZS52Y3hwcm9qIGIvdnNwcm9qZWN0cy92Y3hwcm9qL2dycGNfdW5zZWN1cmUvZ3JwY191bnNlY3VyZS52Y3hwcm9qCmluZGV4IDY2ZGM0MzAuLjgyNmMwNjUgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjX3Vuc2VjdXJlL2dycGNfdW5zZWN1cmUudmN4cHJvagorKysgYi92c3Byb2plY3RzL3ZjeHByb2ovZ3JwY191bnNlY3VyZS9ncnBjX3Vuc2VjdXJlLnZjeHByb2oKQEAgLTMxMyw2ICszMTMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGVuZHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZW5kcG9pbnRfcGFpci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGVycm9yLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXJyb3JfaW50ZXJuYWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxldl9lcG9sbF9saW51eC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGV2X3BvbGxfcG9zaXguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxldl9wb3NpeC5oIiAvPgpAQCAtMzY1LDYgKzM2Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcanNvblxqc29uX3JlYWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGpzb25canNvbl93cml0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxwZXJjZW50X2VuY29kaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfaGFzaF90YWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2ludGVybmFsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2Vfc3RyaW5nX2hlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXGFwaV90cmFjZS5oIiAvPgpAQCAtMzc4LDE0ICszODAsMTcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXGluaXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXGxhbWVfY2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc3VyZmFjZVxzZXJ2ZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXHZhbGlkYXRlX21ldGFkYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGJ5dGVfc3RyZWFtLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGNvbm5lY3Rpdml0eV9zdGF0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZHN0cl9oYXNoX3RhYmxlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGVycm9yX3V0aWxzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGh0dHAyX2Vycm9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZXRhZGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZXRhZGF0YV9iYXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxwaWRfY29udHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzZXJ2aWNlX2NvbmZpZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxzdGF0aWNfbWV0YWRhdGEuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcdGltZW91dF9lbmNvZGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFx0cmFuc3BvcnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcdHJhbnNwb3J0X2ltcGwuaCIgLz4KQEAgLTQwMiwxMSArNDA3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxocGFja19lbmNvZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaHBhY2tfcGFyc2VyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaHBhY2tfdGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxodHRwMl9lcnJvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxodWZmc3ltcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XGluY29taW5nX21ldGFkYXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaW50ZXJuYWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0cmVhbV9tYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFx2YXJpbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXGFscG5cYWxwbi5oIiAvPgpAQCAtNjI0LDYgKzYyNywxMCBAQAogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2J1ZmZlci5jIj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9oYXNoX3RhYmxlLmMiPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX2ludGVybi5jIj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9zdHJpbmdfaGVscGVycy5jIj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzdXJmYWNlXGFsYXJtLmMiPgpAQCAtNjY2LDcgKzY3Myw3IEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGNvbm5lY3Rpdml0eV9zdGF0ZS5jIj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWRzdHJfaGFzaF90YWJsZS5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcZXJyb3JfdXRpbHMuYyI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XG1ldGFkYXRhLmMiPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNjc4LDYgKzY4NSw4IEBACiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXRpY19tZXRhZGF0YS5jIj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uYyI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRpbWVvdXRfZW5jb2RpbmcuYyI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRyYW5zcG9ydC5jIj4KQEAgLTcyMCw4ICs3MjksNiBAQAogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHBhcnNpbmcuYyI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uYyI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RyZWFtX2xpc3RzLmMiPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0cmVhbV9tYXAuYyI+CmRpZmYgLS1naXQgYS92c3Byb2plY3RzL3ZjeHByb2ovZ3JwY191bnNlY3VyZS9ncnBjX3Vuc2VjdXJlLnZjeHByb2ouZmlsdGVycyBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjX3Vuc2VjdXJlL2dycGNfdW5zZWN1cmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDY3NTkyYjIuLjA2ZGRhYzkgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjX3Vuc2VjdXJlL2dycGNfdW5zZWN1cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai9ncnBjX3Vuc2VjdXJlL2dycGNfdW5zZWN1cmUudmN4cHJvai5maWx0ZXJzCkBAIC0yNTksNiArMjU5LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcc2xpY2Vcc2xpY2VfYnVmZmVyLmMiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9oYXNoX3RhYmxlLmMiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9pbnRlcm4uYyI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzbGljZTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHNsaWNlXHNsaWNlX3N0cmluZ19oZWxwZXJzLmMiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTMyMiw3ICszMjgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxjb25uZWN0aXZpdHlfc3RhdGUuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWRzdHJfaGFzaF90YWJsZS5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcZXJyb3JfdXRpbHMuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWV0YWRhdGEuYyI+CkBAIC0zNDAsNiArMzQ2LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdGljX21ldGFkYXRhLmMiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXR1c19jb252ZXJzaW9uLmMiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRpbWVvdXRfZW5jb2RpbmcuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQwMyw5ICs0MTIsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHBhcnNpbmcuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0YXR1c19jb252ZXJzaW9uLmMiPgotICAgICAgPEZpbHRlcj5zcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxzdHJlYW1fbGlzdHMuYyI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNzQwLDYgKzc0Niw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcaW9tZ3JcZXJyb3IuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxpb21ncjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXGlvbWdyXGVycm9yX2ludGVybmFsLmgiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcaW9tZ3I8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxpb21nclxldl9lcG9sbF9saW51eC5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXGlvbWdyPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC04OTYsNiArOTA1LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxwZXJjZW50X2VuY29kaW5nLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9oYXNoX3RhYmxlLmgiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc2xpY2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlxzbGljZVxzbGljZV9pbnRlcm5hbC5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHNsaWNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC05MzUsMTMgKzk0NywxOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2Vcc2VydmVyLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcc3VyZmFjZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHN1cmZhY2VcdmFsaWRhdGVfbWV0YWRhdGEuaCI+CisgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlxzdXJmYWNlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGJ5dGVfc3RyZWFtLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XGNvbm5lY3Rpdml0eV9zdGF0ZS5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxtZHN0cl9oYXNoX3RhYmxlLmgiPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxlcnJvcl91dGlscy5oIj4KKyAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcbGliXHRyYW5zcG9ydDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcbGliXHRyYW5zcG9ydFxodHRwMl9lcnJvcnMuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcbWV0YWRhdGEuaCI+CkBAIC05NTksNiArOTc3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGxpYlx0cmFuc3BvcnRcc3RhdGljX21ldGFkYXRhLmgiPgogICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHN0YXR1c19jb252ZXJzaW9uLmgiPgorICAgICAgPEZpbHRlcj5zcmNcY29yZVxsaWJcdHJhbnNwb3J0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxsaWJcdHJhbnNwb3J0XHRpbWVvdXRfZW5jb2RpbmcuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGxpYlx0cmFuc3BvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTEwMDcsOSArMTAyOCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaHBhY2tfdGFibGUuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XGh0dHAyX2Vycm9ycy5oIj4KLSAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcaHVmZnN5bXMuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTAxOSw5ICsxMDM3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXHNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydFxpbnRlcm5hbC5oIj4KICAgICAgIDxGaWx0ZXI+c3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxzcmNcY29yZVxleHRcdHJhbnNwb3J0XGNodHRwMlx0cmFuc3BvcnRcc3RhdHVzX2NvbnZlcnNpb24uaCI+Ci0gICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cc3JjXGNvcmVcZXh0XHRyYW5zcG9ydFxjaHR0cDJcdHJhbnNwb3J0XHN0cmVhbV9tYXAuaCI+CiAgICAgICA8RmlsdGVyPnNyY1xjb3JlXGV4dFx0cmFuc3BvcnRcY2h0dHAyXHRyYW5zcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QvY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvai5maWx0ZXJzIGIvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QvY2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvai5maWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTRhZjUwLi4wMDAwMDAwCi0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0L2NodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0LnZjeHByb2ouZmlsdGVycworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlx0ZXN0XGNvcmVcdHJhbnNwb3J0XGNodHRwMlxzdGF0dXNfY29udmVyc2lvbl90ZXN0LmMiPgotICAgICAgPEZpbHRlcj50ZXN0XGNvcmVcdHJhbnNwb3J0XGNodHRwMjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1Hcm91cD4KLQotICA8SXRlbUdyb3VwPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0idGVzdCI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57Mjk2OTBkZmItYTgwOC04NGIzLWQ4MmUtZGVhZGI1ZDA0MTAzfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9InRlc3RcY29yZSI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57ZDE3ZTUxY2EtNzNhYy02ZjMxLWQwMmMtNjMxYWM4NDljMTk0fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9InRlc3RcY29yZVx0cmFuc3BvcnQiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezNmMDNjZDc0LTk5OGUtMjNlZC1hMzcyLWExYjcwNmQzNWJmNH08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJ0ZXN0XGNvcmVcdHJhbnNwb3J0XGNodHRwMiI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YjY1YTliMGMtZmEzZC0xOTE5LWI3MGYtOWQyZDVjYzI4MDc3fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Ci0KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NvZGVnZW5fdGVzdF9mdWxsL2NvZGVnZW5fdGVzdF9mdWxsLnZjeHByb2ogYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jb2RlZ2VuX3Rlc3RfZnVsbC9jb2RlZ2VuX3Rlc3RfZnVsbC52Y3hwcm9qCmluZGV4IGFkNjg2NWEuLmQ4ZDRhNzYgMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NvZGVnZW5fdGVzdF9mdWxsL2NvZGVnZW5fdGVzdF9mdWxsLnZjeHByb2oKKysrIGIvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY29kZWdlbl90ZXN0X2Z1bGwvY29kZWdlbl90ZXN0X2Z1bGwudmN4cHJvagpAQCAtMTgxLDYgKzE4MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmVyX2NvbnRleHQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2ZXJfaW50ZXJmYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmljZV90eXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2xpY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXNfY29kZV9lbnVtLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzX2hlbHBlci5oIiAvPgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY29kZWdlbl90ZXN0X2Z1bGwvY29kZWdlbl90ZXN0X2Z1bGwudmN4cHJvai5maWx0ZXJzIGIvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY29kZWdlbl90ZXN0X2Z1bGwvY29kZWdlbl90ZXN0X2Z1bGwudmN4cHJvai5maWx0ZXJzCmluZGV4IDFiMzY3YjEuLmQ3OWYyMjggMTAwNjQ0Ci0tLSBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NvZGVnZW5fdGVzdF9mdWxsL2NvZGVnZW5fdGVzdF9mdWxsLnZjeHByb2ouZmlsdGVycworKysgYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jb2RlZ2VuX3Rlc3RfZnVsbC9jb2RlZ2VuX3Rlc3RfZnVsbC52Y3hwcm9qLmZpbHRlcnMKQEAgLTg0LDYgKzg0LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2aWNlX3R5cGUuaCI+CiAgICAgICA8RmlsdGVyPmluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNsaWNlLmgiPgorICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXMuaCI+CiAgICAgICA8RmlsdGVyPmluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlbjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY29kZWdlbl90ZXN0X21pbmltYWwvY29kZWdlbl90ZXN0X21pbmltYWwudmN4cHJvaiBiL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NvZGVnZW5fdGVzdF9taW5pbWFsL2NvZGVnZW5fdGVzdF9taW5pbWFsLnZjeHByb2oKaW5kZXggOWRmNjcwMi4uNTk1ZTY3MyAxMDA2NDQKLS0tIGEvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY29kZWdlbl90ZXN0X21pbmltYWwvY29kZWdlbl90ZXN0X21pbmltYWwudmN4cHJvagorKysgYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jb2RlZ2VuX3Rlc3RfbWluaW1hbC9jb2RlZ2VuX3Rlc3RfbWluaW1hbC52Y3hwcm9qCkBAIC0xODEsNiArMTgxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2ZXJfY29udGV4dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZlcl9pbnRlcmZhY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzZXJ2aWNlX3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzbGljZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1c19jb2RlX2VudW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzdGF0dXNfaGVscGVyLmgiIC8+CmRpZmYgLS1naXQgYS92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jb2RlZ2VuX3Rlc3RfbWluaW1hbC9jb2RlZ2VuX3Rlc3RfbWluaW1hbC52Y3hwcm9qLmZpbHRlcnMgYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jb2RlZ2VuX3Rlc3RfbWluaW1hbC9jb2RlZ2VuX3Rlc3RfbWluaW1hbC52Y3hwcm9qLmZpbHRlcnMKaW5kZXggYzhmNjJmZi4uNzhkZTk1MCAxMDA2NDQKLS0tIGEvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvY29kZWdlbl90ZXN0X21pbmltYWwvY29kZWdlbl90ZXN0X21pbmltYWwudmN4cHJvai5maWx0ZXJzCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NvZGVnZW5fdGVzdF9taW5pbWFsL2NvZGVnZW5fdGVzdF9taW5pbWFsLnZjeHByb2ouZmlsdGVycwpAQCAtODcsNiArODcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZpY2VfdHlwZS5oIj4KICAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2xpY2UuaCI+CisgICAgICA8RmlsdGVyPmluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlbjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1cy5oIj4KICAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9ncnBjX3Rvb2xfdGVzdC9ncnBjX3Rvb2xfdGVzdC52Y3hwcm9qIGIvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvZ3JwY190b29sX3Rlc3QvZ3JwY190b29sX3Rlc3QudmN4cHJvagppbmRleCA4OGU0YmY2Li41MzgxYmU1IDEwMDY0NAotLS0gYS92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9ncnBjX3Rvb2xfdGVzdC9ncnBjX3Rvb2xfdGVzdC52Y3hwcm9qCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2dycGNfdG9vbF90ZXN0L2dycGNfdG9vbF90ZXN0LnZjeHByb2oKQEAgLTE4Miw2ICsxODIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZlcl9jb250ZXh0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmVyX2ludGVyZmFjZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNlcnZpY2VfdHlwZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHNsaWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzX2NvZGVfZW51bS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5caW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuXHN0YXR1c19oZWxwZXIuaCIgLz4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2dycGNfdG9vbF90ZXN0L2dycGNfdG9vbF90ZXN0LnZjeHByb2ouZmlsdGVycyBiL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2dycGNfdG9vbF90ZXN0L2dycGNfdG9vbF90ZXN0LnZjeHByb2ouZmlsdGVycwppbmRleCBmZWNlN2YzLi4wNTI2YTA3IDEwMDY0NAotLS0gYS92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9ncnBjX3Rvb2xfdGVzdC9ncnBjX3Rvb2xfdGVzdC52Y3hwcm9qLmZpbHRlcnMKKysrIGIvdnNwcm9qZWN0cy92Y3hwcm9qL3Rlc3QvZ3JwY190b29sX3Rlc3QvZ3JwY190b29sX3Rlc3QudmN4cHJvai5maWx0ZXJzCkBAIC03OCw2ICs3OCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc2VydmljZV90eXBlLmgiPgogICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoU29sdXRpb25EaXIpXC4uXGluY2x1ZGVcZ3JwYysrXGltcGxcY29kZWdlblxzbGljZS5oIj4KKyAgICAgIDxGaWx0ZXI+aW5jbHVkZVxncnBjKytcaW1wbFxjb2RlZ2VuPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlxpbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW5cc3RhdHVzLmgiPgogICAgICAgPEZpbHRlcj5pbmNsdWRlXGdycGMrK1xpbXBsXGNvZGVnZW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L2NodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0L2NodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0LnZjeHByb2ogYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9zdGF0dXNfY29udmVyc2lvbl90ZXN0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvagpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB2c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdC9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdC52Y3hwcm9qCnJlbmFtZSB0byB2c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9zdGF0dXNfY29udmVyc2lvbl90ZXN0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvagppbmRleCBmNWI4ODM4Li5hYjFlM2E3IDEwMDY0NAotLS0gYS92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdC9jaHR0cDJfc3RhdHVzX2NvbnZlcnNpb25fdGVzdC52Y3hwcm9qCisrKyBiL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3Qvc3RhdHVzX2NvbnZlcnNpb25fdGVzdC52Y3hwcm9qCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0FCQUQzRDJDLTA3OEMtNzg1MC1CNDEzLTMzNTJBMDdDNjE3Nn08L1Byb2plY3RHdWlkPgorICAgIDxQcm9qZWN0R3VpZD57MjFFMkEyNDEtOUQ0OC0wMkNELTkyRTQtNEVFQzk4NDI0Q0Y1fTwvUHJvamVjdEd1aWQ+CiAgICAgPElnbm9yZVdhcm5JbnREaXJJblRlbXBEZXRlY3RlZD50cnVlPC9JZ25vcmVXYXJuSW50RGlySW5UZW1wRGV0ZWN0ZWQ+CiAgICAgPEludERpcj4kKFNvbHV0aW9uRGlyKUludERpclwkKE1TQnVpbGRQcm9qZWN0TmFtZSlcPC9JbnREaXI+CiAgIDwvUHJvcGVydHlHcm91cD4KQEAgLTYwLDE0ICs2MCwxNCBAQAogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPgotICAgIDxUYXJnZXROYW1lPmNodHRwMl9zdGF0dXNfY29udmVyc2lvbl90ZXN0PC9UYXJnZXROYW1lPgorICAgIDxUYXJnZXROYW1lPnN0YXR1c19jb252ZXJzaW9uX3Rlc3Q8L1RhcmdldE5hbWU+CiAgICAgPExpbmthZ2UtZ3JwY19kZXBlbmRlbmNpZXNfemxpYj5zdGF0aWM8L0xpbmthZ2UtZ3JwY19kZXBlbmRlbmNpZXNfemxpYj4KICAgICA8Q29uZmlndXJhdGlvbi1ncnBjX2RlcGVuZGVuY2llc196bGliPkRlYnVnPC9Db25maWd1cmF0aW9uLWdycGNfZGVwZW5kZW5jaWVzX3psaWI+CiAgICAgPExpbmthZ2UtZ3JwY19kZXBlbmRlbmNpZXNfb3BlbnNzbD5zdGF0aWM8L0xpbmthZ2UtZ3JwY19kZXBlbmRlbmNpZXNfb3BlbnNzbD4KICAgICA8Q29uZmlndXJhdGlvbi1ncnBjX2RlcGVuZGVuY2llc19vcGVuc3NsPkRlYnVnPC9Db25maWd1cmF0aW9uLWdycGNfZGVwZW5kZW5jaWVzX29wZW5zc2w+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyI+Ci0gICAgPFRhcmdldE5hbWU+Y2h0dHAyX3N0YXR1c19jb252ZXJzaW9uX3Rlc3Q8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldE5hbWU+c3RhdHVzX2NvbnZlcnNpb25fdGVzdDwvVGFyZ2V0TmFtZT4KICAgICA8TGlua2FnZS1ncnBjX2RlcGVuZGVuY2llc196bGliPnN0YXRpYzwvTGlua2FnZS1ncnBjX2RlcGVuZGVuY2llc196bGliPgogICAgIDxDb25maWd1cmF0aW9uLWdycGNfZGVwZW5kZW5jaWVzX3psaWI+UmVsZWFzZTwvQ29uZmlndXJhdGlvbi1ncnBjX2RlcGVuZGVuY2llc196bGliPgogICAgIDxMaW5rYWdlLWdycGNfZGVwZW5kZW5jaWVzX29wZW5zc2w+c3RhdGljPC9MaW5rYWdlLWdycGNfZGVwZW5kZW5jaWVzX29wZW5zc2w+CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogCiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlx0ZXN0XGNvcmVcdHJhbnNwb3J0XGNodHRwMlxzdGF0dXNfY29udmVyc2lvbl90ZXN0LmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChTb2x1dGlvbkRpcilcLi5cdGVzdFxjb3JlXHRyYW5zcG9ydFxzdGF0dXNfY29udmVyc2lvbl90ZXN0LmMiPgogICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KZGlmZiAtLWdpdCBhL3ZzcHJvamVjdHMvdmN4cHJvai90ZXN0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3Qvc3RhdHVzX2NvbnZlcnNpb25fdGVzdC52Y3hwcm9qLmZpbHRlcnMgYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9zdGF0dXNfY29udmVyc2lvbl90ZXN0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWJlZjUKLS0tIC9kZXYvbnVsbAorKysgYi92c3Byb2plY3RzL3ZjeHByb2ovdGVzdC9zdGF0dXNfY29udmVyc2lvbl90ZXN0L3N0YXR1c19jb252ZXJzaW9uX3Rlc3QudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKFNvbHV0aW9uRGlyKVwuLlx0ZXN0XGNvcmVcdHJhbnNwb3J0XHN0YXR1c19jb252ZXJzaW9uX3Rlc3QuYyI+CisgICAgICA8RmlsdGVyPnRlc3RcY29yZVx0cmFuc3BvcnQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisKKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9InRlc3QiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezQ3MDJhOWViLWQyMzktYzc5OS0wNzEyLWI3YWYyMTA2NjViZH08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJ0ZXN0XGNvcmUiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezJmMmVlZDA3LTdkMGYtNGI0YS02N2MwLTk2ZTg2MGJiNmIxNn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJ0ZXN0XGNvcmVcdHJhbnNwb3J0Ij4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsyNjljNjc1MC05MTI2LTliNmEtNDE5Ni1iN2NiZTQ5MmVlOWZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKzwvUHJvamVjdD4KKwo=