ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCBjYWE2YTU1Li41NzU0MmJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCkBAIC0zNTcsMTQgKzM1NywxNCBAQAogLS0tLS0tLS0tLQogbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS8+CiAKLUphZGUKLS0tLS0KLW8gIDxmdHA6Ly9mdHAuamNsYXJrLmNvbS9wdWIvamFkZS9qYWRlLTEuMi4xLnRhci5nej4KLQogRG9jQm9vayBTdHlsZXNoZWV0cwogLS0tLS0tLS0tLS0tLS0tLS0tLQogbyAgPGh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2svZHNzc2wvPgogCitYTUxUTyBYU0xUIEZyb250ZW5kCistLS0tLS0tLS0tLS0tLS0tLS0tCitvICA8aHR0cDovL2N5YmVyZWxrLm5ldC90aW0veG1sdG8vPgorCiBJbnRlbCBQNiBtaWNyb2NvZGUKIC0tLS0tLS0tLS0tLS0tLS0tLQogbyAgPGh0dHA6Ly93d3cudXJiYW5teXRoLm9yZy9taWNyb2NvZGUvPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IGEyMjEwMzkuLmU2OWIzZDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTcsMTAgKzcsOSBAQAogIyBsaXN0IG9mIERPQ0JPT0tTLgogCiBET0NCT09LUyA6PSB3YW5ib29rLnhtbCB6ODUzMGJvb2sueG1sIG1jYWJvb2sueG1sIHZpZGVvYm9vay54bWwgXAotCSAgICBrZXJuZWwtaGFja2luZy54bWwga2VybmVsLWxvY2tpbmcueG1sIHZpYS1hdWRpby54bWwgXAotCSAgICBkZXZpY2Vpb2Jvb2sueG1sIHByb2Nmcy1ndWlkZS54bWwgdHVsaXAtdXNlci54bWwgXAotCSAgICB3cml0aW5nX3VzYl9kcml2ZXIueG1sIHNjc2lkcml2ZXJzLnhtbCBzaXM5MDAueG1sIFwKLQkgICAga2VybmVsLWFwaS54bWwgam91cm5hbC1hcGkueG1sIGxzbS54bWwgdXNiLnhtbCBcCisJICAgIGtlcm5lbC1oYWNraW5nLnhtbCBrZXJuZWwtbG9ja2luZy54bWwgZGV2aWNlaW9ib29rLnhtbCBcCisJICAgIHByb2Nmcy1ndWlkZS54bWwgd3JpdGluZ191c2JfZHJpdmVyLnhtbCBzY3NpZHJpdmVycy54bWwgXAorCSAgICBzaXM5MDAueG1sIGtlcm5lbC1hcGkueG1sIGpvdXJuYWwtYXBpLnhtbCBsc20ueG1sIHVzYi54bWwgXAogCSAgICBnYWRnZXQueG1sIGxpYmF0YS54bWwgbXRkbmFuZC54bWwgbGlicnMueG1sCiAKICMjIwpAQCAtNDIsMTQgKzQxLDE2IEBACiBtYW5kb2NzOiAkKE1BTikKIAogaW5zdGFsbG1hbmRvY3M6IG1hbmRvY3MKLQkkKE1BS0VNQU4pIGluc3RhbGwgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbgorCW1rZGlyIC1wIC91c3IvbG9jYWwvbWFuL21hbjkvCisJaW5zdGFsbCBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuLyouOS5neiAvdXNyL2xvY2FsL21hbi9tYW45LwogCiAjIyMKICNFeHRlcm5hbCBwcm9ncmFtcyB1c2VkCiBLRVJORUxET0MgPSBzY3JpcHRzL2tlcm5lbC1kb2MKIERPQ1BST0MgICA9IHNjcmlwdHMvYmFzaWMvZG9jcHJvYwotU1BMSVRNQU4gID0gJChQRVJMKSAkKHNyY3RyZWUpL3NjcmlwdHMvc3BsaXQtbWFuCi1NQUtFTUFOICAgPSAkKFBFUkwpICQoc3JjdHJlZSkvc2NyaXB0cy9tYWtlbWFuCisKK1hNTFRPRkxBR1MgPSAtbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svc3R5bGVzaGVldC54c2wKKyNYTUxUT0ZMQUdTICs9IC0tc2tpcC12YWxpZGF0aW9uCiAKICMjIwogIyBET0NQUk9DIGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKQEAgLTk2LDQ1ICs5Nyw0NCBAQAogIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0LCBQREYgYW5kIEhUTUwKICMgZGIyaHRtbCBjcmVhdGVzIGEgZGlyZWN0b3J5LiBHZW5lcmF0ZSBhIGh0bWwgZmlsZSB1c2VkIGZvciB0aW1lc3RhbXAKIAotcXVpZXRfY21kX2RiMnBzID0gREIyUFMgICAkQAotICAgICAgY21kX2RiMnBzID0gZGIycHMgLW8gJChkaXIgJEApICQ8CitxdWlldF9jbWRfZGIycHMgPSBYTUxUTyAgICAkQAorICAgICAgY21kX2RiMnBzID0geG1sdG8gcHMgJChYTUxUT0ZMQUdTKSAtbyAkKGRpciAkQCkgJDwKICUucHMgOiAlLnhtbAotCUAod2hpY2ggZGIycHMgPiAvZGV2L251bGwgMj4mMSkgfHwgXAotCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgRG9jQm9vayBzdHlsZXNoZWV0cyAqKioiOyBcCisJQCh3aGljaCB4bWx0byA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB4bWx0byAqKioiOyBcCiAJICBleGl0IDEpCiAJJChjYWxsIGNtZCxkYjJwcykKIAotcXVpZXRfY21kX2RiMnBkZiA9IERCMlBERiAgJEAKLSAgICAgIGNtZF9kYjJwZGYgPSBkYjJwZGYgLW8gJChkaXIgJEApICQ8CitxdWlldF9jbWRfZGIycGRmID0gWE1MVE8gICAkQAorICAgICAgY21kX2RiMnBkZiA9IHhtbHRvIHBkZiAkKFhNTFRPRkxBR1MpIC1vICQoZGlyICRAKSAkPAogJS5wZGYgOiAlLnhtbAotCUAod2hpY2ggZGIycGRmID4gL2Rldi9udWxsIDI+JjEpIHx8IFwKLQkgKGVjaG8gIioqKiBZb3UgbmVlZCB0byBpbnN0YWxsIERvY0Jvb2sgc3R5bGVzaGVldHMgKioqIjsgXAorCUAod2hpY2ggeG1sdG8gPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgeG1sdG8gKioqIjsgXAogCSAgZXhpdCAxKQogCSQoY2FsbCBjbWQsZGIycGRmKQogCi1xdWlldF9jbWRfZGIyaHRtbCA9IERCMkhUTUwgJEAKLSAgICAgIGNtZF9kYjJodG1sID0gZGIyaHRtbCAtbyAkKHBhdHN1YnN0ICUuaHRtbCwlLCRAKSAkPCAmJgkJICAgICAgXAotCQllY2hvICc8YSBIUkVGPSIkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSkvYm9vazEuaHRtbCI+IFwKK3F1aWV0X2NtZF9kYjJodG1sID0gWE1MVE8gICRACisgICAgICBjbWRfZGIyaHRtbCA9IHhtbHRvIHhodG1sICQoWE1MVE9GTEFHUykgLW8gJChwYXRzdWJzdCAlLmh0bWwsJSwkQCkgJDwgJiYgXAorCQllY2hvICc8YSBIUkVGPSIkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSkvaW5kZXguaHRtbCI+IFwKICAgICAgICAgIEdvdG8gJChwYXRzdWJzdCAlLmh0bWwsJSwkKG5vdGRpciAkQCkpPC9hPjxwPicgPiAkQAogCiAlLmh0bWw6CSUueG1sCi0JQCh3aGljaCBkYjJodG1sID4gL2Rldi9udWxsIDI+JjEpIHx8IFwKLQkgKGVjaG8gIioqKiBZb3UgbmVlZCB0byBpbnN0YWxsIERvY0Jvb2sgc3R5bGVzaGVldHMgKioqIjsgXAorCUAod2hpY2ggeG1sdG8gPiAvZGV2L251bGwgMj4mMSkgfHwgXAorCSAoZWNobyAiKioqIFlvdSBuZWVkIHRvIGluc3RhbGwgeG1sdG8gKioqIjsgXAogCSAgZXhpdCAxKQogCUBybSAtcmYgJEAgJChwYXRzdWJzdCAlLmh0bWwsJSwkQCkKIAkkKGNhbGwgY21kLGRiMmh0bWwpCiAJQGlmIFsgISAteiAiJChQTkctJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpKSIgXTsgdGhlbiBcCiAgICAgICAgICAgICBjcCAkKFBORy0kKGJhc2VuYW1lICQobm90ZGlyICRAKSkpICQocGF0c3Vic3QgJS5odG1sLCUsJEApOyBmaQogCi0jIyMKLSMgUnVsZSB0byBnZW5lcmF0ZSBtYW4gZmlsZXMgLSBvdXRwdXQgaXMgcGxhY2VkIGluIHRoZSBtYW4gc3ViZGlyZWN0b3J5Ci0KLSUuOToJJS54bWwKLWlmbmVxICgkKEtCVUlMRF9TUkMpLCkKLQkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuCi1lbmRpZgotCSQoU1BMSVRNQU4pICQ8ICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbiAiJChWRVJTSU9OKS4kKFBBVENITEVWRUwpLiQoU1VCTEVWRUwpIgotCSQoTUFLRU1BTikgY29udmVydCAkKG9ianRyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYW4gJDwKK3F1aWV0X2NtZF9kYjJtYW4gPSBYTUxUTyAgICRACisgICAgICBjbWRfZGIybWFuID0gaWYgZ3JlcCAtcSByZWZlbnRyeSAkPDsgdGhlbiB4bWx0byBtYW4gJChYTUxUT0ZMQUdTKSAtbyAkKG9iaikvbWFuICQ8IDsgZ3ppcCAtZiAkKG9iaikvbWFuLyouOTsgZmkKKyUuOSA6ICUueG1sCisJQCh3aGljaCB4bWx0byA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB4bWx0byAqKioiOyBcCisJICBleGl0IDEpCisJJChjYWxsIGNtZCxkYjJtYW4pCisJQHRvdWNoICRACiAKICMjIwogIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0cyBhbmQgUE5HIGltZ2FnZXMgZnJvbSAuZmlnIGZvcm1hdCBmaWxlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggMWJkMjBjOC4uNzU3Y2VmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC00OSwxMyArNDksMzMgQEAKICFJaW5jbHVkZS9hc20taTM4Ni91bmFsaWduZWQuaAogICAgICA8L3NlY3QxPgogCi08IS0tIEZJWE1FOgotICBrZXJuZWwvc2NoZWQuYyBoYXMgbm8gZG9jcywgd2hpY2ggc3R1ZmZzIHVwIHRoZSBzZ21sLiAgQ29tbWVudAotICBvdXQgdW50aWwgc29tZWJvZHkgYWRkcyBkb2NzLiAgS0FPCiAgICAgIDxzZWN0MT48dGl0bGU+RGVsYXlpbmcsIHNjaGVkdWxpbmcsIGFuZCB0aW1lciByb3V0aW5lczwvdGl0bGU+Ci1YIUVrZXJuZWwvc2NoZWQuYworIUlpbmNsdWRlL2xpbnV4L3NjaGVkLmgKKyFFa2VybmVsL3NjaGVkLmMKKyFFa2VybmVsL3RpbWVyLmMKICAgICAgPC9zZWN0MT4KLUtBTyAtLT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JbnRlcm5hbCBGdW5jdGlvbnM8L3RpdGxlPgorIUlrZXJuZWwvZXhpdC5jCishSWtlcm5lbC9zaWduYWwuYworICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+S2VybmVsIG9iamVjdHMgbWFuaXB1bGF0aW9uPC90aXRsZT4KKzwhLS0KK1ghSWluY2x1ZGUvbGludXgva29iamVjdC5oCistLT4KKyFFbGliL2tvYmplY3QuYworICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+S2VybmVsIHV0aWxpdHkgZnVuY3Rpb25zPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9rZXJuZWwuaAorPCEtLSBUaGlzIG5lZWRzIHRvIGNsZWFuIHVwIHRvIG1ha2Uga2VybmVsLWRvYyBoYXBweQorWCFFa2VybmVsL3ByaW50ay5jCisgLS0+CishRWtlcm5lbC9wYW5pYy5jCishRWtlcm5lbC9zeXMuYworIUVrZXJuZWwvcmN1cGRhdGUuYworICAgICA8L3NlY3QxPgorCiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iYWR0Ij4KQEAgLTgxLDcgKzEwMSw5IEBACiAhRWxpYi92c3ByaW50Zi5jCiAgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+U3RyaW5nIE1hbmlwdWxhdGlvbjwvdGl0bGU+Ci0hSWxpYi9zdHJpbmcuYworPCEtLSBBbGwgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhdCBub3cKK1ghSWxpYi9zdHJpbmcuYworIC0tPgogIUVsaWIvc3RyaW5nLmMKICAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5CaXQgT3BlcmF0aW9uczwvdGl0bGU+CkBAIC05OCw2ICsxMjAsMjUgQEAKICFJaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgKICFJYXJjaC9pMzg2L2xpYi91c2VyY29weS5jCiAgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+TW9yZSBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L3JtYXAuaAorIUVtbS9yZWFkYWhlYWQuYworIUVtbS9maWxlbWFwLmMKKyFFbW0vbWVtb3J5LmMKKyFFbW0vdm1hbGxvYy5jCishRW1tL21lbXBvb2wuYworIUVtbS9wYWdlLXdyaXRlYmFjay5jCishRW1tL3RydW5jYXRlLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisKKyAgPGNoYXB0ZXIgaWQ9ImlwYyI+CisgICAgIDx0aXRsZT5LZXJuZWwgSVBDIGZhY2lsaXRpZXM8L3RpdGxlPgorCisgICAgIDxzZWN0MT48dGl0bGU+SVBDIHV0aWxpdGllczwvdGl0bGU+CishSWlwYy91dGlsLmMKKyAgICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyIGlkPSJrZmlmbyI+CkBAIC0xMTQsNiArMTU1LDEwIEBACiAgICAgIDxzZWN0MT48dGl0bGU+c3lzY3RsIGludGVyZmFjZTwvdGl0bGU+CiAhRWtlcm5lbC9zeXNjdGwuYwogICAgICA8L3NlY3QxPgorCisgICAgIDxzZWN0MT48dGl0bGU+cHJvYyBmaWxlc3lzdGVtIGludGVyZmFjZTwvdGl0bGU+CishSWZzL3Byb2MvYmFzZS5jCisgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iZGVidWdmcyI+CkBAIC0xMjcsNiArMTcyLDEwIEBACiAKICAgPGNoYXB0ZXIgaWQ9InZmcyI+CiAgICAgIDx0aXRsZT5UaGUgTGludXggVkZTPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5UaGUgRmlsZXN5c3RlbSB0eXBlczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvZnMuaAorIUVpbmNsdWRlL2xpbnV4L2ZzLmgKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5UaGUgRGlyZWN0b3J5IENhY2hlPC90aXRsZT4KICFFZnMvZGNhY2hlLmMKICFJaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMTQyLDEzICsxOTEsMzEgQEAKICFFZnMvbG9ja3MuYwogIUlmcy9sb2Nrcy5jCiAgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+T3RoZXIgRnVuY3Rpb25zPC90aXRsZT4KKyFFZnMvbXBhZ2UuYworIUVmcy9uYW1laS5jCishRWZzL2J1ZmZlci5jCishRWZzL2Jpby5jCishRWZzL3NlcV9maWxlLmMKKyFFZnMvZmlsZXN5c3RlbXMuYworIUVmcy9mcy13cml0ZWJhY2suYworIUVmcy9ibG9ja19kZXYuYworICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9Im5ldGNvcmUiPgogICAgICA8dGl0bGU+TGludXggTmV0d29ya2luZzwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+TmV0d29ya2luZyBCYXNlIFR5cGVzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9uZXQuaAorICAgICA8L3NlY3QxPgogICAgICA8c2VjdDE+PHRpdGxlPlNvY2tldCBCdWZmZXIgRnVuY3Rpb25zPC90aXRsZT4KICFJaW5jbHVkZS9saW51eC9za2J1ZmYuaAorIUlpbmNsdWRlL25ldC9zb2NrLmgKKyFFbmV0L3NvY2tldC5jCiAhRW5ldC9jb3JlL3NrYnVmZi5jCishRW5ldC9jb3JlL3NvY2suYworIUVuZXQvY29yZS9kYXRhZ3JhbS5jCishRW5ldC9jb3JlL3N0cmVhbS5jCiAgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+U29ja2V0IEZpbHRlcjwvdGl0bGU+CiAhRW5ldC9jb3JlL2ZpbHRlci5jCkBAIC0xNTgsNiArMjI1LDE0IEBACiAhRW5ldC9jb3JlL2dlbl9zdGF0cy5jCiAhRW5ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlNVTiBSUEMgc3Vic3lzdGVtPC90aXRsZT4KKzwhLS0gVGhlICFEIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHBlcmZlY3QsIGdhcmJhZ2UgaGFzIHRvIGJlIHByb3RlY3RlZCBieSBjb21tZW50cworIURuZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKKy0tPgorIUVuZXQvc3VucnBjL3hkci5jCishRW5ldC9zdW5ycGMvc3Zjc29jay5jCishRW5ldC9zdW5ycGMvc2NoZWQuYworICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9Im5ldGRldiI+CkBAIC0xOTQsMTEgKzI2OSwyNiBAQAogIUlhcmNoL2kzODYva2VybmVsL2lycS5jCiAgICAgIDwvc2VjdDE+CiAKKyAgICAgPHNlY3QxPjx0aXRsZT5SZXNvdXJjZXMgTWFuYWdlbWVudDwvdGl0bGU+CishRWtlcm5lbC9yZXNvdXJjZS5jCisgICAgIDwvc2VjdDE+CisKICAgICAgPHNlY3QxPjx0aXRsZT5NVFJSIEhhbmRsaW5nPC90aXRsZT4KICFFYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKICAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5QQ0kgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KICFFZHJpdmVycy9wY2kvcGNpLmMKKyFFZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCishRWRyaXZlcnMvcGNpL3JlbW92ZS5jCishRWRyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKzwhLS0ga2VybmVsZG9jIGRvZXMgbm90IHVuZGVyc3RhbmQgdG8gX19kZXZpbml0CitYIUVkcml2ZXJzL3BjaS9zZWFyY2guYworIC0tPgorIUVkcml2ZXJzL3BjaS9tc2kuYworIUVkcml2ZXJzL3BjaS9idXMuYworIUVkcml2ZXJzL3BjaS9ob3RwbHVnLmMKKyFFZHJpdmVycy9wY2kvcHJvYmUuYworIUVkcml2ZXJzL3BjaS9yb20uYwogICAgICA8L3NlY3QxPgogICAgICA8c2VjdDE+PHRpdGxlPlBDSSBIb3RwbHVnIFN1cHBvcnQgTGlicmFyeTwvdGl0bGU+CiAhRWRyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0yMjMsNiArMzEzLDE0IEBACiAhRWZzL2RldmZzL2Jhc2UuYwogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KKyAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgorIUVmcy9zeXNmcy9maWxlLmMKKyFFZnMvc3lzZnMvZGlyLmMKKyFFZnMvc3lzZnMvc3ltbGluay5jCishRWZzL3N5c2ZzL2Jpbi5jCisgIDwvY2hhcHRlcj4KKwogICA8Y2hhcHRlciBpZD0ic2VjdXJpdHkiPgogICAgICA8dGl0bGU+U2VjdXJpdHkgRnJhbWV3b3JrPC90aXRsZT4KICFFc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMjMzLDYgKzMzMSw2MSBAQAogIUVrZXJuZWwvcG93ZXIvcG0uYwogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9ImRldmRyaXZlcnMiPgorICAgICA8dGl0bGU+RGV2aWNlIGRyaXZlcnMgaW5mcmFzdHJ1Y3R1cmU8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBEcml2ZXJzIEJhc2U8L3RpdGxlPgorPCEtLQorWCFJaW5jbHVkZS9saW51eC9kZXZpY2UuaAorLS0+CishRWRyaXZlcnMvYmFzZS9kcml2ZXIuYworIUVkcml2ZXJzL2Jhc2UvY2xhc3Nfc2ltcGxlLmMKKyFFZHJpdmVycy9iYXNlL2NvcmUuYworIUVkcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworIUVkcml2ZXJzL2Jhc2UvdHJhbnNwb3J0X2NsYXNzLmMKKyFFZHJpdmVycy9iYXNlL2RtYXBvb2wuYworPCEtLSBDYW5ub3QgYmUgaW5jbHVkZWQsIGJlY2F1c2UKKyAgICAgYXR0cmlidXRlX2NvbnRhaW5lcl9hZGRfY2xhc3NfZGV2aWNlX2FkYXB0ZXIKKyBhbmQgYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19jb250YWluZXIKKyAgICAgZXhjZWVkIGFsbG93ZWQgNDQgY2hhcmFjdGVycyBtYXhpbXVtCitYIUVkcml2ZXJzL2Jhc2UvYXR0cmlidXRlX2NvbnRhaW5lci5jCistLT4KKyFFZHJpdmVycy9iYXNlL3N5cy5jCis8IS0tCitYIUVkcml2ZXJzL2Jhc2UvaW50ZXJmYWNlLmMKKy0tPgorIUVkcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworIUVkcml2ZXJzL2Jhc2UvYnVzLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgRHJpdmVycyBQb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyFFZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworIUVkcml2ZXJzL2Jhc2UvcG93ZXIvcmVzdW1lLmMKKyFFZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBEcml2ZXJzIEFDUEkgU3VwcG9ydDwvdGl0bGU+Cis8IS0tIEludGVybmFsIGZ1bmN0aW9ucyBvbmx5CitYIUVkcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCitYIUVkcml2ZXJzL2FjcGkvc2xlZXAvd2FrZXVwLmMKK1ghRWRyaXZlcnMvYWNwaS9tb3RoZXJib2FyZC5jCitYIUVkcml2ZXJzL2FjcGkvYnVzLmMKKy0tPgorIUVkcml2ZXJzL2FjcGkvc2Nhbi5jCis8IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cworWCFFZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKKy0tPgorICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBkcml2ZXJzIFBuUCBzdXBwb3J0PC90aXRsZT4KKyFFZHJpdmVycy9wbnAvY29yZS5jCis8IS0tIE5vIGNvcnJlY3Qgc3RydWN0dXJlZCBjb21tZW50cworWCFFZHJpdmVycy9wbnAvc3lzdGVtLmMKKyAtLT4KKyFFZHJpdmVycy9wbnAvY2FyZC5jCishRWRyaXZlcnMvcG5wL2RyaXZlci5jCishRWRyaXZlcnMvcG5wL21hbmFnZXIuYworIUVkcml2ZXJzL3BucC9zdXBwb3J0LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisKICAgPGNoYXB0ZXIgaWQ9ImJsa2RldiI+CiAgICAgIDx0aXRsZT5CbG9jayBEZXZpY2VzPC90aXRsZT4KICFFZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYwpAQCAtMjUwLDcgKzQwMywyMyBAQAogCiAgIDxjaGFwdGVyIGlkPSJzbmRkZXYiPgogICAgICA8dGl0bGU+U291bmQgRGV2aWNlczwvdGl0bGU+CishSWluY2x1ZGUvc291bmQvY29yZS5oCiAhRXNvdW5kL3NvdW5kX2NvcmUuYworIUlpbmNsdWRlL3NvdW5kL3BjbS5oCishRXNvdW5kL2NvcmUvcGNtLmMKKyFFc291bmQvY29yZS9kZXZpY2UuYworIUVzb3VuZC9jb3JlL2luZm8uYworIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworIUVzb3VuZC9jb3JlL3NvdW5kLmMKKyFFc291bmQvY29yZS9tZW1vcnkuYworIUVzb3VuZC9jb3JlL3BjbV9tZW1vcnkuYworIUVzb3VuZC9jb3JlL2luaXQuYworIUVzb3VuZC9jb3JlL2lzYWRtYS5jCishRXNvdW5kL2NvcmUvY29udHJvbC5jCishRXNvdW5kL2NvcmUvcGNtX2xpYi5jCishRXNvdW5kL2NvcmUvaHdkZXAuYworIUVzb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworIUVzb3VuZC9jb3JlL21lbWFsbG9jLmMKIDwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQogWCFJc291bmQvc291bmRfZmlybXdhcmUuYwogLS0+CkBAIC0yNTgsNiArNDI3LDcgQEAKIAogICA8Y2hhcHRlciBpZD0idWFydDE2eDUwIj4KICAgICAgPHRpdGxlPjE2eDUwIFVBUlQgRHJpdmVyPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCiAhRWRyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKICFFZHJpdmVycy9zZXJpYWwvODI1MC5jCiAgIDwvY2hhcHRlcj4KQEAgLTMxMCw5ICs0ODAsMTEgQEAKICAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgTWVtb3J5PC90aXRsZT4KICFFZHJpdmVycy92aWRlby9mYm1lbS5jCiAgICAgIDwvc2VjdDE+Cis8IS0tCiAgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIENvbnNvbGU8L3RpdGxlPgotIUVkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworWCFFZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKICAgICAgPC9zZWN0MT4KKy0tPgogICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBDb2xvcm1hcDwvdGl0bGU+CiAhRWRyaXZlcnMvdmlkZW8vZmJjbWFwLmMKICAgICAgPC9zZWN0MT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9zdHlsZXNoZWV0LnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTRjMjFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3N0eWxlc2hlZXQueHNsCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzdHlsZXNoZWV0IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+Cis8cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSI+MTwvcGFyYW0+Cis8cGFyYW0gbmFtZT0iZnVuY3N5bm9wc2lzLnN0eWxlIj5hbnNpPC9wYXJhbT4KKzwvc3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdHVsaXAtdXNlci50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTIwZDdhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay90dWxpcC11c2VyLnRtcGwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgotCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+Ci0KLTxib29rIGlkPSJUdWxpcFVzZXJHdWlkZSI+Ci0gPGJvb2tpbmZvPgotICA8dGl0bGU+VHVsaXAgRHJpdmVyIFVzZXIncyBHdWlkZTwvdGl0bGU+Ci0gIAotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+SmVmZjwvZmlyc3RuYW1lPgotICAgIDxzdXJuYW1lPkdhcnppazwvc3VybmFtZT4KLSAgICA8YWZmaWxpYXRpb24+Ci0gICAgIDxhZGRyZXNzPgotICAgICAgPGVtYWlsPmpnYXJ6aWtAcG9ib3guY29tPC9lbWFpbD4KLSAgICAgPC9hZGRyZXNzPgotICAgIDwvYWZmaWxpYXRpb24+Ci0gICA8L2F1dGhvcj4KLSAgPC9hdXRob3Jncm91cD4KLQotICA8Y29weXJpZ2h0PgotICAgPHllYXI+MjAwMTwveWVhcj4KLSAgIDxob2xkZXI+SmVmZiBHYXJ6aWs8L2hvbGRlcj4KLSAgPC9jb3B5cmlnaHQ+Ci0KLSAgPGxlZ2Fsbm90aWNlPgotICAgPHBhcmE+Ci0gICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQotICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCi0gICAgIHZlcnNpb24uCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICAgICBNQSAwMjExMS0xMzA3IFVTQQotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCi0gICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KLSAgIDwvcGFyYT4KLSAgPC9sZWdhbG5vdGljZT4KLSA8L2Jvb2tpbmZvPgotCi0gPHRvYz48L3RvYz4KLQotICA8Y2hhcHRlciBpZD0iaW50cm8iPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotPHBhcmE+Ci1UaGUgVHVsaXAgRXRoZXJuZXQgQ2FyZCBEcml2ZXIKLWlzIG1haW50YWluZWQgYnkgSmVmZiBHYXJ6aWsgKDxlbWFpbD5qZ2FyemlrQHBvYm94LmNvbTwvZW1haWw+KS4KLTwvcGFyYT4KLQotPHBhcmE+Ci1UaGUgVHVsaXAgZHJpdmVyIHdhcyBkZXZlbG9wZWQgYnkgRG9uYWxkIEJlY2tlciBhbmQgY2hhbmdlZCBieQotSmVmZiBHYXJ6aWssIFRha2FzaGkgTWFuYWJlIGFuZCBhIGNhc3Qgb2YgdGhvdXNhbmRzLgotPC9wYXJhPgotCi08cGFyYT4KLUZvciAyLjQueCBhbmQgbGF0ZXIga2VybmVscywgdGhlIExpbnV4IFR1bGlwIGRyaXZlciBpcyBhdmFpbGFibGUgYXQKLTx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLzwvdWxpbms+Ci08L3BhcmE+Ci0KLTxwYXJhPgotCVRoaXMgZHJpdmVyIGlzIGZvciB0aGUgRGlnaXRhbCAiVHVsaXAiIEV0aGVybmV0IGFkYXB0ZXIgaW50ZXJmYWNlLgotCUl0IHNob3VsZCB3b3JrIHdpdGggbW9zdCBERUMgMjEqNCotYmFzZWQgY2hpcHMvZXRoZXJjYXJkcywgYXMgd2VsbCBhcwotCXdpdGggd29yay1hbGlrZSBjaGlwcyBmcm9tIExpdGUtT24gKFBOSUMpIGFuZCBNYWNyb25peCAoTVhJQykgYW5kIEFTSVguCi08L3BhcmE+Ci0KLTxwYXJhPgotICAgICAgICBUaGUgb3JpZ2luYWwgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIGJlY2tlckBzY3lsZC5jb20sIG9yIEMvTwotICAgICAgICBTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24sCi0gICAgICAgIDQxMCBTZXZlcm4gQXZlLiwgU3VpdGUgMjEwLAotICAgICAgICBBbm5hcG9saXMgTUQgMjE0MDMKLTwvcGFyYT4KLQotPHBhcmE+Ci0JQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBEb25hbGQgQmVja2VyJ3MgdHVsaXAuYwotCWlzIGF2YWlsYWJsZSBhdCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3R1bGlwLmh0bWwiPmh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvdHVsaXAuaHRtbDwvdWxpbms+Ci08L3BhcmE+Ci0KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJkcnZyLWNvbXBhdCI+Ci0gICAgPHRpdGxlPkRyaXZlciBDb21wYXRpYmlsaXR5PC90aXRsZT4KLQotPHBhcmE+Ci1UaGlzIGRldmljZSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHRoZSBERUNjaGlwICJUdWxpcCIsIERpZ2l0YWwncwotc2luZ2xlLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlcnMgZm9yIFBDSSAobm93IG93bmVkIGJ5IEludGVsKS4KLVN1cHBvcnRlZCBtZW1iZXJzIG9mIHRoZSBmYW1pbHkKLWFyZSB0aGUgMjEwNDAsIDIxMDQxLCAyMTE0MCwgMjExNDBBLCAyMTE0MiwgYW5kIDIxMTQzLiAgU2ltaWxhciB3b3JrLWFsaWtlCi1jaGlwcyBmcm9tIExpdGUtT24sIE1hY3JvbmljcywgQVNJWCwgQ29tcGV4IGFuZCBvdGhlciBsaXN0ZWQgYmVsb3cgYXJlIGFsc28KLXN1cHBvcnRlZC4KLTwvcGFyYT4KLQotPHBhcmE+Ci1UaGVzZSBjaGlwcyBhcmUgdXNlZCBvbiBhdCBsZWFzdCAxNDAgdW5pcXVlIFBDSSBib2FyZCBkZXNpZ25zLiAgVGhlIGdyZWF0Ci1udW1iZXIgb2YgY2hpcHMgYW5kIGJvYXJkIGRlc2lnbnMgc3VwcG9ydGVkIGlzIHRoZSByZWFzb24gZm9yIHRoZQotZHJpdmVyIHNpemUgYW5kIGNvbXBsZXhpdHkuICBBbG1vc3Qgb2YgdGhlIGluY3JlYXNpbmcgY29tcGxleGl0eSBpcyBpbiB0aGUKLWJvYXJkIGNvbmZpZ3VyYXRpb24gYW5kIG1lZGlhIHNlbGVjdGlvbiBjb2RlLiAgVGhlcmUgaXMgdmVyeSBsaXR0bGUKLWluY3JlYXNpbmcgaW4gdGhlIG9wZXJhdGlvbmFsIGNyaXRpY2FsIHBhdGggbGVuZ3RoLgotPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImJvYXJkLXNldHRpbmdzIj4KLSAgICA8dGl0bGU+Qm9hcmQtc3BlY2lmaWMgU2V0dGluZ3M8L3RpdGxlPgotCi08cGFyYT4KLVBDSSBidXMgZGV2aWNlcyBhcmUgY29uZmlndXJlZCBieSB0aGUgc3lzdGVtIGF0IGJvb3QgdGltZSwgc28gbm8ganVtcGVycwotbmVlZCB0byBiZSBzZXQgb24gdGhlIGJvYXJkLiAgVGhlIHN5c3RlbSBCSU9TIHByZWZlcmFibHkgc2hvdWxkIGFzc2lnbiB0aGUKLVBDSSBJTlRBIHNpZ25hbCB0byBhbiBvdGhlcndpc2UgdW51c2VkIHN5c3RlbSBJUlEgbGluZS4KLTwvcGFyYT4KLQotPHBhcmE+Ci1Tb21lIGJvYXJkcyBoYXZlIEVFUFJPTXMgdGFibGVzIHdpdGggZGVmYXVsdCBtZWRpYSBlbnRyeS4gIFRoZSBmYWN0b3J5IGRlZmF1bHQKLWlzIHVzdWFsbHkgImF1dG9zZWxlY3QiLiAgVGhpcyBzaG91bGQgb25seSBiZSBvdmVycmlkZGVuIHdoZW4gdXNpbmcKLXRyYW5zY2VpdmVyIGNvbm5lY3Rpb25zIHdpdGhvdXQgbGluayBiZWF0IGUuZy4gMTBiYXNlMiBvciBBVUksIG9yIChyYXJlbHkhKQotZm9yIGZvcmNpbmcgZnVsbC1kdXBsZXggd2hlbiB1c2VkIHdpdGggb2xkIGxpbmsgcGFydG5lcnMgdGhhdCBkbyBub3QgZG8KLWF1dG9uZWdvdGlhdGlvbi4KLTwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJkcml2ZXItb3BlcmF0aW9uIj4KLSAgICA8dGl0bGU+RHJpdmVyIE9wZXJhdGlvbjwvdGl0bGU+Ci0KLTxzZWN0MT48dGl0bGU+UmluZyBidWZmZXJzPC90aXRsZT4KLQotPHBhcmE+Ci1UaGUgVHVsaXAgY2FuIHVzZSBlaXRoZXIgcmluZyBidWZmZXJzIG9yIGxpc3RzIG9mIFR4IGFuZCBSeCBkZXNjcmlwdG9ycy4KLVRoaXMgZHJpdmVyIHVzZXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgcmluZ3Mgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3JzLCBzZXQgYXQKLWNvbXBpbGUgdGltZSBieSBSWC9UWF9SSU5HX1NJWkUuICBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbGxvY2F0ZXMgc2tidWZmcwotZm9yIHRoZSBSeCByaW5nIGJ1ZmZlcnMgYXQgb3BlbigpIHRpbWUgYW5kIHBhc3NlcyB0aGUgc2tiLT5kYXRhIGZpZWxkIHRvIHRoZQotVHVsaXAgYXMgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXaGVuIGFuIGluY29taW5nIGZyYW1lIGlzIGxlc3MgdGhhbgotUlhfQ09QWUJSRUFLIGJ5dGVzIGxvbmcsIGEgZnJlc2ggc2tidWZmIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGZyYW1lIGlzCi1jb3BpZWQgdG8gdGhlIG5ldyBza2J1ZmYuICBXaGVuIHRoZSBpbmNvbWluZyBmcmFtZSBpcyBsYXJnZXIsIHRoZSBza2J1ZmYgaXMKLXBhc3NlZCBkaXJlY3RseSB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgYW5kIHJlcGxhY2VkIGJ5IGEgbmV3bHkgYWxsb2NhdGVkCi1za2J1ZmYuCi08L3BhcmE+Ci0KLTxwYXJhPgotVGhlIFJYX0NPUFlCUkVBSyB2YWx1ZSBpcyBjaG9zZW4gdG8gdHJhZGUtb2ZmIHRoZSBtZW1vcnkgd2FzdGVkIGJ5Ci11c2luZyBhIGZ1bGwtc2l6ZWQgc2tidWZmIGZvciBzbWFsbCBmcmFtZXMgdnMuIHRoZSBjb3B5aW5nIGNvc3RzIG9mIGxhcmdlcgotZnJhbWVzLiAgRm9yIHNtYWxsIGZyYW1lcyB0aGUgY29weWluZyBjb3N0IGlzIG5lZ2xpZ2libGUgKGVzcC4gY29uc2lkZXJpbmcKLXRoYXQgd2UgYXJlIHByZS1sb2FkaW5nIHRoZSBjYWNoZSB3aXRoIGltbWVkaWF0ZWx5IHVzZWZ1bCBoZWFkZXIKLWluZm9ybWF0aW9uKS4gIEZvciBsYXJnZSBmcmFtZXMgdGhlIGNvcHlpbmcgY29zdCBpcyBub24tdHJpdmlhbCwgYW5kIHRoZQotbGFyZ2VyIGNvcHkgbWlnaHQgZmx1c2ggdGhlIGNhY2hlIG9mIHVzZWZ1bCBkYXRhLiAgQSBzdWJ0bGUgYXNwZWN0IG9mIHRoaXMKLWNob2ljZSBpcyB0aGF0IHRoZSBUdWxpcCBvbmx5IHJlY2VpdmVzIGludG8gbG9uZ3dvcmQgYWxpZ25lZCBidWZmZXJzLCB0aHVzCi10aGUgSVAgaGVhZGVyIGF0IG9mZnNldCAxNCBpc24ndCBsb25nd29yZCBhbGlnbmVkIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCi1Db3BpZWQgZnJhbWVzIGFyZSBwdXQgaW50byB0aGUgbmV3IHNrYnVmZiBhdCBhbiBvZmZzZXQgb2YgIisyIiwgdGh1cyBjb3B5aW5nCi1oYXMgdGhlIGJlbmVmaWNpYWwgZWZmZWN0IG9mIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIgYW5kIHByZWxvYWRpbmcgdGhlCi1jYWNoZS4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotPHNlY3QxPjx0aXRsZT5TeW5jaHJvbml6YXRpb248L3RpdGxlPgotPHBhcmE+Ci1UaGUgZHJpdmVyIHJ1bnMgYXMgdHdvIGluZGVwZW5kZW50LCBzaW5nbGUtdGhyZWFkZWQgZmxvd3Mgb2YgY29udHJvbC4gIE9uZQotaXMgdGhlIHNlbmQtcGFja2V0IHJvdXRpbmUsIHdoaWNoIGVuZm9yY2VzIHNpbmdsZS10aHJlYWRlZCB1c2UgYnkgdGhlCi1kZXYtPnRidXN5IGZsYWcuICBUaGUgb3RoZXIgdGhyZWFkIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2hpY2ggaXMgc2luZ2xlCi10aHJlYWRlZCBieSB0aGUgaGFyZHdhcmUgYW5kIG90aGVyIHNvZnR3YXJlLgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBzZW5kIHBhY2tldCB0aHJlYWQgaGFzIHBhcnRpYWwgY29udHJvbCBvdmVyIHRoZSBUeCByaW5nIGFuZCAnZGV2LT50YnVzeScKLWZsYWcuICBJdCBzZXRzIHRoZSB0YnVzeSBmbGFnIHdoZW5ldmVyIGl0J3MgcXVldWluZyBhIFR4IHBhY2tldC4gSWYgdGhlIG5leHQKLXF1ZXVlIHNsb3QgaXMgZW1wdHksIGl0IGNsZWFycyB0aGUgdGJ1c3kgZmxhZyB3aGVuIGZpbmlzaGVkIG90aGVyd2lzZSBpdCBzZXRzCi10aGUgJ3RwLT50eF9mdWxsJyBmbGFnLgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBpbnRlcnJ1cHQgaGFuZGxlciBoYXMgZXhjbHVzaXZlIGNvbnRyb2wgb3ZlciB0aGUgUnggcmluZyBhbmQgcmVjb3JkcyBzdGF0cwotZnJvbSB0aGUgVHggcmluZy4gIChUaGUgVHgtZG9uZSBpbnRlcnJ1cHQgY2FuJ3QgYmUgc2VsZWN0aXZlbHkgdHVybmVkIG9mZiwgc28KLXdlIGNhbid0IGF2b2lkIHRoZSBpbnRlcnJ1cHQgb3ZlcmhlYWQgYnkgaGF2aW5nIHRoZSBUeCByb3V0aW5lIHJlYXAgdGhlIFR4Ci1zdGF0cy4pCSBBZnRlciByZWFwaW5nIHRoZSBzdGF0cywgaXQgbWFya3MgdGhlIHF1ZXVlIGVudHJ5IGFzIGVtcHR5IGJ5IHNldHRpbmcKLXRoZSAnYmFzZScgdG8gemVyby4JIElmZiB0aGUgJ3RwLT50eF9mdWxsJyBmbGFnIGlzIHNldCwgaXQgY2xlYXJzIGJvdGggdGhlCi10eF9mdWxsIGFuZCB0YnVzeSBmbGFncy4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLQotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImVycmF0YSI+Ci0gICAgPHRpdGxlPkVycmF0YTwvdGl0bGU+Ci0KLTxwYXJhPgotVGhlIG9sZCBERUMgZGF0YWJvb2tzIHdlcmUgbGlnaHQgb24gZGV0YWlscy4KLVRoZSAyMTA0MCBkYXRhYm9vayBjbGFpbXMgdGhhdCBDU1IxMywgQ1NSMTQsIGFuZCBDU1IxNSBzaG91bGQgZWFjaCBiZSB0aGUgbGFzdAotcmVnaXN0ZXIgb2YgdGhlIHNldCBDU1IxMi0xNSB3cml0dGVuLiAgSG1tbSwgbm93IGhvdyBpcyB0aGF0IHBvc3NpYmxlPwotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBERUMgU1JPTSBmb3JtYXQgaXMgdmVyeSBiYWRseSBkZXNpZ25lZCBub3QgcHJlY2lzZWx5IGRlZmluZWQsIGxlYWRpbmcgdG8KLXBhcnQgb2YgdGhlIG1lZGlhIHNlbGVjdGlvbiBqdW5raGVhcCBiZWxvdy4gIFNvbWUgYm9hcmRzIGRvIG5vdCBoYXZlIEVFUFJPTQotbWVkaWEgdGFibGVzIGFuZCBuZWVkIHRvIGJlIHBhdGNoZWQgdXAuICBXb3JzZSwgb3RoZXIgYm9hcmRzIHVzZSB0aGUgREVDCi1kZXNpZ24ga2l0IG1lZGlhIHRhYmxlIHdoZW4gaXQgaXNuJ3QgY29ycmVjdCBmb3IgdGhlaXIgYm9hcmQuCi08L3BhcmE+Ci0KLTxwYXJhPgotV2UgY2Fubm90IHVzZSBNSUkgaW50ZXJydXB0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGRlZmluZWQgR1BJTyBwaW4gdG8gYXR0YWNoCi10aGVtLiAgVGhlIE1JSSB0cmFuc2NlaXZlciBzdGF0dXMgaXMgcG9sbGVkIHVzaW5nIGFuIGtlcm5lbCB0aW1lci4KLTwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJjaGFuZ2Vsb2ciPgotICAgIDx0aXRsZT5Ecml2ZXIgQ2hhbmdlIEhpc3Rvcnk8L3RpdGxlPgotCi0gICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS4xNCAoRmVicnVhcnkgMjAsIDIwMDEpPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT48cGFyYT5GaXggUE5JQyBwcm9ibGVtcyAoTWFuZnJlZCBTcHJhdWwpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBuZXcgUENJIGlkIGZvciBBY2N0b24gY29tZXQ8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydCBEYXZpY29tIHR1bGlwczwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5GaXggb29wcyBpbiBlZXByb20gcGFyc2luZzwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgd29ya2Fyb3VuZHMgZm9yIGVhcmx5IFBDSSBjaGlwc2V0czwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5JQTY0LCBocHBhIGNzcjAgc3VwcG9ydDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5TdXBwb3J0IG1lZGlhIHR5cGVzIDUsIDY8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+SW50ZXJwcmV0IGEgYml0IG1vcmUgb2YgdGhlIDIxMTQyIFNST00gZXh0ZW5kZWQgbWVkaWEgdHlwZSAzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBtaXNzaW5nIGRlbGF5IGluIGVlcHJvbSByZWFkaW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTEgKE5vdmVtYmVyIDMsIDIwMDApPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT48cGFyYT5FbGltaW5hdGUgZXh0cmEgYnVzIGFjY2Vzc2VzIHdoZW4gc2hhcmluZyBpbnRlcnJ1cHRzIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkJhcnJpZXIgZm9sbG93aW5nIG93bmVyc2hpcCBkZXNjcmlwdG9yIGJpdCBmbGlwIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkVuZGlhbm5lc3MgZml4ZXMgZm9yID4xNCBhZGRyZXNzZXMgaW4gc2V0dXAgZnJhbWVzIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJlcG9ydCBsaW5rIGJlYXQgdG8ga2VybmVsL3VzZXJzcGFjZSB2aWEgbmV0aWZfY2Fycmllcl8qLiAoa3V6bmV0KTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5CZXR0ZXIgc3BpbmxvY2tpbmcgaW4gc2V0X3J4X21vZGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkZpeCBJL08gcmVzb3VyY2UgcmVxdWVzdCBmYWlsdXJlIGVycm9yIG1lc3NhZ2VzIChEYXZlTSBjYXRjaCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+SGFuZGxlIERNQSBhbGxvY2F0aW9uIGZhaWx1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTAgKFNlcHRlbWJlciA2LCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+U2ltcGxlIGludGVycnVwdCBtaXRpZ2F0aW9uICh2aWEgamFtYWwpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPk1vcmUgUENJIGlkczwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0KLSAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjkgKEF1Z3VzdCAxMSwgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPk1vcmUgUENJIGlkczwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0KLSAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjggKEp1bHkgMTMsIDIwMDApPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT48cGFyYT5Db3JyZWN0IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGZvciBkdW1teSBmcmFtZSBpbmRleDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgb3V0ZGF0ZWQgcmVmZXJlbmNlcyB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNyAoSnVuZSAxNywgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlRpbWVyIGNsZWFudXBzIChBbmRyZXcgTW9ydG9uKTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BbHBoYSBjb21waWxlIGZpeCAoc29tZWJvZHk/KTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0KLSAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjYgKE1heSAzMSwgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJldmVydCAyMTE0My1yZWxhdGVkIHN1cHBvcnQgZmxhZyBwYXRjaDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgSFBQQS9tZWRpYS10YWJsZSBkZWJ1Z2dpbmcgcHJpbnRrPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNSAoTWF5IDMwLCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+SFBQQSBzdXBwb3J0ICh3aWxseUBwdWZmaW5ncm91cCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+Q1NSNiBiaXRzIGFuZCB0dWxpcC5oIGNsZWFudXAgKENocmlzIFNtaXRoKTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5JbXByb3ZlIGRlYnVnZ2luZyBtZXNzYWdlcyBhIGJpdDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgZGVsYXkgYWZ0ZXIgQ1NSMTMgd3JpdGUgaW4gdDIxMTQyX3N0YXJ0X253YXk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIHVudXNlZCBFVEhFUl9TVEFUUyBjb2RlPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkNvbnZlcnQgJ2V4dGVybiBpbmxpbmUnIHRvICdzdGF0aWMgaW5saW5lJyBpbiB0dWxpcC5oIChDaHJpcyBTbWl0aCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+VXBkYXRlIERTMjExNDMgc3VwcG9ydCBmbGFncyBpbiB0dWxpcF9jaGlwX2luZm9bXTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5Vc2Ugc3Bpbl9sb2NrX2lycSwgbm90IF9pcnFzYXZlL3Jlc3RvcmUsIGluIHR1bGlwX3N0YXJ0X3htaXQoKTwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgbG9ja2luZyB0byBzZXRfcnhfbW9kZSgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkZpeCByYWNlIHdpdGggY2hpcCBzZXR0aW5nIERlc2NPd25lZCBiaXQgKEhhbCBNdXJyYXkpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJlcXVlc3QgMTAwJSBvZiBQSU8gYW5kIE1NSU8gcmVzb3VyY2Ugc3BhY2UgYXNzaWduZWQgdG8gY2FyZDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgZXJyb3IgbWVzc2FnZSBmcm9tIHBjaV9lbmFibGVfZGV2aWNlIGZhaWx1cmU8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QxPgotCi0gICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS40LjMgKEFwcmlsIDE0LCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+bW9kX3RpbWVyIGZpeCAoSGFsIE11cnJheSk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UE5JQzIgcmVzdXNjaXRhdGlvbiAoQ2hyaXMgU21pdGgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9zZWN0MT4KLQotICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNC4yIChNYXJjaCAyMSwgMjAwMCk8L3RpdGxlPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkZpeCAyMTA0MSBDU1I3LCBDU1IxMy8xNC8xNSBoYW5kbGluZzwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5NZXJnZSBzb21lIFBDSSBpZHMgZnJvbSB0dWxpcCAwLjkxeDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5NZXJnZSBzb21lIEhBU194eHggZmxhZ3MgYW5kIGZsYWcgc2V0dGluZ3MgZnJvbSB0dWxpcCAwLjkxeDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5hc20vaW8uaCBmaXggKHN1Ym1pdHRlZCBieSBtYW55KSBhbmQgY2xlYW51cDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5zL0hBU19OV0FZMTQzL0hBU19OV0FZLzwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5DbGVhbnVwIDIxMDQxIG1vZGUgcmVwb3J0aW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlNtYWxsIGNvZGUgY2xlYW51cHM8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QxPgotCi0gICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS40LjEgKE1hcmNoIDE4LCAyMDAwKTwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIFBDSSBETUEgY29udmVyc2lvbiAoZGF2ZW0pPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCBuZXRpZl9zdGFydF9xdWV1ZSgpIGF0IGVuZCBvZiB0dWxpcF90eF90aW1lb3V0KCkgKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UENJIERNQSBmaXggKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+ZWVwcm9tLmMgY29kZSBjbGVhbnVwPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJlbW92ZSBYaXJjb20gVHVsaXAgY3J1ZDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpYS1hdWRpby50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpYS1hdWRpby50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmU2NDIxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWEtYXVkaW8udG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0JImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KLQotPGJvb2sgaWQ9IlZpYUF1ZGlvR3VpZGUiPgotIDxib29raW5mbz4KLSAgPHRpdGxlPlZpYSA2ODYgQXVkaW8gRHJpdmVyIGZvciBMaW51eDwvdGl0bGU+Ci0gIAotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+SmVmZjwvZmlyc3RuYW1lPgotICAgIDxzdXJuYW1lPkdhcnppazwvc3VybmFtZT4KLSAgIDwvYXV0aG9yPgotICA8L2F1dGhvcmdyb3VwPgotCi0gIDxjb3B5cmlnaHQ+Ci0gICA8eWVhcj4xOTk5LTIwMDE8L3llYXI+Ci0gICA8aG9sZGVyPkplZmYgR2FyemlrPC9ob2xkZXI+Ci0gIDwvY29weXJpZ2h0PgotCi0gIDxsZWdhbG5vdGljZT4KLSAgIDxwYXJhPgotICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKLSAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgotICAgICB2ZXJzaW9uLgotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi0gICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQotICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCi0gICA8L3BhcmE+Ci0gIDwvbGVnYWxub3RpY2U+Ci0gPC9ib29raW5mbz4KLQotPHRvYz48L3RvYz4KLQotICA8Y2hhcHRlciBpZD0iaW50cm8iPgotICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAJVGhlIFZpYSBWVDgyQzY4NkEgInN1cGVyIHNvdXRoYnJpZGdlIiBjaGlwcyBjb250YWluCi0JQUM5Ny1jb21wYXRpYmxlIGF1ZGlvIGxvZ2ljIHdoaWNoIGZlYXR1cmVzIGR1YWwgMTYtYml0IHN0ZXJlbwotCVBDTSBzb3VuZCBjaGFubmVscyAoZnVsbCBkdXBsZXgpLCBwbHVzIGEgdGhpcmQgUENNIGNoYW5uZWwgaW50ZW5kZWQgZm9yIHVzZQotCWluIGhhcmR3YXJlLWFzc2lzdGVkIEZNIHN5bnRoZXNpcy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgCVRoZSBjdXJyZW50IExpbnV4IGtlcm5lbCBhdWRpbyBkcml2ZXIgZm9yIHRoaXMgZmFtaWx5IG9mIGNoaXBzCi0Jc3VwcG9ydHMgYXVkaW8gcGxheWJhY2sgYW5kIHJlY29yZGluZywgYnV0IGhhcmR3YXJlLWFzc2lzdGVkCi0JRk0gZmVhdHVyZXMsIGFuZCBoYXJkd2FyZSBidWZmZXIgZGlyZWN0LWFjY2VzcyAobW1hcCkKLQlzdXBwb3J0IGFyZSBub3QgeWV0IGF2YWlsYWJsZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgCVRoaXMgZHJpdmVyIHN1cHBvcnRzIGFueSBMaW51eCBrZXJuZWwgdmVyc2lvbiBhZnRlciAyLjQuMTAuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIG1haWxpbmcgbGlzdCA8ZW1haWw+bGludXgtdmlhQGd0Zi5vcmc8L2VtYWlsPi4KLQlUbyBzdWJzY3JpYmUsIGUtbWFpbCA8ZW1haWw+bWFqb3Jkb21vQGd0Zi5vcmc8L2VtYWlsPiB3aXRoCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCXN1YnNjcmliZSBsaW51eC12aWEKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0JaW4gdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICAKLSAgPGNoYXB0ZXIgaWQ9Imluc3RhbGwiPgotICAgICAgPHRpdGxlPkRyaXZlciBJbnN0YWxsYXRpb248L3RpdGxlPgotICA8cGFyYT4KLSAgCVRvIHVzZSB0aGlzIGF1ZGlvIGRyaXZlciwgc2VsZWN0IHRoZQotCUNPTkZJR19TT1VORF9WSUE4MkNYWFggb3B0aW9uIGluIHRoZSBzZWN0aW9uIFNvdW5kIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbi4KLQlGb2xsb3cgdGhlIHVzdWFsIGtlcm5lbCBwcm9jZWR1cmVzIGZvciByZWJ1aWxkaW5nIHRoZSBrZXJuZWwsCi0Jb3IgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgZHJpdmVyIG1vZHVsZXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gIAlUbyBtYWtlIHRoaXMgZHJpdmVyIHRoZSBkZWZhdWx0IGF1ZGlvIGRyaXZlciwgeW91IGNhbiBhZGQgdGhlCi0JZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9jb25mLm1vZHVsZXMgZmlsZToKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0JYWxpYXMgc291bmQgdmlhODJjeHh4X2F1ZGlvCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAJTm90ZSB0aGF0IHNvdW5kY29yZSBhbmQgYWM5N19jb2RlYyBzdXBwb3J0IG1vZHVsZXMKLQlhcmUgYWxzbyByZXF1aXJlZCBmb3Igd29ya2luZyBhdWRpbywgaW4gYWRkaXRpb24gdG8KLQl0aGUgdmlhODJjeHh4X2F1ZGlvIG1vZHVsZSBpdHNlbGYuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICAKLSAgPGNoYXB0ZXIgaWQ9InJlcG9ydGJ1ZyI+Ci0gICAgICA8dGl0bGU+U3VibWl0dGluZyBhIGJ1ZyByZXBvcnQ8L3RpdGxlPgotICA8c2VjdDEgaWQ9ImJ1Z3JlcGRlc2MiPjx0aXRsZT5EZXNjcmlwdGlvbiBvZiBwcm9ibGVtPC90aXRsZT4KLSAgPHBhcmE+Ci0JRGVzY3JpYmUgdGhlIGFwcGxpY2F0aW9uIHlvdSB3ZXJlIHVzaW5nIHRvIHBsYXkvcmVjb3JkIHNvdW5kLCBhbmQgaG93Ci0JdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iYnVncmVwZGlhZyI+PHRpdGxlPkRpYWdub3N0aWMgb3V0cHV0PC90aXRsZT4KLSAgPHBhcmE+Ci0JT2J0YWluIHRoZSB2aWEtYXVkaW8tZGlhZyBkaWFnbm9zdGljcyBwcm9ncmFtIGZyb20KLQlodHRwOi8vc2YubmV0L3Byb2plY3RzL2drZXJuZWwvIGFuZCBwcm92aWRlIGEgZHVtcCBvZiB0aGUKLQlhdWRpbyBjaGlwJ3MgcmVnaXN0ZXJzIHdoaWxlIHRoZSBwcm9ibGVtIGlzIG9jY3VycmluZy4gIFNhbXBsZSBjb21tYW5kIGxpbmU6Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCS4vdmlhLWF1ZGlvLWRpYWcgLWFwcyA+IGRpYWctb3V0cHV0LnR4dAotICA8L3Byb2dyYW1saXN0aW5nPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9ImJ1Z3JlcGRlYnVnIj48dGl0bGU+RHJpdmVyIGRlYnVnIG91dHB1dDwvdGl0bGU+Ci0gIDxwYXJhPgotCURlZmluZSA8Y29uc3RhbnQ+VklBX0RFQlVHPC9jb25zdGFudD4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZHJpdmVyLCB0aGVuIGNhcHR1cmUgYW5kIGVtYWlsCi0JdGhlIGtlcm5lbCBsb2cgb3V0cHV0LiAgVGhpcyBjYW4gYmUgdmlld2VkIGluIHRoZSBzeXN0ZW0ga2VybmVsIGxvZyAoaWYKLQllbmFibGVkKSwgb3IgdmlhIHRoZSBkbWVzZyBwcm9ncmFtLiAgU2FtcGxlIGNvbW1hbmQgbGluZToKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0JZG1lc2cgPiAvdG1wL2RtZXNnLW91dHB1dC50eHQKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJidWdyZXBwcmludGsiPjx0aXRsZT5CaWdnZXIga2VybmVsIG1lc3NhZ2UgYnVmZmVyPC90aXRsZT4KLSAgPHBhcmE+Ci0JSWYgeW91IHdpc2ggdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBkaXNwbGF5ZWQgYnkgZG1lc2csIHRoZW4KLQljaGFuZ2UgdGhlIDxjb25zdGFudD5MT0dfQlVGX0xFTjwvY29uc3RhbnQ+IG1hY3JvIGF0IHRoZSB0b3Agb2YgbGludXgva2VybmVsL3ByaW50ay5jLCByZWNvbXBpbGUKLQl5b3VyIGtlcm5lbCwgYW5kIHBhc3MgdGhlIDxjb25zdGFudD5MT0dfQlVGX0xFTjwvY29uc3RhbnQ+IHZhbHVlIHRvIGRtZXNnLiAgU2FtcGxlIGNvbW1hbmQgbGluZSB3aXRoCi0JPGNvbnN0YW50PkxPR19CVUZfTEVOPC9jb25zdGFudD4gPT0gMzI3Njg6Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCWRtZXNnIC1zIDMyNzY4ID4gL3RtcC9kbWVzZy1vdXRwdXQudHh0Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLSAgCi0gIDxjaGFwdGVyIGlkPSJidWdzIj4KLSAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KLSAgPHBhcmE+Ci0gIDx2YXJpYWJsZWxpc3Q+Ci0gICAgPHZhcmxpc3RlbnRyeT48dGVybT5Mb3cgdm9sdW1lPC90ZXJtPgotICAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLQlWb2x1bWUgdG9vIGxvdyBvbiBtYW55IHN5c3RlbXMuICBXb3JrYXJvdW5kOiAgdXNlIG1peGVyIHByb2dyYW0KLQlzdWNoIGFzIHhtaXhlciB0byBpbmNyZWFzZSB2b2x1bWUuCi0gICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci0KLSAgPC92YXJpYWJsZWxpc3Q+Ci0JCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJ0aGFua3MiPgotICAgICAgPHRpdGxlPlRoYW5rczwvdGl0bGU+Ci0gIDxwYXJhPgotCVZpYSBmb3IgcHJvdmlkaW5nIGUtbWFpbCBzdXBwb3J0LCBzcGVjcywgYW5kIE5EQSdkIHNvdXJjZSBjb2RlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCU1hbmRyYWtlU29mdCBmb3IgcHJvdmlkaW5nIGhhY2tpbmcgdGltZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLQlBQzk3IG1peGVyIGludGVyZmFjZSBmaXhlcyBhbmQgZGVidWdnaW5nIGJ5IFJvbiBDZW1lciA8ZW1haWw+cm9uY2VtZXJAZ3RlLm5ldDwvZW1haWw+LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCVJ1aSBTb3VzYSA8ZW1haWw+cnVpLnNvdXNhQGNvbmV4YW50LmNvbTwvZW1haWw+LCBmb3IgYnVnZml4aW5nCi0JTU1BUCBzdXBwb3J0LCBhbmQgc2V2ZXJhbCBvdGhlciBub3RhYmxlIGZpeGVzIHRoYXQgcmVzdWx0ZWQgZnJvbQotCWhpcyBoYXJkIHdvcmsgYW5kIHRlc3RpbmcuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JQWRyaWFuIENveCA8ZW1haWw+YWRyaWFuQGh1bWJvbGR0LmNvLnVrPC9lbWFpbD4sIGZvciBidWdmaXhpbmcKLQlNTUFQIHN1cHBvcnQsIGFuZCBzZXZlcmFsIG90aGVyIG5vdGFibGUgZml4ZXMgdGhhdCByZXN1bHRlZCBmcm9tCi0JaGlzIGhhcmQgd29yayBhbmQgdGVzdGluZy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgCVRob21hcyBTYWlsZXIgZm9yIGZ1cnRoZXIgYnVnZml4ZXMuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICAKLSAgPGNoYXB0ZXIgaWQ9Im5vdGVzIj4KLSAgICAgPHRpdGxlPlJhbmRvbSBOb3RlczwvdGl0bGU+Ci0gIDxwYXJhPgotCVR3byAvcHJvYyBwc2V1ZG8tZmlsZXMgcHJvdmlkZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiAgVGhpcyBpcyBnZW5lcmFsbHkKLQlub3QgdXNlZnVsIHRvIG1vc3QgdXNlcnMuICBQb3dlciB1c2VycyBjYW4gZGlzYWJsZSBDT05GSUdfU09VTkRfVklBODJDWFhYX1BST0NGUywKLQlhbmQgcmVtb3ZlIHRoZSAvcHJvYyBzdXBwb3J0IGNvZGUuICBPbmNlCi0JdmVyc2lvbiAyLjAuMCBpcyByZWxlYXNlZCwgdGhlIC9wcm9jIHN1cHBvcnQgY29kZSB3aWxsIGJlIGRpc2FibGVkIGJ5Ci0JZGVmYXVsdC4gIEF2YWlsYWJsZSAvcHJvYyBwc2V1ZG8tZmlsZXM6Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCS9wcm9jL2RyaXZlci92aWEvMC9pbmZvCi0JL3Byb2MvZHJpdmVyL3ZpYS8wL2FjOTcKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0JVGhpcyBkcml2ZXIgYnkgZGVmYXVsdCBzdXBwb3J0cyBhbGwgUENJIGF1ZGlvIGRldmljZXMgd2hpY2ggcmVwb3J0Ci0JYSB2ZW5kb3IgaWQgb2YgMHgxMTA2LCBhbmQgYSBkZXZpY2UgaWQgb2YgMHgzMDU4LiAgU3Vic3lzdGVtIHZlbmRvcgotCWFuZCBkZXZpY2UgaWRzIGFyZSBub3QgZXhhbWluZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JR05VIGluZGVudCBmb3JtYXR0aW5nIG9wdGlvbnM6Ci0gIDxwcm9ncmFtbGlzdGluZz4KLS1rciAtaTggLXRzOCAtYnIgLWNlIC1iYXAgLXNvYiAtbDgwIC1wY3MgLWNzIC1zcyAtYnMgLWRpMSAtbmJjIC1scCAtcHNsCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0JVmlhIGhhcyBncmFjaW91c2x5IGRvbmF0ZWQgZS1tYWlsIHN1cHBvcnQgYW5kIHNvdXJjZSBjb2RlIHRvIGhlbHAgZnVydGhlcgotCXRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlci4gIFRoZWlyIGFzc2lzdGFuY2UgaGFzIGJlZW4gaW52YWx1YWJsZQotCWluIHRoZSBkZXNpZ24gYW5kIGNvZGluZyBvZiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotCVRoZSBWaWEgYXVkaW8gY2hpcCBhcHBhcmVudGx5IHByb3ZpZGVzIGEgc2Vjb25kIFBDTSBzY2F0dGVyLWdhdGhlcgotCURNQSBjaGFubmVsIGp1c3QgZm9yIEZNIGRhdGEsIGJ1dCBkb2VzIG5vdCBoYXZlIGEgZnVsbCBoYXJkd2FyZSBNSURJCi0JcHJvY2Vzc29yLiAgSSBoYXZlbid0IHB1dCBtdWNoIHRob3VnaHQgdG93YXJkcyBhIHNvbHV0aW9uIGhlcmUsIGJ1dCBpdAotCW1pZ2h0IGludm9sdmUgdXNpbmcgU29mdE9TUyBtaWRpIHdhdmUgdGFibGUsIG9yIHNpbXBseSBkaXNhYmxpbmcgTUlESQotCXN1cHBvcnQgYWx0b2dldGhlciBhbmQgdXNpbmcgdGhlIEZNIFBDTSBjaGFubmVsIGFzIGEgc2Vjb25kIChpbnB1dD8gb3V0cHV0PykKLSAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImNoYW5nZWxvZyI+Ci0gICAgICA8dGl0bGU+RHJpdmVyIENoYW5nZUxvZzwvdGl0bGU+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjE5MSI+PHRpdGxlPgotVmVyc2lvbiAxLjkuMQotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBEU1AgcmVhZC93cml0ZSBidWdmaXhlcyBmcm9tIFRob21hcyBTYWlsZXIuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEFkZCBuZXcgUENJIGlkIGZvciBzaW5nbGUtY2hhbm5lbCB1c2Ugb2YgVmlhIDgyMzMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE90aGVyIGJ1ZyBmaXhlcywgdHdlYWtzLCBuZXcgaW9jdGxzLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTE1Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS4xNQotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBTdXBwb3J0IGZvciB2YXJpYWJsZSBmcmFnbWVudCBzaXplIGFuZCB2YXJpYWJsZSBmcmFnbWVudCBudW1iZXIgKFJ1aQotICAgIFNvdXNhKQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBGaXhlcyBmb3IgdGhlIFNQRUVELCBTVEVSRU8sIENIQU5ORUxTLCBGTVQgaW9jdGxzIHdoZW4gaW4gcmVhZCAmYW1wOwotICAgIHdyaXRlIG1vZGUgKFJ1aSBTb3VzYSkKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgTW1hcGVkIHNvdW5kIGlzIG5vdyBmdWxseSBmdW5jdGlvbmFsLiAoUnVpIFNvdXNhKQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBNYWtlIHN1cmUgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYmVmb3JlIHJlYWRpbmcgYW55IG9mIGl0cyBQQ0kKLSAgICBjb25maWcgaW5mb3JtYXRpb24uIChmaXhlcyBwb3RlbnRpYWwgaG90cGx1ZyBwcm9ibGVtcykKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgQ2xlYW4gdXAgY29kZSBhIGJpdCBhbmQgYWRkIG1vcmUgaW50ZXJuYWwgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgQUM5NyBjb2RlYyBhY2Nlc3MgZml4ZXMgKEFkcmlhbiBDb3gpCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEJpZyBlbmRpYW4gZml4ZXMgKEFkcmlhbiBDb3gpCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE1JREkgc3VwcG9ydCAoQWRyaWFuIENveCkKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgRGV0ZWN0IGFuZCByZXBvcnQgbG9ja2VkLXJhdGUgQUM5NyBjb2RlY3MuICBJZiB5b3VyIGhhcmR3YXJlIG9ubHkKLSAgICBzdXBwb3J0cyA0OEtoeiAobG9ja2VkIHJhdGUpLCB0aGVuIHlvdXIgcmVjb3JkaW5nL3BsYXliYWNrIHNvZnR3YXJlCi0gICAgbXVzdCB1cHNhbXBsZSBvciBkb3duc2FtcGxlIGFjY29yZGluZ2x5LiAgVGhlIGhhcmR3YXJlIGNhbm5vdCBkbyBpdC4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgVXNlIG5ldyBwY2lfcmVxdWVzdF9yZWdpb25zIGFuZCBwY2lfZGlzYWJsZV9kZXZpY2UgZnVuY3Rpb25zIGluCi0gICAga2VybmVsIDIuNC42LgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTE0Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS4xNAotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBVc2UgVk1fUkVTRVJWRSB3aGVuIGF2YWlsYWJsZSwgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IHBhZ2UgZmF1bHRzLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ2ZXJzaW9uMTExMiI+PHRpdGxlPgotVmVyc2lvbiAxLjEuMTIKLTwvdGl0bGU+Ci0gIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgbW1hcCBidWcgZml4ZXMgZnJvbSBMaW51cy4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjExMTEiPjx0aXRsZT4KLVZlcnNpb24gMS4xLjExCi08L3RpdGxlPgotICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE1hbnkgbW9yZSBidWcgZml4ZXMuICBtbWFwIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IG1heSBzdGlsbCBiZSBidWdneS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgVXNlcyBuZXcgYW5kIHNwaWZmeSBtZXRob2Qgb2YgbW1hcCdpbmcgdGhlIERNQSBidWZmZXIsIGJhc2VkCi0gICAgb24gYSBzdWdnZXN0aW9uIGZyb20gTGludXMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTEwIj48dGl0bGU+Ci1WZXJzaW9uIDEuMS4xMAotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBNYW55IGJ1ZyBmaXhlcy4gIG1tYXAgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgbWF5IHN0aWxsIGJlIGJ1Z2d5LgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ2ZXJzaW9uMTE5Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS45Ci08L3RpdGxlPgotICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIFJlZGVzaWduIGFuZCByZXdyaXRlIGF1ZGlvIHBsYXliYWNrIGltcGxlbWVudGF0aW9uLiAgKGZhc3RlciBhbmQgc21hbGxlciwgaG9wZWZ1bGx5KQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBJbXBsZW1lbnQgcmVjb3JkaW5nIGFuZCBmdWxsIGR1cGxleCAoRFNQX0NBUF9EVVBMRVgpIHN1cHBvcnQuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIE1ha2UgcHJvY2ZzIHN1cHBvcnQgb3B0aW9uYWwuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIFF1aWNrIGludGVycnVwdCBzdGF0dXMgY2hlY2ssIHRvIGxlc3NlbiBvdmVyaGVhZCBpbiBpbnRlcnJ1cHQKLSAgICBzaGFyaW5nIHNpdHVhdGlvbnMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEFkZCBtbWFwKDIpIHN1cHBvcnQuICBEaXNhYmxlZCBmb3Igbm93LCBpdCBpcyBzdGlsbCBidWdneSBhbmQgZXhwZXJpbWVudGFsLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAgICBTdXJyb3VuZCBhbGwgc3lzY2FsbHMgd2l0aCBhIHNlbWFwaG9yZSBmb3IgY2hlYXAgYW5kIGVhc3kgU01QIHByb3RlY3Rpb24uCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIEZpeCBidWcgaW4gY2hhbm5lbCBzaHV0ZG93biAoaGFyZHdhcmUgY2hhbm5lbCByZXNldCkgY29kZS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHNwaW5sb2NrcyAoYmV0dGVyIHBlcmZvcm1hbmNlKS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgRWxpbWluYXRlICJ1bmtub3duIEFGTVQiIG1lc3NhZ2UgYnkgdXNpbmcgYSBkaWZmZXJlbnQgbWV0aG9kCi0gICAgb2Ygc2VsZWN0aW5nIHRoZSBiZXN0IEFGTVRfeHh4IHNvdW5kIHNhbXBsZSBmb3JtYXQgZm9yIHVzZS4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgU3VwcG9ydCBmb3IgcmVhbHRpbWUgaGFyZHdhcmUgcG9pbnRlciBwb3NpdGlvbiByZXBvcnRpbmcKLSAgICAoRFNQX0NBUF9SRUFMVElNRSwgU05EQ1RMX0RTUF9HRVR4UFRSIGlvY3RscykKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgU3VwcG9ydCBmb3IgY2FwdHVyZS9wbGF5YmFjayB0cmlnZ2VyaW5nCi0gICAgKERTUF9DQVBfVFJJR0dFUiwgU05EQ1RMX0RTUF9TRVRUUklHR0VSIGlvY3RscykKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgU05EQ1RMX0RTUF9TRVREVVBMRVggYW5kIFNORENUTF9EU1BfUE9TVCBpb2N0bHMgbm93IGhhbmRsZWQuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIFJld3JpdGUgb3BlbigyKSBhbmQgY2xvc2UoMikgbG9naWMgdG8gYWxsb3cgb25seSBvbmUgdXNlciBhdAotICAgIGEgdGltZS4gIEFsbCBvdGhlciBvcGVuKDIpIGF0dGVtcHRzIHdpbGwgc2xlZXAgdW50aWwgdGhleSBzdWNjZWVkLgotICAgIEZJWE1FOiBvcGVuKE9fUkRPTkxZKSBhbmQgb3BlbihPX1dST05MWSkgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3VjY2VlZC4KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgUmV2aWV3ZWQgY29kZSB0byBlbnN1cmUgdGhhdCBTTVAgYW5kIG11bHRpcGxlIGF1ZGlvIGRldmljZXMKLSAgICBhcmUgZnVsbHkgc3VwcG9ydGVkLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTgiPjx0aXRsZT4KLVZlcnNpb24gMS4xLjgKLTwvdGl0bGU+Ci0gIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgCUNsZWFuIHVwIGludGVycnVwdCBoYW5kbGVyIG91dHB1dC4gIEZpeGVzIHRoZSBmb2xsb3dpbmcga2VybmVsIGVycm9yIG1lc3NhZ2U6Ci0gICAgPC9wYXJhPgotICAJPHByb2dyYW1saXN0aW5nPgotCXVuaGFuZGxlZCBpbnRlcnJ1cHQgLi4uCi0gIAk8L3Byb2dyYW1saXN0aW5nPgotICAgPC9saXN0aXRlbT4KLQotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgIAlDb252ZXJ0IGRvY3VtZW50YXRpb24gdG8gRG9jQm9vaywgc28gdGhhdCBQREYsIEhUTUwgYW5kIFBvc3RTY3JpcHQgKC5wcykgb3V0cHV0IGlzIHJlYWRpbHkKLQlhdmFpbGFibGUuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQotICA8L2l0ZW1pemVkbGlzdD4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjExNyI+PHRpdGxlPgotVmVyc2lvbiAxLjEuNwotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSBGaXggbW9kdWxlIHVubG9hZCBidWcgd2hlcmUgbWl4ZXIgZGV2aWNlIGxlZnQgcmVnaXN0ZXJlZAotICBhZnRlciBkcml2ZXIgZXhpdAotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotPC9zZWN0MT4KLQotPHNlY3QxIGlkPSJ2ZXJzaW9uMTE2Ij48dGl0bGU+Ci1WZXJzaW9uIDEuMS42Ci08L3RpdGxlPgotICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIFJld3JpdGUgdmlhX3NldF9yYXRlIHRvIG1pbWljIEFMU0EgYmFzaWMgQUM5NyByYXRlIHNldHRpbmcKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIFJlbW92ZSBtdWNoIGRlYWQgY29kZQotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gQ29tcGxldGUgc3Bpbl9sb2NrX2lycXNhdmUgLT4gc3Bpbl9sb2NrX2lycSBjb252ZXJzaW9uIGluIHZpYV9kc3BfaW9jdGwKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIEZpeCBidWlsZCBwcm9ibGVtIGluIHZpYV9kc3BfaW9jdGwKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIE9wdGltaXplIGluY2x1ZGVkIGhlYWRlcnMgdG8gZWxpbWluYXRlIGhlYWRlcnMgZm91bmQgaW4gbGludXgvc291bmQKLQk8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLTwvc2VjdDE+Ci0KLTxzZWN0MSBpZD0idmVyc2lvbjExNSI+PHRpdGxlPgotVmVyc2lvbiAxLjEuNQotPC90aXRsZT4KLSAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSBEaXNhYmxlIHNvbWUgb3Zlcmx5LXZlcmJvc2UgZGVidWdnaW5nIGNvZGUKLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIFJlbW92ZSB1bm5lY2Vzc2FyeSBzb3VuZCBsb2NrcwotICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSBGaXggc29tZSBpb2N0bHMgZm9yIGJldHRlciB0aW1lIHJlc29sdXRpb24KLSAgICA8L3BhcmE+Ci0gICA8L2xpc3RpdGVtPgotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotIEJlZ2luIHNwaW5fbG9ja19pcnFzYXZlIC0+IHNwaW5fbG9ja19pcnEgY29udmVyc2lvbiBpbiB2aWFfZHNwX2lvY3RsCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi08c2VjdDEgaWQ9InZlcnNpb24xMTQiPjx0aXRsZT4KLVZlcnNpb24gMS4xLjQKLTwvdGl0bGU+Ci0gIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+Ci0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gQ29tcGxldGVkIHJld3JpdGUgb2YgZHJpdmVyLiAgRWxpbWluYXRlZCBTb3VuZEJsYXN0ZXIgY29tcGF0aWJpbGl0eQotICBjb21wbGV0ZWx5LCBhbmQgbm93IHVzZXMgdGhlIG11Y2gtZmFzdGVyIHNjYXR0ZXItZ2F0aGVyIERNQSBlbmdpbmUuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci08L3NlY3QxPgotCi0gIDwvY2hhcHRlcj4KLSAgCi0gIDxjaGFwdGVyIGlkPSJpbnRmdW5jdGlvbnMiPgotICAgICA8dGl0bGU+SW50ZXJuYWwgRnVuY3Rpb25zPC90aXRsZT4KLSFJc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCi0gIDwvY2hhcHRlcj4KLQotPC9ib29rPgotCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKaW5kZXggMTIyNTBiMy4uOWM2ZDQ1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKQEAgLTEwOCw4ICsxMDgsOSBAQAogMjAwNCBoYXMgc2VlbiBhIExpbnV4LUpvdXJuYWwgYXJ0aWNsZSBvbiB1c2Ugb2YgUkNVIGluIGRjYWNoZQogW01jS2VubmV5MDRhXSwgYSBwZXJmb3JtYW5jZSBjb21wYXJpc29uIG9mIGxvY2tpbmcgdG8gUkNVIG9uIHNldmVyYWwKIGRpZmZlcmVudCBDUFVzIFtNY0tlbm5leTA0Yl0sIGEgZGlzc2VydGF0aW9uIGRlc2NyaWJpbmcgdXNlIG9mIFJDVSBpbiBhCi1udW1iZXIgb2Ygb3BlcmF0aW5nLXN5c3RlbSBrZXJuZWxzIFtQYXVsRWR3YXJkTWNLZW5uZXlQaERdLCBhbmQgYSBwYXBlcgotZGVzY3JpYmluZyBob3cgdG8gbWFrZSBSQ1Ugc2FmZSBmb3Igc29mdC1yZWFsdGltZSBhcHBsaWNhdGlvbnMgW1Nhcm1hMDRjXS4KK251bWJlciBvZiBvcGVyYXRpbmctc3lzdGVtIGtlcm5lbHMgW1BhdWxFZHdhcmRNY0tlbm5leVBoRF0sIGEgcGFwZXIKK2Rlc2NyaWJpbmcgaG93IHRvIG1ha2UgUkNVIHNhZmUgZm9yIHNvZnQtcmVhbHRpbWUgYXBwbGljYXRpb25zIFtTYXJtYTA0Y10sCithbmQgYSBwYXBlciBkZXNjcmliaW5nIFNFTGludXggcGVyZm9ybWFuY2Ugd2l0aCBSQ1UgW0phbWVzTW9ycmlzMDRiXS4KIAogCiBCaWJ0ZXggRW50cmllcwpAQCAtMzQxLDYgKzM0MiwxNyBAQAogLHBhZ2VzPSIxOC0yNiIKIH0KIAorQHRlY2hyZXBvcnR7RnJpZWRiZXJnMDNhCissYXV0aG9yPSJTdHVhcnQgQS4gRnJpZWRiZXJnIgorLHRpdGxlPSJMb2NrLUZyZWUgV2lsZCBDYXJkIFNlYXJjaCBEYXRhIFN0cnVjdHVyZSBhbmQgTWV0aG9kIgorLGluc3RpdHV0aW9uPSJVUyBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UiCissYWRkcmVzcz0iV2FzaGluZ3RvbiwgREMiCisseWVhcj0iMjAwMyIKKyxudW1iZXI9IlVTIFBhdGVudCA2LDY2MiwxODQgKGNvbnRyaWJ1dGVkIHVuZGVyIEdQTCkiCissbW9udGg9IkRlY2VtYmVyIgorLHBhZ2VzPSIxMTIiCit9CisKIEBhcnRpY2xle01jS2VubmV5MDRhCiAsYXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IGFuZCBEaXBhbmthciBTYXJtYSBhbmQgTWFuZWVzaCBTb25pIgogLHRpdGxlPSJTY2FsaW5nIGRjYWNoZSB3aXRoIHtSQ1V9IgpAQCAtMzczLDYgKzM4NSw5IEBACiAsc2Nob29sPSJPR0kgU2Nob29sIG9mIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nIGF0CiBPcmVnb24gSGVhbHRoIGFuZCBTY2llbmNlcyBVbml2ZXJzaXR5IgogLHllYXI9IjIwMDQiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVS9SQ1VkaXNzZXJ0YXRpb24uMjAwNC4wNy4xNGUxLnBkZn0KK1tWaWV3ZWQgT2N0b2JlciAxNSwgMjAwNF0iCiB9CiAKIEBDb25mZXJlbmNle1Nhcm1hMDRjCkBAIC0zODUsMyArNDAwLDEzIEBACiAsbW9udGg9Ikp1bmUiCiAscGFnZXM9IjE4Mi0xOTEiCiB9CisKK0B1bnB1Ymxpc2hlZHtKYW1lc01vcnJpczA0YgorLEF1dGhvcj0iSmFtZXMgTW9ycmlzIgorLFRpdGxlPSJSZWNlbnQgRGV2ZWxvcG1lbnRzIGluIHtTRUxpbnV4fSBLZXJuZWwgUGVyZm9ybWFuY2UiCissbW9udGg9IkRlY2VtYmVyIgorLHllYXI9IjIwMDQiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LmxpdmVqb3VybmFsLmNvbS91c2Vycy9qYW1lc19tb3JyaXMvMjE1My5odG1sfQorW1ZpZXdlZCBEZWNlbWJlciAxMCwgMjAwNF0iCit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9VUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9VUC50eHQKaW5kZXggNTUxYTgwMy4uM2JmYjg0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL1VQLnR4dApAQCAtMiwxMSArMiwxMSBAQAogCiAKIEEgY29tbW9uIG1pc2NvbmNlcHRpb24gaXMgdGhhdCwgb24gVVAgc3lzdGVtcywgdGhlIGNhbGxfcmN1KCkgcHJpbWl0aXZlCi1tYXkgaW1tZWRpYXRlbHkgaW52b2tlIGl0cyBmdW5jdGlvbiwgYW5kIHRoYXQgdGhlIHN5bmNocm9uaXplX2tlcm5lbAorbWF5IGltbWVkaWF0ZWx5IGludm9rZSBpdHMgZnVuY3Rpb24sIGFuZCB0aGF0IHRoZSBzeW5jaHJvbml6ZV9yY3UoKQogcHJpbWl0aXZlIG1heSByZXR1cm4gaW1tZWRpYXRlbHkuICBUaGUgYmFzaXMgb2YgdGhpcyBtaXNjb25jZXB0aW9uCiBpcyB0aGF0IHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIENQVSwgaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8KIHdhaXQgZm9yIGFueXRoaW5nIGVsc2UgdG8gZ2V0IGRvbmUsIHNpbmNlIHRoZXJlIGFyZSBubyBvdGhlciBDUFVzIGZvcgotYW55dGhpbmcgZWxzZSB0byBiZSBoYXBwZW5pbmcgb24uICBBbHRob3VnaCB0aGlzIGFwcHJvYWNoIHdpbGwgc29ydCBvZgorYW55dGhpbmcgZWxzZSB0byBiZSBoYXBwZW5pbmcgb24uICBBbHRob3VnaCB0aGlzIGFwcHJvYWNoIHdpbGwgLXNvcnQtIC1vZi0KIHdvcmsgYSBzdXJwcmlzaW5nIGFtb3VudCBvZiB0aGUgdGltZSwgaXQgaXMgYSB2ZXJ5IGJhZCBpZGVhIGluIGdlbmVyYWwuCiBUaGlzIGRvY3VtZW50IHByZXNlbnRzIHR3byBleGFtcGxlcyB0aGF0IGRlbW9uc3RyYXRlIGV4YWN0bHkgaG93IGJhZCBhbgogaWRlYSB0aGlzIGlzLgpAQCAtNDQsMTQgKzQ0LDE0IEBACiB1bmRlcmx5aW5nIFJDVSwgbmFtZWx5IHRoYXQgY2FsbF9yY3UoKSBkZWZlcnMgaW52b2tpbmcgaXRzIGFyZ3VtZW50cyB1bnRpbAogYWxsIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgY3VycmVudGx5IGV4ZWN1dGluZyBoYXZlIGNvbXBsZXRlZC4KIAotUXVpY2sgUXVpejogd2h5IGlzIGl0IC1ub3QtIGxlZ2FsIHRvIGludm9rZSBzeW5jaHJvbml6ZV9rZXJuZWwoKSBpbgorUXVpY2sgUXVpejogd2h5IGlzIGl0IC1ub3QtIGxlZ2FsIHRvIGludm9rZSBzeW5jaHJvbml6ZV9yY3UoKSBpbgogdGhpcyBjYXNlPwogCiAKIFN1bW1hcnkKIAogUGVybWl0dGluZyBjYWxsX3JjdSgpIHRvIGltbWVkaWF0ZWx5IGludm9rZSBpdHMgYXJndW1lbnRzIG9yIHBlcm1pdHRpbmcKLXN5bmNocm9uaXplX2tlcm5lbCgpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBicmVha3MgUkNVLCBldmVuIG9uIGEgVVAgc3lzdGVtLgorc3luY2hyb25pemVfcmN1KCkgdG8gaW1tZWRpYXRlbHkgcmV0dXJuIGJyZWFrcyBSQ1UsIGV2ZW4gb24gYSBVUCBzeXN0ZW0uCiBTbyBkbyBub3QgZG8gaXQhICBFdmVuIG9uIGEgVVAgc3lzdGVtLCB0aGUgUkNVIGluZnJhc3RydWN0dXJlIC1tdXN0LQogcmVzcGVjdCBncmFjZSBwZXJpb2RzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAppbmRleCBiM2E1NjhhLi44ZjNmYjc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKQEAgLTMyLDcgKzMyLDEwIEBACiAJdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgcmVhZHMgdG8gYmUgcmVvcmRlcmVkKSwgYW5kIGJlIHByZXBhcmVkCiAJdG8gZXhwbGFpbiB3aHkgdGhpcyBhZGRlZCBjb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UKIAljaG9vc2UgI2MsIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QKLQliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcy4KKwliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyAoZm9yCisJZXhhbXBsZSwgaWYgdGhlIHRhc2sgaXMgdXBkYXRpbmcgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaXRzZWxmCisJdGhhdCBvdGhlciB0YXNrcyBjYW4gcmVhZCwgdGhlcmUgYnkgZGVmaW5pdGlvbiBjYW4gYmUgbm8KKwlib3R0bGVuZWNrKS4KIAogMi4JRG8gdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgbWFrZSBwcm9wZXIgdXNlIG9mCiAJcmN1X3JlYWRfbG9jaygpIGFuZCBmcmllbmRzPyAgVGhlc2UgcHJpbWl0aXZlcyBhcmUgbmVlZGVkCkBAIC04OSwyNyArOTIsMzQgQEAKIAkJIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaCBhcyB0aGUKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4KIAotCWIuCUlmIHRoZSBsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlIGxpc3RfZGVsX3JjdSgpLAotCQlsaXN0X2FkZF90YWlsX3JjdSgpLCBhbmQgbGlzdF9kZWxfcmN1KCkgcHJpbWl0aXZlcyBtdXN0Ci0JCWJlIHVzZWQgaW4gb3JkZXIgdG8gcHJldmVudCB3ZWFrbHkgb3JkZXJlZCBtYWNoaW5lcyBmcm9tCi0JCW1pc29yZGVyaW5nIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgcG9pbnRlciBwbGFudGluZy4KKwliLglJZiB0aGUgbGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZSBsaXN0X2FkZF90YWlsX3JjdSgpCisJCWFuZCBsaXN0X2FkZF9yY3UoKSBwcmltaXRpdmVzIG11c3QgYmUgdXNlZCBpbiBvcmRlcgorCQl0byBwcmV2ZW50IHdlYWtseSBvcmRlcmVkIG1hY2hpbmVzIGZyb20gbWlzb3JkZXJpbmcKKwkJc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBwb2ludGVyIHBsYW50aW5nLgogCQlTaW1pbGFybHksIGlmIHRoZSBobGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZQotCQlobGlzdF9kZWxfcmN1KCkgYW5kIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHByaW1pdGl2ZXMKLQkJYXJlIHJlcXVpcmVkLgorCQlobGlzdF9hZGRfaGVhZF9yY3UoKSBwcmltaXRpdmUgaXMgcmVxdWlyZWQuCiAKLQljLglVcGRhdGVzIG11c3QgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgYSBnaXZlbgorCWMuCUlmIHRoZSBsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlIGxpc3RfZGVsX3JjdSgpCisJCXByaW1pdGl2ZSBtdXN0IGJlIHVzZWQgdG8ga2VlcCBsaXN0X2RlbCgpJ3MgcG9pbnRlcgorCQlwb2lzb25pbmcgZnJvbSBpbmZsaWN0aW5nIHRveGljIGVmZmVjdHMgb24gY29uY3VycmVudAorCQlyZWFkZXJzLiAgU2ltaWxhcmx5LCBpZiB0aGUgaGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLAorCQl0aGUgaGxpc3RfZGVsX3JjdSgpIHByaW1pdGl2ZSBpcyByZXF1aXJlZC4KKworCQlUaGUgbGlzdF9yZXBsYWNlX3JjdSgpIHByaW1pdGl2ZSBtYXkgYmUgdXNlZCB0bworCQlyZXBsYWNlIGFuIG9sZCBzdHJ1Y3R1cmUgd2l0aCBhIG5ldyBvbmUgaW4gYW4KKwkJUkNVLXByb3RlY3RlZCBsaXN0LgorCisJZC4JVXBkYXRlcyBtdXN0IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGEgZ2l2ZW4KIAkJc3RydWN0dXJlIGhhcHBlbnMgYmVmb3JlIHBvaW50ZXJzIHRvIHRoYXQgc3RydWN0dXJlIGFyZQogCQlwdWJsaWNpemVkLiAgVXNlIHRoZSByY3VfYXNzaWduX3BvaW50ZXIoKSBwcmltaXRpdmUKIAkJd2hlbiBwdWJsaWNpemluZyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBjYW4KIAkJYmUgdHJhdmVyc2VkIGJ5IGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KIAotCQlbVGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHByaW1pdGl2ZSBpcyBpbiBwcm9jZXNzLl0KLQogNS4JSWYgY2FsbF9yY3UoKSwgb3IgYSByZWxhdGVkIHByaW1pdGl2ZSBzdWNoIGFzIGNhbGxfcmN1X2JoKCksCiAJaXMgdXNlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgYmUgd3JpdHRlbiB0byBiZSBjYWxsZWQKIAlmcm9tIHNvZnRpcnEgY29udGV4dC4gIEluIHBhcnRpY3VsYXIsIGl0IGNhbm5vdCBibG9jay4KIAotNi4JU2luY2Ugc3luY2hyb25pemVfa2VybmVsKCkgYmxvY2tzLCBpdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20KKzYuCVNpbmNlIHN5bmNocm9uaXplX3JjdSgpIGNhbiBibG9jaywgaXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tCiAJYW55IHNvcnQgb2YgaXJxIGNvbnRleHQuCiAKIDcuCUlmIHRoZSB1cGRhdGVyIHVzZXMgY2FsbF9yY3UoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzCkBAIC0xMjUsOSArMTM1LDkgQEAKIAlzdWNoIGNhc2VzIGlzIGEgbXVzdCwgb2YgY291cnNlISAgQW5kIHRoZSBqdXJ5IGlzIHN0aWxsIG91dCBvbgogCXdoZXRoZXIgdGhlIGluY3JlYXNlZCBzcGVlZCBpcyB3b3J0aCBpdC4KIAotOC4JQWx0aG91Z2ggc3luY2hyb25pemVfa2VybmVsKCkgaXMgYSBiaXQgc2xvd2VyIHRoYW4gaXMgY2FsbF9yY3UoKSwKKzguCUFsdGhvdWdoIHN5bmNocm9uaXplX3JjdSgpIGlzIGEgYml0IHNsb3dlciB0aGFuIGlzIGNhbGxfcmN1KCksCiAJaXQgdXN1YWxseSByZXN1bHRzIGluIHNpbXBsZXIgY29kZS4gIFNvLCB1bmxlc3MgdXBkYXRlIHBlcmZvcm1hbmNlCi0JaXMgaW1wb3J0YW50IG9yIHRoZSB1cGRhdGVycyBjYW5ub3QgYmxvY2ssIHN5bmNocm9uaXplX2tlcm5lbCgpCisJaXMgaW1wb3J0YW50IG9yIHRoZSB1cGRhdGVycyBjYW5ub3QgYmxvY2ssIHN5bmNocm9uaXplX3JjdSgpCiAJc2hvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byBjYWxsX3JjdSgpLgogCiA5LglBbGwgUkNVIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHdoaWNoIGluY2x1ZGUKQEAgLTE1NSwzICsxNjUsMTQgQEAKIAl5b3UgLW11c3QtIHVzZSB0aGUgIl9yY3UoKSIgdmFyaWFudHMgb2YgdGhlIGxpc3QgbWFjcm9zLgogCUZhaWxpbmcgdG8gZG8gc28gd2lsbCBicmVhayBBbHBoYSBhbmQgY29uZnVzZSBwZW9wbGUgcmVhZGluZwogCXlvdXIgY29kZS4KKworMTEuCU5vdGUgdGhhdCBzeW5jaHJvbml6ZV9yY3UoKSAtb25seS0gZ3VhcmFudGVlcyB0byB3YWl0IHVudGlsCisJYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgcmN1X3JlYWRfbG9jaygpLXByb3RlY3RlZCBSQ1UgcmVhZC1zaWRlCisJY3JpdGljYWwgc2VjdGlvbnMgY29tcGxldGUuICBJdCBkb2VzIC1ub3QtIG5lY2Vzc2FyaWx5IGd1YXJhbnRlZQorCXRoYXQgYWxsIGN1cnJlbnRseSBydW5uaW5nIGludGVycnVwdHMsIE5NSXMsIHByZWVtcHRfZGlzYWJsZSgpCisJY29kZSwgb3IgaWRsZSBsb29wcyB3aWxsIGNvbXBsZXRlLiAgVGhlcmVmb3JlLCBpZiB5b3UgZG8gbm90IGhhdmUKKwlyY3VfcmVhZF9sb2NrKCktcHJvdGVjdGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgZG8gLW5vdC0KKwl1c2Ugc3luY2hyb25pemVfcmN1KCkuCisKKwlJZiB5b3Ugd2FudCB0byB3YWl0IGZvciBzb21lIG9mIHRoZXNlIG90aGVyIHRoaW5ncywgeW91IG1pZ2h0CisJaW5zdGVhZCBuZWVkIHRvIHVzZSBzeW5jaHJvbml6ZV9pcnEoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dAppbmRleCBiZGE2ZWFkLi5mOGE1NGZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dApAQCAtMzIsNiArMzIsNyBAQAogCQllbnVtIGF1ZGl0X3N0YXRlICAgc3RhdGU7CiAKIAkJcmVhZF9sb2NrKCZhdWRpdHNjX2xvY2spOworCQkvKiBOb3RlOiBhdWRpdF9uZXRsaW5rX3NlbSBoZWxkIGJ5IGNhbGxlci4gKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmYXVkaXRfdHNrbGlzdCwgbGlzdCkgewogCQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CiAJCQkJcmVhZF91bmxvY2soJmF1ZGl0c2NfbG9jayk7CkBAIC01NSw2ICs1Niw3IEBACiAJCWVudW0gYXVkaXRfc3RhdGUgICBzdGF0ZTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CisJCS8qIE5vdGU6IGF1ZGl0X25ldGxpbmtfc2VtIGhlbGQgYnkgY2FsbGVyLiAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCAmYXVkaXRfdHNrbGlzdCwgbGlzdCkgewogCQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xMzksMTIgKzE0MSwxNSBAQAogYSBzcGluX2xvY2soKSBhbmQgYSBzcGluX3VubG9jaygpLCBidXQgaW4gdGhpcyBjYXNlLCBhbGwgY2FsbGVycyBob2xkCiBhdWRpdF9uZXRsaW5rX3NlbSwgc28gbm8gYWRkaXRpb25hbCBsb2NraW5nIGlzIHJlcXVpcmVkLiAgVGhlIGF1ZGl0c2NfbG9jawogY2FuIHRoZXJlZm9yZSBiZSBlbGltaW5hdGVkLCBzaW5jZSB1c2Ugb2YgUkNVIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yCi13cml0ZXJzIHRvIGV4Y2x1ZGUgcmVhZGVycy4KK3dyaXRlcnMgdG8gZXhjbHVkZSByZWFkZXJzLiAgTm9ybWFsbHksIHRoZSB3cml0ZV9sb2NrKCkgY2FsbHMgd291bGQKK2JlIGNvbnZlcnRlZCBpbnRvIHNwaW5fbG9jaygpIGNhbGxzLgogCiBUaGUgbGlzdF9kZWwoKSwgbGlzdF9hZGQoKSwgYW5kIGxpc3RfYWRkX3RhaWwoKSBwcmltaXRpdmVzIGhhdmUgYmVlbgogcmVwbGFjZWQgYnkgbGlzdF9kZWxfcmN1KCksIGxpc3RfYWRkX3JjdSgpLCBhbmQgbGlzdF9hZGRfdGFpbF9yY3UoKS4KIFRoZSBfcmN1KCkgbGlzdC1tYW5pcHVsYXRpb24gcHJpbWl0aXZlcyBhZGQgbWVtb3J5IGJhcnJpZXJzIHRoYXQgYXJlCi1uZWVkZWQgb24gd2Vha2x5IG9yZGVyZWQgQ1BVcyAobW9zdCBvZiB0aGVtISkuCituZWVkZWQgb24gd2Vha2x5IG9yZGVyZWQgQ1BVcyAobW9zdCBvZiB0aGVtISkuICBUaGUgbGlzdF9kZWxfcmN1KCkKK3ByaW1pdGl2ZSBvbWl0cyB0aGUgcG9pbnRlciBwb2lzb25pbmcgZGVidWctYXNzaXN0IGNvZGUgdGhhdCB3b3VsZAorb3RoZXJ3aXNlIGNhdXNlIGNvbmN1cnJlbnQgcmVhZGVycyB0byBmYWlsIHNwZWN0YWN1bGFybHkuCiAKIFNvLCB3aGVuIHJlYWRlcnMgY2FuIHRvbGVyYXRlIHN0YWxlIGRhdGEgYW5kIHdoZW4gZW50cmllcyBhcmUgZWl0aGVyIGFkZGVkCiBvciBkZWxldGVkLCB3aXRob3V0IGluLXBsYWNlIG1vZGlmaWNhdGlvbiwgaXQgaXMgdmVyeSBlYXN5IHRvIHVzZSBSQ1UhCkBAIC0xNjYsNiArMTcxLDcgQEAKIAkJc3RydWN0IGF1ZGl0X25ld2VudHJ5ICpuZTsKIAogCQl3cml0ZV9sb2NrKCZhdWRpdHNjX2xvY2spOworCQkvKiBOb3RlOiBhdWRpdF9uZXRsaW5rX3NlbSBoZWxkIGJ5IGNhbGxlci4gKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7CiAJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCAmZS0+cnVsZSkpIHsKIAkJCQllLT5ydWxlLmFjdGlvbiA9IG5ld2FjdGlvbjsKQEAgLTE5OSw4ICsyMDUsNyBAQAogCQkJCWF1ZGl0X2NvcHlfcnVsZSgmbmUtPnJ1bGUsICZlLT5ydWxlKTsKIAkJCQluZS0+cnVsZS5hY3Rpb24gPSBuZXdhY3Rpb247CiAJCQkJbmUtPnJ1bGUuZmlsZV9jb3VudCA9IG5ld2ZpZWxkX2NvdW50OwotCQkJCWxpc3RfYWRkX3JjdShuZSwgZSk7Ci0JCQkJbGlzdF9kZWwoZSk7CisJCQkJbGlzdF9yZXBsYWNlX3JjdShlLCBuZSk7CiAJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CmluZGV4IDdlMGMyYWIuLmViNDQ0MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dApAQCAtNDMsNyArNDMsOSBAQAogCiBvCUhvdyBjYW4gSSBzZWUgd2hlcmUgUkNVIGlzIGN1cnJlbnRseSB1c2VkIGluIHRoZSBMaW51eCBrZXJuZWw/CiAKLQlTZWFyY2ggZm9yICJyY3VfcmVhZF9sb2NrIiwgImNhbGxfcmN1IiwgYW5kICJzeW5jaHJvbml6ZV9rZXJuZWwiLgorCVNlYXJjaCBmb3IgInJjdV9yZWFkX2xvY2siLCAicmN1X3JlYWRfdW5sb2NrIiwgImNhbGxfcmN1IiwKKwkicmN1X3JlYWRfbG9ja19iaCIsICJyY3VfcmVhZF91bmxvY2tfYmgiLCAiY2FsbF9yY3VfYmgiLAorCSJzeW5jaHJvbml6ZV9yY3UiLCBhbmQgInN5bmNocm9uaXplX25ldCIuCiAKIG8JV2hhdCBndWlkZWxpbmVzIHNob3VsZCBJIGZvbGxvdyB3aGVuIHdyaXRpbmcgY29kZSB0aGF0IHVzZXMgUkNVPwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCA3MzRmY2M4Li43YzI0OTY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTEsMTM3ICsxLDEzNyBAQAotLioKLSp+Ci01M2M4eHhfZC5oKgogKi5hCi1haWM3KnJlZy5oKgotYWljNypzZXEuaCoKLWFpYzcqcmVnX3ByaW50LmMqCisqLmF1eAorKi5iaW4KKyouY3BpbworKi5jc3MKKyouZHZpCisqLmVwcworKi5naWYKKyouZ3JlcAorKi5ncnAKKyouZ3oKKyouaHRtbAorKi5qcGVnCisqLmtvCisqLmxvZworKi5sc3QKKyoubW9kLmMKKyoubworKi5vcmlnCisqLm91dAorKi5wZGYKKyoucG5nCisqLnBzCisqLnJlagorKi5zCisqLnNnbWwKKyouc28KKyoudGV4CisqLnZlcgorKl9NT0RVTEVTCisqX3ZnYTE2LmMKKypjc2NvcGUqCisqfgorLioKKy5jc2NvcGUKIDUzYzcwMF9kLmgKKzUzYzh4eF9kLmgqCitCaXRLZWVwZXIKK0NPUFlJTkcKK0NSRURJVFMKK0NWUworQ2hhbmdlU2V0CitLZXJudHlwZXMKK01PRFMudHh0CitNb2R1bGUuc3ltdmVycworUEVORElORworU0NDUworU3lzdGVtLm1hcCoKK1RBR1MKK2FpYzcqcmVnLmgqCithaWM3KnJlZ19wcmludC5jKgorYWljNypzZXEuaCoKIGFpY2FzbQogYWljZGIuaCoKIGFzbQogYXNtX29mZnNldHMuKgogYXV0b2NvbmYuaCoKLSouYXV4CiBiYm9vdHNlY3QKLSouYmluCiBiaW4yYwogYmlua2VybmVsLnNwZWMKLUJpdEtlZXBlcgogYm9vdHNlY3QKIGJzZXR1cAogYnRmaXh1cHByZXAKIGJ1aWxkCiBidm1saW51eAogYnpJbWFnZSoKLUNoYW5nZVNldAogY2xhc3NsaXN0LmgqCi1jb21waWxlLmgqCiBjb21wKi5sb2cKK2NvbXBpbGUuaCoKIGNvbmZpZwogY29uZmlnLSoKIGNvbmZpZ19kYXRhLmgqCiBjb25tYWtlaGFzaAogY29uc29sZW1hcF9kZWZ0YmwuYyoKLUNPUFlJTkcKLUNSRURJVFMKLS5jc2NvcGUKLSpjc2NvcGUqCitjcmMzMnRhYmxlLmgqCiBjc2NvcGUuKgotKi5vdXQKLSouY3NzCi1DVlMKIGRlZmtleW1hcC5jKgogZGV2bGlzdC5oKgogZG9jcHJvYwogZHVtbXlfc3ltLmMqCi0qLmR2aQotKi5lcHMKK2VsZmNvbmZpZy5oKgogZmlsZWxpc3QKIGZpeGRlcAogZm9yZTIwMGVfbWtmaXJtCiBmb3JlMjAwZV9wY2FfZncuYyoKIGdlbi1kZXZsaXN0Ci1nZW5faW5pdF9jcGlvCi1nZW5fY3JjMzJ0YWJsZQotY3JjMzJ0YWJsZS5oKgotKi5jcGlvCiBnZW4ta2RiX2NtZHMuYyoKLWdlbnRibAorZ2VuX2NyYzMydGFibGUKK2dlbl9pbml0X2NwaW8KIGdlbmtzeW1zCi0qLmdpZgotKi5negotKi5odG1sCitnZW50YmwKIGlrY29uZmlnLmgqCiBpbml0cmFtZnNfbGlzdAotKi5qcGVnCitrYWxsc3ltcwoga2NvbmZpZwoga2NvbmZpZy50awotS2VybnR5cGVzCiBrZXl3b3Jkcy5jKgoga3N5bS5jKgoga3N5bS5oKgota2FsbHN5bXMKLW1rX2VsZmNvbmZpZwotZWxmY29uZmlnLmgqCi1tb2Rwb3N0Ci1wbm10b2xvZ28KLWxvZ29fKi5jCi0qLmxvZwogbGV4LmMqCitsb2dvXyouYwogbG9nb18qX2NsdXQyMjQuYwogbG9nb18qX21vbm8uYwogbHhkaWFsb2cKIG1ha2VfdGltZXNfaAogbWFwCi1ta2RlcAotKl9NT0RVTEVTCi1NT0RTLnR4dAotbW9kdmVyc2lvbnMuaCoKLU1vZHVsZS5zeW12ZXJzCi0qLm1vZC5jCi0qLm8KLSoua28KLSoub3JpZwotKi5sc3QKLSouZ3JwCi0qLmdyZXAKLW91aS5jKgotbWt0YWJsZXMKLXJhaWQ2dGFibGVzLmMKLXJhaWQ2aW50Ki5jCi1yYWlkNmFsdGl2ZWMqLmMKLXdhbnhsZncuaW5jCiBtYXVpX2Jvb3QuaAotcHNzX2Jvb3QuaAotdHJpeF9ib290LmgKLSoucGRmCitta19lbGZjb25maWcKK21rZGVwCitta3RhYmxlcworbW9kcG9zdAorbW9kdmVyc2lvbnMuaCoKK291aS5jKgogcGFyc2UuYyoKIHBhcnNlLmgqCi1QRU5ESU5HCitwbm10b2xvZ28KIHBwY19kZWZzLmgqCiBwcm9tY29uX3RibC5jKgotKi5wbmcKLSoucHMKLSoucmVqCi1TQ0NTCitwc3NfYm9vdC5oCityYWlkNmFsdGl2ZWMqLmMKK3JhaWQ2aW50Ki5jCityYWlkNnRhYmxlcy5jCiBzZXR1cAotKi5zCi0qLnNvCi0qLnNnbWwKIHNpbTcxMF9kLmgqCiBzbV90YmwqCiBzcGxpdC1pbmNsdWRlCi1TeXN0ZW0ubWFwKgogdGFncwotVEFHUwotKi50ZXgKIHRpbWVzLmgqCiB0a3BhcnNlCi0qLnZlcgordHJpeF9ib290LmgKIHZlcnNpb24uaCoKLSpfdmdhMTYuYwogdm1saW51eAotdm1saW51eC5sZHMKIHZtbGludXgtKgordm1saW51eC5sZHMKIHZzeXNjYWxsLmxkcword2FueGxmdy5pbmMKIHpJbWFnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDU2NjI3YzEuLmQzYzUyZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTQ4LDMgKzQ4LDE4IEBACiBXaHk6CVJlcGxhY2VkIGJ5IC0+Y29tcGF0X2lvY3RsIGluIGZpbGVfb3BlcmF0aW9ucyBhbmQgb3RoZXIgbWV0aG9kCiAJdmVjb3JzLgogV2hvOglBbmRpIEtsZWVuIDxha0BtdWMuZGU+LCBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVJDVSBBUEkgbW92ZXMgdG8gRVhQT1JUX1NZTUJPTF9HUEwKK1doZW46CUFwcmlsIDIwMDYKK0ZpbGVzOglpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgsIGtlcm5lbC9yY3VwZGF0ZS5jCitXaHk6CU91dHNpZGUgb2YgTGludXgsIHRoZSBvbmx5IGltcGxlbWVudGF0aW9ucyBvZiBhbnl0aGluZyBldmVuCisJdmFndWVseSByZXNlbWJsaW5nIFJDVSB0aGF0IEkgYW0gYXdhcmUgb2YgYXJlIGluIERZTklYL3B0eCwKKwlWTS9YQSwgVG9ybmFkbywgYW5kIEs0Mi4gIEkgZG8gbm90IGV4cGVjdCBhbnlvbmUgdG8gcG9ydCBiaW5hcnkKKwlkcml2ZXJzIG9yIGtlcm5lbCBtb2R1bGVzIGZyb20gYW55IG9mIHRoZXNlLCBzaW5jZSB0aGUgZmlyc3QgdHdvCisJYXJlIG93bmVkIGJ5IElCTSBhbmQgdGhlIGxhc3QgdHdvIGFyZSBvcGVuLXNvdXJjZSByZXNlYXJjaCBPU2VzLgorCVNvIHRoZXNlIHdpbGwgbW92ZSB0byBHUEwgYWZ0ZXIgYSBncmFjZSBwZXJpb2QgdG8gYWxsb3cKKwlwZW9wbGUsIHdobyBtaWdodCBiZSB1c2luZyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBJIGFtIG5vdCBhd2FyZQorCW9mLCB0byBhZGp1c3QgdG8gdGhpcyB1cGNvbWluZyBjaGFuZ2UuCitXaG86CVBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCBhOTM0YmFlLi4xMDQ1ZGE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC0yMTksOCArMjE5LDEyIEBACiBJZiB0aGUgZmlsZXN5dGVtIGlzIGNhbGxlZCBmb3Igc3luYyB0aGVuIGl0IG11c3Qgd2FpdCBvbiBhbnkKIGluLXByb2dyZXNzIEkvTyBhbmQgdGhlbiBzdGFydCBuZXcgSS9PLgogCi1UaGUgZmlsZXN5c3RlbSBzaG91bGQgdW5sb2NrIHRoZSBwYWdlIHN5bmNocm9ub3VzbHksIGJlZm9yZSByZXR1cm5pbmcKLXRvIHRoZSBjYWxsZXIuCitUaGUgZmlsZXN5c3RlbSBzaG91bGQgdW5sb2NrIHRoZSBwYWdlIHN5bmNocm9ub3VzbHksIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlCitjYWxsZXIsIHVubGVzcyAtPndyaXRlcGFnZSgpIHJldHVybnMgc3BlY2lhbCBXUklURVBBR0VfQUNUSVZBVEUKK3ZhbHVlLiBXUklURVBBR0VfQUNUSVZBVEUgbWVhbnMgdGhhdCBwYWdlIGNhbm5vdCByZWFsbHkgYmUgd3JpdHRlbiBvdXQKK2N1cnJlbnRseSwgYW5kIFZNIHNob3VsZCBzdG9wIGNhbGxpbmcgLT53cml0ZXBhZ2UoKSBvbiB0aGlzIHBhZ2UgZm9yIHNvbWUKK3RpbWUuIFZNIGRvZXMgdGhpcyBieSBtb3ZpbmcgcGFnZSB0byB0aGUgaGVhZCBvZiB0aGUgYWN0aXZlIGxpc3QsIGhlbmNlIHRoZQorbmFtZS4KIAogVW5sZXNzIHRoZSBmaWxlc3lzdGVtIGlzIGdvaW5nIHRvIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCksIHVubG9jayB0aGUgcGFnZQogYW5kIHJldHVybiB6ZXJvLCB3cml0ZXBhZ2UgKm11c3QqIHJ1biBzZXRfcGFnZV93cml0ZWJhY2soKSBhZ2FpbnN0IHRoZSBwYWdlLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKaW5kZXggY2JlODVjMS4uNmM5OGYyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CkBAIC05MDksMTYgKzkwOSw2IEBACiBSZXByZXNlbnRzIHRoZSAgbnVtYmVyIG9mIGZyZWUgaW5vZGVzLiBJZS4gVGhlIG51bWJlciBvZiBpbnVzZSBpbm9kZXMgaXMKIChucl9pbm9kZXMgLSBucl9mcmVlX2lub2RlcykuCiAKLXN1cGVyLW5yIGFuZCBzdXBlci1tYXgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQWdhaW4sIHN1cGVyICBibG9jayBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIGtlcm5lbCwgYnV0IG5vdCBmcmVlZC4gVGhlCi1maWxlIHN1cGVyLW1heCAgY29udGFpbnMgIHRoZSAgbWF4aW11bSAgbnVtYmVyICBvZiBzdXBlciBibG9jayBoYW5kbGVycywgd2hlcmUKLXN1cGVyLW5yIHNob3dzIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFsbG9jYXRlZCBvbmVzLgotCi1FdmVyeSBtb3VudGVkIGZpbGUgc3lzdGVtIG5lZWRzIGEgc3VwZXIgYmxvY2ssIHNvIGlmIHlvdSBwbGFuIHRvIG1vdW50IGxvdHMgb2YKLWZpbGUgc3lzdGVtcywgeW91IG1heSB3YW50IHRvIGluY3JlYXNlIHRoZXNlIG51bWJlcnMuCi0KIGFpby1uciBhbmQgYWlvLW1heC1ucgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTM4Ni96ZXJvLXBhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKaW5kZXggNjdjMDUzYS4uZGYyOGM3NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L3plcm8tcGFnZS50eHQKQEAgLTc5LDYgKzc5LDYgQEAKIDB4MjJjICAgdW5zaWduZWQgbG9uZwlyYW1kaXNrX21heAogMHgyMzAgICAxNiBieXRlcyAJdHJhbXBvbGluZQogMHgyOTAgLSAweDJjZgkJRUREX01CUl9TSUdfQlVGRkVSIChlZGQuUykKLTB4MmQwIC0gMHg2MDAJCUU4MjBNQVAKLTB4NjAwIC0gMHg3ZmYJCUVEREJVRiAoZWRkLlMpIGZvciBkaXNrIHNpZ25hdHVyZSByZWFkIHNlY3RvcgotMHg2MDAgLSAweDdlYgkJRUREQlVGIChlZGQuUykgZm9yIGVkZCBkYXRhCisweDJkMCAtIDB4ZDAwCQlFODIwTUFQCisweGQwMCAtIDB4ZWZmCQlFRERCVUYgKGVkZC5TKSBmb3IgZGlzayBzaWduYXR1cmUgcmVhZCBzZWN0b3IKKzB4ZDAwIC0gMHhlZWIJCUVEREJVRiAoZWRkLlMpIGZvciBlZGQgZGF0YQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dAppbmRleCBkOTM5NzE3Li5mMGJlMzg5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dApAQCAtNTYsMTIgKzU2LDE2IEBACiAgICByZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MKICAgIAogcmVhZF9jb25mX2RhdGEoKQorcmVhZF9jb25mX2RhdGFfbHBtKCkKICAgIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhLgogCiBjY3dfZGV2aWNlX2dldF9jaXcoKQogICAgZ2V0IGNvbW1hbmRzIGZyb20gZXh0ZW5kZWQgc2Vuc2UgZGF0YS4KIAogY2N3X2RldmljZV9zdGFydCgpCQorY2N3X2RldmljZV9zdGFydF90aW1lb3V0KCkKK2Njd19kZXZpY2Vfc3RhcnRfa2V5KCkKK2Njd19kZXZpY2Vfc3RhcnRfa2V5X3RpbWVvdXQoKQogICAgaW5pdGlhdGUgYW4gSS9PIHJlcXVlc3QuCiAKIGNjd19kZXZpY2VfcmVzdW1lKCkKQEAgLTE5NywxOSArMjAxLDIxIEBACiAgICAgICAgICAgb3BlcmF0aW9uYWwuCiAKIAotcmVhZF9jb25mX2RhdGEoKSAtIFJlYWQgQ29uZmlndXJhdGlvbiBEYXRhCityZWFkX2NvbmZfZGF0YSgpLCByZWFkX2NvbmZfZGF0YV9scG0oKSAtIFJlYWQgQ29uZmlndXJhdGlvbiBEYXRhCiAKIFJldHJpZXZlIHRoZSBkZXZpY2UgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gZGF0YS4gUGxlYXNlIGhhdmUgYSBsb29rIGF0IHlvdXIgCiBkZXZpY2UgZGVwZW5kZW50IEkvTyBjb21tYW5kcyBmb3IgdGhlIGRldmljZSBzcGVjaWZpYyBsYXlvdXQgb2YgdGhlIG5vZGUgCi1kZXNjcmlwdG9yIGVsZW1lbnRzLiAKK2Rlc2NyaXB0b3IgZWxlbWVudHMuIHJlYWRfY29uZl9kYXRhX2xwbSgpIHdpbGwgcmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YQorZm9yIGEgc3BlY2lmaWMgcGF0aC4KIAotVGhlIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCB3aXRoIGFuIGlycSBoYW5kbGVyIGluIHBsYWNlOyB0aGF0IGlzLAorVGhlIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBkZXZpY2UgYWxyZWFkeSBlbmFibGVkOyB0aGF0IGlzLAogYXQgZWFybGllc3QgZHVyaW5nIHNldF9vbmxpbmUoKSBwcm9jZXNzaW5nLgogCiBUaGUgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBlbmFibGVkIG9yIGRpc2FibGVkLCBidXQgdGhlIGRldmljZSBtdXN0IG5vdCBiZQogbG9ja2VkCiAKLWludCByZWFkX2NvbmZfZGF0YShzdHJ1Y3QgY2N3X2RldmljZSwgdm9pZCAqKmJ1ZmZlciwgaW50ICpsZW5ndGgsIF9fdTggbHBtKTsKK2ludCByZWFkX2NvbmZfZGF0YShzdHJ1Y3QgY2N3X2RldmljZSwgdm9pZCAqKmJ1ZmZlciwgaW50ICpsZW5ndGgpOworaW50IHJlYWRfY29uZl9kYXRhX2xwbShzdHJ1Y3QgY2N3X2RldmljZSwgdm9pZCAqKmJ1ZmZlciwgaW50ICpsZW5ndGgsIF9fdTggbHBtKTsKIAogY2RldiAgIC0gdGhlIGNjd19kZXZpY2UgdGhlIGRhdGEgaXMgcmVxdWVzdGVkIGZvci4KIGJ1ZmZlciAtIFBvaW50ZXIgdG8gYSBidWZmZXIgcG9pbnRlci4gVGhlIHJlYWRfY29uZl9kYXRhKCkgcm91dGluZQpAQCAtMjYzLDYgKzI2OSwyNSBAQAogCQkgICAgIHVuc2lnbmVkIGxvbmcgaW50cGFybSwKIAkJICAgICBfX3U4IGxwbSwKIAkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2ludCBjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCisJCQkgICAgIHN0cnVjdCBjY3cxICpjcGEsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW50cGFybSwKKwkJCSAgICAgX191OCBscG0sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgICAgIGludCBleHBpcmVzKTsKK2ludCBjY3dfZGV2aWNlX3N0YXJ0X2tleShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKKwkJCSBzdHJ1Y3QgY2N3MSAqY3BhLAorCQkJIHVuc2lnbmVkIGxvbmcgaW50cGFybSwKKwkJCSBfX3U4IGxwbSwKKwkJCSBfX3U4IGtleSwKKwkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2ludCBjY3dfZGV2aWNlX3N0YXJ0X2tleV90aW1lb3V0KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkJCSBzdHJ1Y3QgY2N3MSAqY3BhLAorCQkJCSB1bnNpZ25lZCBsb25nIGludHBhcm0sCisJCQkJIF9fdTggbHBtLAorCQkJCSBfX3U4IGtleSwKKwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkgaW50IGV4cGlyZXMpOwogCiBjZGV2ICAgICAgICAgOiBjY3dfZGV2aWNlIHRoZSBJL08gaXMgZGVzdGluZWQgZm9yCiBjcGEgICAgICAgICAgOiBsb2dpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgY2hhbm5lbCBwcm9ncmFtCkBAIC0yNzIsNyArMjk3LDEyIEBACiAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIEkvTyByZXF1ZXN0LgogbHBtICAgICAgICAgIDogZGVmaW5lcyB0aGUgY2hhbm5lbCBwYXRoIHRvIGJlIHVzZWQgZm9yIGEgc3BlY2lmaWMgSS9PCiAgICAgICAgICAgICAgICByZXF1ZXN0LiBBIHZhbHVlIG9mIDAgd2lsbCBtYWtlIGNpbyB1c2UgdGhlIG9wbS4KK2tleQkgICAgIDogdGhlIHN0b3JhZ2Uga2V5IHRvIHVzZSBmb3IgdGhlIEkvTyAodXNlZnVsIGZvciBvcGVyYXRpbmcgb24gYQorCSAgICAgICBzdG9yYWdlIHdpdGggYSBzdG9yYWdlIGtleSAhPSBkZWZhdWx0IGtleSkKIGZsYWcgICAgICAgICA6IGRlZmluZXMgdGhlIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgZm9yIEkvTyBwcm9jZXNzaW5nCitleHBpcmVzICAgICAgOiB0aW1lb3V0IHZhbHVlIGluIGppZmZpZXMuIFRoZSBjb21tb24gSS9PIGxheWVyIHdpbGwgdGVybWluYXRlCisJICAgICAgIHRoZSBydW5uaW5nIHByb2dyYW0gYWZ0ZXIgdGhpcyBhbmQgY2FsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkgICAgICAgd2l0aCBFUlJfUFRSKC1FVElNRURPVVQpIGFzIGlyYi4KIAogUG9zc2libGUgZmxhZyB2YWx1ZXMgYXJlIDoKIApAQCAtMzI3LDYgKzM1NywxMyBAQAogaW50ZXJydXB0IHdpbGwgYmUgcHJlc2VudGVkIHRvIGluZGljYXRlIEkvTyBjb21wbGV0aW9uIGFzIHRoZSBJL08gcmVxdWVzdCB3YXMKIG5ldmVyIHN0YXJ0ZWQsIGV2ZW4gdGhvdWdoIGNjd19kZXZpY2Vfc3RhcnQoKSByZXR1cm5lZCB3aXRoIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KIAorVGhlIGlyYiBtYXkgY29udGFpbiBhbiBlcnJvciB2YWx1ZSwgYW5kIHRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBjaGVjayBmb3IgdGhpcworZmlyc3Q6CisKKy1FVElNRURPVVQ6IHRoZSBjb21tb24gSS9PIGxheWVyIHRlcm1pbmF0ZWQgdGhlIHJlcXVlc3QgYWZ0ZXIgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgdGltZW91dCB2YWx1ZQorLUVJTzogICAgICAgdGhlIGNvbW1vbiBJL08gbGF5ZXIgdGVybWluYXRlZCB0aGUgcmVxdWVzdCBkdWUgdG8gYW4gZXJyb3Igc3RhdGUKKwogSWYgdGhlIGNvbmN1cnJlbnQgc2Vuc2UgZmxhZyBpbiB0aGUgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIGlyYiBpcyBzZXQsIHRoZQogZmllbGQgaXJiLT5zY3N3LmNvdW50IGRlc2NyaWJlcyB0aGUgbnVtZXIgb2YgZGV2aWNlIHNwZWNpZmljIHNlbnNlIGJ5dGVzCiBhdmFpbGFibGUgaW4gdGhlIGV4dGVuZGVkIGNvbnRyb2wgd29yZCBpcmItPnNjc3cuZWN3WzBdLiBObyBkZXZpY2Ugc2Vuc2luZyBieQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA0MzMzYjY5Li5mMzg0YTk3IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjExMyw2ICsyMTEzLDEzIEBACiBMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKIFM6CU1haW50YWluZWQKIAorVFBNIERFVklDRSBEUklWRVIKK1A6CUt5bGVuZSBIYWxsCitNOglramhhbGxAdXMuaWJtLmNvbQorVzoJaHR0cDovL3RwbWRkLnNvdXJjZWZvcmdlLm5ldAorTDoJdHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitTOglNYWludGFpbmVkCisKIFVsdHJhU1BBUkMgKHNwYXJjNjQpOgogUDoJRGF2aWQgUy4gTWlsbGVyCiBNOglkYXZlbUBkYXZlbWxvZnQubmV0CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDhkYTNhMzAuLmY3ZWI1NTggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0zMzIsOSArMzMyLDcgQEAKIFBFUkwJCT0gcGVybAogQ0hFQ0sJCT0gc3BhcnNlCiAKLU5PU1RESU5DX0ZMQUdTICA9IC1ub3N0ZGluYyAtaXN5c3RlbSAkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZSkKIENIRUNLRkxBR1MgICAgIDo9IC1EX19saW51eF9fIC1EbGludXggLURfX1NURENfXyAtRHVuaXggLURfX3VuaXhfXwotQ0hFQ0tGTEFHUyAgICAgKz0gJChOT1NURElOQ19GTEFHUykKIE1PREZMQUdTCT0gLURNT0RVTEUKIENGTEFHU19NT0RVTEUgICA9ICQoTU9ERkxBR1MpCiBBRkxBR1NfTU9EVUxFICAgPSAkKE1PREZMQUdTKQpAQCAtNTMxLDYgKzUyOSwxMCBAQAogCiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKEFSQ0gpL01ha2VmaWxlCiAKKyMgYXJjaCBNYWtlZmlsZSBtYXkgb3ZlcnJpZGUgQ0Mgc28ga2VlcCB0aGlzIGFmdGVyIGFyY2ggTWFrZWZpbGUgaXMgaW5jbHVkZWQKK05PU1RESU5DX0ZMQUdTIDo9IC1ub3N0ZGluYyAtaXN5c3RlbSAkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZSkKK0NIRUNLRkxBR1MgICAgICs9ICQoTk9TVERJTkNfRkxBR1MpCisKICMgd2FybiBhYm91dCBDOTkgZGVjbGFyYXRpb24gYWZ0ZXIgc3RhdGVtZW50CiBDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCwpCiAKQEAgLTExODgsOCArMTE5MCw4IEBACiBxdWlldF9jbWRfdGFncyA9IE1BS0UgICAkQAogZGVmaW5lIGNtZF90YWdzCiAJcm0gLWYgJEA7IFwKLQlDVEFHU0Y9YGN0YWdzIC0tdmVyc2lvbiB8IGdyZXAgLWkgZXh1YmVyYW50ID4vZGV2L251bGwgJiYgZWNobyAiLUkgX19pbml0ZGF0YSxfX2V4aXRkYXRhLEVYUE9SVF9TWU1CT0wsRVhQT1JUX1NZTUJPTF9HUEwiYDsgXAotCSQoYWxsLXNvdXJjZXMpIHwgeGFyZ3MgY3RhZ3MgJCRDVEFHU0YgLWEgLS1leHRyYT0rZgorCUNUQUdTRj1gY3RhZ3MgLS12ZXJzaW9uIHwgZ3JlcCAtaSBleHViZXJhbnQgPi9kZXYvbnVsbCAmJiBlY2hvICItSSBfX2luaXRkYXRhLF9fZXhpdGRhdGEsRVhQT1JUX1NZTUJPTCxFWFBPUlRfU1lNQk9MX0dQTCAtLWV4dHJhPStmImA7IFwKKwkkKGFsbC1zb3VyY2VzKSB8IHhhcmdzIGN0YWdzICQkQ1RBR1NGIC1hCiBlbmRlZgogCiBUQUdTOiBGT1JDRQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IGI1ZDBmZDIuLjY0ZTQ1MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKQEAgLTQ1NywyMiArNDU3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotYXNtbGlua2FnZSBsb25nCi1vc2Zfc2htYXQoaW50IHNobWlkLCB2b2lkIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZykKLXsKLQl1bnNpZ25lZCBsb25nIHJhZGRyOwotCWxvbmcgZXJyOwotCi0JZXJyID0gZG9fc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZywgJnJhZGRyKTsKLQotCS8qCi0JICogVGhpcyB3b3JrcyBiZWNhdXNlIGFsbCB1c2VyLWxldmVsIGFkZHJlc3NlcyBhcmUKLQkgKiBub24tbmVnYXRpdmUgbG9uZ3MhCi0JICovCi0JcmV0dXJuIGVyciA/IGVyciA6IChsb25nKXJhZGRyOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHN0dWZmIHNob3VsZCBtb3ZlIGludG8gYSBoZWFkZXIgZmlsZSBzaG91bGQgaXQgZXZlcgogICogYmUgbGFiZWxlZCAib2ZmaWNpYWxseSBzdXBwb3J0ZWQuIiAgUmlnaHQgbm93LCB0aGVyZSBpcyBqdXN0IGVub3VnaApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYwppbmRleCBkMDA1ODMxLi5iYmQzNzUzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTMzNSw3ICszMzYsNyBAQAogCQkvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6ICAgIC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0zNjUsNyArMzY2LDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6ICAvKiBleGVjdXRlIHNpbmdsZSBpbnN0cnVjdGlvbi4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCS8qIE1hcmsgc2luZ2xlIHN0ZXBwaW5nLiAgKi8KIAkJY2hpbGQtPnRocmVhZF9pbmZvLT5icHRfbnNhdmVkID0gLTE7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggMzg2NGIzMy4uMDUyMTIwOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJLnF1YWQgc3lzX3NlbW9wCiAJLnF1YWQgb3NmX3V0c25hbWUKIAkucXVhZCBzeXNfbGNob3duCi0JLnF1YWQgb3NmX3NobWF0CisJLnF1YWQgc3lzX3NobWF0CiAJLnF1YWQgc3lzX3NobWN0bAkJCS8qIDIxMCAqLwogCS5xdWFkIHN5c19zaG1kdAogCS5xdWFkIHN5c19zaG1nZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMgYi9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCmluZGV4IGMzOTdlNzEuLjcyYjAzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYwpAQCAtMTQxLDEwICsxNDEsMTAgQEAKIAluZXh0LT50bV9zZWMgPSBhbHJtLT50bV9zZWM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfb3BzICpvcHMsIHN0cnVjdCBydGNfdGltZSAqdG0pCitzdGF0aWMgaW5saW5lIGludCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfb3BzICpvcHMsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJbWVtc2V0KHRtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7Ci0Jb3BzLT5yZWFkX3RpbWUodG0pOworCXJldHVybiBvcHMtPnJlYWRfdGltZSh0bSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0Y19zZXRfdGltZShzdHJ1Y3QgcnRjX29wcyAqb3BzLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtMTYzLDggKzE2Myw3IEBACiAJaW50IHJldCA9IC1FSU5WQUw7CiAJaWYgKG9wcy0+cmVhZF9hbGFybSkgewogCQltZW1zZXQoYWxybSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfd2thbHJtKSk7Ci0JCW9wcy0+cmVhZF9hbGFybShhbHJtKTsKLQkJcmV0ID0gMDsKKwkJcmV0ID0gb3BzLT5yZWFkX2FsYXJtKGFscm0pOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjgzLDcgKzI4Miw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBSVENfUkRfVElNRToKLQkJcnRjX3JlYWRfdGltZShvcHMsICZ0bSk7CisJCXJldCA9IHJ0Y19yZWFkX3RpbWUob3BzLCAmdG0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CiAJCXJldCA9IGNvcHlfdG9fdXNlcih1YXJnLCAmdG0sIHNpemVvZih0bSkpOwogCQlpZiAocmV0KQogCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTQyNCwxNSArNDI1LDE1IEBACiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCWNoYXIgKnAgPSBwYWdlOwogCi0JcnRjX3JlYWRfdGltZShvcHMsICZ0bSk7Ci0KLQlwICs9IHNwcmludGYocCwKLQkJInJ0Y190aW1lXHQ6ICUwMmQ6JTAyZDolMDJkXG4iCi0JCSJydGNfZGF0ZVx0OiAlMDRkLSUwMmQtJTAyZFxuIgotCQkicnRjX2Vwb2NoXHQ6ICUwNGx1XG4iLAotCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYywKLQkJdG0udG1feWVhciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCi0JCXJ0Y19lcG9jaCk7CisJaWYgKHJ0Y19yZWFkX3RpbWUob3BzLCAmdG0pID09IDApIHsKKwkJcCArPSBzcHJpbnRmKHAsCisJCQkicnRjX3RpbWVcdDogJTAyZDolMDJkOiUwMmRcbiIKKwkJCSJydGNfZGF0ZVx0OiAlMDRkLSUwMmQtJTAyZFxuIgorCQkJInJ0Y19lcG9jaFx0OiAlMDRsdVxuIiwKKwkJCXRtLnRtX2hvdXIsIHRtLnRtX21pbiwgdG0udG1fc2VjLAorCQkJdG0udG1feWVhciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCisJCQlydGNfZXBvY2gpOworCX0KIAogCWlmIChydGNfcmVhZF9hbGFybShvcHMsICZhbHJtKSA9PSAwKSB7CiAJCXAgKz0gc3ByaW50ZihwLCAiYWxybV90aW1lXHQ6ICIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwppbmRleCBkMzZmOTkxLi43YmUzNTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZwpAQCAtMTMzLDcgKzEzMyw3IEBACiAjCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDk2MDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBtZW09NjRNQDB4MCBwY2k9ZmlybXdhcmUiCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw5NjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAiCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggMmE1YzNmZS4uMDgwZGY5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0yNjksNiArMjY5LDEyIEBACiAJYWRkCXI1LCBzcCwgI1NfUEMKIAlsZG1pYQlyNywge3IyIC0gcjR9CQkJQCBHZXQgVVNSIHBjLCBjcHNyCiAKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CisJQCBtYWtlIHN1cmUgb3VyIHVzZXIgc3BhY2UgYXRvbWljIGhlbHBlciBpcyBhYm9ydGVkCisJY21wCXIyLCAjVklSVF9PRkZTRVQKKwliaWNocwlyMywgcjMsICNQU1JfWl9CSVQKKyNlbmRpZgorCiAJQAogCUAgV2UgYXJlIG5vdyByZWFkeSB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgYmxhbmtzIG9uIHRoZSBzdGFjazoKIAlACkBAIC00OTksOCArNTA1LDEyIEBACiAJbXJhCXI0LCByNSwgYWNjMAogCXN0bWlhICAgaXAsIHtyNCwgcjV9CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEFTX1RMU19SRUcKKwltY3IJcDE1LCAwLCByMywgYzEzLCBjMCwgMwkJQCBzZXQgVExTIHJlZ2lzdGVyCisjZWxzZQogCW1vdglyNCwgIzB4ZmZmZjBmZmYKLQlzdHIJcjMsIFtyNCwgIy0zXQkJCUAgU2V0IFRMUyBwdHIKKwlzdHIJcjMsIFtyNCwgIy0xNV0JCQlAIFRMUyB2YWwgYXQgMHhmZmZmMGZmMAorI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBTZXQgZG9tYWluIHJlZ2lzdGVyCiAjaWZkZWYgQ09ORklHX1ZGUAogCUAgQWx3YXlzIGRpc2FibGUgVkZQIHNvIHdlIGNhbiBsYXppbHkgc2F2ZS9yZXN0b3JlIHRoZSBvbGQKQEAgLTUxOSw2ICs1MjksMjA3IEBACiAJbGRtaWIJcjIsIHtyNCAtIHNsLCBmcCwgc3AsIHBjfQlAIExvYWQgYWxsIHJlZ3Mgc2F2ZWQgcHJldmlvdXNseQogCiAJX19JTklUCisKKy8qCisgKiBVc2VyIGhlbHBlcnMuCisgKgorICogVGhlc2UgYXJlIHNlZ21lbnQgb2Yga2VybmVsIHByb3ZpZGVkIHVzZXIgY29kZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlCisgKiBhdCBhIGZpeGVkIGFkZHJlc3MgaW4ga2VybmVsIG1lbW9yeS4gIFRoaXMgaXMgdXNlZCB0byBwcm92aWRlIHVzZXIgc3BhY2UKKyAqIHdpdGggc29tZSBvcGVyYXRpb25zIHdoaWNoIHJlcXVpcmUga2VybmVsIGhlbHAgYmVjYXVzZSBvZiB1bmltcGxlbWVudGVkCisgKiBuYXRpdmUgZmVhdHVyZSBhbmQvb3IgaW5zdHJ1Y3Rpb25zIGluIG1hbnkgQVJNIENQVXMuIFRoZSBpZGVhIGlzIGZvcgorICogdGhpcyBjb2RlIHRvIGJlIGV4ZWN1dGVkIGRpcmVjdGx5IGluIHVzZXIgbW9kZSBmb3IgYmVzdCBlZmZpY2llbmN5IGJ1dAorICogd2hpY2ggaXMgdG9vIGludGltYXRlIHdpdGggdGhlIGtlcm5lbCBjb3VudGVyIHBhcnQgdG8gYmUgbGVmdCB0byB1c2VyCisgKiBsaWJyYXJpZXMuICBJbiBmYWN0IHRoaXMgY29kZSBtaWdodCBldmVuIGRpZmZlciBmcm9tIG9uZSBDUFUgdG8gYW5vdGhlcgorICogZGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFibGUgIGluc3RydWN0aW9uIHNldCBhbmQgcmVzdHJpY3Rpb25zIGxpa2Ugb24KKyAqIFNNUCBzeXN0ZW1zLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBrZXJuZWwgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZQorICogdGhpcyBjb2RlIGFzIG5lZWRlZCB3aXRob3V0IHdhcm5pbmcuIE9ubHkgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlaXIKKyAqIHJlc3VsdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLgorICoKKyAqIEVhY2ggc2VnbWVudCBpcyAzMi1ieXRlIGFsaWduZWQgYW5kIHdpbGwgYmUgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUgaGlnaAorICogdmVjdG9yIHBhZ2UuICBOZXcgc2VnbWVudHMgKGlmIGV2ZXIgbmVlZGVkKSBtdXN0IGJlIGFkZGVkIGluIGZyb250IG9mCisgKiBleGlzdGluZyBvbmVzLiAgVGhpcyBtZWNoYW5pc20gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgdGhpbmdzIHRoYXQgYXJlCisgKiByZWFsbHkgc21hbGwgYW5kIGp1c3RpZmllZCwgYW5kIG5vdCBiZSBhYnVzZWQgZnJlZWx5LgorICoKKyAqIFVzZXIgc3BhY2UgaXMgZXhwZWN0ZWQgdG8gaW1wbGVtZW50IHRob3NlIHRoaW5ncyBpbmxpbmUgd2hlbiBvcHRpbWl6aW5nCisgKiBmb3IgYSBwcm9jZXNzb3IgdGhhdCBoYXMgdGhlIG5lY2Vzc2FyeSBuYXRpdmUgc3VwcG9ydCwgYnV0IG9ubHkgaWYgc3VjaAorICogcmVzdWx0aW5nIGJpbmFyaWVzIGFyZSBhbHJlYWR5IHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgQVJNCisgKiBwcm9jZXNzb3JzIGR1ZSB0byB0aGUgdXNlIG9mIHVuc3VwcG9ydGVkIGluc3RydWN0aW9ucyBvdGhlciB0aGFuIHdoYXQKKyAqIGlzIHByb3ZpZGVkIGhlcmUuICBJbiBvdGhlciB3b3JkcyBkb24ndCBtYWtlIGJpbmFyaWVzIHVuYWJsZSB0byBydW4gb24KKyAqIGVhcmxpZXIgcHJvY2Vzc29ycyBqdXN0IGZvciB0aGUgc2FrZSBvZiBub3QgdXNpbmcgdGhlc2Uga2VybmVsIGhlbHBlcnMKKyAqIGlmIHlvdXIgY29tcGlsZWQgY29kZSBpcyBub3QgZ29pbmcgdG8gdXNlIHRoZSBuZXcgaW5zdHJ1Y3Rpb25zIGZvciBvdGhlcgorICogcHVycG9zZS4KKyAqLworCisJLmFsaWduCTUKKwkuZ2xvYmwJX19rdXNlcl9oZWxwZXJfc3RhcnQKK19fa3VzZXJfaGVscGVyX3N0YXJ0OgorCisvKgorICogUmVmZXJlbmNlIHByb3RvdHlwZToKKyAqCisgKglpbnQgX19rZXJuZWxfY21weGNoZyhpbnQgb2xkdmFsLCBpbnQgbmV3dmFsLCBpbnQgKnB0cikKKyAqCisgKiBJbnB1dDoKKyAqCisgKglyMCA9IG9sZHZhbAorICoJcjEgPSBuZXd2YWwKKyAqCXIyID0gcHRyCisgKglsciA9IHJldHVybiBhZGRyZXNzCisgKgorICogT3V0cHV0OgorICoKKyAqCXIwID0gcmV0dXJuZWQgdmFsdWUgKHplcm8gb3Igbm9uLXplcm8pCisgKglDIGZsYWcgPSBzZXQgaWYgcjAgPT0gMCwgY2xlYXIgaWYgcjAgIT0gMAorICoKKyAqIENsb2JiZXJlZDoKKyAqCisgKglyMywgaXAsIGZsYWdzCisgKgorICogRGVmaW5pdGlvbiBhbmQgdXNlciBzcGFjZSB1c2FnZSBleGFtcGxlOgorICoKKyAqCXR5cGVkZWYgaW50IChfX2tlcm5lbF9jbXB4Y2hnX3QpKGludCBvbGR2YWwsIGludCBuZXd2YWwsIGludCAqcHRyKTsKKyAqCSNkZWZpbmUgX19rZXJuZWxfY21weGNoZyAoKihfX2tlcm5lbF9jbXB4Y2hnX3QgKikweGZmZmYwZmMwKQorICoKKyAqIEF0b21pY2FsbHkgc3RvcmUgbmV3dmFsIGluICpwdHIgaWYgKnB0ciBpcyBlcXVhbCB0byBvbGR2YWwgZm9yIHVzZXIgc3BhY2UuCisgKiBSZXR1cm4gemVybyBpZiAqcHRyIHdhcyBjaGFuZ2VkIG9yIG5vbi16ZXJvIGlmIG5vIGV4Y2hhbmdlIGhhcHBlbmVkLgorICogVGhlIEMgZmxhZyBpcyBhbHNvIHNldCBpZiAqcHRyIHdhcyBjaGFuZ2VkIHRvIGFsbG93IGZvciBhc3NlbWJseQorICogb3B0aW1pemF0aW9uIGluIHRoZSBjYWxsaW5nIGNvZGUuCisgKgorICogRm9yIGV4YW1wbGUsIGEgdXNlciBzcGFjZSBhdG9taWNfYWRkIGltcGxlbWVudGF0aW9uIGNvdWxkIGxvb2sgbGlrZSB0aGlzOgorICoKKyAqICNkZWZpbmUgYXRvbWljX2FkZChwdHIsIHZhbCkgXAorICoJKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50ICpfX3B0ciBhc20oInIyIikgPSAocHRyKTsgXAorICoJICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fcmVzdWx0IGFzbSgicjEiKTsgXAorICoJICAgYXNtIHZvbGF0aWxlICggXAorICoJICAgICAgICIxOiBAIGF0b21pY19hZGRcblx0IiBcCisgKgkgICAgICAgImxkcglyMCwgW3IyXVxuXHQiIFwKKyAqCSAgICAgICAibW92CXIzLCAjMHhmZmZmMGZmZlxuXHQiIFwKKyAqCSAgICAgICAiYWRkCWxyLCBwYywgIzRcblx0IiBcCisgKgkgICAgICAgImFkZAlyMSwgcjAsICUyXG5cdCIgXAorICoJICAgICAgICJhZGQJcGMsIHIzLCAjKDB4ZmZmZjBmYzAgLSAweGZmZmYwZmZmKVxuXHQiIFwKKyAqCSAgICAgICAiYmNjCTFiIiBcCisgKgkgICAgICAgOiAiPSZyIiAoX19yZXN1bHQpIFwKKyAqCSAgICAgICA6ICJyIiAoX19wdHIpLCAicklMIiAodmFsKSBcCisgKgkgICAgICAgOiAicjAiLCJyMyIsImlwIiwibHIiLCJjYyIsIm1lbW9yeSIgKTsgXAorICoJICAgX19yZXN1bHQ7IH0pCisgKi8KKworX19rdXNlcl9jbXB4Y2hnOgkJCQlAIDB4ZmZmZjBmYzAKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKKworI2lmZGVmIENPTkZJR19TTVAgIC8qIHNhbml0eSBjaGVjayAqLworI2Vycm9yICJDT05GSUdfU01QIG9uIGEgbWFjaGluZSBzdXBwb3J0aW5nIHByZS1BUk12NiBwcm9jZXNzb3JzPyIKKyNlbmRpZgorCisJLyoKKwkgKiBUaGVvcnkgb2Ygb3BlcmF0aW9uOgorCSAqCisJICogV2Ugc2V0IHRoZSBaIGZsYWcgYmVmb3JlIGxvYWRpbmcgb2xkdmFsLiBJZiBldmVyIGFuIGV4Y2VwdGlvbgorCSAqIG9jY3VycyB3ZSBjYW4gbm90IGJlIHN1cmUgdGhlIGxvYWRlZCB2YWx1ZSB3aWxsIHN0aWxsIGJlIHRoZSBzYW1lCisJICogd2hlbiB0aGUgZXhjZXB0aW9uIHJldHVybnMsIHRoZXJlZm9yZSB0aGUgdXNlciBleGNlcHRpb24gaGFuZGxlcgorCSAqIHdpbGwgY2xlYXIgdGhlIFogZmxhZyB3aGVuZXZlciB0aGUgaW50ZXJydXB0ZWQgdXNlciBjb2RlIHdhcworCSAqIGFjdHVhbGx5IGZyb20gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlIChzZWUgdGhlIHVzcl9lbnRyeSBtYWNybykuCisJICoKKwkgKiBUaGUgcG9zdC1pbmNyZW1lbnQgb24gdGhlIHN0ciBpcyB1c2VkIHRvIHByZXZlbnQgYSByYWNlIHdpdGggYW4KKwkgKiBleGNlcHRpb24gaGFwcGVuaW5nIGp1c3QgYWZ0ZXIgdGhlIHN0ciBpbnN0cnVjdGlvbiB3aGljaCB3b3VsZAorCSAqIGNsZWFyIHRoZSBaIGZsYWcgYWx0aG91Z2ggdGhlIGV4Y2hhbmdlIHdhcyBkb25lLgorCSAqLworCXRlcQlpcCwgaXAJCQlAIHNldCBaIGZsYWcKKwlsZHIJaXAsIFtyMl0JCUAgbG9hZCBjdXJyZW50IHZhbAorCWFkZAlyMywgcjIsICMxCQlAIHByZXBhcmUgc3RvcmUgcHRyCisJdGVxZXEJaXAsIHIwCQkJQCBjb21wYXJlIHdpdGggb2xkdmFsIGlmIHN0aWxsIGFsbG93ZWQKKwlzdHJlcQlyMSwgW3IzLCAjLTFdIQkJQCBzdG9yZSBuZXd2YWwgaWYgc3RpbGwgYWxsb3dlZAorCXN1YnMJcjAsIHIyLCByMwkJQCBpZiByMiA9PSByMyB0aGUgc3RyIG9jY3VyZWQKKwltb3YJcGMsIGxyCisKKyNlbHNlCisKKwlsZHJleAlyMywgW3IyXQorCXN1YnMJcjMsIHIzLCByMAorCXN0cmV4ZXEJcjMsIHIxLCBbcjJdCisJcnNicwlyMCwgcjMsICMwCisJbW92CXBjLCBscgorCisjZW5kaWYKKworCS5hbGlnbgk1CisKKy8qCisgKiBSZWZlcmVuY2UgcHJvdG90eXBlOgorICoKKyAqCWludCBfX2tlcm5lbF9nZXRfdGxzKHZvaWQpCisgKgorICogSW5wdXQ6CisgKgorICoJbHIgPSByZXR1cm4gYWRkcmVzcworICoKKyAqIE91dHB1dDoKKyAqCisgKglyMCA9IFRMUyB2YWx1ZQorICoKKyAqIENsb2JiZXJlZDoKKyAqCisgKgl0aGUgWiBmbGFnIG1pZ2h0IGJlIGxvc3QKKyAqCisgKiBEZWZpbml0aW9uIGFuZCB1c2VyIHNwYWNlIHVzYWdlIGV4YW1wbGU6CisgKgorICoJdHlwZWRlZiBpbnQgKF9fa2VybmVsX2dldF90bHNfdCkodm9pZCk7CisgKgkjZGVmaW5lIF9fa2VybmVsX2dldF90bHMgKCooX19rZXJuZWxfZ2V0X3Rsc190ICopMHhmZmZmMGZlMCkKKyAqCisgKiBHZXQgdGhlIFRMUyB2YWx1ZSBhcyBwcmV2aW91c2x5IHNldCB2aWEgdGhlIF9fQVJNX05SX3NldF90bHMgc3lzY2FsbC4KKyAqCisgKiBUaGlzIGNvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKKyAqCisgKiAjZGVmaW5lIF9fa2VybmVsX2dldF90bHMoKSBcCisgKgkoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192YWwgYXNtKCJyMCIpOyBcCisgKiAgICAgICAgIGFzbSggIm1vdiByMCwgIzB4ZmZmZjBmZmY7IG1vdiBsciwgcGM7IHN1YiBwYywgcjAsICMzMSIgXAorICoJICAgICAgICA6ICI9ciIgKF9fdmFsKSA6IDogImxyIiwiY2MiICk7IFwKKyAqCSAgIF9fdmFsOyB9KQorICovCisKK19fa3VzZXJfZ2V0X3RsczoJCQkJQCAweGZmZmYwZmUwCisKKyNpZm5kZWYgQ09ORklHX0hBU19UTFNfUkVHCisKKyNpZmRlZiBDT05GSUdfU01QICAvKiBzYW5pdHkgY2hlY2sgKi8KKyNlcnJvciAiQ09ORklHX1NNUCB3aXRob3V0IENPTkZJR19IQVNfVExTX1JFRyBpcyB3cm9uZyIKKyNlbmRpZgorCisJbGRyCXIwLCBbcGMsICMoMTYgLSA4KV0JCUAgVExTIHN0b3JlZCBhdCAweGZmZmYwZmYwCisJbW92CXBjLCBscgorCisjZWxzZQorCisJbXJjCXAxNSwgMCwgcjAsIGMxMywgYzAsIDMJCUAgcmVhZCBUTFMgcmVnaXN0ZXIKKwltb3YJcGMsIGxyCisKKyNlbmRpZgorCisJLnJlcAk1CisJLndvcmQJMAkJCUAgcGFkIHVwIHRvIF9fa3VzZXJfaGVscGVyX3ZlcnNpb24KKwkuZW5kcgorCisvKgorICogUmVmZXJlbmNlIGRlY2xhcmF0aW9uOgorICoKKyAqCWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfaGVscGVyX3ZlcnNpb247CisgKgorICogRGVmaW5pdGlvbiBhbmQgdXNlciBzcGFjZSB1c2FnZSBleGFtcGxlOgorICoKKyAqCSNkZWZpbmUgX19rZXJuZWxfaGVscGVyX3ZlcnNpb24gKCoodW5zaWduZWQgaW50ICopMHhmZmZmMGZmYykKKyAqCisgKiBVc2VyIHNwYWNlIG1heSByZWFkIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBjdXJlbnQgbnVtYmVyIG9mIGhlbHBlcnMKKyAqIGF2YWlsYWJsZS4KKyAqLworCitfX2t1c2VyX2hlbHBlcl92ZXJzaW9uOgkJCQlAIDB4ZmZmZjBmZmMKKwkud29yZAkoKF9fa3VzZXJfaGVscGVyX2VuZCAtIF9fa3VzZXJfaGVscGVyX3N0YXJ0KSA+PiA1KQorCisJLmdsb2JsCV9fa3VzZXJfaGVscGVyX2VuZAorX19rdXNlcl9oZWxwZXJfZW5kOgorCisKIC8qCiAgKiBWZWN0b3Igc3R1YnMuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCmluZGV4IGVmZDdhMzQuLmNkOTliODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC02OTMsNyArNjk0LDcgQEAKIAkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKIAkJY2FzZSBQVFJBQ0VfQ09OVDoKIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtNzI4LDcgKzcyOSw3IEBACiAJCSAqLwogCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQljaGlsZC0+cHRyYWNlIHw9IFBUX1NJTkdMRVNURVA7CiAJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCmluZGV4IDdiYTYzNDIuLmVmMzI1NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYwpAQCAtMjI3LDE4ICsyMjcsNiBAQAogCX0KIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLAotCQkJICB1bnNpZ25lZCBsb25nIF9fdXNlciAqYWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQlsb25nIGVycjsKLQotCWVyciA9IGRvX3NobWF0KHNobWlkLCBzaG1hZGRyLCBzaG1mbGcsICZyZXQpOwotCWlmIChlcnIgPT0gMCkKLQkJZXJyID0gcHV0X3VzZXIocmV0LCBhZGRyKTsKLQlyZXR1cm4gZXJyOwotfQotCiAvKiBGb3JrIGEgbmV3IHRhc2sgLSB0aGlzIGNyZWF0ZXMgYSBuZXcgcHJvZ3JhbSB0aHJlYWQuCiAgKiBUaGlzIGlzIGNhbGxlZCBpbmRpcmVjdGx5IHZpYSBhIHNtYWxsIHdyYXBwZXIKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCAwMDc4YWViLi4zYTAwMWZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtNDUwLDEzICs0NTAsMTcgQEAKIAogCWNhc2UgTlIoc2V0X3Rscyk6CiAJCXRocmVhZC0+dHBfdmFsdWUgPSByZWdzLT5BUk1fcjA7CisjaWZkZWYgQ09ORklHX0hBU19UTFNfUkVHCisJCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjMTMsIGMwLCAzIiA6IDogInIiIChyZWdzLT5BUk1fcjApICk7CisjZWxzZQogCQkvKgotCQkgKiBPdXIgdXNlciBhY2Nlc3NpYmxlIFRMUyBwdHIgaXMgbG9jYXRlZCBhdCAweGZmZmYwZmZjLgotCQkgKiBPbiBTTVAgcmVhZCBhY2Nlc3MgdG8gdGhpcyBhZGRyZXNzIG11c3QgcmFpc2UgYSBmYXVsdAotCQkgKiBhbmQgYmUgZW11bGF0ZWQgZnJvbSB0aGUgZGF0YSBhYm9ydCBoYW5kbGVyLgotCQkgKiBtCisJCSAqIFVzZXIgc3BhY2UgbXVzdCBuZXZlciB0cnkgdG8gYWNjZXNzIHRoaXMgZGlyZWN0bHkuCisJCSAqIEV4cGVjdCB5b3VyIGFwcCB0byBicmVhayBldmVudHVhbGx5IGlmIHlvdSBkbyBzby4KKwkJICogVGhlIHVzZXIgaGVscGVyIGF0IDB4ZmZmZjBmZTAgbXVzdCBiZSB1c2VkIGluc3RlYWQuCisJCSAqIChzZWUgZW50cnktYXJtdi5TIGZvciBkZXRhaWxzKQogCQkgKi8KLQkJKigodW5zaWduZWQgbG9uZyAqKTB4ZmZmZjBmZmMpID0gdGhyZWFkLT50cF92YWx1ZTsKKwkJKigodW5zaWduZWQgaW50ICopMHhmZmZmMGZmMCkgPSByZWdzLT5BUk1fcjA7CisjZW5kaWYKIAkJcmV0dXJuIDA7CiAKIAlkZWZhdWx0OgpAQCAtNDkzLDYgKzQ5Nyw0MSBAQAogCXJldHVybiAwOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjYpICYmICFkZWZpbmVkKENPTkZJR19IQVNfVExTX1JFRykKKworLyoKKyAqIFdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24gYW4gQVJNdjYrIHByb2Nlc3NvciB3aGljaCBzaG91bGQgaGF2ZSB0aGUgVExTCisgKiByZWdpc3RlciwgYnV0IGZvciBzb21lIHJlYXNvbiB3ZSBjYW4ndCB1c2UgaXQgYW5kIGhhdmUgdG8gZW11bGF0ZSBpdC4KKyAqLworCitzdGF0aWMgaW50IGdldF90cF90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zdHIpCit7CisJaW50IHJlZyA9IChpbnN0ciA+PiAxMikgJiAxNTsKKwlpZiAocmVnID09IDE1KQorCQlyZXR1cm4gMTsKKwlyZWdzLT51cmVnc1tyZWddID0gY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZTsKKwlyZWdzLT5BUk1fcGMgKz0gNDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1bmRlZl9ob29rIGFybV9tcmNfaG9vayA9IHsKKwkuaW5zdHJfbWFzawk9IDB4MGZmZjBmZmYsCisJLmluc3RyX3ZhbAk9IDB4MGUxZDBmNzAsCisJLmNwc3JfbWFzawk9IFBTUl9UX0JJVCwKKwkuY3Bzcl92YWwJPSAwLAorCS5mbgkJPSBnZXRfdHBfdHJhcCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFybV9tcmNfaG9va19pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfdW5kZWZfaG9vaygmYXJtX21yY19ob29rKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChhcm1fbXJjX2hvb2tfaW5pdCk7CisKKyNlbmRpZgorCiB2b2lkIF9fYmFkX3hjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCBpbnQgc2l6ZSkKIHsKIAlwcmludGsoInhjaGc6IGJhZCBkYXRhIHNpemU6IHBjIDB4JXAsIHB0ciAweCVwLCBzaXplICVkXG4iLApAQCAtNTgwLDE0ICs2MTksMTcgQEAKIHsKIAlleHRlcm4gY2hhciBfX3N0dWJzX3N0YXJ0W10sIF9fc3R1YnNfZW5kW107CiAJZXh0ZXJuIGNoYXIgX192ZWN0b3JzX3N0YXJ0W10sIF9fdmVjdG9yc19lbmRbXTsKKwlleHRlcm4gY2hhciBfX2t1c2VyX2hlbHBlcl9zdGFydFtdLCBfX2t1c2VyX2hlbHBlcl9lbmRbXTsKKwlpbnQga3VzZXJfc3ogPSBfX2t1c2VyX2hlbHBlcl9lbmQgLSBfX2t1c2VyX2hlbHBlcl9zdGFydDsKIAogCS8qCi0JICogQ29weSB0aGUgdmVjdG9ycyBhbmQgc3R1YnMgKGluIGVudHJ5LWFybXYuUykgaW50byB0aGUKLQkgKiB2ZWN0b3IgcGFnZSwgbWFwcGVkIGF0IDB4ZmZmZjAwMDAsIGFuZCBlbnN1cmUgdGhlc2UgYXJlCi0JICogdmlzaWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorCSAqIENvcHkgdGhlIHZlY3RvcnMsIHN0dWJzIGFuZCBrdXNlciBoZWxwZXJzIChpbiBlbnRyeS1hcm12LlMpCisJICogaW50byB0aGUgdmVjdG9yIHBhZ2UsIG1hcHBlZCBhdCAweGZmZmYwMDAwLCBhbmQgZW5zdXJlIHRoZXNlCisJICogYXJlIHZpc2libGUgdG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KIAkgKi8KIAltZW1jcHkoKHZvaWQgKikweGZmZmYwMDAwLCBfX3ZlY3RvcnNfc3RhcnQsIF9fdmVjdG9yc19lbmQgLSBfX3ZlY3RvcnNfc3RhcnQpOwogCW1lbWNweSgodm9pZCAqKTB4ZmZmZjAyMDAsIF9fc3R1YnNfc3RhcnQsIF9fc3R1YnNfZW5kIC0gX19zdHVic19zdGFydCk7CisJbWVtY3B5KCh2b2lkICopMHhmZmZmMTAwMCAtIGt1c2VyX3N6LCBfX2t1c2VyX2hlbHBlcl9zdGFydCwga3VzZXJfc3opOwogCWZsdXNoX2ljYWNoZV9yYW5nZSgweGZmZmYwMDAwLCAweGZmZmYwMDAwICsgUEFHRV9TSVpFKTsKIAltb2RpZnlfZG9tYWluKERPTUFJTl9VU0VSLCBET01BSU5fQ0xJRU5UKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCmluZGV4IDY4ZTE1YzMuLjNiOTQ4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtNDIwLDcgKzQyMCwyMiBAQAogICovCiBzdGF0aWMgdm9pZCBjcF9jbGNkX2VuYWJsZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCiB7Ci0JY21fY29udHJvbChDTV9DVFJMX0xDRE1VWFNFTF9NQVNLLCBDTV9DVFJMX0xDRE1VWFNFTF9WR0EpOworCXUzMiB2YWw7CisKKwlpZiAoZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA8PSA4KQorCQl2YWwgPSBDTV9DVFJMX0xDRE1VWFNFTF9WR0FfODQyMUJQUDsKKwllbHNlIGlmIChmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsIDw9IDE2KQorCQl2YWwgPSBDTV9DVFJMX0xDRE1VWFNFTF9WR0FfMTZCUFA7CisJZWxzZQorCQl2YWwgPSAwOyAvKiBubyBpZGVhIGZvciB0aGlzLCBkb24ndCB0cnVzdCB0aGUgZG9jcyAqLworCisJY21fY29udHJvbChDTV9DVFJMX0xDRE1VWFNFTF9NQVNLfAorCQkgICBDTV9DVFJMX0xDREVOMHwKKwkJICAgQ01fQ1RSTF9MQ0RFTjF8CisJCSAgIENNX0NUUkxfU1RBVElDMXwKKwkJICAgQ01fQ1RSTF9TVEFUSUMyfAorCQkgICBDTV9DVFJMX1NUQVRJQ3wKKwkJICAgQ01fQ1RSTF9uMjRCSVRFTiwgdmFsKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJhbWVzaXplID0gU1pfMU07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYwppbmRleCAyMDcyOWRlLi4xYTg0NGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci90aW1lLmMKQEAgLTQwLDI1ICs0MCwzMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBydGNfcmVhZF9hbGFybShzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKK3N0YXRpYyBpbnQgcnRjX3JlYWRfYWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCiB7CiAJcnRjX3RpbWVfdG9fdG0ocmVhZGwocnRjX2Jhc2UgKyBSVENfTVIpLCAmYWxybS0+dGltZSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRjX3NldF9hbGFybShzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lOwogCWludCByZXQ7CiAKLQlyZXQgPSBydGNfdG1fdG9fdGltZSgmYWxybS0+dGltZSwgJnRpbWUpOworCS8qCisJICogQXQgdGhlIG1vbWVudCwgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIG5vbi13aWxkY2FyZGVkIGFsYXJtIHRpbWVzLgorCSAqLworCXJldCA9IHJ0Y192YWxpZF90bSgmYWxybS0+dGltZSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBydGNfdG1fdG9fdGltZSgmYWxybS0+dGltZSwgJnRpbWUpOwogCWlmIChyZXQgPT0gMCkKIAkJd3JpdGVsKHRpbWUsIHJ0Y19iYXNlICsgUlRDX01SKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCitzdGF0aWMgaW50IHJ0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlydGNfdGltZV90b190bShyZWFkbChydGNfYmFzZSArIFJUQ19EUiksIHRtKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTY5LDcgKzc2LDcgQEAKICAqIGVkZ2Ugb2YgdGhlIDFIeiBjbG9jaywgd2UgbXVzdCB3cml0ZSB0aGUgdGltZSBvbmUgc2Vjb25kCiAgKiBpbiBhZHZhbmNlLgogICovCi1zdGF0aWMgaW50IHJ0Y19zZXRfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQorc3RhdGljIGlubGluZSBpbnQgcnRjX3NldF90aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI4MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCmluZGV4IGM0NjgzYWEuLmFlYzEzYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCkBAIC02NSwxOSArNjUsMTAyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSVhEUDI4MDAgUENJCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9zbGF2ZV9kaXNhYmxlX3BjaV9tYXN0ZXIodm9pZCkKK3sKKwkqSVhQMjAwMF9QQ0lfQ01EU1RBVCAmPSB+KFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpeGRwMjgwMF9tYXN0ZXJfd2FpdF9mb3Jfc2xhdmUodm9pZCkKK3sKKwl2b2xhdGlsZSB1MzIgKmFkZHI7CisKKwlwcmludGsoS0VSTl9JTkZPICJJWERQMjgwMDogd2FpdGluZyBmb3Igc2xhdmUgTlBVIHRvIGNvbmZpZ3VyZSAiCisJCQkgIml0cyBCQVIgc2l6ZXNcbiIpOworCisJYWRkciA9IGl4cDIwMDBfcGNpX2NvbmZpZ19hZGRyKDAsIElYRFAyWDAwX1NMQVZFX05QVV9ERVZGTiwKKwkJCQkJUENJX0JBU0VfQUREUkVTU18xKTsKKwlkbyB7CisJCSphZGRyID0gMHhmZmZmZmZmZjsKKwkJY3B1X3JlbGF4KCk7CisJfSB3aGlsZSAoKmFkZHIgIT0gMHhmZTAwMDAwOCk7CisKKwlhZGRyID0gaXhwMjAwMF9wY2lfY29uZmlnX2FkZHIoMCwgSVhEUDJYMDBfU0xBVkVfTlBVX0RFVkZOLAorCQkJCQlQQ0lfQkFTRV9BRERSRVNTXzIpOworCWRvIHsKKwkJKmFkZHIgPSAweGZmZmZmZmZmOworCQljcHVfcmVsYXgoKTsKKwl9IHdoaWxlICgqYWRkciAhPSAweGMwMDAwMDA4KTsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSBzbGF2ZSdzIFNEUkFNIEJBUiBieSBoYW5kLgorCSAqLworCSphZGRyID0gMHg0MDAwMDAwODsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGl4ZHAyODAwX3NsYXZlX3dhaXRfZm9yX21hc3Rlcl9lbmFibGUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJJWERQMjgwMDogd2FpdGluZyBmb3IgbWFzdGVyIE5QVSB0byBlbmFibGUgdXNcbiIpOworCisJd2hpbGUgKCgqSVhQMjAwMF9QQ0lfQ01EU1RBVCAmIFBDSV9DT01NQU5EX01BU1RFUikgPT0gMCkKKwkJY3B1X3JlbGF4KCk7Cit9CisKIHZvaWQgX19pbml0IGl4ZHAyODAwX3BjaV9wcmVpbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJpeGRwMngwMF9wY2lfcHJlaW5pdCBjYWxsZWRcbiIpOwogCi0JKklYUDIwMDBfUENJX0FERFJfRVhUID0gIDB4MDAwMGUwMDA7CisJKklYUDIwMDBfUENJX0FERFJfRVhUID0gMHgwMDAxZTAwMDsKIAotCSpJWFAyMDAwX1BDSV9EUkFNX0JBU0VfQUREUl9NQVNLID0gKDB4NDAwMDAwMDAgLSAxKSAmIH4weGZmZmZmOworCWlmICghaXhkcDJ4MDBfbWFzdGVyX25wdSgpKQorCQlpeGRwMjgwMF9zbGF2ZV9kaXNhYmxlX3BjaV9tYXN0ZXIoKTsKKwogCSpJWFAyMDAwX1BDSV9TUkFNX0JBU0VfQUREUl9NQVNLID0gKDB4MjAwMDAwMCAtIDEpICYgfjB4M2ZmZmY7CisJKklYUDIwMDBfUENJX0RSQU1fQkFTRV9BRERSX01BU0sgPSAoMHg0MDAwMDAwMCAtIDEpICYgfjB4ZmZmZmY7CiAKIAlpeHAyMDAwX3BjaV9wcmVpbml0KCk7CisKKwlpZiAoaXhkcDJ4MDBfbWFzdGVyX25wdSgpKSB7CisJCS8qCisJCSAqIFdhaXQgdW50aWwgdGhlIHNsYXZlIHNldCBpdHMgU1JBTS9TRFJBTSBCQVIgc2l6ZXMKKwkJICogY29ycmVjdGx5IGJlZm9yZSB3ZSBwcm9jZWVkIHRvIHNjYW4gYW5kIGVudW1lcmF0ZQorCQkgKiB0aGUgYnVzLgorCQkgKi8KKwkJaXhkcDI4MDBfbWFzdGVyX3dhaXRfZm9yX3NsYXZlKCk7CisKKwkJLyoKKwkJICogV2UgY29uZmlndXJlIHRoZSBTRFJBTSBCQVJzIGJ5IGhhbmQgYmVjYXVzZSB0aGV5CisJCSAqIGFyZSAxRyBhbmQgZmFsbCBvdXRzaWRlIG9mIHRoZSByZWd1bGFyIGFsbG9jYXRlZAorCQkgKiBQQ0kgYWRkcmVzcyBzcGFjZS4KKwkJICovCisJCSpJWFAyMDAwX1BDSV9TRFJBTV9CQVIgPSAweDAwMDAwMDA4OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdhaXQgZm9yIHRoZSBtYXN0ZXIgdG8gY29tcGxldGUgc2Nhbm5pbmcgdGhlIGJ1cworCQkgKiBhbmQgYXNzaWduaW5nIHJlc291cmNlcyBiZWZvcmUgd2UgcHJvY2VlZCB0byBzY2FuCisJCSAqIHRoZSBidXMgb3Vyc2VsdmVzLiAgU2V0IHBjaT1maXJtd2FyZSB0byBob25vciB0aGUKKwkJICogbWFzdGVyJ3MgcmVzb3VyY2UgYXNzaWdubWVudC4KKwkJICovCisJCWl4ZHAyODAwX3NsYXZlX3dhaXRfZm9yX21hc3Rlcl9lbmFibGUoKTsKKwkJcGNpYmlvc19zZXR1cCgiZmlybXdhcmUiKTsKKwl9CiB9CiAKLWludCBpeGRwMjgwMF9wY2lfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCisvKgorICogV2UgYXNzaWduIHRoZSBTRFJBTSBCQVJzIGZvciB0aGUgdHdvIElYUDI4MDAgQ1BVcyBieSBoYW5kLCBvdXRzaWRlCisgKiBvZiB0aGUgcmVndWxhciBQQ0kgd2luZG93LCBiZWNhdXNlIHRoZXJlJ3Mgb25seSA1MTJNIG9mIG91dGJvdW5kIFBDSQorICogbWVtb3J5IHdpbmRvdyBvbiBlYWNoIElYUCwgd2hpbGUgd2UgbmVlZCAxRyBmb3IgZWFjaCBvZiB0aGUgQkFScy4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGl4cDI4MDBfcGNpX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKG1hY2hpbmVfaXNfaXhkcDI4MDAoKSkgeworCQlkZXYtPnJlc291cmNlWzJdLnN0YXJ0ID0gMDsKKwkJZGV2LT5yZXNvdXJjZVsyXS5lbmQgICA9IDA7CisJCWRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgPSAwOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lYUDI4MDAsIGl4cDI4MDBfcGNpX2ZpeHVwKTsKKworc3RhdGljIGludCBfX2luaXQgaXhkcDI4MDBfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXN5cy0+bWVtX29mZnNldCA9IDB4MDAwMDAwMDA7CiAKQEAgLTEyOSwyMiArMjEyLDQ3IEBACiAJfSBlbHNlIHJldHVybiBJUlFfSVhQMjAwMF9QQ0lCOyAvKiBTbGF2ZSBOSUMgaW50ZXJydXB0ICovCiB9CiAKLXN0YXRpYyB2b2lkIGl4ZHAyODAwX3BjaV9wb3N0aW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGl4ZHAyODAwX21hc3Rlcl9lbmFibGVfc2xhdmUodm9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXZvbGF0aWxlIHUzMiAqYWRkcjsKIAotCWlmIChpeGRwMngwMF9tYXN0ZXJfbnB1KCkpIHsKLQkJZGV2ID0gcGNpX2ZpbmRfc2xvdCgxLCBJWERQMjgwMF9TTEFWRV9FTkVUX0RFVkZOKTsKLQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7Ci0JfSBlbHNlIHsKLQkJZGV2ID0gcGNpX2ZpbmRfc2xvdCgxLCBJWERQMjgwMF9NQVNURVJfRU5FVF9ERVZGTik7Ci0JCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworCXByaW50ayhLRVJOX0lORk8gIklYRFAyODAwOiBlbmFibGluZyBzbGF2ZSBOUFVcbiIpOwogCisJYWRkciA9ICh2b2xhdGlsZSB1MzIgKilpeHAyMDAwX3BjaV9jb25maWdfYWRkcigwLAorCQkJCQlJWERQMlgwMF9TTEFWRV9OUFVfREVWRk4sCisJCQkJCVBDSV9DT01NQU5EKTsKKworCSphZGRyIHw9IFBDSV9DT01NQU5EX01BU1RFUjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGl4ZHAyODAwX21hc3Rlcl93YWl0X2Zvcl9zbGF2ZV9idXNfc2Nhbih2b2lkKQoreworCXZvbGF0aWxlIHUzMiAqYWRkcjsKKworCXByaW50ayhLRVJOX0lORk8gIklYRFAyODAwOiB3YWl0aW5nIGZvciBzbGF2ZSB0byBmaW5pc2ggYnVzIHNjYW5cbiIpOworCisJYWRkciA9ICh2b2xhdGlsZSB1MzIgKilpeHAyMDAwX3BjaV9jb25maWdfYWRkcigwLAorCQkJCQlJWERQMlgwMF9TTEFWRV9OUFVfREVWRk4sCisJCQkJCVBDSV9DT01NQU5EKTsKKwl3aGlsZSAoKCphZGRyICYgUENJX0NPTU1BTkRfTUVNT1JZKSA9PSAwKQorCQljcHVfcmVsYXgoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGl4ZHAyODAwX3NsYXZlX3NpZ25hbF9idXNfc2Nhbl9jb21wbGV0aW9uKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVhEUDI4MDA6IGJ1cyBzY2FuIGRvbmUsIHNpZ25hbGluZyBtYXN0ZXJcbiIpOworCSpJWFAyMDAwX1BDSV9DTURTVEFUIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGl4ZHAyODAwX3BjaV9wb3N0aW5pdCh2b2lkKQoreworCWlmICghaXhkcDJ4MDBfbWFzdGVyX25wdSgpKSB7CiAJCWl4ZHAyeDAwX3NsYXZlX3BjaV9wb3N0aW5pdCgpOworCQlpeGRwMjgwMF9zbGF2ZV9zaWduYWxfYnVzX3NjYW5fY29tcGxldGlvbigpOwogCX0KIH0KIAotc3RydWN0IGh3X3BjaSBpeGRwMjgwMF9wY2kgX19pbml0ZGF0YSA9IHsKK3N0cnVjdCBfX2luaXRkYXRhIGh3X3BjaSBpeGRwMjgwMF9wY2kgX19pbml0ZGF0YSA9IHsKIAkubnJfY29udHJvbGxlcnMJPSAxLAogCS5zZXR1cAkJPSBpeGRwMjgwMF9wY2lfc2V0dXAsCiAJLnByZWluaXQJPSBpeGRwMjgwMF9wY2lfcHJlaW5pdCwKQEAgLTE1NSw4ICsyNjMsMjEgQEAKIAogaW50IF9faW5pdCBpeGRwMjgwMF9wY2lfaW5pdCh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX2l4ZHAyODAwKCkpCisJaWYgKG1hY2hpbmVfaXNfaXhkcDI4MDAoKSkgeworCQlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCiAJCXBjaV9jb21tb25faW5pdCgmaXhkcDI4MDBfcGNpKTsKKwkJaWYgKGl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkgeworCQkJZGV2ID0gcGNpX2ZpbmRfc2xvdCgxLCBJWERQMjgwMF9TTEFWRV9FTkVUX0RFVkZOKTsKKwkJCXBjaV9yZW1vdmVfYnVzX2RldmljZShkZXYpOworCisJCQlpeGRwMjgwMF9tYXN0ZXJfZW5hYmxlX3NsYXZlKCk7CisJCQlpeGRwMjgwMF9tYXN0ZXJfd2FpdF9mb3Jfc2xhdmVfYnVzX3NjYW4oKTsKKwkJfSBlbHNlIHsKKwkJCWRldiA9IHBjaV9maW5kX3Nsb3QoMSwgSVhEUDI4MDBfTUFTVEVSX0VORVRfREVWRk4pOworCQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYwppbmRleCA4MzFmOGZmLi41ZmYyZjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jCkBAIC0zNyw3ICszNyw3IEBACiAKIHN0YXRpYyBpbnQgY2xlYXJfbWFzdGVyX2Fib3J0cyh2b2lkKTsKIAotc3RhdGljIHUzMiAqCit1MzIgKgogaXhwMjAwMF9wY2lfY29uZmlnX2FkZHIodW5zaWduZWQgaW50IGJ1c19uciwgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUpCiB7CiAJdTMyICpwYWRkcmVzczsKQEAgLTIwOCwxNSArMjA4LDE1IEBACiAgKiB1c2Ugb3VyIG93biByZXNvdXJjZSBzcGFjZS4KICAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHAyMDAwX3BjaV9tZW1fc3BhY2UgPSB7Ci0JLnN0YXJ0CT0gMHgwMDAwMDAwMCwKKwkuc3RhcnQJPSAweGUwMDAwMDAwLAogCS5lbmQJPSAweGZmZmZmZmZmLAogCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCS5uYW1lCT0gIlBDSSBNZW0gU3BhY2UiCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGl4cDIwMDBfcGNpX2lvX3NwYWNlID0gewotCS5zdGFydAk9IDB4MDAwMDAwMDAsCi0JLmVuZAk9IDB4ZmZmZmZmZmYsCisJLnN0YXJ0CT0gMHgwMDAxMDAwMCwKKwkuZW5kCT0gMHgwMDAxZmZmZiwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCS5uYW1lCT0gIlBDSSBJL08gU3BhY2UiCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCmluZGV4IGIxNTc1YjguLmE0NWFhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKQEAgLTIyMCw2ICsyMjAsMzAgQEAKIAkuaWQJCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHg0MDMwMTY4MCwKKwkJLmVuZAk9IDB4NDAzMDE2YTMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gSVJRX0kyQywKKwkJLmVuZAk9IElSUV9JMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmNfZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IHB4YV9zZXRfaTJjX2luZm8oc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqaW5mbykKK3sKKwlpMmNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZweGFtY2lfZGV2aWNlLAogCSZ1ZGNfZGV2aWNlLApAQCAtMjI3LDYgKzI1MSw3IEBACiAJJmZmdWFydF9kZXZpY2UsCiAJJmJ0dWFydF9kZXZpY2UsCiAJJnN0dWFydF9kZXZpY2UsCisJJmkyY19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggNWI2NzBjOS4uMDA3NzY2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC00MDksMyArNDA5LDE3IEBACiAJZGVwZW5kcyBvbiBDUFVfQVJNMTAyMAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbi4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBIQVNfVExTX1JFRworCWJvb2wKKwlkZXBlbmRzIG9uIENQVV8zMnY2ICYmICFDUFVfMzJ2NSAmJiAhQ1BVXzMydjQgJiYgIUNQVV8zMnYzCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBDUDE1IHRocmVhZCByZWdpc3Rlci4KKwkgIEl0IGlzIGRlZmluZWQgdG8gYmUgYXZhaWxhYmxlIG9uIEFSTXY2IG9yIGxhdGVyLiAgSG93ZXZlcgorCSAgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgQ1BVcyBpbmNsdWRpbmcKKwkgIGEgcHJlLUFSTXY2IHByb2Nlc3NvcnMsIG9yIGlmIGEgZ2l2ZW4gQVJNdjYgcHJvY2Vzc29yIGRvZXNuJ3QKKwkgIGltcGxlbWVudCB0aGUgdGhyZWFkIHJlZ2lzdGVyIGZvciBzb21lIHJlYXNvbiwgdGhlbiBhY2Nlc3MgdG8KKwkgIHRoaXMgcmVnaXN0ZXIgZnJvbSB1c2VyIHNwYWNlIG11c3QgYmUgdHJhcHBlZCBhbmQgZW11bGF0ZWQuCisJICBJZiB1c2VyIHNwYWNlIGlzIHJlbHlpbmcgb24gdGhlIF9fa3VzZXJfZ2V0X3RscyBjb2RlIHRoZW4KKwkgIHRoZXJlIHNob3VsZCBub3QgYmUgYW55IGltcGFjdC4KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwppbmRleCAzOGIyY2JiLi44Zjc2ZjNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUworKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgImFib3J0LW1hY3JvLlMiCiAvKgogICogRnVuY3Rpb246IHY2X2Vhcmx5X2Fib3J0CiAgKgpAQCAtMTMsMTEgKzE0LDI2IEBACiAgKgkgICA6IHNwID0gcG9pbnRlciB0byByZWdpc3RlcnMKICAqCiAgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgYWJvcnRlZCBpbnN0cnVjdGlvbi4KKyAqIE5vdGU6IHdlIHJlYWQgdXNlciBzcGFjZS4gIFRoaXMgbWVhbnMgd2UgbWlnaHQgY2F1c2UgYSBkYXRhCisgKiBhYm9ydCBoZXJlIGlmIHRoZSBJLVRMQiBhbmQgRC1UTEIgYXJlbid0IHNlZWluZyB0aGUgc2FtZQorICogcGljdHVyZS4gIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lcyBoYXBwZW4uICBXZSBsaXZlIHdpdGggaXQuCiAgKi8KIAkuYWxpZ24JNQogRU5UUlkodjZfZWFybHlfYWJvcnQpCiAJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCiAJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCisvKgorICogRmF1bHR5IFNXUCBpbnN0cnVjdGlvbiBvbiAxMTM2IGRvZXNuJ3Qgc2V0IGJpdCAxMSBpbiBERlNSLgorICogVGhlIHRlc3QgYmVsb3cgY292ZXJzIGFsbCB0aGUgd3JpdGUgc2l0dWF0aW9ucywgaW5jbHVkaW5nIEphdmEgYnl0ZWNvZGVzCisgKi8KKwliaWMJcjEsIHIxLCAjMSA8PCAxMSB8IDEgPDwgMTAJQCBjbGVhciBiaXRzIDExIGFuZCAxMCBvZiBGU1IKKwl0c3QJcjMsICNQU1JfSl9CSVQJCQlAIEphdmE/CisJbW92bmUJcGMsIGxyCisJZG9fdGh1bWJfYWJvcnQKKwlsZHJlcQlyMywgW3IyXQkJCUAgcmVhZCBhYm9ydGVkIEFSTSBpbnN0cnVjdGlvbgorCWRvX2xkcmRfYWJvcnQKKwl0c3QJcjMsICMxIDw8IDIwCQkJQCBMID0gMCAtPiB3cml0ZQorCW9ycmVxCXIxLCByMSwgIzEgPDwgMTEJCUAgeWVzLgogCW1vdglwYywgbHIKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbS1hcm12LmMgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKaW5kZXggZjVhODdkYjguLjU4NWRmYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLWFybXYuYworKysgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKQEAgLTQxMSw5ICs0MTEsMTAgQEAKIAkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0ICY9IH5QTURfQklUNDsKIAkJbWVtX3R5cGVzW01UX1JPTV0ucHJvdF9zZWN0ICY9IH5QTURfQklUNDsKIAkJLyoKLQkJICogTWFyayBjYWNoZSBjbGVhbiBhcmVhcyByZWFkIG9ubHkgZnJvbSBTVkMgbW9kZQotCQkgKiBhbmQgbm8gYWNjZXNzIGZyb20gdXNlcnNwYWNlLgorCQkgKiBNYXJrIGNhY2hlIGNsZWFuIGFyZWFzIGFuZCBYSVAgUk9NIHJlYWQgb25seQorCQkgKiBmcm9tIFNWQyBtb2RlIGFuZCBubyBhY2Nlc3MgZnJvbSB1c2Vyc3BhY2UuCiAJCSAqLworCQltZW1fdHlwZXNbTVRfUk9NXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQVBYfFBNRF9TRUNUX0FQX1dSSVRFOwogCQltZW1fdHlwZXNbTVRfTUlOSUNMRUFOXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQVBYfFBNRF9TRUNUX0FQX1dSSVRFOwogCQltZW1fdHlwZXNbTVRfQ0FDSEVDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jCmluZGV4IDJhMTM3MTQuLjhhNTIxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC01OTEsNyArNTkyLDcgQEAKIAkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKIAkJY2FzZSBQVFJBQ0VfQ09OVDoKIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtNjI2LDcgKzYyNyw3IEBACiAJCSAqLwogCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgogCQkJcmV0ID0gLUVJTzsKLQkJCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQkJYnJlYWs7CiAJCQljaGlsZC0+cHRyYWNlIHw9IFBUX1NJTkdMRVNURVA7CiAJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvbW0vc21hbGxfcGFnZS5jIGIvYXJjaC9hcm0yNi9tbS9zbWFsbF9wYWdlLmMKaW5kZXggNzdiZTg2Yy4uMzA0NDcxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9tbS9zbWFsbF9wYWdlLmMKKysrIGIvYXJjaC9hcm0yNi9tbS9zbWFsbF9wYWdlLmMKQEAgLTkyLDggKzkyLDcgQEAKIAkJcGFnZSA9IGxpc3RfZW50cnkob3JkZXItPnF1ZXVlLm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwogYWdhaW46CiAjaWZkZWYgUEVEQU5USUMKLQkJaWYgKFVTRURfTUFQKHBhZ2UpICYgfm9yZGVyLT5hbGxfdXNlZCkKLQkJCVBBR0VfQlVHKHBhZ2UpOworCQlCVUdfT04oVVNFRF9NQVAocGFnZSkgJiB+b3JkZXItPmFsbF91c2VkKTsKICNlbmRpZgogCQlvZmZzZXQgPSBmZnooVVNFRF9NQVAocGFnZSkpOwogCQlTRVRfVVNFRChwYWdlLCBvZmZzZXQpOwpAQCAtMTQxLDggKzE0MCw3IEBACiAJCQlnb3RvIG5vbl9zbWFsbDsKIAogI2lmZGVmIFBFREFOVElDCi0JCWlmIChVU0VEX01BUChwYWdlKSAmIH5vcmRlci0+YWxsX3VzZWQpCi0JCQlQQUdFX0JVRyhwYWdlKTsKKwkJQlVHX09OKFVTRURfTUFQKHBhZ2UpICYgfm9yZGVyLT5hbGxfdXNlZCk7CiAjZW5kaWYKIAogCQlzcGFnZSA9IHNwYWdlID4+IG9yZGVyLT5zaGlmdDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3B0cmFjZS5jCmluZGV4IGRhMTVkYjguLjU4MWVjYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTg0LDcgKzE4NSw3IEBACiAJCWNhc2UgUFRSQUNFX0NPTlQ6CiAJCQlyZXQgPSAtRUlPOwogCQkJCi0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewpAQCAtMjE5LDcgKzIyMCw3IEBACiAJCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCQlyZXQgPSAtRUlPOwogCQkJCi0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJCiAJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAyYTBlZmI3Li5jYmUwM2NiIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3B0cmFjZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0yMzksNyArMjQwLDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0yNjcsNyArMjY4LDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQlwdHJhY2VfZW5hYmxlKGNoaWxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNWYxOWQ3Ny4uMDVjMTVlOCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzEsNyArMTcyLDcgQEAKIAkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAkJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPj0gX05TSUcpCisJCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCQlicmVhayA7CiAJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0yMDIsNyArMjAzLDcgQEAKIAogCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOiB7ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnIGIvYXJjaC9pMzg2L0tjb25maWcKaW5kZXggMTdhMGNiYy4uOTliNGYyOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcKKysrIGIvYXJjaC9pMzg2L0tjb25maWcKQEAgLTY1Myw2ICs2NTMsMjQgQEAKIAkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgRGVsbCBJbnNwaXJvbiA4MDAwLgogCSAgU2F5IE4gb3RoZXJ3aXNlLgogCitjb25maWcgWDg2X1JFQk9PVEZJWFVQUworCWJvb2wgIkVuYWJsZSBYODYgYm9hcmQgc3BlY2lmaWMgZml4dXBzIGZvciByZWJvb3QiCisJZGVwZW5kcyBvbiBYODYKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGVuYWJsZXMgY2hpcHNldCBhbmQvb3IgYm9hcmQgc3BlY2lmaWMgZml4dXBzIHRvIGJlIGRvbmUKKwkgIGluIG9yZGVyIHRvIGdldCByZWJvb3QgdG8gd29yayBjb3JyZWN0bHkuIFRoaXMgaXMgb25seSBuZWVkZWQgb24KKwkgIHNvbWUgY29tYmluYXRpb25zIG9mIGhhcmR3YXJlIGFuZCBCSU9TLiBUaGUgc3ltcHRvbSwgZm9yIHdoaWNoCisJICB0aGlzIGNvbmZpZyBpcyBpbnRlbmRlZCwgaXMgd2hlbiByZWJvb3QgZW5kcyB3aXRoIGEgc3RhbGxlZC9odW5nCisJICBzeXN0ZW0uCisKKwkgIEN1cnJlbnRseSwgdGhlIG9ubHkgZml4dXAgaXMgZm9yIHRoZSBHZW9kZSBHWDEvQ1M1NTMwQS9UUk9NMi4xLgorCSAgY29tYmluYXRpb24uCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgZml4dXAuIEN1cnJlbnRseSwgaXQncyBzYWZlIHRvCisJICBlbmFibGUgdGhpcyBvcHRpb24gZXZlbiBpZiB5b3UgZG9uJ3QgbmVlZCBpdC4KKwkgIFNheSBOIG90aGVyd2lzZS4KKwogY29uZmlnIE1JQ1JPQ09ERQogCXRyaXN0YXRlICIvZGV2L2NwdS9taWNyb2NvZGUgLSBJbnRlbCBJQTMyIENQVSBtaWNyb2NvZGUgc3VwcG9ydCIKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvTWFrZWZpbGUgYi9hcmNoL2kzODYvTWFrZWZpbGUKaW5kZXggMzE0YzcxNC4uMDQ3ODNjZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9NYWtlZmlsZQpAQCAtMTIzLDcgKzEyMyw3IEBACiBib290IDo9IGFyY2gvaTM4Ni9ib290CiAKIC5QSE9OWTogekltYWdlIGJ6SW1hZ2UgY29tcHJlc3NlZCB6bGlsbyBiemxpbG8gXAotCXpkaXNrIGJ6ZGlzayBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpbnN0YWxsCisJemRpc2sgYnpkaXNrIGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGluc3RhbGwga2VybmVsX2luc3RhbGwKIAogYWxsOiBiekltYWdlCiAKQEAgLTE0NSw4ICsxNDUsOSBAQAogZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODg6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgJEAKIAotaW5zdGFsbDoKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgJEAKK2luc3RhbGw6IHZtbGludXgKK2luc3RhbGwga2VybmVsX2luc3RhbGw6CisJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpIGluc3RhbGwKIAogcHJlcGFyZTogaW5jbHVkZS9hc20tJChBUkNIKS9hc21fb2Zmc2V0cy5oCiBDTEVBTl9GSUxFUyArPSBpbmNsdWRlL2FzbS0kKEFSQ0gpL2FzbV9vZmZzZXRzLmgKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZmE2NzA0NS4uY2VkYzU1YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPHZpZGVvL2VkaWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L3NldHVwLlMgYi9hcmNoL2kzODYvYm9vdC9zZXR1cC5TCmluZGV4IGE5MzRhYjMuLmNhYTFmZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3NldHVwLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUwpAQCAtMTY0LDcgKzE2NCw3IEBACiB0cmFtcG9saW5lOgljYWxsCXN0YXJ0X29mX3NldHVwCiAJCS5hbGlnbiAxNgogCQkJCQkjIFRoZSBvZmZzZXQgYXQgdGhpcyBwb2ludCBpcyAweDI0MAotCQkuc3BhY2UJKDB4N2ZmLTB4MjQwKzEpICMgRTgyMCAmIEVERCBzcGFjZSAoZW5kaW5nIGF0IDB4N2ZmKQorCQkuc3BhY2UJKDB4ZWZmLTB4MjQwKzEpICMgRTgyMCAmIEVERCBzcGFjZSAoZW5kaW5nIGF0IDB4ZWZmKQogIyBFbmQgb2Ygc2V0dXAgaGVhZGVyICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHN0YXJ0X29mX3NldHVwOgpAQCAtMzMzLDkgKzMzMyw5IEBACiAJIyBzaXplb2YoZTgyMHJlYykuCiAJIwogZ29vZDgyMDoKLQltb3ZiCShFODIwTlIpLCAlYWwJCQkjIHVwIHRvIDMyIGVudHJpZXMKKwltb3ZiCShFODIwTlIpLCAlYWwJCQkjIHVwIHRvIDEyOCBlbnRyaWVzCiAJY21wYgkkRTgyME1BWCwgJWFsCi0Jam5sCWJhaWw4MjAKKwlqYWUJYmFpbDgyMAogCiAJaW5jYgkoRTgyME5SKQogCW1vdncJJWRpLCAlYXgKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCmluZGV4IGFhY2RhZTYuLjBmYmNmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KIG9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCiBvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubworb2JqLSQoQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMpCSs9IHJlYm9vdF9maXh1cHMubwogb2JqLSQoQ09ORklHX1g4Nl9OVU1BUSkJCSs9IG51bWFxLm8KIG9iai0kKENPTkZJR19YODZfU1VNTUlUX05VTUEpCSs9IHN1bW1pdC5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwppbmRleCBlMzg3OWY3Li5kNTA5ODM2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwpAQCAtMTI2NSw4ICsxMjY1LDYgQEAKIAogCXNldHVwX2xvY2FsX0FQSUMoKTsKIAotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCi0JCWNoZWNrX25taV93YXRjaGRvZygpOwogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWlmIChzbXBfZm91bmRfY29uZmlnKQogCQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDlmN2E3ZWEuLmY0NjhhOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC0xMjQsOCArMTI0LDggQEAKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIAotdm9pZCBnZW5lcmljX2dldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgKmJhc2UsCi0JCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgbXRycl90eXBlICogdHlwZSkKK3N0YXRpYyB2b2lkIGdlbmVyaWNfZ2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyAqYmFzZSwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpzaXplLCBtdHJyX3R5cGUgKiB0eXBlKQogewogCXVuc2lnbmVkIGludCBtYXNrX2xvLCBtYXNrX2hpLCBiYXNlX2xvLCBiYXNlX2hpOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDU0OTk5ZTQuLmUxYzIwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC03MiwxNyArNzIsMjEgQEAKIHN0YXRpYyBpbnQgaGF2ZV93cmNvbWIodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXU4IHJldjsKIAkKIAlpZiAoKGRldiA9IHBjaV9nZXRfY2xhc3MoUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDgsIE5VTEwpKSAhPSBOVUxMKSB7Ci0JCS8qIFNlcnZlcldvcmtzIExFIGNoaXBzZXRzIGhhdmUgcHJvYmxlbXMgd2l0aCB3cml0ZS1jb21iaW5pbmcgCisJCS8qIFNlcnZlcldvcmtzIExFIGNoaXBzZXRzIDwgcmV2IDYgaGF2ZSBwcm9ibGVtcyB3aXRoIHdyaXRlLWNvbWJpbmluZwogCQkgICBEb24ndCBhbGxvdyBpdCBhbmQgbGVhdmUgcm9vbSBmb3Igb3RoZXIgY2hpcHNldHMgdG8gYmUgdGFnZ2VkICovCiAJCWlmIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTICYmCiAJCSAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0xFKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBTZXJ2ZXJ3b3JrcyBMRSBkZXRlY3RlZC4gV3JpdGUtY29tYmluaW5nIGRpc2FibGVkLlxuIik7Ci0JCQlwY2lfZGV2X3B1dChkZXYpOwotCQkJcmV0dXJuIDA7CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldik7CisJCQlpZiAocmV2IDw9IDUpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBTZXJ2ZXJ3b3JrcyBMRSByZXYgPCA2IGRldGVjdGVkLiBXcml0ZS1jb21iaW5pbmcgZGlzYWJsZWQuXG4iKTsKKwkJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJCXJldHVybiAwOworCQkJfQogCQl9Ci0JCS8qIEludGVsIDQ1ME5YIGVycmF0YSAjIDIzLiBOb24gYXNjZW5kaW5nIGNhY2hsaW5lIGV2aWN0aW9ucyB0bworCQkvKiBJbnRlbCA0NTBOWCBlcnJhdGEgIyAyMy4gTm9uIGFzY2VuZGluZyBjYWNoZWxpbmUgZXZpY3Rpb25zIHRvCiAJCSAgIHdyaXRlIGNvbWJpbmluZyBtZW1vcnkgbWF5IHJlc3VsdGluZyBpbiBkYXRhIGNvcnJ1cHRpb24gKi8KIAkJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYKIAkJICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTFOWCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IDRmMjhlYmEuLjczMjNjMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAkgICAgICAgICJmeHNyIiwgInNzZSIsICJzc2UyIiwgInNzIiwgImh0IiwgInRtIiwgImlhNjQiLCAicGJlIiwKIAogCQkvKiBBTUQtZGVmaW5lZCAqLwotCQkicG5pIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgInN5c2NhbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCAibXAiLCAibngiLCBOVUxMLCAibW14ZXh0IiwgTlVMTCwKIAkJTlVMTCwgImZ4c3Jfb3B0IiwgTlVMTCwgTlVMTCwgTlVMTCwgImxtIiwgIjNkbm93ZXh0IiwgIjNkbm93IiwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUwppbmRleCAzYzczZGM4Li5hOTkxZDRlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCkBAIC0yNjAsMTEgKzI2MCw5IEBACiAuc2VjdGlvbiAuZml4dXAsImF4IgogaXJldF9leGM6CiAJc3RpCi0JbW92bCAkX19VU0VSX0RTLCAlZWR4Ci0JbW92bCAlZWR4LCAlZHMKLQltb3ZsICVlZHgsICVlcwotCW1vdmwgJDExLCVlYXgKLQljYWxsIGRvX2V4aXQKKwlwdXNobCAkMAkJCSMgbm8gZXJyb3IgY29kZQorCXB1c2hsICRkb19pcmV0X2Vycm9yCisJam1wIGVycm9yX2NvZGUKIC5wcmV2aW91cwogLnNlY3Rpb24gX19leF90YWJsZSwiYSIKIAkuYWxpZ24gNApAQCAtNTE2LDggKzUxNCw2IEBACiAJeG9ybCAlZWR4LCVlZHgJCQkjIGVycm9yIGNvZGUgMAogCW1vdmwgJWVzcCwlZWF4CQkJIyBwdF9yZWdzIHBvaW50ZXIKIAljYWxsIGRvX2RlYnVnCi0JdGVzdGwgJWVheCwlZWF4Ci0Jam56IHJlc3RvcmVfYWxsCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgogCiAvKgpAQCAtNTk4LDggKzU5NCw2IEBACiAJeG9ybCAlZWR4LCVlZHgJCSMgemVybyBlcnJvciBjb2RlCiAJbW92bCAlZXNwLCVlYXgJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCBkb19pbnQzCi0JdGVzdGwgJWVheCwlZWF4Ci0Jam56IHJlc3RvcmVfYWxsCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgogCiBFTlRSWShvdmVyZmxvdykKQEAgLTY1OCwyOTYgKzY1Miw2IEBACiAJcHVzaGwgJGRvX3NwdXJpb3VzX2ludGVycnVwdF9idWcKIAlqbXAgZXJyb3JfY29kZQogCi0uZGF0YQotRU5UUlkoc3lzX2NhbGxfdGFibGUpCi0JLmxvbmcgc3lzX3Jlc3RhcnRfc3lzY2FsbAkvKiAwIC0gb2xkICJzZXR1cCgpIiBzeXN0ZW0gY2FsbCwgdXNlZCBmb3IgcmVzdGFydGluZyAqLwotCS5sb25nIHN5c19leGl0Ci0JLmxvbmcgc3lzX2ZvcmsKLQkubG9uZyBzeXNfcmVhZAotCS5sb25nIHN5c193cml0ZQotCS5sb25nIHN5c19vcGVuCQkvKiA1ICovCi0JLmxvbmcgc3lzX2Nsb3NlCi0JLmxvbmcgc3lzX3dhaXRwaWQKLQkubG9uZyBzeXNfY3JlYXQKLQkubG9uZyBzeXNfbGluawotCS5sb25nIHN5c191bmxpbmsJLyogMTAgKi8KLQkubG9uZyBzeXNfZXhlY3ZlCi0JLmxvbmcgc3lzX2NoZGlyCi0JLmxvbmcgc3lzX3RpbWUKLQkubG9uZyBzeXNfbWtub2QKLQkubG9uZyBzeXNfY2htb2QJCS8qIDE1ICovCi0JLmxvbmcgc3lzX2xjaG93bjE2Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXQKLQkubG9uZyBzeXNfbHNlZWsKLQkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCi0JLmxvbmcgc3lzX21vdW50Ci0JLmxvbmcgc3lzX29sZHVtb3VudAotCS5sb25nIHN5c19zZXR1aWQxNgotCS5sb25nIHN5c19nZXR1aWQxNgotCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KLQkubG9uZyBzeXNfcHRyYWNlCi0JLmxvbmcgc3lzX2FsYXJtCi0JLmxvbmcgc3lzX2ZzdGF0Ci0JLmxvbmcgc3lzX3BhdXNlCi0JLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfYWNjZXNzCi0JLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAtIG9sZCBmdGltZSBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19zeW5jCi0JLmxvbmcgc3lzX2tpbGwKLQkubG9uZyBzeXNfcmVuYW1lCi0JLmxvbmcgc3lzX21rZGlyCi0JLmxvbmcgc3lzX3JtZGlyCQkvKiA0MCAqLwotCS5sb25nIHN5c19kdXAKLQkubG9uZyBzeXNfcGlwZQotCS5sb25nIHN5c190aW1lcwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX2JyawkJLyogNDUgKi8KLQkubG9uZyBzeXNfc2V0Z2lkMTYKLQkubG9uZyBzeXNfZ2V0Z2lkMTYKLQkubG9uZyBzeXNfc2lnbmFsCi0JLmxvbmcgc3lzX2dldGV1aWQxNgotCS5sb25nIHN5c19nZXRlZ2lkMTYJLyogNTAgKi8KLQkubG9uZyBzeXNfYWNjdAotCS5sb25nIHN5c191bW91bnQJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbG9jayBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19pb2N0bAotCS5sb25nIHN5c19mY250bAkJLyogNTUgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbXB4IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3NldHBnaWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgdWxpbWl0IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX29sZHVuYW1lCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLwotCS5sb25nIHN5c19jaHJvb3QKLQkubG9uZyBzeXNfdXN0YXQKLQkubG9uZyBzeXNfZHVwMgotCS5sb25nIHN5c19nZXRwcGlkCi0JLmxvbmcgc3lzX2dldHBncnAJLyogNjUgKi8KLQkubG9uZyBzeXNfc2V0c2lkCi0JLmxvbmcgc3lzX3NpZ2FjdGlvbgotCS5sb25nIHN5c19zZ2V0bWFzawotCS5sb25nIHN5c19zc2V0bWFzawotCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCi0JLmxvbmcgc3lzX3NldHJlZ2lkMTYKLQkubG9uZyBzeXNfc2lnc3VzcGVuZAotCS5sb25nIHN5c19zaWdwZW5kaW5nCi0JLmxvbmcgc3lzX3NldGhvc3RuYW1lCi0JLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLwotCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0Ci0JLmxvbmcgc3lzX2dldHJ1c2FnZQotCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKLQkubG9uZyBzeXNfc2V0dGltZW9mZGF5Ci0JLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCi0JLmxvbmcgc3lzX3NldGdyb3VwczE2Ci0JLmxvbmcgb2xkX3NlbGVjdAotCS5sb25nIHN5c19zeW1saW5rCi0JLmxvbmcgc3lzX2xzdGF0Ci0JLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCi0JLmxvbmcgc3lzX3VzZWxpYgotCS5sb25nIHN5c19zd2Fwb24KLQkubG9uZyBzeXNfcmVib290Ci0JLmxvbmcgb2xkX3JlYWRkaXIKLQkubG9uZyBvbGRfbW1hcAkJLyogOTAgKi8KLQkubG9uZyBzeXNfbXVubWFwCi0JLmxvbmcgc3lzX3RydW5jYXRlCi0JLmxvbmcgc3lzX2Z0cnVuY2F0ZQotCS5sb25nIHN5c19mY2htb2QKLQkubG9uZyBzeXNfZmNob3duMTYJLyogOTUgKi8KLQkubG9uZyBzeXNfZ2V0cHJpb3JpdHkKLQkubG9uZyBzeXNfc2V0cHJpb3JpdHkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXRmcwotCS5sb25nIHN5c19mc3RhdGZzCS8qIDEwMCAqLwotCS5sb25nIHN5c19pb3Blcm0KLQkubG9uZyBzeXNfc29ja2V0Y2FsbAotCS5sb25nIHN5c19zeXNsb2cKLQkubG9uZyBzeXNfc2V0aXRpbWVyCi0JLmxvbmcgc3lzX2dldGl0aW1lcgkvKiAxMDUgKi8KLQkubG9uZyBzeXNfbmV3c3RhdAotCS5sb25nIHN5c19uZXdsc3RhdAotCS5sb25nIHN5c19uZXdmc3RhdAotCS5sb25nIHN5c191bmFtZQotCS5sb25nIHN5c19pb3BsCQkvKiAxMTAgKi8KLQkubG9uZyBzeXNfdmhhbmd1cAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiaWRsZSIgc3lzdGVtIGNhbGwgKi8KLQkubG9uZyBzeXNfdm04Nm9sZAotCS5sb25nIHN5c193YWl0NAotCS5sb25nIHN5c19zd2Fwb2ZmCS8qIDExNSAqLwotCS5sb25nIHN5c19zeXNpbmZvCi0JLmxvbmcgc3lzX2lwYwotCS5sb25nIHN5c19mc3luYwotCS5sb25nIHN5c19zaWdyZXR1cm4KLQkubG9uZyBzeXNfY2xvbmUJCS8qIDEyMCAqLwotCS5sb25nIHN5c19zZXRkb21haW5uYW1lCi0JLmxvbmcgc3lzX25ld3VuYW1lCi0JLmxvbmcgc3lzX21vZGlmeV9sZHQKLQkubG9uZyBzeXNfYWRqdGltZXgKLQkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCi0JLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJjcmVhdGVfbW9kdWxlIiAqLyAKLQkubG9uZyBzeXNfaW5pdF9tb2R1bGUKLQkubG9uZyBzeXNfZGVsZXRlX21vZHVsZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEzMDoJb2xkICJnZXRfa2VybmVsX3N5bXMiICovCi0JLmxvbmcgc3lzX3F1b3RhY3RsCi0JLmxvbmcgc3lzX2dldHBnaWQKLQkubG9uZyBzeXNfZmNoZGlyCi0JLmxvbmcgc3lzX2JkZmx1c2gKLQkubG9uZyBzeXNfc3lzZnMJCS8qIDEzNSAqLwotCS5sb25nIHN5c19wZXJzb25hbGl0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHJlc2VydmVkIGZvciBhZnNfc3lzY2FsbCAqLwotCS5sb25nIHN5c19zZXRmc3VpZDE2Ci0JLmxvbmcgc3lzX3NldGZzZ2lkMTYKLQkubG9uZyBzeXNfbGxzZWVrCS8qIDE0MCAqLwotCS5sb25nIHN5c19nZXRkZW50cwotCS5sb25nIHN5c19zZWxlY3QKLQkubG9uZyBzeXNfZmxvY2sKLQkubG9uZyBzeXNfbXN5bmMKLQkubG9uZyBzeXNfcmVhZHYJCS8qIDE0NSAqLwotCS5sb25nIHN5c193cml0ZXYKLQkubG9uZyBzeXNfZ2V0c2lkCi0JLmxvbmcgc3lzX2ZkYXRhc3luYwotCS5sb25nIHN5c19zeXNjdGwKLQkubG9uZyBzeXNfbWxvY2sJCS8qIDE1MCAqLwotCS5sb25nIHN5c19tdW5sb2NrCi0JLmxvbmcgc3lzX21sb2NrYWxsCi0JLmxvbmcgc3lzX211bmxvY2thbGwKLQkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KLQkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0gICAvKiAxNTUgKi8KLQkubG9uZyBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyCi0JLmxvbmcgc3lzX3NjaGVkX2dldHNjaGVkdWxlcgotCS5sb25nIHN5c19zY2hlZF95aWVsZAotCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4Ci0JLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLwotCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKLQkubG9uZyBzeXNfbmFub3NsZWVwCi0JLmxvbmcgc3lzX21yZW1hcAotCS5sb25nIHN5c19zZXRyZXN1aWQxNgotCS5sb25nIHN5c19nZXRyZXN1aWQxNgkvKiAxNjUgKi8KLQkubG9uZyBzeXNfdm04NgotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIE9sZCBzeXNfcXVlcnlfbW9kdWxlICovCi0JLmxvbmcgc3lzX3BvbGwKLQkubG9uZyBzeXNfbmZzc2VydmN0bAotCS5sb25nIHN5c19zZXRyZXNnaWQxNgkvKiAxNzAgKi8KLQkubG9uZyBzeXNfZ2V0cmVzZ2lkMTYKLQkubG9uZyBzeXNfcHJjdGwKLQkubG9uZyBzeXNfcnRfc2lncmV0dXJuCi0JLmxvbmcgc3lzX3J0X3NpZ2FjdGlvbgotCS5sb25nIHN5c19ydF9zaWdwcm9jbWFzawkvKiAxNzUgKi8KLQkubG9uZyBzeXNfcnRfc2lncGVuZGluZwotCS5sb25nIHN5c19ydF9zaWd0aW1lZHdhaXQKLQkubG9uZyBzeXNfcnRfc2lncXVldWVpbmZvCi0JLmxvbmcgc3lzX3J0X3NpZ3N1c3BlbmQKLQkubG9uZyBzeXNfcHJlYWQ2NAkvKiAxODAgKi8KLQkubG9uZyBzeXNfcHdyaXRlNjQKLQkubG9uZyBzeXNfY2hvd24xNgotCS5sb25nIHN5c19nZXRjd2QKLQkubG9uZyBzeXNfY2FwZ2V0Ci0JLmxvbmcgc3lzX2NhcHNldAkvKiAxODUgKi8KLQkubG9uZyBzeXNfc2lnYWx0c3RhY2sKLQkubG9uZyBzeXNfc2VuZGZpbGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3Igc3RyZWFtczEgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3Igc3RyZWFtczIgKi8KLQkubG9uZyBzeXNfdmZvcmsJCS8qIDE5MCAqLwotCS5sb25nIHN5c19nZXRybGltaXQKLQkubG9uZyBzeXNfbW1hcDIKLQkubG9uZyBzeXNfdHJ1bmNhdGU2NAotCS5sb25nIHN5c19mdHJ1bmNhdGU2NAotCS5sb25nIHN5c19zdGF0NjQJLyogMTk1ICovCi0JLmxvbmcgc3lzX2xzdGF0NjQKLQkubG9uZyBzeXNfZnN0YXQ2NAotCS5sb25nIHN5c19sY2hvd24KLQkubG9uZyBzeXNfZ2V0dWlkCi0JLmxvbmcgc3lzX2dldGdpZAkvKiAyMDAgKi8KLQkubG9uZyBzeXNfZ2V0ZXVpZAotCS5sb25nIHN5c19nZXRlZ2lkCi0JLmxvbmcgc3lzX3NldHJldWlkCi0JLmxvbmcgc3lzX3NldHJlZ2lkCi0JLmxvbmcgc3lzX2dldGdyb3VwcwkvKiAyMDUgKi8KLQkubG9uZyBzeXNfc2V0Z3JvdXBzCi0JLmxvbmcgc3lzX2ZjaG93bgotCS5sb25nIHN5c19zZXRyZXN1aWQKLQkubG9uZyBzeXNfZ2V0cmVzdWlkCi0JLmxvbmcgc3lzX3NldHJlc2dpZAkvKiAyMTAgKi8KLQkubG9uZyBzeXNfZ2V0cmVzZ2lkCi0JLmxvbmcgc3lzX2Nob3duCi0JLmxvbmcgc3lzX3NldHVpZAotCS5sb25nIHN5c19zZXRnaWQKLQkubG9uZyBzeXNfc2V0ZnN1aWQJLyogMjE1ICovCi0JLmxvbmcgc3lzX3NldGZzZ2lkCi0JLmxvbmcgc3lzX3Bpdm90X3Jvb3QKLQkubG9uZyBzeXNfbWluY29yZQotCS5sb25nIHN5c19tYWR2aXNlCi0JLmxvbmcgc3lzX2dldGRlbnRzNjQJLyogMjIwICovCi0JLmxvbmcgc3lzX2ZjbnRsNjQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3IgVFVYICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfZ2V0dGlkCi0JLmxvbmcgc3lzX3JlYWRhaGVhZAkvKiAyMjUgKi8KLQkubG9uZyBzeXNfc2V0eGF0dHIKLQkubG9uZyBzeXNfbHNldHhhdHRyCi0JLmxvbmcgc3lzX2ZzZXR4YXR0cgotCS5sb25nIHN5c19nZXR4YXR0cgotCS5sb25nIHN5c19sZ2V0eGF0dHIJLyogMjMwICovCi0JLmxvbmcgc3lzX2ZnZXR4YXR0cgotCS5sb25nIHN5c19saXN0eGF0dHIKLQkubG9uZyBzeXNfbGxpc3R4YXR0cgotCS5sb25nIHN5c19mbGlzdHhhdHRyCi0JLmxvbmcgc3lzX3JlbW92ZXhhdHRyCS8qIDIzNSAqLwotCS5sb25nIHN5c19scmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnJlbW92ZXhhdHRyCi0JLmxvbmcgc3lzX3RraWxsCi0JLmxvbmcgc3lzX3NlbmRmaWxlNjQKLQkubG9uZyBzeXNfZnV0ZXgJCS8qIDI0MCAqLwotCS5sb25nIHN5c19zY2hlZF9zZXRhZmZpbml0eQotCS5sb25nIHN5c19zY2hlZF9nZXRhZmZpbml0eQotCS5sb25nIHN5c19zZXRfdGhyZWFkX2FyZWEKLQkubG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhCi0JLmxvbmcgc3lzX2lvX3NldHVwCS8qIDI0NSAqLwotCS5sb25nIHN5c19pb19kZXN0cm95Ci0JLmxvbmcgc3lzX2lvX2dldGV2ZW50cwotCS5sb25nIHN5c19pb19zdWJtaXQKLQkubG9uZyBzeXNfaW9fY2FuY2VsCi0JLmxvbmcgc3lzX2ZhZHZpc2U2NAkvKiAyNTAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19leGl0X2dyb3VwCi0JLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCi0JLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQotCS5sb25nIHN5c19lcG9sbF9jdGwJLyogMjU1ICovCi0JLmxvbmcgc3lzX2Vwb2xsX3dhaXQKLSAJLmxvbmcgc3lzX3JlbWFwX2ZpbGVfcGFnZXMKLSAJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcwotIAkubG9uZyBzeXNfdGltZXJfY3JlYXRlCi0gCS5sb25nIHN5c190aW1lcl9zZXR0aW1lCQkvKiAyNjAgKi8KLSAJLmxvbmcgc3lzX3RpbWVyX2dldHRpbWUKLSAJLmxvbmcgc3lzX3RpbWVyX2dldG92ZXJydW4KLSAJLmxvbmcgc3lzX3RpbWVyX2RlbGV0ZQotIAkubG9uZyBzeXNfY2xvY2tfc2V0dGltZQotIAkubG9uZyBzeXNfY2xvY2tfZ2V0dGltZQkJLyogMjY1ICovCi0gCS5sb25nIHN5c19jbG9ja19nZXRyZXMKLSAJLmxvbmcgc3lzX2Nsb2NrX25hbm9zbGVlcAotCS5sb25nIHN5c19zdGF0ZnM2NAotCS5sb25nIHN5c19mc3RhdGZzNjQJCi0JLmxvbmcgc3lzX3Rna2lsbAkvKiAyNzAgKi8KLQkubG9uZyBzeXNfdXRpbWVzCi0gCS5sb25nIHN5c19mYWR2aXNlNjRfNjQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfdnNlcnZlciAqLwotCS5sb25nIHN5c19tYmluZAotCS5sb25nIHN5c19nZXRfbWVtcG9saWN5Ci0JLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kKLQkubG9uZyBzeXNfbXFfb3BlbgotCS5sb25nIHN5c19tcV91bmxpbmsKLQkubG9uZyBzeXNfbXFfdGltZWRzZW5kCi0JLmxvbmcgc3lzX21xX3RpbWVkcmVjZWl2ZQkvKiAyODAgKi8KLQkubG9uZyBzeXNfbXFfbm90aWZ5Ci0JLmxvbmcgc3lzX21xX2dldHNldGF0dHIKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogcmVzZXJ2ZWQgZm9yIGtleGVjICovCi0JLmxvbmcgc3lzX3dhaXRpZAotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAyODUgKi8gLyogYXZhaWxhYmxlICovCi0JLmxvbmcgc3lzX2FkZF9rZXkKLQkubG9uZyBzeXNfcmVxdWVzdF9rZXkKLQkubG9uZyBzeXNfa2V5Y3RsCisjaW5jbHVkZSAic3lzY2FsbF90YWJsZS5TIgogCiBzeXNjYWxsX3RhYmxlX3NpemU9KC4tc3lzX2NhbGxfdGFibGUpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCmluZGV4IGQyNzNmZDcuLmU5NjZmYzhjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2kzODYva2VybmVsL2hlYWQuUwpAQCAtMzgwLDYgKzM4MCw3IEBACiAJQUxJR04KIGlnbm9yZV9pbnQ6CiAJY2xkCisjaWZkZWYgQ09ORklHX1BSSU5USwogCXB1c2hsICVlYXgKIAlwdXNobCAlZWN4CiAJcHVzaGwgJWVkeApAQCAtNDAwLDYgKzQwMSw3IEBACiAJcG9wbCAlZWR4CiAJcG9wbCAlZWN4CiAJcG9wbCAlZWF4CisjZW5kaWYKIAlpcmV0CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDVlMGQ1NWIuLjdhMzI0ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yMTc1LDcgKzIxNzUsNiBAQAogCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwogCQkJCXNldHVwX25taSgpOwogCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQkJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CiAJCQl9CiAJCQlyZXR1cm47CiAJCX0KQEAgLTIxOTgsNyArMjE5Nyw2IEBACiAJCQkJYWRkX3Bpbl90b19pcnEoMCwgMCwgcGluMik7CiAJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CiAJCQkJc2V0dXBfbm1pKCk7Ci0JCQkJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CiAJCQl9CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMgYi9hcmNoL2kzODYva2VybmVsL25taS5jCmluZGV4IDJmODlkMDAuLjJjMGVlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwpAQCAtMTAyLDIwICsxMDIsMjEgQEAKIAkoUDRfQ0NDUl9PVkZfUE1JMHxQNF9DQ0NSX1RIUkVTSE9MRCgxNSl8UDRfQ0NDUl9DT01QTEVNRU5UfAlcCiAJIFA0X0NDQ1JfQ09NUEFSRXxQNF9DQ0NSX1JFUVVJUkVEfFA0X0NDQ1JfRVNDUl9TRUxFQ1QoNCl8UDRfQ0NDUl9FTkFCTEUpCiAKLWludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHByZXZfbm1pX2NvdW50W05SX0NQVVNdOwogCWludCBjcHU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJ0ZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQogCQlwcmV2X25taV9jb3VudFtjcHVdID0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5fX25taV9jb3VudDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbWRlbGF5KCgxMCoxMDAwKS9ubWlfaHopOyAvLyB3YWl0IDEwIHRpY2tzCiAKLQkvKiBGSVhNRTogT25seSBib290IENQVSBpcyBvbmxpbmUgYXQgdGhpcyBzdGFnZS4gIENoZWNrIENQVXMKLSAgICAgICAgICAgYXMgdGhleSBjb21lIHVwLiAqLwogCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKICNpZmRlZiBDT05GSUdfU01QCiAJCS8qIENoZWNrIGNwdV9jYWxsaW5fbWFwIGhlcmUgYmVjYXVzZSB0aGF0IGlzIHNldApAQCAtMTM5LDYgKzE0MCw4IEBACiAKIAlyZXR1cm4gMDsKIH0KKy8qIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGxhdGVyIGluIGJvb3Qgc28gY291bnRlcnMgYXJlIHdvcmtpbmcgKi8KK2xhdGVfaW5pdGNhbGwoY2hlY2tfbm1pX3dhdGNoZG9nKTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm1pX3dhdGNoZG9nKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjIyMDNlMi4uODViZDU2ZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTYxMSw4ICs2MTEsOCBAQAogCSAqIFNhdmUgYXdheSAlZnMgYW5kICVncy4gTm8gbmVlZCB0byBzYXZlICVlcyBhbmQgJWRzLCBhcwogCSAqIHRob3NlIGFyZSBhbHdheXMga2VybmVsIHNlZ21lbnRzIHdoaWxlIGluc2lkZSB0aGUga2VybmVsLgogCSAqLwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWZzLCUwIjoiPW0iICgqKGludCAqKSZwcmV2LT5mcykpOwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWdzLCUwIjoiPW0iICgqKGludCAqKSZwcmV2LT5ncykpOworCWFzbSB2b2xhdGlsZSgibW92ICUlZnMsJTAiOiI9bSIgKHByZXYtPmZzKSk7CisJYXNtIHZvbGF0aWxlKCJtb3YgJSVncywlMCI6Ij1tIiAocHJldi0+Z3MpKTsKIAogCS8qCiAJICogUmVzdG9yZSAlZnMgYW5kICVncyBpZiBuZWVkZWQuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA1NjA2ZWM3Li5lMzRmNjUxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNTExLDcgKzUxMiw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDoJLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOgkvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKSB7CiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC01NDMsNyArNTQ0LDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CS8qIHNldCB0aGUgdHJhcCBmbGFnLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCXNldF9zaW5nbGVzdGVwKGNoaWxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDNkN2U5OTQuLjZkYzI3ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlICJtYWNoX3JlYm9vdC5oIgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdF9maXh1cHMuaD4KIAogLyoKICAqIFBvd2VyIG9mZiBmdW5jdGlvbiwgaWYgYW55CkBAIC0zNDgsNiArMzQ5LDcgQEAKIAkJLyogcmVib290aW5nIG5lZWRzIHRvIHRvdWNoIHRoZSBwYWdlIGF0IGFic29sdXRlIGFkZHIgMCAqLwogCQkqKCh1bnNpZ25lZCBzaG9ydCAqKV9fdmEoMHg0NzIpKSA9IHJlYm9vdF9tb2RlOwogCQlmb3IgKDs7KSB7CisJCQltYWNoX3JlYm9vdF9maXh1cHMoKTsgLyogZm9yIGJvYXJkIHNwZWNpZmljIGZpeHVwcyAqLwogCQkJbWFjaF9yZWJvb3QoKTsKIAkJCS8qIFRoYXQgZGlkbid0IHdvcmsgLSBmb3JjZSBhIHRyaXBsZSBmYXVsdC4uICovCiAJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGlkdCAlMCI6IDoibSIgKG5vX2lkdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdF9maXh1cHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjE4M2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3RfZml4dXBzLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvcmVib290X2ZpeHVwcy5jCisgKgorICogVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gcHV0IGJvYXJkIHNwZWNpZmljIHJlYm9vdCBmaXh1cHMuCisgKgorICogTGlzdCBvZiBzdXBwb3J0ZWQgZml4dXBzOgorICogZ2VvZGUtZ3gxL2NzNTUzMGEgLSBKYXlhIEt1bWFyIDxqYXlhbGtAaW50d29ya3MuYml6PgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK3N0YXRpYyB2b2lkIGNzNTUzMGFfd2FybV9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIHdyaXRpbmcgMSB0byB0aGUgcmVzZXQgY29udHJvbCByZWdpc3RlciwgMHg0NCBjYXVzZXMgdGhlCisJY3M1NTMwYSB0byBwZXJmb3JtIGEgc3lzdGVtIHdhcm0gcmVzZXQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCAweDEpOworCXVkZWxheSg1MCk7IC8qIHNob3VsZG4ndCBnZXQgaGVyZSBidXQgYmUgc2FmZSBhbmQgc3Bpbi1hLXdoaWxlICovCisJcmV0dXJuOworfQorCitzdHJ1Y3QgZGV2aWNlX2ZpeHVwIHsKKwl1bnNpZ25lZCBpbnQgdmVuZG9yOworCXVuc2lnbmVkIGludCBkZXZpY2U7CisJdm9pZCAoKnJlYm9vdF9maXh1cCkoc3RydWN0IHBjaV9kZXYgKik7Cit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9maXh1cCBmaXh1cHNfdGFibGVbXSA9IHsKK3sgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWSwgY3M1NTMwYV93YXJtX3Jlc2V0IH0sCit9OworCisvKgorICogd2Ugc2VlIGlmIGFueSBmaXh1cCBpcyBhdmFpbGFibGUgZm9yIG91ciBjdXJyZW50IGhhcmR3YXJlLiBpZiB0aGVyZQorICogaXMgYSBmaXh1cCwgd2UgY2FsbCBpdCBhbmQgd2UgZXhwZWN0IHRvIG5ldmVyIHJldHVybiBmcm9tIGl0LiBpZiB3ZQorICogZG8gcmV0dXJuLCB3ZSBrZWVwIGxvb2tpbmcgYW5kIHRoZW4gZXZlbnR1YWxseSBmYWxsIGJhY2sgdG8gdGhlCisgKiBzdGFuZGFyZCBtYWNoX3JlYm9vdCBvbiByZXR1cm4uCisgKi8KK3ZvaWQgbWFjaF9yZWJvb3RfZml4dXBzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9maXh1cCAqY3VyOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IChzaXplb2YoZml4dXBzX3RhYmxlKS9zaXplb2YoZml4dXBzX3RhYmxlWzBdKSk7IGkrKykgeworCQljdXIgPSAmKGZpeHVwc190YWJsZVtpXSk7CisJCWRldiA9IHBjaV9nZXRfZGV2aWNlKGN1ci0+dmVuZG9yLCBjdXItPmRldmljZSwgMCk7CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisKKwkJY3VyLT5yZWJvb3RfZml4dXAoZGV2KTsKKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJObyByZWJvb3QgZml4dXAgZm91bmQgZm9yIHlvdXIgaGFyZHdhcmVcbiIpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGZkMzZkMmYuLmNiZWE3YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMDg5LDkgKzEwODksNiBAQAogCQl9CiAJfQogCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykKLQkJY2hlY2tfbm1pX3dhdGNoZG9nKCk7Ci0KIAlzbXBib290X3NldHVwX2lvX2FwaWMoKTsKIAogCXNldHVwX2Jvb3RfQVBJQ19jbG9jaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2QxZWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTAsMCArMSwyOTEgQEAKKy5kYXRhCitFTlRSWShzeXNfY2FsbF90YWJsZSkKKwkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgLSBvbGQgInNldHVwKCkiIHN5c3RlbSBjYWxsLCB1c2VkIGZvciByZXN0YXJ0aW5nICovCisJLmxvbmcgc3lzX2V4aXQKKwkubG9uZyBzeXNfZm9yaworCS5sb25nIHN5c19yZWFkCisJLmxvbmcgc3lzX3dyaXRlCisJLmxvbmcgc3lzX29wZW4JCS8qIDUgKi8KKwkubG9uZyBzeXNfY2xvc2UKKwkubG9uZyBzeXNfd2FpdHBpZAorCS5sb25nIHN5c19jcmVhdAorCS5sb25nIHN5c19saW5rCisJLmxvbmcgc3lzX3VubGluawkvKiAxMCAqLworCS5sb25nIHN5c19leGVjdmUKKwkubG9uZyBzeXNfY2hkaXIKKwkubG9uZyBzeXNfdGltZQorCS5sb25nIHN5c19ta25vZAorCS5sb25nIHN5c19jaG1vZAkJLyogMTUgKi8KKwkubG9uZyBzeXNfbGNob3duMTYKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgYnJlYWsgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc3RhdAorCS5sb25nIHN5c19sc2VlaworCS5sb25nIHN5c19nZXRwaWQJLyogMjAgKi8KKwkubG9uZyBzeXNfbW91bnQKKwkubG9uZyBzeXNfb2xkdW1vdW50CisJLmxvbmcgc3lzX3NldHVpZDE2CisJLmxvbmcgc3lzX2dldHVpZDE2CisJLmxvbmcgc3lzX3N0aW1lCQkvKiAyNSAqLworCS5sb25nIHN5c19wdHJhY2UKKwkubG9uZyBzeXNfYWxhcm0KKwkubG9uZyBzeXNfZnN0YXQKKwkubG9uZyBzeXNfcGF1c2UKKwkubG9uZyBzeXNfdXRpbWUJCS8qIDMwICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgZ3R0eSBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19hY2Nlc3MKKwkubG9uZyBzeXNfbmljZQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDM1IC0gb2xkIGZ0aW1lIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3N5bmMKKwkubG9uZyBzeXNfa2lsbAorCS5sb25nIHN5c19yZW5hbWUKKwkubG9uZyBzeXNfbWtkaXIKKwkubG9uZyBzeXNfcm1kaXIJCS8qIDQwICovCisJLmxvbmcgc3lzX2R1cAorCS5sb25nIHN5c19waXBlCisJLmxvbmcgc3lzX3RpbWVzCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIHByb2Ygc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfYnJrCQkvKiA0NSAqLworCS5sb25nIHN5c19zZXRnaWQxNgorCS5sb25nIHN5c19nZXRnaWQxNgorCS5sb25nIHN5c19zaWduYWwKKwkubG9uZyBzeXNfZ2V0ZXVpZDE2CisJLmxvbmcgc3lzX2dldGVnaWQxNgkvKiA1MCAqLworCS5sb25nIHN5c19hY2N0CisJLmxvbmcgc3lzX3Vtb3VudAkvKiByZWN5Y2xlZCBuZXZlciB1c2VkIHBoeXMoKSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBsb2NrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX2lvY3RsCisJLmxvbmcgc3lzX2ZjbnRsCQkvKiA1NSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc2V0cGdpZAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfb2xkdW5hbWUKKwkubG9uZyBzeXNfdW1hc2sJCS8qIDYwICovCisJLmxvbmcgc3lzX2Nocm9vdAorCS5sb25nIHN5c191c3RhdAorCS5sb25nIHN5c19kdXAyCisJLmxvbmcgc3lzX2dldHBwaWQKKwkubG9uZyBzeXNfZ2V0cGdycAkvKiA2NSAqLworCS5sb25nIHN5c19zZXRzaWQKKwkubG9uZyBzeXNfc2lnYWN0aW9uCisJLmxvbmcgc3lzX3NnZXRtYXNrCisJLmxvbmcgc3lzX3NzZXRtYXNrCisJLmxvbmcgc3lzX3NldHJldWlkMTYJLyogNzAgKi8KKwkubG9uZyBzeXNfc2V0cmVnaWQxNgorCS5sb25nIHN5c19zaWdzdXNwZW5kCisJLmxvbmcgc3lzX3NpZ3BlbmRpbmcKKwkubG9uZyBzeXNfc2V0aG9zdG5hbWUKKwkubG9uZyBzeXNfc2V0cmxpbWl0CS8qIDc1ICovCisJLmxvbmcgc3lzX29sZF9nZXRybGltaXQKKwkubG9uZyBzeXNfZ2V0cnVzYWdlCisJLmxvbmcgc3lzX2dldHRpbWVvZmRheQorCS5sb25nIHN5c19zZXR0aW1lb2ZkYXkKKwkubG9uZyBzeXNfZ2V0Z3JvdXBzMTYJLyogODAgKi8KKwkubG9uZyBzeXNfc2V0Z3JvdXBzMTYKKwkubG9uZyBvbGRfc2VsZWN0CisJLmxvbmcgc3lzX3N5bWxpbmsKKwkubG9uZyBzeXNfbHN0YXQKKwkubG9uZyBzeXNfcmVhZGxpbmsJLyogODUgKi8KKwkubG9uZyBzeXNfdXNlbGliCisJLmxvbmcgc3lzX3N3YXBvbgorCS5sb25nIHN5c19yZWJvb3QKKwkubG9uZyBvbGRfcmVhZGRpcgorCS5sb25nIG9sZF9tbWFwCQkvKiA5MCAqLworCS5sb25nIHN5c19tdW5tYXAKKwkubG9uZyBzeXNfdHJ1bmNhdGUKKwkubG9uZyBzeXNfZnRydW5jYXRlCisJLmxvbmcgc3lzX2ZjaG1vZAorCS5sb25nIHN5c19mY2hvd24xNgkvKiA5NSAqLworCS5sb25nIHN5c19nZXRwcmlvcml0eQorCS5sb25nIHN5c19zZXRwcmlvcml0eQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc3RhdGZzCisJLmxvbmcgc3lzX2ZzdGF0ZnMJLyogMTAwICovCisJLmxvbmcgc3lzX2lvcGVybQorCS5sb25nIHN5c19zb2NrZXRjYWxsCisJLmxvbmcgc3lzX3N5c2xvZworCS5sb25nIHN5c19zZXRpdGltZXIKKwkubG9uZyBzeXNfZ2V0aXRpbWVyCS8qIDEwNSAqLworCS5sb25nIHN5c19uZXdzdGF0CisJLmxvbmcgc3lzX25ld2xzdGF0CisJLmxvbmcgc3lzX25ld2ZzdGF0CisJLmxvbmcgc3lzX3VuYW1lCisJLmxvbmcgc3lzX2lvcGwJCS8qIDExMCAqLworCS5sb25nIHN5c192aGFuZ3VwCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkICJpZGxlIiBzeXN0ZW0gY2FsbCAqLworCS5sb25nIHN5c192bTg2b2xkCisJLmxvbmcgc3lzX3dhaXQ0CisJLmxvbmcgc3lzX3N3YXBvZmYJLyogMTE1ICovCisJLmxvbmcgc3lzX3N5c2luZm8KKwkubG9uZyBzeXNfaXBjCisJLmxvbmcgc3lzX2ZzeW5jCisJLmxvbmcgc3lzX3NpZ3JldHVybgorCS5sb25nIHN5c19jbG9uZQkJLyogMTIwICovCisJLmxvbmcgc3lzX3NldGRvbWFpbm5hbWUKKwkubG9uZyBzeXNfbmV3dW5hbWUKKwkubG9uZyBzeXNfbW9kaWZ5X2xkdAorCS5sb25nIHN5c19hZGp0aW1leAorCS5sb25nIHN5c19tcHJvdGVjdAkvKiAxMjUgKi8KKwkubG9uZyBzeXNfc2lncHJvY21hc2sKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgImNyZWF0ZV9tb2R1bGUiICovCisJLmxvbmcgc3lzX2luaXRfbW9kdWxlCisJLmxvbmcgc3lzX2RlbGV0ZV9tb2R1bGUKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxMzA6CW9sZCAiZ2V0X2tlcm5lbF9zeW1zIiAqLworCS5sb25nIHN5c19xdW90YWN0bAorCS5sb25nIHN5c19nZXRwZ2lkCisJLmxvbmcgc3lzX2ZjaGRpcgorCS5sb25nIHN5c19iZGZsdXNoCisJLmxvbmcgc3lzX3N5c2ZzCQkvKiAxMzUgKi8KKwkubG9uZyBzeXNfcGVyc29uYWxpdHkKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiByZXNlcnZlZCBmb3IgYWZzX3N5c2NhbGwgKi8KKwkubG9uZyBzeXNfc2V0ZnN1aWQxNgorCS5sb25nIHN5c19zZXRmc2dpZDE2CisJLmxvbmcgc3lzX2xsc2VlawkvKiAxNDAgKi8KKwkubG9uZyBzeXNfZ2V0ZGVudHMKKwkubG9uZyBzeXNfc2VsZWN0CisJLmxvbmcgc3lzX2Zsb2NrCisJLmxvbmcgc3lzX21zeW5jCisJLmxvbmcgc3lzX3JlYWR2CQkvKiAxNDUgKi8KKwkubG9uZyBzeXNfd3JpdGV2CisJLmxvbmcgc3lzX2dldHNpZAorCS5sb25nIHN5c19mZGF0YXN5bmMKKwkubG9uZyBzeXNfc3lzY3RsCisJLmxvbmcgc3lzX21sb2NrCQkvKiAxNTAgKi8KKwkubG9uZyBzeXNfbXVubG9jaworCS5sb25nIHN5c19tbG9ja2FsbAorCS5sb25nIHN5c19tdW5sb2NrYWxsCisJLmxvbmcgc3lzX3NjaGVkX3NldHBhcmFtCisJLmxvbmcgc3lzX3NjaGVkX2dldHBhcmFtICAgLyogMTU1ICovCisJLmxvbmcgc3lzX3NjaGVkX3NldHNjaGVkdWxlcgorCS5sb25nIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIKKwkubG9uZyBzeXNfc2NoZWRfeWllbGQKKwkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAvKiAxNjAgKi8KKwkubG9uZyBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisJLmxvbmcgc3lzX25hbm9zbGVlcAorCS5sb25nIHN5c19tcmVtYXAKKwkubG9uZyBzeXNfc2V0cmVzdWlkMTYKKwkubG9uZyBzeXNfZ2V0cmVzdWlkMTYJLyogMTY1ICovCisJLmxvbmcgc3lzX3ZtODYKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBPbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLworCS5sb25nIHN5c19wb2xsCisJLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCisJLmxvbmcgc3lzX2dldHJlc2dpZDE2CisJLmxvbmcgc3lzX3ByY3RsCisJLmxvbmcgc3lzX3J0X3NpZ3JldHVybgorCS5sb25nIHN5c19ydF9zaWdhY3Rpb24KKwkubG9uZyBzeXNfcnRfc2lncHJvY21hc2sJLyogMTc1ICovCisJLmxvbmcgc3lzX3J0X3NpZ3BlbmRpbmcKKwkubG9uZyBzeXNfcnRfc2lndGltZWR3YWl0CisJLmxvbmcgc3lzX3J0X3NpZ3F1ZXVlaW5mbworCS5sb25nIHN5c19ydF9zaWdzdXNwZW5kCisJLmxvbmcgc3lzX3ByZWFkNjQJLyogMTgwICovCisJLmxvbmcgc3lzX3B3cml0ZTY0CisJLmxvbmcgc3lzX2Nob3duMTYKKwkubG9uZyBzeXNfZ2V0Y3dkCisJLmxvbmcgc3lzX2NhcGdldAorCS5sb25nIHN5c19jYXBzZXQJLyogMTg1ICovCisJLmxvbmcgc3lzX3NpZ2FsdHN0YWNrCisJLmxvbmcgc3lzX3NlbmRmaWxlCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIHN0cmVhbXMxICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIHN0cmVhbXMyICovCisJLmxvbmcgc3lzX3Zmb3JrCQkvKiAxOTAgKi8KKwkubG9uZyBzeXNfZ2V0cmxpbWl0CisJLmxvbmcgc3lzX21tYXAyCisJLmxvbmcgc3lzX3RydW5jYXRlNjQKKwkubG9uZyBzeXNfZnRydW5jYXRlNjQKKwkubG9uZyBzeXNfc3RhdDY0CS8qIDE5NSAqLworCS5sb25nIHN5c19sc3RhdDY0CisJLmxvbmcgc3lzX2ZzdGF0NjQKKwkubG9uZyBzeXNfbGNob3duCisJLmxvbmcgc3lzX2dldHVpZAorCS5sb25nIHN5c19nZXRnaWQJLyogMjAwICovCisJLmxvbmcgc3lzX2dldGV1aWQKKwkubG9uZyBzeXNfZ2V0ZWdpZAorCS5sb25nIHN5c19zZXRyZXVpZAorCS5sb25nIHN5c19zZXRyZWdpZAorCS5sb25nIHN5c19nZXRncm91cHMJLyogMjA1ICovCisJLmxvbmcgc3lzX3NldGdyb3VwcworCS5sb25nIHN5c19mY2hvd24KKwkubG9uZyBzeXNfc2V0cmVzdWlkCisJLmxvbmcgc3lzX2dldHJlc3VpZAorCS5sb25nIHN5c19zZXRyZXNnaWQJLyogMjEwICovCisJLmxvbmcgc3lzX2dldHJlc2dpZAorCS5sb25nIHN5c19jaG93bgorCS5sb25nIHN5c19zZXR1aWQKKwkubG9uZyBzeXNfc2V0Z2lkCisJLmxvbmcgc3lzX3NldGZzdWlkCS8qIDIxNSAqLworCS5sb25nIHN5c19zZXRmc2dpZAorCS5sb25nIHN5c19waXZvdF9yb290CisJLmxvbmcgc3lzX21pbmNvcmUKKwkubG9uZyBzeXNfbWFkdmlzZQorCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLworCS5sb25nIHN5c19mY250bDY0CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIFRVWCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCisJLmxvbmcgc3lzX2dldHRpZAorCS5sb25nIHN5c19yZWFkYWhlYWQJLyogMjI1ICovCisJLmxvbmcgc3lzX3NldHhhdHRyCisJLmxvbmcgc3lzX2xzZXR4YXR0cgorCS5sb25nIHN5c19mc2V0eGF0dHIKKwkubG9uZyBzeXNfZ2V0eGF0dHIKKwkubG9uZyBzeXNfbGdldHhhdHRyCS8qIDIzMCAqLworCS5sb25nIHN5c19mZ2V0eGF0dHIKKwkubG9uZyBzeXNfbGlzdHhhdHRyCisJLmxvbmcgc3lzX2xsaXN0eGF0dHIKKwkubG9uZyBzeXNfZmxpc3R4YXR0cgorCS5sb25nIHN5c19yZW1vdmV4YXR0cgkvKiAyMzUgKi8KKwkubG9uZyBzeXNfbHJlbW92ZXhhdHRyCisJLmxvbmcgc3lzX2ZyZW1vdmV4YXR0cgorCS5sb25nIHN5c190a2lsbAorCS5sb25nIHN5c19zZW5kZmlsZTY0CisJLmxvbmcgc3lzX2Z1dGV4CQkvKiAyNDAgKi8KKwkubG9uZyBzeXNfc2NoZWRfc2V0YWZmaW5pdHkKKwkubG9uZyBzeXNfc2NoZWRfZ2V0YWZmaW5pdHkKKwkubG9uZyBzeXNfc2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX2dldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19pb19zZXR1cAkvKiAyNDUgKi8KKwkubG9uZyBzeXNfaW9fZGVzdHJveQorCS5sb25nIHN5c19pb19nZXRldmVudHMKKwkubG9uZyBzeXNfaW9fc3VibWl0CisJLmxvbmcgc3lzX2lvX2NhbmNlbAorCS5sb25nIHN5c19mYWR2aXNlNjQJLyogMjUwICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfZXhpdF9ncm91cAorCS5sb25nIHN5c19sb29rdXBfZGNvb2tpZQorCS5sb25nIHN5c19lcG9sbF9jcmVhdGUKKwkubG9uZyBzeXNfZXBvbGxfY3RsCS8qIDI1NSAqLworCS5sb25nIHN5c19lcG9sbF93YWl0CisgCS5sb25nIHN5c19yZW1hcF9maWxlX3BhZ2VzCisgCS5sb25nIHN5c19zZXRfdGlkX2FkZHJlc3MKKyAJLmxvbmcgc3lzX3RpbWVyX2NyZWF0ZQorIAkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkJLyogMjYwICovCisgCS5sb25nIHN5c190aW1lcl9nZXR0aW1lCisgCS5sb25nIHN5c190aW1lcl9nZXRvdmVycnVuCisgCS5sb25nIHN5c190aW1lcl9kZWxldGUKKyAJLmxvbmcgc3lzX2Nsb2NrX3NldHRpbWUKKyAJLmxvbmcgc3lzX2Nsb2NrX2dldHRpbWUJCS8qIDI2NSAqLworIAkubG9uZyBzeXNfY2xvY2tfZ2V0cmVzCisgCS5sb25nIHN5c19jbG9ja19uYW5vc2xlZXAKKwkubG9uZyBzeXNfc3RhdGZzNjQKKwkubG9uZyBzeXNfZnN0YXRmczY0CisJLmxvbmcgc3lzX3Rna2lsbAkvKiAyNzAgKi8KKwkubG9uZyBzeXNfdXRpbWVzCisgCS5sb25nIHN5c19mYWR2aXNlNjRfNjQKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfdnNlcnZlciAqLworCS5sb25nIHN5c19tYmluZAorCS5sb25nIHN5c19nZXRfbWVtcG9saWN5CisJLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kKKwkubG9uZyBzeXNfbXFfb3BlbgorCS5sb25nIHN5c19tcV91bmxpbmsKKwkubG9uZyBzeXNfbXFfdGltZWRzZW5kCisJLmxvbmcgc3lzX21xX3RpbWVkcmVjZWl2ZQkvKiAyODAgKi8KKwkubG9uZyBzeXNfbXFfbm90aWZ5CisJLmxvbmcgc3lzX21xX2dldHNldGF0dHIKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogcmVzZXJ2ZWQgZm9yIGtleGVjICovCisJLmxvbmcgc3lzX3dhaXRpZAorCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAyODUgKi8gLyogYXZhaWxhYmxlICovCisJLmxvbmcgc3lzX2FkZF9rZXkKKwkubG9uZyBzeXNfcmVxdWVzdF9rZXkKKwkubG9uZyBzeXNfa2V5Y3RsCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCmluZGV4IDRkNzViMzcuLmEwZGNiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCkBAIC00NDEsNyArNDQxLDcgQEAKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJCS14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKIAotCWlmIChocGV0X2VuYWJsZSgpID49IDApIHsKKwlpZiAoKGhwZXRfZW5hYmxlKCkgPj0gMCkgJiYgaHBldF91c2VfdGltZXIpIHsKIAkJcHJpbnRrKCJVc2luZyBIUEVUIGZvciBiYXNlLXRpbWVyXG4iKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWVfaHBldC5jCmluZGV4IDI0NGEzMWIuLjEwYTBjYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYwpAQCAtMjYsNiArMjYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9wZXJpb2Q7CS8qIGZzZWNzIC8gSFBFVCBjbG9jayAqLwogdW5zaWduZWQgbG9uZyBocGV0X3RpY2s7CQkvKiBocGV0IGNsa3MgY291bnQgcGVyIHRpY2sgKi8KIHVuc2lnbmVkIGxvbmcgaHBldF9hZGRyZXNzOwkJLyogaHBldCBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KK2ludCBocGV0X3VzZV90aW1lcjsKIAogc3RhdGljIGludCB1c2VfaHBldDsgCQkvKiBjYW4gYmUgdXNlZCBmb3IgcnVudGltZSBjaGVjayBvZiBocGV0ICovCiBzdGF0aWMgaW50IGJvb3RfaHBldF9kaXNhYmxlOyAJLyogYm9vdHRpbWUgb3ZlcnJpZGUgZm9yIEhQRVQgdGltZXIgKi8KQEAgLTczLDI3ICs3NCwzMCBAQAogCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUik7CiAJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSICsgNCk7CiAKLQkvKgotCSAqIFNldCB1cCB0aW1lciAwLCBhcyBwZXJpb2RpYyB3aXRoIGZpcnN0IGludGVycnVwdCB0byBoYXBwZW4gYXQKLQkgKiBocGV0X3RpY2ssIGFuZCBwZXJpb2QgYWxzbyBocGV0X3RpY2suCi0JICovCi0JY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7Ci0JY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8Ci0JICAgICAgIEhQRVRfVE5fU0VUVkFMIHwgSFBFVF9UTl8zMkJJVDsKLQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKKwlpZiAoaHBldF91c2VfdGltZXIpIHsKKwkJLyoKKwkJICogU2V0IHVwIHRpbWVyIDAsIGFzIHBlcmlvZGljIHdpdGggZmlyc3QgaW50ZXJydXB0IHRvIGhhcHBlbiBhdAorCQkgKiBocGV0X3RpY2ssIGFuZCBwZXJpb2QgYWxzbyBocGV0X3RpY2suCisJCSAqLworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKKwkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8CisJCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOwogCi0JLyoKLQkgKiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgd3JpdGluZyBUTl9TRVRWQUwgdG8gdGhlIGNvbmZpZyByZWdpc3RlciBzZXRzCi0JICogdGhlIGNvdW50ZXIgdmFsdWUsIHRoZSBzZWNvbmQgd3JpdGUgc2V0cyB0aGUgdGhyZXNob2xkLgotCSAqLwotCWhwZXRfd3JpdGVsKHRpY2ssIEhQRVRfVDBfQ01QKTsKLQlocGV0X3dyaXRlbCh0aWNrLCBIUEVUX1QwX0NNUCk7Ci0KKwkJLyoKKwkJICogVGhlIGZpcnN0IHdyaXRlIGFmdGVyIHdyaXRpbmcgVE5fU0VUVkFMIHRvIHRoZSBjb25maWcgcmVnaXN0ZXIgc2V0cworCQkgKiB0aGUgY291bnRlciB2YWx1ZSwgdGhlIHNlY29uZCB3cml0ZSBzZXRzIHRoZSB0aHJlc2hvbGQuCisJCSAqLworCQlocGV0X3dyaXRlbCh0aWNrLCBIUEVUX1QwX0NNUCk7CisJCWhwZXRfd3JpdGVsKHRpY2ssIEhQRVRfVDBfQ01QKTsKKwl9CiAJLyoKICAJICogR28hCiAgCSAqLwogCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwotCWNmZyB8PSBIUEVUX0NGR19FTkFCTEUgfCBIUEVUX0NGR19MRUdBQ1k7CisJaWYgKGhwZXRfdXNlX3RpbWVyKQorCQljZmcgfD0gSFBFVF9DRkdfTEVHQUNZOworCWNmZyB8PSBIUEVUX0NGR19FTkFCTEU7CiAJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyOCwxMiArMTMyLDExIEBACiAJICogSG93ZXZlciwgd2UgY2FuIGRvIHdpdGggb25lIHRpbWVyIG90aGVyd2lzZSB1c2luZyB0aGUKIAkgKiB0aGUgc2luZ2xlIEhQRVQgdGltZXIgZm9yIHN5c3RlbSB0aW1lLgogCSAqLwotCWlmICgKICNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwotCQkhKGlkICYgSFBFVF9JRF9OVU1CRVIpIHx8Ci0jZW5kaWYKLQkgICAgIShpZCAmIEhQRVRfSURfTEVHU1VQKSkKKwlpZiAoIShpZCAmIEhQRVRfSURfTlVNQkVSKSkKIAkJcmV0dXJuIC0xOworI2VuZGlmCisKIAogCWhwZXRfcGVyaW9kID0gaHBldF9yZWFkbChIUEVUX1BFUklPRCk7CiAJaWYgKChocGV0X3BlcmlvZCA8IEhQRVRfTUlOX1BFUklPRCkgfHwgKGhwZXRfcGVyaW9kID4gSFBFVF9NQVhfUEVSSU9EKSkKQEAgLTE1Miw2ICsxNTUsOCBAQAogCWlmIChocGV0X3RpY2tfcmVtID4gKGhwZXRfcGVyaW9kID4+IDEpKQogCQlocGV0X3RpY2srKzsgLyogcm91bmRpbmcgdGhlIHJlc3VsdCAqLwogCisJaHBldF91c2VfdGltZXIgPSBpZCAmIEhQRVRfSURfTEVHU1VQOworCiAJaWYgKGhwZXRfdGltZXJfc3RvcF9zZXRfZ28oaHBldF90aWNrKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0yMDIsNyArMjA3LDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jd2FpdF90aW1lcl90aWNrID0gd2FpdF9ocGV0X3RpY2s7CisJaWYgKGhwZXRfdXNlX3RpbWVyKQorCQl3YWl0X3RpbWVyX3RpY2sgPSB3YWl0X2hwZXRfdGljazsKICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfaHBldC5jIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfaHBldC5jCmluZGV4IDcxMzEzNGUuLmY3NzhmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX2hwZXQuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9ocGV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIAogCWVheCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKIAllYXggLT0gaHBldF9sYXN0OwkvKiBocGV0IGRlbHRhICovCi0KKwllYXggPSBtaW4oaHBldF90aWNrLCBlYXgpOwogCS8qCiAgICAgICAgICAqIFRpbWUgb2Zmc2V0ID0gKGhwZXQgZGVsdGEpICogKCB1c2VjcyBwZXIgSFBFVCBjbG9jayApCiAJICogICAgICAgICAgICAgPSAoaHBldCBkZWx0YSkgKiAoIHVzZWNzIHBlciB0aWNrIC8gSFBFVCBjbG9ja3MgcGVyIHRpY2spCkBAIC0xMDUsOSArMTA1LDEyIEBACiAJbGFzdF9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZylsYXN0X3RzY19oaWdoPDwzMil8bGFzdF90c2NfbG93OwogCXJkdHNjKGxhc3RfdHNjX2xvdywgbGFzdF90c2NfaGlnaCk7CiAKLQlvZmZzZXQgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ01QKSAtIGhwZXRfdGljazsKLQlpZiAodW5saWtlbHkoKChvZmZzZXQgLSBocGV0X2xhc3QpID4gaHBldF90aWNrKSAmJiAoaHBldF9sYXN0ICE9IDApKSkgewotCQlpbnQgbG9zdF90aWNrcyA9IChvZmZzZXQgLSBocGV0X2xhc3QpIC8gaHBldF90aWNrOworCWlmIChocGV0X3VzZV90aW1lcikKKwkJb2Zmc2V0ID0gaHBldF9yZWFkbChIUEVUX1QwX0NNUCkgLSBocGV0X3RpY2s7CisJZWxzZQorCQlvZmZzZXQgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CisJaWYgKHVubGlrZWx5KCgob2Zmc2V0IC0gaHBldF9sYXN0KSA+PSAoMipocGV0X3RpY2spKSAmJiAoaHBldF9sYXN0ICE9IDApKSkgeworCQlpbnQgbG9zdF90aWNrcyA9ICgob2Zmc2V0IC0gaHBldF9sYXN0KSAvIGhwZXRfdGljaykgLSAxOwogCQlqaWZmaWVzXzY0ICs9IGxvc3RfdGlja3M7CiAJfQogCWhwZXRfbGFzdCA9IG9mZnNldDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMKaW5kZXggYTY4NTk5NC4uNzkyNmQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfdHNjLmMKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCWlmIChjcHVfaGFzX3RzYykgewogCQl1bnNpZ25lZCBsb25nIHRzY19xdW90aWVudDsKICNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgotCQlpZiAoaXNfaHBldF9lbmFibGVkKCkpeworCQlpZiAoaXNfaHBldF9lbmFibGVkKCkgJiYgaHBldF91c2VfdGltZXIpIHsKIAkJCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCByZW1haW47CiAJCQlwcmludGsoIlVzaW5nIFRTQyBmb3IgZ2V0dGltZW9mZGF5XG4iKTsKIAkJCXRzY19xdW90aWVudCA9IGNhbGlicmF0ZV90c2NfaHBldChOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCA2YzBlMzgzLi4wMGM2MzQxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC00NTEsNiArNDUxLDcgQEAKIERPX0VSUk9SKDExLCBTSUdCVVMsICAic2VnbWVudCBub3QgcHJlc2VudCIsIHNlZ21lbnRfbm90X3ByZXNlbnQpCiBET19FUlJPUigxMiwgU0lHQlVTLCAgInN0YWNrIHNlZ21lbnQiLCBzdGFja19zZWdtZW50KQogRE9fRVJST1JfSU5GTygxNywgU0lHQlVTLCAiYWxpZ25tZW50IGNoZWNrIiwgYWxpZ25tZW50X2NoZWNrLCBCVVNfQURSQUxOLCAwKQorRE9fRVJST1JfSU5GTygzMiwgU0lHU0VHViwgImlyZXQgZXhjZXB0aW9uIiwgaXJldF9lcnJvciwgSUxMX0JBRFNUSywgMCkKIAogZmFzdGNhbGwgdm9pZCBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC02NDIsMTYgKzY0MywxNSBAQAogfQogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKLWZhc3RjYWxsIGludCBkb19pbnQzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCitmYXN0Y2FsbCB2b2lkIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKIAlpZiAobm90aWZ5X2RpZShESUVfSU5UMywgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCAzLCBTSUdUUkFQKQogCQkJPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybiAxOworCQlyZXR1cm47CiAJLyogVGhpcyBpcyBhbiBpbnRlcnJ1cHQgZ2F0ZSwgYmVjYXVzZSBrcHJvYmVzIHdhbnRzIGludGVycnVwdHMKIAlkaXNhYmxlZC4gIE5vcm1hbCB0cmFwIGhhbmRsZXJzIGRvbid0LiAqLwogCXJlc3RvcmVfaW50ZXJydXB0cyhyZWdzKTsKIAlkb190cmFwKDMsIFNJR1RSQVAsICJpbnQzIiwgMSwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7Ci0JcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwppbmRleCAyZjNkNTJkLi5lYzBmNjhjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZtODYuYworKysgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCQlnb3RvIG91dDsKIAkJY2FzZSBWTTg2X1BMVVNfSU5TVEFMTF9DSEVDSzoKIAkJCS8qIE5PVEU6IG9uIG9sZCB2bTg2IHN0dWZmIHRoaXMgd2lsbCByZXR1cm4gdGhlIGVycm9yCi0JCQkgICBmcm9tIHZlcmlmeV9hcmVhKCksIGJlY2F1c2UgdGhlIHN1YmZ1bmN0aW9uIGlzCisJCQkgICBmcm9tIGFjY2Vzc19vaygpLCBiZWNhdXNlIHRoZSBzdWJmdW5jdGlvbiBpcwogCQkJICAgaW50ZXJwcmV0ZWQgYXMgKGludmFsaWQpIGFkZHJlc3MgdG8gdm04Nl9zdHJ1Y3QuCiAJCQkgICBTbyB0aGUgaW5zdGFsbGF0aW9uIGNoZWNrIHdvcmtzLgogCQkJICovCkBAIC0yOTQsOCArMjk0LDggQEAKICAqLwogCWluZm8tPnJlZ3MzMi0+ZWF4ID0gMDsKIAl0c2stPnRocmVhZC5zYXZlZF9lc3AwID0gdHNrLT50aHJlYWQuZXNwMDsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVmcywlMCI6Ij1tIiAodHNrLT50aHJlYWQuc2F2ZWRfZnMpKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVncywlMCI6Ij1tIiAodHNrLT50aHJlYWQuc2F2ZWRfZ3MpKTsKKwlhc20gdm9sYXRpbGUoIm1vdiAlJWZzLCUwIjoiPW0iICh0c2stPnRocmVhZC5zYXZlZF9mcykpOworCWFzbSB2b2xhdGlsZSgibW92ICUlZ3MsJTAiOiI9bSIgKHRzay0+dGhyZWFkLnNhdmVkX2dzKSk7CiAKIAl0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgZ2V0X2NwdSgpKTsKIAl0c2stPnRocmVhZC5lc3AwID0gKHVuc2lnbmVkIGxvbmcpICZpbmZvLT5WTTg2X1RTU19FU1AwOwpAQCAtNzE3LDEyICs3MTcsMTIgQEAKIAlpcnFiaXRzIHw9IGlycV9iaXQ7CiAJaWYgKHZtODZfaXJxc1tpbnRub10uc2lnKQogCQlzZW5kX3NpZyh2bTg2X2lycXNbaW50bm9dLnNpZywgdm04Nl9pcnFzW2ludG5vXS50c2ssIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwogCS8qCiAJICogSVJRIHdpbGwgYmUgcmUtZW5hYmxlZCB3aGVuIHVzZXIgYXNrcyBmb3IgdGhlIGlycSAod2hldGhlcgogCSAqIHBvbGxpbmcgb3IgYXMgYSByZXN1bHQgb2YgdGhlIHNpZ25hbCkKIAkgKi8KLQlkaXNhYmxlX2lycShpbnRubyk7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGludG5vKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFiaXRzX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIG91dDoKQEAgLTc1NCwxNyArNzU0LDIwIEBACiB7CiAJaW50IGJpdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOwogCQogCWlmIChpbnZhbGlkX3ZtODZfaXJxKGlycW51bWJlcikpIHJldHVybiAwOwogCWlmICh2bTg2X2lycXNbaXJxbnVtYmVyXS50c2sgIT0gY3VycmVudCkgcmV0dXJuIDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlycWJpdHNfbG9jaywgZmxhZ3MpOwkKIAliaXQgPSBpcnFiaXRzICYgKDEgPDwgaXJxbnVtYmVyKTsKIAlpcnFiaXRzICY9IH5iaXQ7CisJaWYgKGJpdCkgeworCQllbmFibGVfaXJxKGlycW51bWJlcik7CisJCXJldCA9IDE7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxYml0c19sb2NrLCBmbGFncyk7CQotCWlmICghYml0KQotCQlyZXR1cm4gMDsKLQllbmFibGVfaXJxKGlycW51bWJlcik7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYwppbmRleCBiMmU0NjJhLi5jNThkMGMxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCisrKyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKQEAgLTM2LDcgKzM2LDcgQEAKIHsKIAllbmFibGVfdGltZXJfbm1pX3dhdGNoZG9nKCk7CiAJdW5zZXRfbm1pX2NhbGxiYWNrKCk7Ci0Jc3luY2hyb25pemVfa2VybmVsKCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEFsbG93IGFscmVhZHktc3RhcnRlZCBOTUlzIHRvIGNvbXBsZXRlLiAqLwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMgYi9hcmNoL2kzODYvcGNpL2lycS5jCmluZGV4IGUwNzU4OWQuLmQ2NTk4ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwpAQCAtNDk1LDYgKzQ5NSw4IEBACiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzA6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzE6CisJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMwOgorCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18zMToKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMDoKIAkJCXItPm5hbWUgPSAiUElJWC9JQ0giOwogCQkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCBiZDg2ZmVhLi5kM2YwOTM4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC0xNDE3LDcgKzE0MTcsNyBAQAogCWRhdGE4IHN5c19tc2dyY3YKIAlkYXRhOCBzeXNfbXNnY3RsCiAJZGF0YTggc3lzX3NobWdldAotCWRhdGE4IGlhNjRfc2htYXQKKwlkYXRhOCBzeXNfc2htYXQKIAlkYXRhOCBzeXNfc2htZHQJCQkJLy8gMTExNQogCWRhdGE4IHN5c19zaG1jdGwKIAlkYXRhOCBzeXNfc3lzbG9nCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA4ZGRlMGIxLi45MDc0NjRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xNDgxLDcgKzE0ODIsNyBAQAogCSAgICAgIGNhc2UgUFRSQUNFX0NPTlQ6CiAJCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWdvdG8gb3V0X3RzazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0xNTIwLDcgKzE1MjEsNyBAQAogCQkvKiBsZXQgY2hpbGQgZXhlY3V0ZSBmb3Igb25lIGluc3RydWN0aW9uICovCiAJICAgICAgY2FzZSBQVFJBQ0VfU0lOR0xFQkxPQ0s6CiAJCXJldCA9IC1FSU87Ci0JCWlmIChkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJZ290byBvdXRfdHNrOwogCiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jCmluZGV4IDNhYzIxNmUuLmE4Y2Y2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3N5c19pYTY0LmMKQEAgLTkzLDIwICs5Myw2IEBACiB9CiAKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwotaWE2NF9zaG1hdCAoaW50IHNobWlkLCB2b2lkIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZykKLXsKLQl1bnNpZ25lZCBsb25nIHJhZGRyOwotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmFkZHIpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsX3JldHVybigpOwotCXJldHVybiByYWRkcjsKLX0KLQotYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCiBpYTY0X2JyayAodW5zaWduZWQgbG9uZyBicmspCiB7CiAJdW5zaWduZWQgbG9uZyBybGltLCByZXR2YWwsIG5ld2Jyaywgb2xkYnJrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOGI0MGYzNi4uMTI0ZjdjMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTY2NSw3ICs2NjYsNyBAQAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6CiAJY2FzZSBQVFJBQ0VfQ09OVDoKIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtNzAwLDcgKzcwMSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcGMsIGluc247CiAKIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQlpZiAoKGNoaWxkLT5wdHJhY2UgJiBQVF9EVFJBQ0UpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCmluZGV4IDBiZWI1MzMuLmY0ZTFlNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTI1MSw3ICsyNTIsNyBAQAogCQkJbG9uZyB0bXA7CiAKIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKIAkJCQkJY2hpbGQtPnRocmVhZC53b3JrLnN5c2NhbGxfdHJhY2UgPSB+MDsKQEAgLTI5Miw3ICsyOTMsNyBAQAogCQkJbG9uZyB0bXA7CiAKIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJY2hpbGQtPnRocmVhZC53b3JrLnN5c2NhbGxfdHJhY2UgPSAwOwogCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpIHwgKFRSQUNFX0JJVFMgPDwgMTYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCmluZGV4IDE1Y2Y3OTAuLjk3MjRlMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0yNDAsNyArMjQxLDcgQEAKIAkJCWxvbmcgdG1wOwogCiAJCQlyZXQgPSAtRUlPOwotCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCQlicmVhazsKIAkJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTI3OCw3ICsyNzksNyBAQAogCQkJbG9uZyB0bXA7CiAKIAkJCXJldCA9IC1FSU87Ci0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJCWJyZWFrOwogCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgfCAoVFJBQ0VfQklUUyA8PCAxNik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwppbmRleCA0YWJjMmVlNS4uOTJlNzBjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CkBAIC0yNTcsNyArMjU4LDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgewogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCmluZGV4IDYxMWRlZTkuLmVlZTIwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KQEAgLTI0MSw3ICsyNDIsNyBAQAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCiAJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBpbnQpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggNTk4YmZlNy4uYWUyYTEzMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTM3NCwyMiArMzc0LDYgQEAKIH0KIAogLyoKLSAqIE5hdGl2ZSBBQkkgdGhhdCBpcyBPMzIgb3IgTjY0IHZlcnNpb24KLSAqLwotYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2htZmxnLCB1bnNpZ25lZCBsb25nICphZGRyKQotewotCXVuc2lnbmVkIGxvbmcgcmFkZHI7Ci0JaW50IGVycjsKLQotCWVyciA9IGRvX3NobWF0KHNobWlkLCBzaG1hZGRyLCBzaG1mbGcsICZyYWRkcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiBwdXRfdXNlcihyYWRkciwgYWRkcik7Ci19Ci0KLS8qCiAgKiBObyBpbXBsZW1lbnRlZCB5ZXQgLi4uCiAgKi8KIGFzbWxpbmthZ2UgaW50IHN5c19jYWNoZWN0bChjaGFyICphZGRyLCBpbnQgbmJ5dGVzLCBpbnQgb3ApCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjkzN2E5Mi4uYzA3ZGI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTI4NSw3ICsyODYsNyBAQAogCQlyZXQgPSAtRUlPOwogCQlEQkcoInN5c19wdHJhY2UoJXMpXG4iLAogCQkJcmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCA/ICJTWVNDQUxMIiA6ICJDT05UIik7Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWdvdG8gb3V0X3RzazsKIAkJY2hpbGQtPnB0cmFjZSAmPSB+KFBUX1NJTkdMRVNURVB8UFRfQkxPQ0tTVEVQKTsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKQEAgLTMxMSw3ICszMTIsNyBAQAogCWNhc2UgUFRSQUNFX1NJTkdMRUJMT0NLOgogCQlEQkcoInN5c19wdHJhY2UoU0lOR0xFQkxPQ0spXG4iKTsKIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJZ290byBvdXRfdHNrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJY2hpbGQtPnB0cmFjZSAmPSB+UFRfU0lOR0xFU1RFUDsKQEAgLTMyOCw3ICszMjksNyBAQAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCURCRygic3lzX3B0cmFjZShTSU5HTEVTVEVQKVxuIik7CiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWdvdG8gb3V0X3RzazsKIAogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jCmluZGV4IDc5NThjZDguLmQxNWExZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYwpAQCAtMTYxLDE3ICsxNjEsNiBAQAogCX0KIH0KIAotbG9uZyBzeXNfc2htYXRfd3JhcHBlcihpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxhZykKLXsKLQl1bnNpZ25lZCBsb25nIHJhZGRyOwotCWludCByOwotCi0JciA9IGRvX3NobWF0KHNobWlkLCBzaG1hZGRyLCBzaG1mbGFnLCAmcmFkZHIpOwotCWlmIChyIDwgMCkKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIHJhZGRyOwotfQotCiAvKiBGdWNraW5nIGJyb2tlbiBBQkkgKi8KIAogI2lmZGVmIENPTkZJR182NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNzc5YjUzNy4uZGNmYTRkMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlFTlRSWV9ESUZGKG1zZ3JjdikKIAlFTlRSWV9TQU1FKG1zZ2dldCkJCS8qIDE5MCAqLwogCUVOVFJZX1NBTUUobXNnY3RsKQotCUVOVFJZX1NBTUUoc2htYXRfd3JhcHBlcikKKwlFTlRSWV9TQU1FKHNobWF0KQogCUVOVFJZX1NBTUUoc2htZHQpCiAJRU5UUllfU0FNRShzaG1nZXQpCiAJRU5UUllfU0FNRShzaG1jdGwpCQkvKiAxOTUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcgYi9hcmNoL3BwYy9LY29uZmlnCmluZGV4IDc0YWExZTkuLmMzZDk0MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZwpAQCAtNTMsNiArNTMsNyBAQAogCiBjb25maWcgNnh4CiAJYm9vbCAiNnh4Lzd4eC83NHh4LzUyeHgvODJ4eC84M3h4IgorCXNlbGVjdCBQUENfRlBVCiAJaGVscAogCSAgVGhlcmUgYXJlIGZvdXIgdHlwZXMgb2YgUG93ZXJQQyBjaGlwcyBzdXBwb3J0ZWQuICBUaGUgbW9yZSBjb21tb24KIAkgIHR5cGVzICg2MDEsIDYwMywgNjA0LCA3NDAsIDc1MCwgNzQwMCksIHRoZSBNb3Rvcm9sYSBlbWJlZGRlZApAQCAtODYsNiArODcsOSBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIFBQQ19GUFUKKwlib29sCisKIGNvbmZpZyBCT09LRQogCWJvb2wKIAlkZXBlbmRzIG9uIEU1MDAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL01ha2VmaWxlIGIvYXJjaC9wcGMvTWFrZWZpbGUKaW5kZXggNzNjYmRkYS4uMDQzMmEyNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvTWFrZWZpbGUKQEAgLTUzLDYgKzUzLDcgQEAKIAogaGVhZC0kKENPTkZJR182eHgpCQkrPSBhcmNoL3BwYy9rZXJuZWwvaWRsZV82eHgubwogaGVhZC0kKENPTkZJR19QT1dFUjQpCQkrPSBhcmNoL3BwYy9rZXJuZWwvaWRsZV9wb3dlcjQubworaGVhZC0kKENPTkZJR19QUENfRlBVKQkJKz0gYXJjaC9wcGMva2VybmVsL2ZwdS5vCiAKIGNvcmUteQkJCQkrPSBhcmNoL3BwYy9rZXJuZWwvIGFyY2gvcHBjL3BsYXRmb3Jtcy8gXAogCQkJCSAgIGFyY2gvcHBjL21tLyBhcmNoL3BwYy9saWIvIGFyY2gvcHBjL3N5c2xpYi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvaW1hZ2VzL01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9pbWFnZXMvTWFrZWZpbGUKaW5kZXggNzc0ZGU4ZS4uZjg1MGZiMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9pbWFnZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9pbWFnZXMvTWFrZWZpbGUKQEAgLTIwLDggKzIwLDkgQEAKIAogdGFyZ2V0cyArPSB1SW1hZ2UKICQob2JqKS91SW1hZ2U6ICQob2JqKS92bWxpbnV4Lmd6CisJJChRKXJtIC1mICRACiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlKQotCUBlY2hvICcgIEltYWdlICRAIGlzIHJlYWR5JworCUBlY2hvICcgIEltYWdlOiAkQCcgJChpZiAkKHdpbGRjYXJkICRAKSwnaXMgcmVhZHknLCdub3QgbWFkZScpCiAKICMgRmlsZXMgZ2VuZXJhdGVkIHRoYXQgc2hhbGwgYmUgcmVtb3ZlZCB1cG9uIG1ha2UgY2xlYW4KIGNsZWFuLWZpbGVzCTo9IHNJbWFnZSB2bWFwdXMgdm1saW51eCogbWlib290KiB6SW1hZ2UqIHVJbWFnZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCmluZGV4IDg2YmM4NzguLmIyODQ0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBleHRyYS0kKENPTkZJR184eHgpCQk6PSBoZWFkXzh4eC5vCiBleHRyYS0kKENPTkZJR182eHgpCQkrPSBpZGxlXzZ4eC5vCiBleHRyYS0kKENPTkZJR19QT1dFUjQpCQkrPSBpZGxlX3Bvd2VyNC5vCitleHRyYS0kKENPTkZJR19QUENfRlBVKQkJKz0gZnB1Lm8KIGV4dHJhLXkJCQkJKz0gdm1saW51eC5sZHMKIAogb2JqLXkJCQkJOj0gZW50cnkubyB0cmFwcy5vIGlycS5vIGlkbGUubyB0aW1lLm8gbWlzYy5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9hbGlnbi5jIGIvYXJjaC9wcGMva2VybmVsL2FsaWduLmMKaW5kZXggNzljOTI5NC4uZmY4MWRhOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2FsaWduLmMKQEAgLTI5MCw2ICsyOTAsMTAgQEAKIAkJCS8qIGx3bSwgc3RtdyAqLwogCQkJbmIgPSAoMzIgLSByZWcpICogNDsKIAkJfQorCisJCWlmICghYWNjZXNzX29rKChmbGFncyAmIFNUPyBWRVJJRllfV1JJVEU6IFZFUklGWV9SRUFEKSwgYWRkciwgbmIrbmIwKSkKKwkJCXJldHVybiAtRUZBVUxUOwkvKiBiYWQgYWRkcmVzcyAqLworCiAJCXJwdHIgPSAodW5zaWduZWQgY2hhciAqKSAmcmVncy0+Z3ByW3JlZ107CiAJCWlmIChmbGFncyAmIExEKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkKQEAgLTM2OCwxNiArMzcyLDI0IEBACiAKIAkvKiBTaW5nbGUtcHJlY2lzaW9uIEZQIGxvYWQgYW5kIHN0b3JlIHJlcXVpcmUgY29udmVyc2lvbnMuLi4gKi8KIAljYXNlIExEK0YrUzoKKyNpZmRlZiBDT05GSUdfUFBDX0ZQVQogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJZW5hYmxlX2tlcm5lbF9mcCgpOwogCQljdnRfZmQoJmRhdGEuZiwgJmRhdGEuZCwgJmN1cnJlbnQtPnRocmVhZC5mcHNjcik7CiAJCXByZWVtcHRfZW5hYmxlKCk7CisjZWxzZQorCQlyZXR1cm4gMDsKKyNlbmRpZgogCQlicmVhazsKIAljYXNlIFNUK0YrUzoKKyNpZmRlZiBDT05GSUdfUFBDX0ZQVQogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJZW5hYmxlX2tlcm5lbF9mcCgpOwogCQljdnRfZGYoJmRhdGEuZCwgJmRhdGEuZiwgJmN1cnJlbnQtPnRocmVhZC5mcHNjcik7CiAJCXByZWVtcHRfZW5hYmxlKCk7CisjZWxzZQorCQlyZXR1cm4gMDsKKyNlbmRpZgogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMgYi9hcmNoL3BwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCmluZGV4IDc0Zjc4MWIuLjQ2ODcyMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2NwdV9zZXR1cF82eHguUwpAQCAtMzAsMTIgKzMwLDE0IEBACiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MCkKIAltZmxyCXI0CisJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCW10bHIJcjQKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwY3gpCiAJbWZscglyNAorCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlibAlzZXR1cF83NTBjeApAQCAtNDMsNiArNDUsNyBAQAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTBmeCkKIAltZmxyCXI0CisJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWJsCXNldHVwXzc1MGZ4CkBAIC01MCw2ICs1Myw3IEBACiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0MDApCiAJbWZscglyNAorCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfNzQwMF93b3JrYXJvdW5kcwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCkBAIC01Nyw2ICs2MSw3IEBACiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0MTApCiAJbWZscglyNAorCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfNzQxMF93b3JrYXJvdW5kcwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCkBAIC04MCw3ICs4NSw3IEBACiAJYm5lCTFmCQkJLyogZG9uJ3QgaW52YWxpZGF0ZSB0aGUgRC1jYWNoZSAqLwogCW9yaQlyOCxyOCxISUQwX0RDSQkJLyogdW5sZXNzIGl0IHdhc24ndCBlbmFibGVkICovCiAxOglzeW5jCi0JbXRzcHIJU1BSTl9ISUQwLHI4CQkJLyogZW5hYmxlIGFuZCBpbnZhbGlkYXRlIGNhY2hlcyAqLworCW10c3ByCVNQUk5fSElEMCxyOAkJLyogZW5hYmxlIGFuZCBpbnZhbGlkYXRlIGNhY2hlcyAqLwogCXN5bmMKIAltdHNwcglTUFJOX0hJRDAscjExCQkvKiBlbmFibGUgY2FjaGVzICovCiAJc3luYwpAQCAtMTUyLDkgKzE1NywxMyBAQAogc2V0dXBfNzUwXzc0MDBfaGlkMDoKIAltZnNwcglyMTEsU1BSTl9ISUQwCiAJb3JpCXIxMSxyMTEsSElEMF9TR0UgfCBISUQwX0FCRSB8IEhJRDBfQkhURSB8IEhJRDBfQlRJQworCW9yaXMJcjExLHIxMSxISUQwX0RQTUBoCiBCRUdJTl9GVFJfU0VDVElPTgotCW9yaXMJcjExLHIxMSxISUQwX0RQTUBoCS8qIGVuYWJsZSBkeW5hbWljIHBvd2VyIG1nbXQgKi8KLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05PX0RQTSkKKwl4b3JpCXIxMSxyMTEsSElEMF9CVElDCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9OT19CVElDKQorQkVHSU5fRlRSX1NFQ1RJT04KKwl4b3JpcwlyMTEscjExLEhJRDBfRFBNQGgJLyogZGlzYWJsZSBkeW5hbWljIHBvd2VyIG1nbXQgKi8KK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX05PX0RQTSkKIAlsaQlyMyxISUQwX1NQRAogCWFuZGMJcjExLHIxMSxyMwkJLyogY2xlYXIgU1BEOiBlbmFibGUgc3BlY3VsYXRpdmUgKi8KICAJbGkJcjMsMApAQCAtMjE4LDEzICsyMjcsMTUgQEAKIAogCS8qIEFsbCBvZiB0aGUgYml0cyB3ZSBoYXZlIHRvIHNldC4uLi4uCiAJICovCi0Jb3JpCXIxMSxyMTEsSElEMF9TR0UgfCBISUQwX0ZPTEQgfCBISUQwX0JIVEUgfCBISUQwX0xSU1RLIHwgSElEMF9CVElDCisJb3JpCXIxMSxyMTEsSElEMF9TR0UgfCBISUQwX0ZPTEQgfCBISUQwX0JIVEUKKwlvcmkJcjExLHIxMSxISUQwX0xSU1RLIHwgSElEMF9CVElDCisJb3JpcwlyMTEscjExLEhJRDBfRFBNQGgKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJeG9yaQlyMTEscjExLEhJRDBfQlRJQwogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfTk9fQlRJQykKIEJFR0lOX0ZUUl9TRUNUSU9OCi0Jb3JpcwlyMTEscjExLEhJRDBfRFBNQGgJLyogZW5hYmxlIGR5bmFtaWMgcG93ZXIgbWdtdCAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTk9fRFBNKQorCXhvcmlzCXIxMSxyMTEsSElEMF9EUE1AaAkvKiBkaXNhYmxlIGR5bmFtaWMgcG93ZXIgbWdtdCAqLworRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfTk9fRFBNKQogCiAJLyogQWxsIG9mIHRoZSBiaXRzIHdlIGhhdmUgdG8gY2xlYXIuLi4uCiAJICovCkBAIC0yNDgsNiArMjU5LDI1IEBACiAJaXN5bmMKIAlibHIKIAorLyoKKyAqIEluaXRpYWxpemUgdGhlIEZQVSByZWdpc3RlcnMuIFRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGFuIGVycmF0YQorICogaW4gc29tZSA3NTAgY3B1cyB3aGVyZSB1c2luZyBhIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgRlBVIHJlZ2lzdGVyIGFmdGVyCisgKiBwb3dlciBvbiByZXNldCBtYXkgaGFuZyB0aGUgQ1BVCisgKi8KK19HTE9CQUwoX19pbml0X2ZwdV9yZWdpc3RlcnMpCisJbWZtc3IJcjEwCisJb3JpCXIxMSxyMTAsTVNSX0ZQCisJbXRtc3IJcjExCisJaXN5bmMKKwlhZGRpcwlyOSxyMyxlbXB0eV96ZXJvX3BhZ2VAaGEKKwlhZGRpCXI5LHI5LGVtcHR5X3plcm9fcGFnZUBsCisJUkVTVF8zMkZQUlMoMCxyOSkKKwlzeW5jCisJbXRtc3IJcjEwCisJaXN5bmMKKwlibHIKKworCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIHRhYmxlIHVzZSB0byBzYXZlIENQVSBzdGF0ZXMgKi8KICNkZWZpbmUgQ1NfSElEMAkJMAogI2RlZmluZSBDU19ISUQxCQk0CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDAzNTIxN2QuLjVmMDc1ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCkBAIC01NjMsNiArNTYzLDY1IEBACiAJYWRkaQlyMSxyMSxJTlRfRlJBTUVfU0laRQogCWJscgogCisJLmdsb2JsCWZhc3RfZXhjZXB0aW9uX3JldHVybgorZmFzdF9leGNlcHRpb25fcmV0dXJuOgorI2lmICEoZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkpCisJYW5kaS4JcjEwLHI5LE1TUl9SSQkJLyogY2hlY2sgZm9yIHJlY292ZXJhYmxlIGludGVycnVwdCAqLworCWJlcQkxZgkJCS8qIGlmIG5vdCwgd2UndmUgZ290IHByb2JsZW1zICovCisjZW5kaWYKKworMjoJUkVTVF80R1BSUygzLCByMTEpCisJbHd6CXIxMCxfQ0NSKHIxMSkKKwlSRVNUX0dQUigxLCByMTEpCisJbXRjcglyMTAKKwlsd3oJcjEwLF9MSU5LKHIxMSkKKwltdGxyCXIxMAorCVJFU1RfR1BSKDEwLCByMTEpCisJbXRzcHIJU1BSTl9TUlIxLHI5CisJbXRzcHIJU1BSTl9TUlIwLHIxMgorCVJFU1RfR1BSKDksIHIxMSkKKwlSRVNUX0dQUigxMiwgcjExKQorCWx3eglyMTEsR1BSMTEocjExKQorCVNZTkMKKwlSRkkKKworI2lmICEoZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkpCisvKiBjaGVjayBpZiB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkIGluIGEgcmVzdGFydGFibGUgc2VjdGlvbiAqLworMToJbGlzCXIzLGV4Y19leGl0X3Jlc3RhcnRfZW5kQGhhCisJYWRkaQlyMyxyMyxleGNfZXhpdF9yZXN0YXJ0X2VuZEBsCisJY21wbHcJcjEyLHIzCisJYmdlCTNmCisJbGlzCXI0LGV4Y19leGl0X3Jlc3RhcnRAaGEKKwlhZGRpCXI0LHI0LGV4Y19leGl0X3Jlc3RhcnRAbAorCWNtcGx3CXIxMixyNAorCWJsdAkzZgorCWxpcwlyMyxmZWVfcmVzdGFydHNAaGEKKwl0b3BoeXMocjMscjMpCisJbHd6CXI1LGZlZV9yZXN0YXJ0c0BsKHIzKQorCWFkZGkJcjUscjUsMQorCXN0dwlyNSxmZWVfcmVzdGFydHNAbChyMykKKwltcglyMTIscjQJCS8qIHJlc3RhcnQgYXQgZXhjX2V4aXRfcmVzdGFydCAqLworCWIJMmIKKworCS5jb21tCWZlZV9yZXN0YXJ0cyw0CisKKy8qIGFhcmdoLCBhIG5vbnJlY292ZXJhYmxlIGludGVycnVwdCwgcGFuaWMgKi8KKy8qIGFhcmdoLCB3ZSBkb24ndCBrbm93IHdoaWNoIHRyYXAgdGhpcyBpcyAqLworLyogYnV0IHRoZSA2MDEgZG9lc24ndCBpbXBsZW1lbnQgdGhlIFJJIGJpdCwgc28gYXNzdW1lIGl0J3MgT0sgKi8KKzM6CitCRUdJTl9GVFJfU0VDVElPTgorCWIJMmIKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzYwMSkKKwlsaQlyMTAsLTEKKwlzdHcJcjEwLFRSQVAocjExKQorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsaXMJcjEwLE1TUl9LRVJORUxAaAorCW9yaQlyMTAscjEwLE1TUl9LRVJORUxAbAorCWJsCXRyYW5zZmVyX3RvX2hhbmRsZXJfZnVsbAorCS5sb25nCW5vbnJlY292ZXJhYmxlX2V4Y2VwdGlvbgorCS5sb25nCXJldF9mcm9tX2V4Y2VwdAorI2VuZGlmCisKIAkuZ2xvYmwJc2lncmV0dXJuX2V4aXQKIHNpZ3JldHVybl9leGl0OgogCXN1YmkJcjEscjMsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9mcHUuUyBiL2FyY2gvcHBjL2tlcm5lbC9mcHUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg5YjI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMva2VybmVsL2ZwdS5TCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIEZQVSBzdXBwb3J0IGNvZGUsIG1vdmVkIGhlcmUgZnJvbSBoZWFkLlMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAorICogIGJ5IGNoaXBzIHdoaWNoIHVzZSBvdGhlciBoZWFkLXdoYXRldmVyLlMgZmlsZXMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9vZmZzZXRzLmg+CisKKy8qCisgKiBUaGlzIHRhc2sgd2FudHMgdG8gdXNlIHRoZSBGUFUgbm93LgorICogT24gVVAsIGRpc2FibGUgRlAgZm9yIHRoZSB0YXNrIHdoaWNoIGhhZCB0aGUgRlBVIHByZXZpb3VzbHksCisgKiBhbmQgc2F2ZSBpdHMgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGluIGl0cyB0aHJlYWRfc3RydWN0LgorICogTG9hZCB1cCB0aGlzIHRhc2sncyBGUCByZWdpc3RlcnMgZnJvbSBpdHMgdGhyZWFkX3N0cnVjdCwKKyAqIGVuYWJsZSB0aGUgRlBVIGZvciB0aGUgY3VycmVudCB0YXNrIGFuZCByZXR1cm4gdG8gdGhlIHRhc2suCisgKi8KKwkuZ2xvYmwJbG9hZF91cF9mcHUKK2xvYWRfdXBfZnB1OgorCW1mbXNyCXI1CisJb3JpCXI1LHI1LE1TUl9GUAorI2lmZGVmIENPTkZJR19QUEM2NEJSSURHRQorCWNscmxkaQlyNSxyNSwxCQkJLyogdHVybiBvZmYgNjQtYml0IG1vZGUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KKwlTWU5DCisJTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLworCWlzeW5jCisvKgorICogRm9yIFNNUCwgd2UgZG9uJ3QgZG8gbGF6eSBGUFUgc3dpdGNoaW5nIGJlY2F1c2UgaXQganVzdCBnZXRzIHRvbworICogaG9ycmVuZG91c2x5IGNvbXBsZXgsIGVzcGVjaWFsbHkgd2hlbiBhIHRhc2sgc3dpdGNoZXMgZnJvbSBvbmUgQ1BVCisgKiB0byBhbm90aGVyLiAgSW5zdGVhZCB3ZSBjYWxsIGdpdmV1cF9mcHUgaW4gc3dpdGNoX3RvLgorICovCisjaWZuZGVmIENPTkZJR19TTVAKKwl0b3BoeXMocjYsMCkJCQkvKiBnZXQgX19wYSBjb25zdGFudCAqLworCWFkZGlzCXIzLHI2LGxhc3RfdGFza191c2VkX21hdGhAaGEKKwlsd3oJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQorCWNtcHdpCTAscjQsMAorCWJlcQkxZgorCWFkZAlyNCxyNCxyNgorCWFkZGkJcjQscjQsVEhSRUFECQkvKiB3YW50IGxhc3RfdGFza191c2VkX21hdGgtPnRocmVhZCAqLworCVNBVkVfMzJGUFJTKDAsIHI0KQorCW1mZnMJZnIwCisJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSLTQocjQpCisJbHd6CXI1LFBUX1JFR1MocjQpCisJYWRkCXI1LHI1LHI2CisJbHd6CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJbGkJcjEwLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKKwlhbmRjCXI0LHI0LHIxMAkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLworCXN0dwlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorMToKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisJLyogZW5hYmxlIHVzZSBvZiBGUCBhZnRlciByZXR1cm4gKi8KKwltZnNwcglyNSxTUFJOX1NQUkczCQkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCisJbHd6CXI0LFRIUkVBRF9GUEVYQ19NT0RFKHI1KQorCW9yaQlyOSxyOSxNU1JfRlAJCS8qIGVuYWJsZSBGUCBmb3IgY3VycmVudCAqLworCW9yCXI5LHI5LHI0CisJbGZkCWZyMCxUSFJFQURfRlBTQ1ItNChyNSkKKwltdGZzZgkweGZmLGZyMAorCVJFU1RfMzJGUFJTKDAsIHI1KQorI2lmbmRlZiBDT05GSUdfU01QCisJc3ViaQlyNCxyNSxUSFJFQUQKKwlzdWIJcjQscjQscjYKKwlzdHcJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwkvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisJLyogd2UgaGF2ZW4ndCB1c2VkIGN0ciBvciB4ZXIgb3IgbHIgKi8KKwliCWZhc3RfZXhjZXB0aW9uX3JldHVybgorCisvKgorICogRlAgdW5hdmFpbGFibGUgdHJhcCBmcm9tIGtlcm5lbCAtIHByaW50IGEgbWVzc2FnZSwgYnV0IGxldAorICogdGhlIHRhc2sgdXNlIEZQIGluIHRoZSBrZXJuZWwgdW50aWwgaXQgcmV0dXJucyB0byB1c2VyIG1vZGUuCisgKi8KKyAJLmdsb2JsCUtlcm5lbEZQCitLZXJuZWxGUDoKKwlsd3oJcjMsX01TUihyMSkKKwlvcmkJcjMscjMsTVNSX0ZQCisJc3R3CXIzLF9NU1IocjEpCQkvKiBlbmFibGUgdXNlIG9mIEZQIGFmdGVyIHJldHVybiAqLworCWxpcwlyMyw4NmZAaAorCW9yaQlyMyxyMyw4NmZAbAorCW1yCXI0LHIyCQkJLyogY3VycmVudCAqLworCWx3eglyNSxfTklQKHIxKQorCWJsCXByaW50aworCWIJcmV0X2Zyb21fZXhjZXB0Cis4NjoJLnN0cmluZwkiZmxvYXRpbmcgcG9pbnQgdXNlZCBpbiBrZXJuZWwgKHRhc2s9JXAsIHBjPSV4KVxuIgorCS5hbGlnbgk0LDAKKworLyoKKyAqIGdpdmV1cF9mcHUodHNrKQorICogRGlzYWJsZSBGUCBmb3IgdGhlIHRhc2sgZ2l2ZW4gYXMgdGhlIGFyZ3VtZW50LAorICogYW5kIHNhdmUgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBpbiBpdHMgdGhyZWFkX3N0cnVjdC4KKyAqIEVuYWJsZXMgdGhlIEZQVSBmb3IgdXNlIGluIHRoZSBrZXJuZWwgb24gcmV0dXJuLgorICovCisJLmdsb2JsCWdpdmV1cF9mcHUKK2dpdmV1cF9mcHU6CisJbWZtc3IJcjUKKwlvcmkJcjUscjUsTVNSX0ZQCisJU1lOQ182MDEKKwlJU1lOQ182MDEKKwlNVE1TUkQocjUpCQkJLyogZW5hYmxlIHVzZSBvZiBmcHUgbm93ICovCisJU1lOQ182MDEKKwlpc3luYworCWNtcHdpCTAscjMsMAorCWJlcWxyLQkJCQkvKiBpZiBubyBwcmV2aW91cyBvd25lciwgZG9uZSAqLworCWFkZGkJcjMscjMsVEhSRUFECSAgICAgICAgLyogd2FudCBUSFJFQUQgb2YgdGFzayAqLworCWx3eglyNSxQVF9SRUdTKHIzKQorCWNtcHdpCTAscjUsMAorCVNBVkVfMzJGUFJTKDAsIHIzKQorCW1mZnMJZnIwCisJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSLTQocjMpCisJYmVxCTFmCisJbHd6CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJbGkJcjMsTVNSX0ZQfE1TUl9GRTB8TVNSX0ZFMQorCWFuZGMJcjQscjQscjMJCS8qIGRpc2FibGUgRlAgZm9yIHByZXZpb3VzIHRhc2sgKi8KKwlzdHcJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKKzE6CisjaWZuZGVmIENPTkZJR19TTVAKKwlsaQlyNSwwCisJbGlzCXI0LGxhc3RfdGFza191c2VkX21hdGhAaGEKKwlzdHcJcjUsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHI0KQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZC5TCmluZGV4IDFhODlhNzEuLmE5MzFkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWQuUwpAQCAtNzc1LDEzMyArNzc1LDYgQEAKIAlFWENfWEZFUl9TVEQoMHg0ODAsIFVua25vd25FeGNlcHRpb24pCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0QlJJREdFICovCiAKLS8qCi0gKiBUaGlzIHRhc2sgd2FudHMgdG8gdXNlIHRoZSBGUFUgbm93LgotICogT24gVVAsIGRpc2FibGUgRlAgZm9yIHRoZSB0YXNrIHdoaWNoIGhhZCB0aGUgRlBVIHByZXZpb3VzbHksCi0gKiBhbmQgc2F2ZSBpdHMgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGluIGl0cyB0aHJlYWRfc3RydWN0LgotICogTG9hZCB1cCB0aGlzIHRhc2sncyBGUCByZWdpc3RlcnMgZnJvbSBpdHMgdGhyZWFkX3N0cnVjdCwKLSAqIGVuYWJsZSB0aGUgRlBVIGZvciB0aGUgY3VycmVudCB0YXNrIGFuZCByZXR1cm4gdG8gdGhlIHRhc2suCi0gKi8KLWxvYWRfdXBfZnB1OgotCW1mbXNyCXI1Ci0Jb3JpCXI1LHI1LE1TUl9GUAotI2lmZGVmIENPTkZJR19QUEM2NEJSSURHRQotCWNscmxkaQlyNSxyNSwxCQkJLyogdHVybiBvZmYgNjQtYml0IG1vZGUgKi8KLSNlbmRpZiAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KLQlTWU5DCi0JTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLwotCWlzeW5jCi0vKgotICogRm9yIFNNUCwgd2UgZG9uJ3QgZG8gbGF6eSBGUFUgc3dpdGNoaW5nIGJlY2F1c2UgaXQganVzdCBnZXRzIHRvbwotICogaG9ycmVuZG91c2x5IGNvbXBsZXgsIGVzcGVjaWFsbHkgd2hlbiBhIHRhc2sgc3dpdGNoZXMgZnJvbSBvbmUgQ1BVCi0gKiB0byBhbm90aGVyLiAgSW5zdGVhZCB3ZSBjYWxsIGdpdmV1cF9mcHUgaW4gc3dpdGNoX3RvLgotICovCi0jaWZuZGVmIENPTkZJR19TTVAKLQl0b3BoeXMocjYsMCkJCQkvKiBnZXQgX19wYSBjb25zdGFudCAqLwotCWFkZGlzCXIzLHI2LGxhc3RfdGFza191c2VkX21hdGhAaGEKLQlsd3oJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQotCWNtcHdpCTAscjQsMAotCWJlcQkxZgotCWFkZAlyNCxyNCxyNgotCWFkZGkJcjQscjQsVEhSRUFECQkvKiB3YW50IGxhc3RfdGFza191c2VkX21hdGgtPnRocmVhZCAqLwotCVNBVkVfMzJGUFJTKDAsIHI0KQotCW1mZnMJZnIwCi0Jc3RmZAlmcjAsVEhSRUFEX0ZQU0NSLTQocjQpCi0JbHd6CXI1LFBUX1JFR1MocjQpCi0JYWRkCXI1LHI1LHI2Ci0JbHd6CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCi0JbGkJcjEwLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKLQlhbmRjCXI0LHI0LHIxMAkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLwotCXN0dwlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQotMToKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JLyogZW5hYmxlIHVzZSBvZiBGUCBhZnRlciByZXR1cm4gKi8KLQltZnNwcglyNSxTUFJOX1NQUkczCQkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCi0JbHd6CXI0LFRIUkVBRF9GUEVYQ19NT0RFKHI1KQotCW9yaQlyOSxyOSxNU1JfRlAJCS8qIGVuYWJsZSBGUCBmb3IgY3VycmVudCAqLwotCW9yCXI5LHI5LHI0Ci0JbGZkCWZyMCxUSFJFQURfRlBTQ1ItNChyNSkKLQltdGZzZgkweGZmLGZyMAotCVJFU1RfMzJGUFJTKDAsIHI1KQotI2lmbmRlZiBDT05GSUdfU01QCi0Jc3ViaQlyNCxyNSxUSFJFQUQKLQlzdWIJcjQscjQscjYKLQlzdHcJcjQsbGFzdF90YXNrX3VzZWRfbWF0aEBsKHIzKQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQkvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCi0JLyogd2UgaGF2ZW4ndCB1c2VkIGN0ciBvciB4ZXIgb3IgbHIgKi8KLQkvKiBmYWxsIHRocm91Z2ggdG8gZmFzdF9leGNlcHRpb25fcmV0dXJuICovCi0KLQkuZ2xvYmwJZmFzdF9leGNlcHRpb25fcmV0dXJuCi1mYXN0X2V4Y2VwdGlvbl9yZXR1cm46Ci0JYW5kaS4JcjEwLHI5LE1TUl9SSQkJLyogY2hlY2sgZm9yIHJlY292ZXJhYmxlIGludGVycnVwdCAqLwotCWJlcQkxZgkJCS8qIGlmIG5vdCwgd2UndmUgZ290IHByb2JsZW1zICovCi0yOglSRVNUXzRHUFJTKDMsIHIxMSkKLQlsd3oJcjEwLF9DQ1IocjExKQotCVJFU1RfR1BSKDEsIHIxMSkKLQltdGNyCXIxMAotCWx3eglyMTAsX0xJTksocjExKQotCW10bHIJcjEwCi0JUkVTVF9HUFIoMTAsIHIxMSkKLQltdHNwcglTUFJOX1NSUjEscjkKLQltdHNwcglTUFJOX1NSUjAscjEyCi0JUkVTVF9HUFIoOSwgcjExKQotCVJFU1RfR1BSKDEyLCByMTEpCi0JbHd6CXIxMSxHUFIxMShyMTEpCi0JU1lOQwotCVJGSQotCi0vKiBjaGVjayBpZiB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkIGluIGEgcmVzdGFydGFibGUgc2VjdGlvbiAqLwotMToJbGlzCXIzLGV4Y19leGl0X3Jlc3RhcnRfZW5kQGhhCi0JYWRkaQlyMyxyMyxleGNfZXhpdF9yZXN0YXJ0X2VuZEBsCi0JY21wbHcJcjEyLHIzCi0JYmdlCTNmCi0JbGlzCXI0LGV4Y19leGl0X3Jlc3RhcnRAaGEKLQlhZGRpCXI0LHI0LGV4Y19leGl0X3Jlc3RhcnRAbAotCWNtcGx3CXIxMixyNAotCWJsdAkzZgotCWxpcwlyMyxmZWVfcmVzdGFydHNAaGEKLQl0b3BoeXMocjMscjMpCi0JbHd6CXI1LGZlZV9yZXN0YXJ0c0BsKHIzKQotCWFkZGkJcjUscjUsMQotCXN0dwlyNSxmZWVfcmVzdGFydHNAbChyMykKLQltcglyMTIscjQJCS8qIHJlc3RhcnQgYXQgZXhjX2V4aXRfcmVzdGFydCAqLwotCWIJMmIKLQotCS5jb21tCWZlZV9yZXN0YXJ0cyw0Ci0KLS8qIGFhcmdoLCBhIG5vbnJlY292ZXJhYmxlIGludGVycnVwdCwgcGFuaWMgKi8KLS8qIGFhcmdoLCB3ZSBkb24ndCBrbm93IHdoaWNoIHRyYXAgdGhpcyBpcyAqLwotLyogYnV0IHRoZSA2MDEgZG9lc24ndCBpbXBsZW1lbnQgdGhlIFJJIGJpdCwgc28gYXNzdW1lIGl0J3MgT0sgKi8KLTM6Ci1CRUdJTl9GVFJfU0VDVElPTgotCWIJMmIKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzYwMSkKLQlsaQlyMTAsLTEKLQlzdHcJcjEwLFRSQVAocjExKQotCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLQlsaQlyMTAsTVNSX0tFUk5FTAotCWJsCXRyYW5zZmVyX3RvX2hhbmRsZXJfZnVsbAotCS5sb25nCW5vbnJlY292ZXJhYmxlX2V4Y2VwdGlvbgotCS5sb25nCXJldF9mcm9tX2V4Y2VwdAotCi0vKgotICogRlAgdW5hdmFpbGFibGUgdHJhcCBmcm9tIGtlcm5lbCAtIHByaW50IGEgbWVzc2FnZSwgYnV0IGxldAotICogdGhlIHRhc2sgdXNlIEZQIGluIHRoZSBrZXJuZWwgdW50aWwgaXQgcmV0dXJucyB0byB1c2VyIG1vZGUuCi0gKi8KLUtlcm5lbEZQOgotCWx3eglyMyxfTVNSKHIxKQotCW9yaQlyMyxyMyxNU1JfRlAKLQlzdHcJcjMsX01TUihyMSkJCS8qIGVuYWJsZSB1c2Ugb2YgRlAgYWZ0ZXIgcmV0dXJuICovCi0JbGlzCXIzLDg2ZkBoCi0Jb3JpCXIzLHIzLDg2ZkBsCi0JbXIJcjQscjIJCQkvKiBjdXJyZW50ICovCi0JbHd6CXI1LF9OSVAocjEpCi0JYmwJcHJpbnRrCi0JYglyZXRfZnJvbV9leGNlcHQKLTg2Ogkuc3RyaW5nCSJmbG9hdGluZyBwb2ludCB1c2VkIGluIGtlcm5lbCAodGFzaz0lcCwgcGM9JXgpXG4iCi0JLmFsaWduCTQsMAotCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIC8qIE5vdGUgdGhhdCB0aGUgQWx0aVZlYyBzdXBwb3J0IGlzIGNsb3NlbHkgbW9kZWxlZCBhZnRlciB0aGUgRlAKICAqIHN1cHBvcnQuICBDaGFuZ2VzIHRvIG9uZSBhcmUgbGlrZWx5IHRvIGJlIGFwcGxpY2FibGUgdG8gdGhlCkBAIC0xMDE2LDQyICs4ODksNiBAQAogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCiAKIC8qCi0gKiBnaXZldXBfZnB1KHRzaykKLSAqIERpc2FibGUgRlAgZm9yIHRoZSB0YXNrIGdpdmVuIGFzIHRoZSBhcmd1bWVudCwKLSAqIGFuZCBzYXZlIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgaW4gaXRzIHRocmVhZF9zdHJ1Y3QuCi0gKiBFbmFibGVzIHRoZSBGUFUgZm9yIHVzZSBpbiB0aGUga2VybmVsIG9uIHJldHVybi4KLSAqLwotCS5nbG9ibAlnaXZldXBfZnB1Ci1naXZldXBfZnB1OgotCW1mbXNyCXI1Ci0Jb3JpCXI1LHI1LE1TUl9GUAotCVNZTkNfNjAxCi0JSVNZTkNfNjAxCi0JTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLwotCVNZTkNfNjAxCi0JaXN5bmMKLQljbXB3aQkwLHIzLDAKLQliZXFsci0JCQkJLyogaWYgbm8gcHJldmlvdXMgb3duZXIsIGRvbmUgKi8KLQlhZGRpCXIzLHIzLFRIUkVBRAkgICAgICAgIC8qIHdhbnQgVEhSRUFEIG9mIHRhc2sgKi8KLQlsd3oJcjUsUFRfUkVHUyhyMykKLQljbXB3aQkwLHI1LDAKLQlTQVZFXzMyRlBSUygwLCByMykKLQltZmZzCWZyMAotCXN0ZmQJZnIwLFRIUkVBRF9GUFNDUi00KHIzKQotCWJlcQkxZgotCWx3eglyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQotCWxpCXIzLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKLQlhbmRjCXI0LHI0LHIzCQkvKiBkaXNhYmxlIEZQIGZvciBwcmV2aW91cyB0YXNrICovCi0Jc3R3CXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCi0xOgotI2lmbmRlZiBDT05GSUdfU01QCi0JbGkJcjUsMAotCWxpcwlyNCxsYXN0X3Rhc2tfdXNlZF9tYXRoQGhhCi0Jc3R3CXI1LGxhc3RfdGFza191c2VkX21hdGhAbChyNCkKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JYmxyCi0KLS8qCiAgKiBUaGlzIGNvZGUgaXMganVtcGVkIHRvIGZyb20gdGhlIHN0YXJ0dXAgY29kZSB0byBjb3B5CiAgKiB0aGUga2VybmVsIGltYWdlIHRvIHBoeXNpY2FsIGFkZHJlc3MgMC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWRfNDR4LlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUwppbmRleCA5ZWQ4MTY1Li45YjZhOGU1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUworKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUwpAQCAtNDI2LDcgKzQyNiwxMSBAQAogCVBST0dSQU1fRVhDRVBUSU9OCiAKIAkvKiBGbG9hdGluZyBQb2ludCBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0ZQVQorCUZQX1VOQVZBSUxBQkxFX0VYQ0VQVElPTgorI2Vsc2UKIAlFWENFUFRJT04oMHgyMDEwLCBGbG9hdGluZ1BvaW50VW5hdmFpbGFibGUsIFVua25vd25FeGNlcHRpb24sIEVYQ19YRkVSX0VFKQorI2VuZGlmCiAKIAkvKiBTeXN0ZW0gQ2FsbCBJbnRlcnJ1cHQgKi8KIAlTVEFSVF9FWENFUFRJT04oU3lzdGVtQ2FsbCkKQEAgLTY4Niw4ICs2OTAsMTAgQEAKICAqCiAgKiBUaGUgNDR4IGNvcmUgZG9lcyBub3QgaGF2ZSBhbiBGUFUuCiAgKi8KKyNpZm5kZWYgQ09ORklHX1BQQ19GUFUKIF9HTE9CQUwoZ2l2ZXVwX2ZwdSkKIAlibHIKKyNlbmRpZgogCiAvKgogICogZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmggYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IDg4NGRhYzkuLmYyMTNkMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaApAQCAtMzM3LDQgKzMzNywxMSBAQAogCWFkZGkgICAgcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKIAlFWENfWEZFUl9MSVRFKDB4MDkwMCwgdGltZXJfaW50ZXJydXB0KQogCisjZGVmaW5lIEZQX1VOQVZBSUxBQkxFX0VYQ0VQVElPTgkJCQkJICAgICAgXAorCVNUQVJUX0VYQ0VQVElPTihGbG9hdGluZ1BvaW50VW5hdmFpbGFibGUpCQkJICAgICAgXAorCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAorCWJuZQlsb2FkX3VwX2ZwdTsJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovICAgXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKKwlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBLZXJuZWxGUCkKKwogI2VuZGlmIC8qIF9fSEVBRF9CT09LRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKaW5kZXggZDY0YmY2MS4uZjIyZGRjZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTUwNCw3ICs1MDQsMTEgQEAKIAlQUk9HUkFNX0VYQ0VQVElPTgogCiAJLyogRmxvYXRpbmcgUG9pbnQgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCisjaWZkZWYgQ09ORklHX1BQQ19GUFUKKwlGUF9VTkFWQUlMQUJMRV9FWENFUFRJT04KKyNlbHNlCiAJRVhDRVBUSU9OKDB4MDgwMCwgRmxvYXRpbmdQb2ludFVuYXZhaWxhYmxlLCBVbmtub3duRXhjZXB0aW9uLCBFWENfWEZFUl9FRSkKKyNlbmRpZgogCiAJLyogU3lzdGVtIENhbGwgSW50ZXJydXB0ICovCiAJU1RBUlRfRVhDRVBUSU9OKFN5c3RlbUNhbGwpCkBAIC05MTYsMTAgKzkyMCwxMiBAQAogLyoKICAqIGV4dGVybiB2b2lkIGdpdmV1cF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogICoKLSAqIFRoZSBlNTAwIGNvcmUgZG9lcyBub3QgaGF2ZSBhbiBGUFUuCisgKiBOb3QgYWxsIEZTTCBCb29rLUUgY29yZXMgaGF2ZSBhbiBGUFUKICAqLworI2lmbmRlZiBDT05GSUdfUFBDX0ZQVQogX0dMT0JBTChnaXZldXBfZnB1KQogCWJscgorI2VuZGlmCiAKIC8qCiAgKiBleHRlcm4gdm9pZCBhYm9ydCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKaW5kZXggNzNmN2MyMy4uZTRmMTYxNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCkBAIC0xMDk2LDE3ICsxMDk2LDcgQEAKICAqIGFuZCBleGNlcHRpb25zIGFzIGlmIHRoZSBjcHUgaGFkIHBlcmZvcm1lZCB0aGUgbG9hZCBvciBzdG9yZS4KICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19FNTAwKQotX0dMT0JBTChjdnRfZmQpCi0JbGZzCTAsMChyMykKLQlzdGZkCTAsMChyNCkKLQlibHIKLQotX0dMT0JBTChjdnRfZGYpCi0JbGZkCTAsMChyMykKLQlzdGZzCTAsMChyNCkKLQlibHIKLSNlbHNlCisjaWZkZWYgQ09ORklHX1BQQ19GUFUKIF9HTE9CQUwoY3Z0X2ZkKQogCWxmZAkwLC00KHI1KQkvKiBsb2FkIHVwIGZwc2NyIHZhbHVlICovCiAJbXRmc2YJMHhmZiwwCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDI2YjZmNy4uNTlkNTlhOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMzU2LDcgKzM1Nyw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOiB7IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTM4OSw3ICszOTAsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogeyAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJc2V0X3NpbmdsZV9zdGVwKGNoaWxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKaW5kZXggMzYxODY1Yy4uZjhlN2UzMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogI2Vsc2UKICNkZWZpbmUgZ2V0X21jX3JlYXNvbihyZWdzKQkobWZzcHIoU1BSTl9NQ1NSKSkKICNlbmRpZgotI2RlZmluZSBSRUFTT05fRlAJCTAKKyNkZWZpbmUgUkVBU09OX0ZQCQlFU1JfRlAKICNkZWZpbmUgUkVBU09OX0lMTEVHQUwJCUVTUl9QSUwKICNkZWZpbmUgUkVBU09OX1BSSVZJTEVHRUQJRVNSX1BQUgogI2RlZmluZSBSRUFTT05fVFJBUAkJRVNSX1BUUgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY2FjaGUuUyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2NhY2hlLlMKaW5kZXggZGEzNGE5Yi4uZmI5NzdkZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfY2FjaGUuUworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19jYWNoZS5TCkBAIC02NCwyNyArNjQsMzkgQEAKIAltdHNwcglTUFJOX0hJRDAscjQJCS8qIERpc2FibGUgRFBNICovCiAJc3luYwogCi0JLyogZGlzcC1mbHVzaCBMMSAqLwotCWxpCXI0LDB4NDAwMAotCW10Y3RyCXI0CisJLyogRGlzcC1mbHVzaCBMMS4gV2UgaGF2ZSBhIHdlaXJkIHByb2JsZW0gaGVyZSB0aGF0IEkgbmV2ZXIKKwkgKiB0b3RhbGx5IGZpZ3VyZWQgb3V0LiBPbiA3NTBGWCwgdXNpbmcgdGhlIFJPTSBmb3IgdGhlIGZsdXNoCisJICogcmVzdWx0cyBpbiBhIG5vbi13b3JraW5nIGZsdXNoLiBXZSB1c2UgdGhhdCB3b3JrYXJvdW5kIGZvcgorCSAqIG5vdyB1bnRpbCBJIGZpbmFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24uIC0tQmVuSAorCSAqLworCisJLyogUk9NIGJhc2UgYnkgZGVmYXVsdCAqLwogCWxpcwlyNCwweGZmZjAKLTE6CWx3engJcjAscjAscjQKKwltZnB2cglyMworCXNyd2kJcjMscjMsMTYKKwljbXBsd2kJY3IwLHIzLDB4NzAwMAorCWJuZSsJMWYKKwkvKiBSQU0gYmFzZSBvbiA3NTBGWCAqLworCWxpCXI0LDAKKzE6CWxpCXI0LDB4NDAwMAorCW10Y3RyCXI0CisxOglsd3oJcjAsMChyNCkKIAlhZGRpCXI0LHI0LDMyCiAJYmRuegkxYgogCXN5bmMKIAlpc3luYwogCi0JLyogZGlzYWJsZSAvIGludmFsaWRhdGUgLyBlbmFibGUgTDEgZGF0YSAqLworCS8qIERpc2FibGUgLyBpbnZhbGlkYXRlIC8gZW5hYmxlIEwxIGRhdGEgKi8KIAltZnNwcglyMyxTUFJOX0hJRDAKLQlybHdpbm0JcjAscjAsMCx+SElEMF9EQ0UKKwlybHdpbm0JcjMscjMsMCx+KEhJRDBfRENFIHwgSElEMF9JQ0UpCiAJbXRzcHIJU1BSTl9ISUQwLHIzCiAJc3luYwogCWlzeW5jCi0Jb3JpCXIzLHIzLEhJRDBfRENFfEhJRDBfRENJCisJb3JpCXIzLHIzLChISUQwX0RDRXxISUQwX0RDSXxISUQwX0lDRXxISUQwX0lDRkkpCiAJc3luYwogCWlzeW5jCiAJbXRzcHIJU1BSTl9ISUQwLHIzCi0JeG9yaQlyMyxyMyxISUQwX0RDSQorCXhvcmkJcjMscjMsKEhJRDBfRENJfEhJRDBfSUNGSSkKIAltdHNwcglTUFJOX0hJRDAscjMKIAlzeW5jCiAKQEAgLTExMCwxMSArMTIyLDIwIEBACiAJbGlzCXI0LDIKIAltdGN0cglyNAogCWxpcwlyNCwweGZmZjAKLTE6CWx3engJcjAscjAscjQKKzE6CWx3eglyMCwwKHI0KQogCWFkZGkJcjQscjQsMzIKIAliZG56CTFiCiAJc3luYwogCWlzeW5jCisJbGlzCXI0LDIKKwltdGN0cglyNAorCWxpcwlyNCwweGZmZjAKKzE6CWRjYmYJMCxyNAorCWFkZGkJcjQscjQsMzIKKwliZG56CTFiCisJc3luYworCWlzeW5jCisKIAkvKiBub3cgZGlzYWJsZSBMMiAqLwogCXJsd2lubQlyNSxyNSwwLH5MMkNSX0wyRQogCWIJMmYKQEAgLTEzNSw2ICsxNTYsMTMgQEAKIAltdHNwcglTUFJOX0wyQ1IscjQKIAlzeW5jCiAJaXN5bmMKKworCS8qIFdhaXQgZm9yIHRoZSBpbnZhbGlkYXRpb24gdG8gY29tcGxldGUgKi8KKzE6CW1mc3ByCXIzLFNQUk5fTDJDUgorCXJsd2lubS4JcjAscjMsMCwzMSwzMQorCWJuZQkxYgorCisJLyogQ2xlYXIgTDJJICovCiAJeG9yaXMJcjQscjQsTDJDUl9MMklAaAogCXN5bmMKIAltdHNwcglTUFJOX0wyQ1IscjQKQEAgLTE0MiwxNCArMTcwLDE2IEBACiAKIAkvKiBub3cgZGlzYWJsZSB0aGUgTDEgZGF0YSBjYWNoZSAqLwogCW1mc3ByCXIwLFNQUk5fSElEMAotCXJsd2lubQlyMCxyMCwwLH5ISUQwX0RDRQorCXJsd2lubQlyMCxyMCwwLH4oSElEMF9EQ0V8SElEMF9JQ0UpCiAJbXRzcHIJU1BSTl9ISUQwLHIwCiAJc3luYwogCWlzeW5jCiAKIAkvKiBSZXN0b3JlIEhJRDBbRFBNXSB0byB3aGF0ZXZlciBpdCB3YXMgYmVmb3JlICovCiAJc3luYwotCW10c3ByCVNQUk5fSElEMCxyOAorCW1mc3ByCXIwLFNQUk5fSElEMAorCXJsd2ltaQlyMCxyOCwwLDExLDExCQkvKiBUdXJuIGJhY2sgSElEMFtEUE1dICovCisJbXRzcHIJU1BSTl9ISUQwLHIwCiAJc3luYwogCiAJLyogcmVzdG9yZSBEUiBhbmQgRUUgKi8KQEAgLTIwMSw3ICsyMzEsNyBAQAogICAgICAgICBtdGN0ciAgIHI0CiAgCWxpICAgICAgcjQsMAogMToKLSAgICAgICAgbHd6eCAgICByMCxyMCxyNAorICAgICAgICBsd3ogICAgIHIwLDAocjQpCiAgICAgICAgIGFkZGkgICAgcjQscjQsMzIgICAgICAgICAgICAgICAgLyogR28gdG8gc3RhcnQgb2YgbmV4dCBjYWNoZSBsaW5lICovCiAgICAgICAgIGJkbnogICAgMWIKICAgICAgICAgaXN5bmMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYwppbmRleCA0NmNiZjM2Li44NjczMzZhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19mZWF0dXJlLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfZmVhdHVyZS5jCkBAIC0xNTkwLDYgKzE1OTAsMTE0IEBACiAJbWRlbGF5KDEwKTsKIH0KIAorCit2b2lkIF9fcG1hYyBwbWFjX3R3ZWFrX2Nsb2NrX3NwcmVhZGluZyhpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtYWNpb19jaGlwKiBtYWNpbyA9ICZtYWNpb19jaGlwc1swXTsKKworCS8qIEhhY2sgZm9yIGRvaW5nIGNsb2NrIHNwcmVhZGluZyBvbiBzb21lIG1hY2hpbmVzIFBvd2VyQm9va3MgYW5kCisJICogaUJvb2tzLiBUaGlzIGltcGxlbWVudHMgdGhlICJwbGF0Zm9ybS1kby1jbG9ja3NwcmVhZGluZyIgT0YKKwkgKiBwcm9wZXJ0eSBhcyBkZWNvZGVkIG1hbnVhbGx5IG9uIHZhcmlvdXMgbW9kZWxzLiBGb3Igc2FmZXR5LCB3ZSBhbHNvCisJICogY2hlY2sgdGhlIHByb2R1Y3QgSUQgaW4gdGhlIGRldmljZS10cmVlIGluIGNhc2VzIHdlJ2xsIHdoYWNrIHRoZSBpMmMKKwkgKiBjaGlwIHRvIG1ha2UgcmVhc29uYWJseSBzdXJlIHdlIHdvbid0IHNldCB3cm9uZyB2YWx1ZXMgaW4gdGhlcmUKKwkgKgorCSAqIE9mIGNvdXJzZSwgdWx0aW1hdGVseSwgd2UgaGF2ZSB0byBpbXBsZW1lbnQgYSByZWFsIHBhcnNlciBmb3IKKwkgKiB0aGUgcGxhdGZvcm0tZG8tKiBzdHVmZi4uLgorCSAqLworCisJaWYgKG1hY2lvLT50eXBlID09IG1hY2lvX2ludHJlcGlkKSB7CisJCWlmIChlbmFibGUpCisJCQlVTl9PVVQoVU5JX05fQ0xPQ0tfU1BSRUFESU5HLCAyKTsKKwkJZWxzZQorCQkJVU5fT1VUKFVOSV9OX0NMT0NLX1NQUkVBRElORywgMCk7CisJCW1kZWxheSg0MCk7CisJfQorCisJd2hpbGUgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwyIikgfHwKKwkgICAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAorCSAgICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMiIpIHx8CisJICAgICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICp1aTJjID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImkyYyIpOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmR0ID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImRldmljZS10cmVlIik7CisJCXU4IGJ1ZmZlcls5XTsKKwkJdTMyICpwcm9kdWN0SUQ7CisJCWludCBpLCByYywgY2hhbmdlZCA9IDA7CisKKwkJaWYgKGR0ID09IE5VTEwpCisJCQlicmVhazsKKwkJcHJvZHVjdElEID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkdCwgInBpZCMiLCBOVUxMKTsKKwkJaWYgKHByb2R1Y3RJRCA9PSBOVUxMKQorCQkJYnJlYWs7CisJCXdoaWxlKHVpMmMpIHsKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcCA9IG9mX2dldF9wYXJlbnQodWkyYyk7CisJCQlpZiAocCAmJiAhc3RyY21wKHAtPm5hbWUsICJ1bmktbiIpKQorCQkJCWJyZWFrOworCQkJdWkyYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKHVpMmMsICJpMmMiKTsKKwkJfQorCQlpZiAodWkyYyA9PSBOVUxMKQorCQkJYnJlYWs7CisJCURCRygiVHJ5aW5nIHRvIGJ1bXAgY2xvY2sgc3BlZWQgZm9yIFBJRDogJTA4eC4uLlxuIiwgKnByb2R1Y3RJRCk7CisJCXJjID0gcG1hY19sb3dfaTJjX29wZW4odWkyYywgMSk7CisJCWlmIChyYyAhPSAwKQorCQkJYnJlYWs7CisJCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX2NvbWJpbmVkKTsKKwkJcmMgPSBwbWFjX2xvd19pMmNfeGZlcih1aTJjLCAweGQyIHwgcG1hY19sb3dfaTJjX3JlYWQsIDB4ODAsIGJ1ZmZlciwgOSk7CisJCURCRygicmVhZCByZXN1bHQ6ICVkLCIsIHJjKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaT0wOyBpPDk7IGkrKykKKwkJCURCRygiICUwMngiLCBidWZmZXJbaV0pOworCQlEQkcoIlxuIik7CisKKwkJc3dpdGNoKCpwcm9kdWN0SUQpIHsKKwkJY2FzZSAweDExODI6CS8qIEFsQm9vayAxMiIgcmV2IDIgKi8KKwkJY2FzZSAweDExODM6CS8qIGlCb29rIEc0IDEyIiAqLworCQkJYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4OGYpIHwgMHg3MDsKKwkJCWJ1ZmZlclsyXSA9IChidWZmZXJbMl0gJiAweDdmKSB8IDB4MDA7CisJCQlidWZmZXJbNV0gPSAoYnVmZmVyWzVdICYgMHg4MCkgfCAweDMxOworCQkJYnVmZmVyWzZdID0gKGJ1ZmZlcls2XSAmIDB4NDApIHwgMHhiMDsKKwkJCWJ1ZmZlcls3XSA9IChidWZmZXJbN10gJiAweDAwKSB8IChlbmFibGUgPyAweGMwIDogMHhiYSk7CisJCQlidWZmZXJbOF0gPSAoYnVmZmVyWzhdICYgMHgwMCkgfCAweDMwOworCQkJY2hhbmdlZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAweDMxNDI6CS8qIEFsQm9vayAxNSIgKEFUSSBNMTApICovCisJCWNhc2UgMHgzMTQzOgkvKiBBbEJvb2sgMTciIChBVEkgTTEwKSAqLworCQkJYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4YWYpIHwgMHg1MDsKKwkJCWJ1ZmZlclsyXSA9IChidWZmZXJbMl0gJiAweDdmKSB8IDB4MDA7CisJCQlidWZmZXJbNV0gPSAoYnVmZmVyWzVdICYgMHg4MCkgfCAweDMxOworCQkJYnVmZmVyWzZdID0gKGJ1ZmZlcls2XSAmIDB4NDApIHwgMHhiMDsKKwkJCWJ1ZmZlcls3XSA9IChidWZmZXJbN10gJiAweDAwKSB8IChlbmFibGUgPyAweGQwIDogMHhjMCk7CisJCQlidWZmZXJbOF0gPSAoYnVmZmVyWzhdICYgMHgwMCkgfCAweDMwOworCQkJY2hhbmdlZCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURCRygiaTJjLWh3Y2xvY2s6IE1hY2hpbmUgbW9kZWwgbm90IGhhbmRsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaGFuZ2VkKSB7CisJCQlwbWFjX2xvd19pMmNfY2xvc2UodWkyYyk7CisJCQlicmVhazsKKwkJfQorCQlwbWFjX2xvd19pMmNfc2V0bW9kZSh1aTJjLCBwbWFjX2xvd19pMmNfbW9kZV9zdGRzdWIpOworCQlyYyA9IHBtYWNfbG93X2kyY194ZmVyKHVpMmMsIDB4ZDIgfCBwbWFjX2xvd19pMmNfd3JpdGUsIDB4ODAsIGJ1ZmZlciwgOSk7CisJCURCRygid3JpdGUgcmVzdWx0OiAlZCwiLCByYyk7CisJCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX2NvbWJpbmVkKTsKKwkJcmMgPSBwbWFjX2xvd19pMmNfeGZlcih1aTJjLCAweGQyIHwgcG1hY19sb3dfaTJjX3JlYWQsIDB4ODAsIGJ1ZmZlciwgOSk7CisJCURCRygicmVhZCByZXN1bHQ6ICVkLCIsIHJjKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaT0wOyBpPDk7IGkrKykKKwkJCURCRygiICUwMngiLCBidWZmZXJbaV0pOworCQlwbWFjX2xvd19pMmNfY2xvc2UodWkyYyk7CisJCWJyZWFrOworCX0KK30KKworCiBzdGF0aWMgaW50IF9fcG1hYwogY29yZTk5X3NsZWVwKHZvaWQpCiB7CkBAIC0xNjAxLDEyICsxNzA5LDYgQEAKIAkgICAgbWFjaW8tPnR5cGUgIT0gbWFjaW9faW50cmVwaWQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogVGhlIGRldmljZS10cmVlIGNvbnRhaW5zIHRoYXQgaW4gdGhlIGh3Y2xvY2sgbm9kZSAqLwotCWlmIChtYWNpby0+dHlwZSA9PSBtYWNpb19pbnRyZXBpZCkgewotCQlVTl9PVVQoVU5JX05fQ0xPQ0tfU1BSRUFESU5HLCAwKTsKLQkJbWRlbGF5KDQwKTsKLQl9Ci0KIAkvKiBXZSBwb3dlciBvZmYgdGhlIHdpcmVsZXNzIHNsb3QgaW4gY2FzZSBpdCB3YXMgbm90IGRvbmUKIAkgKiBieSB0aGUgZHJpdmVyLiBXZSBkb24ndCBwb3dlciBpdCBvbiBhdXRvbWF0aWNhbGx5IGhvd2V2ZXIKIAkgKi8KQEAgLTE3NDksMTIgKzE4NTEsNiBAQAogCVVOX09VVChVTklfTl9DTE9DS19DTlRMLCBzYXZlX3VuaW5fY2xvY2tfY3RsKTsKIAl1ZGVsYXkoMTAwKTsKIAotCS8qIFJlc3RvcmUgY2xvY2sgc3ByZWFkaW5nICovCi0JaWYgKG1hY2lvLT50eXBlID09IG1hY2lvX2ludHJlcGlkKSB7Ci0JCVVOX09VVChVTklfTl9DTE9DS19TUFJFQURJTkcsIDIpOwotCQltZGVsYXkoNDApOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0yMTQ5LDcgKzIyNDUsNyBAQAogCX0sCiAJewkiUG93ZXJCb29rMSwxIiwJCQkiUG93ZXJCb29rIDEwMSAoTG9tYmFyZCkiLAogCQlQTUFDX1RZUEVfMTAxX1BCT09LLAkJcGFkZGluZ3Rvbl9mZWF0dXJlcywKLQkJUE1BQ19NQl9NQVlfU0xFRVAgfCBQTUFDX01CX01PQklMRQorCQlQTUFDX01CX0NBTl9TTEVFUCB8IFBNQUNfTUJfTU9CSUxFCiAJfSwKIAl7CSJQb3dlckJvb2syLDEiLAkJCSJpQm9vayAoZmlyc3QgZ2VuZXJhdGlvbikiLAogCQlQTUFDX1RZUEVfT1JJR19JQk9PSywJCWNvcmU5OV9mZWF0dXJlcywKQEAgLTI3MTgsOTcgKzI4MTQsMTEgQEAKIAkJTUFDSU9fQklDKEhFQVRIUk9XX0ZDUiwgSFJXX1NPVU5EX1BPV0VSX04pOwogCX0KIAotCS8qIEhhY2sgZm9yIGJ1bXBpbmcgY2xvY2sgc3BlZWQgb24gdGhlIG5ldyBQb3dlckJvb2tzIGFuZCB0aGUKLQkgKiBpQm9vayBHNC4gVGhpcyBpbXBsZW1lbnRzIHRoZSAicGxhdGZvcm0tZG8tY2xvY2tzcHJlYWRpbmciIE9GCi0JICogcHJvcGVydHkuIEZvciBzYWZldHksIHdlIGFsc28gY2hlY2sgdGhlIHByb2R1Y3QgSUQgaW4gdGhlCi0JICogZGV2aWNlLXRyZWUgdG8gbWFrZSByZWFzb25hYmx5IHN1cmUgd2Ugd29uJ3Qgc2V0IHdyb25nIHZhbHVlcwotCSAqIGluIHRoZSBjbG9jayBjaGlwLgotCSAqCi0JICogT2YgY291cnNlLCB1bHRpbWF0ZWx5LCB3ZSBoYXZlIHRvIGltcGxlbWVudCBhIHJlYWwgcGFyc2VyIGZvcgotCSAqIHRoZSBwbGF0Zm9ybS1kby0qIHN0dWZmLi4uCisJLyogU29tZSBtYWNoaW5lIG1vZGVscyBuZWVkIHRoZSBjbG9jayBjaGlwIHRvIGJlIHByb3Blcmx5IHNldHVwIGZvcgorCSAqIGNsb2NrIHNwcmVhZGluZyBub3cuIFRoaXMgc2hvdWxkIGJlIGEgcGxhdGZvcm0gZnVuY3Rpb24gYnV0IHdlCisJICogZG9uJ3QgZG8gdGhlc2UgYXQgdGhlIG1vbWVudAogCSAqLwotCXdoaWxlIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMiIpIHx8Ci0JICAgICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSwzIikgfHwKLQkgICAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDIiKSB8fAotCSAgICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdWkyYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJpMmMiKTsKLQkJc3RydWN0IGRldmljZV9ub2RlICpkdCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJkZXZpY2UtdHJlZSIpOwotCQl1OCBidWZmZXJbOV07Ci0JCXUzMiAqcHJvZHVjdElEOwotCQlpbnQgaSwgcmMsIGNoYW5nZWQgPSAwOwotCQkKLQkJaWYgKGR0ID09IE5VTEwpCi0JCQlicmVhazsKLQkJcHJvZHVjdElEID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkdCwgInBpZCMiLCBOVUxMKTsKLQkJaWYgKHByb2R1Y3RJRCA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCXdoaWxlKHVpMmMpIHsKLQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcCA9IG9mX2dldF9wYXJlbnQodWkyYyk7Ci0JCQlpZiAocCAmJiAhc3RyY21wKHAtPm5hbWUsICJ1bmktbiIpKQotCQkJCWJyZWFrOwotCQkJdWkyYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKHVpMmMsICJpMmMiKTsKLQkJfQotCQlpZiAodWkyYyA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCURCRygiVHJ5aW5nIHRvIGJ1bXAgY2xvY2sgc3BlZWQgZm9yIFBJRDogJTA4eC4uLlxuIiwgKnByb2R1Y3RJRCk7Ci0JCXJjID0gcG1hY19sb3dfaTJjX29wZW4odWkyYywgMSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7Ci0JCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX2NvbWJpbmVkKTsKLQkJcmMgPSBwbWFjX2xvd19pMmNfeGZlcih1aTJjLCAweGQyIHwgcG1hY19sb3dfaTJjX3JlYWQsIDB4ODAsIGJ1ZmZlciwgOSk7Ci0JCURCRygicmVhZCByZXN1bHQ6ICVkLCIsIHJjKTsKLQkJaWYgKHJjICE9IDApIHsKLQkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWZvciAoaT0wOyBpPDk7IGkrKykKLQkJCURCRygiICUwMngiLCBidWZmZXJbaV0pOwotCQlEQkcoIlxuIik7Ci0JCQotCQlzd2l0Y2goKnByb2R1Y3RJRCkgewotCQljYXNlIDB4MTE4MjoJLyogQWxCb29rIDEyIiByZXYgMiAqLwotCQljYXNlIDB4MTE4MzoJLyogaUJvb2sgRzQgMTIiICovCi0JCQlidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHg4ZikgfCAweDcwOwotCQkJYnVmZmVyWzJdID0gKGJ1ZmZlclsyXSAmIDB4N2YpIHwgMHgwMDsKLQkJCWJ1ZmZlcls1XSA9IChidWZmZXJbNV0gJiAweDgwKSB8IDB4MzE7Ci0JCQlidWZmZXJbNl0gPSAoYnVmZmVyWzZdICYgMHg0MCkgfCAweGIwOwotCQkJYnVmZmVyWzddID0gKGJ1ZmZlcls3XSAmIDB4MDApIHwgMHhjMDsKLQkJCWJ1ZmZlcls4XSA9IChidWZmZXJbOF0gJiAweDAwKSB8IDB4MzA7Ci0JCQljaGFuZ2VkID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MzE0MjoJLyogQWxCb29rIDE1IiAoQVRJIE0xMCkgKi8KLQkJY2FzZSAweDMxNDM6CS8qIEFsQm9vayAxNyIgKEFUSSBNMTApICovCi0JCQlidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHhhZikgfCAweDUwOwotCQkJYnVmZmVyWzJdID0gKGJ1ZmZlclsyXSAmIDB4N2YpIHwgMHgwMDsKLQkJCWJ1ZmZlcls1XSA9IChidWZmZXJbNV0gJiAweDgwKSB8IDB4MzE7Ci0JCQlidWZmZXJbNl0gPSAoYnVmZmVyWzZdICYgMHg0MCkgfCAweGIwOwotCQkJYnVmZmVyWzddID0gKGJ1ZmZlcls3XSAmIDB4MDApIHwgMHhkMDsKLQkJCWJ1ZmZlcls4XSA9IChidWZmZXJbOF0gJiAweDAwKSB8IDB4MzA7Ci0JCQljaGFuZ2VkID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHKCJpMmMtaHdjbG9jazogTWFjaGluZSBtb2RlbCBub3QgaGFuZGxlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoIWNoYW5nZWQpIHsKLQkJCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBtYWNfbG93X2kyY19zZXRtb2RlKHVpMmMsIHBtYWNfbG93X2kyY19tb2RlX3N0ZHN1Yik7Ci0JCXJjID0gcG1hY19sb3dfaTJjX3hmZXIodWkyYywgMHhkMiB8IHBtYWNfbG93X2kyY193cml0ZSwgMHg4MCwgYnVmZmVyLCA5KTsKLQkJREJHKCJ3cml0ZSByZXN1bHQ6ICVkLCIsIHJjKTsKLQkJcG1hY19sb3dfaTJjX3NldG1vZGUodWkyYywgcG1hY19sb3dfaTJjX21vZGVfY29tYmluZWQpOwotCQlyYyA9IHBtYWNfbG93X2kyY194ZmVyKHVpMmMsIDB4ZDIgfCBwbWFjX2xvd19pMmNfcmVhZCwgMHg4MCwgYnVmZmVyLCA5KTsKLQkJREJHKCJyZWFkIHJlc3VsdDogJWQsIiwgcmMpOwotCQlpZiAocmMgIT0gMCkgewotCQkJcG1hY19sb3dfaTJjX2Nsb3NlKHVpMmMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZm9yIChpPTA7IGk8OTsgaSsrKQotCQkJREJHKCIgJTAyeCIsIGJ1ZmZlcltpXSk7Ci0JCXBtYWNfbG93X2kyY19jbG9zZSh1aTJjKTsKLQkJYnJlYWs7Ci0JfQorCXBtYWNfdHdlYWtfY2xvY2tfc3ByZWFkaW5nKDEpOwogCiAjZW5kaWYgLyogQ09ORklHX1BPV0VSNCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19zbGVlcC5TIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfc2xlZXAuUwppbmRleCAzMTM5YjY3Li5mNDU5YWRlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19zbGVlcC5TCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3NsZWVwLlMKQEAgLTI2Nyw2ICsyNjcsMTAgQEAKIAkvKiBSZXN0b3JlIHZhcmlvdXMgQ1BVIGNvbmZpZyBzdHVmZnMgKi8KIAlibAlfX3Jlc3RvcmVfY3B1X3NldHVwCiAKKwkvKiBNYWtlIHN1cmUgYWxsIEZQUnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkICovCisJYmwJcmVsb2Nfb2Zmc2V0CisJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKKwogCS8qIEludmFsaWRhdGUgJiBlbmFibGUgTDEgY2FjaGUsIHdlIGRvbid0IGNhcmUgYWJvdXQKIAkgKiB3aGF0ZXZlciB0aGUgUk9NIG1heSBoYXZlIHRyaWVkIHRvIHdyaXRlIHRvIG1lbW9yeQogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYwppbmRleCAyYTk5YjQzLi5jMzA2MDdhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYwpAQCAtNjgsNiArNjgsNyBAQAogI2RlZmluZSBQUEM3RF9SU1RfUElOCQkJMTcgCS8qIEdQUDE3ICovCiAKIGV4dGVybiB1MzIgbXY2NDM2MF9pcnFfYmFzZTsKK2V4dGVybiBzcGlubG9ja190IHJ0Y19sb2NrOwogCiBzdGF0aWMgc3RydWN0IG12NjR4NjBfaGFuZGxlIGJoOwogc3RhdGljIGludCBwcGM3ZF9oYXNfYWxtYTsKQEAgLTc1LDYgKzc2LDExIEBACiBleHRlcm4gdm9pZCBnZW41NTBfcHJvZ3Jlc3MoY2hhciAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBnZW41NTBfaW5pdChpbnQsIHN0cnVjdCB1YXJ0X3BvcnQgKik7CiAKKy8qIEZJWE1FIC0gbW92ZSB0byBoIGZpbGUgKi8KK2V4dGVybiBpbnQgZHMxMzM3X2RvX2NvbW1hbmQoaW50IGlkLCBpbnQgY21kLCB2b2lkICphcmcpOworI2RlZmluZSBEUzEzMzdfR0VUX0RBVEUgICAgICAgICAwCisjZGVmaW5lIERTMTMzN19TRVRfREFURSAgICAgICAgIDEKKwogLyogcmVzaWR1YWwgZGF0YSAqLwogdW5zaWduZWQgY2hhciBfX3Jlc1tzaXplb2YoYmRfdCldOwogCkBAIC0yNTMsNiArMjU5LDggQEAKIAl1OCB2YWwxLCB2YWwyOwogCXN0YXRpYyBpbnQgZmxhc2hfc2l6ZXNbNF0gPSB7IDY0LCAzMiwgMCwgMTYgfTsKIAlzdGF0aWMgaW50IGZsYXNoX2JhbmtzWzRdID0geyA0LCAzLCAyLCAxIH07CisJc3RhdGljIGludCBzZHJhbV9iYW5rX3NpemVzWzRdID0geyAxMjgsIDI1NiwgNTEyLCAxIH07CisJaW50IHNkcmFtX251bV9iYW5rcyA9IDI7CiAJc3RhdGljIGNoYXIgKnBjaV9tb2Rlc1tdID0geyAiUENJMzMiLCAiUENJNjYiLAogCQkiVW5rbm93biIsICJVbmtub3duIiwKIAkJIlBDSVgzMyIsICJQQ0lYNjYiLApAQCAtMjc5LDEzICsyODcsMTcgQEAKIAkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9NQl9UWVBFX1BMTF8xMDApID8gMTAwIDoKIAkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9NQl9UWVBFX1BMTF82NCkgPyA2NCA6IDApOwogCisJdmFsID0gaW5iKFBQQzdEX0NQTERfTUVNX0NPTkZJRyk7CisJaWYgKHZhbCAmIFBQQzdEX0NQTERfU0RSQU1fQkFOS19OVU1fTUFTSykgc2RyYW1fbnVtX2JhbmtzLS07CisKIAl2YWwgPSBpbmIoUFBDN0RfQ1BMRF9NRU1fQ09ORklHX0VYVEVORCk7Ci0JdmFsMSA9IHZhbCAmIFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFX01BU0s7Ci0Jc2VxX3ByaW50ZihtLCAiU0RSQU1cdFx0OiAlZCVjIiwKLQkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9TRFJBTV9CQU5LX1NJWkVfMTI4TSkgPyAxMjggOgotCQkgICAodmFsMSA9PSBQUEM3RF9DUExEX1NEUkFNX0JBTktfU0laRV8yNTZNKSA/IDI1NiA6Ci0JCSAgICh2YWwxID09IFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFXzUxMk0pID8gNTEyIDogMSwKLQkJICAgKHZhbDEgPT0gUFBDN0RfQ1BMRF9TRFJBTV9CQU5LX1NJWkVfMUcpID8gJ0cnIDogJ00nKTsKKwl2YWwxID0gKHZhbCAmIFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFX01BU0spID4+IDY7CisJc2VxX3ByaW50ZihtLCAiU0RSQU1cdFx0OiAlZCBiYW5rcyBvZiAlZCVjLCB0b3RhbCAlZCVjIiwKKwkJICAgc2RyYW1fbnVtX2JhbmtzLAorCQkgICBzZHJhbV9iYW5rX3NpemVzW3ZhbDFdLAorCQkgICAoc2RyYW1fYmFua19zaXplc1t2YWwxXSA8IDEyOCkgPyAnRycgOiAnTScsCisJCSAgIHNkcmFtX251bV9iYW5rcyAqIHNkcmFtX2Jhbmtfc2l6ZXNbdmFsMV0sCisJCSAgIChzZHJhbV9iYW5rX3NpemVzW3ZhbDFdIDwgMTI4KSA/ICdHJyA6ICdNJyk7CiAJaWYgKHZhbDIgJiBQUEM3RF9DUExEX01CX1RZUEVfRUNDX0ZJVFRFRF9NQVNLKSB7CiAJCXNlcV9wcmludGYobSwgIiBbRUNDICVzYWJsZWRdIiwKIAkJCSAgICh2YWwyICYgUFBDN0RfQ1BMRF9NQl9UWVBFX0VDQ19FTkFCTEVfTUFTSykgPyAiZW4iIDoKQEAgLTEyMzYsNiArMTI0OCwzOCBAQAogCXByaW50ayhLRVJOX0lORk8gIlJhZHN0b25lIFRlY2hub2xvZ3kgUFBDN0RcbiIpOwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygicHBjN2Rfc2V0dXBfYXJjaDogZXhpdCIsIDApOworCit9CisKKy8qIFJlYWwgVGltZSBDbG9jayBzdXBwb3J0LgorICogUFBDN0QgaGFzIGEgRFMxMzM3IGFjY2Vzc2VkIGJ5IEkyQy4KKyAqLworc3RhdGljIHVsb25nIHBwYzdkX2dldF9ydGNfdGltZSh2b2lkKQoreworICAgICAgICBzdHJ1Y3QgcnRjX3RpbWUgdG07CisgICAgICAgIGludCByZXN1bHQ7CisKKyAgICAgICAgc3Bpbl9sb2NrKCZydGNfbG9jayk7CisgICAgICAgIHJlc3VsdCA9IGRzMTMzN19kb19jb21tYW5kKDAsIERTMTMzN19HRVRfREFURSwgJnRtKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWt0aW1lKHRtLnRtX3llYXIsIHRtLnRtX21vbiwgdG0udG1fbWRheSwgdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcHBjN2Rfc2V0X3J0Y190aW1lKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKyAgICAgICAgc3RydWN0IHJ0Y190aW1lIHRtOworICAgICAgICBpbnQgcmVzdWx0OworCisgICAgICAgIHNwaW5fbG9jaygmcnRjX2xvY2spOworICAgICAgICB0b190bShub3d0aW1lLCAmdG0pOworICAgICAgICByZXN1bHQgPSBkczEzMzdfZG9fY29tbWFuZCgwLCBEUzEzMzdfU0VUX0RBVEUsICZ0bSk7CisgICAgICAgIHNwaW5fdW5sb2NrKCZydGNfbG9jayk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogVGhpcyBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBoYXZlIHRoZSB0YXJnZXQKQEAgLTEyOTMsNiArMTMzNywxMCBAQAogCWRhdGE4IHw9IDB4MDc7CiAJb3V0YihkYXRhOCwgUFBDN0RfQ1BMRF9MRURTKTsKIAorICAgICAgICAvKiBIb29rIHVwIFJUQy4gV2UgY291bGRuJ3QgZG8gdGhpcyBlYXJsaWVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgSTJDIHN1YnN5c3RlbSAqLworICAgICAgICBwcGNfbWQuc2V0X3J0Y190aW1lID0gcHBjN2Rfc2V0X3J0Y190aW1lOworICAgICAgICBwcGNfbWQuZ2V0X3J0Y190aW1lID0gcHBjN2RfZ2V0X3J0Y190aW1lOworCiAJcHJfZGVidWcoIiVzOiBleGl0XG4iLCBfX0ZVTkNUSU9OX18pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oCmluZGV4IDQ1NDZmZmYyLi45MzgzNzU1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaApAQCAtMjQwLDYgKzI0MCw3IEBACiAjZGVmaW5lIFBQQzdEX0NQTERfRkxBU0hfQ05UTAkJCTB4MDg2RQogCiAvKiBNRU1PUllfQ09ORklHX0VYVEVORCAqLworI2RlZmluZSBQUEM3RF9DUExEX1NEUkFNX0JBTktfTlVNX01BU0sJCTB4MDIKICNkZWZpbmUgUFBDN0RfQ1BMRF9TRFJBTV9CQU5LX1NJWkVfTUFTSwkJMHhjMAogI2RlZmluZSBQUEM3RF9DUExEX1NEUkFNX0JBTktfU0laRV8xMjhNCQkwCiAjZGVmaW5lIFBQQzdEX0NQTERfU0RSQU1fQkFOS19TSVpFXzI1Nk0JCTB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9jcG0yX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKaW5kZXggOTU0YjA3Zi4uYzg2N2JlNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKQEAgLTEwNyw2ICsxMDcsMTEgQEAKIAkJc2ltciA9ICYoY3BtMl9pbW1yLT5pbV9pbnRjdGwuaWNfc2ltcmgpOwogCQlwcGNfY2FjaGVkX2lycV9tYXNrW3dvcmRdIHw9IDEgPDwgYml0OwogCQlzaW1yW3dvcmRdID0gcHBjX2NhY2hlZF9pcnFfbWFza1t3b3JkXTsKKwkJLyoKKwkJICogV29yayBhcm91bmQgbGFyZ2UgbnVtYmVycyBvZiBzcHVyaW91cyBJUlFzIG9uIFBvd2VyUEMgODJ4eAorCQkgKiBzeXN0ZW1zLgorCQkgKi8KKwkJbWIoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvYm9vdC9hZGRub3RlLmMgYi9hcmNoL3BwYzY0L2Jvb3QvYWRkbm90ZS5jCmluZGV4IDY2ZmY4MTAuLjcxOTY2M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvYm9vdC9hZGRub3RlLmMKKysrIGIvYXJjaC9wcGM2NC9ib290L2FkZG5vdGUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisvKiBDSFJQIG5vdGUgc2VjdGlvbiAqLwogY2hhciBhcmNoW10gPSAiUG93ZXJQQyI7CiAKICNkZWZpbmUgTl9ERVNDUgk2CkBAIC0zMSw2ICszMiwyOSBAQAogCTB4NDAwMCwJCQkvKiBsb2FkLWJhc2UgKi8KIH07CiAKKy8qIFJQQSBub3RlIHNlY3Rpb24gKi8KK2NoYXIgcnBhbmFtZVtdID0gIklCTSxSUEEtQ2xpZW50LUNvbmZpZyI7CisKKy8qCisgKiBOb3RlOiBzZXR0aW5nIGlnbm9yZV9teV9jbGllbnRfY29uZmlnICpzaG91bGQqIG1lYW4gdGhhdCBPRiBpZ25vcmVzCisgKiBhbGwgdGhlIG90aGVyIGZpZWxkcywgYnV0IHRoZXJlIGlzIGEgZmlybXdhcmUgYnVnIHdoaWNoIG1lYW5zIHRoYXQKKyAqIGl0IGxvb2tzIGF0IHRoZSBzcGxwYXIgZmllbGQgYXQgbGVhc3QuICBTbyB0aGVzZSB2YWx1ZXMgbmVlZCB0byBiZQorICogcmVhc29uYWJsZS4KKyAqLworI2RlZmluZSBOX1JQQV9ERVNDUgk4Cit1bnNpZ25lZCBpbnQgcnBhbm90ZVtOX1JQQV9ERVNDUl0gPSB7CisJMCwJCQkvKiBscGFyYWZmaW5pdHkgKi8KKwk2NCwJCQkvKiBtaW5fcm1vX3NpemUgKi8KKwkwLAkJCS8qIG1pbl9ybW9fcGVyY2VudCAqLworCTQwLAkJCS8qIG1heF9wZnRfc2l6ZSAqLworCTEsCQkJLyogc3BscGFyICovCisJLTEsCQkJLyogbWluX2xvYWQgKi8KKwkwLAkJCS8qIG5ld19tZW1fZGVmICovCisJMSwJCQkvKiBpZ25vcmVfbXlfY2xpZW50X2NvbmZpZyAqLworfTsKKworI2RlZmluZSBST1VORFVQKGxlbikJKCgobGVuKSArIDMpICYgfjMpCisKIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CiAKICNkZWZpbmUgR0VUXzE2QkUob2ZmKQkoKGJ1ZltvZmZdIDw8IDgpICsgKGJ1Zlsob2ZmKSsxXSkpCkBAIC02OSw3ICs5Myw3IEBACiB7CiAJaW50IGZkLCBuLCBpOwogCWludCBwaCwgcHMsIG5wOwotCWludCBubm90ZSwgbnM7CisJaW50IG5ub3RlLCBubm90ZTIsIG5zOwogCiAJaWYgKGFjICE9IDIpIHsKIAkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZWxmLWZpbGVcbiIsIGF2WzBdKTsKQEAgLTgxLDcgKzEwNSw4IEBACiAJCWV4aXQoMSk7CiAJfQogCi0Jbm5vdGUgPSBzdHJsZW4oYXJjaCkgKyAxICsgKE5fREVTQ1IgKyAzKSAqIDQ7CisJbm5vdGUgPSAxMiArIFJPVU5EVVAoc3RybGVuKGFyY2gpICsgMSkgKyBzaXplb2YoZGVzY3IpOworCW5ub3RlMiA9IDEyICsgUk9VTkRVUChzdHJsZW4ocnBhbmFtZSkgKyAxKSArIHNpemVvZihycGFub3RlKTsKIAogCW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKTsKIAlpZiAobiA8IDApIHsKQEAgLTEwNCw3ICsxMjksNyBAQAogCW5wID0gR0VUXzE2QkUoRV9QSE5VTSk7CiAJaWYgKHBoIDwgRV9IU0laRSB8fCBwcyA8IFBIX0hTSVpFIHx8IG5wIDwgMSkKIAkJZ290byBub3RlbGY7Ci0JaWYgKHBoICsgKG5wICsgMSkgKiBwcyArIG5ub3RlID4gbikKKwlpZiAocGggKyAobnAgKyAyKSAqIHBzICsgbm5vdGUgKyBubm90ZTIgPiBuKQogCQlnb3RvIG5vc3BhY2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnA7ICsraSkgewpAQCAtMTE3LDEyICsxNDIsMTIgQEAKIAl9CiAKIAkvKiBYWFggY2hlY2sgdGhhdCB0aGUgYXJlYSB3ZSB3YW50IHRvIHVzZSBpcyBhbGwgemVyb2VzICovCi0JZm9yIChpID0gMDsgaSA8IHBzICsgbm5vdGU7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgMiAqIHBzICsgbm5vdGUgKyBubm90ZTI7ICsraSkKIAkJaWYgKGJ1ZltwaCArIGldICE9IDApCiAJCQlnb3RvIG5vc3BhY2U7CiAKIAkvKiBmaWxsIGluIHRoZSBwcm9ncmFtIGhlYWRlciBlbnRyeSAqLwotCW5zID0gcGggKyBwczsKKwlucyA9IHBoICsgMiAqIHBzOwogCVBVVF8zMkJFKHBoICsgUEhfVFlQRSwgUFRfTk9URSk7CiAJUFVUXzMyQkUocGggKyBQSF9PRkZTRVQsIG5zKTsKIAlQVVRfMzJCRShwaCArIFBIX0ZJTEVTWiwgbm5vdGUpOwpAQCAtMTM0LDExICsxNTksMjYgQEAKIAlQVVRfMzJCRShucyArIDgsIDB4MTI3NSk7CiAJc3RyY3B5KCZidWZbbnMgKyAxMl0sIGFyY2gpOwogCW5zICs9IDEyICsgc3RybGVuKGFyY2gpICsgMTsKLQlmb3IgKGkgPSAwOyBpIDwgTl9ERVNDUjsgKytpKQotCQlQVVRfMzJCRShucyArIGkgKiA0LCBkZXNjcltpXSk7CisJZm9yIChpID0gMDsgaSA8IE5fREVTQ1I7ICsraSwgbnMgKz0gNCkKKwkJUFVUXzMyQkUobnMsIGRlc2NyW2ldKTsKKworCS8qIGZpbGwgaW4gdGhlIHNlY29uZCBwcm9ncmFtIGhlYWRlciBlbnRyeSBhbmQgdGhlIFJQQSBub3RlIGFyZWEgKi8KKwlwaCArPSBwczsKKwlQVVRfMzJCRShwaCArIFBIX1RZUEUsIFBUX05PVEUpOworCVBVVF8zMkJFKHBoICsgUEhfT0ZGU0VULCBucyk7CisJUFVUXzMyQkUocGggKyBQSF9GSUxFU1osIG5ub3RlMik7CisKKwkvKiBmaWxsIGluIHRoZSBub3RlIGFyZWEgd2UgcG9pbnQgdG8gKi8KKwlQVVRfMzJCRShucywgc3RybGVuKHJwYW5hbWUpICsgMSk7CisJUFVUXzMyQkUobnMgKyA0LCBzaXplb2YocnBhbm90ZSkpOworCVBVVF8zMkJFKG5zICsgOCwgMHgxMjc1OTk5OSk7CisJc3RyY3B5KCZidWZbbnMgKyAxMl0sIHJwYW5hbWUpOworCW5zICs9IDEyICsgUk9VTkRVUChzdHJsZW4ocnBhbmFtZSkgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgTl9SUEFfREVTQ1I7ICsraSwgbnMgKz0gNCkKKwkJUFVUXzMyQkUobnMsIHJwYW5vdGVbaV0pOwogCiAJLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCi0JUFVUXzE2QkUoRV9QSE5VTSwgbnAgKyAxKTsKKwlQVVRfMTZCRShFX1BITlVNLCBucCArIDIpOwogCiAJLyogd3JpdGUgYmFjayAqLwogCWxzZWVrKGZkLCAobG9uZykgMCwgU0VFS19TRVQpOwpAQCAtMTU1LDExICsxOTUsMTEgQEAKIAlleGl0KDApOwogCiAgbm90ZWxmOgotCWZwcmludGYoc3RkZXJyLCAiJXMgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFuIEVMRiBmaWxlXG4iLCBhdlswXSk7CisJZnByaW50ZihzdGRlcnIsICIlcyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYW4gRUxGIGZpbGVcbiIsIGF2WzFdKTsKIAlleGl0KDEpOwogCiAgbm9zcGFjZToKIAlmcHJpbnRmKHN0ZGVyciwgInNvcnJ5LCBJIGNhbid0IGZpbmQgc3BhY2UgaW4gJXMgdG8gcHV0IHRoZSBub3RlXG4iLAotCQlhdlswXSk7CisJCWF2WzFdKTsKIAlleGl0KDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvSHZMcEV2ZW50LmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9IdkxwRXZlbnQuYwppbmRleCA5ODAyYmVlLi5mOGYxOTYzIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9IdkxwRXZlbnQuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9IdkxwRXZlbnQuYwpAQCAtNDUsNyArNDUsNyBAQAogCQkJLyogV2Ugbm93IHNsZWVwIHVudGlsIGFsbCBvdGhlciBDUFVzIGhhdmUgc2NoZWR1bGVkLiBUaGlzIGVuc3VyZXMgdGhhdAogCQkJICogdGhlIGRlbGV0aW9uIGlzIHNlZW4gYnkgYWxsIG90aGVyIENQVXMsIGFuZCB0aGF0IHRoZSBkZWxldGVkIGhhbmRsZXIKIAkJCSAqIGlzbid0IHN0aWxsIHJ1bm5pbmcgb24gYW5vdGhlciBDUFUgd2hlbiB3ZSByZXR1cm4uICovCi0JCQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOwogCQl9CiAJfQogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL252cmFtLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jCmluZGV4IGI5MDY5YzIuLjRlNzE3ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL252cmFtLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYwpAQCAtMzM5LDkgKzMzOSw5IEBACiBzdGF0aWMgaW50IG52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb24odm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICogcDsKLQlzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICogcGFydDsKLQlzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICogbmV3X3BhcnQgPSBOVUxMOwotCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKiBmcmVlX3BhcnQgPSBOVUxMOworCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKnBhcnQgPSBOVUxMOworCXN0cnVjdCBudnJhbV9wYXJ0aXRpb24gKm5ld19wYXJ0ID0gTlVMTDsKKwlzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uICpmcmVlX3BhcnQgPSBOVUxMOwogCWludCBzZXFfaW5pdFsyXSA9IHsgMCwgMCB9OwogCWxvZmZfdCB0bXBfaW5kZXg7CiAJbG9uZyBzaXplID0gMDsKQEAgLTM2NCwxMyArMzY0LDExIEBACiAJCQlmcmVlX3BhcnQgPSBwYXJ0OwogCQl9CiAJfQotCWlmICghc2l6ZSkgeworCWlmICghc2l6ZSkKIAkJcmV0dXJuIC1FTk9TUEM7Ci0JfQogCQogCS8qIENyZWF0ZSBvdXIgT1MgcGFydGl0aW9uICovCi0JbmV3X3BhcnQgPSAoc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqKQotCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uKSwgR0ZQX0tFUk5FTCk7CisJbmV3X3BhcnQgPSBrbWFsbG9jKHNpemVvZigqbmV3X3BhcnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19wYXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjoga21hbGxvYyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM3OSw3ICszNzcsNyBAQAogCW5ld19wYXJ0LT5pbmRleCA9IGZyZWVfcGFydC0+aW5kZXg7CiAJbmV3X3BhcnQtPmhlYWRlci5zaWduYXR1cmUgPSBOVlJBTV9TSUdfT1M7CiAJbmV3X3BhcnQtPmhlYWRlci5sZW5ndGggPSBzaXplOwotCXNwcmludGYobmV3X3BhcnQtPmhlYWRlci5uYW1lLCAicHBjNjQsbGludXgiKTsKKwlzdHJjcHkobmV3X3BhcnQtPmhlYWRlci5uYW1lLCAicHBjNjQsbGludXgiKTsKIAluZXdfcGFydC0+aGVhZGVyLmNoZWNrc3VtID0gbnZyYW1fY2hlY2tzdW0oJm5ld19wYXJ0LT5oZWFkZXIpOwogCiAJcmMgPSBudnJhbV93cml0ZV9oZWFkZXIobmV3X3BhcnQpOwpAQCAtMzk0LDcgKzM5Miw4IEBACiAJdG1wX2luZGV4ID0gbmV3X3BhcnQtPmluZGV4ICsgTlZSQU1fSEVBREVSX0xFTjsKIAlyYyA9IHBwY19tZC5udnJhbV93cml0ZSgoY2hhciAqKSZzZXFfaW5pdCwgc2l6ZW9mKHNlcV9pbml0KSwgJnRtcF9pbmRleCk7CiAJaWYgKHJjIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZSBmYWlsZWQgKCVkKVxuIiwgcmMpOworCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlICIKKwkJCQkiZmFpbGVkICglZClcbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfaHZDYWxsLlMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wU2VyaWVzX2h2Q2FsbC5TCmluZGV4IDA3MTVkMzAuLjE3NmU4ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfaHZDYWxsLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19odkNhbGwuUwpAQCAtMjgsNiArMjgsOCBAQAogCQkJdW5zaWduZWQgbG9uZyAqb3V0Myk7CQlSMTAKICAqLwogX0dMT0JBTChwbHBhcl9oY2FsbCkKKwlITVRfTUVESVVNCisKIAltZmNyCXIwCiAKIAlzdGQJcjgsU1RLX1BBUk0ocjgpKHIxKQkvKiBTYXZlIG91dCBwdHJzICovCkBAIC01Myw2ICs1NSw4IEBACiAKIC8qIFNpbXBsZSBpbnRlcmZhY2Ugd2l0aCBubyBvdXRwdXQgdmFsdWVzIChvdGhlciB0aGFuIHN0YXR1cykgKi8KIF9HTE9CQUwocGxwYXJfaGNhbGxfbm9yZXRzKQorCUhNVF9NRURJVU0KKwogCW1mY3IJcjAKIAlzdHcJcjAsOChyMSkKIApAQCAtNzUsNiArNzksOCBAQAogCQkJdW5zaWduZWQgbG9uZyAqb3V0MSk7CQkxMjAoUjEpCiAgKi8KIF9HTE9CQUwocGxwYXJfaGNhbGxfOGFyZ18ycmV0KQorCUhNVF9NRURJVU0KKwogCW1mY3IJcjAKIAlsZAlyMTEsU1RLX1BBUk0ocjExKShyMSkJLyogcHV0IGFyZzggaW4gUjExICovCiAJc3R3CXIwLDgocjEpCkBAIC05OSw2ICsxMDUsOCBAQAogCQkgCXVuc2lnbmVkIGxvbmcgKm91dDQpOwkJMTEyKFIxKQogICovCiBfR0xPQkFMKHBscGFyX2hjYWxsXzRvdXQpCisJSE1UX01FRElVTQorCiAJbWZjcglyMAogCXN0dwlyMCw4KHIxKQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMKaW5kZXggNDVhNGFkMC4uZmUyOTQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYwpAQCAtMzIxLDYgKzMyMSwxMCBAQAogCQkJY2hhciAqbmFtZSA9IGdldF9wcm9wZXJ0eShpYy0+cGFyZW50LCAibmFtZSIsIE5VTEwpOwogCQkJaWYgKG5hbWUgJiYgIXN0cmNtcChuYW1lLCAidTMiKSkKIAkJCQlucC0+aW50cnNbaW50cmNvdW50XS5saW5lICs9IDEyODsKKwkJCWVsc2UgaWYgKCEobmFtZSAmJiAhc3RyY21wKG5hbWUsICJtYWMtaW8iKSkpCisJCQkJLyogaWdub3JlIG90aGVyIGNhc2NhZGVkIGNvbnRyb2xsZXJzLCBzdWNoIGFzCisJCQkJICAgdGhlIGsyLXNhdGEtcm9vdCAqLworCQkJCWJyZWFrOwogCQl9CiAJCW5wLT5pbnRyc1tpbnRyY291bnRdLnNlbnNlID0gMTsKIAkJaWYgKG4gPiAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA4ZGZmYTlhLi4zNWVjNDJkIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtNDkzLDYgKzQ5MywxMTMgQEAKIH0KIAogLyoKKyAqIFRvIHRlbGwgdGhlIGZpcm13YXJlIHdoYXQgb3VyIGNhcGFiaWxpdGllcyBhcmUsIHdlIGhhdmUgdG8gcGFzcworICogaXQgYSBmYWtlIDMyLWJpdCBFTEYgaGVhZGVyIGNvbnRhaW5pbmcgYSBjb3VwbGUgb2YgUFRfTk9URSBzZWN0aW9ucworICogdGhhdCBjb250YWluIHN0cnVjdHVyZXMgdGhhdCBjb250YWluIHRoZSBhY3R1YWwgdmFsdWVzLgorICovCitzdGF0aWMgc3RydWN0IGZha2VfZWxmIHsKKwlFbGYzMl9FaGRyCWVsZmhkcjsKKwlFbGYzMl9QaGRyCXBoZHJbMl07CisJc3RydWN0IGNocnBub3RlIHsKKwkJdTMyCW5hbWVzejsKKwkJdTMyCWRlc2NzejsKKwkJdTMyCXR5cGU7CisJCWNoYXIJbmFtZVs4XTsJLyogIlBvd2VyUEMiICovCisJCXN0cnVjdCBjaHJwZGVzYyB7CisJCQl1MzIJcmVhbF9tb2RlOworCQkJdTMyCXJlYWxfYmFzZTsKKwkJCXUzMglyZWFsX3NpemU7CisJCQl1MzIJdmlydF9iYXNlOworCQkJdTMyCXZpcnRfc2l6ZTsKKwkJCXUzMglsb2FkX2Jhc2U7CisJCX0gY2hycGRlc2M7CisJfSBjaHJwbm90ZTsKKwlzdHJ1Y3QgcnBhbm90ZSB7CisJCXUzMgluYW1lc3o7CisJCXUzMglkZXNjc3o7CisJCXUzMgl0eXBlOworCQljaGFyCW5hbWVbMjRdOwkvKiAiSUJNLFJQQS1DbGllbnQtQ29uZmlnIiAqLworCQlzdHJ1Y3QgcnBhZGVzYyB7CisJCQl1MzIJbHBhcl9hZmZpbml0eTsKKwkJCXUzMgltaW5fcm1vX3NpemU7CisJCQl1MzIJbWluX3Jtb19wZXJjZW50OworCQkJdTMyCW1heF9wZnRfc2l6ZTsKKwkJCXUzMglzcGxwYXI7CisJCQl1MzIJbWluX2xvYWQ7CisJCQl1MzIJbmV3X21lbV9kZWY7CisJCQl1MzIJaWdub3JlX21lOworCQl9IHJwYWRlc2M7CisJfSBycGFub3RlOworfSBmYWtlX2VsZiA9IHsKKwkuZWxmaGRyID0geworCQkuZV9pZGVudCA9IHsgMHg3ZiwgJ0UnLCAnTCcsICdGJywKKwkJCSAgICAgRUxGQ0xBU1MzMiwgRUxGREFUQTJNU0IsIEVWX0NVUlJFTlQgfSwKKwkJLmVfdHlwZSA9IEVUX0VYRUMsCS8qIHllYWggcmlnaHQgKi8KKwkJLmVfbWFjaGluZSA9IEVNX1BQQywKKwkJLmVfdmVyc2lvbiA9IEVWX0NVUlJFTlQsCisJCS5lX3Bob2ZmID0gb2Zmc2V0b2Yoc3RydWN0IGZha2VfZWxmLCBwaGRyKSwKKwkJLmVfcGhlbnRzaXplID0gc2l6ZW9mKEVsZjMyX1BoZHIpLAorCQkuZV9waG51bSA9IDIKKwl9LAorCS5waGRyID0geworCQlbMF0gPSB7CisJCQkucF90eXBlID0gUFRfTk9URSwKKwkJCS5wX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBmYWtlX2VsZiwgY2hycG5vdGUpLAorCQkJLnBfZmlsZXN6ID0gc2l6ZW9mKHN0cnVjdCBjaHJwbm90ZSkKKwkJfSwgWzFdID0geworCQkJLnBfdHlwZSA9IFBUX05PVEUsCisJCQkucF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZmFrZV9lbGYsIHJwYW5vdGUpLAorCQkJLnBfZmlsZXN6ID0gc2l6ZW9mKHN0cnVjdCBycGFub3RlKQorCQl9CisJfSwKKwkuY2hycG5vdGUgPSB7CisJCS5uYW1lc3ogPSBzaXplb2YoIlBvd2VyUEMiKSwKKwkJLmRlc2NzeiA9IHNpemVvZihzdHJ1Y3QgY2hycGRlc2MpLAorCQkudHlwZSA9IDB4MTI3NSwKKwkJLm5hbWUgPSAiUG93ZXJQQyIsCisJCS5jaHJwZGVzYyA9IHsKKwkJCS5yZWFsX21vZGUgPSB+MFUsCS8qIH4wIG1lYW5zICJkb24ndCBjYXJlIiAqLworCQkJLnJlYWxfYmFzZSA9IH4wVSwKKwkJCS5yZWFsX3NpemUgPSB+MFUsCisJCQkudmlydF9iYXNlID0gfjBVLAorCQkJLnZpcnRfc2l6ZSA9IH4wVSwKKwkJCS5sb2FkX2Jhc2UgPSB+MFUKKwkJfSwKKwl9LAorCS5ycGFub3RlID0geworCQkubmFtZXN6ID0gc2l6ZW9mKCJJQk0sUlBBLUNsaWVudC1Db25maWciKSwKKwkJLmRlc2NzeiA9IHNpemVvZihzdHJ1Y3QgcnBhZGVzYyksCisJCS50eXBlID0gMHgxMjc1OTk5OSwKKwkJLm5hbWUgPSAiSUJNLFJQQS1DbGllbnQtQ29uZmlnIiwKKwkJLnJwYWRlc2MgPSB7CisJCQkubHBhcl9hZmZpbml0eSA9IDAsCisJCQkubWluX3Jtb19zaXplID0gNjQsCS8qIGluIG1lZ2FieXRlcyAqLworCQkJLm1pbl9ybW9fcGVyY2VudCA9IDAsCisJCQkubWF4X3BmdF9zaXplID0gNDgsCS8qIDJeNDggYnl0ZXMgbWF4IFBGVCBzaXplICovCisJCQkuc3BscGFyID0gMSwKKwkJCS5taW5fbG9hZCA9IH4wVSwKKwkJCS5uZXdfbWVtX2RlZiA9IDAKKwkJfQorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwcm9tX3NlbmRfY2FwYWJpbGl0aWVzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSByZWxvY19vZmZzZXQoKTsKKwlpaGFuZGxlIGVsZmxvYWRlcjsKKwlpbnQgcmV0OworCisJZWxmbG9hZGVyID0gY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgQUREUigiL3BhY2thZ2VzL2VsZi1sb2FkZXIiKSk7CisJaWYgKGVsZmxvYWRlciA9PSAwKSB7CisJCXByb21fcHJpbnRmKCJjb3VsZG4ndCBvcGVuIC9wYWNrYWdlcy9lbGYtbG9hZGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKwlyZXQgPSBjYWxsX3Byb20oImNhbGwtbWV0aG9kIiwgMywgMSwgQUREUigicHJvY2Vzcy1lbGYtaGVhZGVyIiksCisJCQllbGZsb2FkZXIsIEFERFIoJmZha2VfZWxmKSk7CisJY2FsbF9wcm9tKCJjbG9zZSIsIDEsIDAsIGVsZmxvYWRlcik7Cit9CisKKy8qCiAgKiBNZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneS4uLiBvdXIgbGF5b3V0IGlzIG5vcm1hbGx5OgogICoKICAqICBhdCAxNE1iIG9yIG1vcmUgd2Ugdm1saW51eCwgdGhlbiBhIGdhcCBhbmQgaW5pdHJkLiBJbiBzb21lIHJhcmUgY2FzZXMsIGluaXRyZApAQCAtMTQ0OCw2ICsxNTU1LDEyIEBACiAJfQogfQogCisvKgorICogVGhlIE9wZW4gRmlybXdhcmUgMTI3NSBzcGVjaWZpY2F0aW9uIHN0YXRlcyBwcm9wZXJ0aWVzIG11c3QgYmUgMzEgYnl0ZXMgb3IKKyAqIGxlc3MsIGhvd2V2ZXIgbm90IGFsbCBmaXJtd2FyZXMgb2JleSB0aGlzLiBNYWtlIGl0IDY0IGJ5dGVzIHRvIGJlIHNhZmUuCisgKi8KKyNkZWZpbmUgTUFYX1BST1BFUlRZX05BTUUgNjQKKwogc3RhdGljIHZvaWQgX19pbml0IHNjYW5fZHRfYnVpbGRfc3RydWN0KHBoYW5kbGUgbm9kZSwgdW5zaWduZWQgbG9uZyAqbWVtX3N0YXJ0LAogCQkJCQl1bnNpZ25lZCBsb25nICptZW1fZW5kKQogewpAQCAtMTQ1Nyw3ICsxNTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNvZmY7CiAJdW5zaWduZWQgY2hhciAqdmFscDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJlbG9jX29mZnNldCgpOwotCWNoYXIgcG5hbWVbMzJdOworCWNoYXIgcG5hbWVbTUFYX1BST1BFUlRZX05BTUVdOwogCWNoYXIgKnBhdGg7CiAKIAlwYXRoID0gUkVMT0MocHJvbV9zY3JhdGNoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggM2M3NjMzMy4uOWY4YzYwOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTYyLDcgKzE2Myw3IEBACiAJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOiB7IC8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCiAJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC0xOTQsNyArMTk1LDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6IHsgIC8qIHNldCB0aGUgdHJhcCBmbGFnLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCXNldF9zaW5nbGVfc3RlcChjaGlsZCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UzMi5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHRyYWNlMzIuYwppbmRleCBlZTgxYjFiLi4xNjQzNjQyIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UzMi5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3B0cmFjZTMyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTI5Myw3ICsyOTQsNyBAQAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCiAJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtMzI1LDcgKzMyNiw3IEBACiAKIAljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOiB7ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQlzZXRfc2luZ2xlX3N0ZXAoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvcHBjNjQva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggYjBlMTY3ZC4uM2MyZmE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvc2lnbmFsMzIuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9zaWduYWwzMi5jCkBAIC02NTcsNyArNjU3LDcgQEAKIAogCS8qIFNhdmUgdXNlciByZWdpc3RlcnMgb24gdGhlIHN0YWNrICovCiAJZnJhbWUgPSAmcnRfc2YtPnVjLnVjX21jb250ZXh0OwotCWlmIChwdXRfdXNlcihyZWdzLT5ncHJbMV0sICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKW5ld3NwKSkKKwlpZiAocHV0X3VzZXIocmVncy0+Z3ByWzFdLCAodTMyIF9fdXNlciAqKW5ld3NwKSkKIAkJZ290byBiYWRmcmFtZTsKIAogCWlmICh2ZHNvMzJfcnRfc2lndHJhbXAgJiYgY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSkgewpAQCAtODQyLDcgKzg0Miw3IEBACiAJCXJlZ3MtPmxpbmsgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPm1jdHgudHJhbXA7CiAJfQogCi0JaWYgKHB1dF91c2VyKHJlZ3MtPmdwclsxXSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopbmV3c3ApKQorCWlmIChwdXRfdXNlcihyZWdzLT5ncHJbMV0sICh1MzIgX191c2VyICopbmV3c3ApKQogCQlnb3RvIGJhZGZyYW1lOwogCXJlZ3MtPmdwclsxXSA9ICh1bnNpZ25lZCBsb25nKSBuZXdzcDsKIAlyZWdzLT5ncHJbM10gPSBzaWc7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvcHBjNjQva2VybmVsL3NtcC5jCmluZGV4IDFjOTJkYTMuLjNiOTA2Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3NtcC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgKiB0aGUgcHJvY2Vzc29yIHdpbGwgY29udGludWUgb24gdG8gc2Vjb25kYXJ5X3N0YXJ0CiAJICovCiAJcGFjYVtucl0uY3B1X3N0YXJ0ID0gMTsKLQltYigpOworCXNtcF9tYigpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCkBAIC0yNTYsNyArMjU2LDcgQEAKIAl9CiAKIAljYWxsX2RhdGEgPSAmZGF0YTsKLQl3bWIoKTsKKwlzbXBfd21iKCk7CiAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG90aGVyIENQVXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gcmVzcG9uZCAqLwogCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhNU0dfQUxMX0JVVF9TRUxGLCBQUENfTVNHX0NBTExfRlVOQ1RJT04pOwogCkBAIC00MzEsNyArNDMxLDcgQEAKIAogCS8qIGdldCB0aGUgdGFyZ2V0IG91dCBvZiBpdCdzIGhvbGRpbmcgc3RhdGUgKi8KIAlwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9IENQVV9VUF9QUkVQQVJFOwotCXdtYigpOworCXNtcF93bWIoKTsKIAogCXdoaWxlICghY3B1X29ubGluZShjcHUpKQogCQljcHVfcmVsYXgoKTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCXJtYigpOworCQlzbXBfcm1iKCk7CiAJCWlmIChwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9PSBDUFVfREVBRCkKIAkJCXJldHVybjsKIAkJbXNsZWVwKDEwMCk7CkBAIC00NjMsNyArNDYzLDcgQEAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIkNQVSVkIG9mZmxpbmVcbiIsIGNwdSk7CiAJX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpID0gQ1BVX0RFQUQ7Ci0Jd21iKCk7CisJc21wX3dtYigpOwogCXdoaWxlIChfX2dldF9jcHVfdmFyKGNwdV9zdGF0ZSkgIT0gQ1BVX1VQX1BSRVBBUkUpCiAJCWNwdV9yZWxheCgpOwogCkBAIC01MTUsNyArNTE1LDcgQEAKIAkgKiBiZSB3cml0dGVuIG91dCB0byBtYWluIHN0b3JlIGJlZm9yZSB3ZSByZWxlYXNlCiAJICogdGhlIHByb2Nlc3Nvci4KIAkgKi8KLQltYigpOworCXNtcF9tYigpOwogCiAJLyogd2FrZSB1cCBjcHVzICovCiAJREJHKCJzbXA6IGtpY2tpbmcgY3B1ICVkXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvdGltZS5jCmluZGV4IDc3ZGVkNWEuLjc3MmE0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC90aW1lLmMKQEAgLTIyMSwxNSArMjIxLDE1IEBACiAJdGVtcF92YXJwLT50Yl90b194cyA9IGRvX2d0b2QudmFycC0+dGJfdG9feHM7CiAJdGVtcF92YXJwLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX29yaWdfc3RhbXA7CiAJdGVtcF92YXJwLT5zdGFtcF94c2VjID0gbmV3X3N0YW1wX3hzZWM7Ci0JbWIoKTsKKwlzbXBfbWIoKTsKIAlkb19ndG9kLnZhcnAgPSB0ZW1wX3ZhcnA7CiAJZG9fZ3RvZC52YXJfaWR4ID0gdGVtcF9pZHg7CiAKIAkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7Ci0Jd21iKCk7CisJc21wX3dtYigpOwogCXN5c3RlbWNmZy0+dGJfb3JpZ19zdGFtcCA9IG5ld190Yl9vcmlnX3N0YW1wOwogCXN5c3RlbWNmZy0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXdtYigpOworCXNtcF93bWIoKTsKIAkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7CiB9CiAKQEAgLTY0OCw3ICs2NDgsNyBAQAogCXRlbXBfdmFycC0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CiAJdGVtcF92YXJwLT5zdGFtcF94c2VjID0gbmV3X3N0YW1wX3hzZWM7CiAJdGVtcF92YXJwLT50Yl9vcmlnX3N0YW1wID0gZG9fZ3RvZC52YXJwLT50Yl9vcmlnX3N0YW1wOwotCW1iKCk7CisJc21wX21iKCk7CiAJZG9fZ3RvZC52YXJwID0gdGVtcF92YXJwOwogCWRvX2d0b2QudmFyX2lkeCA9IHRlbXBfaWR4OwogCkBAIC02NjIsMTAgKzY2MiwxMCBAQAogCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCiAJICovCiAJKysoc3lzdGVtY2ZnLT50Yl91cGRhdGVfY291bnQpOwotCXdtYigpOworCXNtcF93bWIoKTsKIAlzeXN0ZW1jZmctPnRiX3RvX3hzID0gbmV3X3RiX3RvX3hzOwogCXN5c3RlbWNmZy0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXdtYigpOworCXNtcF93bWIoKTsKIAkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7CiAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSggJnh0aW1lX2xvY2ssIGZsYWdzICk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKaW5kZXggZWRlMmY3ZS4uMGIxYjBkZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIAogIyBMaXN0IG9mIGZpbGVzIGluIHRoZSB2ZHNvLCBoYXMgdG8gYmUgYXNtIG9ubHkgZm9yIG5vdwogCi1vYmotdmRzbzMyID0gc2lndHJhbXAubyBnZXR0aW1lb2ZkYXkubyBkYXRhcGFnZS5vIGNhY2hlZmx1c2gubworb2JqLXZkc28zMiA9IHNpZ3RyYW1wLm8gZ2V0dGltZW9mZGF5Lm8gZGF0YXBhZ2UubyBjYWNoZWZsdXNoLm8gbm90ZS5vCiAKICMgQnVpbGQgcnVsZXMKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9ub3RlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiNWJlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9ub3RlLlMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIFRoaXMgc3VwcGxpZXMgLm5vdGUuKiBzZWN0aW9ucyB0byBnbyBpbnRvIHRoZSBQVF9OT1RFIGluc2lkZSB0aGUgdkRTTyB0ZXh0LgorICogSGVyZSB3ZSBjYW4gc3VwcGx5IHNvbWUgaW5mb3JtYXRpb24gdXNlZnVsIHRvIHVzZXJsYW5kLgorICovCisKKyNpbmNsdWRlIDxsaW51eC91dHMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNkZWZpbmUgQVNNX0VMRl9OT1RFX0JFR0lOKG5hbWUsIGZsYWdzLCB2ZW5kb3IsIHR5cGUpCQkJICAgICAgXAorCS5zZWN0aW9uIG5hbWUsIGZsYWdzOwkJCQkJCSAgICAgIFwKKwkuYmFsaWduIDQ7CQkJCQkJCSAgICAgIFwKKwkubG9uZyAxZiAtIDBmOwkJLyogbmFtZSBsZW5ndGggKi8JCQkgICAgICBcCisJLmxvbmcgM2YgLSAyZjsJCS8qIGRhdGEgbGVuZ3RoICovCQkJICAgICAgXAorCS5sb25nIHR5cGU7CQkvKiBub3RlIHR5cGUgKi8JCQkJICAgICAgXAorMDoJLmFzY2l6IHZlbmRvcjsJCS8qIHZlbmRvciBuYW1lICovCQkJICAgICAgXAorMToJLmJhbGlnbiA0OwkJCQkJCQkgICAgICBcCisyOgorCisjZGVmaW5lIEFTTV9FTEZfTk9URV9FTkQJCQkJCQkgICAgICBcCiszOgkuYmFsaWduIDQ7CQkvKiBwYWQgb3V0IHNlY3Rpb24gKi8JCQkgICAgICBcCisJLnByZXZpb3VzCisKKwlBU01fRUxGX05PVEVfQkVHSU4oIi5ub3RlLmtlcm5lbC12ZXJzaW9uIiwgImEiLCBVVFNfU1lTTkFNRSwgMCkKKwkubG9uZyBMSU5VWF9WRVJTSU9OX0NPREUKKwlBU01fRUxGX05PVEVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCBjY2EyN2JkLi4xMTI5MGM5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTIwLDYgKzIwLDggQEAKICAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CiAgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQogCisgIC5ub3RlCQkgIDogeyAqKC5ub3RlLiopIH0gCQkJOnRleHQJOm5vdGUKKwogICAuID0gQUxJR04gKDE2KTsKICAgLnRleHQgOgogICB7CkBAIC04Nyw2ICs4OSw3IEBACiBQSERSUwogewogICB0ZXh0IFBUX0xPQUQgRklMRUhEUiBQSERSUyBGTEFHUyg1KTsgLyogUEZfUnxQRl9YICovCisgIG5vdGUgUFRfTk9URSBGTEFHUyg0KTsgLyogUEZfUiAqLwogICBkeW5hbWljIFBUX0RZTkFNSUMgRkxBR1MoNCk7IC8qIFBGX1IgKi8KICAgZWhfZnJhbWVfaGRyIDB4NjQ3NGU1NTA7IC8qIFBUX0dOVV9FSF9GUkFNRSwgYnV0IGxkIGRvZXNuJ3QgbWF0Y2ggdGhlIG5hbWUgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZSBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZQppbmRleCBiZDNmNzBiLi5hYjM5OTg4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIyBMaXN0IG9mIGZpbGVzIGluIHRoZSB2ZHNvLCBoYXMgdG8gYmUgYXNtIG9ubHkgZm9yIG5vdwogCi1vYmotdmRzbzY0ID0gc2lndHJhbXAubyBnZXR0aW1lb2ZkYXkubyBkYXRhcGFnZS5vIGNhY2hlZmx1c2gubworb2JqLXZkc282NCA9IHNpZ3RyYW1wLm8gZ2V0dGltZW9mZGF5Lm8gZGF0YXBhZ2UubyBjYWNoZWZsdXNoLm8gbm90ZS5vCiAKICMgQnVpbGQgcnVsZXMKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9ub3RlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyYTUwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9ub3RlLlMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uL3Zkc28zMi9ub3RlLlMiCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwppbmRleCA5NDJjODE1Li45Y2IyODE4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKQEAgLTE4LDEyICsxOCwxNCBAQAogICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KICAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CiAKKyAgLm5vdGUJCSAgOiB7ICooLm5vdGUuKikgfQkJOnRleHQJOm5vdGUKKwogICAuID0gQUxJR04gKDE2KTsKICAgLnRleHQgICAgICAgICAgIDoKICAgewogICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKICAgICAqKC5zZnByIC5nbGluaykKLSAgfQorICB9CQkJCQkJOnRleHQKICAgUFJPVklERSAoX19ldGV4dCA9IC4pOwogICBQUk9WSURFIChfZXRleHQgPSAuKTsKICAgUFJPVklERSAoZXRleHQgPSAuKTsKQEAgLTg4LDYgKzkwLDcgQEAKIFBIRFJTCiB7CiAgIHRleHQgUFRfTE9BRCBGSUxFSERSIFBIRFJTIEZMQUdTKDUpOyAvKiBQRl9SfFBGX1ggKi8KKyAgbm90ZSBQVF9OT1RFIEZMQUdTKDQpOyAvKiBQRl9SICovCiAgIGR5bmFtaWMgUFRfRFlOQU1JQyBGTEFHUyg0KTsgLyogUEZfUiAqLwogICBlaF9mcmFtZV9oZHIgMHg2NDc0ZTU1MDsgLyogUFRfR05VX0VIX0ZSQU1FLCBidXQgbGQgZG9lc24ndCBtYXRjaCB0aGUgbmFtZSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9oYXNoX2xvdy5TIGIvYXJjaC9wcGM2NC9tbS9oYXNoX2xvdy5TCmluZGV4IDhjMDE1NmEuLmMyM2Q0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaGFzaF9sb3cuUworKysgYi9hcmNoL3BwYzY0L21tL2hhc2hfbG93LlMKQEAgLTg1LDcgKzg1LDEwIEBACiAJYm5lLQlodGFiX3dyb25nX2FjY2VzcwogCS8qIENoZWNrIGlmIFBURSBpcyBidXN5ICovCiAJYW5kaS4JcjAscjMxLF9QQUdFX0JVU1kKLQlibmUtCTFiCisJLyogSWYgc28sIGp1c3QgYmFpbCBvdXQgYW5kIHJlZmF1bHQgaWYgbmVlZGVkLiBTb21lb25lIGVsc2UKKwkgKiBpcyBjaGFuZ2luZyB0aGlzIFBURSBhbnl3YXkgYW5kIG1pZ2h0IGhhc2ggaXQuCisJICovCisJYm5lLQliYWlsX29rCiAJLyogUHJlcGFyZSBuZXcgUFRFIHZhbHVlICh0dXJuIGFjY2VzcyBSVyBpbnRvIERJUlRZLCB0aGVuCiAJICogYWRkIEJVU1ksSEFTSFBURSBhbmQgQUNDRVNTRUQpCiAJICovCkBAIC0yMTUsNiArMjE4LDEwIEBACiAJLyogVHJ5IGFsbCBhZ2FpbiAqLwogCWIJaHRhYl9pbnNlcnRfcHRlCQogCitiYWlsX29rOgorCWxpCXIzLDAKKwliCWJhaWwKKwogaHRhYl9wdGVfaW5zZXJ0X29rOgogCS8qIEluc2VydCBzbG90IG51bWJlciAmIHNlY29uZGFyeSBiaXQgaW4gUFRFICovCiAJcmxkaW1pCXIzMCxyMywxMiw2My0xNQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wcGM2NC9tbS9odWdldGxicGFnZS5jCmluZGV4IDM5MDI5NmUuLmQzYmY4NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3BwYzY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAlyZXR1cm4gKGFkZHIgJiB+UkVHSU9OX01BU0spID4+IEhVR0VQR0RJUl9TSElGVDsKIH0KIAotc3RhdGljIHBnZF90ICpodWdlcGdkX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHB1ZF90ICpodWdlcGdkX29mZnNldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCWludCBpbmRleDsKIApAQCAtNTIsMjEgKzUyLDIxIEBACiAKIAlpbmRleCA9IGh1Z2VwZ2RfaW5kZXgoYWRkcik7CiAJQlVHX09OKGluZGV4ID49IFBUUlNfUEVSX0hVR0VQR0QpOwotCXJldHVybiBtbS0+Y29udGV4dC5odWdlX3BnZGlyICsgaW5kZXg7CisJcmV0dXJuIChwdWRfdCAqKShtbS0+Y29udGV4dC5odWdlX3BnZGlyICsgaW5kZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcHRlX29mZnNldChwZ2RfdCAqZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIHB0ZV90ICpodWdlcHRlX29mZnNldChwdWRfdCAqZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaW50IGluZGV4OwogCi0JaWYgKHBnZF9ub25lKCpkaXIpKQorCWlmIChwdWRfbm9uZSgqZGlyKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpbmRleCA9IChhZGRyID4+IEhQQUdFX1NISUZUKSAlIFBUUlNfUEVSX0hVR0VQVEU7Ci0JcmV0dXJuIChwdGVfdCAqKXBnZF9wYWdlKCpkaXIpICsgaW5kZXg7CisJcmV0dXJuIChwdGVfdCAqKXB1ZF9wYWdlKCpkaXIpICsgaW5kZXg7CiB9CiAKLXN0YXRpYyBwZ2RfdCAqaHVnZXBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHB1ZF90ICpodWdlcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgYWRkcikpOwogCkBAIC05MCwxMCArOTAsOSBAQAogCXJldHVybiBodWdlcGdkX29mZnNldChtbSwgYWRkcik7CiB9CiAKLXN0YXRpYyBwdGVfdCAqaHVnZXB0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKmRpciwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgcHRlX3QgKmh1Z2VwdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpZiAoISBwZ2RfcHJlc2VudCgqZGlyKSkgeworCWlmICghIHB1ZF9wcmVzZW50KCpkaXIpKSB7CiAJCXB0ZV90ICpuZXc7CiAKIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwpAQCAtMTA0LDcgKzEwMyw3IEBACiAJCSAqIEJlY2F1c2Ugd2UgZHJvcHBlZCB0aGUgbG9jaywgd2Ugc2hvdWxkIHJlLWNoZWNrIHRoZQogCQkgKiBlbnRyeSwgYXMgc29tZWJvZHkgZWxzZSBjb3VsZCBoYXZlIHBvcHVsYXRlZCBpdC4uCiAJCSAqLwotCQlpZiAocGdkX3ByZXNlbnQoKmRpcikpIHsKKwkJaWYgKHB1ZF9wcmVzZW50KCpkaXIpKSB7CiAJCQlpZiAobmV3KQogCQkJCWttZW1fY2FjaGVfZnJlZSh6ZXJvX2NhY2hlLCBuZXcpOwogCQl9IGVsc2UgewpAQCAtMTE1LDcgKzExNCw3IEBACiAJCQlwdGVwYWdlID0gdmlydF90b19wYWdlKG5ldyk7CiAJCQlwdGVwYWdlLT5tYXBwaW5nID0gKHZvaWQgKikgbW07CiAJCQlwdGVwYWdlLT5pbmRleCA9IGFkZHIgJiBIVUdFUEdESVJfTUFTSzsKLQkJCXBnZF9wb3B1bGF0ZShtbSwgZGlyLCBuZXcpOworCQkJcHVkX3BvcHVsYXRlKG1tLCBkaXIsIG5ldyk7CiAJCX0KIAl9CiAKQEAgLTEyNCwyOCArMTIzLDI4IEBACiAKIHN0YXRpYyBwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOwogCiAJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgYWRkcikpOwogCi0JcGdkID0gaHVnZXBnZF9vZmZzZXQobW0sIGFkZHIpOwotCWlmICghIHBnZCkKKwlwdWQgPSBodWdlcGdkX29mZnNldChtbSwgYWRkcik7CisJaWYgKCEgcHVkKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBodWdlcHRlX29mZnNldChwZ2QsIGFkZHIpOworCXJldHVybiBodWdlcHRlX29mZnNldChwdWQsIGFkZHIpOwogfQogCiBzdGF0aWMgcHRlX3QgKmh1Z2VfcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOwogCiAJQlVHX09OKCEgaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgYWRkcikpOwogCi0JcGdkID0gaHVnZXBnZF9hbGxvYyhtbSwgYWRkcik7Ci0JaWYgKCEgcGdkKQorCXB1ZCA9IGh1Z2VwZ2RfYWxsb2MobW0sIGFkZHIpOworCWlmICghIHB1ZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gaHVnZXB0ZV9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKKwlyZXR1cm4gaHVnZXB0ZV9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2h1Z2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTcwOSwxMCArNzA4LDEwIEBACiAKIAkvKiBjbGVhbnVwIGFueSBodWdlcHRlIHBhZ2VzIGxlZnRvdmVyICovCiAJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX0hVR0VQR0Q7IGkrKykgewotCQlwZ2RfdCAqcGdkID0gcGdkaXIgKyBpOworCQlwdWRfdCAqcHVkID0gKHB1ZF90ICopKHBnZGlyICsgaSk7CiAKLQkJaWYgKCEgcGdkX25vbmUoKnBnZCkpIHsKLQkJCXB0ZV90ICpwdGUgPSAocHRlX3QgKilwZ2RfcGFnZSgqcGdkKTsKKwkJaWYgKCEgcHVkX25vbmUoKnB1ZCkpIHsKKwkJCXB0ZV90ICpwdGUgPSAocHRlX3QgKilwdWRfcGFnZSgqcHVkKTsKIAkJCXN0cnVjdCBwYWdlICpwdGVwYWdlID0gdmlydF90b19wYWdlKHB0ZSk7CiAKIAkJCXB0ZXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwpAQCAtNzIwLDcgKzcxOSw3IEBACiAJCQlCVUdfT04obWVtY21wKHB0ZSwgZW1wdHlfemVyb19wYWdlLCBQQUdFX1NJWkUpKTsKIAkJCWttZW1fY2FjaGVfZnJlZSh6ZXJvX2NhY2hlLCBwdGUpOwogCQl9Ci0JCXBnZF9jbGVhcihwZ2QpOworCQlwdWRfY2xlYXIocHVkKTsKIAl9CiAKIAlCVUdfT04obWVtY21wKHBnZGlyLCBlbXB0eV96ZXJvX3BhZ2UsIFBBR0VfU0laRSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9pbml0LmMgYi9hcmNoL3BwYzY0L21tL2luaXQuYwppbmRleCBhNzE0OWI5Li5jZjMzZDdlIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L21tL2luaXQuYworKysgYi9hcmNoL3BwYzY0L21tL2luaXQuYwpAQCAtMTM2LDE0ICsxMzYsNzggQEAKIAogI2Vsc2UKIAorc3RhdGljIHZvaWQgdW5tYXBfaW1fYXJlYV9wdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcHRlX3QgKnB0ZTsKKworCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7CisJZG8geworCQlwdGVfdCBwdGVudCA9IHB0ZXBfZ2V0X2FuZF9jbGVhcigmaW9yZW1hcF9tbSwgYWRkciwgcHRlKTsKKwkJV0FSTl9PTighcHRlX25vbmUocHRlbnQpICYmICFwdGVfcHJlc2VudChwdGVudCkpOworCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfaW1fYXJlYV9wbWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcG1kX3QgKnBtZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJZG8geworCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwbWRfbm9uZV9vcl9jbGVhcl9iYWQocG1kKSkKKwkJCWNvbnRpbnVlOworCQl1bm1hcF9pbV9hcmVhX3B0ZShwbWQsIGFkZHIsIG5leHQpOworCX0gd2hpbGUgKHBtZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfaW1fYXJlYV9wdWQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcHVkX3QgKnB1ZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJZG8geworCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKKwkJCWNvbnRpbnVlOworCQl1bm1hcF9pbV9hcmVhX3BtZChwdWQsIGFkZHIsIG5leHQpOworCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworfQorCitzdGF0aWMgdm9pZCB1bm1hcF9pbV9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSAmaW9yZW1hcF9tbTsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJcGdkX3QgKnBnZDsKKworCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisKKwlwZ2QgPSBwZ2Rfb2Zmc2V0X2koYWRkcik7CisJZmx1c2hfY2FjaGVfdnVubWFwKGFkZHIsIGVuZCk7CisJZG8geworCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKKwkJCWNvbnRpbnVlOworCQl1bm1hcF9pbV9hcmVhX3B1ZChwZ2QsIGFkZHIsIG5leHQpOworCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7CisKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Cit9CisKIC8qCiAgKiBtYXBfaW9fcGFnZSBjdXJyZW50bHkgb25seSBjYWxsZWQgYnkgX19pb3JlbWFwCiAgKiBtYXBfaW9fcGFnZSBhZGRzIGFuIGVudHJ5IHRvIHRoZSBpb3JlbWFwIHBhZ2UgdGFibGUKICAqIGFuZCBhZGRzIGFuIGVudHJ5IHRvIHRoZSBIUFQsIHBvc3NpYmx5IGJvbHRpbmcgaXQKICAqLwotc3RhdGljIHZvaWQgbWFwX2lvX3BhZ2UodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBwYSwgaW50IGZsYWdzKQorc3RhdGljIGludCBtYXBfaW9fcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLCBpbnQgZmxhZ3MpCiB7CiAJcGdkX3QgKnBnZHA7CisJcHVkX3QgKnB1ZHA7CiAJcG1kX3QgKnBtZHA7CiAJcHRlX3QgKnB0ZXA7CiAJdW5zaWduZWQgbG9uZyB2c2lkOwpAQCAtMTUxLDkgKzIxNSwxNSBAQAogCWlmIChtZW1faW5pdF9kb25lKSB7CiAJCXNwaW5fbG9jaygmaW9yZW1hcF9tbS5wYWdlX3RhYmxlX2xvY2spOwogCQlwZ2RwID0gcGdkX29mZnNldF9pKGVhKTsKLQkJcG1kcCA9IHBtZF9hbGxvYygmaW9yZW1hcF9tbSwgcGdkcCwgZWEpOworCQlwdWRwID0gcHVkX2FsbG9jKCZpb3JlbWFwX21tLCBwZ2RwLCBlYSk7CisJCWlmICghcHVkcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlwbWRwID0gcG1kX2FsbG9jKCZpb3JlbWFwX21tLCBwdWRwLCBlYSk7CisJCWlmICghcG1kcCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlwdGVwID0gcHRlX2FsbG9jX2tlcm5lbCgmaW9yZW1hcF9tbSwgcG1kcCwgZWEpOwotCisJCWlmICghcHRlcCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlwYSA9IGFic190b19waHlzKHBhKTsKIAkJc2V0X3B0ZV9hdCgmaW9yZW1hcF9tbSwgZWEsIHB0ZXAsIHBmbl9wdGUocGEgPj4gUEFHRV9TSElGVCwKIAkJCQkJCQkgIF9fcGdwcm90KGZsYWdzKSkpOwpAQCAtMTgxLDYgKzI1MSw3IEBACiAJCQlwYW5pYygibWFwX2lvX3BhZ2U6IGNvdWxkIG5vdCBpbnNlcnQgbWFwcGluZyIpOwogCQl9CiAJfQorCXJldHVybiAwOwogfQogCiAKQEAgLTE5NCw5ICsyNjUsMTQgQEAKIAkJZmxhZ3MgfD0gcGdwcm90X3ZhbChQQUdFX0tFUk5FTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBQQUdFX1NJWkUpCi0JCW1hcF9pb19wYWdlKGVhK2ksIHBhK2ksIGZsYWdzKTsKKwkJaWYgKG1hcF9pb19wYWdlKGVhK2ksIHBhK2ksIGZsYWdzKSkKKwkJCWdvdG8gZmFpbHVyZTsKIAogCXJldHVybiAodm9pZCBfX2lvbWVtICopIChlYSArIChhZGRyICYgflBBR0VfTUFTSykpOworIGZhaWx1cmU6CisJaWYgKG1lbV9pbml0X2RvbmUpCisJCXVubWFwX2ltX2FyZWEoZWEsIGVhICsgc2l6ZSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMjA2LDEwICsyODIsMTEgQEAKIAlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CiB9CiAKLXZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIHBhLCBlYTsKKwl2b2lkIF9faW9tZW0gKnJldDsKIAogCS8qCiAJICogQ2hvb3NlIGFuIGFkZHJlc3MgdG8gbWFwIGl0IHRvLgpAQCAtMjMyLDEyICszMDksMTYgQEAKIAkJaWYgKGFyZWEgPT0gTlVMTCkKIAkJCXJldHVybiBOVUxMOwogCQllYSA9ICh1bnNpZ25lZCBsb25nKShhcmVhLT5hZGRyKTsKKwkJcmV0ID0gX19pb3JlbWFwX2NvbShhZGRyLCBwYSwgZWEsIHNpemUsIGZsYWdzKTsKKwkJaWYgKCFyZXQpCisJCQlpbV9mcmVlKGFyZWEtPmFkZHIpOwogCX0gZWxzZSB7CiAJCWVhID0gaW9yZW1hcF9ib3Q7Ci0JCWlvcmVtYXBfYm90ICs9IHNpemU7CisJCXJldCA9IF9faW9yZW1hcF9jb20oYWRkciwgcGEsIGVhLCBzaXplLCBmbGFncyk7CisJCWlmIChyZXQpCisJCQlpb3JlbWFwX2JvdCArPSBzaXplOwogCX0KLQotCXJldHVybiBfX2lvcmVtYXBfY29tKGFkZHIsIHBhLCBlYSwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiByZXQ7CiB9CiAKICNkZWZpbmUgSVNfUEFHRV9BTElHTkVEKF92YWwpICgoX3ZhbCkgPT0gKChfdmFsKSAmIFBBR0VfTUFTSykpCkBAIC0yNDYsNiArMzI3LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXZvaWQgX19pb21lbSAqcmV0OwogCQogCS8qIEZvciBub3csIHJlcXVpcmUgcGFnZS1hbGlnbmVkIHZhbHVlcyBmb3IgcGEsIGVhLCBhbmQgc2l6ZSAqLwogCWlmICghSVNfUEFHRV9BTElHTkVEKHBhKSB8fCAhSVNfUEFHRV9BTElHTkVEKGVhKSB8fApAQCAtMjc2LDcgKzM1OCwxMiBAQAogCQl9CiAJfQogCQotCWlmIChfX2lvcmVtYXBfY29tKHBhLCBwYSwgZWEsIHNpemUsIGZsYWdzKSAhPSAodm9pZCAqKSBlYSkgeworCXJldCA9IF9faW9yZW1hcF9jb20ocGEsIHBhLCBlYSwgc2l6ZSwgZmxhZ3MpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImlvcmVtYXBfZXhwbGljaXQoKSBhbGxvY2F0aW9uIGZhaWx1cmUgIVxuIik7CisJCXJldHVybiAxOworCX0KKwlpZiAocmV0ICE9ICh2b2lkICopIGVhKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiX19pb3JlbWFwX2NvbSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgYWRkclxuIik7CiAJCXJldHVybiAxOwogCX0KQEAgLTI4NCw2OSArMzcxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdW5tYXBfaW1fYXJlYV9wdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZSwgZW5kOwotCXB0ZV90ICpwdGU7Ci0KLQlpZiAocG1kX25vbmUoKnBtZCkpCi0JCXJldHVybjsKLQlpZiAocG1kX2JhZCgqcG1kKSkgewotCQlwbWRfRVJST1IoKnBtZCk7Ci0JCXBtZF9jbGVhcihwbWQpOwotCQlyZXR1cm47Ci0JfQotCi0JcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKLQliYXNlID0gYWRkcmVzcyAmIFBNRF9NQVNLOwotCWFkZHJlc3MgJj0gflBNRF9NQVNLOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCWlmIChlbmQgPiBQTURfU0laRSkKLQkJZW5kID0gUE1EX1NJWkU7Ci0KLQlkbyB7Ci0JCXB0ZV90IHBhZ2U7Ci0JCXBhZ2UgPSBwdGVwX2dldF9hbmRfY2xlYXIoJmlvcmVtYXBfbW0sIGJhc2UgKyBhZGRyZXNzLCBwdGUpOwotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJcHRlKys7Ci0JCWlmIChwdGVfbm9uZShwYWdlKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocHRlX3ByZXNlbnQocGFnZSkpCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiV2hlZS4uIFN3YXBwZWQgb3V0IHBhZ2UgaW4ga2VybmVsIHBhZ2UiCi0JCSAgICAgICAiIHRhYmxlXG4iKTsKLQl9IHdoaWxlIChhZGRyZXNzIDwgZW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXBfaW1fYXJlYV9wbWQocGdkX3QgKmRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZSwgZW5kOwotCXBtZF90ICpwbWQ7Ci0KLQlpZiAocGdkX25vbmUoKmRpcikpCi0JCXJldHVybjsKLQlpZiAocGdkX2JhZCgqZGlyKSkgewotCQlwZ2RfRVJST1IoKmRpcik7Ci0JCXBnZF9jbGVhcihkaXIpOwotCQlyZXR1cm47Ci0JfQotCi0JcG1kID0gcG1kX29mZnNldChkaXIsIGFkZHJlc3MpOwotCWJhc2UgPSBhZGRyZXNzICYgUEdESVJfTUFTSzsKLQlhZGRyZXNzICY9IH5QR0RJUl9NQVNLOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCWlmIChlbmQgPiBQR0RJUl9TSVpFKQotCQllbmQgPSBQR0RJUl9TSVpFOwotCi0JZG8gewotCQl1bm1hcF9pbV9hcmVhX3B0ZShwbWQsIGJhc2UgKyBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzKTsKLQkJYWRkcmVzcyA9IChhZGRyZXNzICsgUE1EX1NJWkUpICYgUE1EX01BU0s7Ci0JCXBtZCsrOwotCX0gd2hpbGUgKGFkZHJlc3MgPCBlbmQpOwotfQotCiAvKiAgCiAgKiBVbm1hcCBhbiBJTyByZWdpb24gYW5kIHJlbW92ZSBpdCBmcm9tIGltYWxsb2MnZCBsaXN0LgogICogQWNjZXNzIHRvIElPIG1lbW9yeSBzaG91bGQgYmUgc2VyaWFsaXplZCBieSBkcml2ZXIuCkBAIC0zNTYsMzkgKzM4MCwxOSBAQAogICovCiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0YXJ0LCBlbmQsIHNpemU7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JcGdkX3QgKmRpcjsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHNpemU7CiAJdm9pZCAqYWRkcjsKIAotCWlmICghbWVtX2luaXRfZG9uZSkgeworCWlmICghbWVtX2luaXRfZG9uZSkKIAkJcmV0dXJuOwotCX0KIAkKIAlhZGRyID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIHRva2VuICYgUEFHRV9NQVNLKTsKIAkKLQlpZiAoKHNpemUgPSBpbV9mcmVlKGFkZHIpKSA9PSAwKSB7CisJaWYgKChzaXplID0gaW1fZnJlZShhZGRyKSkgPT0gMCkKIAkJcmV0dXJuOwotCX0KIAogCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylhZGRyOyAKLQlzdGFydCA9IGFkZHJlc3M7Ci0JZW5kID0gYWRkcmVzcyArIHNpemU7Ci0KLQltbSA9ICZpb3JlbWFwX21tOwotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0KLQlkaXIgPSBwZ2Rfb2Zmc2V0X2koYWRkcmVzcyk7Ci0JZmx1c2hfY2FjaGVfdnVubWFwKGFkZHJlc3MsIGVuZCk7Ci0JZG8gewotCQl1bm1hcF9pbV9hcmVhX3BtZChkaXIsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Ci0JCWRpcisrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOwotCi0Jc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwotCXJldHVybjsKKwl1bm1hcF9pbV9hcmVhKGFkZHJlc3MsIGFkZHJlc3MgKyBzaXplKTsKIH0KIAogc3RhdGljIGludCBpb3VubWFwX3N1YnNldF9yZWdpb25zKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9tbS9zbGIuYyBiL2FyY2gvcHBjNjQvbW0vc2xiLmMKaW5kZXggNmEyMDc3My4uMjQ0MTUwYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9tbS9zbGIuYworKysgYi9hcmNoL3BwYzY0L21tL3NsYi5jCkBAIC0zMyw4ICszMyw4IEBACiAJcmV0dXJuIChnZXRfa2VybmVsX3ZzaWQoZWEpIDw8IFNMQl9WU0lEX1NISUZUKSB8IGZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX3NsYmUodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyB2c2lkLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX3NsYmUodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVudHJ5KQogewogCWFzbSB2b2xhdGlsZSgic2xibXRlICAlMCwlMSIgOgogCQkgICAgIDogInIiIChta192c2lkX2RhdGEoZWEsIGZsYWdzKSksCkBAIC0xNDUsOSArMTQ1LDggQEAKICAJYXNtIHZvbGF0aWxlKCJpc3luYyI6OjoibWVtb3J5Iik7CiAgCWFzbSB2b2xhdGlsZSgic2xibXRlICAlMCwlMCI6OiJyIiAoMCkgOiAibWVtb3J5Iik7CiAJYXNtIHZvbGF0aWxlKCJpc3luYzsgc2xiaWE7IGlzeW5jIjo6OiJtZW1vcnkiKTsKLQljcmVhdGVfc2xiZShLRVJORUxCQVNFLCBnZXRfa2VybmVsX3ZzaWQoS0VSTkVMQkFTRSksIGZsYWdzLCAwKTsKLQljcmVhdGVfc2xiZShWTUFMTE9DQkFTRSwgZ2V0X2tlcm5lbF92c2lkKEtFUk5FTEJBU0UpLAotCQkgICAgU0xCX1ZTSURfS0VSTkVMLCAxKTsKKwljcmVhdGVfc2xiZShLRVJORUxCQVNFLCBmbGFncywgMCk7CisJY3JlYXRlX3NsYmUoVk1BTExPQ0JBU0UsIFNMQl9WU0lEX0tFUk5FTCwgMSk7CiAJLyogV2UgZG9uJ3QgYm9sdCB0aGUgc3RhY2sgZm9yIHRoZSB0aW1lIGJlaW5nIC0gd2UncmUgaW4gYm9vdCwKIAkgKiBzbyB0aGUgc3RhY2sgaXMgaW4gdGhlIGJvbHRlZCBzZWdtZW50LiAgQnkgdGhlIHRpbWUgaXQgZ29lcwogCSAqIGVsc2V3aGVyZSwgd2UnbGwgY2FsbCBfc3dpdGNoKCkgd2hpY2ggd2lsbCBib2x0IGluIHRoZSBuZXcKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IDEzNThiNDIuLjA3ZmQwNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMQotIyBXZWQgTWFyICAyIDE2OjU3OjU1IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzMKKyMgRnJpIEFwciAyMiAxNTozMDo1OCAyMDA1CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CkBAIC0xNSw2ICsxNSw3IEBACiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMjYsMjQgKzI3LDI1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjYxLDcgKzI2Myw2IEBACiAjCiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19ORVRfS0VZPXkKIENPTkZJR19JTkVUPXkKQEAgLTMyOSw2ICszMzAsNyBAQAogQ09ORklHX05FVF9RT1M9eQogQ09ORklHX05FVF9FU1RJTUFUT1I9eQogQ09ORklHX05FVF9DTFM9eQorIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KIENPTkZJR19ORVRfQ0xTX1JPVVRFND1tCiBDT05GSUdfTkVUX0NMU19ST1VURT15CkBAIC0zMzgsNiArMzQwLDcgQEAKICMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1JTVlA9bQogQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19QT0xJQ0U9eQogCkBAIC0zOTMsNiArMzk2LDggQEAKIENPTkZJR19JVUNWPW0KICMgQ09ORklHX05FVElVQ1YgaXMgbm90IHNldAogIyBDT05GSUdfU01TR0lVQ1YgaXMgbm90IHNldAorIyBDT05GSUdfQ0xBVyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEMgaXMgbm90IHNldAogQ09ORklHX1FFVEg9eQogCiAjCkBAIC01MzIsMTAgKzUzNywxMyBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldApAQCAtNTYwLDYgKzU2OCw3IEBACiAjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fREVTX1o5OTAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2lvY3RsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9pb2N0bC5jCmluZGV4IDk2NTcxZmYuLjAzZDAzYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2lvY3RsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfaW9jdGwuYwpAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBDT0RFCiAjaW5jbHVkZSAiLi4vLi4vLi4vZnMvY29tcGF0X2lvY3RsLmMiCiAjaW5jbHVkZSA8YXNtL2Rhc2QuaD4KKyNpbmNsdWRlIDxhc20vY21iLmg+CiAjaW5jbHVkZSA8YXNtL3RhcGUzOTAuaD4KIAogc3RhdGljIGludCBkb19pb2N0bDMyX3BvaW50ZXIodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtNTgsNyArNTksMTEgQEAKIENPTVBBVElCTEVfSU9DVEwoQklPREFTRFBTUkQpCiBDT01QQVRJQkxFX0lPQ1RMKEJJT0RBU0RHQVRUUikKIENPTVBBVElCTEVfSU9DVEwoQklPREFTRFNBVFRSKQotCisjaWYgZGVmaW5lZChDT05GSUdfREFTRF9DTUIpIHx8IGRlZmluZWQoQ09ORklHX0RBU0RfQ01CX01PRFVMRSkKK0NPTVBBVElCTEVfSU9DVEwoQklPREFTRENNRkVOQUJMRSkKK0NPTVBBVElCTEVfSU9DVEwoQklPREFTRENNRkRJU0FCTEUpCitDT01QQVRJQkxFX0lPQ1RMKEJJT0RBU0RSRUFEQUxMQ01CKQorI2VuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1MzOTBfVEFQRSkgfHwgZGVmaW5lZChDT05GSUdfUzM5MF9UQVBFX01PRFVMRSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDJkNTQ2YzYuLjI2ODg5MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC02MDksNyArNjEwLDcgQEAKIAkJLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KIAljYXNlIFBUUkFDRV9DT05UOgogCQkvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID49IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCXJldHVybiAtRUlPOwogCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKIAkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKQEAgLTYzNyw3ICs2MzgsNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoKIAkJLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCi0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+PSBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwppbmRleCAxMWZkNmQ1Li5iZWU2NTRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwpAQCAtMzQsNyArMzQsNiBAQAogRVhQT1JUX1NZTUJPTChfX3N0cm5jcHlfZnJvbV91c2VyX2FzbSk7CiBFWFBPUlRfU1lNQk9MKF9fc3Rybmxlbl91c2VyX2FzbSk7CiBFWFBPUlRfU1lNQk9MKGRpYWcxMCk7Ci1FWFBPUlRfU1lNQk9MKGRlZmF1bHRfc3RvcmFnZV9rZXkpOwogCiAvKgogICogc2VtYXBob3JlIG9wcwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IGM4NzljNDAuLmRmODMyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTQ0LDYgKzQ0LDggQEAKICNpbmNsdWRlIDxhc20vY3BjbWQuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyoKICAqIE1hY2hpbmUgc2V0dXAuLgpAQCAtNTMsMTMgKzU1LDE0IEBACiB1bnNpZ25lZCBpbnQgY29uc29sZV9pcnEgPSAtMTsKIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3NpemUgPSAwOwogdW5zaWduZWQgbG9uZyBtYWNoaW5lX2ZsYWdzID0gMDsKLXVuc2lnbmVkIGludCBkZWZhdWx0X3N0b3JhZ2Vfa2V5ID0gMDsKIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplLCB0eXBlOwogfSBtZW1vcnlfY2h1bmtbTUVNT1JZX0NIVU5LU10gPSB7IHsgMCB9IH07CiAjZGVmaW5lIENIVU5LX1JFQURfV1JJVEUgMAogI2RlZmluZSBDSFVOS19SRUFEX09OTFkgMQogdm9sYXRpbGUgaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOyAvKiBsb2dpY2FsIGNwdSB0byBjcHUgYWRkcmVzcyAqLwordW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHpob2xlc19zaXplW01BWF9OUl9aT05FU107CitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbW9yeV9lbmQ7CiAKIC8qCiAgKiBTZXR1cCBvcHRpb25zCkBAIC03OCwxMSArODEsMTUgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2RlX3Jlc291cmNlID0gewogCS5uYW1lICA9ICJLZXJuZWwgY29kZSIsCisJLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dCwKKwkuZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQgLSAxLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfTUVNLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYXRhX3Jlc291cmNlID0gewogCS5uYW1lID0gIktlcm5lbCBkYXRhIiwKKwkuc3RhcnQgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dCwKKwkuZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfZWRhdGEgLSAxLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtMzEwLDkwICszMTcsNTAgQEAKIAogRVhQT1JUX1NZTUJPTChtYWNoaW5lX3Bvd2VyX29mZik7CiAKLS8qCi0gKiBTZXR1cCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbml0L21haW4uYyBqdXN0IGFmdGVyIHRoZSBiYW5uZXIKLSAqIHdhcyBwcmludGVkLgotICovCi1leHRlcm4gY2hhciBfcHN0YXJ0LCBfcGVuZCwgX3N0ZXh0OwotCi12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCitzdGF0aWMgdm9pZCBfX2luaXQKK2FkZF9tZW1vcnlfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBib290bWFwX3NpemU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOwotICAgICAgICBjaGFyIGMgPSAnICcsIGNuLCAqdG8gPSBjb21tYW5kX2xpbmUsICpmcm9tID0gQ09NTUFORF9MSU5FOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNtcHRyYXA9MDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSA9IDA7Ci0Jc3RydWN0IF9sb3djb3JlICpsYzsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGRtYV9wZm4gPSBNQVhfRE1BX0FERFJFU1MgPj4gUEFHRV9TSElGVDsKIAotICAgICAgICBpZiAoc21wdHJhcCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNtcHRyYXA9MTsKKwlpZiAoZW5kIDw9IGRtYV9wZm4pCisJCXpob2xlc19zaXplW1pPTkVfRE1BXSArPSBlbmQgLSBzdGFydCArIDE7CisJZWxzZSBpZiAoc3RhcnQgPiBkbWFfcGZuKQorCQl6aG9sZXNfc2l6ZVtaT05FX05PUk1BTF0gKz0gZW5kIC0gc3RhcnQgKyAxOworCWVsc2UgeworCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gKz0gZG1hX3BmbiAtIHN0YXJ0ICsgMTsKKwkJemhvbGVzX3NpemVbWk9ORV9OT1JNQUxdICs9IGVuZCAtIGRtYV9wZm47CisJfQorfQogCi0gICAgICAgIC8qCi0gICAgICAgICAqIHByaW50IHdoYXQgaGVhZC5TIGhhcyBmb3VuZCBvdXQgYWJvdXQgdGhlIG1hY2hpbmUgCi0gICAgICAgICAqLwotI2lmbmRlZiBDT05GSUdfQVJDSF9TMzkwWAotCXByaW50aygoTUFDSElORV9JU19WTSkgPwotCSAgICAgICAiV2UgYXJlIHJ1bm5pbmcgdW5kZXIgVk0gKDMxIGJpdCBtb2RlKVxuIiA6Ci0JICAgICAgICJXZSBhcmUgcnVubmluZyBuYXRpdmUgKDMxIGJpdCBtb2RlKVxuIik7Ci0JcHJpbnRrKChNQUNISU5FX0hBU19JRUVFKSA/Ci0JICAgICAgICJUaGlzIG1hY2hpbmUgaGFzIGFuIElFRUUgZnB1XG4iIDoKLQkgICAgICAgIlRoaXMgbWFjaGluZSBoYXMgbm8gSUVFRSBmcHVcbiIpOwotI2Vsc2UgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KLQlwcmludGsoKE1BQ0hJTkVfSVNfVk0pID8KLQkgICAgICAgIldlIGFyZSBydW5uaW5nIHVuZGVyIFZNICg2NCBiaXQgbW9kZSlcbiIgOgotCSAgICAgICAiV2UgYXJlIHJ1bm5pbmcgbmF0aXZlICg2NCBiaXQgbW9kZSlcbiIpOwotI2VuZGlmIC8qIENPTkZJR19BUkNIX1MzOTBYICovCitzdGF0aWMgdm9pZCBfX2luaXQKK3BhcnNlX2NtZGxpbmVfZWFybHkoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwljaGFyIGMgPSAnICcsIGNuLCAqdG8gPSBjb21tYW5kX2xpbmUsICpmcm9tID0gQ09NTUFORF9MSU5FOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCi0gICAgICAgIFJPT1RfREVWID0gUm9vdF9SQU0wOwotICAgICAgICBtZW1vcnlfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgJl9lbmQ7ICAgIC8qIGZpeGl0IGlmIHVzZSAkQ09ERUxPIGV0YyovCi0jaWZuZGVmIENPTkZJR19BUkNIX1MzOTBYCi0JbWVtb3J5X2VuZCA9IG1lbW9yeV9zaXplICYgfjB4NDAwMDAwVUw7ICAvKiBhbGlnbiBtZW1vcnkgZW5kIHRvIDRNQiAqLwotICAgICAgICAvKgotICAgICAgICAgKiBXZSBuZWVkIHNvbWUgZnJlZSB2aXJ0dWFsIHNwYWNlIHRvIGJlIGFibGUgdG8gZG8gdm1hbGxvYy4KLSAgICAgICAgICogT24gYSBtYWNoaW5lIHdpdGggMkdCIG1lbW9yeSB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGF0Ci0gICAgICAgICAqIGxlYXN0IDEyOCBNQiBmcmVlIHNwYWNlIGZvciB2bWFsbG9jLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKG1lbW9yeV9lbmQgPiAxOTIwKjEwMjQqMTAyNCkKLSAgICAgICAgICAgICAgICBtZW1vcnlfZW5kID0gMTkyMCoxMDI0KjEwMjQ7Ci0jZWxzZSAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLwotCW1lbW9yeV9lbmQgPSBtZW1vcnlfc2l6ZSAmIH4weDIwMDAwMFVMOyAgLyogZGV0ZWN0ZWQgaW4gaGVhZC5zICovCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KLSAgICAgICAgaW5pdF9tbS5zdGFydF9jb2RlID0gUEFHRV9PRkZTRVQ7Ci0gICAgICAgIGluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKLSAgICAgICAgaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhOwotICAgICAgICBpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsKKwkvKiBTYXZlIHVucGFyc2VkIGNvbW1hbmQgbGluZSBjb3B5IGZvciAvcHJvYy9jbWRsaW5lICovCisJbWVtY3B5KHNhdmVkX2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7CisJc2F2ZWRfY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFLTFdID0gJ1wwJzsKIAotCWNvZGVfcmVzb3VyY2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZykgJl90ZXh0OwotCWNvZGVfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQgLSAxOwotCWRhdGFfcmVzb3VyY2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKLQlkYXRhX3Jlc291cmNlLmVuZCA9ICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhIC0gMTsKLQotICAgICAgICAvKiBTYXZlIHVucGFyc2VkIGNvbW1hbmQgbGluZSBjb3B5IGZvciAvcHJvYy9jbWRsaW5lICovCi0gICAgICAgIG1lbWNweShzYXZlZF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORSwgQ09NTUFORF9MSU5FX1NJWkUpOwotICAgICAgICBzYXZlZF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAnXDAnOwotCi0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqICJtZW09WFhYW2tLbU1dIiBzZXRzIG1lbXNpemUgCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJyAnICYmIHN0cm5jbXAoZnJvbSwgIm1lbT0iLCA0KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfZW5kID0gc2ltcGxlX3N0cnRvdWwoZnJvbSs0LCAmZnJvbSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICpmcm9tID09ICdLJyB8fCAqZnJvbSA9PSAnaycgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9lbmQgPSBtZW1vcnlfZW5kIDw8IDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAqZnJvbSA9PSAnTScgfHwgKmZyb20gPT0gJ20nICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfZW5kID0gbWVtb3J5X2VuZCA8PCAyMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqICJpcGxkZWxheT1YWFhbc21dIiBzZXRzIGlwbCBkZWxheSBpbiBzZWNvbmRzIG9yIG1pbnV0ZXMKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnICcgJiYgc3RybmNtcChmcm9tLCAiaXBsZGVsYXk9IiwgOSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBzaW1wbGVfc3RydG91bChmcm9tKzksICZmcm9tLCAwKTsKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqICJtZW09WFhYW2tLbU1dIiBzZXRzIG1lbXNpemUKKwkJICovCisJCWlmIChjID09ICcgJyAmJiBzdHJuY21wKGZyb20sICJtZW09IiwgNCkgPT0gMCkgeworCQkJbWVtb3J5X2VuZCA9IHNpbXBsZV9zdHJ0b3VsKGZyb20rNCwgJmZyb20sIDApOworCQkJaWYgKCAqZnJvbSA9PSAnSycgfHwgKmZyb20gPT0gJ2snICkgeworCQkJCW1lbW9yeV9lbmQgPSBtZW1vcnlfZW5kIDw8IDEwOworCQkJCWZyb20rKzsKKwkJCX0gZWxzZSBpZiAoICpmcm9tID09ICdNJyB8fCAqZnJvbSA9PSAnbScgKSB7CisJCQkJbWVtb3J5X2VuZCA9IG1lbW9yeV9lbmQgPDwgMjA7CisJCQkJZnJvbSsrOworCQkJfQorCQl9CisJCS8qCisJCSAqICJpcGxkZWxheT1YWFhbc21dIiBzZXRzIGlwbCBkZWxheSBpbiBzZWNvbmRzIG9yIG1pbnV0ZXMKKwkJICovCisJCWlmIChjID09ICcgJyAmJiBzdHJuY21wKGZyb20sICJpcGxkZWxheT0iLCA5KSA9PSAwKSB7CisJCQlkZWxheSA9IHNpbXBsZV9zdHJ0b3VsKGZyb20rOSwgJmZyb20sIDApOwogCQkJaWYgKCpmcm9tID09ICdzJyB8fCAqZnJvbSA9PSAnUycpIHsKIAkJCQlkZWxheSA9IGRlbGF5KjEwMDAwMDA7CiAJCQkJZnJvbSsrOwpAQCAtNDAzLDExNiArMzcwLDQwIEBACiAJCQl9CiAJCQkvKiBub3cgd2FpdCBmb3IgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgdGltZSAqLwogCQkJdWRlbGF5KGRlbGF5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY24gPSAqKGZyb20rKyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChjbiA9PSAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgY24gPSAnICc7ICAvKiByZXBsYWNlIG5ld2xpbmVzIHdpdGggc3BhY2UgKi8KKwkJfQorCQljbiA9ICooZnJvbSsrKTsKKwkJaWYgKCFjbikKKwkJCWJyZWFrOworCQlpZiAoY24gPT0gJ1xuJykKKwkJCWNuID0gJyAnOyAgLyogcmVwbGFjZSBuZXdsaW5lcyB3aXRoIHNwYWNlICovCiAJCWlmIChjbiA9PSAweDBkKQogCQkJY24gPSAnICc7ICAvKiByZXBsYWNlIDB4MGQgd2l0aCBzcGFjZSAqLwotICAgICAgICAgICAgICAgIGlmIChjbiA9PSAnICcgJiYgYyA9PSAnICcpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8qIHJlbW92ZSBhZGRpdGlvbmFsIHNwYWNlcyAqLwotICAgICAgICAgICAgICAgIGMgPSBjbjsKLSAgICAgICAgICAgICAgICBpZiAodG8gLSBjb21tYW5kX2xpbmUgPj0gQ09NTUFORF9MSU5FX1NJWkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAqKHRvKyspID0gYzsKLSAgICAgICAgfQotICAgICAgICBpZiAoYyA9PSAnICcgJiYgdG8gPiBjb21tYW5kX2xpbmUpIHRvLS07Ci0gICAgICAgICp0byA9ICdcMCc7Ci0gICAgICAgICpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7Ci0KLQkvKgotCSAqIHBhcnRpYWxseSB1c2VkIHBhZ2VzIGFyZSBub3QgdXNhYmxlIC0gdGh1cwotCSAqIHdlIGFyZSByb3VuZGluZyB1cHdhcmRzOgotCSAqLwotCXN0YXJ0X3BmbiA9IChfX3BhKCZfZW5kKSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IG1heF9wZm4gPSBtZW1vcnlfZW5kID4+IFBBR0VfU0hJRlQ7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IgKHdpdGggbG93IG1lbW9yeSBvbmx5KToKLQkgKi8KLQlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oc3RhcnRfcGZuLCBlbmRfcGZuKTsKLQotCS8qCi0JICogUmVnaXN0ZXIgUkFNIGFyZWFzIHdpdGggdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCAxNiAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2NodW5rLCBlbmRfY2h1bms7Ci0KLQkJaWYgKG1lbW9yeV9jaHVua1tpXS50eXBlICE9IENIVU5LX1JFQURfV1JJVEUpCi0JCQljb250aW51ZTsKLQkJc3RhcnRfY2h1bmsgPSAobWVtb3J5X2NodW5rW2ldLmFkZHIgKyBQQUdFX1NJWkUgLSAxKTsKLQkJc3RhcnRfY2h1bmsgPj49IFBBR0VfU0hJRlQ7Ci0JCWVuZF9jaHVuayA9IChtZW1vcnlfY2h1bmtbaV0uYWRkciArIG1lbW9yeV9jaHVua1tpXS5zaXplKTsKLQkJZW5kX2NodW5rID4+PSBQQUdFX1NISUZUOwotCQlpZiAoc3RhcnRfY2h1bmsgPCBzdGFydF9wZm4pCi0JCQlzdGFydF9jaHVuayA9IHN0YXJ0X3BmbjsKLQkJaWYgKGVuZF9jaHVuayA+IGVuZF9wZm4pCi0JCQllbmRfY2h1bmsgPSBlbmRfcGZuOwotCQlpZiAoc3RhcnRfY2h1bmsgPCBlbmRfY2h1bmspCi0JCQlmcmVlX2Jvb3RtZW0oc3RhcnRfY2h1bmsgPDwgUEFHRV9TSElGVCwKLQkJCQkgICAgIChlbmRfY2h1bmsgLSBzdGFydF9jaHVuaykgPDwgUEFHRV9TSElGVCk7Ci0JfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwIGl0c2VsZiBhcyB3ZWxsLiBXZSBkbyB0aGlzIGluIHR3bwotICAgICAgICAgKiBzdGVwcyAoZmlyc3Qgc3RlcCB3YXMgaW5pdF9ib290bWVtKCkpIGJlY2F1c2UgdGhpcyBjYXRjaGVzCi0gICAgICAgICAqIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZQotICAgICAgICAgKiBib290bWVtIGFsbG9jYXRvciB3aXRoIGFuIGludmFsaWQgUkFNIGFyZWEuCi0gICAgICAgICAqLwotICAgICAgICByZXNlcnZlX2Jvb3RtZW0oc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsIGJvb3RtYXBfc2l6ZSk7Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLSAgICAgICAgaWYgKElOSVRSRF9TVEFSVCkgewotCQlpZiAoSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUgPD0gbWVtb3J5X2VuZCkgewotCQkJcmVzZXJ2ZV9ib290bWVtKElOSVRSRF9TVEFSVCwgSU5JVFJEX1NJWkUpOwotCQkJaW5pdHJkX3N0YXJ0ID0gSU5JVFJEX1NUQVJUOwotCQkJaW5pdHJkX2VuZCA9IGluaXRyZF9zdGFydCArIElOSVRSRF9TSVpFOwotCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIG1lbW9yeSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigweCUwOGx4ID4gMHglMDhseClcbmRpc2FibGluZyBpbml0cmRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkUsIG1lbW9yeV9lbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5pdHJkX3N0YXJ0ID0gaW5pdHJkX2VuZCA9IDA7Ci0JCX0KLSAgICAgICAgfQotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgbWVtb3J5X2NodW5rW2ldLnNpemUgPiAwOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQkJcmVzID0gYWxsb2NfYm9vdG1lbV9sb3coc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwotCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9NRU07Ci0KLQkJc3dpdGNoIChtZW1vcnlfY2h1bmtbaV0udHlwZSkgewotCQljYXNlIENIVU5LX1JFQURfV1JJVEU6Ci0JCQlyZXMtPm5hbWUgPSAiU3lzdGVtIFJBTSI7CisJCWlmIChjbiA9PSAnICcgJiYgYyA9PSAnICcpCisJCQljb250aW51ZTsgIC8qIHJlbW92ZSBhZGRpdGlvbmFsIHNwYWNlcyAqLworCQljID0gY247CisJCWlmICh0byAtIGNvbW1hbmRfbGluZSA+PSBDT01NQU5EX0xJTkVfU0laRSkKIAkJCWJyZWFrOwotCQljYXNlIENIVU5LX1JFQURfT05MWToKLQkJCXJlcy0+bmFtZSA9ICJTeXN0ZW0gUk9NIjsKLQkJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9SRUFET05MWTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmVzLT5uYW1lID0gInJlc2VydmVkIjsKLQkJfQotCQlyZXMtPnN0YXJ0ID0gbWVtb3J5X2NodW5rW2ldLmFkZHI7Ci0JCXJlcy0+ZW5kID0gbWVtb3J5X2NodW5rW2ldLmFkZHIgKyAgbWVtb3J5X2NodW5rW2ldLnNpemUgLSAxOwotCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKLQkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZjb2RlX3Jlc291cmNlKTsKLQkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZkYXRhX3Jlc291cmNlKTsKKwkJKih0bysrKSA9IGM7CiAJfQorCWlmIChjID09ICcgJyAmJiB0byA+IGNvbW1hbmRfbGluZSkgdG8tLTsKKwkqdG8gPSAnXDAnOworCSpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7Cit9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogU2V0dXAgbG93Y29yZSBmb3IgYm9vdCBjcHUKLSAgICAgICAgICovCi0jaWZuZGVmIENPTkZJR19BUkNIX1MzOTBYCi0JbGMgPSAoc3RydWN0IF9sb3djb3JlICopIF9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgMCk7Ci0JbWVtc2V0KGxjLCAwLCBQQUdFX1NJWkUpOwotI2Vsc2UgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KLQlsYyA9IChzdHJ1Y3QgX2xvd2NvcmUgKikgX19hbGxvY19ib290bWVtKDIqUEFHRV9TSVpFLCAyKlBBR0VfU0laRSwgMCk7Ci0JbWVtc2V0KGxjLCAwLCAyKlBBR0VfU0laRSk7Ci0jZW5kaWYgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KLQlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFM7CitzdGF0aWMgdm9pZCBfX2luaXQKK3NldHVwX2xvd2NvcmUodm9pZCkKK3sKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjOworCWludCBsY19wYWdlczsKKworCS8qCisJICogU2V0dXAgbG93Y29yZSBmb3IgYm9vdCBjcHUKKwkgKi8KKwlsY19wYWdlcyA9IHNpemVvZih2b2lkICopID09IDggPyAyIDogMTsKKwlsYyA9IChzdHJ1Y3QgX2xvd2NvcmUgKikKKwkJX19hbGxvY19ib290bWVtKGxjX3BhZ2VzICogUEFHRV9TSVpFLCBsY19wYWdlcyAqIFBBR0VfU0laRSwgMCk7CisJbWVtc2V0KGxjLCAwLCBsY19wYWdlcyAqIFBBR0VfU0laRSk7CisJbGMtPnJlc3RhcnRfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX0RFRkFVTFRfS0VZOwogCWxjLT5yZXN0YXJ0X3Bzdy5hZGRyID0KIAkJUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgcmVzdGFydF9pbnRfaGFuZGxlcjsKIAlsYy0+ZXh0ZXJuYWxfbmV3X3Bzdy5tYXNrID0gUFNXX0tFUk5FTF9CSVRTOwpAQCAtNTQ2LDYgKzQzNywxNzAgQEAKIAkJbGMtPmRpYWc0NF9vcGNvZGUgPSAweDA3MDAwNzAwOwogI2VuZGlmIC8qIENPTkZJR19BUkNIX1MzOTBYICovCiAJc2V0X3ByZWZpeCgodTMyKSh1bnNpZ25lZCBsb25nKSBsYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0dXBfcmVzb3VyY2VzKHZvaWQpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgeworCQlyZXMgPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX01FTTsKKwkJc3dpdGNoIChtZW1vcnlfY2h1bmtbaV0udHlwZSkgeworCQljYXNlIENIVU5LX1JFQURfV1JJVEU6CisJCQlyZXMtPm5hbWUgPSAiU3lzdGVtIFJBTSI7CisJCQlicmVhazsKKwkJY2FzZSBDSFVOS19SRUFEX09OTFk6CisJCQlyZXMtPm5hbWUgPSAiU3lzdGVtIFJPTSI7CisJCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfUkVBRE9OTFk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJlcy0+bmFtZSA9ICJyZXNlcnZlZCI7CisJCX0KKwkJcmVzLT5zdGFydCA9IG1lbW9yeV9jaHVua1tpXS5hZGRyOworCQlyZXMtPmVuZCA9IG1lbW9yeV9jaHVua1tpXS5hZGRyICsgIG1lbW9yeV9jaHVua1tpXS5zaXplIC0gMTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcyk7CisJCXJlcXVlc3RfcmVzb3VyY2UocmVzLCAmY29kZV9yZXNvdXJjZSk7CisJCXJlcXVlc3RfcmVzb3VyY2UocmVzLCAmZGF0YV9yZXNvdXJjZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3NldHVwX21lbW9yeSh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgaW5pdF9wZm47CisJdW5zaWduZWQgbG9uZyBsYXN0X3J3X2VuZDsKKwlpbnQgaTsKKworCS8qCisJICogcGFydGlhbGx5IHVzZWQgcGFnZXMgYXJlIG5vdCB1c2FibGUgLSB0aHVzCisJICogd2UgYXJlIHJvdW5kaW5nIHVwd2FyZHM6CisJICovCisJc3RhcnRfcGZuID0gKF9fcGEoJl9lbmQpICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwllbmRfcGZuID0gbWF4X3BmbiA9IG1lbW9yeV9lbmQgPj4gUEFHRV9TSElGVDsKKworCS8qIEluaXRpYWxpemUgc3RvcmFnZSBrZXkgZm9yIGtlcm5lbCBwYWdlcyAqLworCWZvciAoaW5pdF9wZm4gPSAwIDsgaW5pdF9wZm4gPCBzdGFydF9wZm47IGluaXRfcGZuKyspCisJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfREVGQVVMVF9LRVkpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBib290LXRpbWUgYWxsb2NhdG9yICh3aXRoIGxvdyBtZW1vcnkgb25seSk6CisJICovCisJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtKHN0YXJ0X3BmbiwgZW5kX3Bmbik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIFJBTSBhcmVhcyB3aXRoIHRoZSBib290bWVtIGFsbG9jYXRvci4KKwkgKi8KKwlsYXN0X3J3X2VuZCA9IHN0YXJ0X3BmbjsKKworCWZvciAoaSA9IDA7IGkgPCBNRU1PUllfQ0hVTktTICYmIG1lbW9yeV9jaHVua1tpXS5zaXplID4gMDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfY2h1bmssIGVuZF9jaHVuazsKKworCQlpZiAobWVtb3J5X2NodW5rW2ldLnR5cGUgIT0gQ0hVTktfUkVBRF9XUklURSkKKwkJCWNvbnRpbnVlOworCQlzdGFydF9jaHVuayA9IChtZW1vcnlfY2h1bmtbaV0uYWRkciArIFBBR0VfU0laRSAtIDEpOworCQlzdGFydF9jaHVuayA+Pj0gUEFHRV9TSElGVDsKKwkJZW5kX2NodW5rID0gKG1lbW9yeV9jaHVua1tpXS5hZGRyICsgbWVtb3J5X2NodW5rW2ldLnNpemUpOworCQllbmRfY2h1bmsgPj49IFBBR0VfU0hJRlQ7CisJCWlmIChzdGFydF9jaHVuayA8IHN0YXJ0X3BmbikKKwkJCXN0YXJ0X2NodW5rID0gc3RhcnRfcGZuOworCQlpZiAoZW5kX2NodW5rID4gZW5kX3BmbikKKwkJCWVuZF9jaHVuayA9IGVuZF9wZm47CisJCWlmIChzdGFydF9jaHVuayA8IGVuZF9jaHVuaykgeworCQkJLyogSW5pdGlhbGl6ZSBzdG9yYWdlIGtleSBmb3IgUkFNIHBhZ2VzICovCisJCQlmb3IgKGluaXRfcGZuID0gc3RhcnRfY2h1bmsgOyBpbml0X3BmbiA8IGVuZF9jaHVuazsKKwkJCSAgICAgaW5pdF9wZm4rKykKKwkJCQlwYWdlX3NldF9zdG9yYWdlX2tleShpbml0X3BmbiA8PCBQQUdFX1NISUZULAorCQkJCQkJICAgICBQQUdFX0RFRkFVTFRfS0VZKTsKKwkJCWZyZWVfYm9vdG1lbShzdGFydF9jaHVuayA8PCBQQUdFX1NISUZULAorCQkJCSAgICAgKGVuZF9jaHVuayAtIHN0YXJ0X2NodW5rKSA8PCBQQUdFX1NISUZUKTsKKwkJCWlmIChsYXN0X3J3X2VuZCA8IHN0YXJ0X2NodW5rKQorCQkJCWFkZF9tZW1vcnlfaG9sZShsYXN0X3J3X2VuZCwgc3RhcnRfY2h1bmsgLSAxKTsKKwkJCWxhc3RfcndfZW5kID0gZW5kX2NodW5rOworCQl9CisJfQorCisJcHN3X3NldF9rZXkoUEFHRV9ERUZBVUxUX0tFWSk7CisKKwlpZiAobGFzdF9yd19lbmQgPCBlbmRfcGZuIC0gMSkKKwkJYWRkX21lbW9yeV9ob2xlKGxhc3RfcndfZW5kLCBlbmRfcGZuIC0gMSk7CisKKwkvKgorCSAqIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwIGl0c2VsZiBhcyB3ZWxsLiBXZSBkbyB0aGlzIGluIHR3bworCSAqIHN0ZXBzIChmaXJzdCBzdGVwIHdhcyBpbml0X2Jvb3RtZW0oKSkgYmVjYXVzZSB0aGlzIGNhdGNoZXMKKwkgKiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdXMgYWNjaWRlbnRhbGx5IGluaXRpYWxpemluZyB0aGUKKwkgKiBib290bWVtIGFsbG9jYXRvciB3aXRoIGFuIGludmFsaWQgUkFNIGFyZWEuCisJICovCisJcmVzZXJ2ZV9ib290bWVtKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBib290bWFwX3NpemUpOworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaWYgKElOSVRSRF9TVEFSVCkgeworCQlpZiAoSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUgPD0gbWVtb3J5X2VuZCkgeworCQkJcmVzZXJ2ZV9ib290bWVtKElOSVRSRF9TVEFSVCwgSU5JVFJEX1NJWkUpOworCQkJaW5pdHJkX3N0YXJ0ID0gSU5JVFJEX1NUQVJUOworCQkJaW5pdHJkX2VuZCA9IGluaXRyZF9zdGFydCArIElOSVRSRF9TSVpFOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIG1lbW9yeSAiCisJCQkgICAgICAgIigweCUwOGx4ID4gMHglMDhseClcbmRpc2FibGluZyBpbml0cmRcbiIsCisJCQkgICAgICAgaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkUsIG1lbW9yeV9lbmQpOworCQkJaW5pdHJkX3N0YXJ0ID0gaW5pdHJkX2VuZCA9IDA7CisJCX0KKwl9CisjZW5kaWYKK30KKworLyoKKyAqIFNldHVwIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGluaXQvbWFpbi5jIGp1c3QgYWZ0ZXIgdGhlIGJhbm5lcgorICogd2FzIHByaW50ZWQuCisgKi8KKwordm9pZCBfX2luaXQKK3NldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKK3sKKyAgICAgICAgLyoKKyAgICAgICAgICogcHJpbnQgd2hhdCBoZWFkLlMgaGFzIGZvdW5kIG91dCBhYm91dCB0aGUgbWFjaGluZQorICAgICAgICAgKi8KKyNpZm5kZWYgQ09ORklHX0FSQ0hfUzM5MFgKKwlwcmludGsoKE1BQ0hJTkVfSVNfVk0pID8KKwkgICAgICAgIldlIGFyZSBydW5uaW5nIHVuZGVyIFZNICgzMSBiaXQgbW9kZSlcbiIgOgorCSAgICAgICAiV2UgYXJlIHJ1bm5pbmcgbmF0aXZlICgzMSBiaXQgbW9kZSlcbiIpOworCXByaW50aygoTUFDSElORV9IQVNfSUVFRSkgPworCSAgICAgICAiVGhpcyBtYWNoaW5lIGhhcyBhbiBJRUVFIGZwdVxuIiA6CisJICAgICAgICJUaGlzIG1hY2hpbmUgaGFzIG5vIElFRUUgZnB1XG4iKTsKKyNlbHNlIC8qIENPTkZJR19BUkNIX1MzOTBYICovCisJcHJpbnRrKChNQUNISU5FX0lTX1ZNKSA/CisJICAgICAgICJXZSBhcmUgcnVubmluZyB1bmRlciBWTSAoNjQgYml0IG1vZGUpXG4iIDoKKwkgICAgICAgIldlIGFyZSBydW5uaW5nIG5hdGl2ZSAoNjQgYml0IG1vZGUpXG4iKTsKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLworCisgICAgICAgIFJPT1RfREVWID0gUm9vdF9SQU0wOworI2lmbmRlZiBDT05GSUdfQVJDSF9TMzkwWAorCW1lbW9yeV9lbmQgPSBtZW1vcnlfc2l6ZSAmIH4weDQwMDAwMFVMOyAgLyogYWxpZ24gbWVtb3J5IGVuZCB0byA0TUIgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogV2UgbmVlZCBzb21lIGZyZWUgdmlydHVhbCBzcGFjZSB0byBiZSBhYmxlIHRvIGRvIHZtYWxsb2MuCisgICAgICAgICAqIE9uIGEgbWFjaGluZSB3aXRoIDJHQiBtZW1vcnkgd2UgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhdAorICAgICAgICAgKiBsZWFzdCAxMjggTUIgZnJlZSBzcGFjZSBmb3Igdm1hbGxvYy4KKyAgICAgICAgICovCisgICAgICAgIGlmIChtZW1vcnlfZW5kID4gMTkyMCoxMDI0KjEwMjQpCisgICAgICAgICAgICAgICAgbWVtb3J5X2VuZCA9IDE5MjAqMTAyNCoxMDI0OworI2Vsc2UgLyogQ09ORklHX0FSQ0hfUzM5MFggKi8KKwltZW1vcnlfZW5kID0gbWVtb3J5X3NpemUgJiB+MHgyMDAwMDBVTDsgIC8qIGRldGVjdGVkIGluIGhlYWQucyAqLworI2VuZGlmIC8qIENPTkZJR19BUkNIX1MzOTBYICovCisKKwlpbml0X21tLnN0YXJ0X2NvZGUgPSBQQUdFX09GRlNFVDsKKwlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7CisJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhOworCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOworCisJcGFyc2VfY21kbGluZV9lYXJseShjbWRsaW5lX3ApOworCisJc2V0dXBfbWVtb3J5KCk7CisJc2V0dXBfcmVzb3VyY2VzKCk7CisJc2V0dXBfbG93Y29yZSgpOworCiAgICAgICAgIGNwdV9pbml0KCk7CiAgICAgICAgIF9fY3B1X2xvZ2ljYWxfbWFwWzBdID0gUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDA2MWU4MTEuLjhjYTQ4NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHN0b3BfaHpfdGltZXIodm9pZCkKIHsKLQlfX3U2NCB0aW1lcjsKKwlfX3U2NCB0aW1lciwgdG9kdmFsOwogCiAJaWYgKHN5c2N0bF9oel90aW1lciAhPSAwKQogCQlyZXR1cm47CkBAIC0yNjUsOCArMjY1LDE0IEBACiAJICogZm9yIHRoZSBuZXh0IGV2ZW50LgogCSAqLwogCXRpbWVyID0gKF9fdTY0KSAobmV4dF90aW1lcl9pbnRlcnJ1cHQoKSAtIGppZmZpZXMpICsgamlmZmllc182NDsKLQl0aW1lciA9IGppZmZpZXNfdGltZXJfY2MgKyB0aW1lciAqIENMS19USUNLU19QRVJfSklGRlk7Ci0JYXNtIHZvbGF0aWxlICgiU0NLQyAlMCIgOiA6ICJtIiAodGltZXIpKTsKKwl0b2R2YWwgPSAtMVVMTDsKKwkvKiBCZSBjYXJlZnVsIGFib3V0IG92ZXJmbG93cy4gKi8KKwlpZiAodGltZXIgPCAoLTFVTEwgLyBDTEtfVElDS1NfUEVSX0pJRkZZKSkgeworCQl0aW1lciA9IGppZmZpZXNfdGltZXJfY2MgKyB0aW1lciAqIENMS19USUNLU19QRVJfSklGRlk7CisJCWlmICh0aW1lciA+PSBqaWZmaWVzX3RpbWVyX2NjKQorCQkJdG9kdmFsID0gdGltZXI7CisJfQorCWFzbSB2b2xhdGlsZSAoIlNDS0MgJTAiIDogOiAibSIgKHRvZHZhbCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCmluZGV4IGJiNmNmMDIuLmZhMDcyNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKQEAgLTEyMiwxMiArMTIyLDE3IEBACiAJc3RydWN0IHZ0aW1lcl9xdWV1ZSAqdnRfbGlzdDsKIAogCXZ0X2xpc3QgPSAmcGVyX2NwdSh2aXJ0X2NwdV90aW1lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzZXRfdnRpbWVyKHZ0X2xpc3QtPmlkbGUpOworCisJLyogQ1BVIHRpbWVyIGludGVycnVwdCBpcyBwZW5kaW5nLCBkb24ndCByZXByb2dyYW1tIGl0ICovCisJaWYgKHZ0X2xpc3QtPmlkbGUgJiAxTEw8PDYzKQorCQlyZXR1cm47CisKKwlpZiAoIWxpc3RfZW1wdHkoJnZ0X2xpc3QtPmxpc3QpKQorCQlzZXRfdnRpbWVyKHZ0X2xpc3QtPmlkbGUpOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX2NwdV90aW1lcih2b2lkKQogewotCV9fdTY0IGRvbmU7CiAJc3RydWN0IHZ0aW1lcl9xdWV1ZSAqdnRfbGlzdDsKIAogCXZ0X2xpc3QgPSAmcGVyX2NwdSh2aXJ0X2NwdV90aW1lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKQEAgLTEzOCwyMSArMTQzLDE3IEBACiAJCWdvdG8gZmlyZTsKIAl9CiAKLQkvKiBzdG9yZSBwcm9ncmVzcyAqLwotCWFzbSB2b2xhdGlsZSAoIlNUUFQgJTAiIDogIj1tIiAoZG9uZSkpOworCS8qIHN0b3JlIHRoZSBhY3R1YWwgZXhwaXJlIHZhbHVlICovCisJYXNtIHZvbGF0aWxlICgiU1RQVCAlMCIgOiAiPW0iICh2dF9saXN0LT5pZGxlKSk7CiAKIAkvKgotCSAqIElmIGRvbmUgaXMgbmVnYXRpdmUgd2UgZG8gbm90IHN0b3AgdGhlIENQVSB0aW1lcgotCSAqIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgaW5zdGFudGx5IGFuIGludGVycnVwdCB0aGF0Ci0JICogd2lsbCBzdGFydCB0aGUgQ1BVIHRpbWVyIGFnYWluLgorCSAqIElmIHRoZSBDUFUgdGltZXIgaXMgbmVnYXRpdmUgd2UgZG9uJ3QgcmVwcm9ncmFtbQorCSAqIGl0IGJlY2F1c2Ugd2Ugd2lsbCBnZXQgaW5zdGFudGx5IGFuIGludGVycnVwdC4KIAkgKi8KLQlpZiAoZG9uZSAmIDFMTDw8NjMpCisJaWYgKHZ0X2xpc3QtPmlkbGUgJiAxTEw8PDYzKQogCQlyZXR1cm47Ci0JZWxzZQotCQl2dF9saXN0LT5vZmZzZXQgKz0gdnRfbGlzdC0+dG9fZXhwaXJlIC0gZG9uZTsKIAotCS8qIHNhdmUgdGhlIGFjdHVhbCBleHBpcmUgdmFsdWUgKi8KLQl2dF9saXN0LT5pZGxlID0gZG9uZTsKKwl2dF9saXN0LT5vZmZzZXQgKz0gdnRfbGlzdC0+dG9fZXhwaXJlIC0gdnRfbGlzdC0+aWRsZTsKIAogCS8qCiAJICogV2UgY2Fubm90IGhhbHQgdGhlIENQVSB0aW1lciwgd2UganVzdCB3cml0ZSBhIHZhbHVlIHRoYXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCBkMzBjZGI0Li5mNWE1YmMwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC0yMCw2ICsyMCwxMSBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorc3RhdGljIGNoYXIgKnNlbmRlciA9ICJWTVJNU1ZNIjsKK21vZHVsZV9wYXJhbShzZW5kZXIsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZGVyLAorCQkgIkd1ZXN0IG5hbWUgdGhhdCBtYXkgc2VuZCBTTVNHIG1lc3NhZ2VzIChkZWZhdWx0IFZNUk1TVk0pIik7CisKICNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmgiCiAKICNkZWZpbmUgQ01NX05SX1BBR0VTICgoUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDIpCkBAIC0zNjcsMTAgKzM3MiwxMiBAQAogI2lmZGVmIENPTkZJR19DTU1fSVVDVgogI2RlZmluZSBTTVNHX1BSRUZJWCAiQ01NIgogc3RhdGljIHZvaWQKLWNtbV9zbXNnX3RhcmdldChjaGFyICptc2cpCitjbW1fc21zZ190YXJnZXQoY2hhciAqZnJvbSwgY2hhciAqbXNnKQogewogCWxvbmcgcGFnZXMsIHNlY29uZHM7CiAKKwlpZiAoc3RybGVuKHNlbmRlcikgPiAwICYmIHN0cmNtcChmcm9tLCBzZW5kZXIpICE9IDApCisJCXJldHVybjsKIAlpZiAoIWNtbV9za2lwX2JsYW5rcyhtc2cgKyBzdHJsZW4oU01TR19QUkVGSVgpLCAmbXNnKSkKIAkJcmV0dXJuOwogCWlmIChzdHJuY21wKG1zZywgIlNIUklOSyIsIDYpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IDhlNzIzYmMuLjZlYzVjZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMTAxLDYgKzEwMSw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXRfYmVnaW47CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXRfZW5kOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHpob2xlc19zaXplW107CiAvKgogICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcwogICovCkBAIC0xNjMsMTAgKzE2NCwxMyBAQAogICAgICAgICBsb2NhbF9mbHVzaF90bGIoKTsKIAogCXsKLQkJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7IDAsIDAsIDB9OworCQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAorCQltZW1zZXQoem9uZXNfc2l6ZSwgMCwgc2l6ZW9mKHpvbmVzX3NpemUpKTsKIAkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfbG93X3BmbjsKLQkJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CisJCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsCisJCQkJICAgIF9fcGEoUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQsCisJCQkJICAgIHpob2xlc19zaXplKTsKIAl9CiAgICAgICAgIHJldHVybjsKIH0KQEAgLTE4NCw5ICsxODgsMTAgQEAKICAgICAgICAgICBfS0VSTl9SRUdJT05fVEFCTEU7CiAJc3RhdGljIGNvbnN0IGludCBzc21fbWFzayA9IDB4MDQwMDAwMDBMOwogCi0JdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7MCwgMCwgMH07CisJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107CiAJdW5zaWduZWQgbG9uZyBkbWFfcGZuLCBoaWdoX3BmbjsKIAorCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwogCWRtYV9wZm4gPSBNQVhfRE1BX0FERFJFU1MgPj4gUEFHRV9TSElGVDsKIAloaWdoX3BmbiA9IG1heF9sb3dfcGZuOwogCkBAIC0xOTgsOCArMjAzLDggQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIG1lbV9tYXBbXS4gICovCi0JZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7Ci0KKwlmcmVlX2FyZWFfaW5pdF9ub2RlKDAsICZjb250aWdfcGFnZV9kYXRhLCB6b25lc19zaXplLAorCQkJICAgIF9fcGEoUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQsIHpob2xlc19zaXplKTsKIAogCS8qCiAJICogbWFwIHdob2xlIHBoeXNpY2FsIG1lbW9yeSB0byB2aXJ0dWFsIG1lbW9yeSAoaWRlbnRpdHkgbWFwcGluZykgCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCmluZGV4IDFiMGRmYjQuLmIyODkxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTE5Nyw3ICsxOTgsNyBAQAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCiAJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtMjI4LDcgKzIyOSw3IEBACiAJCXN0cnVjdCBwdF9yZWdzICpkdW1teSA9IE5VTEw7CiAKIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwogCQlpZiAoKGNoaWxkLT5wdHJhY2UgJiBQVF9EVFJBQ0UpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NoNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IDgwMDI4OGMuLmZkMjAwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTI1NSw3ICsyNTYsNyBAQAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCiAJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwpAQCAtMjg1LDcgKzI4Niw3IEBACiAJCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJaWYgKChjaGlsZC0+cHRyYWNlICYgUFRfRFRSQUNFKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3N5c19zaDY0LmMgYi9hcmNoL3NoNjQva2VybmVsL3N5c19zaDY0LmMKaW5kZXggNDU0Njg0NWIuLjU4ZmY3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc3lzX3NoNjQuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3N5c19zaDY0LmMKQEAgLTI4MywxOCArMjgzLDMgQEAKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAlyZXR1cm4gZXJyPy1FRkFVTFQ6MDsKIH0KLQotLyogQ29weSBmcm9tIG1pcHMgdmVyc2lvbiAqLwotYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdGNhbGwoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwKLQkJaW50IHNobWZsZykKLXsKLQl1bnNpZ25lZCBsb25nIHJhZGRyOwotCWludCBlcnI7Ci0KLQllcnIgPSBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmFkZHIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSByYWRkcjsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zaDY0L2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDhlZDQxN2QuLjZhYWJjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3NoNjQva2VybmVsL3N5c2NhbGxzLlMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCS5sb25nIHN5c19tc2dyY3YKIAkubG9uZyBzeXNfbXNnZ2V0CiAJLmxvbmcgc3lzX21zZ2N0bAotCS5sb25nIHN5c19zaG1hdGNhbGwKKwkubG9uZyBzeXNfc2htYXQKIAkubG9uZyBzeXNfc2htZHQJCQkvKiAyNDUgKi8KIAkubG9uZyBzeXNfc2htZ2V0CiAJLmxvbmcgc3lzX3NobWN0bApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYwppbmRleCBjNGY5M2JkMi4uNDc1YzRjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTUyNiw3ICs1MjcsNyBAQAogCQlhZGRyID0gMTsKIAogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCWlmIChkYXRhID4gX05TSUcpIHsKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpIHsKIAkJCXB0X2Vycm9yX3JldHVybihyZWdzLCBFSU8pOwogCQkJZ290byBvdXRfdHNrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCA1ZjA4MGNmLi44MGE3NmUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTU1OSw3ICs1NjAsNyBAQAogCQlhZGRyID0gMTsKIAogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCWlmIChkYXRhID4gX05TSUcpIHsKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpIHsKIAkJCXB0X2Vycm9yX3JldHVybihyZWdzLCBFSU8pOwogCQkJZ290byBvdXRfdHNrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggOWEyM2RmMS4uYzUyOTIxOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCisrKyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtMjQ0LDYgKzI0NCw3IEBACiAKIGNvbmZpZyBISUdITUVNCiAJYm9vbCAiSGlnaG1lbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gITY0QklUCiAKIGNvbmZpZyBLRVJORUxfU1RBQ0tfT1JERVIKIAlpbnQgIktlcm5lbCBzdGFjayBzaXplIG9yZGVyIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnX2kzODYgYi9hcmNoL3VtL0tjb25maWdfaTM4NgppbmRleCAyMDNjMjQyLi5lNDFmMzc0IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWdfaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWdfaTM4NgpAQCAtMSw0ICsxLDggQEAKLWNvbmZpZyA2NF9CSVQKK2NvbmZpZyBVTUxfWDg2CisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgNjRCSVQKIAlib29sCiAJZGVmYXVsdCBuCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZ194ODZfNjQgYi9hcmNoL3VtL0tjb25maWdfeDg2XzY0CmluZGV4IDc2OGRjNjYuLmZkOGQ3ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZ194ODZfNjQKKysrIGIvYXJjaC91bS9LY29uZmlnX3g4Nl82NApAQCAtMSw0ICsxLDggQEAKLWNvbmZpZyA2NF9CSVQKK2NvbmZpZyBVTUxfWDg2CisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgNjRCSVQKIAlib29sCiAJZGVmYXVsdCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUtaTM4NiBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgppbmRleCA5N2IyMjNiLi5mOWUzYzBmIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLWkzODYKKysrIGIvYXJjaC91bS9NYWtlZmlsZS1pMzg2CkBAIC0xLDQgKzEsNCBAQAotU1VCQVJDSF9DT1JFIDo9IGFyY2gvdW0vc3lzLWkzODYvCitTVUJBUkNIX0NPUkUgOj0gYXJjaC91bS9zeXMtaTM4Ni8gYXJjaC9pMzg2L2NyeXB0by8KIAogVE9QX0FERFIgOj0gJChDT05GSUdfVE9QX0FERFIpCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZGVmY29uZmlnIGIvYXJjaC91bS9kZWZjb25maWcKaW5kZXggZmMzMDc1Yy4uNDA2N2MzYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kZWZjb25maWcKKysrIGIvYXJjaC91bS9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMQotIyBTdW4gTWFyIDIwIDE2OjUzOjAwIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzMtc2thczMtdjktcHJlMgorIyBTdW4gQXByIDI0IDE5OjQ2OjEwIDIwMDUKICMKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19VTUw9eQpAQCAtMTUsNyArMTUsOCBAQAogIwogQ09ORklHX01PREVfVFQ9eQogQ09ORklHX01PREVfU0tBUz15Ci0jIENPTkZJR182NF9CSVQgaXMgbm90IHNldAorQ09ORklHX1VNTF9YODY9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1RPUF9BRERSPTB4YzAwMDAwMDAKICMgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSEFTX1NDX1NJR05BTFM9eQpAQCAtNDEsNiArNDIsNyBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMTU4LDcgKzE2MCw2IEBACiAjCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTQxMiw2ICs0MTMsNSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX1BUX1BST1hZPXkKLSMgQ09ORklHX0dQUk9GIGlzIG5vdCBzZXQKICMgQ09ORklHX0dDT1YgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ0FMTF9ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvY2hhbl9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvY2hhbl9rZXJuLmMKaW5kZXggMWY3N2RlYi4uMDE1MDAzOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYwpAQCAtMjIsNyArMjIsNyBAQAogI2lmZGVmIENPTkZJR19OT0NPTkZJR19DSEFOCiBzdGF0aWMgdm9pZCAqbm90X2NvbmZpZ2dlZF9pbml0KGNoYXIgKnN0ciwgaW50IGRldmljZSwgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlwcmludGYoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiAJcmV0dXJuKE5VTEwpOwogfQpAQCAtMzAsMjcgKzMwLDI3IEBACiBzdGF0aWMgaW50IG5vdF9jb25maWdnZWRfb3BlbihpbnQgaW5wdXQsIGludCBvdXRwdXQsIGludCBwcmltYXJ5LCB2b2lkICpkYXRhLAogCQkJICAgICAgY2hhciAqKmRldl9vdXQpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybigtRU5PREVWKTsKIH0KIAogc3RhdGljIHZvaWQgbm90X2NvbmZpZ2dlZF9jbG9zZShpbnQgZmQsIHZvaWQgKmRhdGEpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogfQogCiBzdGF0aWMgaW50IG5vdF9jb25maWdnZWRfcmVhZChpbnQgZmQsIGNoYXIgKmNfb3V0LCB2b2lkICpkYXRhKQogewotCXByaW50ayhLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgorCXByaW50ZihLRVJOX0VSUiAiVXNpbmcgYSBjaGFubmVsIHR5cGUgd2hpY2ggaXMgY29uZmlndXJlZCBvdXQgb2YgIgogCSAgICAgICAiVU1MXG4iKTsKIAlyZXR1cm4oLUVJTyk7CiB9CiAKIHN0YXRpYyBpbnQgbm90X2NvbmZpZ2dlZF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbiwgdm9pZCAqZGF0YSkKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlwcmludGYoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiAJcmV0dXJuKC1FSU8pOwogfQpAQCAtNTgsNyArNTgsNyBAQAogc3RhdGljIGludCBub3RfY29uZmlnZ2VkX2NvbnNvbGVfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4sCiAJCQkJICAgICAgIHZvaWQgKmRhdGEpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCisJcHJpbnRmKEtFUk5fRVJSICJVc2luZyBhIGNoYW5uZWwgdHlwZSB3aGljaCBpcyBjb25maWd1cmVkIG91dCBvZiAiCiAJICAgICAgICJVTUxcbiIpOwogCXJldHVybigtRUlPKTsKIH0KQEAgLTY2LDE0ICs2NiwxNCBAQAogc3RhdGljIGludCBub3RfY29uZmlnZ2VkX3dpbmRvd19zaXplKGludCBmZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgKnJvd3MsCiAJCQkJICAgICB1bnNpZ25lZCBzaG9ydCAqY29scykKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlwcmludGYoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiAJcmV0dXJuKC1FTk9ERVYpOwogfQogCiBzdGF0aWMgdm9pZCBub3RfY29uZmlnZ2VkX2ZyZWUodm9pZCAqZGF0YSkKIHsKLQlwcmludGsoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKKwlwcmludGYoS0VSTl9FUlIgIlVzaW5nIGEgY2hhbm5lbCB0eXBlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgb3V0IG9mICIKIAkgICAgICAgIlVNTFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCmluZGV4IDY5MjRmMjcuLmQwZjk3MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwpAQCAtMzksMTkgKzM5LDY5IEBACiAJbGluZV9pbnRlcnJ1cHQobGluZS0+ZHJpdmVyLT5yZWFkX2lycSwgYXJnLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9yb29tKHN0cnVjdCBsaW5lICpkZXYpCisvKiBSZXR1cm5zIHRoZSBmcmVlIHNwYWNlIGluc2lkZSB0aGUgcmluZyBidWZmZXIgb2YgdGhpcyBsaW5lLgorICoKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBsaW5lLT5sb2NrICh0aGlzIGRvZXMgbm90IG1vZGlmeSBkYXRhcykuCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfcm9vbShzdHJ1Y3QgbGluZSAqbGluZSkKIHsKIAlpbnQgbjsKIAotCWlmIChkZXYtPmJ1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm4gKExJTkVfQlVGU0laRSAtIDEpOworCWlmIChsaW5lLT5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIExJTkVfQlVGU0laRSAtIDE7CiAKLQluID0gZGV2LT5oZWFkIC0gZGV2LT50YWlsOworCS8qIFRoaXMgaXMgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBidWZmZXIgaXMgd3JhcHBlZCEgKi8KKwluID0gbGluZS0+aGVhZCAtIGxpbmUtPnRhaWw7CisKIAlpZiAobiA8PSAwKQotCQluID0gTElORV9CVUZTSVpFICsgbjsKLQlyZXR1cm4gKG4gLSAxKTsKKwkJbiA9IExJTkVfQlVGU0laRSArIG47IC8qIFRoZSBvdGhlciBjYXNlICovCisJcmV0dXJuIG4gLSAxOwogfQogCitpbnQgbGluZV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGxpbmUgKmxpbmUgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJvb207CisKKwlpZiAodHR5LT5zdG9wcGVkKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lLT5sb2NrLCBmbGFncyk7CisJcm9vbSA9IHdyaXRlX3Jvb20obGluZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOworCisJLypYWFg6IFdhcm5pbmcgdG8gcmVtb3ZlICovCisJaWYgKDAgPT0gcm9vbSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlczogbm8gcm9vbSBsZWZ0IGluIGJ1ZmZlclxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyx0dHktPm5hbWUpOworCXJldHVybiByb29tOworfQorCitpbnQgbGluZV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgbGluZSAqbGluZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmUtPmxvY2ssIGZsYWdzKTsKKworCS8qd3JpdGVfcm9vbSBzdWJ0cmFjdHMgMSBmb3IgdGhlIG5lZWRlZCBOVUxMLCBzbyB3ZSByZWFkZCBpdC4qLworCXJldCA9IExJTkVfQlVGU0laRSAtICh3cml0ZV9yb29tKGxpbmUpICsgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgY29waWVzIHRoZSBjb250ZW50IG9mIGJ1ZiBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGlzIGxpbmUuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSBjb3BpZWQsIGkuZS4gdGhlIG9uZXMKKyAqIGZvciB3aGljaCB0aGVyZSB3YXMgc3BhY2U6IHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvc2VkIHRvIGV2ZXIgZmx1c2ggb3V0CisgKiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgbGluZS0+bG9jayEKKyAqLwogc3RhdGljIGludCBidWZmZXJfZGF0YShzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCWludCBlbmQsIHJvb207CkBAIC03MCw0OCArMTIwLDk1IEBACiAJbGVuID0gKGxlbiA+IHJvb20pID8gcm9vbSA6IGxlbjsKIAogCWVuZCA9IGxpbmUtPmJ1ZmZlciArIExJTkVfQlVGU0laRSAtIGxpbmUtPnRhaWw7Ci0JaWYobGVuIDwgZW5kKXsKKworCWlmIChsZW4gPCBlbmQpewogCQltZW1jcHkobGluZS0+dGFpbCwgYnVmLCBsZW4pOwogCQlsaW5lLT50YWlsICs9IGxlbjsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKKwkJLyogVGhlIGNpcmN1bGFyIGJ1ZmZlciBpcyB3cmFwcGluZyAqLwogCQltZW1jcHkobGluZS0+dGFpbCwgYnVmLCBlbmQpOwogCQlidWYgKz0gZW5kOwogCQltZW1jcHkobGluZS0+YnVmZmVyLCBidWYsIGxlbiAtIGVuZCk7CiAJCWxpbmUtPnRhaWwgPSBsaW5lLT5idWZmZXIgKyBsZW4gLSBlbmQ7CiAJfQogCi0JcmV0dXJuKGxlbik7CisJcmV0dXJuIGxlbjsKIH0KIAorLyoKKyAqIEZsdXNoZXMgdGhlIHJpbmcgYnVmZmVyIHRvIHRoZSBvdXRwdXQgY2hhbm5lbHMuIFRoYXQgaXMsIHdyaXRlX2NoYW4gaXMKKyAqIGNhbGxlZCwgcGFzc2luZyBpdCBsaW5lLT5oZWFkIGFzIGJ1ZmZlciwgYW5kIGFuIGFwcHJvcHJpYXRlIGNvdW50LgorICoKKyAqIE9uIGV4aXQsIHJldHVybnMgMSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHksCisgKiAwIHdoZW4gdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkgb24gZXhpdCwKKyAqIGFuZCAtZXJybm8gd2hlbiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGxpbmUtPmxvY2shKi8KIHN0YXRpYyBpbnQgZmx1c2hfYnVmZmVyKHN0cnVjdCBsaW5lICpsaW5lKQogewogCWludCBuLCBjb3VudDsKIAogCWlmICgobGluZS0+YnVmZmVyID09IE5VTEwpIHx8IChsaW5lLT5oZWFkID09IGxpbmUtPnRhaWwpKQotCQlyZXR1cm4oMSk7CisJCXJldHVybiAxOwogCiAJaWYgKGxpbmUtPnRhaWwgPCBsaW5lLT5oZWFkKSB7CisJCS8qIGxpbmUtPmJ1ZmZlciArIExJTkVfQlVGU0laRSBpcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIhICovCiAJCWNvdW50ID0gbGluZS0+YnVmZmVyICsgTElORV9CVUZTSVpFIC0gbGluZS0+aGVhZDsKKwogCQluID0gd3JpdGVfY2hhbigmbGluZS0+Y2hhbl9saXN0LCBsaW5lLT5oZWFkLCBjb3VudCwKIAkJCSAgICAgICBsaW5lLT5kcml2ZXItPndyaXRlX2lycSk7CiAJCWlmIChuIDwgMCkKLQkJCXJldHVybihuKTsKLQkJaWYgKG4gPT0gY291bnQpCisJCQlyZXR1cm4gbjsKKwkJaWYgKG4gPT0gY291bnQpIHsKKwkJCS8qIFdlIGhhdmUgZmx1c2hlZCBmcm9tIC0+aGVhZCB0byBidWZmZXIgZW5kLCBub3cgd2UKKwkJCSAqIG11c3QgZmx1c2ggb25seSBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gLT50YWlsLiovCiAJCQlsaW5lLT5oZWFkID0gbGluZS0+YnVmZmVyOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCWxpbmUtPmhlYWQgKz0gbjsKLQkJCXJldHVybigwKTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCiAJY291bnQgPSBsaW5lLT50YWlsIC0gbGluZS0+aGVhZDsKIAluID0gd3JpdGVfY2hhbigmbGluZS0+Y2hhbl9saXN0LCBsaW5lLT5oZWFkLCBjb3VudCwgCiAJCSAgICAgICBsaW5lLT5kcml2ZXItPndyaXRlX2lycSk7Ci0JaWYobiA8IDApIHJldHVybihuKTsKKworCWlmKG4gPCAwKQorCQlyZXR1cm4gbjsKIAogCWxpbmUtPmhlYWQgKz0gbjsKLQlyZXR1cm4obGluZS0+aGVhZCA9PSBsaW5lLT50YWlsKTsKKwlyZXR1cm4gbGluZS0+aGVhZCA9PSBsaW5lLT50YWlsOworfQorCit2b2lkIGxpbmVfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGxpbmUgKmxpbmUgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCS8qWFhYOiBjb3BpZWQgZnJvbSBsaW5lX3dyaXRlLCB2ZXJpZnkgaWYgaXQgaXMgY29ycmVjdCEqLworCWlmKHR0eS0+c3RvcHBlZCkKKwkJcmV0dXJuOworCQkvL3JldHVybiAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmUtPmxvY2ssIGZsYWdzKTsKKwllcnIgPSBmbHVzaF9idWZmZXIobGluZSk7CisJLyppZiAoZXJyID09IDEpCisJCWVyciA9IDA7Ki8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lLT5sb2NrLCBmbGFncyk7CisJLy9yZXR1cm4gZXJyOworfQorCisvKiBXZSBtYXAgYm90aCAtPmZsdXNoX2NoYXJzIGFuZCAtPnB1dF9jaGFyICh3aGljaCBnbyBpbiBwYWlyKSBvbnRvIC0+Zmx1c2hfYnVmZmVyCisgKiBhbmQgLT53cml0ZS4gSG9wZSBpdCdzIG5vdCB0aGF0IGJhZC4qLwordm9pZCBsaW5lX2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJbGluZV9mbHVzaF9idWZmZXIodHR5KTsKK30KKwordm9pZCBsaW5lX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpCit7CisJbGluZV93cml0ZSh0dHksICZjaCwgc2l6ZW9mKGNoKSk7CiB9CiAKIGludCBsaW5lX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKQEAgLTEyMCwzOCArMjE3LDMxIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbiwgZXJyLCByZXQgPSAwOwogCi0JaWYodHR5LT5zdG9wcGVkKSByZXR1cm4gMDsKKwlpZih0dHktPnN0b3BwZWQpCisJCXJldHVybiAwOwogCi0JZG93bigmbGluZS0+c2VtKTsKLQlpZihsaW5lLT5oZWFkICE9IGxpbmUtPnRhaWwpewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmUtPmxvY2ssIGZsYWdzKTsKKwlpZiAobGluZS0+aGVhZCAhPSBsaW5lLT50YWlsKSB7CiAJCXJldCA9IGJ1ZmZlcl9kYXRhKGxpbmUsIGJ1ZiwgbGVuKTsKIAkJZXJyID0gZmx1c2hfYnVmZmVyKGxpbmUpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCWlmKGVyciA8PSAwICYmIChlcnIgIT0gLUVBR0FJTiB8fCAhcmV0KSkKKwkJaWYgKGVyciA8PSAwICYmIChlcnIgIT0gLUVBR0FJTiB8fCAhcmV0KSkKIAkJCXJldCA9IGVycjsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbiA9IHdyaXRlX2NoYW4oJmxpbmUtPmNoYW5fbGlzdCwgYnVmLCBsZW4sIAogCQkJICAgICAgIGxpbmUtPmRyaXZlci0+d3JpdGVfaXJxKTsKLQkJaWYobiA8IDApeworCQlpZiAobiA8IDApIHsKIAkJCXJldCA9IG47CiAJCQlnb3RvIG91dF91cDsKIAkJfQogCiAJCWxlbiAtPSBuOwogCQlyZXQgKz0gbjsKLQkJaWYobGVuID4gMCkKKwkJaWYgKGxlbiA+IDApCiAJCQlyZXQgKz0gYnVmZmVyX2RhdGEobGluZSwgYnVmICsgbiwgbGVuKTsKIAl9Ci0gb3V0X3VwOgotCXVwKCZsaW5lLT5zZW0pOwotCXJldHVybihyZXQpOwotfQotCi12b2lkIGxpbmVfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKLXsKLQlsaW5lX3dyaXRlKHR0eSwgJmNoLCBzaXplb2YoY2gpKTsKK291dF91cDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBsaW5lX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKQpAQCAtMTU5LDExICsyNDksNiBAQAogCS8qIG5vdGhpbmcgKi8KIH0KIAotaW50IGxpbmVfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgewogCWludCAgY21kOwogCWNoYXIgKmxldmVsOwpAQCAtMjUwLDcgKzMzNSw3IEBACiAJCXJldCA9IC1FTk9JT0NUTENNRDsKIAkJYnJlYWs7CiAJfQotCXJldHVybihyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBsaW5lX3dyaXRlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhLApAQCAtMjYwLDE4ICszNDUsMjMgQEAKIAlzdHJ1Y3QgbGluZSAqbGluZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IGVycjsKIAorCS8qIEludGVycnVwdHMgYXJlIGVuYWJsZWQgaGVyZSBiZWNhdXNlIHdlIHJlZ2lzdGVyZWQgdGhlIGludGVycnVwdCB3aXRoCisJICogU0FfSU5URVJSVVBUIChzZWUgbGluZV9zZXR1cF9pcnEpLiovCisKKwlzcGluX2xvY2tfaXJxKCZsaW5lLT5sb2NrKTsKIAllcnIgPSBmbHVzaF9idWZmZXIobGluZSk7Ci0JaWYoZXJyID09IDApCi0JCXJldHVybihJUlFfTk9ORSk7Ci0JZWxzZSBpZihlcnIgPCAwKXsKKwlpZiAoZXJyID09IDApIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0gZWxzZSBpZihlcnIgPCAwKSB7CiAJCWxpbmUtPmhlYWQgPSBsaW5lLT5idWZmZXI7CiAJCWxpbmUtPnRhaWwgPSBsaW5lLT5idWZmZXI7CiAJfQorCXNwaW5fdW5sb2NrX2lycSgmbGluZS0+bG9jayk7CiAKIAlpZih0dHkgPT0gTlVMTCkKLQkJcmV0dXJuKElSUV9OT05FKTsKKwkJcmV0dXJuIElSUV9OT05FOwogCi0JaWYodGVzdF9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnR0eS0+ZmxhZ3MpICYmCisJaWYgKHRlc3RfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKSAmJgogCSAgICh0dHktPmxkaXNjLndyaXRlX3dha2V1cCAhPSBOVUxMKSkKIAkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSh0dHkpOwogCQpAQCAtMjgxLDkgKzM3MSw5IEBACiAJICogd3JpdGVzLgogCSAqLwogCi0JaWYod2FpdHF1ZXVlX2FjdGl2ZSgmdHR5LT53cml0ZV93YWl0KSkKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdHR5LT53cml0ZV93YWl0KSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCXJldHVybihJUlFfSEFORExFRCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBpbnQgbGluZV9zZXR1cF9pcnEoaW50IGZkLCBpbnQgaW5wdXQsIGludCBvdXRwdXQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0yOTIsMTUgKzM4MiwxOCBAQAogCXN0cnVjdCBsaW5lX2RyaXZlciAqZHJpdmVyID0gbGluZS0+ZHJpdmVyOwogCWludCBlcnIgPSAwLCBmbGFncyA9IFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTTsKIAotCWlmKGlucHV0KSBlcnIgPSB1bV9yZXF1ZXN0X2lycShkcml2ZXItPnJlYWRfaXJxLCBmZCwgSVJRX1JFQUQsIAorCWlmIChpbnB1dCkKKwkJZXJyID0gdW1fcmVxdWVzdF9pcnEoZHJpdmVyLT5yZWFkX2lycSwgZmQsIElSUV9SRUFELAogCQkJCSAgICAgICBsaW5lX2ludGVycnVwdCwgZmxhZ3MsIAogCQkJCSAgICAgICBkcml2ZXItPnJlYWRfaXJxX25hbWUsIHR0eSk7Ci0JaWYoZXJyKSByZXR1cm4oZXJyKTsKLQlpZihvdXRwdXQpIGVyciA9IHVtX3JlcXVlc3RfaXJxKGRyaXZlci0+d3JpdGVfaXJxLCBmZCwgSVJRX1dSSVRFLCAKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChvdXRwdXQpCisJCWVyciA9IHVtX3JlcXVlc3RfaXJxKGRyaXZlci0+d3JpdGVfaXJxLCBmZCwgSVJRX1dSSVRFLAogCQkJCQlsaW5lX3dyaXRlX2ludGVycnVwdCwgZmxhZ3MsIAogCQkJCQlkcml2ZXItPndyaXRlX2lycV9uYW1lLCB0dHkpOwogCWxpbmUtPmhhdmVfaXJxID0gMTsKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIGxpbmVfZGlzYWJsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgY3VycmVudF9pcnEpCkBAIC0zMzYsNyArNDI5LDkgQEAKIAlsaW5lID0gJmxpbmVzW3R0eS0+aW5kZXhdOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBsaW5lOwogCi0JZG93bigmbGluZS0+c2VtKTsKKwkvKiBUaGUgSVJRIHdoaWNoIHRha2VzIHRoaXMgbG9jayBpcyBub3QgeWV0IGVuYWJsZWQgYW5kIHdvbid0IGJlIHJ1bgorCSAqIGJlZm9yZSB0aGUgZW5kLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHVzZSBzcGluX2xvY2tfaXJxLiovCisJc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKIAlpZiAodHR5LT5jb3VudCA9PSAxKSB7CiAJCWlmICghbGluZS0+dmFsaWQpIHsKIAkJCWVyciA9IC1FTk9ERVY7CkBAIC0zNDksNiArNDQ0LDcgQEAKIAkJCWVyciA9IG9wZW5fY2hhbigmbGluZS0+Y2hhbl9saXN0KTsKIAkJCWlmKGVycikgZ290byBvdXQ7CiAJCX0KKwkJLyogSGVyZSB0aGUgaW50ZXJydXB0IGlzIHJlZ2lzdGVyZWQuKi8KIAkJZW5hYmxlX2NoYW4oJmxpbmUtPmNoYW5fbGlzdCwgdHR5KTsKIAkJSU5JVF9XT1JLKCZsaW5lLT50YXNrLCBsaW5lX3RpbWVyX2NiLCB0dHkpOwogCX0KQEAgLTM2MiwyMSArNDU4LDI3IEBACiAJbGluZS0+Y291bnQrKzsKIAogb3V0OgotCXVwKCZsaW5lLT5zZW0pOwotCXJldHVybihlcnIpOworCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIGxpbmVfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQogewogCXN0cnVjdCBsaW5lICpsaW5lID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotCWRvd24oJmxpbmUtPnNlbSk7CisJLyogWFhYOiBJIGFzc3VtZSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0LCBub3Qgd2l0aCBpbnRlcnJ1cHQKKwkgKiBkaXNhYmxlZCEqLworCXNwaW5fbG9ja19pcnEoJmxpbmUtPmxvY2spOworCisJLyogV2UgaWdub3JlIHRoZSBlcnJvciBhbnl3YXkhICovCisJZmx1c2hfYnVmZmVyKGxpbmUpOworCiAJbGluZS0+Y291bnQtLTsKIAlpZiAodHR5LT5jb3VudCA9PSAxKSB7CiAJCWxpbmVfZGlzYWJsZSh0dHksIC0xKTsKIAkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAJfQotCXVwKCZsaW5lLT5zZW0pOworCXNwaW5fdW5sb2NrX2lycSgmbGluZS0+bG9jayk7CiB9CiAKIHZvaWQgY2xvc2VfbGluZXMoc3RydWN0IGxpbmUgKmxpbmVzLCBpbnQgbmxpbmVzKQpAQCAtMzg3LDMxICs0ODksNDEgQEAKIAkJY2xvc2VfY2hhbigmbGluZXNbaV0uY2hhbl9saXN0KTsKIH0KIAotaW50IGxpbmVfc2V0dXAoc3RydWN0IGxpbmUgKmxpbmVzLCBpbnQgbnVtLCBjaGFyICppbml0LCBpbnQgYWxsX2FsbG93ZWQpCisvKiBDb21tb24gc2V0dXAgY29kZSBmb3IgYm90aCBzdGFydHVwIGNvbW1hbmQgbGluZSBhbmQgbWNvbnNvbGUgaW5pdGlhbGl6YXRpb24uCisgKiBAbGluZXMgY29udGFpbnMgdGhlIHRoZSBhcnJheSAob2Ygc2l6ZSBAbnVtKSB0byBtb2RpZnk7CisgKiBAaW5pdCBpcyB0aGUgc2V0dXAgc3RyaW5nOworICogQGFsbF9hbGxvd2VkIGlzIGEgYm9vbGVhbiBzYXlpbmcgaWYgd2UgY2FuIHNldHVwIHRoZSB3aG9sZSBAbGluZXMKKyAqIGF0IG9uY2UuIEZvciBpbnN0YW5jZSwgaXQgd2lsbCBiZSB1c3VhbGx5IHRydWUgZm9yIHN0YXJ0dXAgaW5pdC4gKHdoZXJlIHdlCisgKiBjYW4gdXNlIGNvbj14dGVybSkgYW5kIGZhbHNlIGZvciBtY29uc29sZS4qLworCitpbnQgbGluZV9zZXR1cChzdHJ1Y3QgbGluZSAqbGluZXMsIHVuc2lnbmVkIGludCBudW0sIGNoYXIgKmluaXQsIGludCBhbGxfYWxsb3dlZCkKIHsKIAlpbnQgaSwgbjsKIAljaGFyICplbmQ7CiAKLQlpZigqaW5pdCA9PSAnPScpIG4gPSAtMTsKLQllbHNlIHsKKwlpZigqaW5pdCA9PSAnPScpIHsKKwkJLyogV2Ugc2FpZCBjb249L3NzbD0gaW5zdGVhZCBvZiBjb24jPSwgc28gd2UgYXJlIGNvbmZpZ3VyaW5nIGFsbAorCQkgKiBjb25zb2xlcyBhdCBvbmNlLiovCisJCW4gPSAtMTsKKwl9IGVsc2UgewogCQluID0gc2ltcGxlX3N0cnRvdWwoaW5pdCwgJmVuZCwgMCk7CiAJCWlmKCplbmQgIT0gJz0nKXsKIAkJCXByaW50ayhLRVJOX0VSUiAibGluZV9zZXR1cCBmYWlsZWQgdG8gcGFyc2UgXCIlc1wiXG4iLCAKIAkJCSAgICAgICBpbml0KTsKLQkJCXJldHVybigwKTsKKwkJCXJldHVybiAwOwogCQl9CiAJCWluaXQgPSBlbmQ7CiAJfQogCWluaXQrKzsKLQlpZigobiA+PSAwKSAmJiAobiA+PSBudW0pKXsKKworCWlmIChuID49IChzaWduZWQgaW50KSBudW0pIHsKIAkJcHJpbnRrKCJsaW5lX3NldHVwIC0gJWQgb3V0IG9mIHJhbmdlICgoMCAuLi4gJWQpIGFsbG93ZWQpXG4iLAogCQkgICAgICAgbiwgbnVtIC0gMSk7Ci0JCXJldHVybigwKTsKLQl9Ci0JZWxzZSBpZiAobiA+PSAwKXsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChuID49IDApewogCQlpZiAobGluZXNbbl0uY291bnQgPiAwKSB7CiAJCQlwcmludGsoImxpbmVfc2V0dXAgLSBkZXZpY2UgJWQgaXMgb3BlblxuIiwgbik7Ci0JCQlyZXR1cm4oMCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAobGluZXNbbl0uaW5pdF9wcmkgPD0gSU5JVF9PTkUpewogCQkJbGluZXNbbl0uaW5pdF9wcmkgPSBJTklUX09ORTsKQEAgLTQyMiwxMyArNTM0LDExIEBACiAJCQkJbGluZXNbbl0udmFsaWQgPSAxOwogCQkJfQkKIAkJfQotCX0KLQllbHNlIGlmKCFhbGxfYWxsb3dlZCl7CisJfSBlbHNlIGlmKCFhbGxfYWxsb3dlZCl7CiAJCXByaW50aygibGluZV9zZXR1cCAtIGNhbid0IGNvbmZpZ3VyZSBhbGwgZGV2aWNlcyBmcm9tICIKIAkJICAgICAgICJtY29uc29sZVxuIik7Ci0JCXJldHVybigwKTsKLQl9Ci0JZWxzZSB7CisJCXJldHVybiAwOworCX0gZWxzZSB7CiAJCWZvcihpID0gMDsgaSA8IG51bTsgaSsrKXsKIAkJCWlmKGxpbmVzW2ldLmluaXRfcHJpIDw9IElOSVRfQUxMKXsKIAkJCQlsaW5lc1tpXS5pbml0X3ByaSA9IElOSVRfQUxMOwpAQCAtNDQwLDIxICs1NTAsMjEgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4oMSk7CisJcmV0dXJuIDE7CiB9CiAKLWludCBsaW5lX2NvbmZpZyhzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKnN0cikKK2ludCBsaW5lX2NvbmZpZyhzdHJ1Y3QgbGluZSAqbGluZXMsIHVuc2lnbmVkIGludCBudW0sIGNoYXIgKnN0cikKIHsKIAljaGFyICpuZXcgPSB1bWxfc3RyZHVwKHN0cik7CiAKIAlpZihuZXcgPT0gTlVMTCl7CiAJCXByaW50aygibGluZV9jb25maWcgLSB1bWxfc3RyZHVwIGZhaWxlZFxuIik7Ci0JCXJldHVybigtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJldHVybighbGluZV9zZXR1cChsaW5lcywgbnVtLCBuZXcsIDApKTsKKwlyZXR1cm4gIWxpbmVfc2V0dXAobGluZXMsIG51bSwgbmV3LCAwKTsKIH0KIAotaW50IGxpbmVfZ2V0X2NvbmZpZyhjaGFyICpuYW1lLCBzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKnN0ciwgCitpbnQgbGluZV9nZXRfY29uZmlnKGNoYXIgKm5hbWUsIHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IG51bSwgY2hhciAqc3RyLAogCQkgICAgaW50IHNpemUsIGNoYXIgKiplcnJvcl9vdXQpCiB7CiAJc3RydWN0IGxpbmUgKmxpbmU7CkBAIC00NjQsNDcgKzU3NCwzMyBAQAogCWRldiA9IHNpbXBsZV9zdHJ0b3VsKG5hbWUsICZlbmQsIDApOwogCWlmKCgqZW5kICE9ICdcMCcpIHx8IChlbmQgPT0gbmFtZSkpewogCQkqZXJyb3Jfb3V0ID0gImxpbmVfZ2V0X2NvbmZpZyBmYWlsZWQgdG8gcGFyc2UgZGV2aWNlIG51bWJlciI7Ci0JCXJldHVybigwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYoKGRldiA8IDApIHx8IChkZXYgPj0gbnVtKSl7Ci0JCSplcnJvcl9vdXQgPSAiZGV2aWNlIG51bWJlciBvZiBvZiByYW5nZSI7Ci0JCXJldHVybigwKTsKKwkJKmVycm9yX291dCA9ICJkZXZpY2UgbnVtYmVyIG91dCBvZiByYW5nZSI7CisJCXJldHVybiAwOwogCX0KIAogCWxpbmUgPSAmbGluZXNbZGV2XTsKIAotCWRvd24oJmxpbmUtPnNlbSk7CisJc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKIAlpZighbGluZS0+dmFsaWQpCiAJCUNPTkZJR19DSFVOSyhzdHIsIHNpemUsIG4sICJub25lIiwgMSk7CiAJZWxzZSBpZihsaW5lLT5jb3VudCA9PSAwKQogCQlDT05GSUdfQ0hVTksoc3RyLCBzaXplLCBuLCBsaW5lLT5pbml0X3N0ciwgMSk7CiAJZWxzZSBuID0gY2hhbl9jb25maWdfc3RyaW5nKCZsaW5lLT5jaGFuX2xpc3QsIHN0ciwgc2l6ZSwgZXJyb3Jfb3V0KTsKLQl1cCgmbGluZS0+c2VtKTsKKwlzcGluX3VubG9jaygmbGluZS0+bG9jayk7CiAKLQlyZXR1cm4obik7CisJcmV0dXJuIG47CiB9CiAKLWludCBsaW5lX3JlbW92ZShzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKnN0cikKK2ludCBsaW5lX3JlbW92ZShzdHJ1Y3QgbGluZSAqbGluZXMsIHVuc2lnbmVkIGludCBudW0sIGNoYXIgKnN0cikKIHsKIAljaGFyIGNvbmZpZ1tzaXplb2YoImNvbnh4eHg9bm9uZVwwIildOwogCiAJc3ByaW50Zihjb25maWcsICIlcz1ub25lIiwgc3RyKTsKLQlyZXR1cm4oIWxpbmVfc2V0dXAobGluZXMsIG51bSwgY29uZmlnLCAwKSk7Ci19Ci0KLWludCBsaW5lX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdHJ1Y3QgbGluZSAqZGV2ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgcm9vbTsKLQotCWlmICh0dHktPnN0b3BwZWQpCi0JCXJldHVybiAwOwotCXJvb20gPSB3cml0ZV9yb29tKGRldik7Ci0JaWYgKDAgPT0gcm9vbSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlczogbm8gcm9vbSBsZWZ0IGluIGJ1ZmZlclxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXyx0dHktPm5hbWUpOwotCXJldHVybiByb29tOworCXJldHVybiAhbGluZV9zZXR1cChsaW5lcywgbnVtLCBjb25maWcsIDApOwogfQogCiBzdHJ1Y3QgdHR5X2RyaXZlciAqbGluZV9yZWdpc3Rlcl9kZXZmcyhzdHJ1Y3QgbGluZXMgKnNldCwKQEAgLTU1Myw3ICs2NDksNyBAQAogCWZvcihpID0gMDsgaSA8IG5saW5lczsgaSsrKXsKIAkJbGluZSA9ICZsaW5lc1tpXTsKIAkJSU5JVF9MSVNUX0hFQUQoJmxpbmUtPmNoYW5fbGlzdCk7Ci0JCXNlbWFfaW5pdCgmbGluZS0+c2VtLCAxKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmxpbmUtPmxvY2spOwogCQlpZihsaW5lLT5pbml0X3N0ciAhPSBOVUxMKXsKIAkJCWxpbmUtPmluaXRfc3RyID0gdW1sX3N0cmR1cChsaW5lLT5pbml0X3N0cik7CiAJCQlpZihsaW5lLT5pbml0X3N0ciA9PSBOVUxMKQpAQCAtNTg3LDcgKzY4Myw3IEBACiAJCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCAtZXJyKTsKIAkJCQlwcmludGsoImZkICVkIGlzIGxvc2luZyBTSUdXSU5DSCBzdXBwb3J0XG4iLAogCQkJCSAgICAgICB3aW5jaC0+dHR5X2ZkKTsKLQkJCQlyZXR1cm4oSVJRX0hBTkRMRUQpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02MDMsNyArNjk5LDcgQEAKICBvdXQ6CiAJaWYod2luY2gtPmZkICE9IC0xKQogCQlyZWFjdGl2YXRlX2ZkKHdpbmNoLT5mZCwgV0lOQ0hfSVJRKTsKLQlyZXR1cm4oSVJRX0hBTkRMRUQpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogREVDTEFSRV9NVVRFWCh3aW5jaF9oYW5kbGVyX3NlbSk7CkBAIC02MjUsNyArNzIxLDcgQEAKIAkJCQkgICAucGlkICAJPSBwaWQsCiAJCQkJICAgLnR0eSAJPSB0dHkgfSk7CiAJbGlzdF9hZGQoJndpbmNoLT5saXN0LCAmd2luY2hfaGFuZGxlcnMpOwotCWlmKHVtX3JlcXVlc3RfaXJxKFdJTkNIX0lSUSwgZmQsIElSUV9SRUFELCB3aW5jaF9pbnRlcnJ1cHQsIAorCWlmKHVtX3JlcXVlc3RfaXJxKFdJTkNIX0lSUSwgZmQsIElSUV9SRUFELCB3aW5jaF9pbnRlcnJ1cHQsCiAJCQkgIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgCiAJCQkgICJ3aW5jaCIsIHdpbmNoKSA8IDApCiAJCXByaW50aygicmVnaXN0ZXJfd2luY2hfaXJxIC0gZmFpbGVkIHRvIHJlZ2lzdGVyIElSUVxuIik7CkBAIC02NTYsMjYgKzc1MiwxNiBAQAogCWludCBsZW47CiAKIAl1bWlkID0gZ2V0X3VtaWQoMSk7Ci0JaWYodW1pZCA9PSBOVUxMKSByZXR1cm4oYmFzZSk7CisJaWYodW1pZCA9PSBOVUxMKQorCQlyZXR1cm4gYmFzZTsKIAkKIAlsZW4gPSBzdHJsZW4oYmFzZSkgKyBzdHJsZW4oIiAoKSIpICsgc3RybGVuKHVtaWQpICsgMTsKIAl0aXRsZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZih0aXRsZSA9PSBOVUxMKXsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciB4dGVybSB0aXRsZVxuIik7Ci0JCXJldHVybihiYXNlKTsKKwkJcmV0dXJuIGJhc2U7CiAJfQogCiAJc25wcmludGYodGl0bGUsIGxlbiwgIiVzICglcykiLCBiYXNlLCB1bWlkKTsKLQlyZXR1cm4odGl0bGUpOworCXJldHVybiB0aXRsZTsKIH0KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zc2wuYyBiL2FyY2gvdW0vZHJpdmVycy9zc2wuYwppbmRleCBjNTgzOWMzLi5hMmJhYzQyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc3NsLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NzbC5jCkBAIC0xMDcsMTEgKzEwNyw2IEBACiB9CiAKICNpZiAwCi1zdGF0aWMgaW50IHNzbF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm4oMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNzbF9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlyZXR1cm47CkBAIC0xNDksMTEgKzE0NCwxMSBAQAogCS5wdXRfY2hhciAJCT0gbGluZV9wdXRfY2hhciwKIAkud3JpdGVfcm9vbQkJPSBsaW5lX3dyaXRlX3Jvb20sCiAJLmNoYXJzX2luX2J1ZmZlciAJPSBsaW5lX2NoYXJzX2luX2J1ZmZlciwKKwkuZmx1c2hfYnVmZmVyIAkJPSBsaW5lX2ZsdXNoX2J1ZmZlciwKKwkuZmx1c2hfY2hhcnMgCQk9IGxpbmVfZmx1c2hfY2hhcnMsCiAJLnNldF90ZXJtaW9zIAkJPSBsaW5lX3NldF90ZXJtaW9zLAogCS5pb2N0bCAJIAkJPSBsaW5lX2lvY3RsLAogI2lmIDAKLQkuZmx1c2hfY2hhcnMgCQk9IHNzbF9mbHVzaF9jaGFycywKLQkuZmx1c2hfYnVmZmVyIAkJPSBzc2xfZmx1c2hfYnVmZmVyLAogCS50aHJvdHRsZSAJCT0gc3NsX3Rocm90dGxlLAogCS51bnRocm90dGxlIAkJPSBzc2xfdW50aHJvdHRsZSwKIAkuc3RvcCAJIAkJPSBzc2xfc3RvcCwKQEAgLTE3MSwxMCArMTY2LDExIEBACiAJCQkgICAgICB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IGxpbmUgKmxpbmUgPSAmc2VyaWFsX2xpbmVzW2MtPmluZGV4XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmbGluZS0+c2VtKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogCWNvbnNvbGVfd3JpdGVfY2hhbigmbGluZS0+Y2hhbl9saXN0LCBzdHJpbmcsIGxlbik7Ci0JdXAoJmxpbmUtPnNlbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnNzbF9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKQEAgLTIzOCwxNCArMjM0LDMgQEAKIAogX19zZXR1cCgic3NsIiwgc3NsX2NoYW5fc2V0dXApOwogX19jaGFubmVsX2hlbHAoc3NsX2NoYW5fc2V0dXAsICJzc2wiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmMgYi9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5jCmluZGV4IGU2MDRkN2MuLjM2MWQwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuYwpAQCAtMTE2LDggKzExNiwxMSBAQAogCS5vcGVuIAkgCQk9IGNvbl9vcGVuLAogCS5jbG9zZSAJIAkJPSBsaW5lX2Nsb3NlLAogCS53cml0ZSAJIAkJPSBsaW5lX3dyaXRlLAorCS5wdXRfY2hhciAJCT0gbGluZV9wdXRfY2hhciwKICAJLndyaXRlX3Jvb20JCT0gbGluZV93cml0ZV9yb29tLAogCS5jaGFyc19pbl9idWZmZXIgCT0gbGluZV9jaGFyc19pbl9idWZmZXIsCisJLmZsdXNoX2J1ZmZlciAJCT0gbGluZV9mbHVzaF9idWZmZXIsCisJLmZsdXNoX2NoYXJzIAkJPSBsaW5lX2ZsdXNoX2NoYXJzLAogCS5zZXRfdGVybWlvcyAJCT0gbGluZV9zZXRfdGVybWlvcywKIAkuaW9jdGwgCSAJCT0gbGluZV9pb2N0bCwKIH07CkBAIC0xMjYsMTAgKzEyOSwxMSBAQAogCQkJICB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IGxpbmUgKmxpbmUgPSAmdnRzW2NvbnNvbGUtPmluZGV4XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmbGluZS0+c2VtKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogCWNvbnNvbGVfd3JpdGVfY2hhbigmbGluZS0+Y2hhbl9saXN0LCBzdHJpbmcsIGxlbik7Ci0JdXAoJmxpbmUtPnNlbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnVtbF9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKQEAgLTE5MiwxNCArMTk2LDMgQEAKIH0KIF9fc2V0dXAoImNvbiIsIGNvbnNvbGVfY2hhbl9zZXR1cCk7CiBfX2NoYW5uZWxfaGVscChjb25zb2xlX2NoYW5fc2V0dXAsICJjb24iKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggNGQ4YjE2NS4uOWE1NmZmOSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogc3RhdGljIHN0cnVjdCBvcGVuZmxhZ3MgZ2xvYmFsX29wZW5mbGFncyA9IE9QRU5fRkxBR1M7CiAKIHN0cnVjdCBjb3cgeworCS8qIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmlsZSwgYWN0dWFsbHkgKi8KIAljaGFyICpmaWxlOwogCWludCBmZDsKIAl1bnNpZ25lZCBsb25nICpiaXRtYXA7CkBAIC05MjcsMTAgKzkyOCwxNCBAQAogCQl9CiAJfQogCWRldi0+Y291bnQrKzsKLQlpZigoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmICFkZXYtPm9wZW5mbGFncy53KXsKKwlzZXRfZGlza19ybyhkaXNrLCAhZGV2LT5vcGVuZmxhZ3Mudyk7CisKKwkvKiBUaGlzIHNob3VsZCBubyBtb3JlIGJlIG5lZWRlZC4gQW5kIGl0IGRpZG4ndCB3b3JrIGFueXdheSB0byBleGNsdWRlCisJICogcmVhZC13cml0ZSByZW1vdW50aW5nIG9mIGZpbGVzeXN0ZW1zLiovCisJLyppZigoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmICFkZXYtPm9wZW5mbGFncy53KXsKIAkgICAgICAgIGlmKC0tZGV2LT5jb3VudCA9PSAwKSB1YmRfY2xvc2UoZGV2KTsKIAkgICAgICAgIGVyciA9IC1FUk9GUzsKLQl9CisJfSovCiAgb3V0OgogCXJldHVybihlcnIpOwogfQpAQCAtMTA5Niw2ICsxMTAxLDcgQEAKIAogCWlmKHJlcS0+cnFfc3RhdHVzID09IFJRX0lOQUNUSVZFKSByZXR1cm4oMSk7CiAKKwkvKiBUaGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlIG5vdyAqLwogCWlmKChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSAmJiAhZGV2LT5vcGVuZmxhZ3Mudyl7CiAJCXByaW50aygiV3JpdGUgYXR0ZW1wdGVkIG9uIHJlYWRvbmx5IHViZCBkZXZpY2UgJXNcbiIsIAogCQkgICAgICAgZGlzay0+ZGlza19uYW1lKTsKQEAgLTEyNDMsNiArMTI0OSw3IEBACiAKIAkJLyogSXQncyBhIHdyaXRlIHRvIGEgdWJkIGRldmljZSAqLwogCisJCS8qIFRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUgbm93ICovCiAJCWlmKCFkZXYtPm9wZW5mbGFncy53KXsKIAkJCS8qIEl0J3MgYSB3cml0ZSBhY2Nlc3Mgb24gYSByZWFkLW9ubHkgZGV2aWNlIC0gcHJvYmFibHkKIAkJCSAqIHNob3VsZG4ndCBoYXBwZW4uICBJZiB0aGUga2VybmVsIGlzIHRyeWluZyB0byBjaGFuZ2UKQEAgLTE2MDUsOCArMTYxMiw3IEBACiAJCQkJfQogCQkJfSB3aGlsZSgobiA8IGxlbikgJiYgKG4gIT0gMCkpOwogCQkJaWYgKG4gPCBsZW4pIG1lbXNldCgmYnVmW25dLCAwLCBsZW4gLSBuKTsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCW4gPSBvc193cml0ZV9maWxlKHJlcS0+ZmRzW2JpdF0sIGJ1ZiwgbGVuKTsKIAkJCWlmKG4gIT0gbGVuKXsKIAkJCQlwcmludGsoImRvX2lvIC0gd3JpdGUgZmFpbGVkIGVyciA9ICVkICIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9saW5lLmggYi9hcmNoL3VtL2luY2x1ZGUvbGluZS5oCmluZGV4IDZkODFlY2MuLjRjNWU5MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9saW5lLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2xpbmUuaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgImxpbnV4L3dvcmtxdWV1ZS5oIgogI2luY2x1ZGUgImxpbnV4L3R0eS5oIgogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgotI2luY2x1ZGUgImFzbS9zZW1hcGhvcmUuaCIKKyNpbmNsdWRlICJsaW51eC9zcGlubG9jay5oIgogI2luY2x1ZGUgImNoYW5fdXNlci5oIgogI2luY2x1ZGUgIm1jb25zb2xlX2tlcm4uaCIKIApAQCAtMzcsMTAgKzM3LDE4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBjaGFuX2xpc3Q7CiAJaW50IHZhbGlkOwogCWludCBjb3VudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwkvKlRoaXMgbG9jayBpcyBhY3R1YWxseSwgbW9zdGx5LCBsb2NhbCB0byovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogWWVzLCB0aGlzIGlzIGEgcmVhbCBjaXJjdWxhciBidWZmZXIuCisJICogWFhYOiBBbmQgdGhpcyBzaG91bGQgYmVjb21lIGEgc3RydWN0IGtmaWZvIQorCSAqCisJICogYnVmZmVyIHBvaW50cyB0byBhIGJ1ZmZlciBhbGxvY2F0ZWQgb24gZGVtYW5kLCBvZiBsZW5ndGgKKwkgKiBMSU5FX0JVRlNJWkUsIGhlYWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSByaW5nLCB0YWlsIHRvIHRoZSBlbmQuKi8KIAljaGFyICpidWZmZXI7CiAJY2hhciAqaGVhZDsKIAljaGFyICp0YWlsOworCiAJaW50IHNpZ2lvOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOwogCXN0cnVjdCBsaW5lX2RyaXZlciAqZHJpdmVyOwpAQCAtNTIsNyArNjAsNiBAQAogCSAgaW5pdF9wcmkgOglJTklUX1NUQVRJQywgXAogCSAgY2hhbl9saXN0IDogCXsgfSwgXAogCSAgdmFsaWQgOgkxLCBcCi0JICBzZW0gOiAJeyB9LCBcCiAJICBidWZmZXIgOglOVUxMLCBcCiAJICBoZWFkIDoJTlVMTCwgXAogCSAgdGFpbCA6CU5VTEwsIFwKQEAgLTY5LDE1ICs3NiwxOCBAQAogZXh0ZXJuIHZvaWQgbGluZV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogZXh0ZXJuIGludCBsaW5lX29wZW4oc3RydWN0IGxpbmUgKmxpbmVzLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCAKIAkJICAgICBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKTsKLWV4dGVybiBpbnQgbGluZV9zZXR1cChzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKmluaXQsIAorZXh0ZXJuIGludCBsaW5lX3NldHVwKHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IHNpemVvZl9saW5lcywgY2hhciAqaW5pdCwKIAkJICAgICAgaW50IGFsbF9hbGxvd2VkKTsKIGV4dGVybiBpbnQgbGluZV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOwogZXh0ZXJuIHZvaWQgbGluZV9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKIGV4dGVybiB2b2lkIGxpbmVfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOwogZXh0ZXJuIGludCBsaW5lX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIGxpbmVfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgbGluZV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgbGluZV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIGludCBsaW5lX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCiBleHRlcm4gY2hhciAqYWRkX3h0ZXJtX3VtaWQoY2hhciAqYmFzZSk7CiBleHRlcm4gaW50IGxpbmVfc2V0dXBfaXJxKGludCBmZCwgaW50IGlucHV0LCBpbnQgb3V0cHV0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIGxpbmVfY2xvc2VfY2hhbihzdHJ1Y3QgbGluZSAqbGluZSk7CkBAIC04OSwyMCArOTksMTAgQEAKIAkJCQlpbnQgbmxpbmVzKTsKIGV4dGVybiB2b2lkIGxpbmVzX2luaXQoc3RydWN0IGxpbmUgKmxpbmVzLCBpbnQgbmxpbmVzKTsKIGV4dGVybiB2b2lkIGNsb3NlX2xpbmVzKHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG5saW5lcyk7Ci1leHRlcm4gaW50IGxpbmVfY29uZmlnKHN0cnVjdCBsaW5lICpsaW5lcywgaW50IG51bSwgY2hhciAqc3RyKTsKLWV4dGVybiBpbnQgbGluZV9yZW1vdmUoc3RydWN0IGxpbmUgKmxpbmVzLCBpbnQgbnVtLCBjaGFyICpzdHIpOwotZXh0ZXJuIGludCBsaW5lX2dldF9jb25maWcoY2hhciAqZGV2LCBzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBudW0sIGNoYXIgKnN0ciwgCisKK2V4dGVybiBpbnQgbGluZV9jb25maWcoc3RydWN0IGxpbmUgKmxpbmVzLCB1bnNpZ25lZCBpbnQgc2l6ZW9mX2xpbmVzLCBjaGFyICpzdHIpOworZXh0ZXJuIGludCBsaW5lX3JlbW92ZShzdHJ1Y3QgbGluZSAqbGluZXMsIHVuc2lnbmVkIGludCBzaXplb2ZfbGluZXMsIGNoYXIgKnN0cik7CitleHRlcm4gaW50IGxpbmVfZ2V0X2NvbmZpZyhjaGFyICpkZXYsIHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IHNpemVvZl9saW5lcywgY2hhciAqc3RyLAogCQkJICAgaW50IHNpemUsIGNoYXIgKiplcnJvcl9vdXQpOwogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9zeXNjYWxscy5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N5c2NhbGxzLmgKaW5kZXggNWRiODFlYy4uYmUwYTNlMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N5c2NhbGxzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L3N5c2NhbGxzLmgKQEAgLTIyLDEwMiArMjIsMyBAQAogZXh0ZXJuIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJICAgICAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Ci0KLS8qIE9uIGkzODYgdGhleSBjaG9vc2UgYSBtZWFuaW5nbGVzcyBuYW1pbmcuKi8KLSNkZWZpbmUgX19OUl9rZXhlY19sb2FkIF9fTlJfc3lzX2tleGVjX2xvYWQKLQotI2RlZmluZSBBUkNIX1NZU0NBTExTIFwKLQlbIF9fTlJfd2FpdHBpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c193YWl0cGlkLCBcCi0JWyBfX05SX2JyZWFrIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIF9fTlJfb2xkc3RhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zdGF0LCBcCi0JWyBfX05SX3Vtb3VudCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19vbGR1bW91bnQsIFwKLQlbIF9fTlJfc3RpbWUgXSA9IHVtX3N0aW1lLCBcCi0JWyBfX05SX29sZGZzdGF0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzdGF0LCBcCi0JWyBfX05SX3N0dHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9ndHR5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIF9fTlJfbmljZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaWNlLCBcCi0JWyBfX05SX2Z0aW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIF9fTlJfcHJvZiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3NpZ25hbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWduYWwsIFwKLQlbIF9fTlJfbG9jayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX21weCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3VsaW1pdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX29sZG9sZHVuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX29sZHVuYW1lLCBcCi0JWyBfX05SX3NpZ2FjdGlvbiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdhY3Rpb24sIFwKLQlbIF9fTlJfc2dldG1hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2dldG1hc2ssIFwKLQlbIF9fTlJfc3NldG1hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3NldG1hc2ssIFwKLQlbIF9fTlJfc2lnc3VzcGVuZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdzdXNwZW5kLCBcCi0JWyBfX05SX3NpZ3BlbmRpbmcgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2lncGVuZGluZywgXAotCVsgX19OUl9vbGRsc3RhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sc3RhdCwgXAotCVsgX19OUl9yZWFkZGlyIF0gPSBvbGRfcmVhZGRpciwgXAotCVsgX19OUl9wcm9maWwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9zb2NrZXRjYWxsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NvY2tldGNhbGwsIFwKLQlbIF9fTlJfb2xkdW5hbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdW5hbWUsIFwKLQlbIF9fTlJfaW9wbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX2lkbGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9pcGMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaXBjLCBcCi0JWyBfX05SX3NpZ3JldHVybiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaWdyZXR1cm4sIFwKLQlbIF9fTlJfc2lncHJvY21hc2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2lncHJvY21hc2ssIFwKLQlbIF9fTlJfYmRmbHVzaCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19iZGZsdXNoLCBcCi0JWyBfX05SX19sbHNlZWsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGxzZWVrLCBcCi0JWyBfX05SX19uZXdzZWxlY3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VsZWN0LCBcCi0JWyBfX05SX3ZtODYgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9tbWFwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgb2xkX21tYXBfaTM4NiwgXAotCVsgX19OUl91Z2V0cmxpbWl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHJsaW1pdCwgXAotCVsgX19OUl9tbWFwMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tbWFwMiwgXAotCVsgX19OUl90cnVuY2F0ZTY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RydW5jYXRlNjQsIFwKLQlbIF9fTlJfZnRydW5jYXRlNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZnRydW5jYXRlNjQsIFwKLQlbIF9fTlJfc3RhdDY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N0YXQ2NCwgXAotCVsgX19OUl9sc3RhdDY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xzdGF0NjQsIFwKLQlbIF9fTlJfZnN0YXQ2NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mc3RhdDY0LCBcCi0JWyBfX05SX2ZjbnRsNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmNudGw2NCwgXAotCVsgX19OUl9zZW5kZmlsZTY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NlbmRmaWxlNjQsIFwKLQlbIF9fTlJfc3RhdGZzNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3RhdGZzNjQsIFwKLQlbIF9fTlJfZnN0YXRmczY0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzdGF0ZnM2NCwgXAotCVsgX19OUl9mYWR2aXNlNjRfNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmFkdmlzZTY0XzY0LCBcCi0JWyBfX05SX3NlbGVjdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIG9sZF9zZWxlY3QsIFwKLQlbIF9fTlJfdm04Nm9sZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX21vZGlmeV9sZHQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbW9kaWZ5X2xkdCwgXAotCVsgX19OUl9sY2hvd24zMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sY2hvd24sIFwKLQlbIF9fTlJfZ2V0dWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0dWlkLCBcCi0JWyBfX05SX2dldGdpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldGdpZCwgXAotCVsgX19OUl9nZXRldWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZXVpZCwgXAotCVsgX19OUl9nZXRlZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZWdpZCwgXAotCVsgX19OUl9zZXRyZXVpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHJldWlkLCBcCi0JWyBfX05SX3NldHJlZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVnaWQsIFwKLQlbIF9fTlJfZ2V0Z3JvdXBzMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0Z3JvdXBzLCBcCi0JWyBfX05SX3NldGdyb3VwczMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGdyb3VwcywgXAotCVsgX19OUl9mY2hvd24zMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mY2hvd24sIFwKLQlbIF9fTlJfc2V0cmVzdWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVzdWlkLCBcCi0JWyBfX05SX2dldHJlc3VpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHJlc3VpZCwgXAotCVsgX19OUl9zZXRyZXNnaWQzMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRyZXNnaWQsIFwKLQlbIF9fTlJfZ2V0cmVzZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cmVzZ2lkLCBcCi0JWyBfX05SX2Nob3duMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2hvd24sIFwKLQlbIF9fTlJfc2V0dWlkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0dWlkLCBcCi0JWyBfX05SX3NldGdpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGdpZCwgXAotCVsgX19OUl9zZXRmc3VpZDMyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGZzdWlkLCBcCi0JWyBfX05SX3NldGZzZ2lkMzIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0ZnNnaWQsIFwKLQlbIF9fTlJfcGl2b3Rfcm9vdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19waXZvdF9yb290LCBcCi0JWyBfX05SX21pbmNvcmUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWluY29yZSwgXAotCVsgX19OUl9tYWR2aXNlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21hZHZpc2UsIFwKLQlbIDIyMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyAyMjMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9zZXRfdGhyZWFkX2FyZWEgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9nZXRfdGhyZWFkX2FyZWEgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgMjUxIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsIFwKLQlbIDI4NSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCi0vKiAyMjIgZG9lc24ndCB5ZXQgaGF2ZSBhIG5hbWUgaW4gaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCAqLwotCi0jZGVmaW5lIExBU1RfQVJDSF9TWVNDQUxMIDI4NQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc3lzY2FsbHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N5c2NhbGxzLmgKaW5kZXggYjE4N2E0MS4uNjc5MjNjYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc3lzY2FsbHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zeXNjYWxscy5oCkBAIC0yNiw2NiArMjYsOSBAQAogZXh0ZXJuIGxvbmcgb2xkX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJICAgICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgd3JhcF9zeXNfc2htYXQ7CiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX21vZGlmeV9sZHQ7CiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX2FyY2hfcHJjdGw7CiAKLSNkZWZpbmUgQVJDSF9TWVNDQUxMUyBcCi0JWyBfX05SX21tYXAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBvbGRfbW1hcCwgXAotCVsgX19OUl9zZWxlY3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VsZWN0LCBcCi0JWyBfX05SX21pbmNvcmUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWluY29yZSwgXAotCVsgX19OUl9tYWR2aXNlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21hZHZpc2UsIFwKLQlbIF9fTlJfc2htZ2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NobWdldCwgXAotCVsgX19OUl9zaG1hdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHdyYXBfc3lzX3NobWF0LCBcCi0JWyBfX05SX3NobWN0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zaG1jdGwsIFwKLQlbIF9fTlJfc2Vtb3AgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2Vtb3AsIFwKLQlbIF9fTlJfc2VtZ2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NlbWdldCwgXAotCVsgX19OUl9zZW1jdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VtY3RsLCBcCi0JWyBfX05SX3NobWR0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NobWR0LCBcCi0JWyBfX05SX21zZ2dldCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tc2dnZXQsIFwKLQlbIF9fTlJfbXNnc25kIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21zZ3NuZCwgXAotCVsgX19OUl9tc2dyY3YgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXNncmN2LCBcCi0JWyBfX05SX21zZ2N0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tc2djdGwsIFwKLQlbIF9fTlJfcGl2b3Rfcm9vdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19waXZvdF9yb290LCBcCi0JWyBfX05SX3R1eGNhbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9zZWN1cml0eSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX2Vwb2xsX2N0bF9vbGQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwgXAotCVsgX19OUl9lcG9sbF93YWl0X29sZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX21vZGlmeV9sZHQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbW9kaWZ5X2xkdCwgXAotCVsgX19OUl9hcmNoX3ByY3RsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FyY2hfcHJjdGwsIFwKLQlbIF9fTlJfc29ja2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NvY2tldCwgXAotCVsgX19OUl9jb25uZWN0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nvbm5lY3QsIFwKLQlbIF9fTlJfYWNjZXB0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FjY2VwdCwgXAotCVsgX19OUl9yZWN2ZnJvbSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZWN2ZnJvbSwgXAotCVsgX19OUl9yZWN2bXNnIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlY3Ztc2csIFwKLQlbIF9fTlJfc2VuZG1zZyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZW5kbXNnLCBcCi0JWyBfX05SX2JpbmQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfYmluZCwgXAotCVsgX19OUl9saXN0ZW4gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGlzdGVuLCBcCi0JWyBfX05SX2dldHNvY2tuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHNvY2tuYW1lLCBcCi0JWyBfX05SX2dldHBlZXJuYW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHBlZXJuYW1lLCBcCi0JWyBfX05SX3NvY2tldHBhaXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc29ja2V0cGFpciwgXAotCVsgX19OUl9zZW5kdG8gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VuZHRvLCBcCi0JWyBfX05SX3NodXRkb3duIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NodXRkb3duLCBcCi0JWyBfX05SX3NldHNvY2tvcHQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0c29ja29wdCwgXAotCVsgX19OUl9nZXRzb2Nrb3B0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHNvY2tvcHQsIFwKLQlbIF9fTlJfaW9wbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3NldF90aHJlYWRfYXJlYSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX2dldF90aHJlYWRfYXJlYSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLCBcCi0JWyBfX05SX3NlbXRpbWVkb3AgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2VtdGltZWRvcCwgXAotCVsgMjUxIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0KLSNkZWZpbmUgTEFTVF9BUkNIX1NZU0NBTEwgMjUxCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDEwMjQKKyNkZWZpbmUgTlJfc3lzY2FsbHMgKF9fTlJfc3lzY2FsbF9tYXggKyAxKQogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL01ha2VmaWxlIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZGM3OTZjMS4uMjQ2ZjBlNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIAloZWxwZXIubyBpbml0X3Rhc2subyBpcnEubyBpcnFfdXNlci5vIGtzeW1zLm8gbWFpbi5vIG1lbS5vIG1lbV91c2VyLm8gXAogCXBoeXNtZW0ubyBwcm9jZXNzLm8gcHJvY2Vzc19rZXJuLm8gcHRyYWNlLm8gcmVib290Lm8gcmVzb3VyY2UubyBcCiAJc2lnaW9fdXNlci5vIHNpZ2lvX2tlcm4ubyBzaWduYWxfa2Vybi5vIHNpZ25hbF91c2VyLm8gc21wLm8gXAotCXN5c2NhbGxfa2Vybi5vIHN5c3JxLm8gc3lzX2NhbGxfdGFibGUubyB0ZW1wZmlsZS5vIHRpbWUubyB0aW1lX2tlcm4ubyBcCisJc3lzY2FsbF9rZXJuLm8gc3lzcnEubyB0ZW1wZmlsZS5vIHRpbWUubyB0aW1lX2tlcm4ubyBcCiAJdGxiLm8gdHJhcF9rZXJuLm8gdHJhcF91c2VyLm8gdWFjY2Vzc191c2VyLm8gdW1fYXJjaC5vIHVtaWQubyBcCiAJdXNlcl91dGlsLm8KIApAQCAtNTMsNiArNTMsNyBAQAogICAgICAgY21kX3F1b3RlMiA9IHNlZCAtZSAnL0NPTkZJRy97JyAgICAgICAgICBcCiAJCSAgLWUgJ3MvIkNPTkZJRyJcOy8iIi8nICAgICAgICBcCiAJCSAgLWUgJ3IgJChvYmopL2NvbmZpZy50bXAnICAgICBcCi0JCSAgLWUgJ2EiIlw7JyAgICAgICAgICAgICAgICAgICBcCisJCSAgLWUgJ2EgXCcgICAgICAgICAgICAgICAgICAgICBcCisJCSAgLWUgJyIiXDsnICAgICAgICAgICAgICAgICAgICBcCiAJCSAgLWUgJ30nICAgICAgICAgICAgICAgICAgICAgICBcCiAJCSAgJDwgPiAkQApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYwppbmRleCAxZDcxOWQ1Li43YTk0MzY5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYwpAQCAtMTYxLDEwICsxNjEsNiBAQAogCXJldHVybihjdXJyZW50KTsKIH0KIAotdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KIGludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCXVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCAKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCmluZGV4IDdiMjU5YTIuLjk1OWIyZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOiAvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwogCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCiAJCWNoaWxkLT5wdHJhY2UgJj0gflBUX0RUUkFDRTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogeyAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCiAJCXJldCA9IC1FSU87Ci0JCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwogCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJY2hpbGQtPnB0cmFjZSB8PSBQVF9EVFJBQ0U7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvdWFjY2Vzcy1za2FzLmggYi9hcmNoL3VtL2tlcm5lbC9za2FzL2luY2x1ZGUvdWFjY2Vzcy1za2FzLmgKaW5kZXggMTE5ODZjOS4uYzM1NjIwMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9pbmNsdWRlL3VhY2Nlc3Mtc2thcy5oCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvaW5jbHVkZS91YWNjZXNzLXNrYXMuaApAQCAtMTgsNyArMTgsNyBAQAogCSAgKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkgPD0gRklYQUREUl9VU0VSX0VORCkgJiYgXAogCSAgKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkgPj0gKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9hcmVhX3NrYXMoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLAorc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIHZlcmlmeV9hcmVhX3NrYXMoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4oYWNjZXNzX29rX3NrYXModHlwZSwgYWRkciwgc2l6ZSkgPyAwIDogLUVGQVVMVCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3VhY2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvdWFjY2Vzcy5jCmluZGV4IDc1NzVlYzQuLmY3ZGE5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvdWFjY2Vzcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvdWFjY2Vzcy5jCkBAIC0zLDYgKzMsNyBAQAogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCiAKKyNpbmNsdWRlICJsaW51eC9jb21waWxlci5oIgogI2luY2x1ZGUgImxpbnV4L3N0ZGRlZi5oIgogI2luY2x1ZGUgImxpbnV4L2tlcm5lbC5oIgogI2luY2x1ZGUgImxpbnV4L3N0cmluZy5oIgpAQCAtNjEsOCArNjIsNyBAQAogCXZvaWQgKmFyZzsKIAlpbnQgKnJlczsKIAotCS8qIFNvbWUgb2xkIGdjY3MgcmVjb2duaXplIF9fdmFfY29weSwgYnV0IG5vdCB2YV9jb3B5ICovCi0JX192YV9jb3B5KGFyZ3MsICoodmFfbGlzdCAqKWFyZ19wdHIpOworCXZhX2NvcHkoYXJncywgKih2YV9saXN0ICopYXJnX3B0cik7CiAJYWRkciA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKIAlsZW4gPSB2YV9hcmcoYXJncywgaW50KTsKIAlpc193cml0ZSA9IHZhX2FyZyhhcmdzLCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc3lzX2NhbGxfdGFibGUuYyBiL2FyY2gvdW0va2VybmVsL3N5c19jYWxsX3RhYmxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzA2YzguLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9rZXJuZWwvc3lzX2NhbGxfdGFibGUuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCi0gKiBDb3B5cmlnaHQgMjAwMyBQYXRoU2NhbGUsIEluYy4KLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCi0jaW5jbHVkZSAibGludXgvdW5pc3RkLmgiCi0jaW5jbHVkZSAibGludXgvc3lzLmgiCi0jaW5jbHVkZSAibGludXgvc3dhcC5oIgotI2luY2x1ZGUgImxpbnV4L3N5c2NhbGxzLmgiCi0jaW5jbHVkZSAibGludXgvc3lzY3RsLmgiCi0jaW5jbHVkZSAiYXNtL3NpZ25hbC5oIgotI2luY2x1ZGUgInN5c2RlcC9zeXNjYWxscy5oIgotI2luY2x1ZGUgImtlcm5fdXRpbC5oIgotCi0jaWZkZWYgQ09ORklHX05GU0QKLSNkZWZpbmUgTkZTU0VSVkNUTCBzeXNfbmZzc2VydmN0bAotI2Vsc2UKLSNkZWZpbmUgTkZTU0VSVkNUTCBzeXNfbmlfc3lzY2FsbAotI2VuZGlmCi0KLSNkZWZpbmUgTEFTVF9HRU5FUklDX1NZU0NBTEwgX19OUl9rZXljdGwKLQotI2lmIExBU1RfR0VORVJJQ19TWVNDQUxMID4gTEFTVF9BUkNIX1NZU0NBTEwKLSNkZWZpbmUgTEFTVF9TWVNDQUxMIExBU1RfR0VORVJJQ19TWVNDQUxMCi0jZWxzZQotI2RlZmluZSBMQVNUX1NZU0NBTEwgTEFTVF9BUkNIX1NZU0NBTEwKLSNlbmRpZgotCi1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX2Zvcms7Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX2V4ZWN2ZTsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCB1bV90aW1lOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHVtX3N0aW1lOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19waXBlOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19vbGR1bmFtZTsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfc2lnYWN0aW9uOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19zaWdzdXNwZW5kOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IG9sZF9yZWFkZGlyOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c191bmFtZTsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfaXBjOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19zaWdyZXR1cm47Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX2Nsb25lOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19ydF9zaWdyZXR1cm47Ci1leHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX3NpZ2FsdHN0YWNrOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c192Zm9yazsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBvbGRfc2VsZWN0OwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19tb2RpZnlfbGR0OwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19ydF9zaWdzdXNwZW5kOwotZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19tYmluZDsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfZ2V0X21lbXBvbGljeTsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfc2V0X21lbXBvbGljeTsKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBzeXNfc3lzX3NldGFsdHJvb3Q7Ci0KLXN5c2NhbGxfaGFuZGxlcl90ICpzeXNfY2FsbF90YWJsZVtdID0gewotCVsgX19OUl9yZXN0YXJ0X3N5c2NhbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVzdGFydF9zeXNjYWxsLAotCVsgX19OUl9leGl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2V4aXQsCi0JWyBfX05SX2ZvcmsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZm9yaywKLQlbIF9fTlJfcmVhZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZWFkLAotCVsgX19OUl93cml0ZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c193cml0ZSwKLQotCS8qIFRoZXNlIHRocmVlIGFyZSBkZWNsYXJlZCBkaWZmZXJlbnRseSBpbiBhc20vdW5pc3RkLmggKi8KLQlbIF9fTlJfb3BlbiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19vcGVuLAotCVsgX19OUl9jbG9zZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jbG9zZSwKLQlbIF9fTlJfY3JlYXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY3JlYXQsCi0JWyBfX05SX2xpbmsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGluaywKLQlbIF9fTlJfdW5saW5rIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3VubGluaywKLQlbIF9fTlJfZXhlY3ZlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2V4ZWN2ZSwKLQotCS8qIGRlY2xhcmVkIGRpZmZlcmVudGx5IGluIGtlcm5fdXRpbC5oICovCi0JWyBfX05SX2NoZGlyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2NoZGlyLAotCVsgX19OUl90aW1lIF0gPSB1bV90aW1lLAotCVsgX19OUl9ta25vZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ta25vZCwKLQlbIF9fTlJfY2htb2QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2htb2QsCi0JWyBfX05SX2xjaG93biBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sY2hvd24xNiwKLQlbIF9fTlJfbHNlZWsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbHNlZWssCi0JWyBfX05SX2dldHBpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRwaWQsCi0JWyBfX05SX21vdW50IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21vdW50LAotCVsgX19OUl9zZXR1aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0dWlkMTYsCi0JWyBfX05SX2dldHVpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXR1aWQxNiwKLSAJWyBfX05SX3B0cmFjZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19wdHJhY2UsCi0JWyBfX05SX2FsYXJtIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FsYXJtLAotCVsgX19OUl9wYXVzZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19wYXVzZSwKLQlbIF9fTlJfdXRpbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdXRpbWUsCi0JWyBfX05SX2FjY2VzcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19hY2Nlc3MsCi0JWyBfX05SX3N5bmMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3luYywKLQlbIF9fTlJfa2lsbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19raWxsLAotCVsgX19OUl9yZW5hbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVuYW1lLAotCVsgX19OUl9ta2RpciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ta2RpciwKLQlbIF9fTlJfcm1kaXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcm1kaXIsCi0KLQkvKiBEZWNsYXJlZCBkaWZmZXJlbnRseSBpbiBhc20vdW5pc3RkLmggKi8KLQlbIF9fTlJfZHVwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2R1cCwKLQlbIF9fTlJfcGlwZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19waXBlLAotCVsgX19OUl90aW1lcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c190aW1lcywKLQlbIF9fTlJfYnJrIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2JyaywKLQlbIF9fTlJfc2V0Z2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGdpZDE2LAotCVsgX19OUl9nZXRnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0Z2lkMTYsCi0JWyBfX05SX2dldGV1aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZXVpZDE2LAotCVsgX19OUl9nZXRlZ2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldGVnaWQxNiwKLQlbIF9fTlJfYWNjdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19hY2N0LAotCVsgX19OUl91bW91bnQyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3Vtb3VudCwKLQlbIF9fTlJfaW9jdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaW9jdGwsCi0JWyBfX05SX2ZjbnRsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZjbnRsLAotCVsgX19OUl9zZXRwZ2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHBnaWQsCi0JWyBfX05SX3VtYXNrIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3VtYXNrLAotCVsgX19OUl9jaHJvb3QgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2hyb290LAotCVsgX19OUl91c3RhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c191c3RhdCwKLQlbIF9fTlJfZHVwMiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19kdXAyLAotCVsgX19OUl9nZXRwcGlkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHBwaWQsCi0JWyBfX05SX2dldHBncnAgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cGdycCwKLQlbIF9fTlJfc2V0c2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHNpZCwKLQlbIF9fTlJfc2V0cmV1aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmV1aWQxNiwKLQlbIF9fTlJfc2V0cmVnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVnaWQxNiwKLQlbIF9fTlJfc2V0aG9zdG5hbWUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0aG9zdG5hbWUsCi0JWyBfX05SX3NldHJsaW1pdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRybGltaXQsCi0JWyBfX05SX2dldHJsaW1pdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19vbGRfZ2V0cmxpbWl0LAotCVsgX19OUl9nZXRydXNhZ2UgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cnVzYWdlLAotCVsgX19OUl9nZXR0aW1lb2ZkYXkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0dGltZW9mZGF5LAotCVsgX19OUl9zZXR0aW1lb2ZkYXkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0dGltZW9mZGF5LAotCVsgX19OUl9nZXRncm91cHMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0Z3JvdXBzMTYsCi0JWyBfX05SX3NldGdyb3VwcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRncm91cHMxNiwKLQlbIF9fTlJfc3ltbGluayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zeW1saW5rLAotCVsgX19OUl9yZWFkbGluayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19yZWFkbGluaywKLQlbIF9fTlJfdXNlbGliIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3VzZWxpYiwKLQlbIF9fTlJfc3dhcG9uIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N3YXBvbiwKLQlbIF9fTlJfcmVib290IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlYm9vdCwKLQlbIF9fTlJfbXVubWFwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX211bm1hcCwKLQlbIF9fTlJfdHJ1bmNhdGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdHJ1bmNhdGUsCi0JWyBfX05SX2Z0cnVuY2F0ZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mdHJ1bmNhdGUsCi0JWyBfX05SX2ZjaG1vZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mY2htb2QsCi0JWyBfX05SX2ZjaG93biBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mY2hvd24xNiwKLQlbIF9fTlJfZ2V0cHJpb3JpdHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cHJpb3JpdHksCi0JWyBfX05SX3NldHByaW9yaXR5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHByaW9yaXR5LAotCVsgX19OUl9zdGF0ZnMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3RhdGZzLAotCVsgX19OUl9mc3RhdGZzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzdGF0ZnMsCi0JWyBfX05SX2lvcGVybSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCVsgX19OUl9zeXNsb2cgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc3lzbG9nLAotCVsgX19OUl9zZXRpdGltZXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0aXRpbWVyLAotCVsgX19OUl9nZXRpdGltZXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0aXRpbWVyLAotCVsgX19OUl9zdGF0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25ld3N0YXQsCi0JWyBfX05SX2xzdGF0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25ld2xzdGF0LAotCVsgX19OUl9mc3RhdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uZXdmc3RhdCwKLQlbIF9fTlJfdmhhbmd1cCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c192aGFuZ3VwLAotCVsgX19OUl93YWl0NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c193YWl0NCwKLQlbIF9fTlJfc3dhcG9mZiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zd2Fwb2ZmLAotCVsgX19OUl9zeXNpbmZvIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N5c2luZm8sCi0JWyBfX05SX2ZzeW5jIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2ZzeW5jLAotCVsgX19OUl9jbG9uZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jbG9uZSwKLQlbIF9fTlJfc2V0ZG9tYWlubmFtZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRkb21haW5uYW1lLAotCVsgX19OUl91bmFtZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uZXd1bmFtZSwKLQlbIF9fTlJfYWRqdGltZXggXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfYWRqdGltZXgsCi0JWyBfX05SX21wcm90ZWN0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21wcm90ZWN0LAotCVsgX19OUl9jcmVhdGVfbW9kdWxlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX2luaXRfbW9kdWxlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2luaXRfbW9kdWxlLAotCVsgX19OUl9kZWxldGVfbW9kdWxlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2RlbGV0ZV9tb2R1bGUsCi0JWyBfX05SX2dldF9rZXJuZWxfc3ltcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCVsgX19OUl9xdW90YWN0bCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19xdW90YWN0bCwKLQlbIF9fTlJfZ2V0cGdpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRwZ2lkLAotCVsgX19OUl9mY2hkaXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmNoZGlyLAotCVsgX19OUl9zeXNmcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zeXNmcywKLQlbIF9fTlJfcGVyc29uYWxpdHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcGVyc29uYWxpdHksCi0JWyBfX05SX2Fmc19zeXNjYWxsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX3NldGZzdWlkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGZzdWlkMTYsCi0JWyBfX05SX3NldGZzZ2lkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldGZzZ2lkMTYsCi0JWyBfX05SX2dldGRlbnRzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldGRlbnRzLAotCVsgX19OUl9mbG9jayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mbG9jaywKLQlbIF9fTlJfbXN5bmMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXN5bmMsCi0JWyBfX05SX3JlYWR2IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlYWR2LAotCVsgX19OUl93cml0ZXYgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfd3JpdGV2LAotCVsgX19OUl9nZXRzaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0c2lkLAotCVsgX19OUl9mZGF0YXN5bmMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmRhdGFzeW5jLAotCVsgX19OUl9fc3lzY3RsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3N5c2N0bCwKLQlbIF9fTlJfbWxvY2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWxvY2ssCi0JWyBfX05SX211bmxvY2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXVubG9jaywKLQlbIF9fTlJfbWxvY2thbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWxvY2thbGwsCi0JWyBfX05SX211bmxvY2thbGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXVubG9ja2FsbCwKLQlbIF9fTlJfc2NoZWRfc2V0cGFyYW0gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfc2V0cGFyYW0sCi0JWyBfX05SX3NjaGVkX2dldHBhcmFtIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NjaGVkX2dldHBhcmFtLAotCVsgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyLAotCVsgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyLAotCVsgX19OUl9zY2hlZF95aWVsZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHlpZWxkLAotCVsgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgsCi0JWyBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwKLQlbIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwKLQlbIF9fTlJfbmFub3NsZWVwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25hbm9zbGVlcCwKLQlbIF9fTlJfbXJlbWFwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21yZW1hcCwKLQlbIF9fTlJfc2V0cmVzdWlkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldHJlc3VpZDE2LAotCVsgX19OUl9nZXRyZXN1aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0cmVzdWlkMTYsCi0JWyBfX05SX3F1ZXJ5X21vZHVsZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCVsgX19OUl9wb2xsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3BvbGwsCi0JWyBfX05SX25mc3NlcnZjdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBORlNTRVJWQ1RMLAotCVsgX19OUl9zZXRyZXNnaWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0cmVzZ2lkMTYsCi0JWyBfX05SX2dldHJlc2dpZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19nZXRyZXNnaWQxNiwKLQlbIF9fTlJfcHJjdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcHJjdGwsCi0JWyBfX05SX3J0X3NpZ3JldHVybiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ydF9zaWdyZXR1cm4sCi0JWyBfX05SX3J0X3NpZ2FjdGlvbiBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ydF9zaWdhY3Rpb24sCi0JWyBfX05SX3J0X3NpZ3Byb2NtYXNrIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3J0X3NpZ3Byb2NtYXNrLAotCVsgX19OUl9ydF9zaWdwZW5kaW5nIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3J0X3NpZ3BlbmRpbmcsCi0JWyBfX05SX3J0X3NpZ3RpbWVkd2FpdCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ydF9zaWd0aW1lZHdhaXQsCi0JWyBfX05SX3J0X3NpZ3F1ZXVlaW5mbyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19ydF9zaWdxdWV1ZWluZm8sCi0JWyBfX05SX3J0X3NpZ3N1c3BlbmQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcnRfc2lnc3VzcGVuZCwKLQlbIF9fTlJfcHJlYWQ2NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19wcmVhZDY0LAotCVsgX19OUl9wd3JpdGU2NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19wd3JpdGU2NCwKLQlbIF9fTlJfY2hvd24gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfY2hvd24xNiwKLQlbIF9fTlJfZ2V0Y3dkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldGN3ZCwKLQlbIF9fTlJfY2FwZ2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2NhcGdldCwKLQlbIF9fTlJfY2Fwc2V0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2NhcHNldCwKLQlbIF9fTlJfc2lnYWx0c3RhY2sgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2lnYWx0c3RhY2ssCi0JWyBfX05SX3NlbmRmaWxlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NlbmRmaWxlLAotCVsgX19OUl9nZXRwbXNnIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwsCi0JWyBfX05SX3B1dHBtc2cgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwKLQlbIF9fTlJfdmZvcmsgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdmZvcmssCi0JWyBfX05SX2dldGRlbnRzNjQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0ZGVudHM2NCwKLQlbIF9fTlJfZ2V0dGlkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHRpZCwKLQlbIF9fTlJfcmVhZGFoZWFkIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlYWRhaGVhZCwKLQlbIF9fTlJfc2V0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2V0eGF0dHIsCi0JWyBfX05SX2xzZXR4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19sc2V0eGF0dHIsCi0JWyBfX05SX2ZzZXR4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mc2V0eGF0dHIsCi0JWyBfX05SX2dldHhhdHRyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2dldHhhdHRyLAotCVsgX19OUl9sZ2V0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGdldHhhdHRyLAotCVsgX19OUl9mZ2V0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmdldHhhdHRyLAotCVsgX19OUl9saXN0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbGlzdHhhdHRyLAotCVsgX19OUl9sbGlzdHhhdHRyIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xsaXN0eGF0dHIsCi0JWyBfX05SX2ZsaXN0eGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZmxpc3R4YXR0ciwKLQlbIF9fTlJfcmVtb3ZleGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVtb3ZleGF0dHIsCi0JWyBfX05SX2xyZW1vdmV4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19scmVtb3ZleGF0dHIsCi0JWyBfX05SX2ZyZW1vdmV4YXR0ciBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mcmVtb3ZleGF0dHIsCi0JWyBfX05SX3RraWxsIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RraWxsLAotCVsgX19OUl9mdXRleCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mdXRleCwKLQlbIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfc2NoZWRfc2V0YWZmaW5pdHksCi0JWyBfX05SX3NjaGVkX2dldGFmZmluaXR5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NjaGVkX2dldGFmZmluaXR5LAotCVsgX19OUl9pb19zZXR1cCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19pb19zZXR1cCwKLQlbIF9fTlJfaW9fZGVzdHJveSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19pb19kZXN0cm95LAotCVsgX19OUl9pb19nZXRldmVudHMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaW9fZ2V0ZXZlbnRzLAotCVsgX19OUl9pb19zdWJtaXQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaW9fc3VibWl0LAotCVsgX19OUl9pb19jYW5jZWwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfaW9fY2FuY2VsLAotCVsgX19OUl9leGl0X2dyb3VwIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2V4aXRfZ3JvdXAsCi0JWyBfX05SX2xvb2t1cF9kY29va2llIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2xvb2t1cF9kY29va2llLAotCVsgX19OUl9lcG9sbF9jcmVhdGUgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZXBvbGxfY3JlYXRlLAotCVsgX19OUl9lcG9sbF9jdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZXBvbGxfY3RsLAotCVsgX19OUl9lcG9sbF93YWl0IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Vwb2xsX3dhaXQsCi0JWyBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfcmVtYXBfZmlsZV9wYWdlcywKLQlbIF9fTlJfc2V0X3RpZF9hZGRyZXNzIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3NldF90aWRfYWRkcmVzcywKLQlbIF9fTlJfdGltZXJfY3JlYXRlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RpbWVyX2NyZWF0ZSwKLQlbIF9fTlJfdGltZXJfc2V0dGltZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c190aW1lcl9zZXR0aW1lLAotCVsgX19OUl90aW1lcl9nZXR0aW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RpbWVyX2dldHRpbWUsCi0JWyBfX05SX3RpbWVyX2dldG92ZXJydW4gXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfdGltZXJfZ2V0b3ZlcnJ1biwKLQlbIF9fTlJfdGltZXJfZGVsZXRlIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3RpbWVyX2RlbGV0ZSwKLQlbIF9fTlJfY2xvY2tfc2V0dGltZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jbG9ja19zZXR0aW1lLAotCVsgX19OUl9jbG9ja19nZXR0aW1lIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2Nsb2NrX2dldHRpbWUsCi0JWyBfX05SX2Nsb2NrX2dldHJlcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jbG9ja19nZXRyZXMsCi0JWyBfX05SX2Nsb2NrX25hbm9zbGVlcCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19jbG9ja19uYW5vc2xlZXAsCi0JWyBfX05SX3Rna2lsbCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c190Z2tpbGwsCi0JWyBfX05SX3V0aW1lcyBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c191dGltZXMsCi0JWyBfX05SX2ZhZHZpc2U2NCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19mYWR2aXNlNjQsCi0JWyBfX05SX3ZzZXJ2ZXIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbmlfc3lzY2FsbCwKLQlbIF9fTlJfbWJpbmQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbWJpbmQsCi0JWyBfX05SX2dldF9tZW1wb2xpY3kgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfZ2V0X21lbXBvbGljeSwKLQlbIF9fTlJfc2V0X21lbXBvbGljeSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19zZXRfbWVtcG9saWN5LAotCVsgX19OUl9tcV9vcGVuIF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX21xX29wZW4sCi0JWyBfX05SX21xX3VubGluayBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tcV91bmxpbmssCi0JWyBfX05SX21xX3RpbWVkc2VuZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tcV90aW1lZHNlbmQsCi0JWyBfX05SX21xX3RpbWVkcmVjZWl2ZSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tcV90aW1lZHJlY2VpdmUsCi0JWyBfX05SX21xX25vdGlmeSBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19tcV9ub3RpZnksCi0JWyBfX05SX21xX2dldHNldGF0dHIgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfbXFfZ2V0c2V0YXR0ciwKLQlbIF9fTlJfa2V4ZWNfbG9hZCBdID0gKHN5c2NhbGxfaGFuZGxlcl90ICopIHN5c19uaV9zeXNjYWxsLAotCVsgX19OUl93YWl0aWQgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfd2FpdGlkLAotCVsgX19OUl9hZGRfa2V5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX2FkZF9rZXksCi0JWyBfX05SX3JlcXVlc3Rfa2V5IF0gPSAoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX3JlcXVlc3Rfa2V5LAotCVsgX19OUl9rZXljdGwgXSA9IChzeXNjYWxsX2hhbmRsZXJfdCAqKSBzeXNfa2V5Y3RsLAotCi0JQVJDSF9TWVNDQUxMUwotCVsgTEFTVF9TWVNDQUxMICsgMSAuLi4gTlJfc3lzY2FsbHMgXSA9IAotCQkoc3lzY2FsbF9oYW5kbGVyX3QgKikgc3lzX25pX3N5c2NhbGwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC9pbmNsdWRlL3VhY2Nlc3MtdHQuaCBiL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oCmluZGV4IGYwYmFkMDEuLmJiNjlkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oCisrKyBiL2FyY2gvdW0va2VybmVsL3R0L2luY2x1ZGUvdWFjY2Vzcy10dC5oCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgPD0gKCh1bnNpZ25lZCBsb25nKSAoYWRkcikgKyAoc2l6ZSkpKSAmJiBcCiAgICAgICAgICAgKHVuZGVyX3Rhc2tfc2l6ZShhZGRyLCBzaXplKSB8fCBpc19zdGFjayhhZGRyLCBzaXplKSkpKQogCi1zdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYV90dChpbnQgdHlwZSwgY29uc3Qgdm9pZCAqIGFkZHIsCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgdmVyaWZ5X2FyZWFfdHQoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLAogCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuKGFjY2Vzc19va190dCh0eXBlLCBhZGRyLCBzaXplKSA/IDAgOiAtRUZBVUxUKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3JlZ2lzdGVycy5jCmluZGV4IDE0ODY0NWIuLjlhMGFkMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvcmVnaXN0ZXJzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9yZWdpc3RlcnMuYwpAQCAtMTA1LDE0ICsxMDUsMTUgQEAKIAkJcGFuaWMoImNoZWNrX3B0cmFjZSA6IFBUUkFDRV9HRVRSRUdTIGZhaWxlZCwgZXJybm8gPSAlZCIsCiAJCSAgICAgIGVycik7CiAKKwllcnJubyA9IDA7CiAJZXJyID0gcHRyYWNlKFBUUkFDRV9HRVRGUFhSRUdTLCBwaWQsIDAsIGV4ZWNfZnB4X3JlZ3MpOwogCWlmKCFlcnIpCiAJCXJldHVybjsKKwlpZihlcnJubyAhPSBFSU8pCisJCXBhbmljKCJjaGVja19wdHJhY2UgOiBQVFJBQ0VfR0VURlBYUkVHUyBmYWlsZWQsIGVycm5vID0gJWQiLAorCQkgICAgICBlcnJubyk7CiAKIAloYXZlX2ZweF9yZWdzID0gMDsKLQlpZihlcnIgIT0gRUlPKQotCQlwYW5pYygiY2hlY2tfcHRyYWNlIDogUFRSQUNFX0dFVEZQWFJFR1MgZmFpbGVkLCBlcnJubyA9ICVkIiwKLQkJICAgICAgZXJyKTsKIAogCWVyciA9IHB0cmFjZShQVFJBQ0VfR0VURlBSRUdTLCBwaWQsIDAsIGV4ZWNfZnBfcmVncyk7CiAJaWYoZXJyKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKaW5kZXggNzFiNDdlNi4uOTUwNzgxZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCkBAIC0xLDUgKzEsNiBAQAogb2JqLXkgPSBiaXRvcHMubyBidWdzLm8gY2hlY2tzdW0ubyBkZWxheS5vIGZhdWx0Lm8ga3N5bXMubyBsZHQubyBwdHJhY2UubyBcCi0JcHRyYWNlX3VzZXIubyBzZW1hcGhvcmUubyBzaWduYWwubyBzaWdjb250ZXh0Lm8gc3lzY2FsbHMubyBzeXNycS5vCisJcHRyYWNlX3VzZXIubyBzZW1hcGhvcmUubyBzaWduYWwubyBzaWdjb250ZXh0Lm8gc3lzY2FsbHMubyBzeXNycS5vIFwKKwlzeXNfY2FsbF90YWJsZS5vCiAKIG9iai0kKENPTkZJR19ISUdITUVNKSArPSBoaWdobWVtLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBtb2R1bGUubwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzVjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c19jYWxsX3RhYmxlLlMKQEAgLTAsMCArMSwxNiBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKy8qIFN0ZWFsIGkzODYgc3lzY2FsbCB0YWJsZSBmb3Igb3VyIHB1cnBvc2VzLCBidXQgd2l0aCBzb21lIHNsaWdodCBjaGFuZ2VzLiovCisKKyNkZWZpbmUgc3lzX2lvcGwgc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX2lvcGVybSBzeXNfbmlfc3lzY2FsbAorCisjZGVmaW5lIHN5c192bTg2b2xkIHN5c19uaV9zeXNjYWxsCisjZGVmaW5lIHN5c192bTg2IHN5c19uaV9zeXNjYWxsCisjZGVmaW5lIHN5c19zZXRfdGhyZWFkX2FyZWEgc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX2dldF90aHJlYWRfYXJlYSBzeXNfbmlfc3lzY2FsbAorCisjZGVmaW5lIHN5c19zdGltZSB1bV9zdGltZQorI2RlZmluZSBzeXNfdGltZSB1bV90aW1lCisjZGVmaW5lIG9sZF9tbWFwIG9sZF9tbWFwX2kzODYKKworI2luY2x1ZGUgIi4uLy4uL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUyIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQppbmRleCAyMTI5ZTMxLi5kN2VkMmY3IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBsaWIteSA9IGJpdG9wcy5vIGJ1Z3MubyBjc3VtLXBhcnRpYWwubyBkZWxheS5vIGZhdWx0Lm8gbWVtLm8gbWVtY3B5Lm8gXAogCXB0cmFjZS5vIHB0cmFjZV91c2VyLm8gc2VtYXBob3JlLm8gc2lnY29udGV4dC5vIHNpZ25hbC5vIFwKLQlzeXNjYWxscy5vIHN5c3JxLm8gdGh1bmsubworCXN5c2NhbGxzLm8gc3lzcnEubyB0aHVuay5vIHN5c2NhbGxfdGFibGUubwogCiBVU0VSX09CSlMgOj0gcHRyYWNlX3VzZXIubyBzaWdjb250ZXh0Lm8KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiMmU4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMKQEAgLTAsMCArMSw1OSBAQAorLyogU3lzdGVtIGNhbGwgdGFibGUgZm9yIFVNTC94ODYtNjQsIGNvcGllZCBmcm9tIGFyY2gveDg2XzY0L2tlcm5lbC9zeXNjYWxsLmMKKyAqIHdpdGggc29tZSBjaGFuZ2VzIGZvciBVTUwuICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2RlZmluZSBfX05PX1NUVUJTCisKKy8qIEJlbG93IHlvdSBjYW4gc2VlLCBpbiB0ZXJtcyBvZiAjZGVmaW5lJ3MsIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB4ODYtNjQKKyAqIGFuZCB0aGUgVU1MIHN5c2NhbGwgdGFibGUuICovCisKKy8qIE5vdCBnb2luZyB0byBiZSBpbXBsZW1lbnRlZCBieSBVTUwsIHNpbmNlIHdlIGhhdmUgbm8gaGFyZHdhcmUuICovCisjZGVmaW5lIHN0dWJfaW9wbCBzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfaW9wZXJtIHN5c19uaV9zeXNjYWxsCisKKy8qIFRoZSBVTUwgVExTIHByb2JsZW0uIE5vdGUgdGhhdCB4ODZfNjQgZG9lcyBub3QgaW1wbGVtZW50IHRoaXMsIHNvIHRoZSBiZWxvdworICogaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBpYTMyIGNvbXBhdGliaWxpdHkuICovCisvKiNkZWZpbmUgc3lzX3NldF90aHJlYWRfYXJlYSBzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfZ2V0X3RocmVhZF9hcmVhIHN5c19uaV9zeXNjYWxsKi8KKworLyogRm9yIF9fTlJfdGltZS4gVGhlIHg4Ni02NCBuYW1lIGhvcGVmdWxseSB3aWxsIGNoYW5nZSBmcm9tIHN5c190aW1lNjQgdG8KKyAqIHN5c190aW1lIChzaW5jZSB0aGUgY3VycmVudCBzaXR1YXRpb24gaXMgYm9ndXMpLiBJJ3ZlIHNlbnQgYSBwYXRjaCB0byBjbGVhbnVwCisgKiB0aGlzLiBSZW1vdmUgYmVsb3cgdGhlIG9ic29sZXRlZCBsaW5lLiAqLworI2RlZmluZSBzeXNfdGltZTY0IHVtX3RpbWUKKyNkZWZpbmUgc3lzX3RpbWUgdW1fdGltZQorCisvKiBPbiBVTUwgd2UgY2FsbCBpdCB0aGlzIHdheSAoIm9sZCIgbWVhbnMgaXQncyBub3QgbW1hcDIpICovCisjZGVmaW5lIHN5c19tbWFwIG9sZF9tbWFwCisvKiBPbiB4ODYtNjQgc3lzX3VuYW1lIGlzIGFjdHVhbGx5IHN5c19uZXd1bmFtZSBwbHVzIGEgY29tcGF0aWJpbGl0eSB0cmljay4KKyAqIFNlZSBhcmNoL3g4Nl82NC9rZXJuZWwvc3lzX3g4Nl82NC5jICovCisjZGVmaW5lIHN5c191bmFtZSBzeXNfdW5hbWU2NAorCisjZGVmaW5lIHN0dWJfY2xvbmUgc3lzX2Nsb25lCisjZGVmaW5lIHN0dWJfZm9yayBzeXNfZm9yaworI2RlZmluZSBzdHViX3Zmb3JrIHN5c192Zm9yaworI2RlZmluZSBzdHViX2V4ZWN2ZSBzeXNfZXhlY3ZlCisjZGVmaW5lIHN0dWJfcnRfc2lnc3VzcGVuZCBzeXNfcnRfc2lnc3VzcGVuZAorI2RlZmluZSBzdHViX3NpZ2FsdHN0YWNrIHN5c19zaWdhbHRzdGFjaworI2RlZmluZSBzdHViX3J0X3NpZ3JldHVybiBzeXNfcnRfc2lncmV0dXJuCisKKyNkZWZpbmUgX19TWVNDQUxMKG5yLCBzeW0pIGV4dGVybiBhc21saW5rYWdlIHZvaWQgc3ltKHZvaWQpIDsKKyN1bmRlZiBfQVNNX1g4Nl82NF9VTklTVERfSF8KKyNpbmNsdWRlIDxhc20teDg2XzY0L3VuaXN0ZC5oPgorCisjdW5kZWYgX19TWVNDQUxMCisjZGVmaW5lIF9fU1lTQ0FMTChuciwgc3ltKSBbIG5yIF0gPSBzeW0sCisjdW5kZWYgX0FTTV9YODZfNjRfVU5JU1REX0hfCisKK3R5cGVkZWYgdm9pZCAoKnN5c19jYWxsX3B0cl90KSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc3lzX25pX3N5c2NhbGwodm9pZCk7CisKK3N5c19jYWxsX3B0cl90IHN5c19jYWxsX3RhYmxlW19fTlJfc3lzY2FsbF9tYXgrMV0gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKKwkvKiBTbWVsbHMgbGlrZSBhIGxpa2UgYSBjb21waWxlciBidWcgLS0gaXQgZG9lc24ndCB3b3JrIHdoZW4gdGhlICYgYmVsb3cgaXMgcmVtb3ZlZC4gKi8KKwlbMCAuLi4gX19OUl9zeXNjYWxsX21heF0gPSAmc3lzX25pX3N5c2NhbGwsCisjaW5jbHVkZSA8YXNtLXg4Nl82NC91bmlzdGQuaD4KK307CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxscy5jCmluZGV4IDY4MjA1YTAuLmFiNGIwYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxscy5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxscy5jCkBAIC0xNCwxMSArMTQsMTUgQEAKICNpbmNsdWRlICJhc20vcHJjdGwuaCIgLyogWFhYIFRoaXMgc2hvdWxkIGdldCB0aGUgY29uc3RhbnRzIGZyb20gbGliYyAqLwogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAKLWFzbWxpbmthZ2UgbG9uZyB3cmFwX3N5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQorYXNtbGlua2FnZSBsb25nIHN5c191bmFtZTY0KHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiBuYW1lKQogewotCXVuc2lnbmVkIGxvbmcgcmFkZHI7Ci0KLQlyZXR1cm4gZG9fc2htYXQoc2htaWQsIHNobWFkZHIsIHNobWZsZywgJnJhZGRyKSA/OiAobG9uZykgcmFkZHI7CisJaW50IGVycjsKKwlkb3duX3JlYWQoJnV0c19zZW0pOworCWVyciA9IGNvcHlfdG9fdXNlcihuYW1lLCAmc3lzdGVtX3V0c25hbWUsIHNpemVvZiAoKm5hbWUpKTsKKwl1cF9yZWFkKCZ1dHNfc2VtKTsKKwlpZiAocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyKQorCQllcnIgfD0gY29weV90b191c2VyKCZuYW1lLT5tYWNoaW5lLCAiaTY4NiIsIDUpOworCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KIAogI2lmZGVmIENPTkZJR19NT0RFX1RUCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC92ODUwL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4ZmE3ODA3Li40NzI2Yjg3IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC0yMDgsNyArMjA5LDcgQEAKIAkvKiBFeGVjdXRlIGEgc2luZ2xlIGluc3RydWN0aW9uLiAqLwogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6CiAJCXJ2YWwgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAogCQkvKiBUdXJuIENISUxEJ3Mgc2luZ2xlLXN0ZXAgZmxhZyBvbiBvciBvZmYuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvYm9vdC9zZXR1cC5TIGIvYXJjaC94ODZfNjQvYm9vdC9zZXR1cC5TCmluZGV4IDNlODM4YmUuLjc1ZDRkMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2Jvb3Qvc2V0dXAuUworKysgYi9hcmNoL3g4Nl82NC9ib290L3NldHVwLlMKQEAgLTE2MCw3ICsxNjAsNyBAQAogdHJhbXBvbGluZToJY2FsbAlzdGFydF9vZl9zZXR1cAogCQkuYWxpZ24gMTYKIAkJCQkJIyBUaGUgb2Zmc2V0IGF0IHRoaXMgcG9pbnQgaXMgMHgyNDAKLQkJLnNwYWNlICAoMHg3ZmYtMHgyNDArMSkJIyBFODIwICYgRUREIHNwYWNlIChlbmRpbmcgYXQgMHg3ZmYpCisJCS5zcGFjZSAgKDB4ZWZmLTB4MjQwKzEpCSMgRTgyMCAmIEVERCBzcGFjZSAoZW5kaW5nIGF0IDB4ZWZmKQogIyBFbmQgb2Ygc2V0dXAgaGVhZGVyICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHN0YXJ0X29mX3NldHVwOgpAQCAtNDEyLDkgKzQxMiw5IEBACiAJIyBzaXplb2YoZTgyMHJlYykuCiAJIwogZ29vZDgyMDoKLQltb3ZiCShFODIwTlIpLCAlYWwJCQkjIHVwIHRvIDMyIGVudHJpZXMKKwltb3ZiCShFODIwTlIpLCAlYWwJCQkjIHVwIHRvIDEyOCBlbnRyaWVzCiAJY21wYgkkRTgyME1BWCwgJWFsCi0Jam5sCWJhaWw4MjAKKwlqYWUJYmFpbDgyMAogCiAJaW5jYgkoRTgyME5SKQogCW1vdncJJWRpLCAlYXgKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCmluZGV4IDU2NTE2YWMuLjdjMTU0ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwpAQCAtMiw2ICsyLDEyIEBACiAgKiBIYW5kbGUgdGhlIG1lbW9yeSBtYXAuCiAgKiBUaGUgZnVuY3Rpb25zIGhlcmUgZG8gdGhlIGpvYiB1bnRpbCBib290bWVtIHRha2VzIG92ZXIuCiAgKiAkSWQ6IGU4MjAuYyx2IDEuNCAyMDAyLzA5LzE5IDE5OjI1OjMyIGFrIEV4cCAkCisgKgorICogIEdldHRpbmcgc2FuaXRpemVfZTgyMF9tYXAoKSBpbiBzeW5jIHdpdGggaTM4NiB2ZXJzaW9uIGJ5IGFwcGx5aW5nIGNoYW5nZToKKyAqICAtICBQcm92aXNpb25zIGZvciBlbXB0eSBFODIwIG1lbW9yeSByZWdpb25zIChyZXBvcnRlZCBieSBjZXJ0YWluIEJJT1NlcykuCisgKiAgICAgQWxleCBBY2hlbmJhY2ggPHhlbGFAc2xpdC5kZT4sIERlY2VtYmVyIDIwMDIuCisgKiAgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CisgKgogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNzcsNyArMjgzLDcgQEAKIAlpbnQgY2hnaWR4LCBzdGlsbF9jaGFuZ2luZzsKIAlpbnQgb3ZlcmxhcF9lbnRyaWVzOwogCWludCBuZXdfYmlvc19lbnRyeTsKLQlpbnQgb2xkX25yLCBuZXdfbnI7CisJaW50IG9sZF9uciwgbmV3X25yLCBjaGdfbnI7CiAJaW50IGk7CiAKIAkvKgpAQCAtMzMxLDIwICszMzcsMjQgQEAKIAlmb3IgKGk9MDsgaSA8IDIqb2xkX25yOyBpKyspCiAJCWNoYW5nZV9wb2ludFtpXSA9ICZjaGFuZ2VfcG9pbnRfbGlzdFtpXTsKIAotCS8qIHJlY29yZCBhbGwga25vd24gY2hhbmdlLXBvaW50cyAoc3RhcnRpbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMpICovCisJLyogcmVjb3JkIGFsbCBrbm93biBjaGFuZ2UtcG9pbnRzIChzdGFydGluZyBhbmQgZW5kaW5nIGFkZHJlc3NlcyksCisJICAgb21pdHRpbmcgdGhvc2UgdGhhdCBhcmUgZm9yIGVtcHR5IG1lbW9yeSByZWdpb25zICovCiAJY2hnaWR4ID0gMDsKIAlmb3IgKGk9MDsgaSA8IG9sZF9ucjsgaSsrKQl7Ci0JCWNoYW5nZV9wb2ludFtjaGdpZHhdLT5hZGRyID0gYmlvc21hcFtpXS5hZGRyOwotCQljaGFuZ2VfcG9pbnRbY2hnaWR4KytdLT5wYmlvcyA9ICZiaW9zbWFwW2ldOwotCQljaGFuZ2VfcG9pbnRbY2hnaWR4XS0+YWRkciA9IGJpb3NtYXBbaV0uYWRkciArIGJpb3NtYXBbaV0uc2l6ZTsKLQkJY2hhbmdlX3BvaW50W2NoZ2lkeCsrXS0+cGJpb3MgPSAmYmlvc21hcFtpXTsKKwkJaWYgKGJpb3NtYXBbaV0uc2l6ZSAhPSAwKSB7CisJCQljaGFuZ2VfcG9pbnRbY2hnaWR4XS0+YWRkciA9IGJpb3NtYXBbaV0uYWRkcjsKKwkJCWNoYW5nZV9wb2ludFtjaGdpZHgrK10tPnBiaW9zID0gJmJpb3NtYXBbaV07CisJCQljaGFuZ2VfcG9pbnRbY2hnaWR4XS0+YWRkciA9IGJpb3NtYXBbaV0uYWRkciArIGJpb3NtYXBbaV0uc2l6ZTsKKwkJCWNoYW5nZV9wb2ludFtjaGdpZHgrK10tPnBiaW9zID0gJmJpb3NtYXBbaV07CisJCX0KIAl9CisJY2hnX25yID0gY2hnaWR4OwogCiAJLyogc29ydCBjaGFuZ2UtcG9pbnQgbGlzdCBieSBtZW1vcnkgYWRkcmVzc2VzIChsb3cgLT4gaGlnaCkgKi8KIAlzdGlsbF9jaGFuZ2luZyA9IDE7CiAJd2hpbGUgKHN0aWxsX2NoYW5naW5nKQl7CiAJCXN0aWxsX2NoYW5naW5nID0gMDsKLQkJZm9yIChpPTE7IGkgPCAyKm9sZF9ucjsgaSsrKSAgeworCQlmb3IgKGk9MTsgaSA8IGNoZ19ucjsgaSsrKSAgewogCQkJLyogaWYgPGN1cnJlbnRfYWRkcj4gPiA8bGFzdF9hZGRyPiwgc3dhcCAqLwogCQkJLyogb3IsIGlmIGN1cnJlbnQ9PHN0YXJ0X2FkZHI+ICYgbGFzdD08ZW5kX2FkZHI+LCBzd2FwICovCiAJCQlpZiAoKGNoYW5nZV9wb2ludFtpXS0+YWRkciA8IGNoYW5nZV9wb2ludFtpLTFdLT5hZGRyKSB8fApAQCAtMzY3LDcgKzM3Nyw3IEBACiAJbGFzdF90eXBlID0gMDsJCSAvKiBzdGFydCB3aXRoIHVuZGVmaW5lZCBtZW1vcnkgdHlwZSAqLwogCWxhc3RfYWRkciA9IDA7CQkgLyogc3RhcnQgd2l0aCAwIGFzIGxhc3Qgc3RhcnRpbmcgYWRkcmVzcyAqLwogCS8qIGxvb3AgdGhyb3VnaCBjaGFuZ2UtcG9pbnRzLCBkZXRlcm1pbmluZyBhZmZlY3Qgb24gdGhlIG5ldyBiaW9zIG1hcCAqLwotCWZvciAoY2hnaWR4PTA7IGNoZ2lkeCA8IDIqb2xkX25yOyBjaGdpZHgrKykKKwlmb3IgKGNoZ2lkeD0wOyBjaGdpZHggPCBjaGdfbnI7IGNoZ2lkeCsrKQogCXsKIAkJLyoga2VlcCB0cmFjayBvZiBhbGwgb3ZlcmxhcHBpbmcgYmlvcyBlbnRyaWVzICovCiAJCWlmIChjaGFuZ2VfcG9pbnRbY2hnaWR4XS0+YWRkciA9PSBjaGFuZ2VfcG9pbnRbY2hnaWR4XS0+cGJpb3MtPmFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggNzUwYmNkMC4uZTNhMTllOCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtNjAsNyArNjAsNyBAQAogCiAvKiBTZXJpYWwgZnVuY3Rpb25zIGxvb3NlbHkgYmFzZWQgb24gYSBzaW1pbGFyIHBhY2thZ2UgZnJvbSBLbGF1cyBQLiBHZXJsaWNoZXIgKi8gCiAKLWludCBlYXJseV9zZXJpYWxfYmFzZSA9IDB4M2Y4OyAgLyogdHR5UzAgKi8gCitzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9iYXNlID0gMHgzZjg7ICAvKiB0dHlTMCAqLwogCiAjZGVmaW5lIFhNVFJEWSAgICAgICAgICAweDIwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggMzIzM2ExNS4uMTA4NmI1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTI5Niw2ICsyOTYsNyBAQAogCWNhbGwgc3lzY2FsbF90cmFjZV9sZWF2ZQogCXBvcHEgJXJkaQogCWFuZGwgJH4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NJTkdMRVNURVApLCVlZGkKKwljbGkKIAlqbXAgaW50X3Jlc3RvcmVfcmVzdAogCQogaW50X3NpZ25hbDoKQEAgLTMwNyw2ICszMDgsNyBAQAogMToJbW92bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVkaQkKIGludF9yZXN0b3JlX3Jlc3Q6CiAJUkVTVE9SRV9SRVNUCisJY2xpCiAJam1wIGludF93aXRoX2NoZWNrCiAJQ0ZJX0VORFBST0MKIAkJCkBAIC00OTAsNyArNDkyLDggQEAKIAljYWxsIGRvX25vdGlmeV9yZXN1bWUKIAlSRVNUT1JFX1JFU1QKIAljbGkKLQlHRVRfVEhSRUFEX0lORk8oJXJjeCkJCisJR0VUX1RIUkVBRF9JTkZPKCVyY3gpCisJbW92bCAkX1RJRl9XT1JLX01BU0ssJWVkaQogCWptcCByZXRpbnRfY2hlY2sKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMKaW5kZXggNmNhZDQ2Yy4uMGY4Yzc4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQuYwpAQCAtMjksOCArMjksNiBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZykgX19ic3NfZW5kIC0gKHVuc2lnbmVkIGxvbmcpIF9fYnNzX3N0YXJ0KTsKIH0KIAotZXh0ZXJuIGNoYXIgeDg2X2Jvb3RfcGFyYW1zWzIwNDhdOwotCiAjZGVmaW5lIE5FV19DTF9QT0lOVEVSCQkweDIyOAkvKiBSZWxhdGl2ZSB0byByZWFsIG1vZGUgZGF0YSAqLwogI2RlZmluZSBPTERfQ0xfTUFHSUNfQUREUgkweDkwMDIwCiAjZGVmaW5lIE9MRF9DTF9NQUdJQyAgICAgICAgICAgIDB4QTMzRgpAQCAtNDQsNyArNDIsNyBAQAogCWludCBuZXdfZGF0YTsKIAljaGFyICogY29tbWFuZF9saW5lOwogCi0JbWVtY3B5KHg4Nl9ib290X3BhcmFtcywgcmVhbF9tb2RlX2RhdGEsIDIwNDgpOyAKKwltZW1jcHkoeDg2X2Jvb3RfcGFyYW1zLCByZWFsX21vZGVfZGF0YSwgQk9PVF9QQVJBTV9TSVpFKTsKIAluZXdfZGF0YSA9ICooaW50ICopICh4ODZfYm9vdF9wYXJhbXMgKyBORVdfQ0xfUE9JTlRFUik7CiAJaWYgKCFuZXdfZGF0YSkgewogCQlpZiAoT0xEX0NMX01BR0lDICE9ICogKHUxNiAqKSBPTERfQ0xfTUFHSUNfQUREUikgewpAQCAtOTMsOSArOTEsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAljcHVfc2V0KDAsIGNwdV9vbmxpbmVfbWFwKTsKICNlbmRpZgotCS8qIGRlZmF1bHQgY29uc29sZTogKi8KLQlpZiAoIXN0cnN0cihzYXZlZF9jb21tYW5kX2xpbmUsICJjb25zb2xlPSIpKQotCQlzdHJjYXQoc2F2ZWRfY29tbWFuZF9saW5lLCAiIGNvbnNvbGU9dHR5MCIpOyAKIAlzID0gc3Ryc3RyKHNhdmVkX2NvbW1hbmRfbGluZSwgImVhcmx5cHJpbnRrPSIpOwogCWlmIChzICE9IE5VTEwpCiAJCXNldHVwX2Vhcmx5X3ByaW50ayhzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDI5YTI1NzIuLjYwYmU1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwpAQCAtMTYwNyw3ICsxNjA3LDYgQEAKIAkJCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKIAkJCQlzZXR1cF9ubWkoKTsKIAkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJCWNoZWNrX25taV93YXRjaGRvZygpOwogCQkJfQogCQkJcmV0dXJuOwogCQl9CkBAIC0xNjI3LDcgKzE2MjYsNiBAQAogCQkJbm1pX3dhdGNoZG9nX2RlZmF1bHQoKTsKIAkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJCQlzZXR1cF9ubWkoKTsKLQkJCQljaGVja19ubWlfd2F0Y2hkb2coKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCmluZGV4IGUwMGQ0YWQuLjYxZGUwYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKQEAgLTExMiwxNyArMTEyLDIwIEBACiAJfSAJCiB9CiAKLWludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nICh2b2lkKQogewogCWludCBjb3VudHNbTlJfQ1BVU107CiAJaW50IGNwdTsKIAorCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX05PTkUpCisJCXJldHVybiAwOworCiAJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQyAmJiAhY3B1X2hhc19sYXBpYygpKSAgewogCQlubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKIAkJcmV0dXJuIC0xOyAKIAl9CQogCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyBOTUkgd2F0Y2hkb2cgLi4uICIpOworCXByaW50ayhLRVJOX0lORk8gIlRlc3RpbmcgTk1JIHdhdGNoZG9nIC4uLiAiKTsKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspCiAJCWNvdW50c1tjcHVdID0gY3B1X3BkYVtjcHVdLl9fbm1pX2NvdW50OyAKQEAgLTE0OCw2ICsxNTEsOCBAQAogCiAJcmV0dXJuIDA7CiB9CisvKiBIYXZlIHRoaXMgY2FsbGVkIGxhdGVyIGR1cmluZyBib290IHNvIGNvdW50ZXJzIGFyZSB1cGRhdGluZyAqLworbGF0ZV9pbml0Y2FsbChjaGVja19ubWlfd2F0Y2hkb2cpOwogCiBpbnQgX19pbml0IHNldHVwX25taV93YXRjaGRvZyhjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5OTIyZDJiLi43NjFiNmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQwMiwxMCArNDAyLDEwIEBACiAJcC0+dGhyZWFkLmZzID0gbWUtPnRocmVhZC5mczsKIAlwLT50aHJlYWQuZ3MgPSBtZS0+dGhyZWFkLmdzOwogCi0JYXNtKCJtb3ZsICUlZ3MsJTAiIDogIj1tIiAocC0+dGhyZWFkLmdzaW5kZXgpKTsKLQlhc20oIm1vdmwgJSVmcywlMCIgOiAiPW0iIChwLT50aHJlYWQuZnNpbmRleCkpOwotCWFzbSgibW92bCAlJWVzLCUwIiA6ICI9bSIgKHAtPnRocmVhZC5lcykpOwotCWFzbSgibW92bCAlJWRzLCUwIiA6ICI9bSIgKHAtPnRocmVhZC5kcykpOworCWFzbSgibW92ICUlZ3MsJTAiIDogIj1tIiAocC0+dGhyZWFkLmdzaW5kZXgpKTsKKwlhc20oIm1vdiAlJWZzLCUwIiA6ICI9bSIgKHAtPnRocmVhZC5mc2luZGV4KSk7CisJYXNtKCJtb3YgJSVlcywlMCIgOiAiPW0iIChwLT50aHJlYWQuZXMpKTsKKwlhc20oIm1vdiAlJWRzLCUwIiA6ICI9bSIgKHAtPnRocmVhZC5kcykpOwogCiAJaWYgKHVubGlrZWx5KG1lLT50aHJlYWQuaW9fYml0bWFwX3B0ciAhPSBOVUxMKSkgeyAKIAkJcC0+dGhyZWFkLmlvX2JpdG1hcF9wdHIgPSBrbWFsbG9jKElPX0JJVE1BUF9CWVRFUywgR0ZQX0tFUk5FTCk7CkBAIC00NjgsMTEgKzQ2OCwxMSBAQAogCSAqIFN3aXRjaCBEUyBhbmQgRVMuCiAJICogVGhpcyB3b24ndCBwaWNrIHVwIHRocmVhZCBzZWxlY3RvciBjaGFuZ2VzLCBidXQgSSBndWVzcyB0aGF0IGlzIG9rLgogCSAqLwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzLCUwIiA6ICI9bSIgKHByZXYtPmVzKSk7IAorCWFzbSB2b2xhdGlsZSgibW92ICUlZXMsJTAiIDogIj1tIiAocHJldi0+ZXMpKTsKIAlpZiAodW5saWtlbHkobmV4dC0+ZXMgfCBwcmV2LT5lcykpCiAJCWxvYWRzZWdtZW50KGVzLCBuZXh0LT5lcyk7IAogCQotCWFzbSB2b2xhdGlsZSAoIm1vdmwgJSVkcywlMCIgOiAiPW0iIChwcmV2LT5kcykpOyAKKwlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcywlMCIgOiAiPW0iIChwcmV2LT5kcykpOwogCWlmICh1bmxpa2VseShuZXh0LT5kcyB8IHByZXYtPmRzKSkKIAkJbG9hZHNlZ21lbnQoZHMsIG5leHQtPmRzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IGVjYmNjYmIuLjE5ZWJhOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNDY3LDcgKzQ2OCw3IEBACiAJY2FzZSBQVFJBQ0VfQ09OVDogICAgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCiAKIAkJcmV0ID0gLUVJTzsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQkJYnJlYWs7CiAJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQogCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCxUSUZfU1lTQ0FMTF9UUkFDRSk7CkBAIC01MjksNyArNTMwLDcgQEAKIAogCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6ICAgIC8qIHNldCB0aGUgdHJhcCBmbGFnLiAqLwogCQlyZXQgPSAtRUlPOwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGRhdGEgPiBfTlNJRykKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKIAkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLFRJRl9TWVNDQUxMX1RSQUNFKTsKIAkJc2V0X3NpbmdsZXN0ZXAoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCBiMThjMTE0Li4yMTI5Y2Y5IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJaWYgKCh4bHZsICYgMHhmZmZmMDAwMCkgPT0gMHg4MDAwMDAwMCkgewogCQlpZiAoeGx2bCA+PSAweDgwMDAwMDAxKSB7CiAJCQljLT54ODZfY2FwYWJpbGl0eVsxXSA9IGNwdWlkX2VkeCgweDgwMDAwMDAxKTsKLQkJCWMtPng4Nl9jYXBhYmlsaXR5WzVdID0gY3B1aWRfZWN4KDB4ODAwMDAwMDEpOworCQkJYy0+eDg2X2NhcGFiaWxpdHlbNl0gPSBjcHVpZF9lY3goMHg4MDAwMDAwMSk7CiAJCX0KIAkJaWYgKHhsdmwgPj0gMHg4MDAwMDAwNCkKIAkJCWdldF9tb2RlbF9uYW1lKGMpOyAvKiBEZWZhdWx0IG5hbWUgKi8KQEAgLTEwNzYsNyArMTA3Niw3IEBACiAJICAgICAgICAiZnhzciIsICJzc2UiLCAic3NlMiIsICJzcyIsICJodCIsICJ0bSIsICJpYTY0IiwgTlVMTCwKIAogCQkvKiBBTUQtZGVmaW5lZCAqLwotCQkicG5pIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgInN5c2NhbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAibngiLCBOVUxMLCAibW14ZXh0IiwgTlVMTCwKIAkJTlVMTCwgImZ4c3Jfb3B0IiwgTlVMTCwgTlVMTCwgTlVMTCwgImxtIiwgIjNkbm93ZXh0IiwgIjNkbm93IiwKQEAgLTExMDAsMTEgKzExMDAsMTcgQEAKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAorCQkvKiBWSUEvQ3lyaXgvQ2VudGF1ci1kZWZpbmVkICovCisJCU5VTEwsIE5VTEwsICJybmciLCAicm5nX2VuIiwgTlVMTCwgTlVMTCwgImFjZSIsICJhY2VfZW4iLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCiAJCS8qIEFNRC1kZWZpbmVkICgjMikgKi8KIAkJImxhaGZfbG0iLCAiY21wX2xlZ2FjeSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAl9OwogCXN0YXRpYyBjaGFyICp4ODZfcG93ZXJfZmxhZ3NbXSA9IHsgCiAJCSJ0cyIsCS8qIHRlbXBlcmF0dXJlIHNlbnNvciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKaW5kZXggYjUzMDViMC4uNjc4YjdhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9ib290c2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGRhLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0yNiw3ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL21tYW4uaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgogCi1jaGFyIHg4Nl9ib290X3BhcmFtc1syMDQ4XSBfX2luaXRkYXRhID0gezAsfTsKK2NoYXIgeDg2X2Jvb3RfcGFyYW1zW0JPT1RfUEFSQU1fU0laRV0gX19pbml0ZGF0YSA9IHswLH07CiAKIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQgX19pbml0ZGF0YSA9IENQVV9NQVNLX05PTkU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3lzX3g4Nl82NC5jCmluZGV4IDQ3N2Q4YmUuLmRiZWJkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYwpAQCAtMTUyLDEyICsxNTIsNiBAQAogCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHdyYXBfc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCi17Ci0JdW5zaWduZWQgbG9uZyByYWRkcjsKLQlyZXR1cm4gZG9fc2htYXQoc2htaWQsc2htYWRkcixzaG1mbGcsJnJhZGRyKSA/OiAobG9uZylyYWRkcjsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5c190aW1lNjQobG9uZyBfX3VzZXIgKiB0bG9jKQogewogCXN0cnVjdCB0aW1ldmFsIG5vdzsgCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4IDUzNjc1NGYuLjkwZDYwODkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogY29uZmlnIENSWVBUT19BRVMKIAl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIgotCWRlcGVuZHMgb24gQ1JZUFRPICYmICEoWDg2ICYmICFYODZfNjQpCisJZGVwZW5kcyBvbiBDUllQVE8gJiYgISgoWDg2IHx8IFVNTF9YODYpICYmICE2NEJJVCkKIAloZWxwCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsIAogCSAgYWxnb3JpdGhtLgpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIGNvbmZpZyBDUllQVE9fQUVTXzU4NgogCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMgKGk1ODYpIgotCWRlcGVuZHMgb24gQ1JZUFRPICYmIChYODYgJiYgIVg4Nl82NCkKKwlkZXBlbmRzIG9uIENSWVBUTyAmJiAoKFg4NiB8fCBVTUxfWDg2KSAmJiAhNjRCSVQpCiAJaGVscAogCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbCAKIAkgIGFsZ29yaXRobS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggMDVhMTc4MS4uZmY2NGQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTgzOCw3ICs4MzgsNyBAQAogCiAJLyogRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGlkbGUgbG9vcCAqLwogCXBtX2lkbGUgPSBwbV9pZGxlX3NhdmU7Ci0Jc3luY2hyb25pemVfa2VybmVsKCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIFJlbGllcyBvbiBpbnRlcnJ1cHRzIGZvcmNpbmcgZXhpdCBmcm9tIGlkbGUuICovCiAKIAlwci0+ZmxhZ3MucG93ZXIgPSAwOwogCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvKHByKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGU3Y2EwNjYuLjExOWM5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtMzc5LDggKzM3OSw4IEBACiAKIC8qKgogICogc2V0dXBfc3lzX2ZzX2RldmljZV9maWxlcyAtIHNldHMgdXAgdGhlIGRldmljZSBmaWxlcyB1bmRlciBkZXZpY2UgbmFtZXNwYWNlCi0gKiBAQGRldjoJYWNwaV9kZXZpY2Ugb2JqZWN0Ci0gKiBAQGZ1bmM6CWZ1bmN0aW9uIHBvaW50ZXIgdG8gY3JlYXRlIG9yIGRlc3Ryb3kgdGhlIGRldmljZSBmaWxlCisgKiBAZGV2OglhY3BpX2RldmljZSBvYmplY3QKKyAqIEBmdW5jOglmdW5jdGlvbiBwb2ludGVyIHRvIGNyZWF0ZSBvciBkZXN0cm95IHRoZSBkZXZpY2UgZmlsZQogICovCiBzdGF0aWMgdm9pZAogc2V0dXBfc3lzX2ZzX2RldmljZV9maWxlcyAoCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IGNkNjQ1MzkuLjNhNWY0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogLyoqCiAgKglwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIgLSBhZGQgYSBwbGF0Zm9ybS1sZXZlbCBkZXZpY2UKLSAqCUBkZXY6CXBsYXRmb3JtIGRldmljZSB3ZSdyZSBhZGRpbmcKKyAqCUBwZGV2OglwbGF0Zm9ybSBkZXZpY2Ugd2UncmUgYWRkaW5nCiAgKgogICovCiBpbnQgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBwZGV2KQpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIC8qKgogICoJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgLSByZW1vdmUgYSBwbGF0Zm9ybS1sZXZlbCBkZXZpY2UKLSAqCUBkZXY6CXBsYXRmb3JtIGRldmljZSB3ZSdyZSByZW1vdmluZworICoJQHBkZXY6CXBsYXRmb3JtIGRldmljZSB3ZSdyZSByZW1vdmluZwogICoKICAqCU5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyByZWxlYXNlIGFsbCBtZW1vcnktIGFuZCBwb3J0LWJhc2VkCiAgKglyZXNvdXJjZXMgb3duZWQgYnkgdGhlIGRldmljZSAoQGRldi0+cmVzb3VyY2UpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggZWZkZjA0NC4uOWUyNjhkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC03OCw2ICs3OCw3IEBACiAjZGVmaW5lIERCR19SWCAgICAgICAgICAweDAyMDAKICNkZWZpbmUgREJHX1RYICAgICAgICAgIDB4MDQwMAogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2OwogI2VuZGlmIC8qIE5ERUJVRyAqLwogCiBzdGF0aWMgc3RydWN0IG5iZF9kZXZpY2UgbmJkX2RldltNQVhfTkJEXTsKQEAgLTY0Nyw3ICs2NDgsMTMgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9OQkQ7IGkrKykgeworCWlmIChuYmRzX21heCA+IE1BWF9OQkQpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAibmJkOiBjYW5ub3QgYWxsb2NhdGUgbW9yZSB0aGFuICV1IG5iZHM7ICV1IHJlcXVlc3RlZC5cbiIsIE1BWF9OQkQsCisJCQkJbmJkc19tYXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJkc19tYXg7IGkrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFsbG9jX2Rpc2soMSk7CiAJCWlmICghZGlzaykKIAkJCWdvdG8gb3V0OwpAQCAtNjczLDcgKzY4MCw3IEBACiAJZHByaW50ayhEQkdfSU5JVCwgIm5iZDogZGVidWdmbGFncz0weCV4XG4iLCBkZWJ1Z2ZsYWdzKTsKIAogCWRldmZzX21rX2RpcigibmJkIik7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9OQkQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuYmRzX21heDsgaSsrKSB7CiAJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbmJkX2RldltpXS5kaXNrOwogCQluYmRfZGV2W2ldLmZpbGUgPSBOVUxMOwogCQluYmRfZGV2W2ldLm1hZ2ljID0gTE9fTUFHSUM7CkBAIC03MDYsOCArNzEzLDkgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuYmRfY2xlYW51cCh2b2lkKQogewogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTkJEOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmJkc19tYXg7IGkrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IG5iZF9kZXZbaV0uZGlzazsKKwkJbmJkX2RldltpXS5tYWdpYyA9IDA7CiAJCWlmIChkaXNrKSB7CiAJCQlkZWxfZ2VuZGlzayhkaXNrKTsKIAkJCWJsa19jbGVhbnVwX3F1ZXVlKGRpc2stPnF1ZXVlKTsKQEAgLTcyNSw2ICs3MzMsOCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXR3b3JrIEJsb2NrIERldmljZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCittb2R1bGVfcGFyYW0obmJkc19tYXgsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCAiSG93IG1hbnkgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUuIik7CiAjaWZuZGVmIE5ERUJVRwogbW9kdWxlX3BhcmFtKGRlYnVnZmxhZ3MsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnZmxhZ3MsICJmbGFncyBmb3IgY29udHJvbGxpbmcgZGVidWcgb3V0cHV0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25vb3AtaW9zY2hlZC5jIGIvZHJpdmVycy9ibG9jay9ub29wLWlvc2NoZWQuYwppbmRleCA4ODhjNDc3Li5iMTczMGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25vb3AtaW9zY2hlZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbm9vcC1pb3NjaGVkLmMKQEAgLTEzLDM0ICsxMywxMyBAQAogc3RhdGljIGludCBlbGV2YXRvcl9ub29wX21lcmdlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKipyZXEsCiAJCQkgICAgICAgc3RydWN0IGJpbyAqYmlvKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gJnEtPnF1ZXVlX2hlYWQ7Ci0Jc3RydWN0IHJlcXVlc3QgKl9fcnE7CiAJaW50IHJldDsKIAotCWlmICgocmV0ID0gZWx2X3RyeV9sYXN0X21lcmdlKHEsIGJpbykpKSB7CisJcmV0ID0gZWx2X3RyeV9sYXN0X21lcmdlKHEsIGJpbyk7CisJaWYgKHJldCAhPSBFTEVWQVRPUl9OT19NRVJHRSkKIAkJKnJlcSA9IHEtPmxhc3RfbWVyZ2U7Ci0JCXJldHVybiByZXQ7Ci0JfQogCi0Jd2hpbGUgKChlbnRyeSA9IGVudHJ5LT5wcmV2KSAhPSAmcS0+cXVldWVfaGVhZCkgewotCQlfX3JxID0gbGlzdF9lbnRyeV9ycShlbnRyeSk7Ci0KLQkJaWYgKF9fcnEtPmZsYWdzICYgKFJFUV9TT0ZUQkFSUklFUiB8IFJFUV9IQVJEQkFSUklFUikpCi0JCQlicmVhazsKLQkJZWxzZSBpZiAoX19ycS0+ZmxhZ3MgJiBSRVFfU1RBUlRFRCkKLQkJCWJyZWFrOwotCi0JCWlmICghYmxrX2ZzX3JlcXVlc3QoX19ycSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKHJldCA9IGVsdl90cnlfbWVyZ2UoX19ycSwgYmlvKSkpIHsKLQkJCSpyZXEgPSBfX3JxOwotCQkJcS0+bGFzdF9tZXJnZSA9IF9fcnE7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGVsZXZhdG9yX25vb3BfbWVyZ2VfcmVxdWVzdHMocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IDlkZWNhNDkuLmJlYWE1NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTY0NSw3ICs2NDUsNyBAQAogCQlyZXQgPSBjZHJvbV9tcndfYmdmb3JtYXRfc3VzcChjZGksIDApOwogCX0KIAotCWlmICghcmV0KQorCWlmICghcmV0ICYmIGNkaS0+bWVkaWFfd3JpdHRlbikKIAkJcmV0ID0gY2Ryb21fZmx1c2hfY2FjaGUoY2RpKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDk3YWM0ZWQuLmUxNjJkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC05ODIsNyArOTgyLDcgQEAKIAogY29uZmlnIEhBTkdDSEVDS19USU1FUgogCXRyaXN0YXRlICJIYW5nY2hlY2sgdGltZXIiCi0JZGVwZW5kcyBvbiBYODZfNjQgfHwgWDg2CisJZGVwZW5kcyBvbiBYODZfNjQgfHwgWDg2IHx8IElBNjQgfHwgUFBDNjQgfHwgQVJDSF9TMzkwCiAJaGVscAogCSAgVGhlIGhhbmdjaGVjay10aW1lciBtb2R1bGUgZGV0ZWN0cyB3aGVuIHRoZSBzeXN0ZW0gaGFzIGdvbmUKIAkgIG91dCB0byBsdW5jaCBwYXN0IGEgY2VydGFpbiBtYXJnaW4uICBJdCBjYW4gcmVib290IHRoZSBzeXN0ZW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggYzg2YTIyYy4uMDIxMmZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXs0LCAxMDI0LCAwLCAzfQogfTsKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGFsaV9nZW5lcmljX2JyaWRnZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYWxpX2dlbmVyaWNfYnJpZGdlID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFsaV9nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gVTMyX0FQRVJfU0laRSwKQEAgLTIxNSw3ICsyMTUsNyBAQAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWxpX2Rlc3Ryb3lfcGFnZSwKIH07CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbGlfbTE1NDFfYnJpZGdlID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbGlfbTE1NDFfYnJpZGdlID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFsaV9nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gVTMyX0FQRVJfU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggZjFlYTg3ZS4uZTYyYTNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCXsubWFzayA9IDEsIC50eXBlID0gMH0KIH07CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFtZF9pcm9uZ2F0ZV9zaXplcywKIAkuc2l6ZV90eXBlCQk9IExWTDJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggOTA1ZjA2Mi4uMzk5YzA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIH0KIAogCi1zdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYW1kXzgxNTFfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfODE1MV9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gYW1kXzgxNTFfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVMzJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCA3NTdkZGUwLi5hNjVmODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhdGlfZ2VuZXJpY19icmlkZ2UgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGF0aV9nZW5lcmljX2JyaWRnZSA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5hcGVydHVyZV9zaXplcwkJPSBhdGlfZ2VuZXJpY19zaXplcywKIAkuc2l6ZV90eXBlCQk9IExWTDJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwppbmRleCBjMzQ0MmYzYy4uMmYzZGZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTk3LDcgKzk3LDcgQEAKIEVYUE9SVF9TWU1CT0woYWdwX2JhY2tlbmRfcmVsZWFzZSk7CiAKIAotc3RydWN0IHsgaW50IG1lbSwgYWdwOyB9IG1heGVzX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHsgaW50IG1lbSwgYWdwOyB9IG1heGVzX3RhYmxlW10gPSB7CiAJezAsIDB9LAogCXszMiwgNH0sCiAJezY0LCAyOH0sCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgYWdwX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZ3BfZXhpdCh2b2lkKQogewogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCAyYTg3Y2VjLi4xMzgzYzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogfQogCiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBlZmZpY2Vvbl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGVmZmljZW9uX2RyaXZlciA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5hcGVydHVyZV9zaXplcwkJPSBlZmZpY2Vvbl9nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gTFZMMl9BUEVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMKaW5kZXggZjYzMzYyMy4uM2RmYjY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIC8qIEZpbGUgcHJpdmF0ZSBsaXN0IHJvdXRpbmVzICovCiAKLXN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICphZ3BfZmluZF9wcml2YXRlKHBpZF90IHBpZCkKK3N0YXRpYyBzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqYWdwX2ZpbmRfcHJpdmF0ZShwaWRfdCBwaWQpCiB7CiAJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKmN1cnI7CiAKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGFncF9pbnNlcnRfZmlsZV9wcml2YXRlKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICogcHJpdikKK3N0YXRpYyB2b2lkIGFncF9pbnNlcnRfZmlsZV9wcml2YXRlKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICogcHJpdikKIHsKIAlzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJldjsKIApAQCAtMjYyLDcgKzI2Miw3IEBACiAJYWdwX2ZlLmZpbGVfcHJpdl9saXN0ID0gcHJpdjsKIH0KIAotdm9pZCBhZ3BfcmVtb3ZlX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqIHByaXYpCitzdGF0aWMgdm9pZCBhZ3BfcmVtb3ZlX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqIHByaXYpCiB7CiAJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKm5leHQ7CiAJc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKnByZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCmluZGV4IDRmN2EzZTguLjgwZGFmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIH07CiAKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIG52aWRpYV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIG52aWRpYV9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gbnZpZGlhX2dlbmVyaWNfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVOF9BUEVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCmluZGV4IGNmY2NhY2IuLmViYzA1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAl7NCwgMTAyNCwgMCwgM30KIH07CiAKLXN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBzaXNfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBzaXNfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzIAk9IHNpc19nZW5lcmljX3NpemVzLAogCS5zaXplX3R5cGUJCT0gVThfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwppbmRleCBiYjMzOGQ5Li4xMGMyMzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJYWdwX2RldmljZV9jb21tYW5kKGNvbW1hbmQsIDApOwogfQogCi1zdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgc3dvcmtzX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgc3dvcmtzX2RyaXZlciA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5hcGVydHVyZV9zaXplcwkJPSBzZXJ2ZXJ3b3Jrc19zaXplcywKIAkuc2l6ZV90eXBlCQk9IExWTDJfQVBFUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCBlMTQ1MWRkLi5jODQ3ZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB9CiAKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9hZ3AzX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2FncDNfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9IGFncDNfZ2VuZXJpY19zaXplcywKIAkuc2l6ZV90eXBlCQk9IFU4X0FQRVJfU0laRSwKQEAgLTE5Myw3ICsxOTMsNyBAQAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAogfTsKIAotc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gdmlhX2dlbmVyaWNfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVOF9BUEVSX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHRsay5jIGIvZHJpdmVycy9jaGFyL2R0bGsuYwppbmRleCA5MDNlNGMzLi5hMjI5OTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHRsay5jCisrKyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgS0VSTkVMCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3IgdmVyaWZ5X2FyZWEgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGZvciAtRUJVU1kgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogZm9yIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGxvb3BzX3Blcl9qaWZmeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jIGIvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jCmluZGV4IDgzZDZiMzcuLjc4ZTY1MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9oYW5nY2hlY2stdGltZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaGFuZ2NoZWNrLXRpbWVyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRHJpdmVyIGZvciBhIGxpdHRsZSBpbyBmZW5jaW5nIHRpbWVyLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBPcmFjbGUgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQXV0aG9yOiBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KICAqCkBAIC00NCwxMSArNDQsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAKIAotI2RlZmluZSBWRVJTSU9OX1NUUiAiMC41LjAiCisjZGVmaW5lIFZFUlNJT05fU1RSICIwLjkuMCIKIAogI2RlZmluZSBERUZBVUxUX0lPRkVOQ0VfTUFSR0lOIDYwCS8qIERlZmF1bHQgZnVkZ2UgZmFjdG9yLCBpbiBzZWNvbmRzICovCiAjZGVmaW5lIERFRkFVTFRfSU9GRU5DRV9USUNLIDE4MAkvKiBEZWZhdWx0IHRpbWVyIHRpbWVvdXQsIGluIHNlY29uZHMgKi8KQEAgLTU2LDE4ICs1OSw4OSBAQAogc3RhdGljIGludCBoYW5nY2hlY2tfdGljayA9IERFRkFVTFRfSU9GRU5DRV9USUNLOwogc3RhdGljIGludCBoYW5nY2hlY2tfbWFyZ2luID0gREVGQVVMVF9JT0ZFTkNFX01BUkdJTjsKIHN0YXRpYyBpbnQgaGFuZ2NoZWNrX3JlYm9vdDsgIC8qIERlZmF1bHRzIHRvIG5vdCByZWJvb3QgKi8KK3N0YXRpYyBpbnQgaGFuZ2NoZWNrX2R1bXBfdGFza3M7ICAvKiBEZWZhdWx0cyB0byBub3QgZHVtcGluZyBTeXNSUSBUICovCiAKLS8qIERyaXZlciBvcHRpb25zICovCisvKiBvcHRpb25zIC0gbW9kdWxhciAqLwogbW9kdWxlX3BhcmFtKGhhbmdjaGVja190aWNrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhoYW5nY2hlY2tfdGljaywgIlRpbWVyIGRlbGF5LiIpOwogbW9kdWxlX3BhcmFtKGhhbmdjaGVja19tYXJnaW4sIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhhbmdjaGVja19tYXJnaW4sICJJZiB0aGUgaGFuZ2NoZWNrIHRpbWVyIGhhcyBiZWVuIGRlbGF5ZWQgbW9yZSB0aGFuIGhhbmdjaGVja19tYXJnaW4gc2Vjb25kcywgdGhlIGRyaXZlciB3aWxsIGZpcmUuIik7CiBtb2R1bGVfcGFyYW0oaGFuZ2NoZWNrX3JlYm9vdCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaGFuZ2NoZWNrX3JlYm9vdCwgIklmIG5vbnplcm8sIHRoZSBtYWNoaW5lIHdpbGwgcmVib290IHdoZW4gdGhlIHRpbWVyIG1hcmdpbiBpcyBleGNlZWRlZC4iKTsKK21vZHVsZV9wYXJhbShoYW5nY2hlY2tfZHVtcF90YXNrcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaGFuZ2NoZWNrX2R1bXBfdGFza3MsICJJZiBub256ZXJvLCB0aGUgbWFjaGluZSB3aWxsIGR1bXAgdGhlIHN5c3RlbSB0YXNrIHN0YXRlIHdoZW4gdGhlIHRpbWVyIG1hcmdpbiBpcyBleGNlZWRlZC4iKTsKIAotTU9EVUxFX0FVVEhPUigiSm9lbCBCZWNrZXIiKTsKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJIYW5nY2hlY2stdGltZXIgZGV0ZWN0cyB3aGVuIHRoZSBzeXN0ZW0gaGFzIGdvbmUgb3V0IHRvIGx1bmNoIHBhc3QgYSBjZXJ0YWluIG1hcmdpbi4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT05fU1RSKTsKKworLyogb3B0aW9ucyAtIG5vbm1vZHVsYXIgKi8KKyNpZm5kZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IGhhbmdjaGVja19wYXJzZV90aWNrKGNoYXIgKnN0cikKK3sKKwlpbnQgcGFyOworCWlmIChnZXRfb3B0aW9uKCZzdHIsJnBhcikpCisJCWhhbmdjaGVja190aWNrID0gcGFyOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9faW5pdCBoYW5nY2hlY2tfcGFyc2VfbWFyZ2luKGNoYXIgKnN0cikKK3sKKwlpbnQgcGFyOworCWlmIChnZXRfb3B0aW9uKCZzdHIsJnBhcikpCisJCWhhbmdjaGVja19tYXJnaW4gPSBwYXI7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGhhbmdjaGVja19wYXJzZV9yZWJvb3QoY2hhciAqc3RyKQoreworCWludCBwYXI7CisJaWYgKGdldF9vcHRpb24oJnN0ciwmcGFyKSkKKwkJaGFuZ2NoZWNrX3JlYm9vdCA9IHBhcjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgaGFuZ2NoZWNrX3BhcnNlX2R1bXBfdGFza3MoY2hhciAqc3RyKQoreworCWludCBwYXI7CisJaWYgKGdldF9vcHRpb24oJnN0ciwmcGFyKSkKKwkJaGFuZ2NoZWNrX2R1bXBfdGFza3MgPSBwYXI7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImhjaGVja190aWNrIiwgaGFuZ2NoZWNrX3BhcnNlX3RpY2spOworX19zZXR1cCgiaGNoZWNrX21hcmdpbiIsIGhhbmdjaGVja19wYXJzZV9tYXJnaW4pOworX19zZXR1cCgiaGNoZWNrX3JlYm9vdCIsIGhhbmdjaGVja19wYXJzZV9yZWJvb3QpOworX19zZXR1cCgiaGNoZWNrX2R1bXBfdGFza3MiLCBoYW5nY2hlY2tfcGFyc2VfZHVtcF90YXNrcyk7CisjZW5kaWYgLyogbm90IE1PRFVMRSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjIGRlZmluZSBIQVZFX01PTk9UT05JQworIyBkZWZpbmUgVElNRVJfRlJFUSAxMDAwMDAwMDAwVUxMCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzOTApCisvKiBGQTI0MDAwMCBpcyAxIFNlY29uZCBpbiB0aGUgSUJNIHRpbWUgdW5pdmVyc2UgKFBhZ2UgNC0zOCBQcmluY2lwbGVzIG9mIE9wIGZvciB6U2VyaWVzICovCisjIGRlZmluZSBUSU1FUl9GUkVRIDB4RkEyNDAwMDBVTEwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0lBNjQpCisjIGRlZmluZSBUSU1FUl9GUkVRICgodW5zaWduZWQgbG9uZyBsb25nKWxvY2FsX2NwdV9kYXRhLT5pdGNfZnJlcSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorIyBkZWZpbmUgVElNRVJfRlJFUSAoSFoqbG9vcHNfcGVyX2ppZmZ5KQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01PTk9UT05JQworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtb25vdG9uaWNfY2xvY2sodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbW9ub3RvbmljX2Nsb2NrKHZvaWQpCit7CisjIGlmZGVmIF9fczM5MF9fCisJLyogcmV0dXJucyB0aGUgVE9ELiAgc2VlIDQtMzggUHJpbmNpcGxlcyBvZiBPcCBvZiB6U2VyaWVzICovCisJcmV0dXJuIGdldF9jbG9jaygpOworIyBlbHNlCisJcmV0dXJuIGdldF9jeWNsZXMoKTsKKyMgZW5kaWYgIC8qIF9fczM5MF9fICovCit9CisjZW5kaWYgIC8qIEhBVkVfTU9OT1RPTklDICovCiAKIAogLyogTGFzdCB0aW1lIHNjaGVkdWxlZCAqLwpAQCAtNzgsNyArMTUyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoYW5nY2hlY2tfdGlja3RvY2sgPQogCQlUSU1FUl9JTklUSUFMSVpFUihoYW5nY2hlY2tfZmlyZSwgMCwgMCk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbW9ub3RvbmljX2Nsb2NrKHZvaWQpOwogCiBzdGF0aWMgdm9pZCBoYW5nY2hlY2tfZmlyZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC05Miw2ICsxNjUsMTIgQEAKIAkJdHNjX2RpZmYgPSAoY3VyX3RzYyArICh+MFVMTCAtIGhhbmdjaGVja190c2MpKTsgLyogb3Igc29tZXRoaW5nICovCiAKIAlpZiAodHNjX2RpZmYgPiBoYW5nY2hlY2tfdHNjX21hcmdpbikgeworCQlpZiAoaGFuZ2NoZWNrX2R1bXBfdGFza3MpIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgIkhhbmdjaGVjazogVGFzayBzdGF0ZTpcbiIpOworI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQorCQkJaGFuZGxlX3N5c3JxKCd0JywgTlVMTCwgTlVMTCk7CisjZW5kaWYgIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLworCQl9CiAJCWlmIChoYW5nY2hlY2tfcmVib290KSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJIYW5nY2hlY2s6IGhhbmdjaGVjayBpcyByZXN0YXJ0aW5nIHRoZSBtYWNoaW5lLlxuIik7CiAJCQltYWNoaW5lX3Jlc3RhcnQoTlVMTCk7CkBAIC0xMDgsMTAgKzE4NywxNiBAQAogewogCXByaW50aygiSGFuZ2NoZWNrOiBzdGFydGluZyBoYW5nY2hlY2sgdGltZXIgJXMgKHRpY2sgaXMgJWQgc2Vjb25kcywgbWFyZ2luIGlzICVkIHNlY29uZHMpLlxuIiwKIAkgICAgICAgVkVSU0lPTl9TVFIsIGhhbmdjaGVja190aWNrLCBoYW5nY2hlY2tfbWFyZ2luKTsKLQotCWhhbmdjaGVja190c2NfbWFyZ2luID0gaGFuZ2NoZWNrX21hcmdpbiArIGhhbmdjaGVja190aWNrOwotCWhhbmdjaGVja190c2NfbWFyZ2luICo9IDEwMDAwMDAwMDA7Ci0KKyNpZiBkZWZpbmVkIChIQVZFX01PTk9UT05JQykKKwlwcmludGsoIkhhbmdjaGVjazogVXNpbmcgbW9ub3RvbmljX2Nsb2NrKCkuXG4iKTsKKyNlbGlmIGRlZmluZWQoX19zMzkwX18pCisJcHJpbnRrKCJIYW5nY2hlY2s6IFVzaW5nIFRPRC5cbiIpOworI2Vsc2UKKwlwcmludGsoIkhhbmdjaGVjazogVXNpbmcgZ2V0X2N5Y2xlcygpLlxuIik7CisjZW5kaWYgIC8qIEhBVkVfTU9OT1RPTklDICovCisJaGFuZ2NoZWNrX3RzY19tYXJnaW4gPQorCQkodW5zaWduZWQgbG9uZyBsb25nKShoYW5nY2hlY2tfbWFyZ2luICsgaGFuZ2NoZWNrX3RpY2spOworCWhhbmdjaGVja190c2NfbWFyZ2luICo9ICh1bnNpZ25lZCBsb25nIGxvbmcpVElNRVJfRlJFUTsKIAogCWhhbmdjaGVja190c2MgPSBtb25vdG9uaWNfY2xvY2soKTsKIAltb2RfdGltZXIoJmhhbmdjaGVja190aWNrdG9jaywgamlmZmllcyArIChoYW5nY2hlY2tfdGljaypIWikpOwpAQCAtMTIzLDYgKzIwOCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgaGFuZ2NoZWNrX2V4aXQodm9pZCkKIHsKIAlkZWxfdGltZXJfc3luYygmaGFuZ2NoZWNrX3RpY2t0b2NrKTsKKyAgICAgICAgcHJpbnRrKCJIYW5nY2hlY2s6IFN0b3BwZWQgaGFuZ2NoZWNrIHRpbWVyLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGhhbmdjaGVja19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwppbmRleCAyMjViMzMwMS4uNWNlOWM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9idF9zbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwpAQCAtMjM1LDcgKzIzNSw2IEBACiAJaWYgKEJUX1NUQVRVUyAmIEJUX0JfQlVTWSkgQlRfQ09OVFJPTChCVF9CX0JVU1kpOwogCUJUX0NPTlRST0woQlRfQ0xSX1dSX1BUUik7CiAJQlRfQ09OVFJPTChCVF9TTVNfQVROKTsKLQlCVF9JTlRNQVNLX1coQlRfQk1DX0hXUlNUKTsKICNpZmRlZiBERVZFTE9QTUVOVF9PTkxZX05PVF9GT1JfUFJPRFVDVElPTgogCWlmIChCVF9TVEFUVVMgJiBCVF9CMkhfQVROKSB7CiAJCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwppbmRleCBhNjYwNmExLi5kN2ZiNDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwpAQCAtMjU4OCwyOCArMjU4OCwyMCBAQAogCWRlbGl2ZXJfcmVzcG9uc2UobXNnKTsKIH0KIAotc3RhdGljIHZvaWQKLXNlbmRfZnJvbV9yZWN2X21zZyhpcG1pX3NtaV90IGludGYsIHN0cnVjdCBpcG1pX3JlY3ZfbXNnICpyZWN2X21zZywKLQkJICAgc3RydWN0IGlwbWlfc21pX21zZyAqc21pX21zZywKLQkJICAgdW5zaWduZWQgY2hhciBzZXEsIGxvbmcgc2VxaWQpCitzdGF0aWMgc3RydWN0IGlwbWlfc21pX21zZyAqCitzbWlfZnJvbV9yZWN2X21zZyhpcG1pX3NtaV90IGludGYsIHN0cnVjdCBpcG1pX3JlY3ZfbXNnICpyZWN2X21zZywKKwkJICB1bnNpZ25lZCBjaGFyIHNlcSwgbG9uZyBzZXFpZCkKIHsKLQlpZiAoIXNtaV9tc2cpCi0JCXNtaV9tc2cgPSBpcG1pX2FsbG9jX3NtaV9tc2coKTsKKwlzdHJ1Y3QgaXBtaV9zbWlfbXNnICpzbWlfbXNnID0gaXBtaV9hbGxvY19zbWlfbXNnKCk7CiAJaWYgKCFzbWlfbXNnKQogCQkvKiBJZiB3ZSBjYW4ndCBhbGxvY2F0ZSB0aGUgbWVzc2FnZSwgdGhlbiBqdXN0IHJldHVybiwgd2UKIAkJICAgZ2V0IDQgcmV0cmllcywgc28gdGhpcyBzaG91bGQgYmUgb2suICovCi0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAKIAltZW1jcHkoc21pX21zZy0+ZGF0YSwgcmVjdl9tc2ctPm1zZy5kYXRhLCByZWN2X21zZy0+bXNnLmRhdGFfbGVuKTsKIAlzbWlfbXNnLT5kYXRhX3NpemUgPSByZWN2X21zZy0+bXNnLmRhdGFfbGVuOwogCXNtaV9tc2ctPm1zZ2lkID0gU1RPUkVfU0VRX0lOX01TR0lEKHNlcSwgc2VxaWQpOwogCQkKLQkvKiBTZW5kIHRoZSBuZXcgbWVzc2FnZS4gIFdlIHNlbmQgd2l0aCBhIHplcm8gcHJpb3JpdHkuICBJdAotCSAgIHRpbWVkIG91dCwgSSBkb3VidCB0aW1lIGlzIHRoYXQgY3JpdGljYWwgbm93LCBhbmQgaGlnaAotCSAgIHByaW9yaXR5IG1lc3NhZ2VzIGFyZSByZWFsbHkgb25seSBmb3IgbWVzc2FnZXMgdG8gdGhlIGxvY2FsCi0JICAgTUMsIHdoaWNoIGRvbid0IGdldCByZXNlbnQuICovCi0JaW50Zi0+aGFuZGxlcnMtPnNlbmRlcihpbnRmLT5zZW5kX2luZm8sIHNtaV9tc2csIDApOwotCiAjaWZkZWYgREVCVUdfTVNHSU5HCiAJewogCQlpbnQgbTsKQEAgLTI2MTksNiArMjYxMSw3IEBACiAJCXByaW50aygiXG4iKTsKIAl9CiAjZW5kaWYKKwlyZXR1cm4gc21pX21zZzsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI2ODMsMTQgKzI2NzYsMTMgQEAKIAkJCQkJaW50Zi0+dGltZWRfb3V0X2lwbWJfY29tbWFuZHMrKzsKIAkJCQlzcGluX3VubG9jaygmaW50Zi0+Y291bnRlcl9sb2NrKTsKIAkJCX0gZWxzZSB7CisJCQkJc3RydWN0IGlwbWlfc21pX21zZyAqc21pX21zZzsKIAkJCQkvKiBNb3JlIHJldHJpZXMsIHNlbmQgYWdhaW4uICovCiAKIAkJCQkvKiBTdGFydCB3aXRoIHRoZSBtYXggdGltZXIsIHNldCB0byBub3JtYWwKIAkJCQkgICB0aW1lciBhZnRlciB0aGUgbWVzc2FnZSBpcyBzZW50LiAqLwogCQkJCWVudC0+dGltZW91dCA9IE1BWF9NU0dfVElNRU9VVDsKIAkJCQllbnQtPnJldHJpZXNfbGVmdC0tOwotCQkJCXNlbmRfZnJvbV9yZWN2X21zZyhpbnRmLCBlbnQtPnJlY3ZfbXNnLCBOVUxMLAotCQkJCQkJICAgaiwgZW50LT5zZXFpZCk7CiAJCQkJc3Bpbl9sb2NrKCZpbnRmLT5jb3VudGVyX2xvY2spOwogCQkJCWlmIChlbnQtPnJlY3ZfbXNnLT5hZGRyLmFkZHJfdHlwZQogCQkJCSAgICA9PSBJUE1JX0xBTl9BRERSX1RZUEUpCkBAIC0yNjk4LDYgKzI2OTAsMjAgQEAKIAkJCQllbHNlCiAJCQkJCWludGYtPnJldHJhbnNtaXR0ZWRfaXBtYl9jb21tYW5kcysrOwogCQkJCXNwaW5fdW5sb2NrKCZpbnRmLT5jb3VudGVyX2xvY2spOworCQkJCXNtaV9tc2cgPSBzbWlfZnJvbV9yZWN2X21zZyhpbnRmLAorCQkJCQkJZW50LT5yZWN2X21zZywgaiwgZW50LT5zZXFpZCk7CisJCQkJaWYoIXNtaV9tc2cpCisJCQkJCWNvbnRpbnVlOworCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKGludGYtPnNlcV9sb2NrKSxmbGFncyk7CisJCQkJLyogU2VuZCB0aGUgbmV3IG1lc3NhZ2UuICBXZSBzZW5kIHdpdGggYSB6ZXJvCisJCQkJICogcHJpb3JpdHkuICBJdCB0aW1lZCBvdXQsIEkgZG91YnQgdGltZSBpcworCQkJCSAqIHRoYXQgY3JpdGljYWwgbm93LCBhbmQgaGlnaCBwcmlvcml0eQorCQkJCSAqIG1lc3NhZ2VzIGFyZSByZWFsbHkgb25seSBmb3IgbWVzc2FnZXMgdG8gdGhlCisJCQkJICogbG9jYWwgTUMsIHdoaWNoIGRvbid0IGdldCByZXNlbnQuICovCisJCQkJaW50Zi0+aGFuZGxlcnMtPnNlbmRlcihpbnRmLT5zZW5kX2luZm8sCisJCQkJCQkJc21pX21zZywgMCk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJihpbnRmLT5zZXFfbG9jayksIGZsYWdzKTsKIAkJCX0KIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaW50Zi0+c2VxX2xvY2spLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IDI5ZGUyNTkuLjU0MTk0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0xMDAsNiArMTAwLDExIEBACiAJLyogRklYTUUgLSBhZGQgd2F0Y2hkb2cgc3R1ZmYuICovCiB9OwogCisvKiBTb21lIEJULXNwZWNpZmljIGRlZmluZXMgd2UgbmVlZCBoZXJlLiAqLworI2RlZmluZSBJUE1JX0JUX0lOVE1BU0tfUkVHCQkyCisjZGVmaW5lIElQTUlfQlRfSU5UTUFTS19DTEVBUl9JUlFfQklUCTIKKyNkZWZpbmUgSVBNSV9CVF9JTlRNQVNLX0VOQUJMRV9JUlFfQklUCTEKKwogZW51bSBzaV90eXBlIHsKICAgICBTSV9LQ1MsIFNJX1NNSUMsIFNJX0JUCiB9OwpAQCAtODc1LDYgKzg4MCwxNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGlycXJldHVybl90IHNpX2J0X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8gPSBkYXRhOworCS8qIFdlIG5lZWQgdG8gY2xlYXIgdGhlIElSUSBmbGFnIGZvciB0aGUgQlQgaW50ZXJmYWNlLiAqLworCXNtaV9pbmZvLT5pby5vdXRwdXRiKCZzbWlfaW5mby0+aW8sIElQTUlfQlRfSU5UTUFTS19SRUcsCisJCQkgICAgIElQTUlfQlRfSU5UTUFTS19DTEVBUl9JUlFfQklUCisJCQkgICAgIHwgSVBNSV9CVF9JTlRNQVNLX0VOQUJMRV9JUlFfQklUKTsKKwlyZXR1cm4gc2lfaXJxX2hhbmRsZXIoaXJxLCBkYXRhLCByZWdzKTsKK30KKworCiBzdGF0aWMgc3RydWN0IGlwbWlfc21pX2hhbmRsZXJzIGhhbmRsZXJzID0KIHsKIAkub3duZXIgICAgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLApAQCAtMTAwMSwxMSArMTAxNywyMiBAQAogCWlmICghaW5mby0+aXJxKQogCQlyZXR1cm4gMDsKIAotCXJ2ID0gcmVxdWVzdF9pcnEoaW5mby0+aXJxLAotCQkJIHNpX2lycV9oYW5kbGVyLAotCQkJIFNBX0lOVEVSUlVQVCwKLQkJCSBERVZJQ0VfTkFNRSwKLQkJCSBpbmZvKTsKKwlpZiAoaW5mby0+c2lfdHlwZSA9PSBTSV9CVCkgeworCQlydiA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwKKwkJCQkgc2lfYnRfaXJxX2hhbmRsZXIsCisJCQkJIFNBX0lOVEVSUlVQVCwKKwkJCQkgREVWSUNFX05BTUUsCisJCQkJIGluZm8pOworCQlpZiAoIXJ2KQorCQkJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIEJUIGludGVyZmFjZS4gKi8KKwkJCWluZm8tPmlvLm91dHB1dGIoJmluZm8tPmlvLCBJUE1JX0JUX0lOVE1BU0tfUkVHLAorCQkJCQkgSVBNSV9CVF9JTlRNQVNLX0VOQUJMRV9JUlFfQklUKTsKKwl9IGVsc2UKKwkJcnYgPSByZXF1ZXN0X2lycShpbmZvLT5pcnEsCisJCQkJIHNpX2lycV9oYW5kbGVyLAorCQkJCSBTQV9JTlRFUlJVUFQsCisJCQkJIERFVklDRV9OQU1FLAorCQkJCSBpbmZvKTsKIAlpZiAocnYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgImlwbWlfc2k6ICVzIHVuYWJsZSB0byBjbGFpbSBpbnRlcnJ1cHQgJWQsIgpAQCAtMTAyNCw2ICsxMDUxLDkgQEAKIAlpZiAoIWluZm8tPmlycSkKIAkJcmV0dXJuOwogCisJaWYgKGluZm8tPnNpX3R5cGUgPT0gU0lfQlQpCisJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCBpbiB0aGUgQlQgaW50ZXJmYWNlLiAqLworCQlpbmZvLT5pby5vdXRwdXRiKCZpbmZvLT5pbywgSVBNSV9CVF9JTlRNQVNLX1JFRywgMCk7CiAJZnJlZV9pcnEoaW5mby0+aXJxLCBpbmZvKTsKIH0KIApAQCAtMTUyNiw4ICsxNTU2LDE3IEBACiAJCWluZm8tPmlycV9zZXR1cCA9IE5VTEw7CiAJfQogCi0JcmVnc3BhY2luZ3NbaW50Zl9udW1dID0gc3BtaS0+YWRkci5yZWdpc3Rlcl9iaXRfd2lkdGggLyA4OwotCWluZm8tPmlvLnJlZ3NwYWNpbmcgPSBzcG1pLT5hZGRyLnJlZ2lzdGVyX2JpdF93aWR0aCAvIDg7CisJaWYgKHNwbWktPmFkZHIucmVnaXN0ZXJfYml0X3dpZHRoKSB7CisJCS8qIEEgKGhvcGVmdWxseSkgcHJvcGVybHkgZm9ybWVkIHJlZ2lzdGVyIGJpdCB3aWR0aC4gKi8KKwkJcmVnc3BhY2luZ3NbaW50Zl9udW1dID0gc3BtaS0+YWRkci5yZWdpc3Rlcl9iaXRfd2lkdGggLyA4OworCQlpbmZvLT5pby5yZWdzcGFjaW5nID0gc3BtaS0+YWRkci5yZWdpc3Rlcl9iaXRfd2lkdGggLyA4OworCX0gZWxzZSB7CisJCS8qIFNvbWUgYnJva2VuIHN5c3RlbXMgZ2V0IHRoaXMgd3JvbmcgYW5kIHNldCB0aGUgdmFsdWUKKwkJICogdG8gemVyby4gIEFzc3VtZSBpdCBpcyB0aGUgZGVmYXVsdCBzcGFjaW5nLiAgSWYgdGhhdAorCQkgKiBpcyB3cm9uZywgdG9vIGJhZCwgdGhlIHZlbmRvciBzaG91bGQgZml4IHRoZSB0YWJsZXMuICovCisJCXJlZ3NwYWNpbmdzW2ludGZfbnVtXSA9IERFRkFVTFRfUkVHU1BBQ0lORzsKKwkJaW5mby0+aW8ucmVnc3BhY2luZyA9IERFRkFVTFRfUkVHU1BBQ0lORzsKKwl9CiAJcmVnc2l6ZXNbaW50Zl9udW1dID0gcmVnc3BhY2luZ3NbaW50Zl9udW1dOwogCWluZm8tPmlvLnJlZ3NpemUgPSByZWdzaXplc1tpbnRmX251bV07CiAJcmVnc2hpZnRzW2ludGZfbnVtXSA9IHNwbWktPmFkZHIucmVnaXN0ZXJfYml0X29mZnNldDsKQEAgLTE2MjMsNyArMTY2MiwxMyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogT2xkIERNSSBzcGVjLiAqLwotCQlpcG1pX2RhdGEtPmJhc2VfYWRkciA9IGJhc2VfYWRkcjsKKwkJLyogTm90ZSB0aGF0IHRlY2huaWNhbGx5LCB0aGUgbG93ZXIgYml0IG9mIHRoZSBiYXNlCisJCSAqIGFkZHJlc3Mgc2hvdWxkIGJlIDEgaWYgdGhlIGFkZHJlc3MgaXMgSS9PIGFuZCAwIGlmCisJCSAqIHRoZSBhZGRyZXNzIGlzIGluIG1lbW9yeS4gIFNvIG1hbnkgc3lzdGVtcyBnZXQgdGhhdAorCQkgKiB3cm9uZyAoYW5kIGFsbCB0aGF0IEkgaGF2ZSBzZWVuIGFyZSBJL08pIHNvIHdlIGp1c3QKKwkJICogaWdub3JlIHRoYXQgYml0IGFuZCBhc3N1bWUgSS9PLiAgU3lzdGVtcyB0aGF0IHVzZQorCQkgKiBtZW1vcnkgc2hvdWxkIHVzZSB0aGUgbmV3ZXIgc3BlYywgYW55d2F5LiAqLworCQlpcG1pX2RhdGEtPmJhc2VfYWRkciA9IGJhc2VfYWRkciAmIDB4ZmZmZTsKIAkJaXBtaV9kYXRhLT5hZGRyX3NwYWNlID0gSVBNSV9JT19BRERSX1NQQUNFOwogCQlpcG1pX2RhdGEtPm9mZnNldCA9IDE7CiAJfQpAQCAtMjE5OSw3ICsyMjQ0LDcgQEAKIAkvKiBXYWl0IHVudGlsIHdlIGtub3cgdGhhdCB3ZSBhcmUgb3V0IG9mIGFueSBpbnRlcnJ1cHQKIAkgICBoYW5kbGVycyBtaWdodCBoYXZlIGJlZW4gcnVubmluZyBiZWZvcmUgd2UgZnJlZWQgdGhlCiAJICAgaW50ZXJydXB0LiAqLwotCXN5bmNocm9uaXplX2tlcm5lbCgpOworCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKIAlpZiAobmV3X3NtaS0+c2lfc20pIHsKIAkJaWYgKG5ld19zbWktPmhhbmRsZXJzKQpAQCAtMjMxMiw3ICsyMzU3LDcgQEAKIAkvKiBXYWl0IHVudGlsIHdlIGtub3cgdGhhdCB3ZSBhcmUgb3V0IG9mIGFueSBpbnRlcnJ1cHQKIAkgICBoYW5kbGVycyBtaWdodCBoYXZlIGJlZW4gcnVubmluZyBiZWZvcmUgd2UgZnJlZWQgdGhlCiAJICAgaW50ZXJydXB0LiAqLwotCXN5bmNocm9uaXplX2tlcm5lbCgpOworCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKIAkvKiBXYWl0IGZvciB0aGUgdGltZXIgdG8gc3RvcC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggcmFjZQogCSAgIGNvbmRpdGlvbnMgcmVtb3ZpbmcgdGhlIHRpbWVyIGhlcmUuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKaW5kZXggZmQ3MDkzOC4uZmNkMWMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwpAQCAtNzA5LDExICs3MDksMTEgQEAKIAkJaWYgKGV4cGVjdF9jbG9zZSA9PSA0MikgewogCQkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9OT05FOwogCQkJaXBtaV9zZXRfdGltZW91dChJUE1JX1NFVF9USU1FT1VUX05PX0hCKTsKLQkJCWNsZWFyX2JpdCgwLCAmaXBtaV93ZG9nX29wZW4pOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQkJaXBtaV9oZWFydGJlYXQoKTsKIAkJfQorCQljbGVhcl9iaXQoMCwgJmlwbWlfd2RvZ19vcGVuKTsKIAl9CiAKIAlpcG1pX2Zhc3luYyAoLTEsIGZpbGVwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCmluZGV4IGE5MWFlMjcuLjc2Mzg5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAvKiBTZXQgdGhlIG1hc2sgdG8gYWxsLW9uZXMuIFRoaXMgYWxhcywgb25seSBzdXBwb3J0cyAzMiBpbnRlcnJ1cHRzLiAKICAgIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgbmVlZCBtb3JlLiAtLSBDaGFuZ2VkIHRvIExPTkcgdG8KICAgIHN1cHBvcnQgdXAgdG8gNjQgYml0cyBvbiA2NGJpdCBhcmNoaXRlY3R1cmVzLiAtLSBSRVcgMjAvMDYvOTkgKi8KLWxvbmcgcmlvX2lycW1hc2sgPSAtMTsKK3N0YXRpYyBsb25nIHJpb19pcnFtYXNrID0gLTE7CiAKIE1PRFVMRV9BVVRIT1IoIlJvZ2llciBXb2xmZiA8Ui5FLldvbGZmQGJpdHdpemFyZC5ubD4sIFBhdHJpY2sgdmFuIGRlIExhZ2V3ZWcgPHBhdHJpY2tAYml0d2l6YXJkLm5sPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSSU8gZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCmluZGV4IDhlNjFiZTMuLmVkODY3ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogLyogVGltZSByZWFkL3dyaXRlICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX2dldHRpbWUoc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX2dldHRpbWUoc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCiB7CiAJdW5zaWduZWQgaW50IGhhdmVfcmV0cmllZCA9IDA7CiAKQEAgLTE1MSw2ICsxNTEsOCBAQAogCiAJcnRjX3RtLT50bV95ZWFyICs9IDEwMDsKIAlydGNfdG0tPnRtX21vbiAtPSAxOworCisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTcxLDcgKzE3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX2dldGFsYXJtKHN0cnVjdCBydGNfd2thbHJtICphbHJtKQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19nZXRhbGFybShzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgKmFsbV90bSA9ICZhbHJtLT50aW1lOwogCXVuc2lnbmVkIGludCBhbG1fZW47CkBAIC0yMzEsNiArMjMzLDggQEAKIAl9CiAKIAkvKiB0b2RvIC0gc2V0IGFscm0tPmVuYWJsZWQgPyAqLworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgczNjMjQxMF9ydGNfc2V0YWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggYzc4OWQ1Yy4uNTBlMGI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwpAQCAtMTk4NywxMCArMTk4Nyw5IEBACiAKIAlmdW5jX2VudGVyKCk7CiAJLyoKLQllcnJvciA9IHZlcmlmeV9hcmVhKFZFUklGWV9SRUFELCAodm9pZCAqKSBuZXdpbmZvLCBzaXplb2YodG1wKSk7Ci0JaWYgKGVycm9yKSB7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh2b2lkICopIG5ld2luZm8sIHNpemVvZih0bXApKSkgewogCQlmdW5jX2V4aXQoKTsKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJKi8KIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgbmV3aW5mbywgc2l6ZW9mKHRtcCkpKSB7CkBAIC0yMDQ2LDE0ICsyMDQ1LDEyIEBACiB7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOwogCXN0cnVjdCBzcGVjaWFsaXhfYm9hcmQgKmJwID0gcG9ydF9Cb2FyZChwb3J0KTsKLQkvLwlpbnQgZXJyb3I7CiAJCiAJZnVuY19lbnRlcigpOwogCiAJLyoKLQllcnJvciA9IHZlcmlmeV9hcmVhKFZFUklGWV9XUklURSwgKHZvaWQgKikgcmV0aW5mbywgc2l6ZW9mKHRtcCkpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHZvaWQgKikgcmV0aW5mbywgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAkqLwogCiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggZGUxNjY2MC4uYjg4OTlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGxfYXRvbChjaGFyICpzdHIpOwogCi1pbnQJCXN0bF9pbml0KHZvaWQpOworc3RhdGljIGludAlzdGxfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQJc3RsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQJc3RsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQJc3RsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTMwNjMsNyArMzA2Myw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IF9faW5pdCBzdGxfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3RsX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgc3RsX2RydnRpdGxlLCBzdGxfZHJ2dmVyc2lvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDVkMzg2ZjQuLjg5NzE0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC02NDEsNyArNjQyLDcgQEAKIAkJZXh0ZXJuIGludCBzcGF3bnBpZCwgc3Bhd25zaWc7CiAJCWlmICghcGVybSB8fCAhY2FwYWJsZShDQVBfS0lMTCkpCiAJCSAgcmV0dXJuIC1FUEVSTTsKLQkJaWYgKGFyZyA8IDEgfHwgYXJnID4gX05TSUcgfHwgYXJnID09IFNJR0tJTEwpCisJCWlmICghdmFsaWRfc2lnbmFsKGFyZykgfHwgYXJnIDwgMSB8fCBhcmcgPT0gU0lHS0lMTCkKIAkJICByZXR1cm4gLUVJTlZBTDsKIAkJc3Bhd25waWQgPSBjdXJyZW50LT5waWQ7CiAJCXNwYXduc2lnID0gYXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggYjMwMDAxZi4uOGU1NjEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAl9CiAJaWYgKCh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgICYmIGNpLT5vbGQgPCBjaS0+bmV3KSB8fAogCSAgICAodmFsID09IENQVUZSRVFfUE9TVENIQU5HRSAmJiBjaS0+b2xkID4gY2ktPm5ldykgfHwKLQkgICAgKHZhbCA9PSBDUFVGUkVRX1JFU1VNRUNIQU5HRSkpIHsKKwkgICAgKHZhbCA9PSBDUFVGUkVRX1JFU1VNRUNIQU5HRSB8fCB2YWwgPT0gQ1BVRlJFUV9TVVNQRU5EQ0hBTkdFKSkgewogCQlsb29wc19wZXJfamlmZnkgPSBjcHVmcmVxX3NjYWxlKGxfcF9qX3JlZiwgbF9wX2pfcmVmX2ZyZXEsIGNpLT5uZXcpOwogCQlkcHJpbnRrKCJzY2FsaW5nIGxvb3BzX3Blcl9qaWZmeSB0byAlbHUgZm9yIGZyZXF1ZW5jeSAldSBrSHpcbiIsIGxvb3BzX3Blcl9qaWZmeSwgY2ktPm5ldyk7CiAJfQpAQCAtODY2LDExICs4NjYsOTAgQEAKIAogCiAvKioKKyAqCWNwdWZyZXFfc3VzcGVuZCAtIGxldCB0aGUgbG93IGxldmVsIGRyaXZlciBwcmVwYXJlIGZvciBzdXNwZW5kCisgKi8KKworc3RhdGljIGludCBjcHVmcmVxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYsIHUzMiBzdGF0ZSkKK3sKKwlpbnQgY3B1ID0gc3lzZGV2LT5pZDsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3VyX2ZyZXEgPSAwOworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1X3BvbGljeTsKKworCWRwcmludGsoInJlc3VtaW5nIGNwdSAldVxuIiwgY3B1KTsKKworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlyZXR1cm4gMDsKKworCS8qIHdlIG1heSBiZSBsYXggaGVyZSBhcyBpbnRlcnJ1cHRzIGFyZSBvZmYuIE5vbmV0aGVsZXNzCisJICogd2UgbmVlZCB0byBncmFiIHRoZSBjb3JyZWN0IGNwdSBwb2xpY3ksIGFzIHRvIGNoZWNrCisJICogd2hldGhlciB3ZSByZWFsbHkgcnVuIG9uIHRoaXMgQ1BVLgorCSAqLworCisJY3B1X3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOworCWlmICghY3B1X3BvbGljeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBvbmx5IGhhbmRsZSBlYWNoIENQVSBncm91cCBvbmNlICovCisJaWYgKHVubGlrZWx5KGNwdV9wb2xpY3ktPmNwdSAhPSBjcHUpKSB7CisJCWNwdWZyZXFfY3B1X3B1dChjcHVfcG9saWN5KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNwdWZyZXFfZHJpdmVyLT5zdXNwZW5kKSB7CisJCXJldCA9IGNwdWZyZXFfZHJpdmVyLT5zdXNwZW5kKGNwdV9wb2xpY3ksIHN0YXRlKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBzdXNwZW5kIGZhaWxlZCBpbiAtPnN1c3BlbmQgIgorCQkJCQkic3RlcCBvbiBDUFUgJXVcbiIsIGNwdV9wb2xpY3ktPmNwdSk7CisJCQljcHVmcmVxX2NwdV9wdXQoY3B1X3BvbGljeSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisKKwlpZiAoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9DT05TVF9MT09QUykKKwkJZ290byBvdXQ7CisKKwlpZiAoY3B1ZnJlcV9kcml2ZXItPmdldCkKKwkJY3VyX2ZyZXEgPSBjcHVmcmVxX2RyaXZlci0+Z2V0KGNwdV9wb2xpY3ktPmNwdSk7CisKKwlpZiAoIWN1cl9mcmVxIHx8ICFjcHVfcG9saWN5LT5jdXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBzdXNwZW5kIGZhaWxlZCB0byBhc3NlcnQgY3VycmVudCAiCisJCSAgICAgICAiZnJlcXVlbmN5IGlzIHdoYXQgdGltaW5nIGNvcmUgdGhpbmtzIGl0IGlzLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseShjdXJfZnJlcSAhPSBjcHVfcG9saWN5LT5jdXIpKSB7CisJCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCisJCWlmICghKGNwdWZyZXFfZHJpdmVyLT5mbGFncyAmIENQVUZSRVFfUE1fTk9fV0FSTikpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBpcyAldSwgIgorCQkJICAgICAgICJjcHVmcmVxIGFzc3VtZWQgJXUga0h6LlxuIiwKKwkJCSAgICAgICBjdXJfZnJlcSwgY3B1X3BvbGljeS0+Y3VyKTsKKworCQlmcmVxcy5jcHUgPSBjcHU7CisJCWZyZXFzLm9sZCA9IGNwdV9wb2xpY3ktPmN1cjsKKwkJZnJlcXMubmV3ID0gY3VyX2ZyZXE7CisKKwkJbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QsCisJCQkJICAgIENQVUZSRVFfU1VTUEVORENIQU5HRSwgJmZyZXFzKTsKKwkJYWRqdXN0X2ppZmZpZXMoQ1BVRlJFUV9TVVNQRU5EQ0hBTkdFLCAmZnJlcXMpOworCisJCWNwdV9wb2xpY3ktPmN1ciA9IGN1cl9mcmVxOworCX0KKworIG91dDoKKwljcHVmcmVxX2NwdV9wdXQoY3B1X3BvbGljeSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICoJY3B1ZnJlcV9yZXN1bWUgLSAgcmVzdG9yZSBwcm9wZXIgQ1BVIGZyZXF1ZW5jeSBoYW5kbGluZyBhZnRlciByZXN1bWUKICAqCiAgKgkxLikgcmVzdW1lIENQVWZyZXEgaGFyZHdhcmUgc3VwcG9ydCAoY3B1ZnJlcV9kcml2ZXItPnJlc3VtZSgpKQogICoJMi4pIGlmIC0+dGFyZ2V0IGFuZCAhQ1BVRlJFUV9DT05TVF9MT09QUzogdmVyaWZ5IHdlJ3JlIGluIHN5bmMKLSAqCTMuKSBzY2hlZHVsZSBjYWxsIGNwdWZyZXFfdXBkYXRlX3BvbGljeSgpIEFTQVAgYXMgaW50ZXJydXB0cyBhcmUgcmVzdG9yZWQuCisgKgkzLikgc2NoZWR1bGUgY2FsbCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3koKSBBU0FQIGFzIGludGVycnVwdHMgYXJlCisgKgkgICAgcmVzdG9yZWQuCiAgKi8KIHN0YXRpYyBpbnQgY3B1ZnJlcV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCiB7CkBAIC05MTUsMjEgKzk5NCwyNiBAQAogCQkJY3VyX2ZyZXEgPSBjcHVmcmVxX2RyaXZlci0+Z2V0KGNwdV9wb2xpY3ktPmNwdSk7CiAKIAkJaWYgKCFjdXJfZnJlcSB8fCAhY3B1X3BvbGljeS0+Y3VyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IHJlc3VtZSBmYWlsZWQgdG8gYXNzZXJ0IGN1cnJlbnQgZnJlcXVlbmN5IGlzIHdoYXQgdGltaW5nIGNvcmUgdGhpbmtzIGl0IGlzLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IHJlc3VtZSBmYWlsZWQgdG8gYXNzZXJ0ICIKKwkJCQkJImN1cnJlbnQgZnJlcXVlbmN5IGlzIHdoYXQgdGltaW5nIGNvcmUgIgorCQkJCQkidGhpbmtzIGl0IGlzLlxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCiAJCWlmICh1bmxpa2VseShjdXJfZnJlcSAhPSBjcHVfcG9saWN5LT5jdXIpKSB7CiAJCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBpcyAldSwgIgotCQkJICAgICAgICJjcHVmcmVxIGFzc3VtZWQgJXUga0h6LlxuIiwgY3VyX2ZyZXEsIGNwdV9wb2xpY3ktPmN1cik7CisJCQlpZiAoIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX1BNX05PX1dBUk4pKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IENQVSBmcmVxdWVuY3kiCisJCQkJICAgICAgICJpcyAldSwgY3B1ZnJlcSBhc3N1bWVkICV1IGtIei5cbiIsCisJCQkJICAgICAgIGN1cl9mcmVxLCBjcHVfcG9saWN5LT5jdXIpOwogCiAJCQlmcmVxcy5jcHUgPSBjcHU7CiAJCQlmcmVxcy5vbGQgPSBjcHVfcG9saWN5LT5jdXI7CiAJCQlmcmVxcy5uZXcgPSBjdXJfZnJlcTsKIAotCQkJbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QsIENQVUZSRVFfUkVTVU1FQ0hBTkdFLCAmZnJlcXMpOworCQkJbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1ZnJlcV90cmFuc2l0aW9uX25vdGlmaWVyX2xpc3QsCisJCQkJCUNQVUZSRVFfUkVTVU1FQ0hBTkdFLCAmZnJlcXMpOwogCQkJYWRqdXN0X2ppZmZpZXMoQ1BVRlJFUV9SRVNVTUVDSEFOR0UsICZmcmVxcyk7CiAKIAkJCWNwdV9wb2xpY3ktPmN1ciA9IGN1cl9mcmVxOwpAQCAtOTQ1LDYgKzEwMjksNyBAQAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGNwdWZyZXFfc3lzZGV2X2RyaXZlciA9IHsKIAkuYWRkCQk9IGNwdWZyZXFfYWRkX2RldiwKIAkucmVtb3ZlCQk9IGNwdWZyZXFfcmVtb3ZlX2RldiwKKwkuc3VzcGVuZAk9IGNwdWZyZXFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGNwdWZyZXFfcmVzdW1lLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKaW5kZXggNmRjMjczYS4uNTY5ZjE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCkBAIC0xMjA0LDYgKzEyMDQsOCBAQAogCX0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQ19CTElOSyAqLwogCisJZGlzYWJsZV9pcnEocG1pZi0+aXJxKTsKKwogCS8qIFRoZSBtZWRpYSBiYXkgd2lsbCBoYW5kbGUgaXRzZWxmIGp1c3QgZmluZSAqLwogCWlmIChwbWlmLT5tZWRpYWJheSkKIAkJcmV0dXJuIDA7CkBAIC0xMjM2LDcgKzEyMzgsNiBAQAogCQlwcGNfbWQuZmVhdHVyZV9jYWxsKFBNQUNfRlRSX0lERV9FTkFCTEUsIHBtaWYtPm5vZGUsIHBtaWYtPmFhcGxfYnVzX2lkLCAxKTsKIAkJbXNsZWVwKDEwKTsKIAkJcHBjX21kLmZlYXR1cmVfY2FsbChQTUFDX0ZUUl9JREVfUkVTRVQsIHBtaWYtPm5vZGUsIHBtaWYtPmFhcGxfYnVzX2lkLCAwKTsKLQkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3MoSURFX1dBS0VVUF9ERUxBWSkpOwogCiAJCS8qIEthdWFpIGhhcyBpdCBkaWZmZXJlbnQgKi8KIAkJaWYgKHBtaWYtPmthdWFpX2ZjcikgewpAQCAtMTI0NCwxMSArMTI0NSwxNSBAQAogCQkJZmNyIHw9IEtBVUFJX0ZDUl9VQVRBX1JFU0VUX04gfCBLQVVBSV9GQ1JfVUFUQV9FTkFCTEU7CiAJCQl3cml0ZWwoZmNyLCBwbWlmLT5rYXVhaV9mY3IpOwogCQl9CisKKwkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3MoSURFX1dBS0VVUF9ERUxBWSkpOwogCX0KIAogCS8qIFNhbml0aXplIGRyaXZlIHRpbWluZ3MgKi8KIAlzYW5pdGl6ZV90aW1pbmdzKHBtaWYpOwogCisJZW5hYmxlX2lycShwbWlmLT5pcnEpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCmluZGV4IDk4NmYyMTguLjYzN2IzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwpAQCAtMzIsMTAgKzMyLDExIEBACiAgKiAkSWQkCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKICNpbmNsdWRlICJtdGhjYV9tZW1mcmVlLmgiCiAjaW5jbHVkZSAibXRoY2FfZGV2LmgiCiAjaW5jbHVkZSAibXRoY2FfY21kLmgiCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KIAogLyoKICAqIFdlIGFsbG9jYXRlIGluIGFzIGJpZyBjaHVua3MgYXMgd2UgY2FuLCB1cCB0byBhIG1heGltdW0gb2YgMjU2IEtCCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMKaW5kZXggYzc2Y2Y4Zi4uODc0MzY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZW9yYi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAKIAkJY2FzZSAnSyc6CQkJCS8qIEJ1dHRvbiBkYXRhICovCiAJCQlpZiAoc3BhY2VvcmItPmlkeCAhPSA1KSByZXR1cm47Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgc3BhY2VvcmJfYnV0dG9uc1tpXSwgKGRhdGFbMl0gPj4gaSkgJiAxKTsKIAogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggZjczMDRmMC4uZmY2NmVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtNjc4LDcgKzY3OCw3IEBACiAJYXRrYmRfZGlzYWJsZShhdGtiZCk7CiAKIAkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBhIGNvbW1hbmQgaW4gZmxpZ2h0ICovCi0Jc3luY2hyb25pemVfa2VybmVsKCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEFsbG93IGF0a2JkX2ludGVycnVwdCgpcyB0byBjb21wbGV0ZS4gKi8KIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZzZXJpby0+ZGV2LCAmYXRrYmRfYXR0cl9leHRyYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggMDYxNjM1My4uMTJkZWU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtNjAsMTIgKzYwLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Nfc2ltcGxlICpjYXBpX2NsYXNzOwogCi1pbnQgY2FwaV9tYWpvciA9IDY4OwkJLyogYWxsb2NhdGVkICovCitzdGF0aWMgaW50IGNhcGlfbWFqb3IgPSA2ODsJCS8qIGFsbG9jYXRlZCAqLwogI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogI2RlZmluZSBDQVBJTkNfTlJfUE9SVFMJMzIKICNkZWZpbmUgQ0FQSU5DX01BWF9QT1JUUwkyNTYKLWludCBjYXBpX3R0eW1ham9yID0gMTkxOwotaW50IGNhcGlfdHR5bWlub3JzID0gQ0FQSU5DX05SX1BPUlRTOworc3RhdGljIGludCBjYXBpX3R0eW1ham9yID0gMTkxOworc3RhdGljIGludCBjYXBpX3R0eW1pbm9ycyA9IENBUElOQ19OUl9QT1JUUzsKICNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KIAogbW9kdWxlX3BhcmFtX25hbWVkKG1ham9yLCBjYXBpX21ham9yLCB1aW50LCAwKTsKQEAgLTI2OCw3ICsyNjgsNyBAQAogCWtmcmVlKG1wKTsKIH0KIAotc3RydWN0IGNhcGltaW5vciAqY2FwaW1pbm9yX2ZpbmQodW5zaWduZWQgaW50IG1pbm9yKQorc3RhdGljIHN0cnVjdCBjYXBpbWlub3IgKmNhcGltaW5vcl9maW5kKHVuc2lnbmVkIGludCBtaW5vcikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCXN0cnVjdCBjYXBpbWlub3IgKnAgPSBOVUxMOwpAQCAtMTE2Niw3ICsxMTY2LDcgQEAKIAlyZXR1cm4gcm9vbTsKIH0KIAotaW50IGNhcGluY190dHlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgaW50IGNhcGluY190dHlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKCFtcCB8fCAhbXAtPm5jY2lwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKaW5kZXggMTZkYzU0MS4uMmNjOGIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwpAQCAtODksMTQgKzg5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfY29udHJvbGxlcl9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jb250cm9sbGVyX29wcyA9IHsKIAkuc3RhcnQJPSBjb250cm9sbGVyX3N0YXJ0LAogCS5uZXh0CT0gY29udHJvbGxlcl9uZXh0LAogCS5zdG9wCT0gY29udHJvbGxlcl9zdG9wLAogCS5zaG93CT0gY29udHJvbGxlcl9zaG93LAogfTsKIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9jb250cnN0YXRzX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NvbnRyc3RhdHNfb3BzID0gewogCS5zdGFydAk9IGNvbnRyb2xsZXJfc3RhcnQsCiAJLm5leHQJPSBjb250cm9sbGVyX25leHQsCiAJLnN0b3AJPSBjb250cm9sbGVyX3N0b3AsCkBAIC0xOTIsMTQgKzE5MiwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxpY2F0aW9uc19vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNlcV9hcHBsaWNhdGlvbnNfb3BzID0gewogCS5zdGFydAk9IGFwcGxpY2F0aW9uc19zdGFydCwKIAkubmV4dAk9IGFwcGxpY2F0aW9uc19uZXh0LAogCS5zdG9wCT0gYXBwbGljYXRpb25zX3N0b3AsCiAJLnNob3cJPSBhcHBsaWNhdGlvbnNfc2hvdywKIH07CiAKLXN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzZXFfYXBwbHN0YXRzX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2FwcGxzdGF0c19vcHMgPSB7CiAJLnN0YXJ0CT0gYXBwbGljYXRpb25zX3N0YXJ0LAogCS5uZXh0CT0gYXBwbGljYXRpb25zX25leHQsCiAJLnN0b3AJPSBhcHBsaWNhdGlvbnNfc3RvcCwKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NhcGlfZHJpdmVyX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX2NhcGlfZHJpdmVyX29wcyA9IHsKIAkuc3RhcnQJPSBjYXBpX2RyaXZlcl9zdGFydCwKIAkubmV4dAk9IGNhcGlfZHJpdmVyX25leHQsCiAJLnN0b3AJPSBjYXBpX2RyaXZlcl9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jIGIvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jCmluZGV4IDFlYjExMjIuLjBiZmQ2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMKQEAgLTM4Myw3ICszODMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjYWxsZWQgZnJvbSBjb21tb24gbW9kdWxlIG9uIGFuIGluY29taW5nIGNhbGwgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGlzZG5fZGl2ZXJ0X2ljYWxsKGlzZG5fY3RybCAqaWMpCitzdGF0aWMgaW50IGlzZG5fZGl2ZXJ0X2ljYWxsKGlzZG5fY3RybCAqaWMpCiB7IGludCByZXR2YWwgPSAwOwogICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICBzdHJ1Y3QgY2FsbF9zdHJ1YyAqY3MgPSBOVUxMOyAKQEAgLTU1Miw3ICs1NTIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBwdXQgYSBhZGRyZXNzIGluY2x1ZGluZyBhZGRyZXNzIHR5cGUgaW50byBidWZmZXIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHB1dF9hZGRyZXNzKGNoYXIgKnN0LCB1X2NoYXIgKnAsIGludCBsZW4pCitzdGF0aWMgaW50IHB1dF9hZGRyZXNzKGNoYXIgKnN0LCB1X2NoYXIgKnAsIGludCBsZW4pCiB7IHVfY2hhciByZXR2YWwgPSAwOwogICB1X2NoYXIgYWRyX3R5cCA9IDA7IC8qIG5ldHdvcmsgc3RhbmRhcmQgKi8KIApAQCAtNTk1LDcgKzU5NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIHJlcG9ydCBhIHN1Y2Nlc2Z1bGwgaW50ZXJyb2dhdGlvbiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgaW50ZXJyb2dhdGVfc3VjY2Vzcyhpc2RuX2N0cmwgKmljLCBzdHJ1Y3QgY2FsbF9zdHJ1YyAqY3MpCitzdGF0aWMgaW50IGludGVycm9nYXRlX3N1Y2Nlc3MoaXNkbl9jdHJsICppYywgc3RydWN0IGNhbGxfc3RydWMgKmNzKQogeyBjaGFyICpzcmMgPSBpYy0+cGFybS5kc3MxX2lvLmRhdGE7CiAgIGludCByZXN0bGVuID0gaWMtPnBhcm0uZHNzMV9pby5kYXRhbGVuOwogICBpbnQgY250ID0gMTsKQEAgLTY4OSw3ICs2ODksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGNhbGxiYWNrIGZvciBwcm90b2NvbCBzcGVjaWZpYyBleHRlbnNpb25zICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHByb3Rfc3RhdF9jYWxsYmFjayhpc2RuX2N0cmwgKmljKQorc3RhdGljIGludCBwcm90X3N0YXRfY2FsbGJhY2soaXNkbl9jdHJsICppYykKIHsgc3RydWN0IGNhbGxfc3RydWMgKmNzLCAqY3MxOwogICBpbnQgaTsKICAgdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc4MSw3ICs3ODEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIHN0YXR1cyBjYWxsYmFjayBmcm9tIEhMICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGlzZG5fZGl2ZXJ0X3N0YXRfY2FsbGJhY2soaXNkbl9jdHJsICppYykKK3N0YXRpYyBpbnQgaXNkbl9kaXZlcnRfc3RhdF9jYWxsYmFjayhpc2RuX2N0cmwgKmljKQogeyBzdHJ1Y3QgY2FsbF9zdHJ1YyAqY3MsICpjczE7CiAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgIGludCByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCmluZGV4IDhmOTNkMDEuLmRiNjU0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCkBAIC01NTUsNiArNTU1LDQyIEBACiAjZW5kaWYgLyogQ09ORklHX1BNQUNfQkFDS0xJR0hUICovCiAJCQlpbnB1dF9yZXBvcnRfa2V5KCZhZGJoaWRbaWRdLT5pbnB1dCwgS0VZX0JSSUdIVE5FU1NVUCwgZG93bik7CiAJCQlicmVhazsKKworCQljYXNlIDB4YzoJLyogdmlkZW9tb2RlIHN3aXRjaCAqLworCQkJaW5wdXRfcmVwb3J0X2tleSgmYWRiaGlkW2lkXS0+aW5wdXQsIEtFWV9TV0lUQ0hWSURFT01PREUsIGRvd24pOworCQkJYnJlYWs7CisKKwkJY2FzZSAweGQ6CS8qIGtleWJvYXJkIGlsbHVtaW5hdGlvbiB0b2dnbGUgKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoJmFkYmhpZFtpZF0tPmlucHV0LCBLRVlfS0JESUxMVU1UT0dHTEUsIGRvd24pOworCQkJYnJlYWs7CisKKwkJY2FzZSAweGU6CS8qIGtleWJvYXJkIGlsbHVtaW5hdGlvbiBkZWNyZWFzZSAqLworCQkJaW5wdXRfcmVwb3J0X2tleSgmYWRiaGlkW2lkXS0+aW5wdXQsIEtFWV9LQkRJTExVTURPV04sIGRvd24pOworCQkJYnJlYWs7CisKKwkJY2FzZSAweGY6CisJCQlzd2l0Y2ggKGRhdGFbMV0pIHsKKwkJCWNhc2UgMHg4ZjoKKwkJCWNhc2UgMHgwZjoKKwkJCQkvKiBrZXlib2FyZCBpbGx1bWluYXRpb24gaW5jcmVhc2UgKi8KKwkJCQlpbnB1dF9yZXBvcnRfa2V5KCZhZGJoaWRbaWRdLT5pbnB1dCwgS0VZX0tCRElMTFVNVVAsIGRvd24pOworCQkJCWJyZWFrOworCisJCQljYXNlIDB4N2Y6CisJCQljYXNlIDB4ZmY6CisJCQkJLyoga2V5cGFkIG92ZXJsYXkgdG9vZ2xlICovCisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5oYW5kbGVkIEFEQl9NSVNDIGV2ZW50ICUwMngsICUwMngsICUwMngsICUwMnhcbiIsCisJCQkJICAgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJVbmhhbmRsZWQgQURCX01JU0MgZXZlbnQgJTAyeCwgJTAyeCwgJTAyeCwgJTAyeFxuIiwKKwkJCSAgICAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKwkJCWJyZWFrOwogCQl9CiAJICB9CiAJICBicmVhazsKQEAgLTc3NSw2ICs4MTEsMTAgQEAKIAkJCXNldF9iaXQoS0VZX0JSSUdIVE5FU1NVUCwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKIAkJCXNldF9iaXQoS0VZX0JSSUdIVE5FU1NET1dOLCBhZGJoaWRbaWRdLT5pbnB1dC5rZXliaXQpOwogCQkJc2V0X2JpdChLRVlfRUpFQ1RDRCwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKKwkJCXNldF9iaXQoS0VZX1NXSVRDSFZJREVPTU9ERSwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKKwkJCXNldF9iaXQoS0VZX0tCRElMTFVNVE9HR0xFLCBhZGJoaWRbaWRdLT5pbnB1dC5rZXliaXQpOworCQkJc2V0X2JpdChLRVlfS0JESUxMVU1ET1dOLCBhZGJoaWRbaWRdLT5pbnB1dC5rZXliaXQpOworCQkJc2V0X2JpdChLRVlfS0JESUxMVU1VUCwgYWRiaGlkW2lkXS0+aW5wdXQua2V5Yml0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChhZGJoaWRbaWRdLT5uYW1lWzBdKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCmluZGV4IGZkZWExYTMuLmU2NTRhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTIzNTEsNiArMjM1MSwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAorCS8qIERpc2FibGUgY2xvY2sgc3ByZWFkaW5nIG9uIHNvbWUgbWFjaGluZXMgKi8KKwlwbWFjX3R3ZWFrX2Nsb2NrX3NwcmVhZGluZygwKTsKKworCS8qIFN0b3AgcHJlZW1wdGlvbiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJLyogTWFrZSBzdXJlIHRoZSBkZWNyZW1lbnRlciB3b24ndCBpbnRlcnJ1cHQgdXMgKi8KQEAgLTI0MTcsMTEgKzI0MjEsMTIgQEAKIAogCS8qIFJlLWVuYWJsZSBsb2NhbCBDUFUgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQogCW1kZWxheSgxMDApOwotCiAJcHJlZW1wdF9lbmFibGUoKTsKIAorCS8qIFJlLWVuYWJsZSBjbG9jayBzcHJlYWRpbmcgb24gc29tZSBtYWNoaW5lcyAqLworCXBtYWNfdHdlYWtfY2xvY2tfc3ByZWFkaW5nKDEpOworCiAJLyogUmVzdW1lIGRldmljZXMgKi8KIAlkZXZpY2VfcmVzdW1lKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCA3NzYxOWE1Li4wZGQ2YzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC0zMzEsMjUgKzMzMSwxOSBAQAogCXN0cnVjdCBiaW8gKmJpbzsKIAl1bnNpZ25lZCBpbnQgbnJfaW92ZWNzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCWludCBnZnBfbWFzayA9IEdGUF9OT0lPIHwgX19HRlBfSElHSE1FTTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gY3VycmVudC0+ZmxhZ3M7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKgotCSAqIFRlbGwgVk0gdG8gYWN0IGxlc3MgYWdncmVzc2l2ZWx5IGFuZCBmYWlsIGVhcmxpZXIuCi0JICogVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGJ1dCBpbmNyZWFzZXMgdGhyb3VnaHB1dC4KKwkgKiBVc2UgX19HRlBfTk9NRU1BTExPQyB0byB0ZWxsIHRoZSBWTSB0byBhY3QgbGVzcyBhZ2dyZXNzaXZlbHkgYW5kCisJICogdG8gZmFpbCBlYXJsaWVyLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGJ1dCBpbmNyZWFzZXMgdGhyb3VnaHB1dC4KIAkgKiBGSVhNRTogSXMgdGhpcyByZWFsbHkgaW50ZWxsaWdlbnQ/CiAJICovCi0JY3VycmVudC0+ZmxhZ3MgJj0gflBGX01FTUFMTE9DOwotCiAJaWYgKGJhc2VfYmlvKQotCQliaW8gPSBiaW9fY2xvbmUoYmFzZV9iaW8sIEdGUF9OT0lPKTsKKwkJYmlvID0gYmlvX2Nsb25lKGJhc2VfYmlvLCBHRlBfTk9JT3xfX0dGUF9OT01FTUFMTE9DKTsKIAllbHNlCi0JCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgbnJfaW92ZWNzKTsKLQlpZiAoIWJpbykgewotCQlpZiAoZmxhZ3MgJiBQRl9NRU1BTExPQykKLQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOworCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU98X19HRlBfTk9NRU1BTExPQywgbnJfaW92ZWNzKTsKKwlpZiAoIWJpbykKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJLyogaWYgdGhlIGxhc3QgYmlvIHdhcyBub3QgY29tcGxldGUsIGNvbnRpbnVlIHdoZXJlIHRoYXQgb25lIGVuZGVkICovCiAJYmlvLT5iaV9pZHggPSAqYmlvX3ZlY19pZHg7CkBAIC0zODYsOSArMzgwLDYgQEAKIAkJc2l6ZSAtPSBidi0+YnZfbGVuOwogCX0KIAotCWlmIChmbGFncyAmIFBGX01FTUFMTE9DKQotCQljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKLQogCWlmICghYmlvLT5iaV9zaXplKSB7CiAJCWJpb19wdXQoYmlvKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCBjOWIxMzRjLi4xODkxZTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJZ290byBhYm9ydDsKIAkJfQogCQlwLT5yZGV2ID0gTlVMTDsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQkvKiBsb3N0IHRoZSByYWNlLCB0cnkgbGF0ZXIgKi8KIAkJCWVyciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBhMzg5Mzk0Li44MzM4MGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC03OTcsNyArNzk3LDcgQEAKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAkJcC0+cmRldiA9IE5VTEw7Ci0JCXN5bmNocm9uaXplX2tlcm5lbCgpOworCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJLyogbG9zdCB0aGUgcmFjZSwgdHJ5IGxhdGVyICovCiAJCQllcnIgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCBiMTAwYmZlLi5lOWRjMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQkJZ290byBhYm9ydDsKIAkJfQogCQlwLT5yZGV2ID0gTlVMTDsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQkvKiBsb3N0IHRoZSByYWNlLCB0cnkgbGF0ZXIgKi8KIAkJCWVyciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA1MmMzYTgxLi5lOTZlMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xODczLDcgKzE4NzMsNyBAQAogCQkJZ290byBhYm9ydDsKIAkJfQogCQlwLT5yZGV2ID0gTlVMTDsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQkvKiBsb3N0IHRoZSByYWNlLCB0cnkgbGF0ZXIgKi8KIAkJCWVyciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMgYi9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCmluZGV4IDdlMzBhYjIuLjhhMzNmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNm1haW4uYwpAQCAtMjAzOCw3ICsyMDM4LDcgQEAKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAkJcC0+cmRldiA9IE5VTEw7Ci0JCXN5bmNocm9uaXplX2tlcm5lbCgpOworCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJaWYgKGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJLyogbG9zdCB0aGUgcmFjZSwgdHJ5IGxhdGVyICovCiAJCQllcnIgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jCmluZGV4IDhjODQyZTIuLjg0YTQ5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jCkBAIC0xMzEsMTAgKzEzMSwxMCBAQAogCVsgMTggXSA9IEtFWV9LUDAsCiAKIAlbICAwIF0gPSBLRVlfUE9XRVIsCi0vLyAgICAgIFsgMjcgXSA9IE1UUyBidXR0b24KKwlbIDI3IF0gPSBLRVlfTEFOR1VBR0UsICAvL01UUyBidXR0b24KIAlbICAyIF0gPSBLRVlfVFVORVIsICAgICAvLyBUVi9GTQogCVsgMzAgXSA9IEtFWV9WSURFTywKLS8vICAgICAgWyAyMiBdID0gZGlzcGxheSBidXR0b24KKwlbIDIyIF0gPSBLRVlfSU5GTywgICAgICAvL2Rpc3BsYXkgYnV0dG9uCiAJWyAgNCBdID0gS0VZX1ZPTFVNRVVQLAogCVsgIDggXSA9IEtFWV9WT0xVTUVET1dOLAogCVsgMTIgXSA9IEtFWV9DSEFOTkVMVVAsCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlbICAzIF0gPSBLRVlfWk9PTSwgICAgICAvLyBmdWxsc2NyZWVuCiAJWyAzMSBdID0gS0VZX1NVQlRJVExFLCAgLy8gY2xvc2VkIGNhcHRpb24vdGVsZXRleHQKIAlbIDMyIF0gPSBLRVlfU0xFRVAsCi0vLyAgICAgIFsgNDEgXSA9IGJvc3Mga2V5CisJWyA0MSBdID0gS0VZX1NFQVJDSCwgICAgLy9ib3NzIGtleQogCVsgMjAgXSA9IEtFWV9NVVRFLAogCVsgNDMgXSA9IEtFWV9SRUQsCiAJWyA0NCBdID0gS0VZX0dSRUVOLApAQCAtMTUwLDE3ICsxNTAsMTcgQEAKIAlbIDQ2IF0gPSBLRVlfQkxVRSwKIAlbIDI0IF0gPSBLRVlfS1BQTFVTLCAgICAvL2ZpbmUgdHVuZSArCiAJWyAyNSBdID0gS0VZX0tQTUlOVVMsICAgLy9maW5lIHR1bmUgLQotLy8gICAgICBbIDQyIF0gPSBwaWN0dXJlIGluIHBpY3R1cmUKLSAgICAgICAgWyAzMyBdID0gS0VZX0tQRE9ULAorCVsgNDIgXSA9IEtFWV9BTkdMRSwgICAgIC8vcGljdHVyZSBpbiBwaWN0dXJlCisJWyAzMyBdID0gS0VZX0tQRE9ULAogCVsgMTkgXSA9IEtFWV9LUEVOVEVSLAotLy8gICAgICBbIDE3IF0gPSByZWNhbGwKKwlbIDE3IF0gPSBLRVlfQUdBSU4sICAgICAvL3JlY2FsbAogCVsgMzQgXSA9IEtFWV9CQUNLLAogCVsgMzUgXSA9IEtFWV9QTEFZUEFVU0UsCiAJWyAzNiBdID0gS0VZX05FWFQsCi0vLyAgICAgIFsgMzcgXSA9IHRpbWUgc2hpZnRpbmcKKwlbIDM3IF0gPSBLRVlfVCwgICAgICAgICAvL3RpbWUgc2hpZnRpbmcKIAlbIDM4IF0gPSBLRVlfU1RPUCwKLQlbIDM5IF0gPSBLRVlfUkVDT1JECi0vLyAgICAgIFsgNDAgXSA9IHNuYXBzaG90CisJWyAzOSBdID0gS0VZX1JFQ09SRCwKKwlbIDQwIF0gPSBLRVlfU0hVRkZMRSAgICAvL3NuYXBzaG90CiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCmluZGV4IDE5MzBiNTEuLjAxMTg2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2Yi1wbGwuaCIKICNpbmNsdWRlICJjeDIyNzAyLmgiCiAKIApAQCAtMjAzLDcgKzIwNCwxOSBAQAogCiAJLyogc2V0IFBMTCAqLwogICAgICAgICBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwRCwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLDB4MEQpICYweGZlKTsKLQlzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KGZlLCBwKTsKKwlpZiAoc3RhdGUtPmNvbmZpZy0+cGxsX3NldCkgeworCQlzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KGZlLCBwKTsKKwl9IGVsc2UgaWYgKHN0YXRlLT5jb25maWctPnBsbF9kZXNjKSB7CisJCXU4IHBsbGJ1Zls0XTsKKwkJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPnBsbF9hZGRyZXNzLAorCQkJCSAgICAgICAuYnVmID0gcGxsYnVmLCAubGVuID0gNCB9OworCQlkdmJfcGxsX2NvbmZpZ3VyZShzdGF0ZS0+Y29uZmlnLT5wbGxfZGVzYywgcGxsYnVmLAorCQkJCSAgcC0+ZnJlcXVlbmN5LAorCQkJCSAgcC0+dS5vZmRtLmJhbmR3aWR0aCk7CisJCWkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9CiAgICAgICAgIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsMHgwRCkgfCAxKTsKIAogCS8qIHNldCBpbnZlcnNpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCmluZGV4IDZlMzRmOTkuLjU1OWZkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaApAQCAtMzYsNiArMzYsOSBAQAogCXU4IGRlbW9kX2FkZHJlc3M7CiAKIAkvKiBQTEwgbWFpbnRlbmFuY2UgKi8KKwl1OCBwbGxfYWRkcmVzczsKKwlzdHJ1Y3QgZHZiX3BsbF9kZXNjICpwbGxfZGVzYzsKKwogCWludCAoKnBsbF9pbml0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiAJaW50ICgqcGxsX3NldCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggYzFiMzU0Mi4uZDNkZDQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjUyLDYgKzI1Miw3IEBACiAJZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0ICYmIERWQl9DT1JFCiAJc2VsZWN0IFZJREVPX0JVRl9EVkIKIAlzZWxlY3QgRFZCX01UMzUyCisJc2VsZWN0IERWQl9DWDIyNzAyCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCmluZGV4IGMxM2YyMjIuLjAzM2NjNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKQEAgLTMxNjksNyArMzE2OSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc29tZSBkZWJ1ZyBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotaW50IGJ0dHZfcmlzY19kZWNvZGUodTMyIHJpc2MpCitzdGF0aWMgaW50IGJ0dHZfcmlzY19kZWNvZGUodTMyIHJpc2MpCiB7CiAJc3RhdGljIGNoYXIgKmluc3RyWzE2XSA9IHsKIAkJWyBCVDg0OF9SSVNDX1dSSVRFICAgICA+PiAyOCBdID0gIndyaXRlIiwKQEAgLTMyMDYsOCArMzIwNiw4IEBACiAJcmV0dXJuIGluY3JbcmlzYyA+PiAyOF0gPyBpbmNyW3Jpc2MgPj4gMjhdIDogMTsKIH0KIAotdm9pZCBidHR2X3Jpc2NfZGlzYXNtKHN0cnVjdCBidHR2ICpidHYsCi0JCSAgICAgIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MpCitzdGF0aWMgdm9pZCBidHR2X3Jpc2NfZGlzYXNtKHN0cnVjdCBidHR2ICpidHYsCisJCQkgICAgIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MpCiB7CiAJdW5zaWduZWQgaW50IGksaixuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggMjZhNjEzOC4uMWZmNzliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlYnVnIGhlbHBlciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1pbnQgY3g4OF9yaXNjX2RlY29kZSh1MzIgcmlzYykKK3N0YXRpYyBpbnQgY3g4OF9yaXNjX2RlY29kZSh1MzIgcmlzYykKIHsKIAlzdGF0aWMgY2hhciAqaW5zdHJbMTZdID0gewogCQlbIFJJU0NfU1lOQyAgICA+PiAyOCBdID0gInN5bmMiLApAQCAtNTQyLDcgKzU0Miw3IEBACiAJICAgICAgIGNvcmUtPm5hbWUsY3hfcmVhZChjaC0+Y250Ml9yZWcpKTsKIH0KIAotY2hhciAqY3g4OF9wY2lfaXJxc1szMl0gPSB7CitzdGF0aWMgY2hhciAqY3g4OF9wY2lfaXJxc1szMl0gPSB7CiAJInZpZCIsICJhdWQiLCAidHMiLCAidmlwIiwgImhzdCIsICI1IiwgIjYiLCAidG0xIiwKIAkic3JjX2RtYSIsICJkc3RfZG1hIiwgInJpc2NfcmRfZXJyIiwgInJpc2Nfd3JfZXJyIiwKIAkiYnJkZ19lcnIiLCAic3JjX2RtYV9lcnIiLCAiZHN0X2RtYV9lcnIiLCAiaXBiX2RtYV9lcnIiLApAQCAtMTIwNiw3ICsxMjA2LDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBFWFBPUlRfU1lNQk9MKGN4ODhfcHJpbnRfaW9jdGwpOwotRVhQT1JUX1NZTUJPTChjeDg4X3BjaV9pcnFzKTsKIEVYUE9SVF9TWU1CT0woY3g4OF92aWRfaXJxcyk7CiBFWFBPUlRfU1lNQk9MKGN4ODhfbXBlZ19pcnFzKTsKIEVYUE9SVF9TWU1CT0woY3g4OF9wcmludF9pcnFiaXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggYmM2ZjE4Yy4uOWQxNWQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKIC8qIHRob3NlIHR3byBmcm9udGVuZHMgbmVlZCBtZXJnaW5nIHZpYSBsaW51eHR2IGN2cyAuLi4gKi8KLSNkZWZpbmUgSEFWRV9DWDIyNzAyIDAKKyNkZWZpbmUgSEFWRV9DWDIyNzAyIDEKICNkZWZpbmUgSEFWRV9PUjUxMTMyIDEKIAogI2luY2x1ZGUgImN4ODguaCIKQEAgLTkxLDcgKzkxLDcgQEAKIAljeDg4X2ZyZWVfYnVmZmVyKGRldi0+cGNpLCAoc3RydWN0IGN4ODhfYnVmZmVyKil2Yik7CiB9CiAKLXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgZHZiX3FvcHMgPSB7CitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBkdmJfcW9wcyA9IHsKIAkuYnVmX3NldHVwICAgID0gZHZiX2J1Zl9zZXR1cCwKIAkuYnVmX3ByZXBhcmUgID0gZHZiX2J1Zl9wcmVwYXJlLAogCS5idWZfcXVldWUgICAgPSBkdmJfYnVmX3F1ZXVlLApAQCAtMTkxLDcgKzE5MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBvcjUxMTMyX2NvbmZpZyBwY2hkdHZfaGQzMDAwID0geworc3RhdGljIHN0cnVjdCBvcjUxMTMyX2NvbmZpZyBwY2hkdHZfaGQzMDAwID0gewogCS5kZW1vZF9hZGRyZXNzICAgID0gMHgxNSwKIAkucGxsX2FkZHJlc3MgICAgICA9IDB4NjEsCiAJLnBsbF9kZXNjICAgICAgICAgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc2MTAsCkBAIC0yNDMsMTAgKzI0Myw4IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iCi0JCSAgICAgICAiJXM6IHlvdSBtaWdodCB3YW50IHRvIGxvb2sgb3V0IGZvciBwYXRjaGVzIGhlcmU6XG4iCi0JCSAgICAgICAiJXM6ICAgICBodHRwOi8vZGwuYnl0ZXNleC5vcmcvcGF0Y2hlcy9cbiIsCi0JCSAgICAgICBkZXYtPmNvcmUtPm5hbWUsIGRldi0+Y29yZS0+bmFtZSwgZGV2LT5jb3JlLT5uYW1lKTsKKwkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAorCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKIAkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CkBAIC0zMDgsOSArMzA2LDExIEBACiAJCQkgICAgZGV2KTsKIAllcnIgPSBkdmJfcmVnaXN0ZXIoZGV2KTsKIAlpZiAoMCAhPSBlcnIpCi0JCWdvdG8gZmFpbF9mcmVlOworCQlnb3RvIGZhaWxfZmluaTsKIAlyZXR1cm4gMDsKIAorIGZhaWxfZmluaToKKwljeDg4MDJfZmluaV9jb21tb24oZGV2KTsKICBmYWlsX2ZyZWU6CiAJa2ZyZWUoZGV2KTsKICBmYWlsX2NvcmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IDYwODAwMTcuLjA3MjViMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC00NSw3ICs0NSw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgY3g4ODAwX2JpdF9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgY3g4ODAwX2JpdF9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkYXRhOwogCkBAIC01Nyw3ICs1Nyw3IEBACiAJY3hfcmVhZChNT19JMkMpOwogfQogCi12b2lkIGN4ODgwMF9iaXRfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIGN4ODgwMF9iaXRfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGF0YTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYwppbmRleCA0NzFlNTA4Li4wNTg0ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYwpAQCAtNDYsOSArNDYsOSBAQAogCX0KIH0KIAotaW50IGN4ODgwMF9zdGFydF92YmlfZG1hKHN0cnVjdCBjeDg4MDBfZGV2ICAgICpkZXYsCi0JCQkgc3RydWN0IGN4ODhfZG1hcXVldWUgKnEsCi0JCQkgc3RydWN0IGN4ODhfYnVmZmVyICAgKmJ1ZikKK3N0YXRpYyBpbnQgY3g4ODAwX3N0YXJ0X3ZiaV9kbWEoc3RydWN0IGN4ODgwMF9kZXYgICAgKmRldiwKKwkJCQlzdHJ1Y3QgY3g4OF9kbWFxdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgY3g4OF9idWZmZXIgICAqYnVmKQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDcwMWY1OTQuLmQxZjVjOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCS5zaGlmdCAgICAgICAgICAgICAgICAgPSAwLAogCX0KIH07Ci1jb25zdCBpbnQgQ1g4ODAwX0NUTFMgPSBBUlJBWV9TSVpFKGN4ODgwMF9jdGxzKTsKK3N0YXRpYyBjb25zdCBpbnQgQ1g4ODAwX0NUTFMgPSBBUlJBWV9TSVpFKGN4ODgwMF9jdGxzKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogcmVzb3VyY2UgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJY3g4OF9mcmVlX2J1ZmZlcihmaC0+ZGV2LT5wY2ksYnVmKTsKIH0KIAotc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDg4MDBfdmlkZW9fcW9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGN4ODgwMF92aWRlb19xb3BzID0gewogCS5idWZfc2V0dXAgICAgPSBidWZmZXJfc2V0dXAsCiAJLmJ1Zl9wcmVwYXJlICA9IGJ1ZmZlcl9wcmVwYXJlLAogCS5idWZfcXVldWUgICAgPSBidWZmZXJfcXVldWUsCkBAIC0xOTI0LDcgKzE5MjQsNyBAQAogCS5sbHNlZWsgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIAotc3RydWN0IHZpZGVvX2RldmljZSBjeDg4MDBfdmlkZW9fdGVtcGxhdGUgPQorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3g4ODAwX3ZpZGVvX3RlbXBsYXRlID0KIHsKIAkubmFtZSAgICAgICAgICA9ICJjeDg4MDAtdmlkZW8iLAogCS50eXBlICAgICAgICAgID0gVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9UVU5FUnxWSURfVFlQRV9TQ0FMRVMsCkBAIC0xOTMzLDcgKzE5MzMsNyBAQAogCS5taW5vciAgICAgICAgID0gLTEsCiB9OwogCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF92YmlfdGVtcGxhdGUgPQorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3g4ODAwX3ZiaV90ZW1wbGF0ZSA9CiB7CiAJLm5hbWUgICAgICAgICAgPSAiY3g4ODAwLXZiaSIsCiAJLnR5cGUgICAgICAgICAgPSBWSURfVFlQRV9URUxFVEVYVHxWSURfVFlQRV9UVU5FUiwKQEAgLTE5NTEsNyArMTk1MSw3IEBACiAJLmxsc2VlayAgICAgICAgPSBub19sbHNlZWssCiB9OwogCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF9yYWRpb190ZW1wbGF0ZSA9CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjeDg4MDBfcmFkaW9fdGVtcGxhdGUgPQogewogCS5uYW1lICAgICAgICAgID0gImN4ODgwMC1yYWRpbyIsCiAJLnR5cGUgICAgICAgICAgPSBWSURfVFlQRV9UVU5FUiwKQEAgLTIyMjYsNyArMjIyNiw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4ODgwMF9wY2lfdGJsW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4ODAwX3BjaV90YmxbXSA9IHsKIAl7CiAJCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCiAJCS5kZXZpY2UgICAgICAgPSAweDg4MDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCBiMzUxZDllLi44OGVhYWFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC00MjAsNyArNDIwLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDg4LWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1leHRlcm4gY2hhciAqY3g4OF9wY2lfaXJxc1szMl07CiBleHRlcm4gY2hhciAqY3g4OF92aWRfaXJxc1szMl07CiBleHRlcm4gY2hhciAqY3g4OF9tcGVnX2lycXNbMzJdOwogZXh0ZXJuIHZvaWQgY3g4OF9wcmludF9pcnFiaXRzKGNoYXIgKm5hbWUsIGNoYXIgKnRhZywgY2hhciAqKnN0cmluZ3MsCkBAIC00NzIsOSArNDcxLDYgQEAKIC8qIGN4ODgtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIHZvaWQgY3g4ODAwX3ZiaV9mbXQoc3RydWN0IGN4ODgwMF9kZXYgKmRldiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKLWludCBjeDg4MDBfc3RhcnRfdmJpX2RtYShzdHJ1Y3QgY3g4ODAwX2RldiAgICAqZGV2LAotCQkJIHN0cnVjdCBjeDg4X2RtYXF1ZXVlICpxLAotCQkJIHN0cnVjdCBjeDg4X2J1ZmZlciAgICpidWYpOwogaW50IGN4ODgwMF9zdG9wX3ZiaV9kbWEoc3RydWN0IGN4ODgwMF9kZXYgKmRldik7CiBpbnQgY3g4ODAwX3Jlc3RhcnRfdmJpX3F1ZXVlKHN0cnVjdCBjeDg4MDBfZGV2ICAgICpkZXYsCiAJCQkgICAgIHN0cnVjdCBjeDg4X2RtYXF1ZXVlICpxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKaW5kZXggYzk3ZGY3MC4uN2ZiYjg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKQEAgLTM4MCw3ICszODAsOSBAQAogCWludCB2YWwgPSAwLCBiYWwgPSAwOwogCiAJaWYgKCFtdXRlZCkgewotCQl2YWwgPSAodm9sdW1lICogMHg3RiAvIDY1NTM1KSA8PCA4OworCQkvKiAweDdmIGluc3RlYWQgaWYgMHg3MyBoZXJlIGhhcyBzb3VuZCBxdWFsaXR5IGlzc3VlcywKKwkJICogcHJvYmFibHkgZHVlIHRvIG92ZXJtb2R1bGF0aW9uICsgY2xpcHBpbmcgLi4uICovCisJCXZhbCA9ICh2b2x1bWUgKiAweDczIC8gNjU1MzUpIDw8IDg7CiAJfQogCWlmICh2YWwpIHsKIAkJYmFsID0gKGJhbGFuY2UgLyAyNTYpIC0gMTI4OwpAQCAtOTk3LDcgKzk5OSwxMyBAQAogewogCXN3aXRjaCAobm9ybSkgewogCWNhc2UgVklERU9fTU9ERV9QQUw6CisjaWYgMQorCQkvKiBleHBlcmltZW50YWw6IG5vdCBzdXJlIHRoaXMgd29ya3Mgd2l0aCBhbGwgY2hpcCB2ZXJzaW9ucyAqLworCQlyZXR1cm4gMHg3MDAzOworI2Vsc2UKKwkJLyogcHJldmlvdXMgdmFsdWUsIHRyeSB0aGlzIGlmIGl0IGJyZWFrcyAuLi4gKi8KIAkJcmV0dXJuIDB4MTAwMzsKKyNlbmRpZgogCWNhc2UgVklERU9fTU9ERV9OVFNDOiAgLyogQlRTQyAqLwogCQlyZXR1cm4gMHgyMDAzOwogCWNhc2UgVklERU9fTU9ERV9TRUNBTToKQEAgLTEyNjQsNiArMTI3Miw3IEBACiAJaW50IHZhbCwgc3RkLCBpOwogCiAJcHJpbnRrKCJtc3AzNHh4ZzogZGFlbW9uIHN0YXJ0ZWRcbiIpOworCW1zcC0+c291cmNlID0gMTsgLyogZGVmYXVsdCAqLwogCWZvciAoOzspIHsKIAkJZDJwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eGc6IHRocmVhZDogc2xlZXBcbiIpOwogCQltc3AzNHh4X3NsZWVwKG1zcCwtMSk7CkBAIC0xMzM0LDggKzEzNDMsOSBAQAogCiAJLyogZml4IG1hdHJpeCBtb2RlIHRvIHN0ZXJlbyBhbmQgbGV0IHRoZSBtc3AgY2hvb3NlIHdoYXQKIAkgKiB0byBvdXRwdXQgYWNjb3JkaW5nIHRvICdzb3VyY2UnLCBhcyByZWNvbW1lbmRlZAorCSAqIGZvciBNT05PIChzb3VyY2U9PTApIGRvd25taXhpbmcgc2V0IGJpdFs3OjBdIHRvIDB4MzAKIAkgKi8KLQlpbnQgdmFsdWUgPSAoc291cmNlJjB4MDcpPDw4fChzb3VyY2U9PTAgPyAweDAwOjB4MjApOworCWludCB2YWx1ZSA9IChzb3VyY2UmMHgwNyk8PDh8KHNvdXJjZT09MCA/IDB4MzA6MHgyMCk7CiAJZHByaW50aygibXNwMzR4eGc6IHNldCBzb3VyY2UgdG8gJWQgKDB4JXgpXG4iLCBzb3VyY2UsIHZhbHVlKTsKIAltc3AzNDAwY193cml0ZShjbGllbnQsCiAJCSAgICAgICBJMkNfTVNQMzQwMENfREZQLApAQCAtMTM1OSw3ICsxMzY5LDcgQEAKIAltc3AzNDAwY193cml0ZShjbGllbnQsCiAJCSAgICAgICBJMkNfTVNQMzQwMENfREVNLAogCQkgICAgICAgMHgyMiwgLyogYTIgdGhyZXNob2xkIGZvciBzdGVyZW8vYmlsaW5ndWFsICovCi0JCSAgICAgICBzb3VyY2U9PTAgPyAweDdmMDpzdGVyZW9fdGhyZXNob2xkKTsKKwkJICAgICAgIHN0ZXJlb190aHJlc2hvbGQpOwogCW1zcC0+c291cmNlPXNvdXJjZTsKIH0KIApAQCAtMTM5NCw3ICsxNDA0LDcgQEAKIHN0YXRpYyB2b2lkIG1zcDM0eHhnX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhdWRtb2RlKQogewogCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHNvdXJjZSA9IDA7CisJaW50IHNvdXJjZTsKIAogCXN3aXRjaCAoYXVkbW9kZSkgewogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CkBAIC0xNDEwLDkgKzE0MjAsMTAgQEAKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKIAkJc291cmNlPTQ7IC8qIHN0ZXJlbyBvciBCICovCiAJCWJyZWFrOwotCWRlZmF1bHQ6IC8qIGRvaW5nIG5vdGhpbmc6IGEgc2FmZSwgc2FuZSBkZWZhdWx0ICovCisJZGVmYXVsdDoKIAkJYXVkbW9kZSA9IDA7Ci0JCXJldHVybjsKKwkJc291cmNlICA9IDE7CisJCWJyZWFrOwogCX0KIAltc3AtPmF1ZG1vZGUgPSBhdWRtb2RlOwogCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCBzb3VyY2UpOwpAQCAtMTUxNCwxMiArMTUyNSw5IEBACiAKIAltc3AtPm9wbW9kZSA9IG9wbW9kZTsKIAlpZiAoT1BNT0RFX0FVVE8gPT0gbXNwLT5vcG1vZGUpIHsKLSNpZiAwIC8qIHNlZW1zIHRvIHdvcmsgZm9yIGl2dHYgb25seSwgZGlzYWJsZSBieSBkZWZhdWx0IGZvciBub3cgLi4uICovCiAJCWlmIChIQVZFX1NJTVBMRVIobXNwKSkKIAkJCW1zcC0+b3Btb2RlID0gT1BNT0RFX1NJTVBMRVI7Ci0JCWVsc2UKLSNlbmRpZgotCQlpZiAoSEFWRV9TSU1QTEUobXNwKSkKKwkJZWxzZSBpZiAoSEFWRV9TSU1QTEUobXNwKSkKIAkJCW1zcC0+b3Btb2RlID0gT1BNT0RFX1NJTVBMRTsKIAkJZWxzZQogCQkJbXNwLT5vcG1vZGUgPSBPUE1PREVfTUFOVUFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggMTgwZDMxNy4uYzUxZWI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0xODMsMTIgKzE4MywxMiBAQAogCQkubmFtZSAgICAgICAgICAgPSAiTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gRk0iLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCi0vLwkJLmdwaW9tYXNrICAgICAgID0gMHhlMDAwLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDFFMDAwLAkvKiBTZXQgR1AxNiBhbmQgdW51c2VkIDE1LDE0LDEzIHRvIE91dHB1dCAqLwogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LAogCQkJLnZtdXggPSAxLAogCQkJLmFtdXggPSBUViwKLS8vCQkJLmdwaW8gPSAweDAwMDAsCisJCQkuZ3BpbyA9IDB4MTAwMDAsCS8qIEdQMTY9MSBzZWxlY3RzIFRWIGlucHV0ICovCiAJCQkudHYgICA9IDEsCiAgICAgICAgICAgICAgICAgfSx7CiAvKgkJCS5uYW1lID0gbmFtZV90dl9tb25vLApAQCAtMjEyLDEyICsyMTIsMTIgQEAKIAkJCS5hbXV4ID0gTElORTIsCiAvLwkJCS5ncGlvID0gMHg0MDAwLAogCQl9fSwKLS8qCQkucmFkaW8gPSB7CisJCS5yYWRpbyA9IHsKIAkJCS5uYW1lID0gbmFtZV9yYWRpbywKLQkJCS5hbXV4ID0gTElORTIsCi0JCQkuZ3BpbyA9IDB4MjAwMCwKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDAwMDAsCS8qIEdQMTY9MCBzZWxlY3RzIEZNIHJhZGlvIGFudGVubmEgKi8KIAkJfSwKLSovCX0sCisJfSwKIAlbU0FBNzEzNF9CT0FSRF9FTVBSRVNTXSA9IHsKIAkJLyogIkdlcnQgVmVydm9vcnQiIDxnZXJ0LnZlcnZvb3J0QHBoaWxpcHMuY29tPiAqLwogCQkubmFtZQkJPSAiRU1QUkVTUyIsCkBAIC0xNjI4LDExICsxNjI4LDE3IEBACiAgICAgICAgIH0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCi0JCS5zdWJ2ZW5kb3IgICAgPSAweDUxNjgsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDUxNjgsCS8qIEFuaW1hdGlvbiBUZWNobm9sb2dpZXMgKExpZmVWaWV3KSAqLwogCQkuc3ViZGV2aWNlICAgID0gMHgwMjE0LCAvKiBTdGFuZGFyZCBQQ0ksIExSMjE0V0YgKi8KIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTSwKICAgICAgICAgfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTQ4OSwgLyogS1lFICovCisJCS5zdWJkZXZpY2UgICAgPSAweDAyMTQsIC8qIEdlbml1cyBWaWRlb1dvbmRlciBQcm9UViAqLworCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX0ZNLCAvKiBpcyBhbiBMUjIxNFdGIGFjdHVhbGx5ICovCisgICAgICAgIH0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE2YmUsCiAJCS5zdWJkZXZpY2UgICAgPSAweDAwMDMsCkBAIC0xOTQ4LDYgKzE5NTQsNyBAQAogCQlkZXYtPmhhc19yZW1vdGUgPSAxOwogCQlib2FyZF9mbHl2aWRlbyhkZXYpOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWTQwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWTYwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWTYwMF9NSzM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IGRkNGE2YzguLmMyODczYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgJmRldi0+cGNpLT5kZXYpOwogfQogCi1zdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIG1lZGlvbl9jYXJkYnVzID0geworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgbWVkaW9uX2NhcmRidXMgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDA4LCAgLyogbm90IHN1cmUgdGhpcyBpcyBjb3JyZWN0ICovCiAJLmludmVydCAgICAgICAgPSAwLAogICAgICAgICAuaW52ZXJ0X29jbGsgICA9IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwppbmRleCA3MjdkNDM3Li5jYTUwY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKQEAgLTM3OSw2ICszNzksNyBAQAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlWSURFTzIwMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVZJREVPMzAwMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTToKIAkJaXJfY29kZXMgICAgID0gZmx5dmlkZW9fY29kZXM7CiAJCW1hc2tfa2V5Y29kZSA9IDB4RUMwMDAwMDsKIAkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCAwNjVlYjQwLi44MGRjMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtOTkxLDcgKzk5MSw3IEBACiB7CiAJaWYgKHRkYTk4NzRhX1NJRiA+IDIpCiAJCXRkYTk4NzRhX1NJRiA9IDE7Ci0JaWYgKHRkYTk4NzRhX1NURCA+PSA4KQorCWlmICh0ZGE5ODc0YV9TVEQgPiA4KQogCQl0ZGE5ODc0YV9TVEQgPSAwOwogCWlmKHRkYTk4NzRhX0FNU0VMID4gMSkKIAkJdGRhOTg3NGFfQU1TRUwgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oCmluZGV4IDJmNGJmZDQuLjM5NTg2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguaAorKysgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmgKQEAgLTIxNCw3ICsyMTQsNyBAQAogCXUzMiBjbWRzdGF0OwogCXUzMiBuZXh0OwogCXUzMiBidWZmX3B0cjsKLX0gZ3Q5NjEwMF90ZF90IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGd0OTYxMDBfdGRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogI2lmZGVmIERFU0NfQkUKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXUzMiBjbWRzdGF0OwogCXUzMiBuZXh0OwogCXUzMiBidWZmX3B0cjsKLX0gZ3Q5NjEwMF9yZF90IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGd0OTYxMDBfcmRfdDsKIAogCiAvKiBWYWx1ZXMgZm9yIHRoZSBUeCBjb21tYW5kLXN0YXR1cyBkZXNjcmlwdG9yIGVudHJ5LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYWNiMTcwMS4uYjNhODk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0xMyw4ICsxMyw4IEBACiAqKiBUaGlzIGRyaXZlciBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoCiAqKiAtLSBIUCBKMjU4NUIgMTAvMTAwIE1iaXQvcyBQQ0kgQnVzbWFzdGVyCiAqKiAtLSBIUCBKMjU4NUEgMTAvMTAwIE1iaXQvcyBQQ0kgCi0qKiAtLSBIUCBKMjk3MCAgMTAgTWJpdC9zIFBDSSBDb21ibyAxMGJhc2UtVC9CTkMKLSoqIC0tIEhQIEoyOTczICAxMCBNYml0L3MgUENJIDEwYmFzZS1UCisqKiAtLSBIUCBKMjk3MEEgMTAgTWJpdC9zIFBDSSBDb21ibyAxMGJhc2UtVC9CTkMKKyoqIC0tIEhQIEoyOTczQSAxMCBNYml0L3MgUENJIDEwYmFzZS1UCiAqKiAtLSBIUCBKMjU3MyAgMTAvMTAwIElTQQogKiogLS0gQ29tcGV4IFJlYWR5TGluayBFTkVUMTAwLVZHNCAgMTAvMTAwIE1iaXQvcyBQQ0kgLyBFSVNBCiAqKiAtLSBDb21wZXggRnJlZWRvbUxpbmUgMTAwL1ZHICAxMC8xMDAgTWJpdC9zIElTQSAvIEVJU0EgLyBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDA3ZTJkZjAuLmM1OTUwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAl9CiAKIAkvKiBHaXZlIGEgcmFjaW5nIGhhcmRfc3RhcnRfeG1pdCBhIGZldyBjeWNsZXMgdG8gY29tcGxldGUuICovCi0Jc3luY2hyb25pemVfa2VybmVsKCk7CisJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBzeW5jaHJvbml6ZV9pcnEoKT8gKi8KIAogCS8qCiAJICogQW5kIG5vdyBmb3IgdGhlIDUwayQgcXVlc3Rpb246IGFyZSBJUlEgZGlzYWJsZWQgb3Igbm90ID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcuYwppbmRleCBkNDcxYjNlLi4wMjFkMGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy5jCkBAIC0xMjAsNiArMTIwLDEwIEBACiAKIC8qKgogICogcGNpX3Zpc2l0X2RldiAtIHNjYW5zIHRoZSBwY2kgYnVzZXMuCisgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgd2hpbGUgdmlzaXRpbmcKKyAqIEB3cmFwcGVkX2RldjogdGhlIGRldmljZSB0byBzY2FuCisgKiBAd3JhcHBlZF9wYXJlbnQ6IHRoZSBidXMgd2hlcmUgQHdyYXBwZWRfZGV2IGlzIGNvbm5lY3RlZCB0bworICoKICAqIEV2ZXJ5IGJ1cyBhbmQgZXZlcnkgZnVuY3Rpb24gaXMgcHJlc2VudGVkIHRvIGEgY3VzdG9tCiAgKiBmdW5jdGlvbiB0aGF0IGNhbiBhY3QgdXBvbiBpdC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcm9tLmMgYi9kcml2ZXJzL3BjaS9yb20uYwppbmRleCAzZTY0ZmY2Li44Mzg1NzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yb20uYworKysgYi9kcml2ZXJzL3BjaS9yb20uYwpAQCAtMTQsNyArMTQsNyBAQAogCiAvKioKICAqIHBjaV9lbmFibGVfcm9tIC0gZW5hYmxlIFJPTSBkZWNvZGluZyBmb3IgYSBQQ0kgZGV2aWNlCi0gKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGVuYWJsZQorICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gZW5hYmxlCiAgKgogICogRW5hYmxlIFJPTSBkZWNvZGluZyBvbiBAZGV2LiAgVGhpcyBpbnZvbHZlcyBzaW1wbHkgdHVybmluZyBvbiB0aGUgbGFzdAogICogYml0IG9mIHRoZSBQQ0kgUk9NIEJBUi4gIE5vdGUgdGhhdCBzb21lIGNhcmRzIG1heSBzaGFyZSBhZGRyZXNzIGRlY29kZXJzCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qKgogICogcGNpX2Rpc2FibGVfcm9tIC0gZGlzYWJsZSBST00gZGVjb2RpbmcgZm9yIGEgUENJIGRldmljZQotICogQGRldjogUENJIGRldmljZSB0byBkaXNhYmxlCisgKiBAcGRldjogUENJIGRldmljZSB0byBkaXNhYmxlCiAgKgogICogRGlzYWJsZSBST00gZGVjb2Rpbmcgb24gYSBQQ0kgZGV2aWNlIGJ5IHR1cm5pbmcgb2ZmIHRoZSBsYXN0IGJpdCBpbiB0aGUKICAqIFJPTSBCQVIuCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qKgogICogcGNpX21hcF9yb20gLSBtYXAgYSBQQ0kgUk9NIHRvIGtlcm5lbCBzcGFjZQotICogQGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAorICogQHBkZXY6IHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QKICAqIEBzaXplOiBwb2ludGVyIHRvIHJlY2VpdmUgc2l6ZSBvZiBwY2kgd2luZG93IG92ZXIgUk9NCiAgKiBAcmV0dXJuOiBrZXJuZWwgdmlydHVhbCBwb2ludGVyIHRvIGltYWdlIG9mIFJPTQogICoKQEAgLTEzMiw3ICsxMzIsNyBAQAogCiAvKioKICAqIHBjaV9tYXBfcm9tX2NvcHkgLSBtYXAgYSBQQ0kgUk9NIHRvIGtlcm5lbCBzcGFjZSwgY3JlYXRlIGEgY29weQotICogQGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAorICogQHBkZXY6IHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QKICAqIEBzaXplOiBwb2ludGVyIHRvIHJlY2VpdmUgc2l6ZSBvZiBwY2kgd2luZG93IG92ZXIgUk9NCiAgKiBAcmV0dXJuOiBrZXJuZWwgdmlydHVhbCBwb2ludGVyIHRvIGltYWdlIG9mIFJPTQogICoKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAvKioKICAqIHBjaV91bm1hcF9yb20gLSB1bm1hcCB0aGUgUk9NIGZyb20ga2VybmVsIHNwYWNlCi0gKiBAZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CisgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAogICogQHJvbTogdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBtYXBwaW5nCiAgKgogICogUmVtb3ZlIGEgbWFwcGluZyBvZiBhIHByZXZpb3VzbHkgbWFwcGVkIFJPTQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIC8qKgogICogcGNpX3JlbW92ZV9yb20gLSBkaXNhYmxlIHRoZSBST00gYW5kIHJlbW92ZSBpdHMgc3lzZnMgYXR0cmlidXRlCi0gKiBAZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0CisgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAogICoKICAqIFJlbW92ZSB0aGUgcm9tIGZpbGUgaW4gc3lzZnMgYW5kIGRpc2FibGUgUk9NIGRlY29kaW5nLgogICovCkBAIC0yMDYsNyArMjA2LDcgQEAKIC8qKgogICogcGNpX2NsZWFudXBfcm9tIC0gaW50ZXJuYWwgcm91dGluZSBmb3IgZnJlZWluZyB0aGUgUk9NIGNvcHkgY3JlYXRlZAogICogYnkgcGNpX21hcF9yb21fY29weSBjYWxsZWQgZnJvbSByZW1vdmUuYwotICogQGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdAorICogQHBkZXY6IHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QKICAqCiAgKiBGcmVlIHRoZSBjb3BpZWQgUk9NIGlmIHdlIGFsbG9jYXRlZCBvbmUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL21hbmFnZXIuYyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwppbmRleCA2MzllMDQyLi42NWVjZWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9wbnAvbWFuYWdlci5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIAogLyoqCiAgKiBwbnBfY2xlYW5fcmVzb3VyY2VzIC0gY2xlYXJzIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG1hbnVhbGx5IHNldAotICogQHJlcyAtIHRoZSByZXNvdXJjZXMgdG8gY2xlYW4KKyAqIEByZXM6IHRoZSByZXNvdXJjZXMgdG8gY2xlYW4KICAqCiAgKi8KIHN0YXRpYyB2b2lkIHBucF9jbGVhbl9yZXNvdXJjZV90YWJsZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICogcmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCmluZGV4IGMwZGRiMWUuLmRkNjFlMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKQEAgLTk0LDggKzk0LDggQEAKIHBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX2RtYXJlc291cmNlKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKiByZXMsIGludCBkbWEpCiB7CiAJaW50IGkgPSAwOwotCXdoaWxlICghKHJlcy0+ZG1hX3Jlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9VTlNFVCkgJiYKLQkJCWkgPCBQTlBfTUFYX0RNQSkKKwl3aGlsZSAoaSA8IFBOUF9NQVhfRE1BICYmCisJCQkhKHJlcy0+ZG1hX3Jlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9VTlNFVCkpCiAJCWkrKzsKIAlpZiAoaSA8IFBOUF9NQVhfRE1BKSB7CiAJCXJlcy0+ZG1hX3Jlc291cmNlW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9ETUE7ICAvLyBBbHNvIGNsZWFycyBfVU5TRVQgZmxhZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jCmluZGV4IDYxOGFjMTUuLjc5YmNlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMKQEAgLTcyLDcgKzcyLDkgQEAKIHBucGJpb3NfcGFyc2VfYWxsb2NhdGVkX2RtYXJlc291cmNlKHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKiByZXMsIGludCBkbWEpCiB7CiAJaW50IGkgPSAwOwotCXdoaWxlICghKHJlcy0+ZG1hX3Jlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9VTlNFVCkgJiYgaSA8IFBOUF9NQVhfRE1BKSBpKys7CisJd2hpbGUgKGkgPCBQTlBfTUFYX0RNQSAmJgorCQkJIShyZXMtPmRtYV9yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfVU5TRVQpKQorCQlpKys7CiAJaWYgKGkgPCBQTlBfTUFYX0RNQSkgewogCQlyZXMtPmRtYV9yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BOyAgLy8gQWxzbyBjbGVhcnMgX1VOU0VUIGZsYWcKIAkJaWYgKGRtYSA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggYjc1NWJhYy4uMDJjZmUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC03LDcgKzcsNyBAQAogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAxOTk5LTIwMDEKICAqCi0gKiAkUmV2aXNpb246IDEuMTU4ICQKKyAqICRSZXZpc2lvbjogMS4xNjEgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTExMzEsMTMgKzExMzEsMTcgQEAKIAlyZXF1ZXN0X3F1ZXVlX3QgKnF1ZXVlOwogCXN0cnVjdCByZXF1ZXN0ICpyZXE7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwotCWludCBucl9xdWV1ZWQ7CisJaW50IG5yX3F1ZXVlZCwgZmVhdHVyZV9ybzsKIAogCXF1ZXVlID0gZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOwogCS8qIE5vIHF1ZXVlID8gVGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLiAqLwogCWlmIChxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwlmZWF0dXJlX3JvID0gZGFzZF9nZXRfZmVhdHVyZShkZXZpY2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSk7CisJaWYgKGZlYXR1cmVfcm8gPCAwKSAJLyogbm8gZGV2bWFwICovCisJCXJldHVybjsKKwogCS8qCiAJICogV2UgcmVxdWV1ZSByZXF1ZXN0IGZyb20gdGhlIGJsb2NrIGRldmljZSBxdWV1ZSB0byB0aGUgY2N3CiAJICogcXVldWUgb25seSBpbiB0d28gc3RhdGVzLiBJbiBzdGF0ZSBEQVNEX1NUQVRFX1JFQURZIHRoZQpAQCAtMTE1Nyw4ICsxMTYxLDggQEAKIAkgICAgICAgZWx2X25leHRfcmVxdWVzdChxdWV1ZSkgJiYKIAkJbnJfcXVldWVkIDwgREFTRF9DSEFOUV9NQVhfU0laRSkgewogCQlyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHF1ZXVlKTsKLQkJaWYgKHRlc3RfYml0KERBU0RfRkxBR19STywgJmRldmljZS0+ZmxhZ3MpICYmCi0JCSAgICBycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CisKKwkJaWYgKGZlYXR1cmVfcm8gJiYgcnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgewogCQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsCiAJCQkJICAgICAgIlJlamVjdGluZyB3cml0ZSByZXF1ZXN0ICVwIiwKIAkJCQkgICAgICByZXEpOwpAQCAtMTYzMSw2ICsxNjM1LDcgQEAKIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGRldmljZS0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShkZXZpY2UtPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOworCWJsa19xdWV1ZV9vcmRlcmVkKGRldmljZS0+cmVxdWVzdF9xdWV1ZSwgMSk7CiB9CiAKIC8qCkBAIC0xODAzLDEzICsxODA4LDE3IEBACiAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQlpbnQgcmM7CisJaW50IGZlYXR1cmVfZGlhZywgcmM7CisKKwlmZWF0dXJlX2RpYWcgPSBkYXNkX2dldF9mZWF0dXJlKGNkZXYsIERBU0RfRkVBVFVSRV9VU0VESUFHKTsKKwlpZiAoZmVhdHVyZV9kaWFnIDwgMCkKKwkJcmV0dXJuIGZlYXR1cmVfZGlhZzsKIAogCWRldmljZSA9IGRhc2RfY3JlYXRlX2RldmljZShjZGV2KTsKIAlpZiAoSVNfRVJSKGRldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKGRldmljZSk7CiAKLQlpZiAodGVzdF9iaXQoREFTRF9GTEFHX1VTRV9ESUFHLCAmZGV2aWNlLT5mbGFncykpIHsKKwlpZiAoZmVhdHVyZV9kaWFnKSB7CiAJICAJaWYgKCFkYXNkX2RpYWdfZGlzY2lwbGluZV9wb2ludGVyKSB7CiAJCSAgICAgICAgcHJpbnRrIChLRVJOX1dBUk5JTkcKIAkJCQkiZGFzZF9nZW5lcmljIGNvdWxkbid0IG9ubGluZSBkZXZpY2UgJXMgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfY21iLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9jbWIuYwppbmRleCBlZDFhYjQ3Li40ZjM2NWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9jbWIuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9jbWIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9jbWIuYyAoJFJldmlzaW9uOiAxLjYgJCkKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2NtYi5jICgkUmV2aXNpb246IDEuOSAkKQogICoKICAqIExpbnV4IG9uIHpTZXJpZXMgQ2hhbm5lbCBNZWFzdXJlbWVudCBGYWNpbGl0eSBzdXBwb3J0CiAgKiAgKGRhc2QgZGV2aWNlIGRyaXZlciBpbnRlcmZhY2UpCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbWIuaD4KQEAgLTg0LDI3ICs4MywxMyBAQAogc3RhdGljIGlubGluZSBpbnQKIGlvY3RsX3JlZyh1bnNpZ25lZCBpbnQgbm8sIGRhc2RfaW9jdGxfZm5fdCBoYW5kbGVyKQogewotCWludCByZXQ7Ci0JcmV0ID0gZGFzZF9pb2N0bF9ub19yZWdpc3RlcihUSElTX01PRFVMRSwgbm8sIGhhbmRsZXIpOwotI2lmZGVmIENPTkZJR19DT01QQVQKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKG5vLCBOVUxMKTsKLQlpZiAocmV0KQotCQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIG5vLCBoYW5kbGVyKTsKLSNlbmRpZgotCXJldHVybiByZXQ7CisJcmV0dXJuIGRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoVEhJU19NT0RVTEUsIG5vLCBoYW5kbGVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBpb2N0bF91bnJlZyh1bnNpZ25lZCBpbnQgbm8sIGRhc2RfaW9jdGxfZm5fdCBoYW5kbGVyKQogewogCWRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihUSElTX01PRFVMRSwgbm8sIGhhbmRsZXIpOwotI2lmZGVmIENPTkZJR19DT01QQVQKLQl1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihubyk7Ci0jZW5kaWYKLQogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCBhZDE4NDFhLi4xYWVkYzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtMTEsNyArMTEsNyBAQAogICogZnVuY3Rpb25zIG1heSBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuIEluIHBhcnRpY3VsYXIKICAqIGRhc2RfZ2V0X2RldmljZSBpcyBhIG5vLW5vIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCiAgKgotICogJFJldmlzaW9uOiAxLjM3ICQKKyAqICRSZXZpc2lvbjogMS40MCAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNTEzLDE0ICs1MTMsNiBAQAogCWlmICghZGV2bWFwLT5kZXZpY2UpIHsKIAkJZGV2bWFwLT5kZXZpY2UgPSBkZXZpY2U7CiAJCWRldmljZS0+ZGV2aW5kZXggPSBkZXZtYXAtPmRldmluZGV4OwotCQlpZiAoZGV2bWFwLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSkKLQkJCXNldF9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncyk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChEQVNEX0ZMQUdfUk8sICZkZXZpY2UtPmZsYWdzKTsKLQkJaWYgKGRldm1hcC0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfVVNFRElBRykKLQkJCXNldF9iaXQoREFTRF9GTEFHX1VTRV9ESUFHLCAmZGV2aWNlLT5mbGFncyk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChEQVNEX0ZMQUdfVVNFX0RJQUcsICZkZXZpY2UtPmZsYWdzKTsKIAkJZ2V0X2RldmljZSgmY2Rldi0+ZGV2KTsKIAkJZGV2aWNlLT5jZGV2ID0gY2RldjsKIAkJcmMgPSAwOwpAQCAtNjUxLDE0ICs2NDMsOCBAQAogCQlkZXZtYXAtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9SRUFET05MWTsKIAllbHNlCiAJCWRldm1hcC0+ZmVhdHVyZXMgJj0gfkRBU0RfRkVBVFVSRV9SRUFET05MWTsKLQlpZiAoZGV2bWFwLT5kZXZpY2UpIHsKLQkJaWYgKGRldm1hcC0+ZGV2aWNlLT5nZHApCi0JCQlzZXRfZGlza19ybyhkZXZtYXAtPmRldmljZS0+Z2RwLCByb19mbGFnKTsKLQkJaWYgKHJvX2ZsYWcpCi0JCQlzZXRfYml0KERBU0RfRkxBR19STywgJmRldm1hcC0+ZGV2aWNlLT5mbGFncyk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChEQVNEX0ZMQUdfUk8sICZkZXZtYXAtPmRldmljZS0+ZmxhZ3MpOwotCX0KKwlpZiAoZGV2bWFwLT5kZXZpY2UgJiYgZGV2bWFwLT5kZXZpY2UtPmdkcCkKKwkJc2V0X2Rpc2tfcm8oZGV2bWFwLT5kZXZpY2UtPmdkcCwgcm9fZmxhZyk7CiAJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTczOSw2ICs3MjUsNDUgQEAKIAkuYXR0cnMgPSBkYXNkX2F0dHJzLAogfTsKIAorLyoKKyAqIFJldHVybiB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGZlYXR1cmUuCisgKi8KK2ludAorZGFzZF9nZXRfZmVhdHVyZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGZlYXR1cmUpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisKKwlkZXZtYXAgPSBkYXNkX2ZpbmRfYnVzaWQoY2Rldi0+ZGV2LmJ1c19pZCk7CisJaWYgKElTX0VSUihkZXZtYXApKQorCQlyZXR1cm4gKGludCkgUFRSX0VSUihkZXZtYXApOworCisJcmV0dXJuICgoZGV2bWFwLT5mZWF0dXJlcyAmIGZlYXR1cmUpICE9IDApOworfQorCisvKgorICogU2V0IC8gcmVzZXQgZ2l2ZW4gZmVhdHVyZS4KKyAqIEZsYWcgaW5kaWNhdGVzIHdldGhlciB0byBzZXQgKCE9MCkgb3IgdGhlIHJlc2V0ICg9MCkgdGhlIGZlYXR1cmUuCisgKi8KK2ludAorZGFzZF9zZXRfZmVhdHVyZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGZlYXR1cmUsIGludCBmbGFnKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCisJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGNkZXYtPmRldi5idXNfaWQpOworCWlmIChJU19FUlIoZGV2bWFwKSkKKwkJcmV0dXJuIChpbnQpIFBUUl9FUlIoZGV2bWFwKTsKKworCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJaWYgKGZsYWcpCisJCWRldm1hcC0+ZmVhdHVyZXMgfD0gZmVhdHVyZTsKKwllbHNlCisJCWRldm1hcC0+ZmVhdHVyZXMgJj0gfmZlYXR1cmU7CisKKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKwogaW50CiBkYXNkX2FkZF9zeXNmc19maWxlcyhzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCA4MzhhZWRmLi44MTEwNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC03LDcgKzcsNyBAQAogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAxOTk5LDIwMDAKICAqCi0gKiAkUmV2aXNpb246IDEuNjkgJAorICogJFJldmlzaW9uOiAxLjcxICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xMTAxLDcgKzExMDEsOCBAQAogCQkJCWlmIChkYXNkX2Vja2RfY2RsX3NwZWNpYWwoYmxrX3Blcl90cmssIHJlY2lkKSl7CiAJCQkJCXJjbWQgfD0gMHg4OwogCQkJCQljb3VudCA9IGRhc2RfZWNrZF9jZGxfcmVjbGVuKHJlY2lkKTsKLQkJCQkJaWYgKGNvdW50IDwgYmxrc2l6ZSkKKwkJCQkJaWYgKGNvdW50IDwgYmxrc2l6ZSAmJgorCQkJCQkgICAgcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKQogCQkJCQkJbWVtc2V0KGRzdCArIGNvdW50LCAweGU1LAogCQkJCQkJICAgICAgIGJsa3NpemUgLSBjb3VudCk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggMWQ1MmRiNC4uOTZjNDkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC05LDcgKzksNyBAQAogICoKICAqIGdlbmRpc2sgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIHRoZSBkYXNkIGRyaXZlci4KICAqCi0gKiAkUmV2aXNpb246IDEuNDggJAorICogJFJldmlzaW9uOiAxLjUwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0zMSwxMiArMzEsMTYgQEAKIGRhc2RfZ2VuZGlza19hbGxvYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZ2RwOwotCWludCBsZW47CisJaW50IGxlbiwgZmVhdHVyZV9ybzsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgbWlub3IgZm9yIHRoaXMgZGV2aWNlIGV4aXN0cy4gKi8KIAlpZiAoZGV2aWNlLT5kZXZpbmRleCA+PSBEQVNEX1BFUl9NQUpPUikKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWZlYXR1cmVfcm8gPSBkYXNkX2dldF9mZWF0dXJlKGRldmljZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZKTsKKwlpZiAoZmVhdHVyZV9ybyA8IDApCisJCXJldHVybiBmZWF0dXJlX3JvOworCiAJZ2RwID0gYWxsb2NfZGlzaygxIDw8IERBU0RfUEFSVE5fQklUUyk7CiAJaWYgKCFnZHApCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzEsNyArNzUsNyBAQAogCiAgCXNwcmludGYoZ2RwLT5kZXZmc19uYW1lLCAiZGFzZC8lcyIsIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CiAKLQlpZiAodGVzdF9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncykpCisJaWYgKGZlYXR1cmVfcm8pCiAJCXNldF9kaXNrX3JvKGdkcCwgMSk7CiAJZ2RwLT5wcml2YXRlX2RhdGEgPSBkZXZpY2U7CiAJZ2RwLT5xdWV1ZSA9IGRldmljZS0+cmVxdWVzdF9xdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggNDU4NmUwZS4uYTlmMzhiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTYsNyArNiw3IEBACiAgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgogICogKEMpIElCTSBDb3Jwb3JhdGlvbiwgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIDE5OTksMjAwMAogICoKLSAqICRSZXZpc2lvbjogMS42MyAkCisgKiAkUmV2aXNpb246IDEuNjQgJAogICovCiAKICNpZm5kZWYgREFTRF9JTlRfSApAQCAtMzI5LDggKzMyOSw2IEBACiAjZGVmaW5lIERBU0RfU1RPUFBFRF9EQ19FSU8gIDE2ICAgICAgICAvKiBkaXNjb25uZWN0ZWQsIHJldHVybiAtRUlPICovCiAKIC8qIHBlciBkZXZpY2UgZmxhZ3MgKi8KLSNkZWZpbmUgREFTRF9GTEFHX1JPCQkwCS8qIGRldmljZSBpcyByZWFkLW9ubHkgKi8KLSNkZWZpbmUgREFTRF9GTEFHX1VTRV9ESUFHCTEJLyogdXNlIGRpYWcgZGlzY2lwbG5pZSAqLwogI2RlZmluZSBEQVNEX0ZMQUdfRFNDX0VSUk9SCTIJLyogcmV0dXJuIC1FSU8gd2hlbiBkaXNjb25uZWN0ZWQgKi8KICNkZWZpbmUgREFTRF9GTEFHX09GRkxJTkUJMwkvKiBkZXZpY2UgaXMgaW4gb2ZmbGluZSBwcm9jZXNzaW5nICovCiAKQEAgLTUwMSw2ICs0OTksOSBAQAogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGNjd19kZXZpY2UgKik7CiB2b2lkIGRhc2RfZGVsZXRlX2RldmljZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKK2ludCBkYXNkX2dldF9mZWF0dXJlKHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CitpbnQgZGFzZF9zZXRfZmVhdHVyZShzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQsIGludCk7CisKIGludCBkYXNkX2FkZF9zeXNmc19maWxlcyhzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIHZvaWQgZGFzZF9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IGNjd19kZXZpY2UgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGYxODkyYmEuLjk4MGM1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtNyw2ICs3LDggQEAKICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CiAgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OS0yMDAxCiAgKgorICogJFJldmlzaW9uOiAxLjQ1ICQKKyAqCiAgKiBpL28gY29udHJvbHMgZm9yIHRoZSBkYXNkIGRyaXZlci4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMjk0LDYgKzI5Niw3IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGZvcm1hdF9kYXRhX3QgZmRhdGE7CisJaW50IGZlYXR1cmVfcm87CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMzA0LDcgKzMwNywxMSBAQAogCiAJaWYgKGRldmljZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAodGVzdF9iaXQoREFTRF9GTEFHX1JPLCAmZGV2aWNlLT5mbGFncykpCisKKwlmZWF0dXJlX3JvID0gZGFzZF9nZXRfZmVhdHVyZShkZXZpY2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSk7CisJaWYgKGZlYXR1cmVfcm8gPCAwKQorCQlyZXR1cm4gZmVhdHVyZV9ybzsKKwlpZiAoZmVhdHVyZV9ybykKIAkJcmV0dXJuIC1FUk9GUzsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZkYXRhLCAodm9pZCBfX3VzZXIgKikgYXJncywKIAkJCSAgIHNpemVvZiAoc3RydWN0IGZvcm1hdF9kYXRhX3QpKSkKQEAgLTM3Nyw3ICszODQsNyBAQAogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBkYXNkX2luZm9ybWF0aW9uMl90ICpkYXNkX2luZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmM7CisJaW50IHJjLCBmZWF0dXJlX3JvOwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCiAJZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwpAQCAtMzg3LDYgKzM5NCwxMCBAQAogCWlmICghZGV2aWNlLT5kaXNjaXBsaW5lLT5maWxsX2luZm8pCiAJCXJldHVybiAtRUlOVkFMOwogCisJZmVhdHVyZV9ybyA9IGRhc2RfZ2V0X2ZlYXR1cmUoZGV2aWNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpOworCWlmIChmZWF0dXJlX3JvIDwgMCkKKwkJcmV0dXJuIGZlYXR1cmVfcm87CisKIAlkYXNkX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9pbmZvcm1hdGlvbjJfdCksIEdGUF9LRVJORUwpOwogCWlmIChkYXNkX2luZm8gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MTUsOSArNDI2LDggQEAKIAlpZiAoKGRldmljZS0+c3RhdGUgPCBEQVNEX1NUQVRFX1JFQURZKSB8fAogCSAgICAoZGFzZF9jaGVja19ibG9ja3NpemUoZGV2aWNlLT5icF9ibG9jaykpKQogCQlkYXNkX2luZm8tPmZvcm1hdCA9IERBU0RfRk9STUFUX05PTkU7Ci0JCi0JZGFzZF9pbmZvLT5mZWF0dXJlcyB8PSB0ZXN0X2JpdChEQVNEX0ZMQUdfUk8sICZkZXZpY2UtPmZsYWdzKSA/Ci0JCURBU0RfRkVBVFVSRV9SRUFET05MWSA6IERBU0RfRkVBVFVSRV9ERUZBVUxUOworCisJZGFzZF9pbmZvLT5mZWF0dXJlcyB8PSBmZWF0dXJlX3JvOwogCiAJaWYgKGRldmljZS0+ZGlzY2lwbGluZSkKIAkJbWVtY3B5KGRhc2RfaW5mby0+dHlwZSwgZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lLCA0KTsKQEAgLTQ2MCw3ICs0NzAsNyBAQAogZGFzZF9pb2N0bF9zZXRfcm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0JaW50IGludHZhbDsKKwlpbnQgaW50dmFsLCByYzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC00NzIsMTIgKzQ4MiwxMSBAQAogCWRldmljZSA9ICBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaWYgKGRldmljZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKKwogCXNldF9kaXNrX3JvKGJkZXYtPmJkX2Rpc2ssIGludHZhbCk7Ci0JaWYgKGludHZhbCkKLQkJc2V0X2JpdChEQVNEX0ZMQUdfUk8sICZkZXZpY2UtPmZsYWdzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChEQVNEX0ZMQUdfUk8sICZkZXZpY2UtPmZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyYyA9IGRhc2Rfc2V0X2ZlYXR1cmUoZGV2aWNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFksIGludHZhbCk7CisKKwlyZXR1cm4gcmM7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggMzUzZDQxMS4uZDdmMTk3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiAvcHJvYyBpbnRlcmZhY2UgZm9yIHRoZSBkYXNkIGRyaXZlci4KICAqCi0gKiAkUmV2aXNpb246IDEuMzAgJAorICogJFJldmlzaW9uOiAxLjMxICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC01NCw2ICs1NCw3IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJY2hhciAqc3Vic3RyOworCWludCBmZWF0dXJlOwogCiAJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9kZXZpbmRleCgodW5zaWduZWQgbG9uZykgdiAtIDEpOwogCWlmIChJU19FUlIoZGV2aWNlKSkKQEAgLTc3LDcgKzc4LDEwIEBACiAJZWxzZQogCQlzZXFfcHJpbnRmKG0sICIgaXMgPz8/Pz8/Pz8iKTsKIAkvKiBQcmludCBkZXZpY2VzIGZlYXR1cmVzLiAqLwotCXN1YnN0ciA9IHRlc3RfYml0KERBU0RfRkxBR19STywgJmRldmljZS0+ZmxhZ3MpID8gIihybykiIDogIiAiOworCWZlYXR1cmUgPSBkYXNkX2dldF9mZWF0dXJlKGRldmljZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZKTsKKwlpZiAoZmVhdHVyZSA8IDApCisJCXJldHVybiAwOworCXN1YnN0ciA9IGZlYXR1cmUgPyAiKHJvKSIgOiAiICI7CiAJc2VxX3ByaW50ZihtLCAiJTRzOiAiLCBzdWJzdHIpOwogCS8qIFByaW50IGRldmljZSBzdGF0dXMgaW5mb3JtYXRpb24uICovCiAJc3dpdGNoICgoZGV2aWNlICE9IE5VTEwpID8gZGV2aWNlLT5zdGF0ZSA6IC0xKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCmluZGV4IDM3MjBlNzcuLjgzZTZhMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vYWlycS5jCkBAIC00NSw3ICs0NSw3IEBACiAJZWxzZQogCQlyZXQgPSAoY21weGNoZygmYWRhcHRlcl9oYW5kbGVyLCBOVUxMLCBoYW5kbGVyKSA/IC1FQlVTWSA6IDApOwogCWlmICghcmV0KQotCQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwkJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEFsbG93IGludGVycnVwdHMgdG8gY29tcGxldGUuICovCiAKIAlzcHJpbnRmIChkYmZfdHh0LCAicmV0OiVkIiwgcmV0KTsKIAlDSU9fVFJBQ0VfRVZFTlQgKDQsIGRiZl90eHQpOwpAQCAtNjUsNyArNjUsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCWVsc2UgewogCQlhZGFwdGVyX2hhbmRsZXIgPSBOVUxMOwotCQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwkJc3luY2hyb25pemVfc2NoZWQoKTsgIC8qIEFsbG93IGludGVycnVwdHMgdG8gY29tcGxldGUuICovCiAJCXJldCA9IDA7CiAJfQogCXNwcmludGYgKGRiZl90eHQsICJyZXQ6JWQiLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggOTljZTVhNS4uMWQ5YjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBkcml2ZXJzL3MzOTAvY2lvL2Npby5jCiAgKiAgIFMvMzkwIGNvbW1vbiBJL08gcm91dGluZXMgLS0gbG93IGxldmVsIGkvbyBjYWxscwotICogICAkUmV2aXNpb246IDEuMTMxICQKKyAqICAgJFJldmlzaW9uOiAxLjEzMyAkCiAgKgogICogICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsCiAgKgkJCSAgICAgIElCTSBDb3Jwb3JhdGlvbgpAQCAtMjI4LDcgKzIyOCw3IEBACiBpbnQKIGNpb19zdGFydCAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IGNjdzEgKmNwYSwgX191OCBscG0pCiB7Ci0JcmV0dXJuIGNpb19zdGFydF9rZXkoc2NoLCBjcGEsIGxwbSwgZGVmYXVsdF9zdG9yYWdlX2tleSk7CisJcmV0dXJuIGNpb19zdGFydF9rZXkoc2NoLCBjcGEsIGxwbSwgUEFHRV9ERUZBVUxUX0tFWSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCmluZGV4IDExZTI2MGUuLjAyZDAxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBkcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwogICoKLSAqICAgJFJldmlzaW9uOiAxLjU1ICQKKyAqICAgJFJldmlzaW9uOiAxLjU2ICQKICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDIgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsCiAgKgkJCSBJQk0gQ29ycG9yYXRpb24KQEAgLTEyOCw3ICsxMjgsNyBAQAogCQkgdW5zaWduZWQgbG9uZyBpbnRwYXJtLCBfX3U4IGxwbSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlyZXR1cm4gY2N3X2RldmljZV9zdGFydF9rZXkoY2RldiwgY3BhLCBpbnRwYXJtLCBscG0sCi0JCQkJICAgIGRlZmF1bHRfc3RvcmFnZV9rZXksIGZsYWdzKTsKKwkJCQkgICAgUEFHRV9ERUZBVUxUX0tFWSwgZmxhZ3MpOwogfQogCiBpbnQKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQkJIGludCBleHBpcmVzKQogewogCXJldHVybiBjY3dfZGV2aWNlX3N0YXJ0X3RpbWVvdXRfa2V5KGNkZXYsIGNwYSwgaW50cGFybSwgbHBtLAotCQkJCQkgICAgZGVmYXVsdF9zdG9yYWdlX2tleSwgZmxhZ3MsCisJCQkJCSAgICBQQUdFX0RFRkFVTFRfS0VZLCBmbGFncywKIAkJCQkJICAgIGV4cGlyZXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDlhZDE0ZGIuLmI2ZGFhZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0xLDcgKzEsOSBAQAogI2lmbmRlZiBfQ0lPX1FESU9fSAogI2RlZmluZSBfQ0lPX1FESU9fSAogCi0jZGVmaW5lIFZFUlNJT05fQ0lPX1FESU9fSCAiJFJldmlzaW9uOiAxLjI2ICQiCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBWRVJTSU9OX0NJT19RRElPX0ggIiRSZXZpc2lvbjogMS4zMiAkIgogCiAjaWZkZWYgQ09ORklHX1FESU9fREVCVUcKICNkZWZpbmUgUURJT19WRVJCT1NFX0xFVkVMIDkKQEAgLTQyLDcgKzQ0LDcgQEAKIAogI2RlZmluZSBRRElPX1FfTEFQUyA1CiAKLSNkZWZpbmUgUURJT19TVE9SQUdFX0tFWSAwCisjZGVmaW5lIFFESU9fU1RPUkFHRV9LRVkgUEFHRV9ERUZBVUxUX0tFWQogCiAjZGVmaW5lIEwyX0NBQ0hFTElORV9TSVpFIDI1NgogI2RlZmluZSBJTkRJQ0FUT1JTX1BFUl9DQUNIRUxJTkUgKEwyX0NBQ0hFTElORV9TSVpFL3NpemVvZihfX3UzMikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCmluZGV4IGE5OGMwMGMuLjllYzI5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCkBAIC0zODUsOCArMzg1LDggQEAKIHN0YXRpYyBzc2l6ZV90IHo5MGNyeXB0X3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiBzdGF0aWMgc3NpemVfdCB6OTBjcnlwdF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLAogCQkJCQkJCXNpemVfdCwgbG9mZl90ICopOwotc3RhdGljIGludCB6OTBjcnlwdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwKLQkJCSAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBsb25nIHo5MGNyeXB0X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgbG9uZyB6OTBjcnlwdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAogc3RhdGljIHZvaWQgejkwY3J5cHRfcmVhZGVyX3Rhc2sodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCB6OTBjcnlwdF9zY2hlZHVsZV9yZWFkZXJfdGFzayh1bnNpZ25lZCBsb25nKTsKQEAgLTQzMywxMiArNDMzLDE1IEBACiBzdGF0aWMgYXRvbWljX3QgejkwY3J5cHRfc3RlcDsKIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgejkwY3J5cHRfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLnJlYWQJID0gejkwY3J5cHRfcmVhZCwKLQkud3JpdGUJID0gejkwY3J5cHRfd3JpdGUsCi0JLmlvY3RsCSA9IHo5MGNyeXB0X2lvY3RsLAotCS5vcGVuCSA9IHo5MGNyeXB0X29wZW4sCi0JLnJlbGVhc2UgPSB6OTBjcnlwdF9yZWxlYXNlCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IHo5MGNyeXB0X3JlYWQsCisJLndyaXRlCQk9IHo5MGNyeXB0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IHo5MGNyeXB0X3VubG9ja2VkX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gejkwY3J5cHRfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLm9wZW4JCT0gejkwY3J5cHRfb3BlbiwKKwkucmVsZWFzZQk9IHo5MGNyeXB0X3JlbGVhc2UKIH07CiAKICNpZm5kZWYgWjkwQ1JZUFRfVVNFX0hPVFBMVUcKQEAgLTQ3NCwxNCArNDc3LDEzIEBACiAJY29tcGF0X3VwdHJfdAluX21vZHVsdXM7CiB9OwogCi1zdGF0aWMgaW50Ci10cmFuc19tb2RleHBvMzIodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKLQkJc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgbG9uZwordHJhbnNfbW9kZXhwbzMyKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvXzMyIF9fdXNlciAqbWV4MzJ1ID0gY29tcGF0X3B0cihhcmcpOwogCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fMzIgIG1leDMyazsKIAlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvIF9fdXNlciAqbWV4NjQ7Ci0JaW50IHJldCA9IDA7CisJbG9uZyByZXQgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtZXgzMnUsIHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvXzMyKSkpCkBAIC00OTgsNyArNTAwLDcgQEAKIAkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKG1leDMyay5iX2tleSksICZtZXg2NC0+Yl9rZXkpICAgICAgICAgICB8fAogCSAgICBfX3B1dF91c2VyKGNvbXBhdF9wdHIobWV4MzJrLm5fbW9kdWx1cyksICZtZXg2NC0+bl9tb2R1bHVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0ID0gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKW1leDY0KTsKKwlyZXQgPSB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKW1leDY0KTsKIAlpZiAoIXJldCkKIAkJaWYgKF9fZ2V0X3VzZXIoaSwgJm1leDY0LT5vdXRwdXRkYXRhbGVuZ3RoKSB8fAogCQkgICAgX19wdXRfdXNlcihpLCAmbWV4MzJ1LT5vdXRwdXRkYXRhbGVuZ3RoKSkKQEAgLTUxOCwxNCArNTIwLDEzIEBACiAJY29tcGF0X3VwdHJfdAl1X211bHRfaW52OwogfTsKIAotc3RhdGljIGludAotdHJhbnNfbW9kZXhwb19jcnQzMih1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAotCQkgICAgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgbG9uZwordHJhbnNfbW9kZXhwb19jcnQzMihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnRfMzIgX191c2VyICpjcnQzMnUgPSBjb21wYXRfcHRyKGFyZyk7CiAJc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnRfMzIgIGNydDMyazsKIAlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCBfX3VzZXIgKmNydDY0OwotCWludCByZXQgPSAwOworCWxvbmcgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgY3J0MzJ1LApAQCAtNTQ2LDkgKzU0Nyw4IEBACiAJICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihjcnQzMmsubnBfcHJpbWUpLCAmY3J0NjQtPm5wX3ByaW1lKSAgICAgfHwKIAkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKGNydDMyay5ucV9wcmltZSksICZjcnQ2NC0+bnFfcHJpbWUpICAgICB8fAogCSAgICBfX3B1dF91c2VyKGNvbXBhdF9wdHIoY3J0MzJrLnVfbXVsdF9pbnYpLCAmY3J0NjQtPnVfbXVsdF9pbnYpKQotCQlyZXQgPSAtRUZBVUxUOwotCWlmICghcmV0KQotCQlyZXQgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY3J0NjQpOworCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXQgPSB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKWNydDY0KTsKIAlpZiAoIXJldCkKIAkJaWYgKF9fZ2V0X3VzZXIoaSwgJmNydDY0LT5vdXRwdXRkYXRhbGVuZ3RoKSB8fAogCQkgICAgX19wdXRfdXNlcihpLCAmY3J0MzJ1LT5vdXRwdXRkYXRhbGVuZ3RoKSkKQEAgLTU1Niw2NiArNTU2LDM0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjb21wYXRpYmxlX2lvY3Rsc1tdID0gewotCUlDQVo5MFNUQVRVUywgWjkwUVVJRVNDRSwgWjkwU1RBVF9UT1RBTENPVU5ULCBaOTBTVEFUX1BDSUNBQ09VTlQsCi0JWjkwU1RBVF9QQ0lDQ0NPVU5ULCBaOTBTVEFUX1BDSVhDQ0NPVU5ULCBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVCwKLQlaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVCwgWjkwU1RBVF9DRVgyQ0NPVU5ULCBaOTBTVEFUX1JFUVVFU1RRX0NPVU5ULAotCVo5MFNUQVRfUEVORElOR1FfQ09VTlQsIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5ULCBaOTBTVEFUX0RPTUFJTl9JTkRFWCwKLQlaOTBTVEFUX1NUQVRVU19NQVNLLCBaOTBTVEFUX1FERVBUSF9NQVNLLCBaOTBTVEFUX1BFUkRFVl9SRVFDTlQsCi19OwotCi1zdGF0aWMgdm9pZCB6OTBfdW5yZWdpc3Rlcl9pb2N0bDMycyh2b2lkKQorc3RhdGljIGxvbmcKK3o5MGNyeXB0X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaW50IGk7Ci0KLQl1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihJQ0FSU0FNT0RFWFBPKTsKLQl1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihJQ0FSU0FDUlQpOwotCi0JZm9yKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21wYXRpYmxlX2lvY3Rscyk7IGkrKykKLQkJdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oY29tcGF0aWJsZV9pb2N0bHNbaV0pOwotfQotCi1zdGF0aWMgaW50IHo5MF9yZWdpc3Rlcl9pb2N0bDMycyh2b2lkKQotewotCWludCByZXN1bHQsIGk7Ci0KLQlyZXN1bHQgPSByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oSUNBUlNBTU9ERVhQTywgdHJhbnNfbW9kZXhwbzMyKTsKLQlpZiAocmVzdWx0ID09IC1FQlVTWSkgewotCQl1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihJQ0FSU0FNT0RFWFBPKTsKLQkJcmVzdWx0ID0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKElDQVJTQU1PREVYUE8sCi0JCQkJCQkgICAgIHRyYW5zX21vZGV4cG8zMik7Ci0JfQotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0JcmVzdWx0ID0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKElDQVJTQUNSVCwgdHJhbnNfbW9kZXhwb19jcnQzMik7Ci0JaWYgKHJlc3VsdCA9PSAtRUJVU1kpIHsKLQkJdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oSUNBUlNBQ1JUKTsKLQkJcmVzdWx0ID0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKElDQVJTQUNSVCwKLQkJCQkJCSAgICAgdHJhbnNfbW9kZXhwb19jcnQzMik7Ci0JfQotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0KLQlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbXBhdGlibGVfaW9jdGxzKTsgaSsrKSB7Ci0JCXJlc3VsdCA9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihjb21wYXRpYmxlX2lvY3Rsc1tpXSwgMCk7Ci0JCWlmIChyZXN1bHQgPT0gLUVCVVNZKSB7Ci0JCQl1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihjb21wYXRpYmxlX2lvY3Rsc1tpXSk7Ci0JCQlyZXN1bHQgPSByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oCi0JCQkJCQkgICAgICAgY29tcGF0aWJsZV9pb2N0bHNbaV0sIDApOwotCQl9Ci0JCWlmIChyZXN1bHQpCi0JCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlIC8vICFDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW5saW5lIHZvaWQgejkwX3VucmVnaXN0ZXJfaW9jdGwzMnModm9pZCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgejkwX3JlZ2lzdGVyX2lvY3RsMzJzKHZvaWQpCi17Ci0JcmV0dXJuIDA7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElDQVo5MFNUQVRVUzoKKwljYXNlIFo5MFFVSUVTQ0U6CisJY2FzZSBaOTBTVEFUX1RPVEFMQ09VTlQ6CisJY2FzZSBaOTBTVEFUX1BDSUNBQ09VTlQ6CisJY2FzZSBaOTBTVEFUX1BDSUNDQ09VTlQ6CisJY2FzZSBaOTBTVEFUX1BDSVhDQ0NPVU5UOgorCWNhc2UgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQ6CisJY2FzZSBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVDoKKwljYXNlIFo5MFNUQVRfQ0VYMkNDT1VOVDoKKwljYXNlIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQ6CisJY2FzZSBaOTBTVEFUX1BFTkRJTkdRX0NPVU5UOgorCWNhc2UgWjkwU1RBVF9UT1RBTE9QRU5fQ09VTlQ6CisJY2FzZSBaOTBTVEFUX0RPTUFJTl9JTkRFWDoKKwljYXNlIFo5MFNUQVRfU1RBVFVTX01BU0s6CisJY2FzZSBaOTBTVEFUX1FERVBUSF9NQVNLOgorCWNhc2UgWjkwU1RBVF9QRVJERVZfUkVRQ05UOgorCQlyZXR1cm4gejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwoZmlscCwgY21kLCBhcmcpOworCWNhc2UgSUNBUlNBTU9ERVhQTzoKKwkJcmV0dXJuIHRyYW5zX21vZGV4cG8zMihmaWxwLCBjbWQsIGFyZyk7CisJY2FzZSBJQ0FSU0FDUlQ6CisJCXJldHVybiB0cmFuc19tb2RleHBvX2NydDMyKGZpbHAsIGNtZCwgYXJnKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworICAJfQogfQogI2VuZGlmCiAKQEAgLTczMCwxNCArNjk4LDkgQEAKIAlyZWFkZXJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoUkVBREVSVElNRSAqIEhaIC8gMTAwMCk7CiAJYWRkX3RpbWVyKCZyZWFkZXJfdGltZXIpOwogCi0JaWYgKChyZXN1bHQgPSB6OTBfcmVnaXN0ZXJfaW9jdGwzMnMoKSkpCi0JCWdvdG8gaW5pdF9tb2R1bGVfY2xlYW51cDsKLQogCXJldHVybiAwOyAvLyBzdWNjZXNzCiAKIGluaXRfbW9kdWxlX2NsZWFudXA6Ci0JejkwX3VucmVnaXN0ZXJfaW9jdGwzMnMoKTsKLQogI2lmbmRlZiBaOTBDUllQVF9VU0VfSE9UUExVRwogCWlmICgobnJlc3VsdCA9IG1pc2NfZGVyZWdpc3RlcigmejkwY3J5cHRfbWlzY19kZXZpY2UpKSkKIAkJUFJJTlRLKCJtaXNjX2RlcmVnaXN0ZXIgZmFpbGVkIHdpdGggJWQuXG4iLCBucmVzdWx0KTsKQEAgLTc2Myw4ICs3MjYsNiBAQAogCiAJUERFQlVHKCJQSUQgJWRcbiIsIFBJRCgpKTsKIAotCXo5MF91bnJlZ2lzdGVyX2lvY3RsMzJzKCk7Ci0KIAlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3o5MGNyeXB0IiwgMCk7CiAKICNpZm5kZWYgWjkwQ1JZUFRfVVNFX0hPVFBMVUcKQEAgLTgwMCw3ICs3NjEsNyBAQAogICogICAgIHo5MGNyeXB0X3JlbGVhc2UKICAqICAgICB6OTBjcnlwdF9yZWFkCiAgKiAgICAgejkwY3J5cHRfd3JpdGUKLSAqICAgICB6OTBjcnlwdF9pb2N0bAorICogICAgIHo5MGNyeXB0X3VubG9ja2VkX2lvY3RsCiAgKiAgICAgejkwY3J5cHRfc3RhdHVzCiAgKiAgICAgejkwY3J5cHRfc3RhdHVzX3dyaXRlCiAgKgkgZGlzYWJsZV9jYXJkCkBAIC0xODA0LDkgKzE3NjUsOCBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBhIGxpdHRsZSBsb25nLCBidXQgaXQncyByZWFsbHkganVzdCBvbmUgbGFyZ2Ugc3dpdGNoCiAgKiBzdGF0ZW1lbnQuCiAgKi8KLXN0YXRpYyBpbnQKLXo5MGNyeXB0X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nCit6OTBjcnlwdF91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHByaXZfZGF0YSAqcHJpdmF0ZV9kYXRhX3AgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhciAqc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IGEzZDI4NTguLjFlM2Y3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJY2hhciAqcHJlZml4OwogCWludCBsZW47Ci0Jdm9pZCAoKmNhbGxiYWNrKShjaGFyICpzdHIpOworCXZvaWQgKCpjYWxsYmFjaykoY2hhciAqZnJvbSwgY2hhciAqc3RyKTsKIH07CiAKIE1PRFVMRV9BVVRIT1IKQEAgLTU1LDggKzU1LDkgQEAKIHsKIAlzdHJ1Y3Qgc21zZ19jYWxsYmFjayAqY2I7CiAJdW5zaWduZWQgY2hhciAqbXNnOworCXVuc2lnbmVkIGNoYXIgc2VuZGVyWzldOwogCXVuc2lnbmVkIHNob3J0IGxlbjsKLQlpbnQgcmM7CisJaW50IHJjLCBpOwogCiAJbGVuID0gZWliLT5sbjFtc2cyLmlwYmZsbjFmOwogCW1zZyA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0FUT01JQ3xHRlBfRE1BKTsKQEAgLTY5LDEwICs3MCwxOCBAQAogCWlmIChyYyA9PSAwKSB7CiAJCW1zZ1tsZW5dID0gMDsKIAkJRUJDQVNDKG1zZywgbGVuKTsKKwkJbWVtY3B5KHNlbmRlciwgbXNnLCA4KTsKKwkJc2VuZGVyWzhdID0gMDsKKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSB0aGUgc2VuZGVyIG5hbWUuICovCisJCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCQlpZiAoc2VuZGVyW2ldICE9ICcgJyAmJiBzZW5kZXJbaV0gIT0gJ1x0JykKKwkJCQlicmVhazsKKwkJCXNlbmRlcltpXSA9IDA7CisJCX0KIAkJc3Bpbl9sb2NrKCZzbXNnX2xpc3RfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2IsICZzbXNnX2xpc3QsIGxpc3QpCiAJCQlpZiAoc3RybmNtcChtc2cgKyA4LCBjYi0+cHJlZml4LCBjYi0+bGVuKSA9PSAwKSB7Ci0JCQkJY2ItPmNhbGxiYWNrKG1zZyArIDgpOworCQkJCWNiLT5jYWxsYmFjayhzZW5kZXIsIG1zZyArIDgpOwogCQkJCWJyZWFrOwogCQkJfQogCQlzcGluX3VubG9jaygmc21zZ19saXN0X2xvY2spOwpAQCAtOTEsNyArMTAwLDcgQEAKIH07CiAKIGludAotc21zZ19yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICpwcmVmaXgsIHZvaWQgKCpjYWxsYmFjaykoY2hhciAqc3RyKSkKK3Ntc2dfcmVnaXN0ZXJfY2FsbGJhY2soY2hhciAqcHJlZml4LCB2b2lkICgqY2FsbGJhY2spKGNoYXIgKmZyb20sIGNoYXIgKnN0cikpCiB7CiAJc3RydWN0IHNtc2dfY2FsbGJhY2sgKmNiOwogCkBAIC0xMDgsNyArMTE3LDcgQEAKIH0KIAogdm9pZAotc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKnByZWZpeCwgdm9pZCAoKmNhbGxiYWNrKShjaGFyICpzdHIpKQorc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKnByZWZpeCwgdm9pZCAoKmNhbGxiYWNrKShjaGFyICpmcm9tLCBjaGFyICpzdHIpKQogewogCXN0cnVjdCBzbXNnX2NhbGxiYWNrICpjYiwgKnRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5oIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5oCmluZGV4IDA0Y2Q4NzEuLjY3ZjVkNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmgKQEAgLTUsNiArNSw2IEBACiAgKiBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKICAqLwogCi1pbnQgIHNtc2dfcmVnaXN0ZXJfY2FsbGJhY2soY2hhciAqLCB2b2lkICgqKShjaGFyICopKTsKLXZvaWQgc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKiwgdm9pZCAoKikoY2hhciAqKSk7CitpbnQgIHNtc2dfcmVnaXN0ZXJfY2FsbGJhY2soY2hhciAqLCB2b2lkICgqKShjaGFyICosIGNoYXIgKikpOwordm9pZCBzbXNnX3VucmVnaXN0ZXJfY2FsbGJhY2soY2hhciAqLCB2b2lkICgqKShjaGFyICosIGNoYXIgKikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGFzMTYuYyBiL2RyaXZlcnMvc2NzaS9wYXMxNi5jCmluZGV4IGU3MGRlZGIuLjc5NzY5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wYXMxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9wYXMxNi5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIHN0YXRpYyBpbnQgcGFzMTZfaXJxID0gMDsKICAKIAotaW50IHNjc2lfaXJxX3RyYW5zbGF0ZVtdID0KK3N0YXRpYyBjb25zdCBpbnQgc2NzaV9pcnFfdHJhbnNsYXRlW10gPQogCXsgMCwgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsIDAsICAwLCAgNywgIDgsICA5LCAgMCwgMTAsIDExIH07CiAKIC8qIFRoZSBkZWZhdWx0X2lycXMgYXJyYXkgY29udGFpbnMgdmFsdWVzIHVzZWQgdG8gc2V0IHRoZSBpcnEgaW50byB0aGUKQEAgLTE0NSw3ICsxNDUsNyBAQAogICogaXJxIGp1bXBlcnMgb24gdGhlIGJvYXJkKS4gIFRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgYXJyYXkgd2lsbCBiZQogICogYXNzaWduZWQgdG8gbG9naWNhbCBib2FyZCAwLCB0aGUgbmV4dCB0byBib2FyZCAxLCBldGMuCiAgKi8KLWludCBkZWZhdWx0X2lycXNbXSBfX2luaXRkYXRhID0gCitzdGF0aWMgaW50IGRlZmF1bHRfaXJxc1tdIF9faW5pdGRhdGEgPQogCXsgIFBBUzE2X0RFRkFVTFRfQk9BUkRfMV9JUlEsCiAJICAgUEFTMTZfREVGQVVMVF9CT0FSRF8yX0lSUSwKIAkgICBQQVMxNl9ERUZBVUxUX0JPQVJEXzNfSVJRLApAQCAtMTc3LDcgKzE3Nyw3IEBACiAKICNkZWZpbmUgTk9fQkFTRVMgKHNpemVvZiAoYmFzZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYmFzZSkpCiAKLXVuc2lnbmVkIHNob3J0ICBwYXMxNl9vZmZzZXRbIDggXSA9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgIHBhczE2X29mZnNldFsgOCBdID0KICAgICB7CiAJMHgxYzAwLCAgICAvKiBPVVRQVVRfREFUQV9SRUcgKi8KIAkweDFjMDEsICAgIC8qIElOSVRJQVRPUl9DT01NQU5EX1JFRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jIGIvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jCmluZGV4IGEwMDA5NWMuLjk3ZjRkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS91bHRyYXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvdWx0cmFzdG9yLmMKQEAgLTk0NSw3ICs5NDUsNyBAQAogCSAgICAgICBjb25maWcubXNjcFttc2NwX2luZGV4XS5TQ2ludCwgU0NwbnQpOwogI2VuZGlmCiAgICAgaWYgKGNvbmZpZy5tc2NwW21zY3BfaW5kZXhdLlNDaW50ID09IDApCi0JcmV0dXJuIEZBSUxVUkU7CisJcmV0dXJuIEZBSUxFRDsKIAogICAgIGlmIChjb25maWcubXNjcFttc2NwX2luZGV4XS5TQ2ludCAhPSBTQ3BudCkgcGFuaWMoIkJhZCBhYm9ydCIpOwogICAgIGNvbmZpZy5tc2NwW21zY3BfaW5kZXhdLlNDaW50ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCAyMThiNjkzLi4wZDkzNTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC01MSw3ICs1MSw3IEBACiAgKiAgIHNoYXJlX2lycXMgLSB3aGV0aGVyIHdlIHBhc3MgU0FfU0hJUlEgdG8gcmVxdWVzdF9pcnEoKS4gIFRoaXMgb3B0aW9uCiAgKiAgICAgICAgICAgICAgICBpcyB1bnNhZmUgd2hlbiB1c2VkIG9uIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMuCiAgKi8KLXVuc2lnbmVkIGludCBzaGFyZV9pcnFzID0gU0VSSUFMODI1MF9TSEFSRV9JUlFTOworc3RhdGljIHVuc2lnbmVkIGludCBzaGFyZV9pcnFzID0gU0VSSUFMODI1MF9TSEFSRV9JUlFTOwogCiAvKgogICogRGVidWdnaW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCBjNjgyYzYzLi4wMWE4NzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtMzIxLDE4ICszMjEsMzkgQEAKICNkZWZpbmUgVFhUTCAyIC8qIHJlc2V0IGRlZmF1bHQgKi8KICNkZWZpbmUgUlhUTCAxIC8qIHJlc2V0IGRlZmF1bHQgKi8KIAorc3RhdGljIGludCBpbXhfc2V0dXBfdWZjcihzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGludCB1ZmNyX3JmZGl2OworCisJLyogc2V0IHJlY2VpdmVyIC8gdHJhbnNtaXR0ZXIgdHJpZ2dlciBsZXZlbC4KKwkgKiBSRkRJViBpcyBzZXQgc3VjaCB3YXkgdG8gc2F0aXNmeSByZXF1ZXN0ZWQgdWFydGNsayB2YWx1ZQorCSAqLworCXZhbCA9IFRYVEw8PDEwIHwgUlhUTDsKKwl1ZmNyX3JmZGl2ID0gKGlteF9nZXRfcGVyY2xrMSgpICsgc3BvcnQtPnBvcnQudWFydGNsayAvIDIpIC8gc3BvcnQtPnBvcnQudWFydGNsazsKKworCWlmKCF1ZmNyX3JmZGl2KQorCQl1ZmNyX3JmZGl2ID0gMTsKKworCWlmKHVmY3JfcmZkaXYgPj0gNykKKwkJdWZjcl9yZmRpdiA9IDY7CisJZWxzZQorCQl1ZmNyX3JmZGl2ID0gNiAtIHVmY3JfcmZkaXY7CisKKwl2YWwgfD0gVUZDUl9SRkRJViAmICh1ZmNyX3JmZGl2IDw8IDcpOworCisJVUZDUigodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaW14X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gKHN0cnVjdCBpbXhfcG9ydCAqKXBvcnQ7CiAJaW50IHJldHZhbDsKLQl1bnNpZ25lZCBpbnQgdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBzZXQgcmVjZWl2ZXIgLyB0cmFuc21pdHRlciB0cmlnZ2VyIGxldmVsLiBXZSBhc3N1bWUKLQkgKiB0aGF0IFJGRElWIGhhcyBiZWVuIHNldCBieSB0aGUgYXJjaCBzZXR1cCBvciBieSB0aGUgYm9vdGxvYWRlci4KLQkgKi8KLQl2YWwgPSAoVUZDUigodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpICYgVUZDUl9SRkRJVikgIHwgVFhUTDw8MTAgfCBSWFRMOwotCVVGQ1IoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSA9IHZhbDsKKwlpbXhfc2V0dXBfdWZjcihzcG9ydCwgMCk7CiAKIAkvKiBkaXNhYmxlIHRoZSBEUkVOIGJpdCAoRGF0YSBSZWFkeSBpbnRlcnJ1cHQgZW5hYmxlKSBiZWZvcmUKIAkgKiByZXF1ZXN0aW5nIElSUXMKQEAgLTczNyw5ICs3NTgsMTIgQEAKIGlteF9jb25zb2xlX2dldF9vcHRpb25zKHN0cnVjdCBpbXhfcG9ydCAqc3BvcnQsIGludCAqYmF1ZCwKIAkJCSAgIGludCAqcGFyaXR5LCBpbnQgKmJpdHMpCiB7CisKIAlpZiAoIFVDUjEoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSB8IFVDUjFfVUFSVEVOICkgewogCQkvKiBvaywgdGhlIHBvcnQgd2FzIGVuYWJsZWQgKi8KIAkJdW5zaWduZWQgaW50IHVjcjIsIHViaXIsdWJtciwgdWFydGNsazsKKwkJdW5zaWduZWQgaW50IGJhdWRfcmF3OworCQl1bnNpZ25lZCBpbnQgdWNmcl9yZmRpdjsKIAogCQl1Y3IyID0gVUNSMigodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpOwogCkBAIC03NTgsOSArNzgyLDM1IEBACiAKIAkJdWJpciA9IFVCSVIoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmIDB4ZmZmZjsKIAkJdWJtciA9IFVCTVIoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmIDB4ZmZmZjsKLQkJdWFydGNsayA9IHNwb3J0LT5wb3J0LnVhcnRjbGs7CiAKLQkJKmJhdWQgPSAoKHVhcnRjbGsvMTYpICogKHViaXIgKyAxKSkgLyAodWJtciArIDEpOworCisJCXVjZnJfcmZkaXYgPSAoVUZDUigodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpICYgVUZDUl9SRkRJVikgPj4gNzsKKwkJaWYgKHVjZnJfcmZkaXYgPT0gNikKKwkJCXVjZnJfcmZkaXYgPSA3OworCQllbHNlCisJCQl1Y2ZyX3JmZGl2ID0gNiAtIHVjZnJfcmZkaXY7CisKKwkJdWFydGNsayA9IGlteF9nZXRfcGVyY2xrMSgpOworCQl1YXJ0Y2xrIC89IHVjZnJfcmZkaXY7CisKKwkJewkvKgorCQkJICogVGhlIG5leHQgY29kZSBwcm92aWRlcyBleGFjdCBjb21wdXRhdGlvbiBvZgorCQkJICogICBiYXVkX3JhdyA9IHJvdW5kKCgodWFydGNsay8xNikgKiAodWJpciArIDEpKSAvICh1Ym1yICsgMSkpCisJCQkgKiB3aXRob3V0IG5lZWQgb2YgZmxvYXQgc3VwcG9ydCBvciBsb25nIGxvbmcgZGl2aXNpb24sCisJCQkgKiB3aGljaCB3b3VsZCBiZSByZXF1aXJlZCB0byBwcmV2ZW50IDMyYml0IGFyaXRobWV0aWMgb3ZlcmZsb3cKKwkJCSAqLworCQkJdW5zaWduZWQgaW50IG11bCA9IHViaXIgKyAxOworCQkJdW5zaWduZWQgaW50IGRpdiA9IDE2ICogKHVibXIgKyAxKTsKKwkJCXVuc2lnbmVkIGludCByZW0gPSB1YXJ0Y2xrICUgZGl2OworCisJCQliYXVkX3JhdyA9ICh1YXJ0Y2xrIC8gZGl2KSAqIG11bDsKKwkJCWJhdWRfcmF3ICs9IChyZW0gKiBtdWwgKyBkaXYgLyAyKSAvIGRpdjsKKwkJCSpiYXVkID0gKGJhdWRfcmF3ICsgNTApIC8gMTAwICogMTAwOworCQl9CisKKwkJaWYoKmJhdWQgIT0gYmF1ZF9yYXcpCisJCQlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IENvbnNvbGUgSU1YIHJvdW5kZWQgYmF1ZCByYXRlIGZyb20gJWQgdG8gJWRcbiIsCisJCQkJYmF1ZF9yYXcsICpiYXVkKTsKIAl9CiB9CiAKQEAgLTc4Nyw2ICs4MzcsOCBAQAogCWVsc2UKIAkJaW14X2NvbnNvbGVfZ2V0X29wdGlvbnMoc3BvcnQsICZiYXVkLCAmcGFyaXR5LCAmYml0cyk7CiAKKwlpbXhfc2V0dXBfdWZjcihzcG9ydCwgMCk7CisKIAlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucygmc3BvcnQtPnBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwppbmRleCBkMDU0ZjEyLi5iYTRlMTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKQEAgLTgzOCw3ICs4MzgsNyBAQAogCXBvcnQtPmlwX3R4X3Byb2QgPSByZWFkbCgmcG9ydC0+aXBfc2VyaWFsX3JlZ3MtPnN0Y2lyKSAmIFBST0RfQ09OU19NQVNLOwogCXdyaXRlbChwb3J0LT5pcF90eF9wcm9kLCAmcG9ydC0+aXBfc2VyaWFsX3JlZ3MtPnN0cGlyKTsKIAlwb3J0LT5pcF9yeF9jb25zID0gcmVhZGwoJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zcnBpcikgJiBQUk9EX0NPTlNfTUFTSzsKLQl3cml0ZWwocG9ydC0+aXBfcnhfY29ucywgJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zcmNpcik7CisJd3JpdGVsKHBvcnQtPmlwX3J4X2NvbnMgfCBJT0M0X1NSQ0lSX0FSTSwgJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zcmNpcik7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgZm9yIHRoaXMgMTY1NTAgKi8KIAl1YXJ0ID0gcG9ydC0+aXBfdWFydF9yZWdzOwpAQCAtMTI3Miw4ICsxMjcyLDkgQEAKIAkgKiBhbmQgc2V0IHRoZSByeCB0aHJlc2hvbGQgdG8gdGhhdCBhbW91bnQuICBUaGVyZSBhcmUgNCBjaGFycwogCSAqIHBlciByaW5nIGVudHJ5LCBzbyB3ZSdsbCBkaXZpZGUgdGhlIG51bWJlciBvZiBjaGFycyB0aGF0IHdpbGwKIAkgKiBhcnJpdmUgaW4gdGltZW91dCBieSA0LgorCSAqIFNvIC4uLi4gdGltZW91dCAqIGJhdWQgLyAxMCAvIEhaIC8gNCwgd2l0aCBIWiA9IDEwMC4KIAkgKi8KLQl0aHJlc2hvbGQgPSB0aW1lb3V0ICogcG9ydC0+aXBfYmF1ZCAvIDEwIC8gSFogLyA0OworCXRocmVzaG9sZCA9IHRpbWVvdXQgKiBwb3J0LT5pcF9iYXVkIC8gNDAwMDsKIAlpZiAodGhyZXNob2xkID09IDApCiAJCXRocmVzaG9sZCA9IDE7CS8qIG90aGVyd2lzZSB3ZSdsbCBpbnRyIGFsbCB0aGUgdGltZSEgKi8KIApAQCAtMTI4NSw4ICsxMjg2LDEwIEBACiAKIAl3cml0ZWwocG9ydC0+aXBfc3NjciwgJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zc2NyKTsKIAotCS8qIE5vdyBzZXQgdGhlIHJ4IHRpbWVvdXQgdG8gdGhlIGdpdmVuIHZhbHVlICovCi0JdGltZW91dCA9IHRpbWVvdXQgKiBJT0M0X1NSVFJfSFogLyBIWjsKKwkvKiBOb3cgc2V0IHRoZSByeCB0aW1lb3V0IHRvIHRoZSBnaXZlbiB2YWx1ZQorCSAqIGFnYWluIHRpbWVvdXQgKiBJT0M0X1NSVFJfSFogLyBIWgorCSAqLworCXRpbWVvdXQgPSB0aW1lb3V0ICogSU9DNF9TUlRSX0haIC8gMTAwOwogCWlmICh0aW1lb3V0ID4gSU9DNF9TUlRSX0NOVCkKIAkJdGltZW91dCA9IElPQzRfU1JUUl9DTlQ7CiAKQEAgLTEzODAsNyArMTM4Myw3IEBACiAJaWYgKHBvcnQtPmlwX3R4X2xvd2F0ID09IDApCiAJCXBvcnQtPmlwX3R4X2xvd2F0ID0gMTsKIAotCXNldF9yeF90aW1lb3V0KHBvcnQsIHBvcnQtPmlwX3J4X3RpbWVvdXQpOworCXNldF9yeF90aW1lb3V0KHBvcnQsIDIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjg1LDggKzE2ODgsOCBAQAogewogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKIAlpbnQgYmF1ZCwgYml0czsKLQl1bnNpZ25lZCBjZmxhZywgY3ZhbDsKLQlpbnQgbmV3X3Bhcml0eSA9IDAsIG5ld19wYXJpdHlfZW5hYmxlID0gMCwgbmV3X3N0b3AgPSAxLCBuZXdfZGF0YSA9IDg7CisJdW5zaWduZWQgY2ZsYWc7CisJaW50IG5ld19wYXJpdHkgPSAwLCBuZXdfcGFyaXR5X2VuYWJsZSA9IDAsIG5ld19zdG9wID0gMCwgbmV3X2RhdGEgPSA4OwogCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSB0aGVfcG9ydC0+aW5mbzsKIAogCWNmbGFnID0gbmV3X3Rlcm1pb3MtPmNfY2ZsYWc7CkBAIC0xNjk0LDQ4ICsxNjk3LDM1IEBACiAJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CiAJY2FzZSBDUzU6CiAJCW5ld19kYXRhID0gNTsKLQkJY3ZhbCA9IDB4MDA7CiAJCWJpdHMgPSA3OwogCQlicmVhazsKIAljYXNlIENTNjoKIAkJbmV3X2RhdGEgPSA2OwotCQljdmFsID0gMHgwMTsKIAkJYml0cyA9IDg7CiAJCWJyZWFrOwogCWNhc2UgQ1M3OgogCQluZXdfZGF0YSA9IDc7Ci0JCWN2YWwgPSAweDAyOwogCQliaXRzID0gOTsKIAkJYnJlYWs7CiAJY2FzZSBDUzg6CiAJCW5ld19kYXRhID0gODsKLQkJY3ZhbCA9IDB4MDM7CiAJCWJpdHMgPSAxMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogY3V6IHdlIGFsd2F5cyBuZWVkIGEgZGVmYXVsdCAuLi4gKi8KIAkJbmV3X2RhdGEgPSA1OwotCQljdmFsID0gMHgwMDsKIAkJYml0cyA9IDc7CiAJCWJyZWFrOwogCX0KIAlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKLQkJY3ZhbCB8PSAweDA0OwogCQliaXRzKys7CiAJCW5ld19zdG9wID0gMTsKIAl9CiAJaWYgKGNmbGFnICYgUEFSRU5CKSB7Ci0JCWN2YWwgfD0gVUFSVF9MQ1JfUEFSSVRZOwogCQliaXRzKys7CiAJCW5ld19wYXJpdHlfZW5hYmxlID0gMTsKLQl9Ci0JaWYgKGNmbGFnICYgUEFST0REKSB7Ci0JCWN2YWwgfD0gVUFSVF9MQ1JfRVBBUjsKLQkJbmV3X3Bhcml0eSA9IDE7Ci0JfQotCWlmIChjZmxhZyAmIElHTlBBUikgewotCQljdmFsICY9IH5VQVJUX0xDUl9QQVJJVFk7Ci0JCW5ld19wYXJpdHlfZW5hYmxlID0gMDsKKwkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJbmV3X3Bhcml0eSA9IDE7CiAJfQogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUodGhlX3BvcnQsIG5ld190ZXJtaW9zLCBvbGRfdGVybWlvcywKIAkJCQlNSU5fQkFVRF9TVVBQT1JURUQsIE1BWF9CQVVEX1NVUFBPUlRFRCk7CkBAIC0xNzY1LDEwICsxNzU1LDE1IEBACiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fREFUQV9SRUFEWTsKIAl9CiAKLQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKIAkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfQ1RTX0ZMT1c7Ci0JZWxzZQorCQlwb3J0LT5pcF9zc2NyIHw9IElPQzRfU1NDUl9IRkNfRU47CisJfQorCWVsc2UgewogCQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7CisJCXBvcnQtPmlwX3NzY3IgJj0gfklPQzRfU1NDUl9IRkNfRU47CisJfQorCXdyaXRlbChwb3J0LT5pcF9zc2NyLCAmcG9ydC0+aXBfc2VyaWFsX3JlZ3MtPnNzY3IpOwogCiAJLyogU2V0IHRoZSBjb25maWd1cmF0aW9uIGFuZCBwcm9wZXIgbm90aWZpY2F0aW9uIGNhbGwgKi8KIAlEUFJJTlRfQ09ORklHKCgiJXMgOiBwb3J0IDB4JXAgY2ZsYWcgMCVvICIKQEAgLTE4MjUsMTIgKzE4MjAsNiBAQAogCS8qIHNldCB0aGUgc3BlZWQgb2YgdGhlIHNlcmlhbCBwb3J0ICovCiAJaW9jNF9jaGFuZ2Vfc3BlZWQodGhlX3BvcnQsIGluZm8tPnR0eS0+dGVybWlvcywgKHN0cnVjdCB0ZXJtaW9zICopMCk7CiAKLQkvKiBlbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIC0gYWZ0ZXIgaW9jNF9jaGFuZ2Vfc3BlZWQgYmVjYXVzZQotCSAqIEFTWU5DX0NUU19GTE9XIGlzIHNldCB0aGVyZSAqLwotCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7Ci0JCXBvcnQtPmlwX3NzY3IgfD0gSU9DNF9TU0NSX0hGQ19FTjsKLQkJd3JpdGVsKHBvcnQtPmlwX3NzY3IsICZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c3Njcik7Ci0JfQogCWluZm8tPmZsYWdzIHw9IFVJRl9JTklUSUFMSVpFRDsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NDcsNyArMTgzNiw2IEBACiAJfQogfQogCi0KIC8qKgogICogaGFuZGxlX2ludHIgLSBzZXJ2aWNlIGFueSBpbnRlcnJ1cHRzIGZvciB0aGUgZ2l2ZW4gcG9ydCAtIDJuZCBsZXZlbAogICoJCQljYWxsZWQgdmlhIHNkX2ludHIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc20uaCBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc20uaAppbmRleCBlMDcxNzYxLi43Nzc4MjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbS5oCkBAIC0zOTMsNyArMzkzLDYgQEAKIGludCBqc21fdWFydF9wb3J0X2luaXQoc3RydWN0IGpzbV9ib2FyZCAqKTsKIGludCBqc21fcmVtb3ZlX3VhcnRfcG9ydChzdHJ1Y3QganNtX2JvYXJkICopOwogdm9pZCBqc21faW5wdXQoc3RydWN0IGpzbV9jaGFubmVsICpjaCk7Ci12b2lkIGpzbV9jYXJyaWVyKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpOwogdm9pZCBqc21fY2hlY2tfcXVldWVfZmxvd19jb250cm9sKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCmluZGV4IDliNzljMWYuLjNhMTFhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYwpAQCAtNjg4LDcgKzY4OCw3IEBACiAvKgogICogTm8gbG9ja3MgYXJlIGFzc3VtZWQgdG8gYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZCBuZW9fY2xlYXJfYnJlYWsoc3RydWN0IGpzbV9jaGFubmVsICpjaCwgaW50IGZvcmNlKQorc3RhdGljIHZvaWQgbmVvX2NsZWFyX2JyZWFrKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gsIGludCBmb3JjZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCmluZGV4IDI0ZmU3NmMuLjk4ZGUyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwpAQCAtMzEsNiArMzEsOCBAQAogCiAjaW5jbHVkZSAianNtLmgiCiAKK3N0YXRpYyB2b2lkIGpzbV9jYXJyaWVyKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpOworCiBzdGF0aWMgaW5saW5lIGludCBqc21fZ2V0X21zdGF0KHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpCiB7CiAJdW5zaWduZWQgY2hhciBtc3RhdDsKQEAgLTc1NSw3ICs3NTcsNyBAQAogCWpzbV9wcmludGsoSU9DVEwsIElORk8sICZjaC0+Y2hfYmQtPnBjaV9kZXYsICJmaW5pc2hcbiIpOwogfQogCi12b2lkIGpzbV9jYXJyaWVyKHN0cnVjdCBqc21fY2hhbm5lbCAqY2gpCitzdGF0aWMgdm9pZCBqc21fY2FycmllcihzdHJ1Y3QganNtX2NoYW5uZWwgKmNoKQogewogCXN0cnVjdCBqc21fYm9hcmQgKmJkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCmluZGV4IDkwMzRmOWEuLjZlZWI0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCkBAIC0xMDcsNiArMTA3LDEzIEBACiAJaW50CQkJbGluZVs0XTsKIH07CiAKK3N0cnVjdCBzZXJpYWxfY2ZnX21lbSB7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCXVfY2hhciBidWZbMjU2XTsKK307CisKKwogc3RhdGljIHZvaWQgc2VyaWFsX2NvbmZpZyhkZXZfbGlua190ICogbGluayk7CiBzdGF0aWMgaW50IHNlcmlhbF9ldmVudChldmVudF90IGV2ZW50LCBpbnQgcHJpb3JpdHksCiAJCQlldmVudF9jYWxsYmFja19hcmdzX3QgKiBhcmdzKTsKQEAgLTM1NywxNCArMzY0LDI0IEBACiAJc3RhdGljIGludCBzaXplX3RhYmxlWzJdID0geyA4LCAxNiB9OwogCWNsaWVudF9oYW5kbGVfdCBoYW5kbGUgPSBsaW5rLT5oYW5kbGU7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKLQl0dXBsZV90IHR1cGxlOwotCXVfY2hhciBidWZbMjU2XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CisJc3RydWN0IHNlcmlhbF9jZmdfbWVtICpjZmdfbWVtOworCXR1cGxlX3QgKnR1cGxlOworCXVfY2hhciAqYnVmOworCWNpc3BhcnNlX3QgKnBhcnNlOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwogCWNvbmZpZ19pbmZvX3QgY29uZmlnOwogCWludCBpLCBqLCB0cnk7CiAJaW50IHM7CiAKKwljZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmdfbWVtKQorCQlyZXR1cm4gLTE7CisKKwl0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKKwlwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKKwljZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKKwlidWYgPSBjZmdfbWVtLT5idWY7CisKIAkvKiBJZiB0aGUgY2FyZCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGxvb2sgdXAgdGhlIHBvcnQgYW5kIGlycSAqLwogCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25maWcpOwogCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY29uZmlnLkF0dHJpYnV0ZXMgJiBDT05GX1ZBTElEX0NMSUVOVCkpIHsKQEAgLTM3NywyMSArMzk0LDIzIEBACiAJCQlwb3J0ID0gY29uZmlnLkJhc2VQb3J0MSArIDB4Mjg7CiAJCQlpbmZvLT5zbGF2ZSA9IDE7CiAJCX0KLQkJaWYgKGluZm8tPnNsYXZlKQorCQlpZiAoaW5mby0+c2xhdmUpIHsKKwkJCWtmcmVlKGNmZ19tZW0pOwogCQkJcmV0dXJuIHNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIHBvcnQsIGNvbmZpZy5Bc3NpZ25lZElSUSk7CisJCX0KIAl9CiAJbGluay0+Y29uZi5WY2MgPSBjb25maWcuVmNjOwogCiAJLyogRmlyc3QgcGFzczogbG9vayBmb3IgYSBjb25maWcgZW50cnkgdGhhdCBsb29rcyBub3JtYWwuICovCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwl0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CisJdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAJLyogVHdvIHRyaWVzOiB3aXRob3V0IElPIGFsaWFzZXMsIHRoZW4gd2l0aCBhbGlhc2VzICovCiAJZm9yIChzID0gMDsgcyA8IDI7IHMrKykgewogCQlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCQkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewogCQkJCWlmIChpICE9IENTX1NVQ0NFU1MpCiAJCQkJCWdvdG8gbmV4dF9lbnRyeTsKQEAgLTQwOSwxNCArNDI4LDE0IEBACiAJCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQkJfQogbmV4dF9lbnRyeToKLQkJCQlpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJCQlpID0gbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiAJCQl9CiAJCX0KIAl9CiAJLyogU2Vjb25kIHBhc3M6IHRyeSB0byBmaW5kIGFuIGVudHJ5IHRoYXQgaXNuJ3QgcGlja3kgYWJvdXQKIAkgICBpdHMgYmFzZSBhZGRyZXNzLCB0aGVuIHRyeSB0byBncmFiIGFueSBzdGFuZGFyZCBzZXJpYWwgcG9ydAogCSAgIGFkZHJlc3MsIGFuZCBmaW5hbGx5IHRyeSB0byBnZXQgYW55IGZyZWUgcG9ydC4gKi8KLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKSAmJgogCQkgICAgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKQEAgLTQyOSw3ICs0NDgsNyBAQAogCQkJCQlnb3RvIGZvdW5kX3BvcnQ7CiAJCQl9CiAJCX0KLQkJaSA9IG5leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAl9CiAKICAgICAgIGZvdW5kX3BvcnQ6CkBAIC00MzcsNiArNDU2LDcgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFCiAJCSAgICAgICAic2VyaWFsX2NzOiBubyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCwgZ2l2aW5nIHVwXG4iKTsKIAkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOworCQlrZnJlZShjZmdfbWVtKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDUwLDkgKzQ3MCwxMCBAQAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CisJCWtmcmVlKGNmZ19tZW0pOwogCQlyZXR1cm4gLTE7CiAJfQotCisJa2ZyZWUoY2ZnX21lbSk7CiAJcmV0dXJuIHNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIH0KIApAQCAtNDYwLDI5ICs0ODEsMzkgQEAKIHsKIAljbGllbnRfaGFuZGxlX3QgaGFuZGxlID0gbGluay0+aGFuZGxlOwogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQl1X2NoYXIgYnVmWzI1Nl07Ci0JY2lzcGFyc2VfdCBwYXJzZTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OworCXN0cnVjdCBzZXJpYWxfY2ZnX21lbSAqY2ZnX21lbTsKKwl0dXBsZV90ICp0dXBsZTsKKwl1X2NoYXIgKmJ1ZjsKKwljaXNwYXJzZV90ICpwYXJzZTsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZjsKIAljb25maWdfaW5mb190IGNvbmZpZzsKLQlpbnQgaSwgYmFzZTIgPSAwOworCWludCBpLCByYywgYmFzZTIgPSAwOworCisJY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpYWxfY2ZnX21lbSksIEdGUF9LRVJORUwpOworCWlmICghY2ZnX21lbSkKKwkJcmV0dXJuIC0xOworCXR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOworCXBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOworCWNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OworCWJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKIAogCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZjb25maWcpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJY3NfZXJyb3IoaGFuZGxlLCBHZXRDb25maWd1cmF0aW9uSW5mbywgaSk7Ci0JCXJldHVybiAtMTsKKwkJcmMgPSAtMTsKKwkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCWxpbmstPmNvbmYuVmNjID0gY29uZmlnLlZjYzsKIAotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOworCXR1cGxlLT5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUtPlR1cGxlRGF0YU1heCA9IDI1NTsKKwl0dXBsZS0+QXR0cmlidXRlcyA9IDA7CisJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwogCiAJLyogRmlyc3QsIGxvb2sgZm9yIGEgZ2VuZXJpYyBmdWxsLXNpemVkIHdpbmRvdyAqLwogCWxpbmstPmlvLk51bVBvcnRzMSA9IGluZm8tPm11bHRpICogODsKLQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSk7CisJaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCS8qIFRoZSBxdWFkIHBvcnQgY2FyZHMgaGF2ZSBiYWQgQ0lTJ3MsIHNvIGp1c3QgbG9vayBmb3IgYQogCQkgICB3aW5kb3cgbGFyZ2VyIHRoYW4gOCBwb3J0cyBhbmQgYXNzdW1lIGl0IHdpbGwgYmUgcmlnaHQgKi8KQEAgLTQ5NywxNCArNTI4LDE0IEBACiAJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQogCQkJCWJyZWFrOwogCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQlpID0gbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CiAJfQogCiAJLyogSWYgdGhhdCBkaWRuJ3Qgd29yaywgbG9vayBmb3IgdHdvIHdpbmRvd3MgKi8KIAlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CiAJCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CiAJCWluZm8tPm11bHRpID0gMjsKLQkJaSA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpOworCQlpID0gZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwogCQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7CiAJCQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNmLT5pby5ud2luID09IDIpKSB7CiAJCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKQEAgLTUxNywxMyArNTQ4LDE0IEBACiAJCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpID0gbmV4dF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwkJCWkgPSBuZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAkJfQogCX0KIAogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0SU8sIGkpOwotCQlyZXR1cm4gLTE7CisJCXJjID0gLTE7CisJCWdvdG8gZnJlZV9jZmdfbWVtOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluay0+aGFuZGxlLCAmbGluay0+aXJxKTsKQEAgLTU0MSw3ICs1NzMsOCBAQAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwogCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKIAkJY3NfZXJyb3IobGluay0+aGFuZGxlLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7Ci0JCXJldHVybiAtMTsKKwkJcmMgPSAtMTsKKwkJZ290byBmcmVlX2NmZ19tZW07CiAJfQogCiAJLyogVGhlIE94Zm9yZCBTZW1pY29uZHVjdG9yIE9YQ0Y5NTAgY2FyZHMgYXJlIGluIGZhY3Qgc2luZ2xlLXBvcnQ6CkBAIC01NTQsMTcgKzU4NywyMyBAQAogCQkJc2V0dXBfc2VyaWFsKGhhbmRsZSwgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogCQkJb3V0YigxMiwgYmFzZTIgKyAxKTsKIAkJfQotCQlyZXR1cm4gMDsKKwkJcmMgPSAwOworCQlnb3RvIGZyZWVfY2ZnX21lbTsKIAl9CiAKIAlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJLyogVGhlIE5va2lhIGNhcmRzIGFyZSBub3QgcmVhbGx5IG11bHRpcG9ydCBjYXJkcyAqLwotCWlmIChpbmZvLT5tYW5maWQgPT0gTUFORklEX05PS0lBKQotCQlyZXR1cm4gMDsKKwlpZiAoaW5mby0+bWFuZmlkID09IE1BTkZJRF9OT0tJQSkgeworCQlyYyA9IDA7CisJCWdvdG8gZnJlZV9jZmdfbWVtOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bXVsdGkgLSAxOyBpKyspCi0JCXNldHVwX3NlcmlhbChoYW5kbGUsIGluZm8sIGJhc2UyICsgKDggKiBpKSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKLQotCXJldHVybiAwOworCQlzZXR1cF9zZXJpYWwoaGFuZGxlLCBpbmZvLCBiYXNlMiArICg4ICogaSksCisJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlyYyA9IDA7CitmcmVlX2NmZ19tZW06CisJa2ZyZWUoY2ZnX21lbSk7CisJcmV0dXJuIHJjOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTU3OSwzOSArNjE4LDQ5IEBACiB7CiAJY2xpZW50X2hhbmRsZV90IGhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwotCXR1cGxlX3QgdHVwbGU7Ci0JdV9zaG9ydCBidWZbMTI4XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CisJc3RydWN0IHNlcmlhbF9jZmdfbWVtICpjZmdfbWVtOworCXR1cGxlX3QgKnR1cGxlOworCXVfY2hhciAqYnVmOworCWNpc3BhcnNlX3QgKnBhcnNlOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwogCWludCBpLCBsYXN0X3JldCwgbGFzdF9mbjsKIAogCURFQlVHKDAsICJzZXJpYWxfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpYWxfY2ZnX21lbSksIEdGUF9LRVJORUwpOworCWlmICghY2ZnX21lbSkKKwkJZ290byBmYWlsZWQ7CisKKwl0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKKwlwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKKwljZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKKwlidWYgPSBjZmdfbWVtLT5idWY7CisKKwl0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7CisJdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKIAkvKiBHZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciBpbmZvcm1hdGlvbiAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7Ci0JbGFzdF9yZXQgPSBmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKTsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwlsYXN0X3JldCA9IGZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKIAlpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgewogCQlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQotCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOwotCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS0+Y29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UtPmNvbmZpZy5ybWFza1swXTsKIAogCS8qIENvbmZpZ3VyZSBjYXJkICovCiAJbGluay0+c3RhdGUgfD0gREVWX0NPTkZJRzsKIAogCS8qIElzIHRoaXMgYSBjb21wbGlhbnQgbXVsdGlmdW5jdGlvbiBjYXJkPyAqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9MT05HTElOS19NRkM7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT04gfCBUVVBMRV9SRVRVUk5fTElOSzsKLQlpbmZvLT5tdWx0aSA9IChmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSA9PSBDU19TVUNDRVNTKTsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKKwl0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT04gfCBUVVBMRV9SRVRVUk5fTElOSzsKKwlpbmZvLT5tdWx0aSA9IChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUyk7CiAKIAkvKiBJcyB0aGlzIGEgbXVsdGlwb3J0IGNhcmQ/ICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX01BTkZJRDsKLQlpZiAoZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgeworCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOworCWlmIChmaXJzdF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgewogCQlpbmZvLT5tYW5maWQgPSBsZTE2X3RvX2NwdShidWZbMF0pOwogCQlmb3IgKGkgPSAwOyBpIDwgTVVMVElfQ09VTlQ7IGkrKykKIAkJCWlmICgoaW5mby0+bWFuZmlkID09IG11bHRpX2lkW2ldLm1hbmZpZCkgJiYKQEAgLTYyMywxMyArNjcyLDEzIEBACiAKIAkvKiBBbm90aGVyIGNoZWNrIGZvciBkdWFsLXNlcmlhbCBjYXJkczogbG9vayBmb3IgZWl0aGVyIHNlcmlhbCBvcgogCSAgIG11bHRpZnVuY3Rpb24gY2FyZHMgdGhhdCBhc2sgZm9yIGFwcHJvcHJpYXRlIElPIHBvcnQgcmFuZ2VzICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNJRDsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNJRDsKIAlpZiAoKGluZm8tPm11bHRpID09IDApICYmCi0JICAgICgoZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkgIT0gQ1NfU1VDQ0VTUykgfHwKLQkgICAgIChwYXJzZS5mdW5jaWQuZnVuYyA9PSBDSVNUUExfRlVOQ0lEX01VTFRJKSB8fAotCSAgICAgKHBhcnNlLmZ1bmNpZC5mdW5jID09IENJU1RQTF9GVU5DSURfU0VSSUFMKSkpIHsKLQkJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JCWlmIChmaXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSA9PSBDU19TVUNDRVNTKSB7CisJICAgICgoZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpIHx8CisJICAgICAocGFyc2UtPmZ1bmNpZC5mdW5jID09IENJU1RQTF9GVU5DSURfTVVMVEkpIHx8CisJICAgICAocGFyc2UtPmZ1bmNpZC5mdW5jID09IENJU1RQTF9GVU5DSURfU0VSSUFMKSkpIHsKKwkJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCQlpZiAoZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKIAkJCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuICUgOCA9PSAwKSkKIAkJCQlpbmZvLT5tdWx0aSA9IGNmLT5pby53aW5bMF0ubGVuID4+IDM7CiAJCQlpZiAoKGNmLT5pby5ud2luID09IDIpICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSA4KSAmJgpAQCAtNjY0LDYgKzcxMyw3IEBACiAKIAlsaW5rLT5kZXYgPSAmaW5mby0+bm9kZVswXTsKIAlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOworCWtmcmVlKGNmZ19tZW0pOwogCXJldHVybjsKIAogIGNzX2ZhaWxlZDoKQEAgLTY3MSw2ICs3MjEsNyBAQAogIGZhaWxlZDoKIAlzZXJpYWxfcmVtb3ZlKGxpbmspOwogCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CisJa2ZyZWUoY2ZnX21lbSk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IGZmYWFiOWIuLmZlZTY0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCiBzdGF0aWMgdm9pZCBzbl9zYWxfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkKTsKIHN0YXRpYyBpbnQgX19pbml0IHNuX3NhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICosIGNoYXIgKik7Ci1leHRlcm4gc3RydWN0IHVhcnRfZHJpdmVyIHNhbF9jb25zb2xlX3VhcnQ7CitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNhbF9jb25zb2xlX3VhcnQ7CiBleHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKnVhcnRfY29uc29sZV9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKiwgaW50ICopOwogCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgc2FsX2NvbnNvbGUgPSB7CkBAIC04MDEsNyArODAxLDcgQEAKIAogI2RlZmluZSBTQUxfQ09OU09MRQkmc2FsX2NvbnNvbGUKIAotc3RydWN0IHVhcnRfZHJpdmVyIHNhbF9jb25zb2xlX3VhcnQgPSB7CitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNhbF9jb25zb2xlX3VhcnQgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lID0gInNuX2NvbnNvbGUiLAogCS5kZXZfbmFtZSA9IERFVklDRV9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDJhMWM1OTYuLjZiZThmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTE5OCw2ICsxOTgsMTQgQEAKIAkgIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgTENEIGRpc3BsYXkgd2l0aCB5b3VyIFNBLTExMDAgc3lzdGVtLCBzYXkKIAkgIFkgaGVyZS4KIAorY29uZmlnIEZCX0lNWAorCXRyaXN0YXRlICJNb3Rvcm9sYSBpLk1YIExDRCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgQVJNICYmIEFSQ0hfSU1YCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TT0ZUX0NVUlNPUgorCiBjb25maWcgRkJfQ1lCRVIyMDAwCiAJdHJpc3RhdGUgIkN5YmVyUHJvIDIwMDAvMjAxMC81MDAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kgJiYgKEJST0tFTiB8fCAhU1BBUkM2NCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IDkyMjY1YjcuLmJkOGRjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtOTAsNiArOTAsNyBAQAogb2JqLSQoQ09ORklHX0ZCX01BWElORSkJCSAgKz0gbWF4aW5lZmIubwogb2JqLSQoQ09ORklHX0ZCX1RYMzkxMikJCSAgKz0gdHgzOTEyZmIubwogb2JqLSQoQ09ORklHX0ZCX1MxRDEzWFhYKQkgICs9IHMxZDEzeHh4ZmIubworb2JqLSQoQ09ORklHX0ZCX0lNWCkgICAgICAgICAgICAgICs9IGlteGZiLm8KIAogIyBQbGF0Zm9ybSBvciBmYWxsYmFjayBkcml2ZXJzIGdvIGhlcmUKIG9iai0kKENPTkZJR19GQl9WRVNBKSAgICAgICAgICAgICArPSB2ZXNhZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYyBiL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKaW5kZXggM2UzODZmZC4uMzIxZGJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCkBAIC0xMzQsMTYgKzEzNCwxNiBAQAogCQlicmVhazsKIAljYXNlIDE2OgogCQl2YXItPnJlZC5sZW5ndGgJCT0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGgJPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aAk9IDY7CiAJCXZhci0+Ymx1ZS5sZW5ndGgJPSA1OwogCQlpZiAoZmItPnBhbmVsLT5jbnRsICYgQ05UTF9CR1IpIHsKLQkJCXZhci0+cmVkLm9mZnNldAkJPSAxMDsKKwkJCXZhci0+cmVkLm9mZnNldAkJPSAxMTsKIAkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gNTsKIAkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOwogCQl9IGVsc2UgewogCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDA7CiAJCQl2YXItPmdyZWVuLm9mZnNldAk9IDU7Ci0JCQl2YXItPmJsdWUub2Zmc2V0CT0gMTA7CisJCQl2YXItPmJsdWUub2Zmc2V0CT0gMTE7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAzMjoKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkJCSAgY29udmVydF9iaXRmaWVsZChncmVlbiwgJmZiLT5mYi52YXIuZ3JlZW4pIHwKIAkJCQkgIGNvbnZlcnRfYml0ZmllbGQocmVkLCAmZmItPmZiLnZhci5yZWQpOwogCi0JaWYgKGZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCAmJiByZWdubyA8IDI1NikgeworCWlmIChmYi0+ZmIuZml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfUFNFVURPQ09MT1IgJiYgcmVnbm8gPCAyNTYpIHsKIAkJaW50IGh3X3JlZyA9IENMQ0RfUEFMRVRURSArICgocmVnbm8gKiAyKSAmIH4zKTsKIAkJdTMyIHZhbCwgbWFzaywgbmV3dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwppbmRleCBlOGViMTI0Li5lZTI1YjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKQEAgLTEwNTcsMTMgKzEwNTcsMTQgQEAKIAlyZXR1cm4gcmFkZW9uX3NjcmVlbl9ibGFuayhyaW5mbywgYmxhbmssIDApOwogfQogCi1zdGF0aWMgaW50IHJhZGVvbmZiX3NldGNvbHJlZyAodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IHJhZGVvbl9zZXRjb2xyZWcgKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICAgIHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKLSAgICAgICAgc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvID0gaW5mby0+cGFyOwogCXUzMiBwaW5kZXg7CiAJdW5zaWduZWQgaW50IGk7Ci0JCisKKwogCWlmIChyZWdubyA+IDI1NSkKIAkJcmV0dXJuIDE7CiAKQEAgLTEwNzgsMjAgKzEwNzksNyBAQAogICAgICAgICBwaW5kZXggPSByZWdubzsKIAogICAgICAgICBpZiAoIXJpbmZvLT5hc2xlZXApIHsKLSAgICAgICAgCXUzMiBkYWNfY250bDIsIHZjbGtfY250bCA9IDA7Ci0gICAgICAgIAkKIAkJcmFkZW9uX2ZpZm9fd2FpdCg5KTsKLQkJaWYgKHJpbmZvLT5pc19tb2JpbGl0eSkgewotCQkJdmNsa19jbnRsID0gSU5QTEwoVkNMS19FQ1BfQ05UTCk7Ci0JCQlPVVRQTEwoVkNMS19FQ1BfQ05UTCwgdmNsa19jbnRsICYgflBJWENMS19EQUNfQUxXQVlTX09OYik7Ci0JCX0KLQotCQkvKiBNYWtlIHN1cmUgd2UgYXJlIG9uIGZpcnN0IHBhbGV0dGUgKi8KLQkJaWYgKHJpbmZvLT5oYXNfQ1JUQzIpIHsKLQkJCWRhY19jbnRsMiA9IElOUkVHKERBQ19DTlRMMik7Ci0JCQlkYWNfY250bDIgJj0gfkRBQzJfUEFMRVRURV9BQ0NFU1NfQ05UTDsKLQkJCU9VVFJFRyhEQUNfQ05UTDIsIGRhY19jbnRsMik7Ci0JCX0KIAogCQlpZiAocmluZm8tPmJwcCA9PSAxNikgewogCQkJcGluZGV4ID0gcmVnbm8gKiA4OwpAQCAtMTEwMSwyNCArMTA4OSwyNyBAQAogCQkJaWYgKHJpbmZvLT5kZXB0aCA9PSAxNSAmJiByZWdubyA+IDMxKQogCQkJCXJldHVybiAxOwogCi0JCQkvKiBGb3IgNTY1LCB0aGUgZ3JlZW4gY29tcG9uZW50IGlzIG1peGVkIG9uZSBvcmRlciBiZWxvdyAqLworCQkJLyogRm9yIDU2NSwgdGhlIGdyZWVuIGNvbXBvbmVudCBpcyBtaXhlZCBvbmUgb3JkZXIKKwkJCSAqIGJlbG93CisJCQkgKi8KIAkJCWlmIChyaW5mby0+ZGVwdGggPT0gMTYpIHsKIAkJICAgICAgICAgICAgICAgIE9VVFJFRyhQQUxFVFRFX0lOREVYLCBwaW5kZXg+PjEpOwotCSAgICAgICAJICAgICAgICAgCU9VVFJFRyhQQUxFVFRFX0RBVEEsIChyaW5mby0+cGFsZXR0ZVtyZWdubz4+MV0ucmVkIDw8IDE2KSB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgCShncmVlbiA8PCA4KSB8IChyaW5mby0+cGFsZXR0ZVtyZWdubz4+MV0uYmx1ZSkpOworCSAgICAgICAJICAgICAgICAgCU9VVFJFRyhQQUxFVFRFX0RBVEEsCisJCQkJICAgICAgIChyaW5mby0+cGFsZXR0ZVtyZWdubz4+MV0ucmVkIDw8IDE2KSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgCShncmVlbiA8PCA4KSB8CisJCQkJICAgICAgIChyaW5mby0+cGFsZXR0ZVtyZWdubz4+MV0uYmx1ZSkpOwogCSAgICAgICAgICAgICAgICAJZ3JlZW4gPSByaW5mby0+cGFsZXR0ZVtyZWdubzw8MV0uZ3JlZW47CiAJICAgICAgICAJfQogCQl9CiAKIAkJaWYgKHJpbmZvLT5kZXB0aCAhPSAxNiB8fCByZWdubyA8IDMyKSB7CiAJCQlPVVRSRUcoUEFMRVRURV9JTkRFWCwgcGluZGV4KTsKLQkJCU9VVFJFRyhQQUxFVFRFX0RBVEEsIChyZWQgPDwgMTYpIHwgKGdyZWVuIDw8IDgpIHwgYmx1ZSk7CisJCQlPVVRSRUcoUEFMRVRURV9EQVRBLCAocmVkIDw8IDE2KSB8CisJCQkgICAgICAgKGdyZWVuIDw8IDgpIHwgYmx1ZSk7CiAJCX0KLQkJaWYgKHJpbmZvLT5pc19tb2JpbGl0eSkKLQkJCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCB2Y2xrX2NudGwpOwogCX0KICAJaWYgKHJlZ25vIDwgMTYpIHsKLQkJdTMyICpwYWwgPSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwkJdTMyICpwYWwgPSByaW5mby0+aW5mby0+cHNldWRvX3BhbGV0dGU7CiAgICAgICAgIAlzd2l0Y2ggKHJpbmZvLT5kZXB0aCkgewogCQljYXNlIDE1OgogCQkJcGFsW3JlZ25vXSA9IChyZWdubyA8PCAxMCkgfCAocmVnbm8gPDwgNSkgfCByZWdubzsKQEAgLTExMzgsNiArMTEyOSw4NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJhZGVvbmZiX3NldGNvbHJlZyAodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgICAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAorCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworICAgICAgICBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSBpbmZvLT5wYXI7CisJdTMyIGRhY19jbnRsMiwgdmNsa19jbnRsID0gMDsKKwlpbnQgcmM7CisKKyAgICAgICAgaWYgKCFyaW5mby0+YXNsZWVwKSB7CisJCWlmIChyaW5mby0+aXNfbW9iaWxpdHkpIHsKKwkJCXZjbGtfY250bCA9IElOUExMKFZDTEtfRUNQX0NOVEwpOworCQkJT1VUUExMKFZDTEtfRUNQX0NOVEwsCisJCQkgICAgICAgdmNsa19jbnRsICYgflBJWENMS19EQUNfQUxXQVlTX09OYik7CisJCX0KKworCQkvKiBNYWtlIHN1cmUgd2UgYXJlIG9uIGZpcnN0IHBhbGV0dGUgKi8KKwkJaWYgKHJpbmZvLT5oYXNfQ1JUQzIpIHsKKwkJCWRhY19jbnRsMiA9IElOUkVHKERBQ19DTlRMMik7CisJCQlkYWNfY250bDIgJj0gfkRBQzJfUEFMRVRURV9BQ0NFU1NfQ05UTDsKKwkJCU9VVFJFRyhEQUNfQ05UTDIsIGRhY19jbnRsMik7CisJCX0KKwl9CisKKwlyYyA9IHJhZGVvbl9zZXRjb2xyZWcgKHJlZ25vLCByZWQsIGdyZWVuLCBibHVlLCB0cmFuc3AsIHJpbmZvKTsKKworCWlmICghcmluZm8tPmFzbGVlcCAmJiByaW5mby0+aXNfbW9iaWxpdHkpCisJCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCB2Y2xrX2NudGwpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHJhZGVvbmZiX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworICAgICAgICBzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSBpbmZvLT5wYXI7CisJdTE2ICpyZWQsICpncmVlbiwgKmJsdWUsICp0cmFuc3A7CisJdTMyIGRhY19jbnRsMiwgdmNsa19jbnRsID0gMDsKKwlpbnQgaSwgc3RhcnQsIHJjID0gMDsKKworICAgICAgICBpZiAoIXJpbmZvLT5hc2xlZXApIHsKKwkJaWYgKHJpbmZvLT5pc19tb2JpbGl0eSkgeworCQkJdmNsa19jbnRsID0gSU5QTEwoVkNMS19FQ1BfQ05UTCk7CisJCQlPVVRQTEwoVkNMS19FQ1BfQ05UTCwKKwkJCSAgICAgICB2Y2xrX2NudGwgJiB+UElYQ0xLX0RBQ19BTFdBWVNfT05iKTsKKwkJfQorCisJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgb24gZmlyc3QgcGFsZXR0ZSAqLworCQlpZiAocmluZm8tPmhhc19DUlRDMikgeworCQkJZGFjX2NudGwyID0gSU5SRUcoREFDX0NOVEwyKTsKKwkJCWRhY19jbnRsMiAmPSB+REFDMl9QQUxFVFRFX0FDQ0VTU19DTlRMOworCQkJT1VUUkVHKERBQ19DTlRMMiwgZGFjX2NudGwyKTsKKwkJfQorCX0KKworCXJlZCA9IGNtYXAtPnJlZDsKKwlncmVlbiA9IGNtYXAtPmdyZWVuOworCWJsdWUgPSBjbWFwLT5ibHVlOworCXRyYW5zcCA9IGNtYXAtPnRyYW5zcDsKKwlzdGFydCA9IGNtYXAtPnN0YXJ0OworCisJZm9yIChpID0gMDsgaSA8IGNtYXAtPmxlbjsgaSsrKSB7CisJCXVfaW50IGhyZWQsIGhncmVlbiwgaGJsdWUsIGh0cmFuc3AgPSAweGZmZmY7CisKKwkJaHJlZCA9ICpyZWQrKzsKKwkJaGdyZWVuID0gKmdyZWVuKys7CisJCWhibHVlID0gKmJsdWUrKzsKKwkJaWYgKHRyYW5zcCkKKwkJCWh0cmFuc3AgPSAqdHJhbnNwKys7CisJCXJjID0gcmFkZW9uX3NldGNvbHJlZyAoc3RhcnQrKywgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgaHRyYW5zcCwKKwkJCQkgICAgICAgcmluZm8pOworCQlpZiAocmMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJpbmZvLT5hc2xlZXAgJiYgcmluZm8tPmlzX21vYmlsaXR5KQorCQlPVVRQTEwoVkNMS19FQ1BfQ05UTCwgdmNsa19jbnRsKTsKKworCXJldHVybiByYzsKK30KIAogc3RhdGljIHZvaWQgcmFkZW9uX3NhdmVfc3RhdGUgKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywKIAkJCSAgICAgICBzdHJ1Y3QgcmFkZW9uX3JlZ3MgKnNhdmUpCkBAIC0xNzk2LDYgKzE4NjUsNyBAQAogCS5mYl9jaGVja192YXIJCT0gcmFkZW9uZmJfY2hlY2tfdmFyLAogCS5mYl9zZXRfcGFyCQk9IHJhZGVvbmZiX3NldF9wYXIsCiAJLmZiX3NldGNvbHJlZwkJPSByYWRlb25mYl9zZXRjb2xyZWcsCisJLmZiX3NldGNtYXAJCT0gcmFkZW9uZmJfc2V0Y21hcCwKIAkuZmJfcGFuX2Rpc3BsYXkgCT0gcmFkZW9uZmJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rCQk9IHJhZGVvbmZiX2JsYW5rLAogCS5mYl9pb2N0bAkJPSByYWRlb25mYl9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggNTllM2I0Yi4uYjIwOWFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTkwNiwxMCArOTA2LDEzIEBACiAJc3RydWN0IHZjX2RhdGEgKnN2YyA9ICpkZWZhdWx0X21vZGU7CiAJc3RydWN0IGRpc3BsYXkgKnQsICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJaW50IGxvZ28gPSAxLCBuZXdfcm93cywgbmV3X2NvbHMsIHJvd3MsIGNvbHMsIGNoYXJjbnQgPSAyNTY7Ci0JaW50IGNhcCA9IGluZm8tPmZsYWdzOworCWludCBjYXA7CiAKIAlpZiAoaW5mb19pZHggPT0gLTEgfHwgaW5mbyA9PSBOVUxMKQogCSAgICByZXR1cm47CisKKwljYXAgPSBpbmZvLT5mbGFnczsKKwogCWlmICh2YyAhPSBzdmMgfHwgbG9nb19zaG93biA9PSBGQkNPTl9MT0dPX0RPTlRTSE9XIHx8CiAJICAgIChpbmZvLT5maXgudHlwZSA9PSBGQl9UWVBFX1RFWFQpKQogCQlsb2dvID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCA3ZDFhZTA2Li5iY2Y1OWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC0zMzcsNiArMzM3LDggQEAKIAljLT52Y19zY2FuX2xpbmVzID0gdmdhX3NjYW5fbGluZXM7CiAJYy0+dmNfZm9udC5oZWlnaHQgPSB2Z2FfdmlkZW9fZm9udF9oZWlnaHQ7CiAJYy0+dmNfY29tcGxlbWVudF9tYXNrID0gMHg3NzAwOworCWlmICh2Z2FfNTEyX2NoYXJzKQorCQljLT52Y19oaV9mb250X21hc2sgPSAweDA4MDA7CiAJcCA9ICpjLT52Y191bmlfcGFnZWRpcl9sb2M7CiAJaWYgKGMtPnZjX3VuaV9wYWdlZGlyX2xvYyA9PSAmYy0+dmNfdW5pX3BhZ2VkaXIgfHwKIAkgICAgIS0tYy0+dmNfdW5pX3BhZ2VkaXJfbG9jWzFdKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmNtYXAuYyBiL2RyaXZlcnMvdmlkZW8vZmJjbWFwLmMKaW5kZXggYzUxZjhmYi4uNGU1Y2U4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmNtYXAuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiY21hcC5jCkBAIC0yMjIsOCArMjIyLDExIEBACiAJdHJhbnNwID0gY21hcC0+dHJhbnNwOwogCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CiAKLQlpZiAoc3RhcnQgPCAwIHx8ICFpbmZvLT5mYm9wcy0+ZmJfc2V0Y29scmVnKQorCWlmIChzdGFydCA8IDAgfHwgKCFpbmZvLT5mYm9wcy0+ZmJfc2V0Y29scmVnICYmCisJCQkgICFpbmZvLT5mYm9wcy0+ZmJfc2V0Y21hcCkpCiAJCXJldHVybiAtRUlOVkFMOworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2V0Y21hcCkKKwkJcmV0dXJuIGluZm8tPmZib3BzLT5mYl9zZXRjbWFwKGNtYXAsIGluZm8pOwogCWZvciAoaSA9IDA7IGkgPCBjbWFwLT5sZW47IGkrKykgewogCQlocmVkID0gKnJlZCsrOwogCQloZ3JlZW4gPSAqZ3JlZW4rKzsKQEAgLTI1MCw4ICsyNTMsMzMgQEAKIAl0cmFuc3AgPSBjbWFwLT50cmFuc3A7CiAJc3RhcnQgPSBjbWFwLT5zdGFydDsKIAotCWlmIChzdGFydCA8IDAgfHwgIWluZm8tPmZib3BzLT5mYl9zZXRjb2xyZWcpCisJaWYgKHN0YXJ0IDwgMCB8fCAoIWluZm8tPmZib3BzLT5mYl9zZXRjb2xyZWcgJiYKKwkJCSAgIWluZm8tPmZib3BzLT5mYl9zZXRjbWFwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJZiB3ZSBjYW4gYmF0Y2gsIGRvIGl0ICovCisJaWYgKGluZm8tPmZib3BzLT5mYl9zZXRjbWFwICYmIGNtYXAtPmxlbiA+IDEpIHsKKwkJc3RydWN0IGZiX2NtYXAgdW1hcDsKKwkJaW50IHNpemUgPSBjbWFwLT5sZW4gKiBzaXplb2YodTE2KTsKKwkJaW50IHJjOworCisJCW1lbXNldCgmdW1hcCwgMCwgc2l6ZW9mKHN0cnVjdCBmYl9jbWFwKSk7CisJCXJjID0gZmJfYWxsb2NfY21hcCgmdW1hcCwgY21hcC0+bGVuLCB0cmFuc3AgIT0gTlVMTCk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHVtYXAucmVkLCByZWQsIHNpemUpIHx8CisJCSAgICBjb3B5X2Zyb21fdXNlcih1bWFwLmdyZWVuLCBncmVlbiwgc2l6ZSkgfHwKKwkJICAgIGNvcHlfZnJvbV91c2VyKHVtYXAuYmx1ZSwgYmx1ZSwgc2l6ZSkgfHwKKwkJICAgICh0cmFuc3AgJiYgY29weV9mcm9tX3VzZXIodW1hcC50cmFuc3AsIHRyYW5zcCwgc2l6ZSkpKSB7CisJCQlyYyA9IC1FRkFVTFQ7CisJCX0KKwkJdW1hcC5zdGFydCA9IHN0YXJ0OworCQlpZiAocmMgPT0gMCkKKwkJCXJjID0gaW5mby0+ZmJvcHMtPmZiX3NldGNtYXAoJnVtYXAsIGluZm8pOworCQlmYl9kZWFsbG9jX2NtYXAoJnVtYXApOworCQlyZXR1cm4gcmM7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IGNtYXAtPmxlbjsgaSsrLCByZWQrKywgYmx1ZSsrLCBncmVlbisrKSB7CiAJCWlmIChnZXRfdXNlcihocmVkLCByZWQpIHx8CiAJCSAgICBnZXRfdXNlcihoZ3JlZW4sIGdyZWVuKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IDI1ZjQ2MGMuLjIwOGE2OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTEyNTcsNiArMTI1Nyw4IEBACiBzdGF0aWMgY2hhciAqdmlkZW9fb3B0aW9uc1tGQl9NQVhdOwogc3RhdGljIGludCBvZm9ubHk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpnbG9iYWxfbW9kZV9vcHRpb247CisKIC8qKgogICogZmJfZ2V0X29wdGlvbnMgLSBnZXQga2VybmVsIGJvb3QgcGFyYW1ldGVycwogICogQG5hbWU6ICAgZnJhbWVidWZmZXIgbmFtZSBhcyBpdCB3b3VsZCBhcHBlYXIgaW4KQEAgLTEyOTcsOSArMTI5OSw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotCi1leHRlcm4gY29uc3QgY2hhciAqZ2xvYmFsX21vZGVfb3B0aW9uOwotCiAvKioKICAqCXZpZGVvX3NldHVwIC0gcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucwogICoJQG9wdGlvbnM6IHN0cmluZyBvZiBvcHRpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKaW5kZXggOTc4ZGVmMC4uNmNkMTk3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1vbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtb24uYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KICNlbmRpZgotI2luY2x1ZGUgPHZpZGVvL2VkaWQuaD4KICNpbmNsdWRlICJlZGlkLmgiCiAKIC8qIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCmluZGV4IDllYzg3ODEuLmUwNGQzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKQEAgLTk5OSw4ICs5OTksMTQgQEAKIAlpbmZvLT5tb25zcGVjcy5kY2xrbWluID0gMTUwMDAwMDA7CiAKIAlpZiAoZmJfdmFsaWRhdGVfbW9kZSh2YXIsIGluZm8pKSB7Ci0JCWlmIChmYl9nZXRfbW9kZShGQl9NQVhUSU1JTkdTLCAwLCB2YXIsIGluZm8pKQorCQlpZiAoZmJfZ2V0X21vZGUoRkJfTUFYVElNSU5HUywgMCwgdmFyLCBpbmZvKSkgeworCQkJaW50IGRlZmF1bHRfc3luYyA9IChoc3luYzEtSEZNSU4pfChoc3luYzItSEZNQVgpCisJCQkJCSAgICB8KHZzeW5jMS1WRk1JTil8KHZzeW5jMi1WRk1BWCk7CisJCQlwcmludGsoImk4MTBmYjogaW52YWxpZCB2aWRlbyBtb2RlJXNcbiIsCisJCQkgICAgZGVmYXVsdF9zeW5jID8gIiIgOgorCQkJICAgICIuIFNwZWNpZnlpbmcgdnN5bmNOL2hzeW5jTiBwYXJhbWV0ZXJzIG1heSBoZWxwIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAkKIAl2YXItPnhyZXMgPSB4cmVzOwpAQCAtMjAyMywxMCArMjAyOSwxMCBAQAogCQkgIiAoZGVmYXVsdCA9IDQ4MCkiKTsKIG1vZHVsZV9wYXJhbShoc3luYzEsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhzeW5jMSwgIk1pbmltdW0gaG9yaXpvbnRhbCBmcmVxdWVuY3kgb2YgbW9uaXRvciBpbiBLSHoiCi0JCSAiIChkZWZhdWx0ID0gMzEpIik7CisJCSAiIChkZWZhdWx0ID0gMjkpIik7CiBtb2R1bGVfcGFyYW0oaHN5bmMyLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhoc3luYzIsICJNYXhpbXVtIGhvcml6b250YWwgZnJlcXVlbmN5IG9mIG1vbml0b3IgaW4gS0h6IgotCQkgIiAoZGVmYXVsdCA9IDMxKSIpOworCQkgIiAoZGVmYXVsdCA9IDMwKSIpOwogbW9kdWxlX3BhcmFtKHZzeW5jMSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModnN5bmMxLCAiTWluaW11bSB2ZXJ0aWNhbCBmcmVxdWVuY3kgb2YgbW9uaXRvciBpbiBIeiIKIAkJICIgKGRlZmF1bHQgPSA1MCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmUxYzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC0wLDAgKzEsNjk1IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vaW14ZmIuYworICoKKyAqICBGcmVlc2NhbGUgaS5NWCBGcmFtZSBCdWZmZXIgZGV2aWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAorICogICBCYXNlZCBvbiBhY29ybmZiLmMgQ29weXJpZ2h0IChDKSBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFBsZWFzZSBkaXJlY3QgeW91ciBxdWVzdGlvbnMgYW5kIGNvbW1lbnRzIG9uIHRoaXMgZHJpdmVyIHRvIHRoZSBmb2xsb3dpbmcKKyAqIGVtYWlsIGFkZHJlc3M6CisgKgorICoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrCisgKi8KKworLy8jZGVmaW5lIERFQlVHIDEKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXhmYi5oPgorCisvKgorICogQ29tcGxhaW4gaWYgVkFSIGlzIG91dCBvZiByYW5nZS4KKyAqLworI2RlZmluZSBERUJVR19WQVIgMQorCisjaW5jbHVkZSAiaW14ZmIuaCIKKworc3RhdGljIHN0cnVjdCBpbXhmYl9yZ2IgZGVmX3JnYl8xNiA9IHsKKwkucmVkCT0geyAub2Zmc2V0ID0gOCwgIC5sZW5ndGggPSA0LCB9LAorCS5ncmVlbgk9IHsgLm9mZnNldCA9IDQsICAubGVuZ3RoID0gNCwgfSwKKwkuYmx1ZQk9IHsgLm9mZnNldCA9IDAsICAubGVuZ3RoID0gNCwgfSwKKwkudHJhbnNwID0geyAub2Zmc2V0ID0gMCwgIC5sZW5ndGggPSAwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhmYl9yZ2IgZGVmX3JnYl84ID0geworCS5yZWQJPSB7IC5vZmZzZXQgPSAwLCAgLmxlbmd0aCA9IDgsIH0sCisJLmdyZWVuCT0geyAub2Zmc2V0ID0gMCwgIC5sZW5ndGggPSA4LCB9LAorCS5ibHVlCT0geyAub2Zmc2V0ID0gMCwgIC5sZW5ndGggPSA4LCB9LAorCS50cmFuc3AgPSB7IC5vZmZzZXQgPSAwLCAgLmxlbmd0aCA9IDAsIH0sCit9OworCitzdGF0aWMgaW50IGlteGZiX2FjdGl2YXRlX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgaW5saW5lIHVfaW50IGNoYW5fdG9fZmllbGQodV9pbnQgY2hhbiwgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKK30KKworI2RlZmluZSBMQ0RDX1BBTEVUVEUoeCkgX19SRUcyKElNWF9MQ0RDX0JBU0UrMHg4MDAsICh4KTw8MikKK3N0YXRpYyBpbnQKK2lteGZiX3NldHBhbGV0dGVyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sIHVfaW50IGJsdWUsCisJCSAgICAgICB1X2ludCB0cmFucywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKwl1X2ludCB2YWwsIHJldCA9IDE7CisKKyNkZWZpbmUgQ05WVF9UT0hXKHZhbCx3aWR0aCkgKCgoKHZhbCk8PCh3aWR0aCkpKzB4N0ZGRi0odmFsKSk+PjE2KQorCWlmIChyZWdubyA8IGZiaS0+cGFsZXR0ZV9zaXplKSB7CisJCXZhbCA9IChDTlZUX1RPSFcocmVkLCA0KSA8PCA4KSB8CisJCSAgICAgIChDTlZUX1RPSFcoZ3JlZW4sNCkgPDwgNCkgfAorCQkgICAgICBDTlZUX1RPSFcoYmx1ZSwgIDQpOworCisJCUxDRENfUEFMRVRURShyZWdubykgPSB2YWw7CisJCXJldCA9IDA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2lteGZiX3NldGNvbHJlZyh1X2ludCByZWdubywgdV9pbnQgcmVkLCB1X2ludCBncmVlbiwgdV9pbnQgYmx1ZSwKKwkJICAgdV9pbnQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0ID0gMTsKKworCS8qCisJICogSWYgaW52ZXJzZSBtb2RlIHdhcyBzZWxlY3RlZCwgaW52ZXJ0IGFsbCB0aGUgY29sb3VycworCSAqIHJhdGhlciB0aGFuIHRoZSByZWdpc3RlciBudW1iZXIuICBUaGUgcmVnaXN0ZXIgbnVtYmVyCisJICogaXMgd2hhdCB5b3UgcG9rZSBpbnRvIHRoZSBmcmFtZWJ1ZmZlciB0byBwcm9kdWNlIHRoZQorCSAqIGNvbG91ciB5b3UgcmVxdWVzdGVkLgorCSAqLworCWlmIChmYmktPmNtYXBfaW52ZXJzZSkgeworCQlyZWQgICA9IDB4ZmZmZiAtIHJlZDsKKwkJZ3JlZW4gPSAweGZmZmYgLSBncmVlbjsKKwkJYmx1ZSAgPSAweGZmZmYgLSBibHVlOworCX0KKworCS8qCisJICogSWYgZ3JleXNjYWxlIGlzIHRydWUsIHRoZW4gd2UgY29udmVydCB0aGUgUkdCIHZhbHVlCisJICogdG8gZ3JleXNjYWxlIG5vIG1hdGVyIHdoYXQgdmlzdWFsIHdlIGFyZSB1c2luZy4KKwkgKi8KKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkKKwkJcmVkID0gZ3JlZW4gPSBibHVlID0gKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbiArCisJCQkJCTc0NzEgKiBibHVlKSA+PiAxNjsKKworCXN3aXRjaCAoaW5mby0+Zml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJLyoKKwkJICogMTIgb3IgMTYtYml0IFRydWUgQ29sb3VyLiAgV2UgZW5jb2RlIHRoZSBSR0IgdmFsdWUKKwkJICogYWNjb3JkaW5nIHRvIHRoZSBSR0IgYml0ZmllbGQgaW5mb3JtYXRpb24uCisJCSAqLworCQlpZiAocmVnbm8gPCAxNikgeworCQkJdTMyICpwYWwgPSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKworCQkJdmFsICA9IGNoYW5fdG9fZmllbGQocmVkLCAmaW5mby0+dmFyLnJlZCk7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmluZm8tPnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmaW5mby0+dmFyLmJsdWUpOworCisJCQlwYWxbcmVnbm9dID0gdmFsOworCQkJcmV0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjoKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJcmV0ID0gaW14ZmJfc2V0cGFsZXR0ZXJlZyhyZWdubywgcmVkLCBncmVlbiwgYmx1ZSwgdHJhbnMsIGluZm8pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogIGlteGZiX2NoZWNrX3ZhcigpOgorICogICAgUm91bmQgdXAgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogYml0c19wZXJfcGl4ZWwsIHhyZXMsCisgKiAgICB5cmVzLCB4cmVzX3ZpcnR1YWwsIHlyZXNfdmlydHVhbCwgeG9mZnNldCwgeW9mZnNldCwgZ3JheXNjYWxlLAorICogICAgYml0ZmllbGRzLCBob3Jpem9udGFsIHRpbWluZywgdmVydGljYWwgdGltaW5nLgorICovCitzdGF0aWMgaW50CitpbXhmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJaW50IHJnYmlkeDsKKworCWlmICh2YXItPnhyZXMgPCBNSU5fWFJFUykKKwkJdmFyLT54cmVzID0gTUlOX1hSRVM7CisJaWYgKHZhci0+eXJlcyA8IE1JTl9ZUkVTKQorCQl2YXItPnlyZXMgPSBNSU5fWVJFUzsKKwlpZiAodmFyLT54cmVzID4gZmJpLT5tYXhfeHJlcykKKwkJdmFyLT54cmVzID0gZmJpLT5tYXhfeHJlczsKKwlpZiAodmFyLT55cmVzID4gZmJpLT5tYXhfeXJlcykKKwkJdmFyLT55cmVzID0gZmJpLT5tYXhfeXJlczsKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1heCh2YXItPnhyZXNfdmlydHVhbCwgdmFyLT54cmVzKTsKKwl2YXItPnlyZXNfdmlydHVhbCA9IG1heCh2YXItPnlyZXNfdmlydHVhbCwgdmFyLT55cmVzKTsKKworCXByX2RlYnVnKCJ2YXItPmJpdHNfcGVyX3BpeGVsPSVkXG4iLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OgorCQlyZ2JpZHggPSBSR0JfMTY7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmdiaWR4ID0gUkdCXzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJnYmlkeCA9IFJHQl8xNjsKKwl9CisKKwkvKgorCSAqIENvcHkgdGhlIFJHQiBwYXJhbWV0ZXJzIGZvciB0aGlzIGRpc3BsYXkKKwkgKiBmcm9tIHRoZSBtYWNoaW5lIHNwZWNpZmljIHBhcmFtZXRlcnMuCisJICovCisJdmFyLT5yZWQgICAgPSBmYmktPnJnYltyZ2JpZHhdLT5yZWQ7CisJdmFyLT5ncmVlbiAgPSBmYmktPnJnYltyZ2JpZHhdLT5ncmVlbjsKKwl2YXItPmJsdWUgICA9IGZiaS0+cmdiW3JnYmlkeF0tPmJsdWU7CisJdmFyLT50cmFuc3AgPSBmYmktPnJnYltyZ2JpZHhdLT50cmFuc3A7CisKKwlwcl9kZWJ1ZygiUkdCVCBsZW5ndGggPSAlZDolZDolZDolZFxuIiwKKwkJdmFyLT5yZWQubGVuZ3RoLCB2YXItPmdyZWVuLmxlbmd0aCwgdmFyLT5ibHVlLmxlbmd0aCwKKwkJdmFyLT50cmFuc3AubGVuZ3RoKTsKKworCXByX2RlYnVnKCJSR0JUIG9mZnNldCA9ICVkOiVkOiVkOiVkXG4iLAorCQl2YXItPnJlZC5vZmZzZXQsIHZhci0+Z3JlZW4ub2Zmc2V0LCB2YXItPmJsdWUub2Zmc2V0LAorCQl2YXItPnRyYW5zcC5vZmZzZXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbXhmYl9zZXRfcGFyKCk6CisgKglTZXQgdGhlIHVzZXIgZGVmaW5lZCBwYXJ0IG9mIHRoZSBkaXNwbGF5IGZvciB0aGUgc3BlY2lmaWVkIGNvbnNvbGUKKyAqLworc3RhdGljIGludCBpbXhmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOworCisJcHJfZGVidWcoInNldF9wYXJcbiIpOworCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpCisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWVsc2UgaWYgKCFmYmktPmNtYXBfc3RhdGljKQorCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCWVsc2UgeworCQkvKgorCQkgKiBTb21lIHBlb3BsZSBoYXZlIHdlaXJkIGlkZWFzIGFib3V0IHdhbnRpbmcgc3RhdGljCisJCSAqIHBzZXVkb2NvbG9yIG1hcHMuICBJIHN1c3BlY3QgdGhlaXIgdXNlciBzcGFjZQorCQkgKiBhcHBsaWNhdGlvbnMgYXJlIGJyb2tlbi4KKwkJICovCisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOworCX0KKworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsICoKKwkJCQkgIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OworCWZiaS0+cGFsZXR0ZV9zaXplID0gdmFyLT5iaXRzX3Blcl9waXhlbCA9PSA4ID8gMjU2IDogMTY7CisKKwlpbXhmYl9hY3RpdmF0ZV92YXIodmFyLCBpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbXhmYl9lbmFibGVfY29udHJvbGxlcihzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpKQoreworCXByX2RlYnVnKCJFbmFibGluZyBMQ0QgY29udHJvbGxlclxuIik7CisKKwkvKiBpbml0aWFsaXplIExDREMgKi8KKwlMQ0RDX1JNQ1IgJj0gflJNQ1JfTENEQ19FTjsJCS8qIGp1c3QgdG8gYmUgc2FmZS4uLiAqLworCisJTENEQ19TU0EJPSBmYmktPnNjcmVlbl9kbWE7CisJLyogcGh5c2ljYWwgc2NyZWVuIHN0YXJ0IGFkZHJlc3MJICAgICovCisJTENEQ19WUFcJPSBWUFdfVlBXKGZiaS0+bWF4X3hyZXMgKiBmYmktPm1heF9icHAgLyA4IC8gNCk7CisKKwlMQ0RDX1BPUwk9IDB4MDAwMDAwMDA7ICAgLyogcGFubmluZyBvZmZzZXQgMCAoMCBwaXhlbCBvZmZzZXQpICAgICAgICAqLworCisJLyogZGlzYWJsZSBoYXJkd2FyZSBjdXJzb3IgKi8KKwlMQ0RDX0NQT1MJJj0gfihDUE9TX0NDMCB8IENQT1NfQ0MxKTsKKworCS8qIGZpeGVkIGJ1cnN0IGxlbmd0aCAoc2VlIGVycmF0dW0gMTEpICovCisJTENEQ19ETUFDUiA9IERNQUNSX0JVUlNUIHwgRE1BQ1JfSE0oOCkgfCBETUFDUl9UTSgyKTsKKworCUxDRENfUk1DUiA9IFJNQ1JfTENEQ19FTjsKKworCWlmKGZiaS0+YmFja2xpZ2h0X3Bvd2VyKQorCQlmYmktPmJhY2tsaWdodF9wb3dlcigxKTsKKwlpZihmYmktPmxjZF9wb3dlcikKKwkJZmJpLT5sY2RfcG93ZXIoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGlteGZiX2Rpc2FibGVfY29udHJvbGxlcihzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpKQoreworCXByX2RlYnVnKCJEaXNhYmxpbmcgTENEIGNvbnRyb2xsZXJcbiIpOworCisJaWYoZmJpLT5iYWNrbGlnaHRfcG93ZXIpCisJCWZiaS0+YmFja2xpZ2h0X3Bvd2VyKDApOworCWlmKGZiaS0+bGNkX3Bvd2VyKQorCQlmYmktPmxjZF9wb3dlcigwKTsKKworCUxDRENfUk1DUiA9IDA7Cit9CisKK3N0YXRpYyBpbnQgaW14ZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCisJcHJfZGVidWcoImlteGZiX2JsYW5rOiBibGFuaz0lZFxuIiwgYmxhbmspOworCisJc3dpdGNoIChibGFuaykgeworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCWlteGZiX2Rpc2FibGVfY29udHJvbGxlcihmYmkpOworCQlicmVhazsKKworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoZmJpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBpbXhmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIJPSBpbXhmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIJPSBpbXhmYl9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcJPSBpbXhmYl9zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfYmxhbmsJPSBpbXhmYl9ibGFuaywKKwkuZmJfY3Vyc29yCT0gc29mdF9jdXJzb3IsIC8qIEZJWE1FOiBpLk1YIGNhbiBkbyBoYXJkd2FyZSBjdXJzb3IgKi8KK307CisKKy8qCisgKiBpbXhmYl9hY3RpdmF0ZV92YXIoKToKKyAqCUNvbmZpZ3VyZXMgTENEIENvbnRyb2xsZXIgYmFzZWQgb24gZW50cmllcyBpbiB2YXIgcGFyYW1ldGVyLiAgU2V0dGluZ3MgYXJlCisgKglvbmx5IHdyaXR0ZW4gdG8gdGhlIGNvbnRyb2xsZXIgaWYgY2hhbmdlcyB3ZXJlIG1hZGUuCisgKi8KK3N0YXRpYyBpbnQgaW14ZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCXByX2RlYnVnKCJ2YXI6IHhyZXM9JWQgaHNsZW49JWQgbG09JWQgcm09JWRcbiIsCisJCXZhci0+eHJlcywgdmFyLT5oc3luY19sZW4sCisJCXZhci0+bGVmdF9tYXJnaW4sIHZhci0+cmlnaHRfbWFyZ2luKTsKKwlwcl9kZWJ1ZygidmFyOiB5cmVzPSVkIHZzbGVuPSVkIHVtPSVkIGJtPSVkXG4iLAorCQl2YXItPnlyZXMsIHZhci0+dnN5bmNfbGVuLAorCQl2YXItPnVwcGVyX21hcmdpbiwgdmFyLT5sb3dlcl9tYXJnaW4pOworCisjaWYgREVCVUdfVkFSCisJaWYgKHZhci0+eHJlcyA8IDE2ICAgICAgICB8fCB2YXItPnhyZXMgPiAxMDI0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHhyZXMgJWRcbiIsCisJCQlpbmZvLT5maXguaWQsIHZhci0+eHJlcyk7CisJaWYgKHZhci0+aHN5bmNfbGVuIDwgMSAgICB8fCB2YXItPmhzeW5jX2xlbiA+IDY0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGhzeW5jX2xlbiAlZFxuIiwKKwkJCWluZm8tPmZpeC5pZCwgdmFyLT5oc3luY19sZW4pOworCWlmICh2YXItPmxlZnRfbWFyZ2luID4gMjU1KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGxlZnRfbWFyZ2luICVkXG4iLAorCQkJaW5mby0+Zml4LmlkLCB2YXItPmxlZnRfbWFyZ2luKTsKKwlpZiAodmFyLT5yaWdodF9tYXJnaW4gPiAyNTUpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcmlnaHRfbWFyZ2luICVkXG4iLAorCQkJaW5mby0+Zml4LmlkLCB2YXItPnJpZ2h0X21hcmdpbik7CisJaWYgKHZhci0+eXJlcyA8IDEgfHwgdmFyLT55cmVzID4gNTExKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHlyZXMgJWRcbiIsCisJCQlpbmZvLT5maXguaWQsIHZhci0+eXJlcyk7CisJaWYgKHZhci0+dnN5bmNfbGVuID4gMTAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHZzeW5jX2xlbiAlZFxuIiwKKwkJCWluZm8tPmZpeC5pZCwgdmFyLT52c3luY19sZW4pOworCWlmICh2YXItPnVwcGVyX21hcmdpbiA+IDYzKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHVwcGVyX21hcmdpbiAlZFxuIiwKKwkJCWluZm8tPmZpeC5pZCwgdmFyLT51cHBlcl9tYXJnaW4pOworCWlmICh2YXItPmxvd2VyX21hcmdpbiA+IDI1NSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBsb3dlcl9tYXJnaW4gJWRcbiIsCisJCQlpbmZvLT5maXguaWQsIHZhci0+bG93ZXJfbWFyZ2luKTsKKyNlbmRpZgorCisJTENEQ19IQ1IJPSBIQ1JfSF9XSURUSCh2YXItPmhzeW5jX2xlbikgfAorCSAgICAgICAgICAgICAgICAgIEhDUl9IX1dBSVRfMSh2YXItPmxlZnRfbWFyZ2luKSB8CisJCQkgIEhDUl9IX1dBSVRfMih2YXItPnJpZ2h0X21hcmdpbik7CisKKwlMQ0RDX1ZDUgk9IFZDUl9WX1dJRFRIKHZhci0+dnN5bmNfbGVuKSB8CisJICAgICAgICAgICAgICAgICAgVkNSX1ZfV0FJVF8xKHZhci0+dXBwZXJfbWFyZ2luKSB8CisJCQkgIFZDUl9WX1dBSVRfMih2YXItPmxvd2VyX21hcmdpbik7CisKKwlMQ0RDX1NJWkUJPSBTSVpFX1hNQVgodmFyLT54cmVzKSB8IFNJWkVfWU1BWCh2YXItPnlyZXMpOworCUxDRENfUENSCT0gZmJpLT5wY3I7CisJTENEQ19QV01SCT0gZmJpLT5wd21yOworCUxDRENfTFNDUjEJPSBmYmktPmxzY3IxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlteGZiX3NldHVwX2dwaW8oc3RydWN0IGlteGZiX2luZm8gKmZiaSkKK3sKKwlpbnQgd2lkdGg7CisKKwlMQ0RDX1JNQ1IJJj0gfihSTUNSX0xDRENfRU4gfCBSTUNSX1NFTEZfUkVGKTsKKworCWlmKCBmYmktPnBjciAmIFBDUl9URlQgKQorCQl3aWR0aCA9IDE2OworCWVsc2UKKwkJd2lkdGggPSAxIDw8ICgoZmJpLT5wY3IgPj4gMjgpICYgMHgzKTsKKworCXN3aXRjaCh3aWR0aCkgeworCWNhc2UgMTY6CisJCWlteF9ncGlvX21vZGUoUEQzMF9QRl9MRDE1KTsKKwkJaW14X2dwaW9fbW9kZShQRDI5X1BGX0xEMTQpOworCQlpbXhfZ3Bpb19tb2RlKFBEMjhfUEZfTEQxMyk7CisJCWlteF9ncGlvX21vZGUoUEQyN19QRl9MRDEyKTsKKwkJaW14X2dwaW9fbW9kZShQRDI2X1BGX0xEMTEpOworCQlpbXhfZ3Bpb19tb2RlKFBEMjVfUEZfTEQxMCk7CisJCWlteF9ncGlvX21vZGUoUEQyNF9QRl9MRDkpOworCQlpbXhfZ3Bpb19tb2RlKFBEMjNfUEZfTEQ4KTsKKwljYXNlIDg6CisJCWlteF9ncGlvX21vZGUoUEQyMl9QRl9MRDcpOworCQlpbXhfZ3Bpb19tb2RlKFBEMjFfUEZfTEQ2KTsKKwkJaW14X2dwaW9fbW9kZShQRDIwX1BGX0xENSk7CisJCWlteF9ncGlvX21vZGUoUEQxOV9QRl9MRDQpOworCWNhc2UgNDoKKwkJaW14X2dwaW9fbW9kZShQRDE4X1BGX0xEMyk7CisJCWlteF9ncGlvX21vZGUoUEQxN19QRl9MRDIpOworCWNhc2UgMjoKKwkJaW14X2dwaW9fbW9kZShQRDE2X1BGX0xEMSk7CisJY2FzZSAxOgorCQlpbXhfZ3Bpb19tb2RlKFBEMTVfUEZfTEQwKTsKKwl9CisKKwkvKiBpbml0aWFsaXplIEdQSU9zICovCisJaW14X2dwaW9fbW9kZShQRDZfUEZfTFNDTEspOworCWlteF9ncGlvX21vZGUoUEQxMF9QRl9TUExfU1BSKTsKKwlpbXhfZ3Bpb19tb2RlKFBEMTFfUEZfQ09OVFJBU1QpOworCWlteF9ncGlvX21vZGUoUEQxNF9QRl9GTE1fVlNZTkMpOworCWlteF9ncGlvX21vZGUoUEQxM19QRl9MUF9IU1lOQyk7CisJaW14X2dwaW9fbW9kZShQRDdfUEZfUkVWKTsKKwlpbXhfZ3Bpb19tb2RlKFBEOF9QRl9DTFMpOworCisjaWZuZGVmIENPTkZJR19NQUNIX1BJTVgxCisJLyogb24gUGlNWDEgdXNlZCBhcyBidWZmZXJzIGVuYWJsZSBzaWduYWwKKwkgKi8KKwlpbXhfZ3Bpb19tb2RlKFBEOV9QRl9QUyk7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfTUFDSF9NWDFGUzIKKwkvKiBvbiBteDFmczIgdGhpcyBwaW4gaXMgdXNlZCB0byAoZGUpYWN0aXZhdGUgdGhlIGRpc3BsYXksIHNvIHdlIG5lZWQKKwkgKiBpdCBhcyBhIG5vcm1hbCBncGlvCisJICovCisJaW14X2dwaW9fbW9kZShQRDEyX1BGX0FDRF9PRSk7CisjZW5kaWYKKworfQorCisjaWZkZWYgQ09ORklHX1BNCisvKgorICogUG93ZXIgbWFuYWdlbWVudCBob29rcy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCwKKyAqIHVubGlrZSB0aGUgYmxhbmsgZnVuY3Rpb25zIGFib3ZlLCBzbyB3ZSBtYXkgc2xlZXAuCisgKi8KK3N0YXRpYyBpbnQgaW14ZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQoreworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlwcl9kZWJ1ZygiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCWlmIChsZXZlbCA9PSBTVVNQRU5EX0RJU0FCTEUgfHwgbGV2ZWwgPT0gU1VTUEVORF9QT1dFUl9ET1dOKQorCQlpbXhmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXhmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXByX2RlYnVnKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJaWYgKGxldmVsID09IFJFU1VNRV9FTkFCTEUpCisJCWlteGZiX2VuYWJsZV9jb250cm9sbGVyKGZiaSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBpbXhmYl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgaW14ZmJfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBpbXhmYl9pbml0X2ZiaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlteGZiX21hY2hfaW5mbyAqaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKworCXByX2RlYnVnKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBrbWFsbG9jKCBzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8tPnBzZXVkb19wYWxldHRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChmYmksIDAsIHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbykpOworCWZiaS0+ZGV2ID0gZGV2OworCisJc3RybGNweShpbmZvLT5maXguaWQsIElNWF9OQU1FLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CisKKwlpbmZvLT5maXgudHlwZQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlpbmZvLT5maXgudHlwZV9hdXgJCT0gMDsKKwlpbmZvLT5maXgueHBhbnN0ZXAJCT0gMDsKKwlpbmZvLT5maXgueXBhbnN0ZXAJCT0gMDsKKwlpbmZvLT5maXgueXdyYXBzdGVwCQk9IDA7CisJaW5mby0+Zml4LmFjY2VsCT0gRkJfQUNDRUxfTk9ORTsKKworCWluZm8tPnZhci5ub25zdGQJCT0gMDsKKwlpbmZvLT52YXIuYWN0aXZhdGUJCT0gRkJfQUNUSVZBVEVfTk9XOworCWluZm8tPnZhci5oZWlnaHQJCT0gLTE7CisJaW5mby0+dmFyLndpZHRoCT0gLTE7CisJaW5mby0+dmFyLmFjY2VsX2ZsYWdzCQk9IDA7CisJaW5mby0+dmFyLnZtb2RlCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKworCWluZm8tPmZib3BzCQkJPSAmaW14ZmJfb3BzOworCWluZm8tPmZsYWdzCQkJPSBGQklORk9fRkxBR19ERUZBVUxUOworCWluZm8tPnBzZXVkb19wYWxldHRlCQk9IChmYmkgKyAxKTsKKworCWZiaS0+cmdiW1JHQl8xNl0JCT0gJmRlZl9yZ2JfMTY7CisJZmJpLT5yZ2JbUkdCXzhdCQkJPSAmZGVmX3JnYl84OworCisJZmJpLT5tYXhfeHJlcwkJCT0gaW5mLT54cmVzOworCWluZm8tPnZhci54cmVzCQkJPSBpbmYtPnhyZXM7CisJaW5mby0+dmFyLnhyZXNfdmlydHVhbAkJPSBpbmYtPnhyZXM7CisJZmJpLT5tYXhfeXJlcwkJCT0gaW5mLT55cmVzOworCWluZm8tPnZhci55cmVzCQkJPSBpbmYtPnlyZXM7CisJaW5mby0+dmFyLnlyZXNfdmlydHVhbAkJPSBpbmYtPnlyZXM7CisJZmJpLT5tYXhfYnBwCQkJPSBpbmYtPmJwcDsKKwlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwJPSBpbmYtPmJwcDsKKwlpbmZvLT52YXIucGl4Y2xvY2sJCT0gaW5mLT5waXhjbG9jazsKKwlpbmZvLT52YXIuaHN5bmNfbGVuCQk9IGluZi0+aHN5bmNfbGVuOworCWluZm8tPnZhci5sZWZ0X21hcmdpbgkJPSBpbmYtPmxlZnRfbWFyZ2luOworCWluZm8tPnZhci5yaWdodF9tYXJnaW4JCT0gaW5mLT5yaWdodF9tYXJnaW47CisJaW5mby0+dmFyLnZzeW5jX2xlbgkJPSBpbmYtPnZzeW5jX2xlbjsKKwlpbmZvLT52YXIudXBwZXJfbWFyZ2luCQk9IGluZi0+dXBwZXJfbWFyZ2luOworCWluZm8tPnZhci5sb3dlcl9tYXJnaW4JCT0gaW5mLT5sb3dlcl9tYXJnaW47CisJaW5mby0+dmFyLnN5bmMJCQk9IGluZi0+c3luYzsKKwlpbmZvLT52YXIuZ3JheXNjYWxlCQk9IGluZi0+Y21hcF9ncmV5c2NhbGU7CisJZmJpLT5jbWFwX2ludmVyc2UJCT0gaW5mLT5jbWFwX2ludmVyc2U7CisJZmJpLT5wY3IJCQk9IGluZi0+cGNyOworCWZiaS0+bHNjcjEJCQk9IGluZi0+bHNjcjE7CisJZmJpLT5wd21yCQkJPSBpbmYtPnB3bXI7CisJZmJpLT5sY2RfcG93ZXIJCQk9IGluZi0+bGNkX3Bvd2VyOworCWZiaS0+YmFja2xpZ2h0X3Bvd2VyCQk9IGluZi0+YmFja2xpZ2h0X3Bvd2VyOworCWluZm8tPmZpeC5zbWVtX2xlbgkJPSBmYmktPm1heF94cmVzICogZmJpLT5tYXhfeXJlcyAqCisJCQkJCSAgZmJpLT5tYXhfYnBwIC8gODsKKworCXJldHVybiAwOworfQorCisvKgorICogICAgICBBbGxvY2F0ZXMgdGhlIERSQU0gbWVtb3J5IGZvciB0aGUgZnJhbWUgYnVmZmVyLiAgVGhpcyBidWZmZXIgaXMKKyAqCXJlbWFwcGVkIGludG8gYSBub24tY2FjaGVkLCBub24tYnVmZmVyZWQsIG1lbW9yeSByZWdpb24gdG8KKyAqICAgICAgYWxsb3cgcGl4ZWwgd3JpdGVzIHRvIG9jY3VyIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgorICogICAgICBPbmNlIHRoaXMgYXJlYSBpcyByZW1hcHBlZCwgYWxsIHZpcnR1YWwgbWVtb3J5IGFjY2VzcyB0byB0aGUKKyAqICAgICAgdmlkZW8gbWVtb3J5IHNob3VsZCBvY2N1ciBhdCB0aGUgbmV3IHJlZ2lvbi4KKyAqLworc3RhdGljIGludCBfX2luaXQgaW14ZmJfbWFwX3ZpZGVvX21lbW9yeShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCisJZmJpLT5tYXBfc2l6ZSA9IFBBR0VfQUxJR04oaW5mby0+Zml4LnNtZW1fbGVuKTsKKwlmYmktPm1hcF9jcHUgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGZiaS0+ZGV2LCBmYmktPm1hcF9zaXplLAorCQkJCQkmZmJpLT5tYXBfZG1hLEdGUF9LRVJORUwpOworCisJaWYgKGZiaS0+bWFwX2NwdSkgeworCQlpbmZvLT5zY3JlZW5fYmFzZSA9IGZiaS0+bWFwX2NwdTsKKwkJZmJpLT5zY3JlZW5fY3B1ID0gZmJpLT5tYXBfY3B1OworCQlmYmktPnNjcmVlbl9kbWEgPSBmYmktPm1hcF9kbWE7CisJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZmJpLT5zY3JlZW5fZG1hOworCX0KKworCXJldHVybiBmYmktPm1hcF9jcHUgPyAwIDogLUVOT01FTTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW14ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpOworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBpbXhmYl9tYWNoX2luZm8gKmluZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJcHJpbnRrKCJpLk1YIEZyYW1lYnVmZmVyIGRyaXZlclxuIik7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmKCFpbmYpIHsKKwkJZGV2X2VycihkZXYsIk5vIHBsYXRmb3JtX2RhdGEgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbyksIGRldik7CisJaWYoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJZmJpID0gaW5mby0+cGFyOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlyZXQgPSBpbXhmYl9pbml0X2ZiaW5mbyhkZXYpOworCWlmKCByZXQgPCAwICkKKwkJZ290byBmYWlsZWRfaW5pdDsKKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCAiSU1YRkIiKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZmFpbGVkX3JlZ3M7CisJfQorCisJaWYgKCFpbmYtPmZpeGVkX3NjcmVlbl9jcHUpIHsKKwkJcmV0ID0gaW14ZmJfbWFwX3ZpZGVvX21lbW9yeShpbmZvKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gUkFNOiAlZFxuIiwgcmV0KTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxlZF9tYXA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGaXhlZCBmcmFtZWJ1ZmZlciBtYXBwaW5nIGVuYWJsZXMgbG9jYXRpb24gb2YgdGhlIHNjcmVlbiBpbiBlU1JBTSAqLworCQlmYmktPm1hcF9jcHUgPSBpbmYtPmZpeGVkX3NjcmVlbl9jcHU7CisJCWZiaS0+bWFwX2RtYSA9IGluZi0+Zml4ZWRfc2NyZWVuX2RtYTsKKwkJaW5mby0+c2NyZWVuX2Jhc2UgPSBmYmktPm1hcF9jcHU7CisJCWZiaS0+c2NyZWVuX2NwdSA9IGZiaS0+bWFwX2NwdTsKKwkJZmJpLT5zY3JlZW5fZG1hID0gZmJpLT5tYXBfZG1hOworCQlpbmZvLT5maXguc21lbV9zdGFydCA9IGZiaS0+c2NyZWVuX2RtYTsKKwl9CisKKwkvKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG91ciBjb2xvdXIgYml0ZmllbGQKKwkgKiBkZXNjcmlwdG9ycyBhcmUgY29ycmVjdGx5IGluaXRpYWxpc2VkLgorCSAqLworCWlteGZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKKworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDE8PGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkX2NtYXA7CisKKwlpbXhmYl9zZXR1cF9ncGlvKGZiaSk7CisKKwlpbXhmYl9zZXRfcGFyKGluZm8pOworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKKwkJZ290byBmYWlsZWRfcmVnaXN0ZXI7CisJfQorCisJaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoZmJpKTsKKworCXJldHVybiAwOworCitmYWlsZWRfcmVnaXN0ZXI6CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKK2ZhaWxlZF9jbWFwOgorCWlmICghaW5mLT5maXhlZF9zY3JlZW5fY3B1KQorCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoZGV2LGZiaS0+bWFwX3NpemUsZmJpLT5tYXBfY3B1LAorCQkgICAgICAgICAgIGZiaS0+bWFwX2RtYSk7CitmYWlsZWRfbWFwOgorCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKK2ZhaWxlZF9yZWdzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworZmFpbGVkX2luaXQ6CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlteGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJLyogZGlzYWJsZSBMQ0QgY29udHJvbGxlciAqLworCUxDRENfUk1DUiAmPSB+Uk1DUl9MQ0RDX0VOOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKworCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCAgaW14ZmJfc2h1dGRvd24oc3RydWN0IGRldmljZSAqIGRldikKK3sKKwkvKiBkaXNhYmxlIExDRCBDb250cm9sbGVyICovCisJTENEQ19STUNSICY9IH5STUNSX0xDRENfRU47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpbXhmYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImlteC1mYiIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IGlteGZiX3Byb2JlLAorCS5zdXNwZW5kCT0gaW14ZmJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGlteGZiX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IGlteGZiX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBpbXhmYl9zaHV0ZG93biwKK307CisKK2ludCBfX2luaXQgaW14ZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXhmYl9jbGVhbnVwKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlteGZiX2luaXQpOworbW9kdWxlX2V4aXQoaW14ZmJfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTW90b3JvbGEgaS5NWCBmcmFtZWJ1ZmZlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuaCBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhjM2VlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL2lteGZiLmgKKyAqCisgKiAgRnJlZXNjYWxlIGkuTVggRnJhbWUgQnVmZmVyIGRldmljZSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFMuSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBFcmljIEEuIFRob21hcworICogICBCYXNlZCBvbiBhY29ybmZiLmMgQ29weXJpZ2h0IChDKSBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGJpdGZpZWxkcyBmb3IgZWFjaAorICogZGlzcGxheSBkZXB0aCB0aGF0IHdlIHN1cHBvcnQuCisgKi8KK3N0cnVjdCBpbXhmYl9yZ2IgeworCXN0cnVjdCBmYl9iaXRmaWVsZAlyZWQ7CisJc3RydWN0IGZiX2JpdGZpZWxkCWdyZWVuOworCXN0cnVjdCBmYl9iaXRmaWVsZAlibHVlOworCXN0cnVjdCBmYl9iaXRmaWVsZAl0cmFuc3A7Cit9OworCisjZGVmaW5lIFJHQl8xNgkoMCkKKyNkZWZpbmUgUkdCXzgJKDEpCisjZGVmaW5lIE5SX1JHQgkyCisKK3N0cnVjdCBpbXhmYl9pbmZvIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBpbXhmYl9yZ2IJKnJnYltOUl9SR0JdOworCisJdV9pbnQJCQltYXhfYnBwOworCXVfaW50CQkJbWF4X3hyZXM7CisJdV9pbnQJCQltYXhfeXJlczsKKworCS8qCisJICogVGhlc2UgYXJlIHRoZSBhZGRyZXNzZXMgd2UgbWFwcGVkCisJICogdGhlIGZyYW1lYnVmZmVyIG1lbW9yeSByZWdpb24gdG8uCisJICovCisJZG1hX2FkZHJfdAkJbWFwX2RtYTsKKwl1X2NoYXIgKgkJbWFwX2NwdTsKKwl1X2ludAkJCW1hcF9zaXplOworCisJdV9jaGFyICoJCXNjcmVlbl9jcHU7CisJZG1hX2FkZHJfdAkJc2NyZWVuX2RtYTsKKwl1X2ludAkJCXBhbGV0dGVfc2l6ZTsKKworCWRtYV9hZGRyX3QJCWRiYXIxOworCWRtYV9hZGRyX3QJCWRiYXIyOworCisJdV9pbnQJCQlwY3I7CisJdV9pbnQJCQlwd21yOworCXVfaW50CQkJbHNjcjE7CisJdV9pbnQJCQljbWFwX2ludmVyc2U6MSwKKwkJCQljbWFwX3N0YXRpYzoxLAorCQkJCXVudXNlZDozMDsKKworCXZvaWQgKCpsY2RfcG93ZXIpKGludCk7CisJdm9pZCAoKmJhY2tsaWdodF9wb3dlcikoaW50KTsKK307CisKKyNkZWZpbmUgSU1YX05BTUUJIklNWCIKKworLyoKKyAqIE1pbmltdW0gWCBhbmQgWSByZXNvbHV0aW9ucworICovCisjZGVmaW5lIE1JTl9YUkVTCTY0CisjZGVmaW5lIE1JTl9ZUkVTCTY0CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCmluZGV4IDZhMDViNzAuLjU0OWUyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwpAQCAtMTM1LDkgKzEzNSw0NSBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJpbnRlbGZiLmgiCi0jaW5jbHVkZSAiaW50ZWxmYmRydi5oIgogI2luY2x1ZGUgImludGVsZmJody5oIgogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2V0X2luaXRpYWxfbW9kZShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CitzdGF0aWMgdm9pZCB1cGRhdGVfZGluZm8oc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sCisJCQkgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOworc3RhdGljIGludCBpbnRlbGZiX2dldF9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKK3N0YXRpYyBpbnQgaW50ZWxmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgaW50ZWxmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgaW50ZWxmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgaW50IGludGVsZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgaW50IGludGVsZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgdm9pZCBpbnRlbGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpOworc3RhdGljIHZvaWQgaW50ZWxmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pOworc3RhdGljIHZvaWQgaW50ZWxmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKTsKK3N0YXRpYyBpbnQgaW50ZWxmYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpOworCitzdGF0aWMgaW50IGludGVsZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKK3N0YXRpYyBpbnQgaW50ZWxmYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGludGVsZmJfcGNpX3JlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworc3RhdGljIHZvaWQgX19kZXZleGl0IGludGVsZmJfcGNpX3VucmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIGludCBfX2RldmluaXQgaW50ZWxmYl9zZXRfZmJpbmZvKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKKwogLyoKICAqIExpbWl0aW5nIHRoZSBjbGFzcyB0byBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgcHJldmVudHMgZnVuY3Rpb24gMSBvZiB0aGUKICAqIG1vYmlsZSBjaGlwc2V0cyBmcm9tIGJlaW5nIHJlZ2lzdGVyZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5oIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MzMDU4MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotI2lmbmRlZiBfSU5URUxGQkRSVl9ICi0jZGVmaW5lIF9JTlRFTEZCRFJWX0gKLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGludGVsZmIKLSAqCi0gKiBMaW51eCBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIEludGVsKFIpIDgzME0vODQ1Ry84NTJHTS84NTVHTS84NjVHLzkxNUcKLSAqIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCi0gKgotICogQ29weXJpZ2h0IKkgMjAwNCBTeWx2YWluIE1leWVyCi0gKgotICogQXV0aG9yOiBTeWx2YWluIE1leWVyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZ2V0X2luaXRpYWxfbW9kZShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7Ci1zdGF0aWMgdm9pZCB1cGRhdGVfZGluZm8oc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sCi0JCQkgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwotc3RhdGljIGludCBpbnRlbGZiX2dldF9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0KLXN0YXRpYyBpbnQgaW50ZWxmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgaW50ZWxmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgaW50ZWxmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi1zdGF0aWMgaW50IGludGVsZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGludGVsZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi1zdGF0aWMgdm9pZCBpbnRlbGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpOwotc3RhdGljIHZvaWQgaW50ZWxmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICpyZWdpb24pOwotc3RhdGljIHZvaWQgaW50ZWxmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKTsKLXN0YXRpYyBpbnQgaW50ZWxmYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpOwotCi1zdGF0aWMgaW50IGludGVsZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0KLXN0YXRpYyBpbnQgaW50ZWxmYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKLQkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGludGVsZmJfcGNpX3JlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotc3RhdGljIHZvaWQgX19kZXZleGl0IGludGVsZmJfcGNpX3VucmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotc3RhdGljIGludCBfX2RldmluaXQgaW50ZWxmYl9zZXRfZmJpbmZvKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IDNhNjU1NWEuLjQ3NzMzZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC00MDgsNiArNDA4LDcgQEAKIHN0YXRpYyBpbnQgbm9hY2NlbCBfX2RldmluaXRkYXRhID0gMDsKIHN0YXRpYyBpbnQgbm9zY2FsZSBfX2RldmluaXRkYXRhID0gMDsKIHN0YXRpYyBpbnQgcGFuZWx0d2VhayBfX2RldmluaXRkYXRhID0gMDsKK3N0YXRpYyBpbnQgdnJhbSBfX2RldmluaXRkYXRhID0gMDsKICNpZmRlZiBDT05GSUdfTVRSUgogc3RhdGljIGludCBub210cnIgX19kZXZpbml0ZGF0YSA9IDA7CiAjZW5kaWYKQEAgLTExODAsNyArMTE4MSw3IEBACiAKIAl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCArIDYzKSAmIH42MzsKIAotCXZyYW1sZW4gPSBpbmZvLT5maXguc21lbV9sZW47CisJdnJhbWxlbiA9IGluZm8tPnNjcmVlbl9zaXplOwogCXBpdGNoID0gKCh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwpICsgNykgLyA4OwogCW1lbWxlbiA9IHBpdGNoICogdmFyLT55cmVzX3ZpcnR1YWw7CiAKQEAgLTEzNDMsNyArMTM0NCw3IEBACiAJLyogbWF4aW1pemUgdmlydHVhbCB2ZXJ0aWNhbCBsZW5ndGggKi8KIAlscGl0Y2ggPSBpbmZvLT52YXIueHJlc192aXJ0dWFsICoKIAkJKChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgKyA3KSA+PiAzKTsKLQlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gaW5mby0+Zml4LnNtZW1fbGVuIC8gbHBpdGNoOworCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBpbmZvLT5zY3JlZW5fc2l6ZSAvIGxwaXRjaDsKIAogCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gNDsKIAlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gNDsKQEAgLTE1MDcsMTIgKzE1MDgsMjAgQEAKIAogCXBhci0+RmJBZGRyZXNzID0gbnZpZGlhZmJfZml4LnNtZW1fc3RhcnQ7CiAJcGFyLT5GYk1hcFNpemUgPSBwYXItPlJhbUFtb3VudEtCeXRlcyAqIDEwMjQ7CisJaWYgKHZyYW0gJiYgdnJhbSAqIDEwMjQgKiAxMDI0IDwgcGFyLT5GYk1hcFNpemUpCisJCXBhci0+RmJNYXBTaXplID0gdnJhbSAqIDEwMjQgKiAxMDI0OworCisJLyogTGltaXQgYW1vdW50IG9mIHZyYW0gdG8gNjQgTUIgKi8KKwlpZiAocGFyLT5GYk1hcFNpemUgPiA2NCAqIDEwMjQgKiAxMDI0KQorCQlwYXItPkZiTWFwU2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CisKIAlwYXItPkZiVXNhYmxlU2l6ZSA9IHBhci0+RmJNYXBTaXplIC0gKDEyOCAqIDEwMjQpOwogCXBhci0+U2NyYXRjaEJ1ZmZlclNpemUgPSAocGFyLT5BcmNoaXRlY3R1cmUgPCBOVl9BUkNIXzEwKSA/IDggKiAxMDI0IDoKIAkgICAgMTYgKiAxMDI0OwogCXBhci0+U2NyYXRjaEJ1ZmZlclN0YXJ0ID0gcGFyLT5GYlVzYWJsZVNpemUgLSBwYXItPlNjcmF0Y2hCdWZmZXJTaXplOwogCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcChudmlkaWFmYl9maXguc21lbV9zdGFydCwgcGFyLT5GYk1hcFNpemUpOwotCW52aWRpYWZiX2ZpeC5zbWVtX2xlbiA9IHBhci0+RmJVc2FibGVTaXplOworCWluZm8tPnNjcmVlbl9zaXplID0gcGFyLT5GYlVzYWJsZVNpemU7CisJbnZpZGlhZmJfZml4LnNtZW1fbGVuID0gcGFyLT5SYW1BbW91bnRLQnl0ZXMgKiAxMDI0OwogCiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgaW9yZW1hcCBGQiBiYXNlXG4iKTsKQEAgLTE1MjQsNyArMTUzMyw4IEBACiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAoIW5vbXRycikgewogCQlwYXItPm10cnIudnJhbSA9IG10cnJfYWRkKG52aWRpYWZiX2ZpeC5zbWVtX3N0YXJ0LAotCQkJCQkgIHBhci0+RmJNYXBTaXplLCBNVFJSX1RZUEVfV1JDT01CLCAxKTsKKwkJCQkJICBwYXItPlJhbUFtb3VudEtCeXRlcyAqIDEwMjQsCisJCQkJCSAgTVRSUl9UWVBFX1dSQ09NQiwgMSk7CiAJCWlmIChwYXItPm10cnIudnJhbSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBzZXR1cCBNVFJSXG4iKTsKIAkJfSBlbHNlIHsKQEAgLTE1NjYsOSArMTU3Niw5IEBACiAKICAgICAgIGVycl9vdXRfaW91bm1hcF9mYjoKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKyAgICAgIGVycl9vdXRfZnJlZV9iYXNlMToKIAlmYl9kZXN0cm95X21vZGVkYihpbmZvLT5tb25zcGVjcy5tb2RlZGIpOwogCW52aWRpYV9kZWxldGVfaTJjX2J1c3NlcyhwYXIpOwotICAgICAgZXJyX291dF9mcmVlX2Jhc2UxOgogCWlvdW5tYXAocGFyLT5SRUdTKTsKICAgICAgIGVycl9vdXRfZnJlZV9iYXNlMDoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkKTsKQEAgLTE2NDUsNiArMTY1NSw4IEBACiAJCQlub3NjYWxlID0gMTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInBhbmVsdHdlYWs6IiwgMTEpKSB7CiAJCQlwYW5lbHR3ZWFrID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrMTEsIE5VTEwsIDApOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidnJhbToiLCA1KSkgeworCQkJdnJhbSA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzUsIE5VTEwsIDApOwogI2lmZGVmIENPTkZJR19NVFJSCiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJub210cnIiLCA2KSkgewogCQkJbm9tdHJyID0gMTsKQEAgLTE3MTYsNiArMTcyOCwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhmb3JjZUNSVEMsCiAJCSAiRm9yY2VzIHVzYWdlIG9mIGEgcGFydGljdWxhciBDUlRDIGluIGNhc2UgYXV0b2RldGVjdGlvbiAiCiAJCSAiZmFpbHMuICgwIG9yIDEpIChkZWZhdWx0PWF1dG9kZXRlY3QpIik7Cittb2R1bGVfcGFyYW0odnJhbSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModnJhbSwKKwkJICJhbW91bnQgb2YgZnJhbWVidWZmZXIgbWVtb3J5IHRvIHJlbWFwIGluIE1pQiIKKwkJICIoZGVmYXVsdD0wIC0gcmVtYXAgZW50aXJlIG1lbW9yeSkiKTsKICNpZmRlZiBDT05GSUdfTVRSUgogbW9kdWxlX3BhcmFtKG5vbXRyciwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vbXRyciwgIkRpc2FibGVzIE1UUlIgc3VwcG9ydCAoMCBvciAxPWRpc2FibGVkKSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JhZGVvbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3JhZGVvbmZiLmMKaW5kZXggZDlhMDg0ZS4uYzQ2Mzg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yYWRlb25mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcmFkZW9uZmIuYwpAQCAtMjEwNyw3ICsyMTA3LDcgQEAKIAogCiAJaWYgKHJpbmZvLT5hcmNoID09IFJBREVPTl9NNikgewotCQlmb3IgKGk9MDsgaTw4OyBpKyspCisJCWZvciAoaT0wOyBpPDc7IGkrKykKIAkJCU9VVFJFRyhjb21tb25fcmVnc19tNltpXS5yZWcsIGNvbW1vbl9yZWdzX202W2ldLnZhbCk7CiAJfSBlbHNlIHsKIAkJZm9yIChpPTA7IGk8OTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKaW5kZXggYzM0YmEzOS4uNzA0NDIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCkBAIC0zMTcsMzAgKzMxNyw0OSBAQAogCiBzdGF0aWMgdTMyIGRvX2NhbGNfcGxsKGludCBmcmVxLCBpbnQqIGZyZXFfb3V0KSAKIHsKLQlpbnQgbSwgbiwgaywgYmVzdF9tLCBiZXN0X24sIGJlc3RfaywgZl9jdXIsIGJlc3RfZXJyb3I7CisJaW50IG0sIG4sIGssIGJlc3RfbSwgYmVzdF9uLCBiZXN0X2ssIGJlc3RfZXJyb3I7CiAJaW50IGZyZWYgPSAxNDMxODsKICAgCi0JLyogdGhpcyByZWFsbHkgY291bGQgYmUgZG9uZSB3aXRoIG1vcmUgaW50ZWxsaWdlbmNlIC0tCi0JICAgMjU1KjYzKjQgPSA2NDI2MCBpdGVyYXRpb25zIGlzIHNpbGx5ICovCiAJYmVzdF9lcnJvciA9IGZyZXE7CiAJYmVzdF9uID0gYmVzdF9tID0gYmVzdF9rID0gMDsKLQlmb3IgKG4gPSAxOyBuIDwgMjU2OyBuKyspIHsKLQkJZm9yIChtID0gMTsgbSA8IDY0OyBtKyspIHsKLQkJCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKLQkJCQlmX2N1ciA9IGZyZWYqKG4gKyAyKS8obSArIDIpLygxIDw8IGspOwotCQkJCWlmIChhYnMoZl9jdXIgLSBmcmVxKSA8IGJlc3RfZXJyb3IpIHsKLQkJCQkJYmVzdF9lcnJvciA9IGFicyhmX2N1ci1mcmVxKTsKLQkJCQkJYmVzdF9uID0gbjsKLQkJCQkJYmVzdF9tID0gbTsKLQkJCQkJYmVzdF9rID0gazsKKworCWZvciAoayA9IDM7IGsgPj0gMDsgay0tKSB7CisJCWZvciAobSA9IDYzOyBtID49IDA7IG0tLSkgeworCQkJLyoKKwkJCSAqIEVzdGltYXRlIHZhbHVlIG9mIG4gdGhhdCBwcm9kdWNlcyB0YXJnZXQgZnJlcXVlbmN5CisJCQkgKiB3aXRoIGN1cnJlbnQgbSBhbmQgaworCQkJICovCisJCQlpbnQgbl9lc3RpbWF0ZWQgPSAoZnJlcSAqIChtICsgMikgKiAoMSA8PCBrKSAvIGZyZWYpIC0gMjsKKworCQkJLyogU2VhcmNoIG5laWdoYm9yaG9vZCBvZiBlc3RpbWF0ZWQgbiAqLworCQkJZm9yIChuID0gbWF4KDAsIG5fZXN0aW1hdGVkIC0gMSk7CisJCQkJCW4gPD0gbWluKDI1NSwgbl9lc3RpbWF0ZWQgKyAxKTsgbisrKSB7CisJCQkJLyoKKwkJCQkgKiBDYWxjdWxhdGUgUExMIGZyZXFlbmN5IHdpdGggY3VycmVudCBtLCBrIGFuZAorCQkJCSAqIGVzdGltYXRlZCBuCisJCQkJICovCisJCQkJaW50IGYgPSBmcmVmICogKG4gKyAyKSAvIChtICsgMikgLyAoMSA8PCBrKTsKKwkJCQlpbnQgZXJyb3IgPSBhYnMgKGYgLSBmcmVxKTsKKworCQkJCS8qCisJCQkJICogIElmIHRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UndmUgY29tZSB0byB0aGUKKwkJCQkgKiB0YXJnZXQgZnJlcXVlbmN5IHRoZW4gcmVtZW1iZXIgbiwgbSBhbmQgaworCQkJCSAqLworCQkJCWlmIChlcnJvciAgPCBiZXN0X2Vycm9yKSB7CisJCQkJCWJlc3RfZXJyb3IgPSBlcnJvcjsKKwkJCQkJYmVzdF9uICAgICA9IG47CisJCQkJCWJlc3RfbSAgICAgPSBtOworCQkJCQliZXN0X2sgICAgID0gazsKIAkJCQl9CiAJCQl9CiAJCX0KIAl9CisKIAluID0gYmVzdF9uOwogCW0gPSBiZXN0X207CiAJayA9IGJlc3RfazsKIAkqZnJlcV9vdXQgPSBmcmVmKihuICsgMikvKG0gKyAyKS8oMSA8PCBrKTsKKwogCXJldHVybiAobiA8PCA4KSB8IChtIDw8IDIpIHwgazsKIH0KIApAQCAtNDExLDM2ICs0MzAsMzUgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fbGZiX3NpemUoc3RydWN0IHRkZnhfcGFyICpwYXIsIHVuc2lnbmVkIHNob3J0IGRldl9pZCkgCiB7Ci0JdTMyIGRyYW1pbml0MCA9IDA7Ci0JdTMyIGRyYW1pbml0MSA9IDA7Ci0JdTMyIG1pc2Npbml0MSA9IDA7Ci0JdTMyIGxmYnNpemUgICA9IDA7Ci0JaW50IHNncmFtX3AgICA9IDA7CisJdTMyIGRyYW1pbml0MDsKKwl1MzIgZHJhbWluaXQxOworCXUzMiBtaXNjaW5pdDE7CisKKwlpbnQgbnVtX2NoaXBzOworCWludCBjaGlwX3NpemU7IC8qIGluIE1CICovCisJdTMyIGxmYnNpemU7CisJaW50IGhhc19zZ3JhbTsKIAogCWRyYW1pbml0MCA9IHRkZnhfaW5sKHBhciwgRFJBTUlOSVQwKTsgIAogCWRyYW1pbml0MSA9IHRkZnhfaW5sKHBhciwgRFJBTUlOSVQxKTsKKworCW51bV9jaGlwcyA9IChkcmFtaW5pdDAgJiBEUkFNSU5JVDBfU0dSQU1fTlVNKSA/IDggOiA0OwogIAotCWlmICgoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfM0RGWF9CQU5TSEVFKSB8fAotCSAgICAoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08zKSkgeyAgICAgICAgICAgICAJIAotCQlzZ3JhbV9wID0gKGRyYW1pbml0MSAmIERSQU1JTklUMV9NRU1fU0RSQU0pID8gMCA6IDE7Ci0gIAotCWxmYnNpemUgPSBzZ3JhbV9wID8KLQkJKCgoZHJhbWluaXQwICYgRFJBTUlOSVQwX1NHUkFNX05VTSkgID8gMiA6IDEpICogCi0JCSgoZHJhbWluaXQwICYgRFJBTUlOSVQwX1NHUkFNX1RZUEUpID8gOCA6IDQpICogMTAyNCAqIDEwMjQpIDoKLQkJMTYgKiAxMDI0ICogMTAyNDsKKwlpZiAoZGV2X2lkIDwgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzUpIHsKKwkJLyogQmFuc2hlZS9Wb29kb28zICovCisJCWhhc19zZ3JhbSA9IGRyYW1pbml0MSAmIERSQU1JTklUMV9NRU1fU0RSQU07CisJCWNoaXBfc2l6ZSA9IGhhc19zZ3JhbSA/ICgoZHJhbWluaXQwICYgRFJBTUlOSVQwX1NHUkFNX1RZUEUpID8gMiA6IDEpCisJCQkJICAgICAgOiAyOwogCX0gZWxzZSB7CiAJCS8qIFZvb2RvbzQvNSAqLwotCQl1MzIgY2hpcHMsIHBzaXplLCBiYW5rczsKKwkJaGFzX3NncmFtID0gMDsKKwkJY2hpcF9zaXplID0gMSA8PCAoKGRyYW1pbml0MCAmIERSQU1JTklUMF9TR1JBTV9UWVBFX01BU0spID4+IERSQU1JTklUMF9TR1JBTV9UWVBFX1NISUZUKTsKKwl9CisJbGZic2l6ZSA9IG51bV9jaGlwcyAqIGNoaXBfc2l6ZSAqIDEwMjQgKiAxMDI0OwogCi0JCWNoaXBzID0gKChkcmFtaW5pdDAgJiAoMSA8PCAyNikpID09IDApID8gNCA6IDg7Ci0JCXBzaXplID0gMSA8PCAoKGRyYW1pbml0MCAmIDB4MzgwMDAwMDApID4+IDI4KTsKLQkJYmFua3MgPSAoKGRyYW1pbml0MCAmICgxIDw8IDMwKSkgPT0gMCkgPyAyIDogNDsKLQkJbGZic2l6ZSA9IGNoaXBzICogcHNpemUgKiBiYW5rczsKLQkJbGZic2l6ZSA8PD0gMjA7Ci0JfSAgICAgICAgICAgICAgICAgCi0JLyogZGlzYWJsZSBibG9jayB3cml0ZXMgZm9yIFNEUkFNICh3aHk/KSAqLworCS8qIGRpc2FibGUgYmxvY2sgd3JpdGVzIGZvciBTRFJBTSAqLwogCW1pc2Npbml0MSA9IHRkZnhfaW5sKHBhciwgTUlTQ0lOSVQxKTsKLQltaXNjaW5pdDEgfD0gc2dyYW1fcCA/IDAgOiBNSVNDSU5JVDFfMkRCTE9DS19ESVM7CisJbWlzY2luaXQxIHw9IGhhc19zZ3JhbSA/IDAgOiBNSVNDSU5JVDFfMkRCTE9DS19ESVM7CiAJbWlzY2luaXQxIHw9IE1JU0NJTklUMV9DTFVUX0lOVjsKIAogCWJhbnNoZWVfbWFrZV9yb29tKHBhciwgMSk7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKaW5kZXggOGZjMTI3OC4uMzAyNzg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCkBAIC0xOSw5ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaWZkZWYgX19pMzg2X18KLSNpbmNsdWRlIDx2aWRlby9lZGlkLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogCmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCA2YjZiYjdjLi4yM2MxMjUxIDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCisrKyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTEzMSw4ICsxMzEsNyBAQAogCiAJdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAKLQlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCi0JCVBBR0VfQlVHKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlyZXQgPSAtRVNUQUxFOwogCWlmICh2bm9kZS0+ZmxhZ3MgJiBBRlNfVk5PREVfREVMRVRFRCkKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggYTgyMjE0ZC4uN2FmYTIyMiAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTQwLDkgKzQwLDYgQEAKICNkZWZpbmUgZHByaW50ayh4Li4uKQlkbyB7IDsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi1zdGF0aWMgbG9uZyBhaW9fcnVuID0gMDsgLyogZm9yIHRlc3Rpbmcgb25seSAqLwotc3RhdGljIGxvbmcgYWlvX3dha2V1cHMgPSAwOyAvKiBmb3IgdGVzdGluZyBvbmx5ICovCi0KIC8qLS0tLS0tIHN5c2N0bCB2YXJpYWJsZXMtLS0tKi8KIGF0b21pY190IGFpb19uciA9IEFUT01JQ19JTklUKDApOwkvKiBjdXJyZW50IHN5c3RlbSB3aWRlIG51bWJlciBvZiBhaW8gcmVxdWVzdHMgKi8KIHVuc2lnbmVkIGFpb19tYXhfbnIgPSAweDEwMDAwOwkvKiBzeXN0ZW0gd2lkZSBtYXhpbXVtIG51bWJlciBvZiBhaW8gcmVxdWVzdHMgKi8KQEAgLTQwNSw3ICs0MDIsNiBAQAogCXJlcS0+a2lfY3R4ID0gY3R4OwogCXJlcS0+a2lfY2FuY2VsID0gTlVMTDsKIAlyZXEtPmtpX3JldHJ5ID0gTlVMTDsKLQlyZXEtPmtpX29iai51c2VyID0gTlVMTDsKIAlyZXEtPmtpX2R0b3IgPSBOVUxMOwogCXJlcS0+cHJpdmF0ZSA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcS0+a2lfcnVuX2xpc3QpOwpAQCAtNDUxLDExICs0NDcsNiBAQAogewogCWlmIChyZXEtPmtpX2R0b3IpCiAJCXJlcS0+a2lfZHRvcihyZXEpOwotCXJlcS0+a2lfY3R4ID0gTlVMTDsKLQlyZXEtPmtpX2ZpbHAgPSBOVUxMOwotCXJlcS0+a2lfb2JqLnVzZXIgPSBOVUxMOwotCXJlcS0+a2lfZHRvciA9IE5VTEw7Ci0JcmVxLT5wcml2YXRlID0gTlVMTDsKIAlrbWVtX2NhY2hlX2ZyZWUoa2lvY2JfY2FjaGVwLCByZXEpOwogCWN0eC0+cmVxc19hY3RpdmUtLTsKIApAQCAtNjIzLDcgKzYxNCw2IEBACiAJaWYgKGxpc3RfZW1wdHkoJmlvY2ItPmtpX3J1bl9saXN0KSkgewogCQlsaXN0X2FkZF90YWlsKCZpb2NiLT5raV9ydW5fbGlzdCwKIAkJCSZjdHgtPnJ1bl9saXN0KTsKLQkJaW9jYi0+a2lfcXVldWVkKys7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY2NCwxMCArNjU0LDggQEAKIAl9CiAKIAlpZiAoIShpb2NiLT5raV9yZXRyaWVkICYgMHhmZikpIHsKLQkJcHJfZGVidWcoIiVsZCByZXRyeTogJWQgb2YgJWQgKGtpY2sgJWxkLCBRICVsZCBydW4gJWxkLCB3YWtlICVsZClcbiIsCi0JCQlpb2NiLT5raV9yZXRyaWVkLAotCQkJaW9jYi0+a2lfbmJ5dGVzIC0gaW9jYi0+a2lfbGVmdCwgaW9jYi0+a2lfbmJ5dGVzLAotCQkJaW9jYi0+a2lfa2lja2VkLCBpb2NiLT5raV9xdWV1ZWQsIGFpb19ydW4sIGFpb193YWtldXBzKTsKKwkJcHJfZGVidWcoIiVsZCByZXRyeTogJWQgb2YgJWRcbiIsIGlvY2ItPmtpX3JldHJpZWQsCisJCQlpb2NiLT5raV9uYnl0ZXMgLSBpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9uYnl0ZXMpOwogCX0KIAogCWlmICghKHJldHJ5ID0gaW9jYi0+a2lfcmV0cnkpKSB7CkBAIC03NzQsNyArNzYyLDYgQEAKIHN0YXRpYyBpbnQgX19haW9fcnVuX2lvY2JzKHN0cnVjdCBraW9jdHggKmN0eCkKIHsKIAlzdHJ1Y3Qga2lvY2IgKmlvY2I7Ci0JaW50IGNvdW50ID0gMDsKIAlMSVNUX0hFQUQocnVuX2xpc3QpOwogCiAJbGlzdF9zcGxpY2VfaW5pdCgmY3R4LT5ydW5fbGlzdCwgJnJ1bl9saXN0KTsKQEAgLTc4OSw5ICs3NzYsNyBAQAogCQlhaW9fcnVuX2lvY2IoaW9jYik7CiAJCWlmIChfX2Fpb19wdXRfcmVxKGN0eCwgaW9jYikpICAvKiBkcm9wIGV4dHJhIHJlZiAqLwogCQkJcHV0X2lvY3R4KGN0eCk7Ci0JCWNvdW50Kys7CiAgCX0KLQlhaW9fcnVuKys7CiAJaWYgKCFsaXN0X2VtcHR5KCZjdHgtPnJ1bl9saXN0KSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC04OTAsMTAgKzg3NSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+Y3R4X2xvY2ssIGZsYWdzKTsKIAlydW4gPSBfX3F1ZXVlX2tpY2tlZF9pb2NiKGlvY2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+Y3R4X2xvY2ssIGZsYWdzKTsKLQlpZiAocnVuKSB7CisJaWYgKHJ1bikKIAkJYWlvX3F1ZXVlX3dvcmsoY3R4KTsKLQkJYWlvX3dha2V1cHMrKzsKLQl9CiB9CiAKIC8qCkBAIC05MTMsNyArODk2LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlvY2ItPmtpX2tpY2tlZCsrOwogCS8qIElmIGl0cyBhbHJlYWR5IGtpY2tlZCB3ZSBzaG91bGRuJ3QgcXVldWUgaXQgYWdhaW4gKi8KIAlpZiAoIWtpb2NiVHJ5S2ljayhpb2NiKSkgewogCQlxdWV1ZV9raWNrZWRfaW9jYihpb2NiKTsKQEAgLTk4NCw3ICs5NjYsOCBAQAogCiAJdGFpbCA9IGluZm8tPnRhaWw7CiAJZXZlbnQgPSBhaW9fcmluZ19ldmVudChpbmZvLCB0YWlsLCBLTV9JUlEwKTsKLQl0YWlsID0gKHRhaWwgKyAxKSAlIGluZm8tPm5yOworCWlmICgrK3RhaWwgPj0gaW5mby0+bnIpCisJCXRhaWwgPSAwOwogCiAJZXZlbnQtPm9iaiA9ICh1NjQpKHVuc2lnbmVkIGxvbmcpaW9jYi0+a2lfb2JqLnVzZXI7CiAJZXZlbnQtPmRhdGEgPSBpb2NiLT5raV91c2VyX2RhdGE7CkBAIC0xMDA4LDEwICs5OTEsOCBAQAogCiAJcHJfZGVidWcoImFkZGVkIHRvIHJpbmcgJXAgYXQgWyVsdV1cbiIsIGlvY2IsIHRhaWwpOwogCi0JcHJfZGVidWcoIiVsZCByZXRyaWVzOiAlZCBvZiAlZCAoa2lja2VkICVsZCwgUSAlbGQgcnVuICVsZCB3YWtlICVsZClcbiIsCi0JCWlvY2ItPmtpX3JldHJpZWQsCi0JCWlvY2ItPmtpX25ieXRlcyAtIGlvY2ItPmtpX2xlZnQsIGlvY2ItPmtpX25ieXRlcywKLQkJaW9jYi0+a2lfa2lja2VkLCBpb2NiLT5raV9xdWV1ZWQsIGFpb19ydW4sIGFpb193YWtldXBzKTsKKwlwcl9kZWJ1ZygiJWxkIHJldHJpZXM6ICVkIG9mICVkXG4iLCBpb2NiLT5raV9yZXRyaWVkLAorCQlpb2NiLT5raV9uYnl0ZXMgLSBpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9uYnl0ZXMpOwogcHV0X3JxOgogCS8qIGV2ZXJ5dGhpbmcgdHVybmVkIG91dCB3ZWxsLCBkaXNwb3NlIG9mIHRoZSBhaW9jYi4gKi8KIAlyZXQgPSBfX2Fpb19wdXRfcmVxKGN0eCwgaW9jYik7CkBAIC0xMTE5LDcgKzExMDAsNiBAQAogCWludAkJCWkgPSAwOwogCXN0cnVjdCBpb19ldmVudAkJZW50OwogCXN0cnVjdCBhaW9fdGltZW91dAl0bzsKLQlpbnQgCQkJZXZlbnRfbG9vcCA9IDA7IC8qIHRlc3Rpbmcgb25seSAqLwogCWludAkJCXJldHJ5ID0gMDsKIAogCS8qIG5lZWRlZCB0byB6ZXJvIGFueSBwYWRkaW5nIHdpdGhpbiBhbiBlbnRyeSAodGhlcmUgc2hvdWxkbid0IGJlIApAQCAtMTE4Niw3ICsxMTY2LDYgQEAKIAkJCWlmICh0by50aW1lZF9vdXQpCS8qIE9ubHkgY2hlY2sgYWZ0ZXIgcmVhZCBldnQgKi8KIAkJCQlicmVhazsKIAkJCXNjaGVkdWxlKCk7Ci0JCQlldmVudF9sb29wKys7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSkgewogCQkJCXJldCA9IC1FSU5UUjsKIAkJCQlicmVhazsKQEAgLTEyMTQsOSArMTE5Myw2IEBACiAJaWYgKHRpbWVvdXQpCiAJCWNsZWFyX3RpbWVvdXQoJnRvKTsKIG91dDoKLQlwcl9kZWJ1ZygiZXZlbnQgbG9vcCBleGVjdXRlZCAlZCB0aW1lc1xuIiwgZXZlbnRfbG9vcCk7Ci0JcHJfZGVidWcoImFpb19ydW4gJWxkXG4iLCBhaW9fcnVuKTsKLQlwcl9kZWJ1ZygiYWlvX3dha2V1cHMgJWxkXG4iLCBhaW9fd2FrZXVwcyk7CiAJcmV0dXJuIGkgPyBpIDogcmV0OwogfQogCkBAIC0xNTE1LDggKzE0OTEsNyBAQAogCX0KIAogCXJlcS0+a2lfZmlscCA9IGZpbGU7Ci0JaW9jYi0+YWlvX2tleSA9IHJlcS0+a2lfa2V5OwotCXJldCA9IHB1dF91c2VyKGlvY2ItPmFpb19rZXksICZ1c2VyX2lvY2ItPmFpb19rZXkpOworCXJldCA9IHB1dF91c2VyKHJlcS0+a2lfa2V5LCAmdXNlcl9pb2NiLT5haW9fa2V5KTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlkcHJpbnRrKCJFRkFVTFQ6IGFpb19rZXlcbiIpOwogCQlnb3RvIG91dF9wdXRfcmVxOwpAQCAtMTUzMSwxMyArMTUwNiw3IEBACiAJcmVxLT5raV9vcGNvZGUgPSBpb2NiLT5haW9fbGlvX29wY29kZTsKIAlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZyZXEtPmtpX3dhaXQsIGFpb193YWtlX2Z1bmN0aW9uKTsKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5raV93YWl0LnRhc2tfbGlzdCk7Ci0JcmVxLT5raV9ydW5fbGlzdC5uZXh0ID0gcmVxLT5raV9ydW5fbGlzdC5wcmV2ID0gTlVMTDsKLQlyZXEtPmtpX3JldHJ5ID0gTlVMTDsKIAlyZXEtPmtpX3JldHJpZWQgPSAwOwotCXJlcS0+a2lfa2lja2VkID0gMDsKLQlyZXEtPmtpX3F1ZXVlZCA9IDA7Ci0JYWlvX3J1biA9IDA7Ci0JYWlvX3dha2V1cHMgPSAwOwogCiAJcmV0ID0gYWlvX3NldHVwX2lvY2IocmVxKTsKIApAQCAtMTU0NSwxMCArMTUxNCwxNCBAQAogCQlnb3RvIG91dF9wdXRfcmVxOwogCiAJc3Bpbl9sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmcmVxLT5raV9ydW5fbGlzdCwgJmN0eC0+cnVuX2xpc3QpOwotCS8qIGRyYWluIHRoZSBydW4gbGlzdCAqLwotCXdoaWxlIChfX2Fpb19ydW5faW9jYnMoY3R4KSkKLQkJOworCWlmIChsaWtlbHkobGlzdF9lbXB0eSgmY3R4LT5ydW5fbGlzdCkpKSB7CisJCWFpb19ydW5faW9jYihyZXEpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+a2lfcnVuX2xpc3QsICZjdHgtPnJ1bl9saXN0KTsKKwkJLyogZHJhaW4gdGhlIHJ1biBsaXN0ICovCisJCXdoaWxlIChfX2Fpb19ydW5faW9jYnMoY3R4KSkKKwkJCTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKIAlhaW9fcHV0X3JlcShyZXEpOwkvKiBkcm9wIGV4dHJhIHJlZiB0byByZXEgKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCBmNWE1MmM4Li5jN2IyYjg4IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC04NCw2ICs4NCw3IEBACiAJY2hhciAqbmFtZTsKIAkvKiBUaGlzIGlzIGZvciBzdGF0dXMgcmVwb3J0aW5nIHVwb24gcmV0dXJuICovCiAJaW50IHN0YXR1czsKKwlhdG9taWNfdCBub3RpZmllZDsKIAlhdG9taWNfdCB3YWl0X2N0cjsKIH07CiAKQEAgLTEwMSw2ICsxMDIsNyBAQAogCWludCBuZWVkc19yZWdob3N0OwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IHNlbWFwaG9yZSB3cV9zZW07CisJc3BpbmxvY2tfdCBmc19sb2NrOwogCXN0cnVjdCBhdXRvZnNfd2FpdF9xdWV1ZSAqcXVldWVzOyAvKiBXYWl0IHF1ZXVlIHBvaW50ZXIgKi8KIH07CiAKQEAgLTEyNiw5ICsxMjgsMTggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGF1dG9mczRfaXNwZW5kaW5nKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmluZiA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCWludCBwZW5kaW5nID0gMDsKIAotCXJldHVybiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0FVVE9GU19QRU5ESU5HKSB8fAotCQkoaW5mICE9IE5VTEwgJiYgaW5mLT5mbGFncyAmIEFVVE9GU19JTkZfRVhQSVJJTkcpOworCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkcpCisJCXJldHVybiAxOworCisJaWYgKGluZikgeworCQlzcGluX2xvY2soJmluZi0+c2JpLT5mc19sb2NrKTsKKwkJcGVuZGluZyA9IGluZi0+ZmxhZ3MgJiBBVVRPRlNfSU5GX0VYUElSSU5HOworCQlzcGluX3VubG9jaygmaW5mLT5zYmktPmZzX2xvY2spOworCX0KKworCXJldHVybiBwZW5kaW5nOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXV0b2ZzNF9jb3B5X2F0aW1lKHN0cnVjdCBmaWxlICpzcmMsIHN0cnVjdCBmaWxlICpkc3QpCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2V4cGlyZS5jIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwppbmRleCAzMTU0MGE2Li41MDA0MjVlIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2V4cGlyZS5jCisrKyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKQEAgLTk5LDYgKzk5LDEwIEBACiAJaWYgKCFhdXRvZnM0X2Nhbl9leHBpcmUodG9wLCB0aW1lb3V0LCBkb19ub3cpKQogCQlyZXR1cm4gMDsKIAorCS8qIElzIHNvbWVvbmUgdmlzaXRpbmcgYW55d2hlcmUgaW4gdGhlIHRyZWUgPyAqLworCWlmIChtYXlfdW1vdW50X3RyZWUobW50KSkKKwkJcmV0dXJuIDA7CisKIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIHJlcGVhdDoKIAluZXh0ID0gdGhpc19wYXJlbnQtPmRfc3ViZGlycy5uZXh0OwpAQCAtMjcwLDEwICsyNzQsMTggQEAKIAogCQkvKiBDYXNlIDI6IHRyZWUgbW91bnQsIGV4cGlyZSBpZmYgZW50aXJlIHRyZWUgaXMgbm90IGJ1c3kgKi8KIAkJaWYgKCFleHBfbGVhdmVzKSB7CisJCQkvKiBMb2NrIHRoZSB0cmVlIGFzIHdlIG11c3QgZXhwaXJlIGFzIGEgd2hvbGUgKi8KKwkJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKIAkJCWlmIChhdXRvZnM0X2NoZWNrX3RyZWUobW50LCBkZW50cnksIHRpbWVvdXQsIGRvX25vdykpIHsKLQkJCWV4cGlyZWQgPSBkZW50cnk7Ci0JCQlicmVhazsKKwkJCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmluZiA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCisJCQkJLyogU2V0IHRoaXMgZmxhZyBlYXJseSB0byBjYXRjaCBzeXNfY2hkaXIgYW5kIHRoZSBsaWtlICovCisJCQkJaW5mLT5mbGFncyB8PSBBVVRPRlNfSU5GX0VYUElSSU5HOworCQkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCQkJCWV4cGlyZWQgPSBkZW50cnk7CisJCQkJYnJlYWs7CiAJCQl9CisJCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIAkJLyogQ2FzZSAzOiBkaXJlY3QgbW91bnQsIGV4cGlyZSBpbmRpdmlkdWFsIGxlYXZlcyAqLwogCQl9IGVsc2UgewogCQkJZXhwaXJlZCA9IGF1dG9mczRfY2hlY2tfbGVhdmVzKG1udCwgZGVudHJ5LCB0aW1lb3V0LCBkb19ub3cpOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9pbm9kZS5jIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCmluZGV4IGE1MjU2MDcuLjRiYjE0Y2MgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvaW5vZGUuYworKysgYi9mcy9hdXRvZnM0L2lub2RlLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogCXNiaS0+dmVyc2lvbiA9IDA7CiAJc2JpLT5zdWJfdmVyc2lvbiA9IDA7CiAJaW5pdF9NVVRFWCgmc2JpLT53cV9zZW0pOworCXNwaW5fbG9ja19pbml0KCZzYmktPmZzX2xvY2spOwogCXNiaS0+cXVldWVzID0gTlVMTDsKIAlzLT5zX2Jsb2Nrc2l6ZSA9IDEwMjQ7CiAJcy0+c19ibG9ja3NpemVfYml0cyA9IDEwOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC93YWl0cS5jIGIvZnMvYXV0b2ZzNC93YWl0cS5jCmluZGV4IDFhYjI0YTYuLjVhNDBkMzYgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvd2FpdHEuYworKysgYi9mcy9hdXRvZnM0L3dhaXRxLmMKQEAgLTIxMCwxNyArMjEwLDggQEAKIAkJd3EtPmxlbiA9IGxlbjsKIAkJd3EtPnN0YXR1cyA9IC1FSU5UUjsgLyogU3RhdHVzIHJldHVybiBpZiBpbnRlcnJ1cHRlZCAqLwogCQlhdG9taWNfc2V0KCZ3cS0+d2FpdF9jdHIsIDIpOworCQlhdG9taWNfc2V0KCZ3cS0+bm90aWZpZWQsIDEpOwogCQl1cCgmc2JpLT53cV9zZW0pOwotCi0JCURQUklOVEsoIm5ldyB3YWl0IGlkID0gMHglMDhseCwgbmFtZSA9ICUuKnMsIG5meT0lZCIsCi0JCQkodW5zaWduZWQgbG9uZykgd3EtPndhaXRfcXVldWVfdG9rZW4sIHdxLT5sZW4sIHdxLT5uYW1lLCBub3RpZnkpOwotCQkvKiBhdXRvZnM0X25vdGlmeV9kYWVtb24oKSBtYXkgYmxvY2sgKi8KLQkJaWYgKG5vdGlmeSAhPSBORllfTk9ORSkgewotCQkJYXV0b2ZzNF9ub3RpZnlfZGFlbW9uKHNiaSx3cSwgCi0JCQkJCW5vdGlmeSA9PSBORllfTU9VTlQgPwotCQkJCQkJICBhdXRvZnNfcHR5cGVfbWlzc2luZyA6Ci0JCQkJCQkgIGF1dG9mc19wdHlwZV9leHBpcmVfbXVsdGkpOwotCQl9CiAJfSBlbHNlIHsKIAkJYXRvbWljX2luYygmd3EtPndhaXRfY3RyKTsKIAkJdXAoJnNiaS0+d3Ffc2VtKTsKQEAgLTIyOSw2ICsyMjAsMTcgQEAKIAkJCSh1bnNpZ25lZCBsb25nKSB3cS0+d2FpdF9xdWV1ZV90b2tlbiwgd3EtPmxlbiwgd3EtPm5hbWUsIG5vdGlmeSk7CiAJfQogCisJaWYgKG5vdGlmeSAhPSBORllfTk9ORSAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZ3cS0+bm90aWZpZWQpKSB7CisJCWludCB0eXBlID0gKG5vdGlmeSA9PSBORllfTU9VTlQgPworCQkJYXV0b2ZzX3B0eXBlX21pc3NpbmcgOiBhdXRvZnNfcHR5cGVfZXhwaXJlX211bHRpKTsKKworCQlEUFJJTlRLKCgibmV3IHdhaXQgaWQgPSAweCUwOGx4LCBuYW1lID0gJS4qcywgbmZ5PSVkXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpIHdxLT53YWl0X3F1ZXVlX3Rva2VuLCB3cS0+bGVuLCB3cS0+bmFtZSwgbm90aWZ5KSk7CisKKwkJLyogYXV0b2ZzNF9ub3RpZnlfZGFlbW9uKCkgbWF5IGJsb2NrICovCisJCWF1dG9mczRfbm90aWZ5X2RhZW1vbihzYmksIHdxLCB0eXBlKTsKKwl9CisKIAkvKiB3cS0+bmFtZSBpcyBOVUxMIGlmIGFuZCBvbmx5IGlmIHRoZSBsb2NrIGlzIGFscmVhZHkgcmVsZWFzZWQgKi8KIAogCWlmICggc2JpLT5jYXRhdG9uaWMgKSB7CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IGU1MzQ5ZTguLjNhMTQ3MmEgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0xNDAsNiArMTQwLDcgQEAKICAqIGJpb19hbGxvY19iaW9zZXQgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCiAgKiBAZ2ZwX21hc2s6ICAgdGhlIEdGUF8gbWFzayBnaXZlbiB0byB0aGUgc2xhYiBhbGxvY2F0b3IKICAqIEBucl9pb3ZlY3M6CW51bWJlciBvZiBpb3ZlY3MgdG8gcHJlLWFsbG9jYXRlCisgKiBAYnM6CQl0aGUgYmlvX3NldCB0byBhbGxvY2F0ZSBmcm9tCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgIGJpb19hbGxvY19iaW9zZXQgd2lsbCBmaXJzdCB0cnkgaXQncyBvbiBtZW1wb29sIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uCkBAIC02MjksNiArNjMwLDcgQEAKIAogLyoqCiAgKgliaW9fbWFwX3VzZXIJLQltYXAgdXNlciBhZGRyZXNzIGludG8gYmlvCisgKglAcTogdGhlIHJlcXVlc3RfcXVldWVfdCBmb3IgdGhlIGJpbwogICoJQGJkZXY6IGRlc3RpbmF0aW9uIGJsb2NrIGRldmljZQogICoJQHVhZGRyOiBzdGFydCBvZiB1c2VyIGFkZHJlc3MKICAqCUBsZW46IGxlbmd0aCBpbiBieXRlcwpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCAzYjEyY2Y5NC4uNWY1MjViMyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXNiID0gZ2V0X3N1cGVyKGJkZXYpOwogCWlmIChzYiAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfV1JJVEU7Ci0JCXdtYigpOworCQlzbXBfd21iKCk7CiAKIAkJc3luY19pbm9kZXNfc2Ioc2IsIDApOwogCQlEUVVPVF9TWU5DKHNiKTsKQEAgLTIzNSw3ICsyMzUsNyBAQAogCQlzeW5jX2lub2Rlc19zYihzYiwgMSk7CiAKIAkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1RSQU5TOwotCQl3bWIoKTsKKwkJc21wX3dtYigpOwogCiAJCXN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQlpZiAoc2ItPnNfb3AtPnVubG9ja2ZzKQogCQkJc2ItPnNfb3AtPnVubG9ja2ZzKHNiKTsKIAkJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47Ci0JCXdtYigpOworCQlzbXBfd21iKCk7CiAJCXdha2VfdXAoJnNiLT5zX3dhaXRfdW5mcm96ZW4pOwogCQlkcm9wX3N1cGVyKHNiKTsKIAl9CkBAIC03NzQsMTUgKzc3NCwxNCBAQAogLyoqCiAgKiBzeW5jX21hcHBpbmdfYnVmZmVycyAtIHdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGEgbWFwcGluZydzICJhc3NvY2lhdGVkIgogICogICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzCi0gKiBAYnVmZmVyX21hcHBpbmcgLSB0aGUgbWFwcGluZyB3aGljaCBiYWNrcyB0aGUgYnVmZmVycycgZGF0YQotICogQG1hcHBpbmcgLSB0aGUgbWFwcGluZyB3aGljaCB3YW50cyB0aG9zZSBidWZmZXJzIHdyaXR0ZW4KKyAqIEBtYXBwaW5nOiB0aGUgbWFwcGluZyB3aGljaCB3YW50cyB0aG9zZSBidWZmZXJzIHdyaXR0ZW4KICAqCiAgKiBTdGFydHMgSS9PIGFnYWluc3QgdGhlIGJ1ZmZlcnMgYXQgbWFwcGluZy0+cHJpdmF0ZV9saXN0LCBhbmQgd2FpdHMgdXBvbgogICogdGhhdCBJL08uCiAgKgotICogQmFzaWNhbGx5LCB0aGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGZzeW5jKCkuICBAYnVmZmVyX21hcHBpbmcgaXMKLSAqIHRoZSBibG9ja2RldiB3aGljaCAib3ducyIgdGhlIGJ1ZmZlcnMgYW5kIEBtYXBwaW5nIGlzIGEgZmlsZSBvciBkaXJlY3RvcnkKLSAqIHdoaWNoIG5lZWRzIHRob3NlIGJ1ZmZlcnMgdG8gYmUgd3JpdHRlbiBmb3IgYSBzdWNjZXNzZnVsIGZzeW5jKCkuCisgKiBCYXNpY2FsbHksIHRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZnN5bmMoKS4KKyAqIEBtYXBwaW5nIGlzIGEgZmlsZSBvciBkaXJlY3Rvcnkgd2hpY2ggbmVlZHMgdGhvc2UgYnVmZmVycyB0byBiZSB3cml0dGVuIGZvcgorICogYSBzdWNjZXNzZnVsIGZzeW5jKCkuCiAgKi8KIGludCBzeW5jX21hcHBpbmdfYnVmZmVycyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKQEAgLTEyNjMsNiArMTI2Miw3IEBACiAKIC8qKgogICogbWFya19idWZmZXJfZGlydHkgLSBtYXJrIGEgYnVmZmVyX2hlYWQgYXMgbmVlZGluZyB3cml0ZW91dAorICogQGJoOiB0aGUgYnVmZmVyX2hlYWQgdG8gbWFyayBkaXJ0eQogICoKICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0IGl0cwogICogYmFja2luZyBwYWdlIGRpcnR5LCB0aGVuIHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbiBpdHMgYWRkcmVzc19zcGFjZSdzIHJhZGl4CkBAIC0xNTAxLDYgKzE1MDEsNyBAQAogCiAvKioKICAqICBfX2JyZWFkKCkgLSByZWFkcyBhIHNwZWNpZmllZCBibG9jayBhbmQgcmV0dXJucyB0aGUgYmgKKyAqICBAYmRldjogdGhlIGJsb2NrX2RldmljZSB0byByZWFkIGZyb20KICAqICBAYmxvY2s6IG51bWJlciBvZiBibG9jawogICogIEBzaXplOiBzaXplIChpbiBieXRlcykgdG8gcmVhZAogICogCkBAIC0yMDc4LDggKzIwNzksNyBAQAogCWludCBuciwgaTsKIAlpbnQgZnVsbHlfbWFwcGVkID0gMTsKIAotCWlmICghUGFnZUxvY2tlZChwYWdlKSkKLQkJUEFHRV9CVUcocGFnZSk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlibG9ja3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CiAJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQogCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBibG9ja3NpemUsIDApOwpAQCAtMjkxNyw3ICsyOTE3LDcgQEAKIAogCWJoID0gaGVhZDsKIAlkbyB7Ci0JCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKQorCQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSAmJiBwYWdlLT5tYXBwaW5nKQogCQkJc2V0X2JpdChBU19FSU8sICZwYWdlLT5tYXBwaW5nLT5mbGFncyk7CiAJCWlmIChidWZmZXJfYnVzeShiaCkpCiAJCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA0ZDI0MDQzLi45NTQ4M2JhIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC00LDcgKzQsOSBAQAogRG8gbm90IG9vcHMgaWYgcm9vdCB1c2VyIGtpbGxzIGNpZnMgb3Bsb2NrIGtlcm5lbCB0aHJlYWQgb3IKIGtpbGxzIHRoZSBjaWZzZCB0aHJlYWQgKE5COiBraWxsaW5nIHRoZSBjaWZzIGtlcm5lbCB0aHJlYWRzIGlzIG5vdAogcmVjb21tZW5kZWQsIHVubW91bnQgYW5kIHJtbW9kIGNpZnMgd2lsbCBraWxsIHRoZW0gd2hlbiB0aGV5IGFyZQotbm8gbG9uZ2VyIG5lZWRlZCkuCitubyBsb25nZXIgbmVlZGVkKS4gIEZpeCByZWFkZGlyIHRvIEFTQ0lJIHNlcnZlcnMgKGllIG9sZGVyIHNlcnZlcnMKK3doaWNoIGRvIG5vdCBzdXBwb3J0IFVuaWNvZGUpIGFuZCBhbHNvIHJlcXVpcmUgYXN0ZXJpay4KKwogCiBWZXJzaW9uIDEuMzMKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9UT0RPIGIvZnMvY2lmcy9UT0RPCmluZGV4IDFlODQ5MGUuLjhjYzg4MTYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvVE9ETworKysgYi9mcy9jaWZzL1RPRE8KQEAgLTEsNCArMSw0IEBACi12ZXJzaW9uIDEuMzIgQXByaWwgMywgMjAwNQordmVyc2lvbiAxLjM0IEFwcmlsIDI5LCAyMDA1CiAKIEEgUGFydGlhbCBMaXN0IG9mIE1pc3NpbmcgRmVhdHVyZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTcwLDcgKzcwLDE1IEBACiBzKSBBbGxvdyByZW1hcHBpbmcgb2YgbGFzdCByZW1haW5pbmcgY2hhcmFjdGVyIChcKSB0byArMHhGMDAwIHdoaWNoCiAodGhpcyBjaGFyYWN0ZXIgaXMgdmFsaWQgZm9yIFBPU0lYIGJ1dCBub3QgZm9yIFdpbmRvd3MpCiAKLUtOT1dOIEJVR1MgKHVwZGF0ZWQgQXByaWwgMywgMjAwNSkKK3QpIENyZWF0ZSBVSUQgbWFwcGluZyBmYWNpbGl0eSBzbyBzZXJ2ZXIgVUlEcyBjYW4gYmUgbWFwcGVkIG9uIGEgcGVyCittb3VudCBvciBhIHBlciBzZXJ2ZXIgYmFzaXMgdG8gY2xpZW50IFVJRHMgb3Igbm9ib2R5IGlmIG5vIG1hcHBpbmcKK2V4aXN0cy4gIFRoaXMgaXMgaGVscGZ1bCB3aGVuIFVuaXggZXh0ZW5zaW9ucyBhcmUgbmVnb3RpYXRlZCB0bworYWxsb3cgYmV0dGVyIHBlcm1pc3Npb24gY2hlY2tpbmcgd2hlbiBVSURzIGRpZmZlciBvbiB0aGUgc2VydmVyCithbmQgY2xpZW50LiAgQWRkIG5ldyBwcm90b2NvbCByZXF1ZXN0IHRvIHRoZSBDSUZTIHByb3RvY29sIAorc3RhbmRhcmQgZm9yIGFza2luZyB0aGUgc2VydmVyIGZvciB0aGUgY29ycmVzcG9uZGluZyBuYW1lIG9mIGEKK3BhcnRpY3VsYXIgdWlkLgorCitLTk9XTiBCVUdTICh1cGRhdGVkIEFwcmlsIDI5LCAyMDA1KQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBTZWUgaHR0cDovL2J1Z3ppbGxhLnNhbWJhLm9yZyAtIHNlYXJjaCBvbiBwcm9kdWN0ICJDaWZzVkZTIiBmb3IKIGN1cnJlbnQgYnVnIGxpc3QuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IGIwMDRmZWYuLjc0MWZmMGMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0yNDUxLDEyICsyNDUxLDE0IEBACiAJCW5hbWVfbGVuICs9IDI7CiAJfSBlbHNlIHsJLyogQkIgYWRkIGNoZWNrIGZvciBvdmVycnVuIG9mIFNNQiBidWYgQkIgKi8KIAkJbmFtZV9sZW4gPSBzdHJubGVuKHNlYXJjaE5hbWUsIFBBVEhfTUFYKTsKLQkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogLyogQkIgZml4IGhlcmUgYW5kIGluIHVuaWNvZGUgY2xhdXNlIGFib3ZlIGllCiAJCWlmKG5hbWVfbGVuID4gYnVmZmVyc2l6ZS1oZWFkZXIpCiAJCQlmcmVlIGJ1ZmZlciBleGl0OyBCQiAqLwogCQlzdHJuY3B5KHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLCBuYW1lX2xlbik7Ci0JCXBTTUItPkZpbGVOYW1lW25hbWVfbGVuXSA9IDA7IC8qIGp1c3QgaW4gY2FzZSAqLworCQlwU01CLT5GaWxlTmFtZVtuYW1lX2xlbl0gPSAnXFwnOworCQlwU01CLT5GaWxlTmFtZVtuYW1lX2xlbisxXSA9ICcqJzsKKwkJcFNNQi0+RmlsZU5hbWVbbmFtZV9sZW4rMl0gPSAwOworCQluYW1lX2xlbiArPSAzOwogCX0KIAogCXBhcmFtcyA9IDEyICsgbmFtZV9sZW4gLyogaW5jbHVkZXMgbnVsbCAqLyA7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggMDQwZWIyOC4uZWE1ODg4NiAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtNDU1LDEyICs0NTUsMTEgQEAKICAqCUBnb2FsOglwbGFjZSB0byBzdG9yZSB0aGUgcmVzdWx0LgogICoKICAqCU5vcm1hbGx5IHRoaXMgZnVuY3Rpb24gZmluZCB0aGUgcHJlZmVyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24sCi0gKglzdG9yZXMgaXQgaW4gKkBnb2FsIGFuZCByZXR1cm5zIHplcm8uIElmIHRoZSBicmFuY2ggaGFkIGJlZW4gY2hhbmdlZAotICoJdW5kZXIgdXMgd2UgcmV0dXJuIC1FQUdBSU4uCisgKglzdG9yZXMgaXQgaW4gKkBnb2FsIGFuZCByZXR1cm5zIHplcm8uCiAgKi8KIAotc3RhdGljIGludCBleHQzX2ZpbmRfZ29hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGJsb2NrLCBJbmRpcmVjdCBjaGFpbls0XSwKLQkJCSAgSW5kaXJlY3QgKnBhcnRpYWwsIHVuc2lnbmVkIGxvbmcgKmdvYWwpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHQzX2ZpbmRfZ29hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGJsb2NrLAorCQlJbmRpcmVjdCBjaGFpbls0XSwgSW5kaXJlY3QgKnBhcnRpYWwpCiB7CiAJc3RydWN0IGV4dDNfYmxvY2tfYWxsb2NfaW5mbyAqYmxvY2tfaSA9ICBFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm87CiAKQEAgLTQ3MCwxNSArNDY5LDEwIEBACiAJICovCiAJaWYgKGJsb2NrX2kgJiYgKGJsb2NrID09IGJsb2NrX2ktPmxhc3RfYWxsb2NfbG9naWNhbF9ibG9jayArIDEpCiAJCSYmIChibG9ja19pLT5sYXN0X2FsbG9jX3BoeXNpY2FsX2Jsb2NrICE9IDApKSB7Ci0JCSpnb2FsID0gYmxvY2tfaS0+bGFzdF9hbGxvY19waHlzaWNhbF9ibG9jayArIDE7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYmxvY2tfaS0+bGFzdF9hbGxvY19waHlzaWNhbF9ibG9jayArIDE7CiAJfQogCi0JaWYgKHZlcmlmeV9jaGFpbihjaGFpbiwgcGFydGlhbCkpIHsKLQkJKmdvYWwgPSBleHQzX2ZpbmRfbmVhcihpbm9kZSwgcGFydGlhbCk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gZXh0M19maW5kX25lYXIoaW5vZGUsIHBhcnRpYWwpOwogfQogCiAvKioKQEAgLTU4MiwxMiArNTc2LDkgQEAKICAqCUB3aGVyZTogbG9jYXRpb24gb2YgbWlzc2luZyBsaW5rCiAgKglAbnVtOiAgIG51bWJlciBvZiBibG9ja3Mgd2UgYXJlIGFkZGluZwogICoKLSAqCVRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgdGhhdCBjaGFpbiAodXAgdG8gdGhlIG1pc3NpbmcgbGluaykgaGFkIG5vdAotICoJY2hhbmdlZCwgZmlsbHMgdGhlIG1pc3NpbmcgbGluayBhbmQgZG9lcyBhbGwgaG91c2VrZWVwaW5nIG5lZWRlZCBpbgorICoJVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgbWlzc2luZyBsaW5rIGFuZCBkb2VzIGFsbCBob3VzZWtlZXBpbmcgbmVlZGVkIGluCiAgKglpbm9kZSAoLT5pX2Jsb2NrcywgZXRjLikuIEluIGNhc2Ugb2Ygc3VjY2VzcyB3ZSBlbmQgdXAgd2l0aCB0aGUgZnVsbAotICoJY2hhaW4gdG8gbmV3IGJsb2NrIGFuZCByZXR1cm4gMC4gT3RoZXJ3aXNlICg9PSBjaGFpbiBoYWQgYmVlbiBjaGFuZ2VkKQotICoJd2UgZnJlZSB0aGUgbmV3IGJsb2NrcyAoZm9yZ2V0dGluZyB0aGVpciBidWZmZXJfaGVhZHMsIGluZGVlZCkgYW5kCi0gKglyZXR1cm4gLUVBR0FJTi4KKyAqCWNoYWluIHRvIG5ldyBibG9jayBhbmQgcmV0dXJuIDAuCiAgKi8KIAogc3RhdGljIGludCBleHQzX3NwbGljZV9icmFuY2goaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBibG9jaywKQEAgLTYwOCwxMiArNTk5LDYgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dDsKIAl9Ci0JLyogVmVyaWZ5IHRoYXQgcGxhY2Ugd2UgYXJlIHNwbGljaW5nIHRvIGlzIHN0aWxsIHRoZXJlIGFuZCB2YWNhbnQgKi8KLQotCWlmICghdmVyaWZ5X2NoYWluKGNoYWluLCB3aGVyZS0xKSB8fCAqd2hlcmUtPnApCi0JCS8qIFdyaXRlcjogZW5kICovCi0JCWdvdG8gY2hhbmdlZDsKLQogCS8qIFRoYXQncyBpdCAqLwogCiAJKndoZXJlLT5wID0gd2hlcmUtPmtleTsKQEAgLTY1NywyNiArNjQyLDExIEBACiAJfQogCXJldHVybiBlcnI7CiAKLWNoYW5nZWQ6Ci0JLyoKLQkgKiBBS1BNOiBpZiB3aGVyZVtpXS5iaCBpc24ndCBwYXJ0IG9mIHRoZSBjdXJyZW50IHVwZGF0aW5nCi0JICogdHJhbnNhY3Rpb24gdGhlbiB3ZSBleHBsb2RlIG5hc3RpbHkuICBUZXN0IHRoaXMgY29kZSBwYXRoLgotCSAqLwotCWpiZF9kZWJ1ZygxLCAidGhlIGNoYWluIGNoYW5nZWQ6IHRyeSBhZ2FpblxuIik7Ci0JZXJyID0gLUVBR0FJTjsKLQogZXJyX291dDoKIAlmb3IgKGkgPSAxOyBpIDwgbnVtOyBpKyspIHsKIAkJQlVGRkVSX1RSQUNFKHdoZXJlW2ldLmJoLCAiY2FsbCBqb3VybmFsX2ZvcmdldCIpOwogCQlleHQzX2pvdXJuYWxfZm9yZ2V0KGhhbmRsZSwgd2hlcmVbaV0uYmgpOwogCX0KLQkvKiBGb3IgdGhlIG5vcm1hbCBjb2xsaXNpb24gY2xlYW51cCBjYXNlLCB3ZSBmcmVlIHVwIHRoZSBibG9ja3MuCi0JICogT24gZ2VudWluZSBmaWxlc3lzdGVtIGVycm9ycyB3ZSBkb24ndCBldmVuIHRoaW5rIGFib3V0IGRvaW5nCi0JICogdGhhdC4gKi8KLQlpZiAoZXJyID09IC1FQUdBSU4pCi0JCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJCWV4dDNfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgCi0JCQkJCSBsZTMyX3RvX2NwdSh3aGVyZVtpXS5rZXkpLCAxKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MDgsNyArNjc4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGdvYWw7CiAJaW50IGxlZnQ7CiAJaW50IGJvdW5kYXJ5ID0gMDsKLQlpbnQgZGVwdGggPSBleHQzX2Jsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cywgJmJvdW5kYXJ5KTsKKwljb25zdCBpbnQgZGVwdGggPSBleHQzX2Jsb2NrX3RvX3BhdGgoaW5vZGUsIGlibG9jaywgb2Zmc2V0cywgJmJvdW5kYXJ5KTsKIAlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CiAKIAlKX0FTU0VSVChoYW5kbGUgIT0gTlVMTCB8fCBjcmVhdGUgPT0gMCk7CkBAIC03MTYsNTQgKzY4Niw1NSBAQAogCWlmIChkZXB0aCA9PSAwKQogCQlnb3RvIG91dDsKIAotcmVyZWFkOgogCXBhcnRpYWwgPSBleHQzX2dldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgJmVycik7CiAKIAkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCiAJaWYgKCFwYXJ0aWFsKSB7CiAJCWNsZWFyX2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKLWdvdF9pdDoKLQkJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIGxlMzJfdG9fY3B1KGNoYWluW2RlcHRoLTFdLmtleSkpOwotCQlpZiAoYm91bmRhcnkpCi0JCQlzZXRfYnVmZmVyX2JvdW5kYXJ5KGJoX3Jlc3VsdCk7Ci0JCS8qIENsZWFuIHVwIGFuZCBleGl0ICovCi0JCXBhcnRpYWwgPSBjaGFpbitkZXB0aC0xOyAvKiB0aGUgd2hvbGUgY2hhaW4gKi8KLQkJZ290byBjbGVhbnVwOworCQlnb3RvIGdvdF9pdDsKIAl9CiAKIAkvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovCi0JaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pIHsKLWNsZWFudXA6CisJaWYgKCFjcmVhdGUgfHwgZXJyID09IC1FSU8pCisJCWdvdG8gY2xlYW51cDsKKworCWRvd24oJmVpLT50cnVuY2F0ZV9zZW0pOworCisJLyoKKwkgKiBJZiB0aGUgaW5kaXJlY3QgYmxvY2sgaXMgbWlzc2luZyB3aGlsZSB3ZSBhcmUgcmVhZGluZworCSAqIHRoZSBjaGFpbihleHQzX2dldF9icmFuY2goKSByZXR1cm5zIC1FQUdBSU4gZXJyKSwgb3IKKwkgKiBpZiB0aGUgY2hhaW4gaGFzIGJlZW4gY2hhbmdlZCBhZnRlciB3ZSBncmFiIHRoZSBzZW1hcGhvcmUsCisJICogKGVpdGhlciBiZWNhdXNlIGFub3RoZXIgcHJvY2VzcyB0cnVuY2F0ZWQgdGhpcyBicmFuY2gsIG9yCisJICogYW5vdGhlciBnZXRfYmxvY2sgYWxsb2NhdGVkIHRoaXMgYnJhbmNoKSByZS1ncmFiIHRoZSBjaGFpbiB0byBzZWUgaWYKKwkgKiB0aGUgcmVxdWVzdCBibG9jayBoYXMgYmVlbiBhbGxvY2F0ZWQgb3Igbm90LgorCSAqCisJICogU2luY2Ugd2UgYWxyZWFkeSBibG9jayB0aGUgdHJ1bmNhdGUvb3RoZXIgZ2V0X2Jsb2NrCisJICogYXQgdGhpcyBwb2ludCwgd2Ugd2lsbCBoYXZlIHRoZSBjdXJyZW50IGNvcHkgb2YgdGhlIGNoYWluIHdoZW4gd2UKKwkgKiBzcGxpY2UgdGhlIGJyYW5jaCBpbnRvIHRoZSB0cmVlLgorCSAqLworCWlmIChlcnIgPT0gLUVBR0FJTiB8fCAhdmVyaWZ5X2NoYWluKGNoYWluLCBwYXJ0aWFsKSkgewogCQl3aGlsZSAocGFydGlhbCA+IGNoYWluKSB7Ci0JCQlCVUZGRVJfVFJBQ0UocGFydGlhbC0+YmgsICJjYWxsIGJyZWxzZSIpOwogCQkJYnJlbHNlKHBhcnRpYWwtPmJoKTsKIAkJCXBhcnRpYWwtLTsKIAkJfQotCQlCVUZGRVJfVFJBQ0UoYmhfcmVzdWx0LCAicmV0dXJuZWQiKTsKLW91dDoKLQkJcmV0dXJuIGVycjsKKwkJcGFydGlhbCA9IGV4dDNfZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCAmZXJyKTsKKwkJaWYgKCFwYXJ0aWFsKSB7CisJCQl1cCgmZWktPnRydW5jYXRlX3NlbSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCWNsZWFyX2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKKwkJCWdvdG8gZ290X2l0OworCQl9CiAJfQogCiAJLyoKLQkgKiBJbmRpcmVjdCBibG9jayBtaWdodCBiZSByZW1vdmVkIGJ5IHRydW5jYXRlIHdoaWxlIHdlIHdlcmUKLQkgKiByZWFkaW5nIGl0LiBIYW5kbGluZyBvZiB0aGF0IGNhc2UgKGZvcmdldCB3aGF0IHdlJ3ZlIGdvdCBhbmQKLQkgKiByZXJlYWQpIGlzIHRha2VuIG91dCBvZiB0aGUgbWFpbiBwYXRoLgotCSAqLwotCWlmIChlcnIgPT0gLUVBR0FJTikKLQkJZ290byBjaGFuZ2VkOwotCi0JZ29hbCA9IDA7Ci0JZG93bigmZWktPnRydW5jYXRlX3NlbSk7Ci0KLQkvKiBsYXp5IGluaXRpYWxpemUgdGhlIGJsb2NrIGFsbG9jYXRpb24gaW5mbyBoZXJlIGlmIG5lY2Vzc2FyeSAqLwotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmICghZWktPmlfYmxvY2tfYWxsb2NfaW5mbykpIHsKKwkgKiBPa2F5LCB3ZSBuZWVkIHRvIGRvIGJsb2NrIGFsbG9jYXRpb24uICBMYXppbHkgaW5pdGlhbGl6ZSB0aGUgYmxvY2sKKwkgKiBhbGxvY2F0aW9uIGluZm8gaGVyZSBpZiBuZWNlc3NhcnkKKwkqLworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmICghZWktPmlfYmxvY2tfYWxsb2NfaW5mbykpCiAJCWV4dDNfaW5pdF9ibG9ja19hbGxvY19pbmZvKGlub2RlKTsKLQl9CiAKLQlpZiAoZXh0M19maW5kX2dvYWwoaW5vZGUsIGlibG9jaywgY2hhaW4sIHBhcnRpYWwsICZnb2FsKSA8IDApIHsKLQkJdXAoJmVpLT50cnVuY2F0ZV9zZW0pOwotCQlnb3RvIGNoYW5nZWQ7Ci0JfQorCWdvYWwgPSBleHQzX2ZpbmRfZ29hbChpbm9kZSwgaWJsb2NrLCBjaGFpbiwgcGFydGlhbCk7CiAKIAlsZWZ0ID0gKGNoYWluICsgZGVwdGgpIC0gcGFydGlhbDsKIApAQCAtNzcxLDM4ICs3NDIsNDUgQEAKIAkgKiBCbG9jayBvdXQgZXh0M190cnVuY2F0ZSB3aGlsZSB3ZSBhbHRlciB0aGUgdHJlZQogCSAqLwogCWVyciA9IGV4dDNfYWxsb2NfYnJhbmNoKGhhbmRsZSwgaW5vZGUsIGxlZnQsIGdvYWwsCi0JCQkJCW9mZnNldHMrKHBhcnRpYWwtY2hhaW4pLCBwYXJ0aWFsKTsKKwkJCQlvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwogCi0JLyogVGhlIGV4dDNfc3BsaWNlX2JyYW5jaCBjYWxsIHdpbGwgZnJlZSBhbmQgZm9yZ2V0IGFueSBidWZmZXJzCisJLyoKKwkgKiBUaGUgZXh0M19zcGxpY2VfYnJhbmNoIGNhbGwgd2lsbCBmcmVlIGFuZCBmb3JnZXQgYW55IGJ1ZmZlcnMKIAkgKiBvbiB0aGUgbmV3IGNoYWluIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSwgYnV0IHRoYXQgcmlza3MgdXNpbmcKIAkgKiB1cCB0cmFuc2FjdGlvbiBjcmVkaXRzLCBlc3BlY2lhbGx5IGZvciBiaXRtYXBzIHdoZXJlIHRoZQogCSAqIGNyZWRpdHMgY2Fubm90IGJlIHJldHVybmVkLiAgQ2FuIHdlIGhhbmRsZSB0aGlzIHNvbWVob3c/ICBXZQotCSAqIG1heSBuZWVkIHRvIHJldHVybiAtRUFHQUlOIHVwd2FyZHMgaW4gdGhlIHdvcnN0IGNhc2UuICAtLXNjdCAqLworCSAqIG1heSBuZWVkIHRvIHJldHVybiAtRUFHQUlOIHVwd2FyZHMgaW4gdGhlIHdvcnN0IGNhc2UuICAtLXNjdAorCSAqLwogCWlmICghZXJyKQogCQllcnIgPSBleHQzX3NwbGljZV9icmFuY2goaGFuZGxlLCBpbm9kZSwgaWJsb2NrLCBjaGFpbiwKIAkJCQkJIHBhcnRpYWwsIGxlZnQpOwotCS8qIGlfZGlza3NpemUgZ3Jvd2luZyBpcyBwcm90ZWN0ZWQgYnkgdHJ1bmNhdGVfc2VtCi0JICogZG9uJ3QgZm9yZ2V0IHRvIHByb3RlY3QgaXQgaWYgeW91J3JlIGFib3V0IHRvIGltcGxlbWVudAotCSAqIGNvbmN1cnJlbnQgZXh0M19nZXRfYmxvY2soKSAtYnp6eiAqLworCS8qCisJICogaV9kaXNrc2l6ZSBncm93aW5nIGlzIHByb3RlY3RlZCBieSB0cnVuY2F0ZV9zZW0uICBEb24ndCBmb3JnZXQgdG8KKwkgKiBwcm90ZWN0IGl0IGlmIHlvdSdyZSBhYm91dCB0byBpbXBsZW1lbnQgY29uY3VycmVudAorCSAqIGV4dDNfZ2V0X2Jsb2NrKCkgLWJ6enoKKwkqLwogCWlmICghZXJyICYmIGV4dGVuZF9kaXNrc2l6ZSAmJiBpbm9kZS0+aV9zaXplID4gZWktPmlfZGlza3NpemUpCiAJCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKIAl1cCgmZWktPnRydW5jYXRlX3NlbSk7Ci0JaWYgKGVyciA9PSAtRUFHQUlOKQotCQlnb3RvIGNoYW5nZWQ7CiAJaWYgKGVycikKIAkJZ290byBjbGVhbnVwOwogCiAJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKLQlnb3RvIGdvdF9pdDsKLQotY2hhbmdlZDoKK2dvdF9pdDoKKwltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgbGUzMl90b19jcHUoY2hhaW5bZGVwdGgtMV0ua2V5KSk7CisJaWYgKGJvdW5kYXJ5KQorCQlzZXRfYnVmZmVyX2JvdW5kYXJ5KGJoX3Jlc3VsdCk7CisJLyogQ2xlYW4gdXAgYW5kIGV4aXQgKi8KKwlwYXJ0aWFsID0gY2hhaW4gKyBkZXB0aCAtIDE7CS8qIHRoZSB3aG9sZSBjaGFpbiAqLworY2xlYW51cDoKIAl3aGlsZSAocGFydGlhbCA+IGNoYWluKSB7Ci0JCWpiZF9kZWJ1ZygxLCAiYnVmZmVyIGNoYWluIGNoYW5nZWQsIHJldHJ5aW5nXG4iKTsKLQkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiYnJlbHNpbmciKTsKKwkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiY2FsbCBicmVsc2UiKTsKIAkJYnJlbHNlKHBhcnRpYWwtPmJoKTsKIAkJcGFydGlhbC0tOwogCX0KLQlnb3RvIHJlcmVhZDsKKwlCVUZGRVJfVFJBQ0UoYmhfcmVzdWx0LCAicmV0dXJuZWQiKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGV4dDNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IDNlN2FiMTYuLjI4NmE5ZjggMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vcG9sbC5oPgogI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CkBAIC0zMDgsNyArMzA5LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBGX1NFVFNJRzoKIAkJLyogYXJnID09IDAgcmVzdG9yZXMgZGVmYXVsdCBiZWhhdmlvdXIuICovCi0JCWlmIChhcmcgPCAwIHx8IGFyZyA+IF9OU0lHKSB7CisJCWlmICghdmFsaWRfc2lnbmFsKGFyZykpIHsKIAkJCWJyZWFrOwogCQl9CiAJCWVyciA9IDA7CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGQ2ZWZiMzYuLjhlMDUwZmEgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC01MTIsNyArNTEyLDggQEAKIH0KIAogLyoqCi0gKiBzeW5jX2lub2RlcworICogc3luY19pbm9kZXMgLSB3cml0ZXMgYWxsIGlub2RlcyB0byBkaXNrCisgKiBAd2FpdDogd2FpdCBmb3IgY29tcGxldGlvbgogICoKICAqIHN5bmNfaW5vZGVzKCkgZ29lcyB0aHJvdWdoIGVhY2ggc3VwZXIgYmxvY2sncyBkaXJ0eSBpbm9kZSBsaXN0LCB3cml0ZXMgdGhlCiAgKiBpbm9kZXMgb3V0LCB3YWl0cyBvbiB0aGUgd3JpdGVvdXQgYW5kIHB1dHMgdGhlIGlub2RlcyBiYWNrIG9uIHRoZSBub3JtYWwKQEAgLTYwNCw2ICs2MDUsNyBAQAogLyoqCiAgKiBnZW5lcmljX29zeW5jX2lub2RlIC0gZmx1c2ggYWxsIGRpcnR5IGRhdGEgZm9yIGEgZ2l2ZW4gaW5vZGUgdG8gZGlzawogICogQGlub2RlOiBpbm9kZSB0byB3cml0ZQorICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQKICAqIEB3aGF0OiAgd2hhdCB0byB3cml0ZSBhbmQgd2FpdCB1cG9uCiAgKgogICogVGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGZpbGVfd3JpdGUgZnVuY3Rpb25zIGZvciBmaWxlcyB3aGljaCBoYXZlIHRoZQpkaWZmIC0tZ2l0IGEvZnMvaGZzL21kYi5jIGIvZnMvaGZzL21kYi5jCmluZGV4IDRlZmI2NDAuLjIxN2UzMmYgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9tZGIuYworKysgYi9mcy9oZnMvbWRiLmMKQEAgLTMzMyw2ICszMzMsOCBAQAogICogUmVsZWFzZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW4tY29yZSBNREIuICAqLwogdm9pZCBoZnNfbWRiX3B1dChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeworCWlmICghSEZTX1NCKHNiKSkKKwkJcmV0dXJuOwogCS8qIGZyZWUgdGhlIEItdHJlZXMgKi8KIAloZnNfYnRyZWVfY2xvc2UoSEZTX1NCKHNiKS0+ZXh0X3RyZWUpOwogCWhmc19idHJlZV9jbG9zZShIRlNfU0Ioc2IpLT5jYXRfdHJlZSk7CkBAIC0zNDAsNCArMzQyLDcgQEAKIAkvKiBmcmVlIHRoZSBidWZmZXJzIGhvbGRpbmcgdGhlIHByaW1hcnkgYW5kIGFsdGVybmF0ZSBNREJzICovCiAJYnJlbHNlKEhGU19TQihzYiktPm1kYl9iaCk7CiAJYnJlbHNlKEhGU19TQihzYiktPmFsdF9tZGJfYmgpOworCisJa2ZyZWUoSEZTX1NCKHNiKSk7CisJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IDFlMmMxOTMuLmFiNzgzZjYgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlyZXMgPSAtRUlOVkFMOwogCWlmICghcGFyc2Vfb3B0aW9ucygoY2hhciAqKWRhdGEsIHNiaSkpIHsKIAkJaGZzX3dhcm4oImhmc19mczogdW5hYmxlIHRvIHBhcnNlIG1vdW50IG9wdGlvbnMuXG4iKTsKLQkJZ290byBiYWlsMzsKKwkJZ290byBiYWlsOwogCX0KIAogCXNiLT5zX29wID0gJmhmc19zdXBlcl9vcGVyYXRpb25zOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJCQloZnNfd2FybigiVkZTOiBDYW4ndCBmaW5kIGEgSEZTIGZpbGVzeXN0ZW0gb24gZGV2ICVzLlxuIiwKIAkJCQloZnNfbWRiX25hbWUoc2IpKTsKIAkJcmVzID0gLUVJTlZBTDsKLQkJZ290byBiYWlsMjsKKwkJZ290byBiYWlsOwogCX0KIAogCS8qIHRyeSB0byBnZXQgdGhlIHJvb3QgaW5vZGUgKi8KQEAgLTM0MCwxMCArMzQwLDggQEAKIAlpcHV0KHJvb3RfaW5vZGUpOwogYmFpbF9ub19yb290OgogCWhmc193YXJuKCJoZnNfZnM6IGdldCByb290IGlub2RlIGZhaWxlZC5cbiIpOworYmFpbDoKIAloZnNfbWRiX3B1dChzYik7Ci1iYWlsMjoKLWJhaWwzOgotCWtmcmVlKHNiaSk7CiAJcmV0dXJuIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDVmODA0NDYuLmQ1NWFkNjcgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTIwOCw3ICsyMDgsOSBAQAogc3RhdGljIHZvaWQgaGZzcGx1c19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlkcHJpbnQoREJHX1NVUEVSLCAiaGZzcGx1c19wdXRfc3VwZXJcbiIpOwotCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCWlmICghc2ItPnNfZnNfaW5mbykKKwkJcmV0dXJuOworCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSAmJiBIRlNQTFVTX1NCKHNiKS5zX3ZoZHIpIHsKIAkJc3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBIRlNQTFVTX1NCKHNiKS5zX3ZoZHI7CiAKIAkJdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOwpAQCAtMjI2LDYgKzIyOCw4IEBACiAJYnJlbHNlKEhGU1BMVVNfU0Ioc2IpLnNfdmhiaCk7CiAJaWYgKEhGU1BMVVNfU0Ioc2IpLm5scykKIAkJdW5sb2FkX25scyhIRlNQTFVTX1NCKHNiKS5ubHMpOworCWtmcmVlKHNiLT5zX2ZzX2luZm8pOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGhmc3BsdXNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrc3RhdGZzICpidWYpCmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IGE4OGFkMjkuLmU2YzYzZDkgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCkBAIC01MjEsNyArNTIxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhvc3Rmc19hb3BzID0gewogCS53cml0ZXBhZ2UgCT0gaG9zdGZzX3dyaXRlcGFnZSwKIAkucmVhZHBhZ2UJPSBob3N0ZnNfcmVhZHBhZ2UsCi0vKiAJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsICovCisJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCiAJLnByZXBhcmVfd3JpdGUJPSBob3N0ZnNfcHJlcGFyZV93cml0ZSwKIAkuY29tbWl0X3dyaXRlCT0gaG9zdGZzX2NvbW1pdF93cml0ZQogfTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2ZpbGUuYyBiL2ZzL2pmZnMyL2ZpbGUuYwppbmRleCAwYzYwN2MxLi43NzFhNTU0IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9maWxlLmMKKysrIGIvZnMvamZmczIvZmlsZS5jCkBAIC03OSw4ICs3OSw3IEBACiAKIAlEMihwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZG9fcmVhZHBhZ2Vfbm9sb2NrKCk6IGlubyAjJWx1LCBwYWdlIGF0IG9mZnNldCAweCVseFxuIiwgaW5vZGUtPmlfaW5vLCBwZy0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkpOwogCi0JaWYgKCFQYWdlTG9ja2VkKHBnKSkKLSAgICAgICAgICAgICAgICBQQUdFX0JVRyhwZyk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBnKSk7CiAKIAlwZ19idWYgPSBrbWFwKHBnKTsKIAkvKiBGSVhNRTogQ2FuIGttYXAgZmFpbD8gKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9pbm9kZS5jIGIvZnMvamZzL2lub2RlLmMKaW5kZXggN2JjOTA2Ni4uMjRhNjg5MSAxMDA2NDQKLS0tIGEvZnMvamZzL2lub2RlLmMKKysrIGIvZnMvamZzL2lub2RlLmMKQEAgLTE3NSwzMSArMTc1LDIyIEBACiB7CiAJczY0IGxibG9jazY0ID0gbGJsb2NrOwogCWludCByYyA9IDA7Ci0JaW50IHRha2VfbG9ja3M7CiAJeGFkX3QgeGFkOwogCXM2NCB4YWRkcjsKIAlpbnQgeGZsYWc7Ci0JczMyIHhsZW47Ci0KLQkvKgotCSAqIElmIHRoaXMgaXMgYSBzcGVjaWFsIGlub2RlIChpbWFwLCBkbWFwKQotCSAqIHRoZSBsb2NrIHNob3VsZCBhbHJlYWR5IGJlIHRha2VuCi0JICovCi0JdGFrZV9sb2NrcyA9IChKRlNfSVAoaXApLT5maWxlc2V0ICE9IEFHR1JFR0FURV9JKTsKKwlzMzIgeGxlbiA9IG1heF9ibG9ja3M7CiAKIAkvKgogCSAqIFRha2UgYXBwcm9wcmlhdGUgbG9jayBvbiBpbm9kZQogCSAqLwotCWlmICh0YWtlX2xvY2tzKSB7Ci0JCWlmIChjcmVhdGUpCi0JCQlJV1JJVEVfTE9DSyhpcCk7Ci0JCWVsc2UKLQkJCUlSRUFEX0xPQ0soaXApOwotCX0KKwlpZiAoY3JlYXRlKQorCQlJV1JJVEVfTE9DSyhpcCk7CisJZWxzZQorCQlJUkVBRF9MT0NLKGlwKTsKIAogCWlmICgoKGxibG9jazY0IDw8IGlwLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGlwLT5pX3NpemUpICYmCi0JICAgICh4dExvb2t1cChpcCwgbGJsb2NrNjQsIG1heF9ibG9ja3MsICZ4ZmxhZywgJnhhZGRyLCAmeGxlbiwgMCkKLQkgICAgID09IDApICYmIHhsZW4pIHsKKwkgICAgKCF4dExvb2t1cChpcCwgbGJsb2NrNjQsIG1heF9ibG9ja3MsICZ4ZmxhZywgJnhhZGRyLCAmeGxlbiwgMCkpICYmCisJICAgIHhhZGRyKSB7CiAJCWlmICh4ZmxhZyAmIFhBRF9OT1RSRUNPUkRFRCkgewogCQkJaWYgKCFjcmVhdGUpCiAJCQkJLyoKQEAgLTIzOCw3ICsyMjksNyBAQAogI2lmZGVmIF9KRlNfNEsKIAlpZiAoKHJjID0gZXh0SGludChpcCwgbGJsb2NrNjQgPDwgaXAtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMsICZ4YWQpKSkKIAkJZ290byB1bmxvY2s7Ci0JcmMgPSBleHRBbGxvYyhpcCwgbWF4X2Jsb2NrcywgbGJsb2NrNjQsICZ4YWQsIEZBTFNFKTsKKwlyYyA9IGV4dEFsbG9jKGlwLCB4bGVuLCBsYmxvY2s2NCwgJnhhZCwgRkFMU0UpOwogCWlmIChyYykKIAkJZ290byB1bmxvY2s7CiAKQEAgLTI1OCwxMiArMjQ5LDEwIEBACiAJLyoKIAkgKiBSZWxlYXNlIGxvY2sgb24gaW5vZGUKIAkgKi8KLQlpZiAodGFrZV9sb2NrcykgewotCQlpZiAoY3JlYXRlKQotCQkJSVdSSVRFX1VOTE9DSyhpcCk7Ci0JCWVsc2UKLQkJCUlSRUFEX1VOTE9DSyhpcCk7Ci0JfQorCWlmIChjcmVhdGUpCisJCUlXUklURV9VTkxPQ0soaXApOworCWVsc2UKKwkJSVJFQURfVU5MT0NLKGlwKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmMKaW5kZXggZDg2ZTQ2Ny4uNjkwMDdmZCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kbWFwLmMKKysrIGIvZnMvamZzL2pmc19kbWFwLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCXN0cnVjdCBtZXRhcGFnZSAqbXA7CiAJc3RydWN0IGpmc19sb2cgKmxvZzsKIAlpbnQgbHNuLCBkaWZmdCwgZGlmZnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHRoZSBibG9ja3MgYmV0dGVyIGJlIHdpdGhpbiB0aGUgbWFwc2l6ZS4gKi8KIAlpZiAoYmxrbm8gKyBuYmxvY2tzID4gYm1wLT5kYl9tYXBzaXplKSB7CkBAIC01MDQsNiArNTA1LDcgQEAKIAkJCQkJICAgMCk7CiAJCQlpZiAobXAgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVJTzsKKwkJCW1ldGFwYWdlX3dhaXRfZm9yX2lvKG1wKTsKIAkJfQogCQlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0+ZGF0YTsKIApAQCAtNTc4LDM0ICs1ODAsMzIgQEAKIAkJaWYgKG1wLT5sc24gIT0gMCkgewogCQkJLyogaW5oZXJpdCBvbGRlci9zbWFsbGVyIGxzbiAqLwogCQkJbG9nZGlmZihkaWZmcCwgbXAtPmxzbiwgbG9nKTsKKwkJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAkJCWlmIChkaWZmdCA8IGRpZmZwKSB7CiAJCQkJbXAtPmxzbiA9IGxzbjsKIAogCQkJCS8qIG1vdmUgYnAgYWZ0ZXIgdGJsb2NrIGluIGxvZ3N5bmMgbGlzdCAqLwotCQkJCUxPR1NZTkNfTE9DSyhsb2cpOwogCQkJCWxpc3RfbW92ZSgmbXAtPnN5bmNsaXN0LCAmdGJsay0+c3luY2xpc3QpOwotCQkJCUxPR1NZTkNfVU5MT0NLKGxvZyk7CiAJCQl9CiAKIAkJCS8qIGluaGVyaXQgeW91bmdlci9sYXJnZXIgY2xzbiAqLwotCQkJTE9HU1lOQ19MT0NLKGxvZyk7CiAJCQlsb2dkaWZmKGRpZmZ0LCB0YmxrLT5jbHNuLCBsb2cpOwogCQkJbG9nZGlmZihkaWZmcCwgbXAtPmNsc24sIGxvZyk7CiAJCQlpZiAoZGlmZnQgPiBkaWZmcCkKIAkJCQltcC0+Y2xzbiA9IHRibGstPmNsc247Ci0JCQlMT0dTWU5DX1VOTE9DSyhsb2cpOworCQkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJCX0gZWxzZSB7CiAJCQltcC0+bG9nID0gbG9nOwogCQkJbXAtPmxzbiA9IGxzbjsKIAogCQkJLyogaW5zZXJ0IGJwIGFmdGVyIHRibG9jayBpbiBsb2dzeW5jIGxpc3QgKi8KLQkJCUxPR1NZTkNfTE9DSyhsb2cpOworCQkJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCiAJCQlsb2ctPmNvdW50Kys7CiAJCQlsaXN0X2FkZCgmbXAtPnN5bmNsaXN0LCAmdGJsay0+c3luY2xpc3QpOwogCiAJCQltcC0+Y2xzbiA9IHRibGstPmNsc247Ci0JCQlMT0dTWU5DX1VOTE9DSyhsb2cpOworCQkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZHRyZWUuYyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwppbmRleCBlMzU3ODkwLi5hYzQxZjcyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2R0cmVlLmMKKysrIGIvZnMvamZzL2pmc19kdHJlZS5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAlzMzIgeGxlbjsKIAogCXJjID0geHRMb29rdXAoaW5vZGUsIGJsa25vLCAxLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDEpOwotCWlmIChyYyB8fCAoeGxlbiA9PSAwKSkKKwlpZiAocmMgfHwgKHhhZGRyID09IDApKQogCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiByZWFkX21ldGFwYWdlKGlub2RlLCB4YWRkciwgUFNJWkUsIDEpOwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJczMyIHhsZW47CiAKIAlyYyA9IHh0TG9va3VwKGlub2RlLCBibGtubywgMSwgJnhmbGFnLCAmeGFkZHIsICZ4bGVuLCAxKTsKLQlpZiAocmMgfHwgKHhsZW4gPT0gMCkpCisJaWYgKHJjIHx8ICh4YWRkciA9PSAwKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gZ2V0X21ldGFwYWdlKGlub2RlLCB4YWRkciwgUFNJWkUsIDEpOwpAQCAtMzE4MSw3ICszMTgxLDcgQEAKIAkJCWQgPSAoc3RydWN0IGxkdGVudHJ5ICopICYgcC0+c2xvdFtzdGJsW2ldXTsKIAogCQkJaWYgKCgobG9uZykgamZzX2RpcmVudCArIGQtPm5hbWxlbiArIDEpID4KLQkJCSAgICAoZGlyZW50X2J1ZiArIFBTSVpFKSkgeworCQkJICAgIChkaXJlbnRfYnVmICsgUEFHRV9TSVpFKSkgewogCQkJCS8qIERCQ1MgY29kZXBhZ2VzIGNvdWxkIG92ZXJydW4gZGlyZW50X2J1ZiAqLwogCQkJCWluZGV4ID0gaTsKIAkJCQlvdmVyZmxvdyA9IDE7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2ltYXAuYyBiL2ZzL2pmcy9qZnNfaW1hcC5jCmluZGV4IDc4MzgzMTMuLjdhY2ZmMmMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfaW1hcC5jCkBAIC01MDIsNyArNTAyLDcgQEAKIAogCX0KIAotCWlwLT5pX21hcHBpbmctPmFfb3BzID0gJmpmc19hb3BzOworCWlwLT5pX21hcHBpbmctPmFfb3BzID0gJmpmc19tZXRhcGFnZV9hb3BzOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGlwLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIAogCS8qIEFsbG9jYXRpb25zIHRvIG1ldGFkYXRhIGlub2RlcyBzaG91bGQgbm90IGFmZmVjdCBxdW90YXMgKi8KQEAgLTI1NzMsOSArMjU3MywxOCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvKiBhc3NpZ24gYSBidWZmZXIgZm9yIHRoZSBwYWdlICovCi0JCW1wID0gZ2V0X21ldGFwYWdlKGlwaW1hcCwgeGFkZHIsIFBTSVpFLCAxKTsKLQkJaWYgKCFtcCkgeworCQkvKgorCQkgKiBzdGFydCB0cmFuc2FjdGlvbiBvZiB1cGRhdGUgb2YgdGhlIGlub2RlIG1hcAorCQkgKiBhZGRyZXNzaW5nIHN0cnVjdHVyZSBwb2ludGluZyB0byB0aGUgbmV3IGlhZyBwYWdlOworCQkgKi8KKwkJdGlkID0gdHhCZWdpbihzYiwgQ09NTUlUX0ZPUkNFKTsKKwkJZG93bigmSkZTX0lQKGlwaW1hcCktPmNvbW1pdF9zZW0pOworCisJCS8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwIGFkZHJlc3Npbmcgc3RydWN0dXJlIHRvIHBvaW50IHRvIGl0ICovCisJCWlmICgocmMgPQorCQkgICAgIHh0SW5zZXJ0KHRpZCwgaXBpbWFwLCAwLCBibGtubywgeGxlbiwgJnhhZGRyLCAwKSkpIHsKKwkJCXR4RW5kKHRpZCk7CisJCQl1cCgmSkZTX0lQKGlwaW1hcCktPmNvbW1pdF9zZW0pOwogCQkJLyogRnJlZSB0aGUgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhlIGlhZyBzaW5jZSBpdCB3YXMKIAkJCSAqIG5vdCBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGlub2RlIG1hcAogCQkJICovCkBAIC0yNTg0LDYgKzI1OTMsMjkgQEAKIAkJCS8qIHJlbGVhc2UgdGhlIGlub2RlIG1hcCBsb2NrICovCiAJCQlJV1JJVEVfVU5MT0NLKGlwaW1hcCk7CiAKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogdXBkYXRlIHRoZSBpbm9kZSBtYXAncyBpbm9kZSB0byByZWZsZWN0IHRoZSBleHRlbnNpb24gKi8KKwkJaXBpbWFwLT5pX3NpemUgKz0gUFNJWkU7CisJCWlub2RlX2FkZF9ieXRlcyhpcGltYXAsIFBTSVpFKTsKKworCQkvKiBhc3NpZ24gYSBidWZmZXIgZm9yIHRoZSBwYWdlICovCisJCW1wID0gZ2V0X21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTsKKwkJaWYgKCFtcCkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdmVyeSB1bmxpa2VseSBzaW5jZSB3ZSBqdXN0IGNyZWF0ZWQgdGhlCisJCQkgKiBleHRlbnQsIGJ1dCBsZXQncyB0cnkgdG8gaGFuZGxlIGl0IGNvcnJlY3RseQorCQkJICovCisJCQl4dFRydW5jYXRlKHRpZCwgaXBpbWFwLCBpcGltYXAtPmlfc2l6ZSAtIFBTSVpFLAorCQkJCSAgIENPTU1JVF9QV01BUCk7CisKKwkJCXR4QWJvcnQodGlkLCAwKTsKKwkJCXR4RW5kKHRpZCk7CisKKwkJCS8qIHJlbGVhc2UgdGhlIGlub2RlIG1hcCBsb2NrICovCisJCQlJV1JJVEVfVU5MT0NLKGlwaW1hcCk7CisKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yNjA1LDQxICsyNjM3LDExIEBACiAJCQlpYWdwLT5pbm9zbWFwW2ldID0gY3B1X3RvX2xlMzIoT05FUyk7CiAKIAkJLyoKLQkJICogSW52YWxpZGF0ZSB0aGUgcGFnZSBhZnRlciB3cml0aW5nIGFuZCBzeW5jaW5nIGl0LgotCQkgKiBBZnRlciBpdCdzIGluaXRpYWxpemVkLCB3ZSBhY2Nlc3MgaXQgaW4gYSBkaWZmZXJlbnQKLQkJICogYWRkcmVzcyBzcGFjZQorCQkgKiBXcml0ZSBhbmQgc3luYyB0aGUgbWV0YXBhZ2UKIAkJICovCi0JCXNldF9iaXQoTUVUQV9kaXNjYXJkLCAmbXAtPmZsYWcpOwogCQlmbHVzaF9tZXRhcGFnZShtcCk7CiAKIAkJLyoKLQkJICogc3RhcnQgdHlyYW5zYWN0aW9uIG9mIHVwZGF0ZSBvZiB0aGUgaW5vZGUgbWFwCi0JCSAqIGFkZHJlc3Npbmcgc3RydWN0dXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgaWFnIHBhZ2U7Ci0JCSAqLwotCQl0aWQgPSB0eEJlZ2luKHNiLCBDT01NSVRfRk9SQ0UpOwotCQlkb3duKCZKRlNfSVAoaXBpbWFwKS0+Y29tbWl0X3NlbSk7Ci0KLQkJLyogdXBkYXRlIHRoZSBpbm9kZSBtYXAgYWRkcmVzc2luZyBzdHJ1Y3R1cmUgdG8gcG9pbnQgdG8gaXQgKi8KLQkJaWYgKChyYyA9Ci0JCSAgICAgeHRJbnNlcnQodGlkLCBpcGltYXAsIDAsIGJsa25vLCB4bGVuLCAmeGFkZHIsIDApKSkgewotCQkJdHhFbmQodGlkKTsKLQkJCXVwKCZKRlNfSVAoaXBpbWFwKS0+Y29tbWl0X3NlbSk7Ci0JCQkvKiBGcmVlIHRoZSBibG9ja3MgYWxsb2NhdGVkIGZvciB0aGUgaWFnIHNpbmNlIGl0IHdhcwotCQkJICogbm90IHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgaW5vZGUgbWFwCi0JCQkgKi8KLQkJCWRiRnJlZShpcGltYXAsIHhhZGRyLCAoczY0KSB4bGVuKTsKLQotCQkJLyogcmVsZWFzZSB0aGUgaW5vZGUgbWFwIGxvY2sgKi8KLQkJCUlXUklURV9VTkxPQ0soaXBpbWFwKTsKLQotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiB1cGRhdGUgdGhlIGlub2RlIG1hcCdzIGlub2RlIHRvIHJlZmxlY3QgdGhlIGV4dGVuc2lvbiAqLwotCQlpcGltYXAtPmlfc2l6ZSArPSBQU0laRTsKLQkJaW5vZGVfYWRkX2J5dGVzKGlwaW1hcCwgUFNJWkUpOwotCi0JCS8qCiAJCSAqIHR4Q29tbWl0KENPTU1JVF9GT1JDRSkgd2lsbCBzeW5jaHJvbm91c2x5IHdyaXRlIGFkZHJlc3MgCiAJCSAqIGluZGV4IHBhZ2VzIGFuZCBpbm9kZSBhZnRlciBjb21taXQgaW4gY2FyZWZ1bCB1cGRhdGUgb3JkZXIgCiAJCSAqIG9mIGFkZHJlc3MgaW5kZXggcGFnZXMgKHJpZ2h0IHRvIGxlZnQsIGJvdHRvbSB1cCk7CkBAIC0yNzg5LDYgKzI3OTEsNyBAQAogCXUzMiBtYXNrOwogCXN0cnVjdCBqZnNfbG9nICpsb2c7CiAJaW50IGxzbiwgZGlmZnQsIGRpZmZwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpbWFwID0gSkZTX0lQKGlwaW1hcCktPmlfaW1hcDsKIAkvKiBnZXQgdGhlIGlhZyBudW1iZXIgY29udGFpbmluZyB0aGUgaW5vZGUgKi8KQEAgLTI4MDUsNiArMjgwOCw3IEBACiAJSVJFQURfVU5MT0NLKGlwaW1hcCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gKHJjKTsKKwltZXRhcGFnZV93YWl0X2Zvcl9pbyhtcCk7CiAJaWFncCA9IChzdHJ1Y3QgaWFnICopIG1wLT5kYXRhOwogCS8qIGdldCB0aGUgaW5vZGUgbnVtYmVyIGFuZCBleHRlbnQgbnVtYmVyIG9mIHRoZSBpbm9kZSB3aXRoaW4KIAkgKiB0aGUgaWFnIGFuZCB0aGUgaW5vZGUgbnVtYmVyIHdpdGhpbiB0aGUgZXh0ZW50LgpAQCAtMjg2OCwzMCArMjg3MiwyOCBAQAogCQkvKiBpbmhlcml0IG9sZGVyL3NtYWxsZXIgbHNuICovCiAJCWxvZ2RpZmYoZGlmZnQsIGxzbiwgbG9nKTsKIAkJbG9nZGlmZihkaWZmcCwgbXAtPmxzbiwgbG9nKTsKKwkJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCQlpZiAoZGlmZnQgPCBkaWZmcCkgewogCQkJbXAtPmxzbiA9IGxzbjsKIAkJCS8qIG1vdmUgbXAgYWZ0ZXIgdGJsb2NrIGluIGxvZ3N5bmMgbGlzdCAqLwotCQkJTE9HU1lOQ19MT0NLKGxvZyk7CiAJCQlsaXN0X21vdmUoJm1wLT5zeW5jbGlzdCwgJnRibGstPnN5bmNsaXN0KTsKLQkJCUxPR1NZTkNfVU5MT0NLKGxvZyk7CiAJCX0KIAkJLyogaW5oZXJpdCB5b3VuZ2VyL2xhcmdlciBjbHNuICovCi0JCUxPR1NZTkNfTE9DSyhsb2cpOwogCQlhc3NlcnQobXAtPmNsc24pOwogCQlsb2dkaWZmKGRpZmZ0LCB0YmxrLT5jbHNuLCBsb2cpOwogCQlsb2dkaWZmKGRpZmZwLCBtcC0+Y2xzbiwgbG9nKTsKIAkJaWYgKGRpZmZ0ID4gZGlmZnApCiAJCQltcC0+Y2xzbiA9IHRibGstPmNsc247Ci0JCUxPR1NZTkNfVU5MT0NLKGxvZyk7CisJCUxPR1NZTkNfVU5MT0NLKGxvZywgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCW1wLT5sb2cgPSBsb2c7CiAJCW1wLT5sc24gPSBsc247CiAJCS8qIGluc2VydCBtcCBhZnRlciB0YmxvY2sgaW4gbG9nc3luYyBsaXN0ICovCi0JCUxPR1NZTkNfTE9DSyhsb2cpOworCQlMT0dTWU5DX0xPQ0sobG9nLCBmbGFncyk7CiAJCWxvZy0+Y291bnQrKzsKIAkJbGlzdF9hZGQoJm1wLT5zeW5jbGlzdCwgJnRibGstPnN5bmNsaXN0KTsKIAkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQlMT0dTWU5DX1VOTE9DSyhsb2cpOworCQlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAl9CiAJd3JpdGVfbWV0YXBhZ2UobXApOwogCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2luY29yZS5oIGIvZnMvamZzL2pmc19pbmNvcmUuaAppbmRleCBlYmQ3N2MxLi5jMGZkN2IzIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2luY29yZS5oCisrKyBiL2ZzL2pmcy9qZnNfaW5jb3JlLmgKQEAgLTE2NSw2ICsxNjUsNyBAQAogICAgICAgICAvKiBGb3JtZXJseSBpbiBpcGJtYXAgKi8KIAlzdHJ1Y3QgYm1hcAkqYm1hcDsJCS8qIGluY29yZSBibWFwIGRlc2NyaXB0b3IJKi8KIAlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfdGFiOwkvKiBjdXJyZW50IGNvZGVwYWdlCQkqLworCXN0cnVjdCBpbm9kZSAqZGlyZWN0X2lub2RlOwkvKiBtZXRhZGF0YSBpbm9kZSAqLwogCXVpbnQJCXN0YXRlOwkJLyogbW91bnQvcmVjb3Zlcnkgc3RhdGUJKi8KIAl1bnNpZ25lZCBsb25nCWZsYWc7CQkvKiBtb3VudCB0aW1lIGZsYWdzICovCiAJdWludAkJcF9zdGF0ZTsJLyogc3RhdGUgcHJpb3IgdG8gZ29pbmcgbm8gaW50ZWdyaXR5ICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2xvZ21nci5jIGIvZnMvamZzL2pmc19sb2dtZ3IuYwppbmRleCBiNmE2ODY5Li5kZmExMjAwIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2xvZ21nci5jCisrKyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKQEAgLTIzNCw2ICsyMzQsNyBAQAogCWludCBsc247CiAJaW50IGRpZmZwLCBkaWZmdDsKIAlzdHJ1Y3QgbWV0YXBhZ2UgKm1wID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJamZzX2luZm8oImxtTG9nOiBsb2c6MHglcCB0YmxrOjB4JXAsIGxyZDoweCVwIHRsY2s6MHglcCIsCiAJCSBsb2csIHRibGssIGxyZCwgdGxjayk7CkBAIC0yNTQsNyArMjU1LDcgQEAKIAkgKi8KIAlsc24gPSBsb2ctPmxzbjsKIAotCUxPR1NZTkNfTE9DSyhsb2cpOworCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAogCS8qCiAJICogaW5pdGlhbGl6ZSBwYWdlIGxzbiBpZiBmaXJzdCBsb2cgd3JpdGUgb2YgdGhlIHBhZ2UKQEAgLTMxMCw3ICszMTEsNyBAQAogCQl9CiAJfQogCi0JTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAogCS8qCiAJICogICAgICB3cml0ZSB0aGUgbG9nIHJlY29yZApAQCAtMzM0LDcgKzMzNSw2IEBACiAJcmV0dXJuIGxzbjsKIH0KIAotCiAvKgogICogTkFNRToJbG1Xcml0ZVJlY29yZCgpCiAgKgpAQCAtOTI3LDkgKzkyNyw4IEBACiAgKgljYWxjdWxhdGUgbmV3IHZhbHVlIG9mIGlfbmV4dHN5bmMgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuCiAgKgl0aGlzIGNvZGUgaXMgY2FsbGVkIGFnYWluLgogICoKLSAqCXRoaXMgaXMgY2FsbGVkIG9ubHkgZnJvbSBsbUxvZygpLgotICoKLSAqIFBBUkFNRVRFUjoJaXAJLSBwb2ludGVyIHRvIGxvZ3MgaW5vZGUuCisgKiBQQVJBTUVURVJTOglsb2cJLSBsb2cgc3RydWN0dXJlCisgKiAJCW5vc3luY3dhaXQgLSAxIGlmIGNhbGxlZCBhc3luY2hyb25vdXNseQogICoKICAqIFJFVFVSTjoJMAogICoJCQkKQEAgLTk0NSw2ICs5NDQsMTUgQEAKIAlzdHJ1Y3QgbHJkIGxyZDsKIAlpbnQgbHNuOwogCXN0cnVjdCBsb2dzeW5jYmxrICpscDsKKwlzdHJ1Y3QgamZzX3NiX2luZm8gKnNiaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogcHVzaCBkaXJ0eSBtZXRhcGFnZXMgb3V0IHRvIGRpc2sgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiaSwgJmxvZy0+c2JfbGlzdCwgbG9nX2xpc3QpIHsKKwkJZmlsZW1hcF9mbHVzaChzYmktPmlwYm1hcC0+aV9tYXBwaW5nKTsKKwkJZmlsZW1hcF9mbHVzaChzYmktPmlwaW1hcC0+aV9tYXBwaW5nKTsKKwkJZmlsZW1hcF9mbHVzaChzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwl9CiAKIAkvKgogCSAqICAgICAgZm9yd2FyZCBzeW5jcHQKQEAgLTk1NCwxMCArOTYyLDcgQEAKIAkgKi8KIAogCWlmIChsb2ctPnN5bmMgPT0gbG9nLT5zeW5jcHQpIHsKLQkJTE9HU1lOQ19MT0NLKGxvZyk7Ci0JCS8qIFRvRG86IHB1c2ggZGlydHkgbWV0YXBhZ2VzIG91dCB0byBkaXNrICovCi0vLyAgICAgICAgICAgICAgYm1Mb2dTeW5jKGxvZyk7Ci0KKwkJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCQlpZiAobGlzdF9lbXB0eSgmbG9nLT5zeW5jbGlzdCkpCiAJCQlsb2ctPnN5bmMgPSBsb2ctPmxzbjsKIAkJZWxzZSB7CkBAIC05NjUsNyArOTcwLDcgQEAKIAkJCQkJc3RydWN0IGxvZ3N5bmNibGssIHN5bmNsaXN0KTsKIAkJCWxvZy0+c3luYyA9IGxwLT5sc247CiAJCX0KLQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAKIAl9CiAKQEAgLTk3NCwyNyArOTc5LDYgQEAKIAkgKiByZXNldCBzeW5jcHQgPSBzeW5jCiAJICovCiAJaWYgKGxvZy0+c3luYyAhPSBsb2ctPnN5bmNwdCkgewotCQlzdHJ1Y3QgamZzX3NiX2luZm8gKnNiaTsKLQotCQkvKgotCQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlICJ3cml0dGVuIiBtZXRhcGFnZXMKLQkJICogYWN0dWFsbHkgbWFrZSBpdCB0byBkaXNrCi0JCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiaSwgJmxvZy0+c2JfbGlzdCwgbG9nX2xpc3QpIHsKLQkJCWlmIChzYmktPmZsYWcgJiBKRlNfTk9JTlRFR1JJVFkpCi0JCQkJY29udGludWU7Ci0JCQlmaWxlbWFwX2ZkYXRhd3JpdGUoc2JpLT5pcGJtYXAtPmlfbWFwcGluZyk7Ci0JCQlmaWxlbWFwX2ZkYXRhd3JpdGUoc2JpLT5pcGltYXAtPmlfbWFwcGluZyk7Ci0JCQlmaWxlbWFwX2ZkYXRhd3JpdGUoc2JpLT5zYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nKTsKLQkJfQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiaSwgJmxvZy0+c2JfbGlzdCwgbG9nX2xpc3QpIHsKLQkJCWlmIChzYmktPmZsYWcgJiBKRlNfTk9JTlRFR1JJVFkpCi0JCQkJY29udGludWU7Ci0JCQlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmlwYm1hcC0+aV9tYXBwaW5nKTsKLQkJCWZpbGVtYXBfZmRhdGF3YWl0KHNiaS0+aXBpbWFwLT5pX21hcHBpbmcpOwotCQkJZmlsZW1hcF9mZGF0YXdhaXQoc2JpLT5zYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nKTsKLQkJfQotCiAJCWxyZC5sb2d0aWQgPSAwOwogCQlscmQuYmFja2NoYWluID0gMDsKIAkJbHJkLnR5cGUgPSBjcHVfdG9fbGUxNihMT0dfU1lOQ1BUKTsKQEAgLTEwNjYsNiArMTA1MCwxOCBAQAogCXJldHVybiBsc247CiB9CiAKKy8qCisgKiBOQU1FOglqZnNfc3luY3B0CisgKgorICogRlVOQ1RJT046CXdyaXRlIGxvZyBTWU5DUFQgcmVjb3JkIGZvciBzcGVjaWZpZWQgbG9nCisgKgorICogUEFSQU1FVEVSUzoJbG9nCS0gbG9nIHN0cnVjdHVyZQorICovCit2b2lkIGpmc19zeW5jcHQoc3RydWN0IGpmc19sb2cgKmxvZykKK3sJTE9HX0xPQ0sobG9nKTsKKwlsbUxvZ1N5bmMobG9nLCAxKTsKKwlMT0dfVU5MT0NLKGxvZyk7Cit9CiAKIC8qCiAgKiBOQU1FOglsbUxvZ09wZW4oKQpAQCAtMTU0Nyw2ICsxNTQzLDcgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgdGJsb2NrICp0YXJnZXQgPSBOVUxMOworCXN0cnVjdCBqZnNfc2JfaW5mbyAqc2JpOwogCiAJLyogamZzX3dyaXRlX2lub2RlIG1heSBjYWxsIHVzIGR1cmluZyByZWFkLW9ubHkgbW91bnQgKi8KIAlpZiAoIWxvZykKQEAgLTE2MDgsMTIgKzE2MDUsMTggQEAKIAlpZiAod2FpdCA8IDIpCiAJCXJldHVybjsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2JpLCAmbG9nLT5zYl9saXN0LCBsb2dfbGlzdCkgeworCQlmaWxlbWFwX2ZkYXRhd3JpdGUoc2JpLT5pcGJtYXAtPmlfbWFwcGluZyk7CisJCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmlwaW1hcC0+aV9tYXBwaW5nKTsKKwkJZmlsZW1hcF9mZGF0YXdyaXRlKHNiaS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmcpOworCX0KKwogCS8qCiAJICogSWYgdGhlcmUgd2FzIHJlY2VudCBhY3Rpdml0eSwgd2UgbWF5IG5lZWQgdG8gd2FpdAogCSAqIGZvciB0aGUgbGF6eWNvbW1pdCB0aHJlYWQgdG8gY2F0Y2ggdXAKIAkgKi8KIAlpZiAoKCFsaXN0X2VtcHR5KCZsb2ctPmNxdWV1ZSkpIHx8ICFsaXN0X2VtcHR5KCZsb2ctPnN5bmNsaXN0KSkgewotCQlmb3IgKGkgPSAwOyBpIDwgODAwOyBpKyspIHsJLyogVG9vIG11Y2g/ICovCisJCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgewkvKiBUb28gbXVjaD8gKi8KIAkJCW1zbGVlcCgyNTApOwogCQkJaWYgKGxpc3RfZW1wdHkoJmxvZy0+Y3F1ZXVlKSAmJgogCQkJICAgIGxpc3RfZW1wdHkoJmxvZy0+c3luY2xpc3QpKQpAQCAtMTYyMSw3ICsxNjI0LDI0IEBACiAJCX0KIAl9CiAJYXNzZXJ0KGxpc3RfZW1wdHkoJmxvZy0+Y3F1ZXVlKSk7Ci0JYXNzZXJ0KGxpc3RfZW1wdHkoJmxvZy0+c3luY2xpc3QpKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmxvZy0+c3luY2xpc3QpKSB7CisJCXN0cnVjdCBsb2dzeW5jYmxrICpscDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxwLCAmbG9nLT5zeW5jbGlzdCwgc3luY2xpc3QpIHsKKwkJCWlmIChscC0+eGZsYWcgJiBDT01NSVRfUEFHRSkgeworCQkJCXN0cnVjdCBtZXRhcGFnZSAqbXAgPSAoc3RydWN0IG1ldGFwYWdlICopbHA7CisJCQkJZHVtcF9tZW0oIm9ycGhhbiBtZXRhcGFnZSIsIGxwLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBtZXRhcGFnZSkpOworCQkJCWR1bXBfbWVtKCJwYWdlIiwgbXAtPnBhZ2UsIHNpemVvZihzdHJ1Y3QgcGFnZSkpOworCQkJfQorCQkJZWxzZQorCQkJCWR1bXBfbWVtKCJvcnBoYW4gdGJsb2NrIiwgbHAsCisJCQkJCSBzaXplb2Yoc3RydWN0IHRibG9jaykpOworCQl9CisvLwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisvLwkJc2NoZWR1bGUoKTsKKwl9CisJLy9hc3NlcnQobGlzdF9lbXB0eSgmbG9nLT5zeW5jbGlzdCkpOwogCWNsZWFyX2JpdChsb2dfRkxVU0gsICZsb2ctPmZsYWcpOwogfQogCkBAIC0xNjY5LDYgKzE2ODksNyBAQAogCWxwLT5oLmVvciA9IGxwLT50LmVvciA9IGNwdV90b19sZTE2KGJwLT5sX2Vvcik7CiAJbGJtV3JpdGUobG9nLCBsb2ctPmJwLCBsYm1XUklURSB8IGxibVJFTEVBU0UgfCBsYm1TWU5DLCAwKTsKIAlsYm1JT1dhaXQobG9nLT5icCwgbGJtRlJFRSk7CisJbG9nLT5icCA9IE5VTEw7CiAKIAkvKgogCSAqIHN5bmNocm9ub3VzIHVwZGF0ZSBsb2cgc3VwZXJibG9jawpAQCAtMTgxOSwyMCArMTg0MCwzNCBAQAogCiAJbG9nLT5sYnVmX2ZyZWUgPSBOVUxMOwogCi0JZm9yIChpID0gMDsgaSA8IExPR1BBR0VTOyBpKyspIHsKLQkJbGJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChsYnVmID09IDApCi0JCQlnb3RvIGVycm9yOwotCQlsYnVmLT5sX2xkYXRhID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAobGJ1Zi0+bF9sZGF0YSA9PSAwKSB7Ci0JCQlrZnJlZShsYnVmKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJbGJ1Zi0+bF9sb2cgPSBsb2c7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxidWYtPmxfaW9ldmVudCk7CisJZm9yIChpID0gMDsgaSA8IExPR1BBR0VTOykgeworCQljaGFyICpidWZmZXI7CisJCXVpbnQgb2Zmc2V0OworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCQlsYnVmLT5sX2ZyZWVsaXN0ID0gbG9nLT5sYnVmX2ZyZWU7Ci0JCWxvZy0+bGJ1Zl9mcmVlID0gbGJ1ZjsKKwkJYnVmZmVyID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCQlwYWdlID0gdmlydF90b19wYWdlKGJ1ZmZlcik7CisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgUEFHRV9TSVpFOyBvZmZzZXQgKz0gTE9HUFNJWkUpIHsKKwkJCWxidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGJ1ZiksIEdGUF9LRVJORUwpOworCQkJaWYgKGxidWYgPT0gTlVMTCkgeworCQkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZmZXIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlpZiAob2Zmc2V0KSAvKiB3ZSBhbHJlYWR5IGhhdmUgb25lIHJlZmVyZW5jZSAqLworCQkJCWdldF9wYWdlKHBhZ2UpOworCQkJbGJ1Zi0+bF9vZmZzZXQgPSBvZmZzZXQ7CisJCQlsYnVmLT5sX2xkYXRhID0gYnVmZmVyICsgb2Zmc2V0OworCQkJbGJ1Zi0+bF9wYWdlID0gcGFnZTsKKwkJCWxidWYtPmxfbG9nID0gbG9nOworCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmbGJ1Zi0+bF9pb2V2ZW50KTsKKworCQkJbGJ1Zi0+bF9mcmVlbGlzdCA9IGxvZy0+bGJ1Zl9mcmVlOworCQkJbG9nLT5sYnVmX2ZyZWUgPSBsYnVmOworCQkJaSsrOworCQl9CiAJfQogCiAJcmV0dXJuICgwKTsKQEAgLTE4NTcsMTIgKzE4OTIsMTAgQEAKIAlsYnVmID0gbG9nLT5sYnVmX2ZyZWU7CiAJd2hpbGUgKGxidWYpIHsKIAkJc3RydWN0IGxidWYgKm5leHQgPSBsYnVmLT5sX2ZyZWVsaXN0OwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGxidWYtPmxfbGRhdGEpOworCQlfX2ZyZWVfcGFnZShsYnVmLT5sX3BhZ2UpOwogCQlrZnJlZShsYnVmKTsKIAkJbGJ1ZiA9IG5leHQ7CiAJfQotCi0JbG9nLT5icCA9IE5VTEw7CiB9CiAKIApAQCAtMTk3NCw5ICsyMDA3LDkgQEAKIAogCWJpby0+Ymlfc2VjdG9yID0gYnAtPmxfYmxrbm8gPDwgKGxvZy0+bDJic2l6ZSAtIDkpOwogCWJpby0+YmlfYmRldiA9IGxvZy0+YmRldjsKLQliaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlID0gdmlydF90b19wYWdlKGJwLT5sX2xkYXRhKTsKKwliaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlID0gYnAtPmxfcGFnZTsKIAliaW8tPmJpX2lvX3ZlY1swXS5idl9sZW4gPSBMT0dQU0laRTsKLQliaW8tPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSAwOworCWJpby0+YmlfaW9fdmVjWzBdLmJ2X29mZnNldCA9IGJwLT5sX29mZnNldDsKIAogCWJpby0+YmlfdmNudCA9IDE7CiAJYmlvLT5iaV9pZHggPSAwOwpAQCAtMjExNSw5ICsyMTQ4LDkgQEAKIAliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIDEpOwogCWJpby0+Ymlfc2VjdG9yID0gYnAtPmxfYmxrbm8gPDwgKGxvZy0+bDJic2l6ZSAtIDkpOwogCWJpby0+YmlfYmRldiA9IGxvZy0+YmRldjsKLQliaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlID0gdmlydF90b19wYWdlKGJwLT5sX2xkYXRhKTsKKwliaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlID0gYnAtPmxfcGFnZTsKIAliaW8tPmJpX2lvX3ZlY1swXS5idl9sZW4gPSBMT0dQU0laRTsKLQliaW8tPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSAwOworCWJpby0+YmlfaW9fdmVjWzBdLmJ2X29mZnNldCA9IGJwLT5sX29mZnNldDsKIAogCWJpby0+YmlfdmNudCA9IDE7CiAJYmlvLT5iaV9pZHggPSAwOwpAQCAtMjEyNywxNiArMjE2MCwxMyBAQAogCWJpby0+YmlfcHJpdmF0ZSA9IGJwOwogCiAJLyogY2hlY2sgaWYgam91cm5hbGluZyB0byBkaXNrIGhhcyBiZWVuIGRpc2FibGVkICovCi0JaWYgKCFsb2ctPm5vX2ludGVncml0eSkgeworCWlmIChsb2ctPm5vX2ludGVncml0eSkgeworCQliaW8tPmJpX3NpemUgPSAwOworCQlsYm1JT0RvbmUoYmlvLCAwLCAwKTsKKwl9IGVsc2UgewogCQlzdWJtaXRfYmlvKFdSSVRFX1NZTkMsIGJpbyk7CiAJCUlOQ1JFTUVOVChsbVN0YXQuc3VibWl0dGVkKTsKIAl9Ci0JZWxzZSB7Ci0JCWJpby0+Ymlfc2l6ZSA9IDA7Ci0JCWxibUlPRG9uZShiaW8sIDAsIDApOyAvKiAybmQgYXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgdXNlZCA9PiAwCi0JCQkJICAgICAgICogIDNyZCBhcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSB1c2VkID0+IDAKLQkJCQkgICAgICAgKi8KLQl9CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuaCBiL2ZzL2pmcy9qZnNfbG9nbWdyLmgKaW5kZXggMTQxYWQ3NC4uNTEyOTFmYiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuaAorKysgYi9mcy9qZnMvamZzX2xvZ21nci5oCkBAIC00NjMsOSArNDYzLDEwIEBACiAKIAlzNjQgbF9ibGtubzsJCS8qIDg6IGxvZyBwYWdlIGJsb2NrIG51bWJlciAqLwogCWNhZGRyX3QgbF9sZGF0YTsJLyogNDogZGF0YSBwYWdlICovCisJc3RydWN0IHBhZ2UgKmxfcGFnZTsJLyogVGhlIHBhZ2UgaXRzZWxmICovCisJdWludCBsX29mZnNldDsJCS8qIE9mZnNldCBvZiBsX2xkYXRhIHdpdGhpbiB0aGUgcGFnZSAqLwkKIAogCXdhaXRfcXVldWVfaGVhZF90IGxfaW9ldmVudDsJLyogNDogaS9vIGRvbmUgZXZlbnQgKi8KLQlzdHJ1Y3QgcGFnZSAqbF9wYWdlOwkvKiBUaGUgcGFnZSBpdHNlbGYgKi8KIH07CiAKIC8qIFJldXNlIGxfZnJlZWxpc3QgZm9yIHJlZHJpdmUgbGlzdCAqLwpAQCAtNDg5LDggKzQ5MCw5IEBACiAgKi8KIAogI2RlZmluZSBMT0dTWU5DX0xPQ0tfSU5JVChsb2cpIHNwaW5fbG9ja19pbml0KCYobG9nKS0+c3luY2xvY2spCi0jZGVmaW5lIExPR1NZTkNfTE9DSyhsb2cpIHNwaW5fbG9jaygmKGxvZyktPnN5bmNsb2NrKQotI2RlZmluZSBMT0dTWU5DX1VOTE9DSyhsb2cpIHNwaW5fdW5sb2NrKCYobG9nKS0+c3luY2xvY2spCisjZGVmaW5lIExPR1NZTkNfTE9DSyhsb2csIGZsYWdzKSBzcGluX2xvY2tfaXJxc2F2ZSgmKGxvZyktPnN5bmNsb2NrLCBmbGFncykKKyNkZWZpbmUgTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncykgXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihsb2cpLT5zeW5jbG9jaywgZmxhZ3MpCiAKIC8qIGNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgaW4gYnl0ZXMgb2YgbHNuIGZyb20gc3luYyBwb2ludCAqLwogI2RlZmluZSBsb2dkaWZmKGRpZmYsIGxzbiwgbG9nKVwKQEAgLTUwNiw1ICs1MDgsNiBAQAogZXh0ZXJuIGludCBsbUxvZ0luaXQoc3RydWN0IGpmc19sb2cgKiBsb2cpOwogZXh0ZXJuIGludCBsbUxvZ0Zvcm1hdChzdHJ1Y3QgamZzX2xvZyAqbG9nLCBzNjQgbG9nQWRkcmVzcywgaW50IGxvZ1NpemUpOwogZXh0ZXJuIHZvaWQgamZzX2ZsdXNoX2pvdXJuYWwoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCB3YWl0KTsKK2V4dGVybiB2b2lkIGpmc19zeW5jcHQoc3RydWN0IGpmc19sb2cgKmxvZyk7CiAKICNlbmRpZgkJCQkvKiBfSF9KRlNfTE9HTUdSICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKaW5kZXggNGMwYTNhYy4uNDFiZjA3OCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5jCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiwgMjAwMC0yMDAzCisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiwgMjAwMC0yMDA1CiAgKiAgIFBvcnRpb25zIENvcHlyaWdodCAoQykgQ2hyaXN0b3BoIEhlbGx3aWcsIDIwMDEtMjAwMgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xOCwxMCArMTgsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgImpmc19pbmNvcmUuaCIKICNpbmNsdWRlICJqZnNfc3VwZXJibG9jay5oIgogI2luY2x1ZGUgImpmc19maWxzeXMuaCIKQEAgLTI5LDggKzMwLDYgQEAKICNpbmNsdWRlICJqZnNfdHhubWdyLmgiCiAjaW5jbHVkZSAiamZzX2RlYnVnLmgiCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWV0YV9sb2NrKTsKLQogI2lmZGVmIENPTkZJR19KRlNfU1RBVElTVElDUwogc3RhdGljIHN0cnVjdCB7CiAJdWludAlwYWdlYWxsb2M7CS8qICMgb2YgcGFnZSBhbGxvY2F0aW9ucyAqLwpAQCAtMzksMjIgKzM4LDggQEAKIH0gbXBTdGF0OwogI2VuZGlmCiAKLQotI2RlZmluZSBIQVNIX0JJVFMgMTAJCS8qIFRoaXMgbWFrZXMgaGFzaF90YWJsZSAxIDRLIHBhZ2UgKi8KLSNkZWZpbmUgSEFTSF9TSVpFICgxIDw8IEhBU0hfQklUUykKLXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKipoYXNoX3RhYmxlID0gTlVMTDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhhc2hfb3JkZXI7Ci0KLQotc3RhdGljIGlubGluZSBpbnQgbWV0YXBhZ2VfbG9ja2VkKHN0cnVjdCBtZXRhcGFnZSAqbXApCi17Ci0JcmV0dXJuIHRlc3RfYml0KE1FVEFfbG9ja2VkLCAmbXAtPmZsYWcpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0cnlsb2NrX21ldGFwYWdlKHN0cnVjdCBtZXRhcGFnZSAqbXApCi17Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoTUVUQV9sb2NrZWQsICZtcC0+ZmxhZyk7Ci19CisjZGVmaW5lIG1ldGFwYWdlX2xvY2tlZChtcCkgdGVzdF9iaXQoTUVUQV9sb2NrZWQsICYobXApLT5mbGFnKQorI2RlZmluZSB0cnlsb2NrX21ldGFwYWdlKG1wKSB0ZXN0X2FuZF9zZXRfYml0KE1FVEFfbG9ja2VkLCAmKG1wKS0+ZmxhZykKIAogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQogewpAQCAtNjIsMjYgKzQ3LDI2IEBACiAJd2FrZV91cCgmbXAtPndhaXQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2xvY2tfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xvY2tfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQogCUlOQ1JFTUVOVChtcFN0YXQubG9ja3dhaXQpOwotCiAJYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKCZtcC0+d2FpdCwgJndhaXQpOwogCWRvIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlpZiAobWV0YXBhZ2VfbG9ja2VkKG1wKSkgewotCQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7CisJCQl1bmxvY2tfcGFnZShtcC0+cGFnZSk7CiAJCQlzY2hlZHVsZSgpOwotCQkJc3Bpbl9sb2NrKCZtZXRhX2xvY2spOworCQkJbG9ja19wYWdlKG1wLT5wYWdlKTsKIAkJfQogCX0gd2hpbGUgKHRyeWxvY2tfbWV0YXBhZ2UobXApKTsKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJm1wLT53YWl0LCAmd2FpdCk7CiB9CiAKLS8qIG5lZWRzIG1ldGFfbG9jayAqLworLyoKKyAqIE11c3QgaGF2ZSBtcC0+cGFnZSBsb2NrZWQKKyAqLwogc3RhdGljIGlubGluZSB2b2lkIGxvY2tfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKIAlpZiAodHJ5bG9ja19tZXRhcGFnZShtcCkpCkBAIC05Miw2ICs3NywxMTAgQEAKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKm1ldGFwYWdlX2NhY2hlOwogc3RhdGljIG1lbXBvb2xfdCAqbWV0YXBhZ2VfbWVtcG9vbDsKIAorI2RlZmluZSBNUFNfUEVSX1BBR0UgKFBBR0VfQ0FDSEVfU0laRSA+PiBMMlBTSVpFKQorCisjaWYgTVBTX1BFUl9QQUdFID4gMQorCitzdHJ1Y3QgbWV0YV9hbmNob3IgeworCWludCBtcF9jb3VudDsKKwlhdG9taWNfdCBpb19jb3VudDsKKwlzdHJ1Y3QgbWV0YXBhZ2UgKm1wW01QU19QRVJfUEFHRV07Cit9OworI2RlZmluZSBtcF9hbmNob3IocGFnZSkgKChzdHJ1Y3QgbWV0YV9hbmNob3IgKilwYWdlLT5wcml2YXRlKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqcGFnZV90b19tcChzdHJ1Y3QgcGFnZSAqcGFnZSwgdWludCBvZmZzZXQpCit7CisJaWYgKCFQYWdlUHJpdmF0ZShwYWdlKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG1wX2FuY2hvcihwYWdlKS0+bXBbb2Zmc2V0ID4+IEwyUFNJWkVdOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZXRhcGFnZSAqbXApCit7CisJc3RydWN0IG1ldGFfYW5jaG9yICphOworCWludCBpbmRleDsKKwlpbnQgbDJtcF9ibG9ja3M7CS8qIGxvZzIgYmxvY2tzIHBlciBtZXRhcGFnZSAqLworCisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlhID0gbXBfYW5jaG9yKHBhZ2UpOworCWVsc2UgeworCQlhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1ldGFfYW5jaG9yKSwgR0ZQX05PRlMpOworCQlpZiAoIWEpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtc2V0KGEsIDAsIHNpemVvZihzdHJ1Y3QgbWV0YV9hbmNob3IpKTsKKwkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKWE7CisJCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCQlrbWFwKHBhZ2UpOworCX0KKworCWlmIChtcCkgeworCQlsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBwYWdlLT5tYXBwaW5nLT5ob3N0LT5pX2Jsa2JpdHM7CisJCWluZGV4ID0gKG1wLT5pbmRleCA+PiBsMm1wX2Jsb2NrcykgJiAoTVBTX1BFUl9QQUdFIC0gMSk7CisJCWEtPm1wX2NvdW50Kys7CisJCWEtPm1wW2luZGV4XSA9IG1wOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21ldGFwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQoreworCXN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IG1wX2FuY2hvcihwYWdlKTsKKwlpbnQgbDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gcGFnZS0+bWFwcGluZy0+aG9zdC0+aV9ibGtiaXRzOworCWludCBpbmRleDsKKworCWluZGV4ID0gKG1wLT5pbmRleCA+PiBsMm1wX2Jsb2NrcykgJiAoTVBTX1BFUl9QQUdFIC0gMSk7CisKKwlCVUdfT04oYS0+bXBbaW5kZXhdICE9IG1wKTsKKworCWEtPm1wW2luZGV4XSA9IE5VTEw7CisJaWYgKC0tYS0+bXBfY291bnQgPT0gMCkgeworCQlrZnJlZShhKTsKKwkJcGFnZS0+cHJpdmF0ZSA9IDA7CisJCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CisJCWt1bm1hcChwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfaW8oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJYXRvbWljX2luYygmbXBfYW5jaG9yKHBhZ2UpLT5pb19jb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfaW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKCpoYW5kbGVyKSAoc3RydWN0IHBhZ2UgKikpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1wX2FuY2hvcihwYWdlKS0+aW9fY291bnQpKQorCQloYW5kbGVyKHBhZ2UpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKnBhZ2VfdG9fbXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHVpbnQgb2Zmc2V0KQoreworCXJldHVybiBQYWdlUHJpdmF0ZShwYWdlKSA/IChzdHJ1Y3QgbWV0YXBhZ2UgKilwYWdlLT5wcml2YXRlIDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQoreworCWlmIChtcCkgeworCQlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpbXA7CisJCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCQlrbWFwKHBhZ2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlwYWdlLT5wcml2YXRlID0gMDsKKwlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCWt1bm1hcChwYWdlKTsKK30KKworI2RlZmluZSBpbmNfaW8ocGFnZSkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgZGVjX2lvKHBhZ2UsIGhhbmRsZXIpIGhhbmRsZXIocGFnZSkKKworI2VuZGlmCisKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28sIGttZW1fY2FjaGVfdCAqY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBtZXRhcGFnZSAqbXAgPSAoc3RydWN0IG1ldGFwYWdlICopZm9vOwpAQCAtMTM5LDE2ICsyMjgsNiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3kobWV0YXBhZ2VfY2FjaGUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JLyoKLQkgKiBOb3cgdGhlIGhhc2ggbGlzdAotCSAqLwotCWZvciAoaGFzaF9vcmRlciA9IDA7Ci0JICAgICAoKFBBR0VfU0laRSA8PCBoYXNoX29yZGVyKSAvIHNpemVvZih2b2lkICopKSA8IEhBU0hfU0laRTsKLQkgICAgIGhhc2hfb3JkZXIrKyk7Ci0JaGFzaF90YWJsZSA9Ci0JICAgIChzdHJ1Y3QgbWV0YXBhZ2UgKiopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgaGFzaF9vcmRlcik7Ci0JYXNzZXJ0KGhhc2hfdGFibGUpOwotCW1lbXNldChoYXNoX3RhYmxlLCAwLCBQQUdFX1NJWkUgPDwgaGFzaF9vcmRlcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OSw3MyArMjM4LDM4OCBAQAogCWttZW1fY2FjaGVfZGVzdHJveShtZXRhcGFnZV9jYWNoZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX21ldGFwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQoreworCWlmIChtcC0+Y291bnQgfHwgbXAtPm5vaG9tZW9rIHx8IHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykgfHwKKwkgICAgdGVzdF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKSkKKwkJcmV0dXJuOworCXJlbW92ZV9tZXRhcGFnZShwYWdlLCBtcCk7CisJSU5DUkVNRU5UKG1wU3RhdC5wYWdlZnJlZSk7CisJZnJlZV9tZXRhcGFnZShtcCk7Cit9CisKIC8qCi0gKiBCYXNpY2FsbHkgc2FtZSBoYXNoIGFzIGluIHBhZ2VtYXAuaCwgYnV0IHVzaW5nIG91ciBoYXNoIHRhYmxlCisgKiBNZXRhcGFnZSBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMKICAqLwotc3RhdGljIHN0cnVjdCBtZXRhcGFnZSAqKm1ldGFfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkgICB1bnNpZ25lZCBsb25nIGluZGV4KQorCitzdGF0aWMgc2VjdG9yX3QgbWV0YXBhZ2VfZ2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBsYmxvY2ssCisJCQkJICAgIHVuc2lnbmVkIGludCAqbGVuKQogewotI2RlZmluZSBpICgoKHVuc2lnbmVkIGxvbmcpbWFwcGluZykvIFwKLQkgICAoc2l6ZW9mKHN0cnVjdCBpbm9kZSkgJiB+KHNpemVvZihzdHJ1Y3QgaW5vZGUpIC0xICkpKQotI2RlZmluZSBzKHgpICgoeCkgKyAoKHgpID4+IEhBU0hfQklUUykpCi0JcmV0dXJuIGhhc2hfdGFibGUgKyAocyhpICsgaW5kZXgpICYgKEhBU0hfU0laRSAtIDEpKTsKLSN1bmRlZiBpCi0jdW5kZWYgcworCWludCByYyA9IDA7CisJaW50IHhmbGFnOworCXM2NCB4YWRkcjsKKwlzZWN0b3JfdCBmaWxlX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgaW5vZGUtPmlfYmxrc2l6ZSAtIDEpID4+CisJCQkgICAgICAgaW5vZGUtPmlfYmxrYml0czsKKworCWlmIChsYmxvY2sgPj0gZmlsZV9ibG9ja3MpCisJCXJldHVybiAwOworCWlmIChsYmxvY2sgKyAqbGVuID4gZmlsZV9ibG9ja3MpCisJCSpsZW4gPSBmaWxlX2Jsb2NrcyAtIGxibG9jazsKKworCWlmIChpbm9kZS0+aV9pbm8pIHsKKwkJcmMgPSB4dExvb2t1cChpbm9kZSwgKHM2NClsYmxvY2ssICpsZW4sICZ4ZmxhZywgJnhhZGRyLCBsZW4sIDApOworCQlpZiAoKHJjID09IDApICYmICpsZW4pCisJCQlsYmxvY2sgPSAoc2VjdG9yX3QpeGFkZHI7CisJCWVsc2UKKwkJCWxibG9jayA9IDA7CisJfSAvKiBlbHNlIG5vIG1hcHBpbmcgKi8KKworCXJldHVybiBsYmxvY2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnNlYXJjaF9oYXNoKHN0cnVjdCBtZXRhcGFnZSAqKiBoYXNoX3B0ciwKLQkJCQkgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKK3N0YXRpYyB2b2lkIGxhc3RfcmVhZF9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbWV0YXBhZ2UgKnB0cjsKKwlpZiAoIVBhZ2VFcnJvcihwYWdlKSkKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworfQogCi0JZm9yIChwdHIgPSAqaGFzaF9wdHI7IHB0cjsgcHRyID0gcHRyLT5oYXNoX25leHQpIHsKLQkJaWYgKChwdHItPm1hcHBpbmcgPT0gbWFwcGluZykgJiYgKHB0ci0+aW5kZXggPT0gaW5kZXgpKQotCQkJcmV0dXJuIHB0cjsKK3N0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwKKwkJCQlpbnQgZXJyKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gYmlvLT5iaV9wcml2YXRlOworCisJaWYgKGJpby0+Ymlfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWV0YXBhZ2VfcmVhZF9lbmRfaW86IEkvTyBlcnJvclxuIik7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKIAl9CiAKLQlyZXR1cm4gTlVMTDsKKwlkZWNfaW8ocGFnZSwgbGFzdF9yZWFkX2NvbXBsZXRlKTsKKwliaW9fcHV0KGJpbyk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYWRkX3RvX2hhc2goc3RydWN0IG1ldGFwYWdlICogbXAsIHN0cnVjdCBtZXRhcGFnZSAqKiBoYXNoX3B0cikKK3N0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX2xvZ3N5bmMoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKLQlpZiAoKmhhc2hfcHRyKQotCQkoKmhhc2hfcHRyKS0+aGFzaF9wcmV2ID0gbXA7CisJc3RydWN0IGpmc19sb2cgKmxvZyA9IG1wLT5sb2c7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKy8qCisgKiBUaGlzIGNhbiByYWNlLiAgUmVjaGVjayB0aGF0IGxvZyBoYXNuJ3QgYmVlbiBzZXQgdG8gbnVsbCwgYW5kIGFmdGVyCisgKiBhY3F1aXJpbmcgbG9nc3luYyBsb2NrLCByZWNoZWNrIGxzbgorICovCisJaWYgKCFsb2cpCisJCXJldHVybjsKIAotCW1wLT5oYXNoX3ByZXYgPSBOVUxMOwotCW1wLT5oYXNoX25leHQgPSAqaGFzaF9wdHI7Ci0JKmhhc2hfcHRyID0gbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX2hhc2goc3RydWN0IG1ldGFwYWdlICogbXAsIHN0cnVjdCBtZXRhcGFnZSAqKiBoYXNoX3B0cikKLXsKLQlpZiAobXAtPmhhc2hfcHJldikKLQkJbXAtPmhhc2hfcHJldi0+aGFzaF9uZXh0ID0gbXAtPmhhc2hfbmV4dDsKLQllbHNlIHsKLQkJYXNzZXJ0KCpoYXNoX3B0ciA9PSBtcCk7Ci0JCSpoYXNoX3B0ciA9IG1wLT5oYXNoX25leHQ7CisJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOworCWlmIChtcC0+bHNuKSB7CisJCW1wLT5sb2cgPSBOVUxMOworCQltcC0+bHNuID0gMDsKKwkJbXAtPmNsc24gPSAwOworCQlsb2ctPmNvdW50LS07CisJCWxpc3RfZGVsKCZtcC0+c3luY2xpc3QpOwogCX0KLQotCWlmIChtcC0+aGFzaF9uZXh0KQotCQltcC0+aGFzaF9uZXh0LT5oYXNoX3ByZXYgPSBtcC0+aGFzaF9wcmV2OworCUxPR1NZTkNfVU5MT0NLKGxvZywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBsYXN0X3dyaXRlX2NvbXBsZXRlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBtZXRhcGFnZSAqbXA7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgUEFHRV9DQUNIRV9TSVpFOyBvZmZzZXQgKz0gUFNJWkUpIHsKKwkJbXAgPSBwYWdlX3RvX21wKHBhZ2UsIG9mZnNldCk7CisJCWlmIChtcCAmJiB0ZXN0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpKSB7CisJCQlpZiAobXAtPmxzbikKKwkJCQlyZW1vdmVfZnJvbV9sb2dzeW5jKG1wKTsKKwkJCWNsZWFyX2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpOworCQl9CisJCS8qCisJCSAqIEknZCBsaWtlIHRvIGNhbGwgZHJvcF9tZXRhcGFnZSBoZXJlLCBidXQgSSBkb24ndCB0aGluayBpdCdzCisJCSAqIHNhZmUgdW5sZXNzIEkgaGF2ZSB0aGUgcGFnZSBsb2NrZWQKKwkJICovCisJfQorCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKK30KKworc3RhdGljIGludCBtZXRhcGFnZV93cml0ZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwKKwkJCQkgaW50IGVycikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJpby0+YmlfcHJpdmF0ZTsKKworCUJVR19PTighUGFnZVByaXZhdGUocGFnZSkpOworCisJaWYgKGJpby0+Ymlfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoISB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1ldGFwYWdlX3dyaXRlX2VuZF9pbzogSS9PIGVycm9yXG4iKTsKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCX0KKwlkZWNfaW8ocGFnZSwgbGFzdF93cml0ZV9jb21wbGV0ZSk7CisJYmlvX3B1dChiaW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1ldGFwYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfb2Zmc2V0OwkvKiBibG9jayBvZmZzZXQgb2YgbXAgd2l0aGluIHBhZ2UgKi8KKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzX3Blcl9tcCA9IEpGU19TQkkoaW5vZGUtPmlfc2IpLT5uYnBlcnBhZ2U7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgeGxlbjsKKwlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOworCWludCByZWRpcnR5ID0gMDsKKwlzZWN0b3JfdCBsYmxvY2s7CisJc2VjdG9yX3QgcGJsb2NrOworCXNlY3Rvcl90IG5leHRfYmxvY2sgPSAwOworCXNlY3Rvcl90IHBhZ2Vfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBiaW9fYnl0ZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgYmlvX29mZnNldCA9IDA7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXBhZ2Vfc3RhcnQgPSAoc2VjdG9yX3QpcGFnZS0+aW5kZXggPDwKKwkJICAgICAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJQlVHX09OKFBhZ2VXcml0ZWJhY2socGFnZSkpOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBQQUdFX0NBQ0hFX1NJWkU7IG9mZnNldCArPSBQU0laRSkgeworCQltcCA9IHBhZ2VfdG9fbXAocGFnZSwgb2Zmc2V0KTsKKworCQlpZiAoIW1wIHx8ICF0ZXN0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpKQorCQkJY29udGludWU7CisKKwkJaWYgKG1wLT5ub2hvbWVvayAmJiAhdGVzdF9iaXQoTUVUQV9mb3JjZXdyaXRlLCAmbXAtPmZsYWcpKSB7CisJCQlyZWRpcnR5ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY2xlYXJfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZyk7CisJCWJsb2NrX29mZnNldCA9IG9mZnNldCA+PiBpbm9kZS0+aV9ibGtiaXRzOworCQlsYmxvY2sgPSBwYWdlX3N0YXJ0ICsgYmxvY2tfb2Zmc2V0OworCQlpZiAoYmlvKSB7CisJCQlpZiAoeGxlbiAmJiBsYmxvY2sgPT0gbmV4dF9ibG9jaykgeworCQkJCS8qIENvbnRpZ3VvdXMsIGluIG1lbW9yeSAmIG9uIGRpc2sgKi8KKwkJCQlsZW4gPSBtaW4oeGxlbiwgYmxvY2tzX3Blcl9tcCk7CisJCQkJeGxlbiAtPSBsZW47CisJCQkJYmlvX2J5dGVzICs9IGxlbiA8PCBpbm9kZS0+aV9ibGtiaXRzOworCQkJCXNldF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIE5vdCBjb250aWd1b3VzICovCisJCQlpZiAoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgYmlvX2J5dGVzLCBiaW9fb2Zmc2V0KSA8CisJCQkgICAgYmlvX2J5dGVzKQorCQkJCWdvdG8gYWRkX2ZhaWxlZDsKKwkJCS8qCisJCQkgKiBJbmNyZW1lbnQgY291bnRlciBiZWZvcmUgc3VibWl0dGluZyBpL28gdG8ga2VlcAorCQkJICogY291bnQgZnJvbSBoaXR0aW5nIHplcm8gYmVmb3JlIHdlJ3JlIHRocm91Z2gKKwkJCSAqLworCQkJaW5jX2lvKHBhZ2UpOworCQkJaWYgKCFiaW8tPmJpX3NpemUpCisJCQkJZ290byBkdW1wX2JpbzsKKwkJCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisJCQliaW8gPSBOVUxMOworCQl9IGVsc2UgeworCQkJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCQkJaW5jX2lvKHBhZ2UpOworCQl9CisJCXhsZW4gPSAoUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0KSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCQlwYmxvY2sgPSBtZXRhcGFnZV9nZXRfYmxvY2tzKGlub2RlLCBsYmxvY2ssICZ4bGVuKTsKKwkJaWYgKCFwYmxvY2spIHsKKwkJCS8qIE5lZWQgYmV0dGVyIGVycm9yIGhhbmRsaW5nICovCisJCQlwcmludGsoS0VSTl9FUlIgIkpGUzogbWV0YXBhZ2VfZ2V0X2Jsb2NrcyBmYWlsZWRcbiIpOworCQkJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOworCQkJY29udGludWU7CisJCX0KKwkJc2V0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpOworCQlsZW4gPSBtaW4oeGxlbiwgKHVpbnQpIEpGU19TQkkoaW5vZGUtPmlfc2IpLT5uYnBlcnBhZ2UpOworCisJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgMSk7CisJCWJpby0+YmlfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CisJCWJpby0+Ymlfc2VjdG9yID0gcGJsb2NrIDw8IChpbm9kZS0+aV9ibGtiaXRzIC0gOSk7CisJCWJpby0+YmlfZW5kX2lvID0gbWV0YXBhZ2Vfd3JpdGVfZW5kX2lvOworCQliaW8tPmJpX3ByaXZhdGUgPSBwYWdlOworCisJCS8qIERvbid0IGNhbGwgYmlvX2FkZF9wYWdlIHlldCwgd2UgbWF5IGFkZCB0byB0aGlzIHZlYyAqLworCQliaW9fb2Zmc2V0ID0gb2Zmc2V0OworCQliaW9fYnl0ZXMgPSBsZW4gPDwgaW5vZGUtPmlfYmxrYml0czsKKworCQl4bGVuIC09IGxlbjsKKwkJbmV4dF9ibG9jayA9IGxibG9jayArIGxlbjsKKwl9CisJaWYgKGJpbykgeworCQlpZiAoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgYmlvX2J5dGVzLCBiaW9fb2Zmc2V0KSA8IGJpb19ieXRlcykKKwkJCQlnb3RvIGFkZF9mYWlsZWQ7CisJCWlmICghYmlvLT5iaV9zaXplKQorCQkJZ290byBkdW1wX2JpbzsKKwkJCisJCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisJfQorCWlmIChyZWRpcnR5KQorCQlyZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSh3YmMsIHBhZ2UpOworCisJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gMDsKK2FkZF9mYWlsZWQ6CisJLyogV2Ugc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUsIHNpbmNlIHdlJ3JlIG9ubHkgYWRkaW5nIG9uZSB2ZWMgKi8KKwlwcmludGsoS0VSTl9FUlIgIkpGUzogYmlvX2FkZF9wYWdlIGZhaWxlZCB1bmV4cGVjdGVkbHlcbiIpOworCWdvdG8gc2tpcDsKK2R1bXBfYmlvOgorCWR1bXBfbWVtKCJiaW8iLCBiaW8sIHNpemVvZigqYmlvKSk7Citza2lwOgorCWJpb19wdXQoYmlvKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlkZWNfaW8ocGFnZSwgbGFzdF93cml0ZV9jb21wbGV0ZSk7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBtZXRhcGFnZV9yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7CisJdW5zaWduZWQgaW50IGJsb2NrX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzX3Blcl9wYWdlID0gUEFHRV9DQUNIRV9TSVpFID4+IGlub2RlLT5pX2Jsa2JpdHM7CisJc2VjdG9yX3QgcGFnZV9zdGFydDsJLyogYWRkcmVzcyBvZiBwYWdlIGluIGZzIGJsb2NrcyAqLworCXNlY3Rvcl90IHBibG9jazsKKwl1bnNpZ25lZCBpbnQgeGxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCXBhZ2Vfc3RhcnQgPSAoc2VjdG9yX3QpcGFnZS0+aW5kZXggPDwKKwkJICAgICAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpOworCisJYmxvY2tfb2Zmc2V0ID0gMDsKKwl3aGlsZSAoYmxvY2tfb2Zmc2V0IDwgYmxvY2tzX3Blcl9wYWdlKSB7CisJCXhsZW4gPSBibG9ja3NfcGVyX3BhZ2UgLSBibG9ja19vZmZzZXQ7CisJCXBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgKyBibG9ja19vZmZzZXQsCisJCQkJCSAgICAgJnhsZW4pOworCQlpZiAocGJsb2NrKSB7CisJCQlpZiAoIVBhZ2VQcml2YXRlKHBhZ2UpKQorCQkJCWluc2VydF9tZXRhcGFnZShwYWdlLCBOVUxMKTsKKwkJCWluY19pbyhwYWdlKTsKKwkJCWlmIChiaW8pCisJCQkJc3VibWl0X2JpbyhSRUFELCBiaW8pOworCisJCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIDEpOworCQkJYmlvLT5iaV9iZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKKwkJCWJpby0+Ymlfc2VjdG9yID0gcGJsb2NrIDw8IChpbm9kZS0+aV9ibGtiaXRzIC0gOSk7CisJCQliaW8tPmJpX2VuZF9pbyA9IG1ldGFwYWdlX3JlYWRfZW5kX2lvOworCQkJYmlvLT5iaV9wcml2YXRlID0gcGFnZTsKKwkJCWxlbiA9IHhsZW4gPDwgaW5vZGUtPmlfYmxrYml0czsKKwkJCW9mZnNldCA9IGJsb2NrX29mZnNldCA8PCBpbm9kZS0+aV9ibGtiaXRzOworCQkJaWYgKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGxlbiwgb2Zmc2V0KSA8IGxlbikKKwkJCQlnb3RvIGFkZF9mYWlsZWQ7CisJCQlibG9ja19vZmZzZXQgKz0geGxlbjsKKwkJfSBlbHNlCisJCQlibG9ja19vZmZzZXQrKzsKKwl9CisJaWYgKGJpbykKKwkJc3VibWl0X2JpbyhSRUFELCBiaW8pOworCWVsc2UKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gMDsKKworYWRkX2ZhaWxlZDoKKwlwcmludGsoS0VSTl9FUlIgIkpGUzogYmlvX2FkZF9wYWdlIGZhaWxlZCB1bmV4cGVjdGVkbHlcbiIpOworCWJpb19wdXQoYmlvKTsKKwlkZWNfaW8ocGFnZSwgbGFzdF9yZWFkX2NvbXBsZXRlKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBtZXRhcGFnZV9yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGdmcF9tYXNrKQoreworCXN0cnVjdCBtZXRhcGFnZSAqbXA7CisJaW50IGJ1c3kgPSAwOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFBBR0VfQ0FDSEVfU0laRTsgb2Zmc2V0ICs9IFBTSVpFKSB7CisJCW1wID0gcGFnZV90b19tcChwYWdlLCBvZmZzZXQpOworCisJCWlmICghbXApCisJCQljb250aW51ZTsKKworCQlqZnNfaW5mbygibWV0YXBhZ2VfcmVsZWFzZXBhZ2U6IG1wID0gMHglcCIsIG1wKTsKKwkJaWYgKG1wLT5jb3VudCB8fCBtcC0+bm9ob21lb2spIHsKKwkJCWpmc19pbmZvKCJjb3VudCA9ICVsZCwgbm9ob21lb2sgPSAlZCIsIG1wLT5jb3VudCwKKwkJCQkgbXAtPm5vaG9tZW9rKTsKKwkJCWJ1c3kgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJLy9XQVJOX09OKHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykpOworCQlpZiAodGVzdF9iaXQoTUVUQV9kaXJ0eSwgJm1wLT5mbGFnKSkgeworCQkJZHVtcF9tZW0oImRpcnR5IG1wIGluIG1ldGFwYWdlX3JlbGVhc2VwYWdlIiwgbXAsCisJCQkJIHNpemVvZihzdHJ1Y3QgbWV0YXBhZ2UpKTsKKwkJCWR1bXBfbWVtKCJwYWdlIiwgcGFnZSwgc2l6ZW9mKHN0cnVjdCBwYWdlKSk7CisJCQlkdW1wX3N0YWNrKCk7CisJCX0KKwkJV0FSTl9PTihtcC0+bHNuKTsKKwkJaWYgKG1wLT5sc24pCisJCQlyZW1vdmVfZnJvbV9sb2dzeW5jKG1wKTsKKwkJcmVtb3ZlX21ldGFwYWdlKHBhZ2UsIG1wKTsKKwkJSU5DUkVNRU5UKG1wU3RhdC5wYWdlZnJlZSk7CisJCWZyZWVfbWV0YXBhZ2UobXApOworCX0KKwlpZiAoYnVzeSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWV0YXBhZ2VfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCUJVR19PTihvZmZzZXQpOworCisJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIG1ldGFwYWdlX3JlbGVhc2VwYWdlKHBhZ2UsIDApOworfQorCitzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19tZXRhcGFnZV9hb3BzID0geworCS5yZWFkcGFnZQk9IG1ldGFwYWdlX3JlYWRwYWdlLAorCS53cml0ZXBhZ2UJPSBtZXRhcGFnZV93cml0ZXBhZ2UsCisJLnN5bmNfcGFnZQk9IGJsb2NrX3N5bmNfcGFnZSwKKwkucmVsZWFzZXBhZ2UJPSBtZXRhcGFnZV9yZWxlYXNlcGFnZSwKKwkuaW52YWxpZGF0ZXBhZ2UJPSBtZXRhcGFnZV9pbnZhbGlkYXRlcGFnZSwKKwkuc2V0X3BhZ2VfZGlydHkJPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKK307CisKIHN0cnVjdCBtZXRhcGFnZSAqX19nZXRfbWV0YXBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBsYmxvY2ssCiAJCQkJdW5zaWduZWQgaW50IHNpemUsIGludCBhYnNvbHV0ZSwKIAkJCQl1bnNpZ25lZCBsb25nIG5ldykKIHsKLQlzdHJ1Y3QgbWV0YXBhZ2UgKipoYXNoX3B0cjsKIAlpbnQgbDJCbG9ja3NQZXJQYWdlOwogCWludCBsMmJzaXplOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCXN0cnVjdCBtZXRhcGFnZSAqbXA7CisJc3RydWN0IG1ldGFwYWdlICptcCA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBwYWdlX2luZGV4OwogCXVuc2lnbmVkIGxvbmcgcGFnZV9vZmZzZXQ7CiAKLQlqZnNfaW5mbygiX19nZXRfbWV0YXBhZ2U6IGlub2RlID0gMHglcCwgbGJsb2NrID0gMHglbHgiLCBpbm9kZSwgbGJsb2NrKTsKKwlqZnNfaW5mbygiX19nZXRfbWV0YXBhZ2U6IGlubyA9ICVsZCwgbGJsb2NrID0gMHglbHgsIGFicz0lZCIsCisJCSBpbm9kZS0+aV9pbm8sIGxibG9jaywgYWJzb2x1dGUpOwogCisJbDJic2l6ZSA9IGlub2RlLT5pX2Jsa2JpdHM7CisJbDJCbG9ja3NQZXJQYWdlID0gUEFHRV9DQUNIRV9TSElGVCAtIGwyYnNpemU7CisJcGFnZV9pbmRleCA9IGxibG9jayA+PiBsMkJsb2Nrc1BlclBhZ2U7CisJcGFnZV9vZmZzZXQgPSAobGJsb2NrIC0gKHBhZ2VfaW5kZXggPDwgbDJCbG9ja3NQZXJQYWdlKSkgPDwgbDJic2l6ZTsKKwlpZiAoKHBhZ2Vfb2Zmc2V0ICsgc2l6ZSkgPiBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJamZzX2VycigiTWV0YURhdGEgY3Jvc3NlcyBwYWdlIGJvdW5kYXJ5ISEiKTsKKwkJamZzX2VycigibGJsb2NrID0gJWx4LCBzaXplICA9ICVkIiwgbGJsb2NrLCBzaXplKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJaWYgKGFic29sdXRlKQotCQltYXBwaW5nID0gaW5vZGUtPmlfc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZzsKKwkJbWFwcGluZyA9IEpGU19TQkkoaW5vZGUtPmlfc2IpLT5kaXJlY3RfaW5vZGUtPmlfbWFwcGluZzsKIAllbHNlIHsKIAkJLyoKIAkJICogSWYgYW4gbmZzIGNsaWVudCB0cmllcyB0byByZWFkIGFuIGlub2RlIHRoYXQgaXMgbGFyZ2VyCkBAIC0yMzcsMzEyICs2MzEsMjEyIEBACiAJCW1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCX0KIAotCWhhc2hfcHRyID0gbWV0YV9oYXNoKG1hcHBpbmcsIGxibG9jayk7Ci1hZ2FpbjoKLQlzcGluX2xvY2soJm1ldGFfbG9jayk7Ci0JbXAgPSBzZWFyY2hfaGFzaChoYXNoX3B0ciwgbWFwcGluZywgbGJsb2NrKTsKKwlpZiAobmV3ICYmIChQU0laRSA9PSBQQUdFX0NBQ0hFX1NJWkUpKSB7CisJCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgcGFnZV9pbmRleCk7CisJCWlmICghcGFnZSkgeworCQkJamZzX2VycigiZ3JhYl9jYWNoZV9wYWdlIGZhaWxlZCEiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwl9IGVsc2UgeworCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2VfaW5kZXgsCisJCQkgICAgKGZpbGxlcl90ICopbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlLCBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJamZzX2VycigicmVhZF9jYWNoZV9wYWdlIGZhaWxlZCEiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWxvY2tfcGFnZShwYWdlKTsKKwl9CisKKwltcCA9IHBhZ2VfdG9fbXAocGFnZSwgcGFnZV9vZmZzZXQpOwogCWlmIChtcCkgewotCSAgICAgIHBhZ2VfZm91bmQ6Ci0JCWlmICh0ZXN0X2JpdChNRVRBX3N0YWxlLCAmbXAtPmZsYWcpKSB7Ci0JCQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLQkJCW1zbGVlcCgxKTsKLQkJCWdvdG8gYWdhaW47CisJCWlmIChtcC0+bG9naWNhbF9zaXplICE9IHNpemUpIHsKKwkJCWpmc19lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICJfX2dldF9tZXRhcGFnZTogbXAtPmxvZ2ljYWxfc2l6ZSAhPSBzaXplIik7CisJCQlqZnNfZXJyKCJsb2dpY2FsX3NpemUgPSAlZCwgc2l6ZSA9ICVkIiwKKwkJCQltcC0+bG9naWNhbF9zaXplLCBzaXplKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCWdvdG8gdW5sb2NrOyAKIAkJfQogCQltcC0+Y291bnQrKzsKIAkJbG9ja19tZXRhcGFnZShtcCk7Ci0JCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwogCQlpZiAodGVzdF9iaXQoTUVUQV9kaXNjYXJkLCAmbXAtPmZsYWcpKSB7CiAJCQlpZiAoIW5ldykgewogCQkJCWpmc19lcnJvcihpbm9kZS0+aV9zYiwKIAkJCQkJICAiX19nZXRfbWV0YXBhZ2U6IHVzaW5nIGEgIgogCQkJCQkgICJkaXNjYXJkZWQgbWV0YXBhZ2UiKTsKLQkJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKLQkJCQlyZXR1cm4gTlVMTDsKKwkJCQlkaXNjYXJkX21ldGFwYWdlKG1wKTsKKwkJCQlnb3RvIHVubG9jazsgCiAJCQl9CiAJCQljbGVhcl9iaXQoTUVUQV9kaXNjYXJkLCAmbXAtPmZsYWcpOwogCQl9Ci0JCWpmc19pbmZvKCJfX2dldF9tZXRhcGFnZTogZm91bmQgMHglcCwgaW4gaGFzaCIsIG1wKTsKLQkJaWYgKG1wLT5sb2dpY2FsX3NpemUgIT0gc2l6ZSkgewotCQkJamZzX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgIl9fZ2V0X21ldGFwYWdlOiBtcC0+bG9naWNhbF9zaXplICE9IHNpemUiKTsKLQkJCXJlbGVhc2VfbWV0YXBhZ2UobXApOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAl9IGVsc2UgewotCQlsMmJzaXplID0gaW5vZGUtPmlfYmxrYml0czsKLQkJbDJCbG9ja3NQZXJQYWdlID0gUEFHRV9DQUNIRV9TSElGVCAtIGwyYnNpemU7Ci0JCXBhZ2VfaW5kZXggPSBsYmxvY2sgPj4gbDJCbG9ja3NQZXJQYWdlOwotCQlwYWdlX29mZnNldCA9IChsYmxvY2sgLSAocGFnZV9pbmRleCA8PCBsMkJsb2Nrc1BlclBhZ2UpKSA8PAotCQkgICAgbDJic2l6ZTsKLQkJaWYgKChwYWdlX29mZnNldCArIHNpemUpID4gUEFHRV9DQUNIRV9TSVpFKSB7Ci0JCQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLQkJCWpmc19lcnIoIk1ldGFEYXRhIGNyb3NzZXMgcGFnZSBib3VuZGFyeSEhIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQkKLQkJLyoKLQkJICogTG9ja3MgaGVsZCBvbiBhZ2dyZWdhdGUgaW5vZGUgcGFnZXMgYXJlIHVzdWFsbHkKLQkJICogbm90IGhlbGQgbG9uZywgYW5kIHRoZXkgYXJlIHRha2VuIGluIGNyaXRpY2FsIGNvZGUKLQkJICogcGF0aHMgKGNvbW1pdHRpbmcgZGlydHkgaW5vZGVzLCB0eENvbW1pdCB0aHJlYWQpIAotCQkgKiAKLQkJICogQXR0ZW1wdCB0byBnZXQgbWV0YXBhZ2Ugd2l0aG91dCBibG9ja2luZywgdGFwcGluZyBpbnRvCi0JCSAqIHJlc2VydmVzIGlmIG5lY2Vzc2FyeS4KLQkJICovCi0JCW1wID0gTlVMTDsKLQkJaWYgKEpGU19JUChpbm9kZSktPmZpbGVzZXQgPT0gQUdHUkVHQVRFX0kpIHsKLQkJCW1wID0gYWxsb2NfbWV0YXBhZ2UoR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIW1wKSB7Ci0JCQkJLyoKLQkJCQkgKiBtZW1wb29sIGlzIHN1cHBvc2VkIHRvIHByb3RlY3QgdXMgZnJvbQotCQkJCSAqIGZhaWxpbmcgaGVyZS4gIFdlIHdpbGwgdHJ5IGEgYmxvY2tpbmcKLQkJCQkgKiBjYWxsLCBidXQgYSBkZWFkbG9jayBpcyBwb3NzaWJsZSBoZXJlCi0JCQkJICovCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiX19nZXRfbWV0YXBhZ2U6IGF0b21pYyBjYWxsIHRvIG1lbXBvb2xfYWxsb2MgZmFpbGVkLlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiV2lsbCBhdHRlbXB0IGJsb2NraW5nIGNhbGxcbiIpOwotCQkJfQotCQl9Ci0JCWlmICghbXApIHsKLQkJCXN0cnVjdCBtZXRhcGFnZSAqbXAyOwotCi0JCQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLQkJCW1wID0gYWxsb2NfbWV0YXBhZ2UoR0ZQX05PRlMpOwotCQkJc3Bpbl9sb2NrKCZtZXRhX2xvY2spOwotCi0JCQkvKiB3ZSBkcm9wcGVkIHRoZSBtZXRhX2xvY2ssIHdlIG5lZWQgdG8gc2VhcmNoIHRoZQotCQkJICogaGFzaCBhZ2Fpbi4KLQkJCSAqLwotCQkJbXAyID0gc2VhcmNoX2hhc2goaGFzaF9wdHIsIG1hcHBpbmcsIGxibG9jayk7Ci0JCQlpZiAobXAyKSB7Ci0JCQkJZnJlZV9tZXRhcGFnZShtcCk7Ci0JCQkJbXAgPSBtcDI7Ci0JCQkJZ290byBwYWdlX2ZvdW5kOwotCQkJfQotCQl9CisJCUlOQ1JFTUVOVChtcFN0YXQucGFnZWFsbG9jKTsKKwkJbXAgPSBhbGxvY19tZXRhcGFnZShHRlBfTk9GUyk7CisJCW1wLT5wYWdlID0gcGFnZTsKIAkJbXAtPmZsYWcgPSAwOwotCQlsb2NrX21ldGFwYWdlKG1wKTsKLQkJaWYgKGFic29sdXRlKQotCQkJc2V0X2JpdChNRVRBX2Fic29sdXRlLCAmbXAtPmZsYWcpOwogCQltcC0+eGZsYWcgPSBDT01NSVRfUEFHRTsKIAkJbXAtPmNvdW50ID0gMTsKLQkJYXRvbWljX3NldCgmbXAtPm5vaG9tZW9rLDApOwotCQltcC0+bWFwcGluZyA9IG1hcHBpbmc7Ci0JCW1wLT5pbmRleCA9IGxibG9jazsKLQkJbXAtPnBhZ2UgPSBOVUxMOworCQltcC0+bm9ob21lb2sgPSAwOwogCQltcC0+bG9naWNhbF9zaXplID0gc2l6ZTsKLQkJYWRkX3RvX2hhc2gobXAsIGhhc2hfcHRyKTsKLQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0KLQkJaWYgKG5ldykgewotCQkJamZzX2luZm8oIl9fZ2V0X21ldGFwYWdlOiBDYWxsaW5nIGdyYWJfY2FjaGVfcGFnZSIpOwotCQkJbXAtPnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgcGFnZV9pbmRleCk7Ci0JCQlpZiAoIW1wLT5wYWdlKSB7Ci0JCQkJamZzX2VycigiZ3JhYl9jYWNoZV9wYWdlIGZhaWxlZCEiKTsKLQkJCQlnb3RvIGZyZWVpdDsKLQkJCX0gZWxzZSB7Ci0JCQkJSU5DUkVNRU5UKG1wU3RhdC5wYWdlYWxsb2MpOwotCQkJCXVubG9ja19wYWdlKG1wLT5wYWdlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWpmc19pbmZvKCJfX2dldF9tZXRhcGFnZTogQ2FsbGluZyByZWFkX2NhY2hlX3BhZ2UiKTsKLQkJCW1wLT5wYWdlID0gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIGxibG9jaywKLQkJCQkgICAgKGZpbGxlcl90ICopbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlLCBOVUxMKTsKLQkJCWlmIChJU19FUlIobXAtPnBhZ2UpKSB7Ci0JCQkJamZzX2VycigicmVhZF9jYWNoZV9wYWdlIGZhaWxlZCEiKTsKLQkJCQlnb3RvIGZyZWVpdDsKLQkJCX0gZWxzZQotCQkJCUlOQ1JFTUVOVChtcFN0YXQucGFnZWFsbG9jKTsKKwkJbXAtPmRhdGEgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBwYWdlX29mZnNldDsKKwkJbXAtPmluZGV4ID0gbGJsb2NrOworCQlpZiAodW5saWtlbHkoaW5zZXJ0X21ldGFwYWdlKHBhZ2UsIG1wKSkpIHsKKwkJCWZyZWVfbWV0YXBhZ2UobXApOworCQkJZ290byB1bmxvY2s7CiAJCX0KLQkJbXAtPmRhdGEgPSBrbWFwKG1wLT5wYWdlKSArIHBhZ2Vfb2Zmc2V0OworCQlsb2NrX21ldGFwYWdlKG1wKTsKIAl9CiAKLQlpZiAobmV3KQorCWlmIChuZXcpIHsKKwkJamZzX2luZm8oInplcm9pbmcgbXAgPSAweCVwIiwgbXApOwogCQltZW1zZXQobXAtPmRhdGEsIDAsIFBTSVpFKTsKKwl9CiAKLQlqZnNfaW5mbygiX19nZXRfbWV0YXBhZ2U6IHJldHVybmluZyA9IDB4JXAiLCBtcCk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJamZzX2luZm8oIl9fZ2V0X21ldGFwYWdlOiByZXR1cm5pbmcgPSAweCVwIGRhdGEgPSAweCVwIiwgbXAsIG1wLT5kYXRhKTsKIAlyZXR1cm4gbXA7CiAKLWZyZWVpdDoKLQlzcGluX2xvY2soJm1ldGFfbG9jayk7Ci0JcmVtb3ZlX2Zyb21faGFzaChtcCwgaGFzaF9wdHIpOwotCWZyZWVfbWV0YXBhZ2UobXApOwotCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwordW5sb2NrOgorCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGhvbGRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICogbXAsIGludCBmb3JjZSkKK3ZvaWQgZ3JhYl9tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKiBtcCkKIHsKLQlzcGluX2xvY2soJm1ldGFfbG9jayk7Ci0KLQltcC0+Y291bnQrKzsKLQotCWlmIChmb3JjZSkgewotCQlBU1NFUlQgKCEodGVzdF9iaXQoTUVUQV9mb3JjZWQsICZtcC0+ZmxhZykpKTsKLQkJaWYgKHRyeWxvY2tfbWV0YXBhZ2UobXApKQotCQkJc2V0X2JpdChNRVRBX2ZvcmNlZCwgJm1wLT5mbGFnKTsKLQl9IGVsc2UKLQkJbG9ja19tZXRhcGFnZShtcCk7Ci0KLQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgX193cml0ZV9tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKiBtcCkKLXsKLQlpbnQgbDJic2l6ZSA9IG1wLT5tYXBwaW5nLT5ob3N0LT5pX2Jsa2JpdHM7Ci0JaW50IGwyQmxvY2tzUGVyUGFnZSA9IFBBR0VfQ0FDSEVfU0hJRlQgLSBsMmJzaXplOwotCXVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleDsKLQl1bnNpZ25lZCBsb25nIHBhZ2Vfb2Zmc2V0OwotCWludCByYzsKLQotCWpmc19pbmZvKCJfX3dyaXRlX21ldGFwYWdlOiBtcCA9IDB4JXAiLCBtcCk7Ci0KLQlwYWdlX2luZGV4ID0gbXAtPnBhZ2UtPmluZGV4OwotCXBhZ2Vfb2Zmc2V0ID0KLQkgICAgKG1wLT5pbmRleCAtIChwYWdlX2luZGV4IDw8IGwyQmxvY2tzUGVyUGFnZSkpIDw8IGwyYnNpemU7Ci0KKwlqZnNfaW5mbygiZ3JhYl9tZXRhcGFnZTogbXAgPSAweCVwIiwgbXApOworCXBhZ2VfY2FjaGVfZ2V0KG1wLT5wYWdlKTsKIAlsb2NrX3BhZ2UobXAtPnBhZ2UpOwotCXJjID0gbXAtPm1hcHBpbmctPmFfb3BzLT5wcmVwYXJlX3dyaXRlKE5VTEwsIG1wLT5wYWdlLCBwYWdlX29mZnNldCwKLQkJCQkJICAgICAgIHBhZ2Vfb2Zmc2V0ICsKLQkJCQkJICAgICAgIG1wLT5sb2dpY2FsX3NpemUpOwotCWlmIChyYykgewotCQlqZnNfZXJyKCJwcmVwYXJlX3dyaXRlIHJldHVybiAlZCEiLCByYyk7Ci0JCUNsZWFyUGFnZVVwdG9kYXRlKG1wLT5wYWdlKTsKLQkJdW5sb2NrX3BhZ2UobXAtPnBhZ2UpOwotCQljbGVhcl9iaXQoTUVUQV9kaXJ0eSwgJm1wLT5mbGFnKTsKLQkJcmV0dXJuOwotCX0KLQlyYyA9IG1wLT5tYXBwaW5nLT5hX29wcy0+Y29tbWl0X3dyaXRlKE5VTEwsIG1wLT5wYWdlLCBwYWdlX29mZnNldCwKLQkJCQkJICAgICAgcGFnZV9vZmZzZXQgKwotCQkJCQkgICAgICBtcC0+bG9naWNhbF9zaXplKTsKLQlpZiAocmMpIHsKLQkJamZzX2VycigiY29tbWl0X3dyaXRlIHJldHVybmVkICVkIiwgcmMpOwotCX0KLQorCW1wLT5jb3VudCsrOworCWxvY2tfbWV0YXBhZ2UobXApOwogCXVubG9ja19wYWdlKG1wLT5wYWdlKTsKLQljbGVhcl9iaXQoTUVUQV9kaXJ0eSwgJm1wLT5mbGFnKTsKLQotCWpmc19pbmZvKCJfX3dyaXRlX21ldGFwYWdlIGRvbmUiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKK3ZvaWQgZm9yY2VfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1wLT5wYWdlOwotCisJamZzX2luZm8oImZvcmNlX21ldGFwYWdlOiBtcCA9IDB4JXAiLCBtcCk7CisJc2V0X2JpdChNRVRBX2ZvcmNld3JpdGUsICZtcC0+ZmxhZyk7CisJY2xlYXJfYml0KE1FVEFfc3luYywgJm1wLT5mbGFnKTsKIAlwYWdlX2NhY2hlX2dldChwYWdlKTsKIAlsb2NrX3BhZ2UocGFnZSk7Ci0KLQkvKiB3ZSdyZSBkb25lIHdpdGggdGhpcyBwYWdlIC0gbm8gbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzICovCi0JaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCi0JCXdyaXRlX29uZV9wYWdlKHBhZ2UsIDEpOwotCWVsc2UKLQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJd3JpdGVfb25lX3BhZ2UocGFnZSwgMSk7CisJY2xlYXJfYml0KE1FVEFfZm9yY2V3cml0ZSwgJm1wLT5mbGFnKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiB9CiAKK2V4dGVybiB2b2lkIGhvbGRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlsb2NrX3BhZ2UobXAtPnBhZ2UpOworfQorCitleHRlcm4gdm9pZCBwdXRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlpZiAobXAtPmNvdW50IHx8IG1wLT5ub2hvbWVvaykgeworCQkvKiBTb21lb25lIGVsc2Ugd2lsbCByZWxlYXNlIHRoaXMgKi8KKwkJdW5sb2NrX3BhZ2UobXAtPnBhZ2UpOworCQlyZXR1cm47CisJfQorCXBhZ2VfY2FjaGVfZ2V0KG1wLT5wYWdlKTsKKwltcC0+Y291bnQrKzsKKwlsb2NrX21ldGFwYWdlKG1wKTsKKwl1bmxvY2tfcGFnZShtcC0+cGFnZSk7CisJcmVsZWFzZV9tZXRhcGFnZShtcCk7Cit9CisKIHZvaWQgcmVsZWFzZV9tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKiBtcCkKIHsKLQlzdHJ1Y3QgamZzX2xvZyAqbG9nOwotCisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBtcC0+cGFnZTsKIAlqZnNfaW5mbygicmVsZWFzZV9tZXRhcGFnZTogbXAgPSAweCVwLCBmbGFnID0gMHglbHgiLCBtcCwgbXAtPmZsYWcpOwogCi0Jc3Bpbl9sb2NrKCZtZXRhX2xvY2spOwotCWlmICh0ZXN0X2JpdChNRVRBX2ZvcmNlZCwgJm1wLT5mbGFnKSkgewotCQljbGVhcl9iaXQoTUVUQV9mb3JjZWQsICZtcC0+ZmxhZyk7Ci0JCW1wLT5jb3VudC0tOwotCQlzcGluX3VubG9jaygmbWV0YV9sb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlCVUdfT04oIXBhZ2UpOworCisJbG9ja19wYWdlKHBhZ2UpOworCXVubG9ja19tZXRhcGFnZShtcCk7CiAKIAlhc3NlcnQobXAtPmNvdW50KTsKLQlpZiAoLS1tcC0+Y291bnQgfHwgYXRvbWljX3JlYWQoJm1wLT5ub2hvbWVvaykpIHsKLQkJdW5sb2NrX21ldGFwYWdlKG1wKTsKLQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7CisJaWYgKC0tbXAtPmNvdW50IHx8IG1wLT5ub2hvbWVvaykgeworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKG1wLT5wYWdlKSB7Ci0JCXNldF9iaXQoTUVUQV9zdGFsZSwgJm1wLT5mbGFnKTsKLQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCWt1bm1hcChtcC0+cGFnZSk7Ci0JCW1wLT5kYXRhID0gTlVMTDsKLQkJaWYgKHRlc3RfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZykpCi0JCQlfX3dyaXRlX21ldGFwYWdlKG1wKTsKKwlpZiAodGVzdF9iaXQoTUVUQV9kaXJ0eSwgJm1wLT5mbGFnKSkgeworCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJaWYgKHRlc3RfYml0KE1FVEFfc3luYywgJm1wLT5mbGFnKSkgewotCQkJc3luY19tZXRhcGFnZShtcCk7CiAJCQljbGVhcl9iaXQoTUVUQV9zeW5jLCAmbXAtPmZsYWcpOworCQkJd3JpdGVfb25lX3BhZ2UocGFnZSwgMSk7CisJCQlsb2NrX3BhZ2UocGFnZSk7IC8qIHdyaXRlX29uZV9wYWdlIHVubG9ja3MgdGhlIHBhZ2UgKi8KIAkJfQorCX0gZWxzZSBpZiAobXAtPmxzbikJLyogZGlzY2FyZF9tZXRhcGFnZSBkb2Vzbid0IHJlbW92ZSBpdCAqLworCQlyZW1vdmVfZnJvbV9sb2dzeW5jKG1wKTsKIAotCQlpZiAodGVzdF9iaXQoTUVUQV9kaXNjYXJkLCAmbXAtPmZsYWcpKSB7Ci0JCQlsb2NrX3BhZ2UobXAtPnBhZ2UpOwotCQkJYmxvY2tfaW52YWxpZGF0ZXBhZ2UobXAtPnBhZ2UsIDApOwotCQkJdW5sb2NrX3BhZ2UobXAtPnBhZ2UpOworI2lmIE1QU19QRVJfUEFHRSA9PSAxCisJLyoKKwkgKiBJZiB3ZSBrbm93IHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhZ2UsIHdlIGNhbiB0aHJvdworCSAqIHRoZSBwYWdlIG91dCBvZiB0aGUgcGFnZSBjYWNoZS4gIElmIHBhZ2VzIGFyZSBsYXJnZXIsIHdlCisJICogZG9uJ3Qgd2FudCB0byBkbyB0aGlzLgorCSAqLworCisJLyogUmV0ZXN0IG1wLT5jb3VudCBzaW5jZSB3ZSBtYXkgaGF2ZSByZWxlYXNlZCBwYWdlIGxvY2sgKi8KKwlpZiAodGVzdF9iaXQoTUVUQV9kaXNjYXJkLCAmbXAtPmZsYWcpICYmICFtcC0+Y291bnQpIHsKKwkJY2xlYXJfcGFnZV9kaXJ0eShwYWdlKTsKKwkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisjaWZkZWYgX05PVF9ZRVQKKwkJaWYgKHBhZ2UtPm1hcHBpbmcpIHsKKwkJLyogUmVtb3ZlIGZyb20gcGFnZSBjYWNoZSBhbmQgcGFnZSBjYWNoZSByZWZlcmVuY2UgKi8KKwkJCXJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQltZXRhcGFnZV9yZWxlYXNlcGFnZShwYWdlLCAwKTsKIAkJfQotCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShtcC0+cGFnZSk7Ci0JCW1wLT5wYWdlID0gTlVMTDsKLQkJSU5DUkVNRU5UKG1wU3RhdC5wYWdlZnJlZSk7Ci0JCXNwaW5fbG9jaygmbWV0YV9sb2NrKTsKKyNlbmRpZgogCX0KLQotCWlmIChtcC0+bHNuKSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSBtZXRhcGFnZSBmcm9tIGxvZ3N5bmNsaXN0LgotCQkgKi8KLQkJbG9nID0gbXAtPmxvZzsKLQkJTE9HU1lOQ19MT0NLKGxvZyk7Ci0JCW1wLT5sb2cgPSBOVUxMOwotCQltcC0+bHNuID0gMDsKLQkJbXAtPmNsc24gPSAwOwotCQlsb2ctPmNvdW50LS07Ci0JCWxpc3RfZGVsKCZtcC0+c3luY2xpc3QpOwotCQlMT0dTWU5DX1VOTE9DSyhsb2cpOwotCX0KLQlyZW1vdmVfZnJvbV9oYXNoKG1wLCBtZXRhX2hhc2gobXAtPm1hcHBpbmcsIG1wLT5pbmRleCkpOwotCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwotCi0JZnJlZV9tZXRhcGFnZShtcCk7CisjZWxzZQorCS8qIFRyeSB0byBrZWVwIG1ldGFwYWdlcyBmcm9tIHVzaW5nIHVwIHRvbyBtdWNoIG1lbW9yeSAqLworCWRyb3BfbWV0YXBhZ2UocGFnZSwgbXApOworI2VuZGlmCisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogfQogCiB2b2lkIF9faW52YWxpZGF0ZV9tZXRhcGFnZXMoc3RydWN0IGlub2RlICppcCwgczY0IGFkZHIsIGludCBsZW4pCiB7Ci0Jc3RydWN0IG1ldGFwYWdlICoqaGFzaF9wdHI7Ci0JdW5zaWduZWQgbG9uZyBsYmxvY2s7CisJc2VjdG9yX3QgbGJsb2NrOwogCWludCBsMkJsb2Nrc1BlclBhZ2UgPSBQQUdFX0NBQ0hFX1NISUZUIC0gaXAtPmlfYmxrYml0czsKKwlpbnQgQmxvY2tzUGVyUGFnZSA9IDEgPDwgbDJCbG9ja3NQZXJQYWdlOwogCS8qIEFsbCBjYWxsZXJzIGFyZSBpbnRlcmVzdGVkIGluIGJsb2NrIGRldmljZSdzIG1hcHBpbmcgKi8KLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX3NiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPQorCQlKRlNfU0JJKGlwLT5pX3NiKS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmc7CiAJc3RydWN0IG1ldGFwYWdlICptcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCiAJLyoKLQkgKiBGaXJzdCwgbWFyayBtZXRhcGFnZXMgdG8gZGlzY2FyZC4gIFRoZXkgd2lsbCBldmVudHVhbGx5IGJlCisJICogTWFyayBtZXRhcGFnZXMgdG8gZGlzY2FyZC4gIFRoZXkgd2lsbCBldmVudHVhbGx5IGJlCiAJICogcmVsZWFzZWQsIGJ1dCBzaG91bGQgbm90IGJlIHdyaXR0ZW4uCiAJICovCi0JZm9yIChsYmxvY2sgPSBhZGRyOyBsYmxvY2sgPCBhZGRyICsgbGVuOwotCSAgICAgbGJsb2NrICs9IDEgPDwgbDJCbG9ja3NQZXJQYWdlKSB7Ci0JCWhhc2hfcHRyID0gbWV0YV9oYXNoKG1hcHBpbmcsIGxibG9jayk7Ci1hZ2FpbjoKLQkJc3Bpbl9sb2NrKCZtZXRhX2xvY2spOwotCQltcCA9IHNlYXJjaF9oYXNoKGhhc2hfcHRyLCBtYXBwaW5nLCBsYmxvY2spOwotCQlpZiAobXApIHsKLQkJCWlmICh0ZXN0X2JpdChNRVRBX3N0YWxlLCAmbXAtPmZsYWcpKSB7Ci0JCQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCQkJbXNsZWVwKDEpOwotCQkJCWdvdG8gYWdhaW47Ci0JCQl9CisJZm9yIChsYmxvY2sgPSBhZGRyICYgfihCbG9ja3NQZXJQYWdlIC0gMSk7IGxibG9jayA8IGFkZHIgKyBsZW47CisJICAgICBsYmxvY2sgKz0gQmxvY2tzUGVyUGFnZSkgeworCQlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgbGJsb2NrID4+IGwyQmxvY2tzUGVyUGFnZSk7CisJCWlmICghcGFnZSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFBBR0VfQ0FDSEVfU0laRTsgb2Zmc2V0ICs9IFBTSVpFKSB7CisJCQltcCA9IHBhZ2VfdG9fbXAocGFnZSwgb2Zmc2V0KTsKKwkJCWlmICghbXApCisJCQkJY29udGludWU7CisJCQlpZiAobXAtPmluZGV4IDwgYWRkcikKKwkJCQljb250aW51ZTsKKwkJCWlmIChtcC0+aW5kZXggPj0gYWRkciArIGxlbikKKwkJCQlicmVhazsKIAogCQkJY2xlYXJfYml0KE1FVEFfZGlydHksICZtcC0+ZmxhZyk7CiAJCQlzZXRfYml0KE1FVEFfZGlzY2FyZCwgJm1wLT5mbGFnKTsKLQkJCXNwaW5fdW5sb2NrKCZtZXRhX2xvY2spOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2soJm1ldGFfbG9jayk7Ci0JCQlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgbGJsb2NrPj5sMkJsb2Nrc1BlclBhZ2UpOwotCQkJaWYgKHBhZ2UpIHsKLQkJCQlibG9ja19pbnZhbGlkYXRlcGFnZShwYWdlLCAwKTsKLQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQl9CisJCQlpZiAobXAtPmxzbikKKwkJCQlyZW1vdmVfZnJvbV9sb2dzeW5jKG1wKTsKIAkJfQorCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5oIGIvZnMvamZzL2pmc19tZXRhcGFnZS5oCmluZGV4IDBlNThhYmEuLjk5MWU5ZmIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaAorKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmgKQEAgLTMzLDM4ICszMywyNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZzsJLyogU2VlIEJlbG93ICovCiAJdW5zaWduZWQgbG9uZyBjb3VudDsJLyogUmVmZXJlbmNlIGNvdW50ICovCiAJdm9pZCAqZGF0YTsJCS8qIERhdGEgcG9pbnRlciAqLwotCi0JLyogbGlzdCBtYW5hZ2VtZW50IHN0dWZmICovCi0Jc3RydWN0IG1ldGFwYWdlICpoYXNoX3ByZXY7Ci0Jc3RydWN0IG1ldGFwYWdlICpoYXNoX25leHQ7CS8qIEFsc28gdXNlZCBmb3IgZnJlZSBsaXN0ICovCi0KLQkvKgotCSAqIG1hcHBpbmcgJiBpbmRleCBiZWNvbWUgcmVkdW5kYW50LCBidXQgd2UgbmVlZCB0aGVzZSBoZXJlIHRvCi0JICogYWRkIHRoZSBtZXRhcGFnZSB0byB0aGUgaGFzaCBiZWZvcmUgd2UgaGF2ZSB0aGUgcmVhbCBwYWdlCi0JICovCi0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7Ci0JdW5zaWduZWQgbG9uZyBpbmRleDsKKwlzZWN0b3JfdCBpbmRleDsgCS8qIGJsb2NrIGFkZHJlc3Mgb2YgcGFnZSAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAKIAkvKiBpbXBsZW1lbnRhdGlvbiAqLwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgbG9naWNhbF9zaXplOworCXVuc2lnbmVkIGludCBsb2dpY2FsX3NpemU7CiAKIAkvKiBKb3VybmFsIG1hbmFnZW1lbnQgKi8KIAlpbnQgY2xzbjsKLQlhdG9taWNfdCBub2hvbWVvazsKKwlpbnQgbm9ob21lb2s7CiAJc3RydWN0IGpmc19sb2cgKmxvZzsKIH07CiAKIC8qIG1ldGFwYWdlIGZsYWcgKi8KICNkZWZpbmUgTUVUQV9sb2NrZWQJMAotI2RlZmluZSBNRVRBX2Fic29sdXRlCTEKLSNkZWZpbmUgTUVUQV9mcmVlCTIKLSNkZWZpbmUgTUVUQV9kaXJ0eQkzCi0jZGVmaW5lIE1FVEFfc3luYwk0Ci0jZGVmaW5lIE1FVEFfZGlzY2FyZAk1Ci0jZGVmaW5lIE1FVEFfZm9yY2VkCTYKLSNkZWZpbmUgTUVUQV9zdGFsZQk3CisjZGVmaW5lIE1FVEFfZnJlZQkxCisjZGVmaW5lIE1FVEFfZGlydHkJMgorI2RlZmluZSBNRVRBX3N5bmMJMworI2RlZmluZSBNRVRBX2Rpc2NhcmQJNAorI2RlZmluZSBNRVRBX2ZvcmNld3JpdGUJNQorI2RlZmluZSBNRVRBX2lvCQk2CiAKICNkZWZpbmUgbWFya19tZXRhcGFnZV9kaXJ0eShtcCkgc2V0X2JpdChNRVRBX2RpcnR5LCAmKG1wKS0+ZmxhZykKIApAQCAtODAsNyArNjksMTYgQEAKIAkgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIFRSVUUpCiAKIGV4dGVybiB2b2lkIHJlbGVhc2VfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOwotZXh0ZXJuIHZvaWQgaG9sZF9tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKiwgaW50KTsKK2V4dGVybiB2b2lkIGdyYWJfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOworZXh0ZXJuIHZvaWQgZm9yY2VfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOworCisvKgorICogaG9sZF9tZXRhcGFnZSBhbmQgcHV0X21ldGFwYWdlIGFyZSB1c2VkIGluIGNvbmp1Y3Rpb24uICBUaGUgcGFnZSBsb2NrCisgKiBpcyBub3QgZHJvcHBlZCBiZXR3ZWVuIHRoZSB0d28sIHNvIG5vIG90aGVyIHRocmVhZHMgY2FuIGdldCBvciByZWxlYXNlCisgKiB0aGUgbWV0YXBhZ2UKKyAqLworZXh0ZXJuIHZvaWQgaG9sZF9tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKik7CitleHRlcm4gdm9pZCBwdXRfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICptcCkKIHsKQEAgLTEwMSw2ICs5OSw0NiBAQAogCXJlbGVhc2VfbWV0YXBhZ2UobXApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbWV0YXBhZ2Vfbm9ob21lb2soc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1wLT5wYWdlOworCWxvY2tfcGFnZShwYWdlKTsKKwlpZiAoIW1wLT5ub2hvbWVvaysrKSB7CisJCW1hcmtfbWV0YXBhZ2VfZGlydHkobXApOworCQlwYWdlX2NhY2hlX2dldChwYWdlKTsKKwkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwl9CisJdW5sb2NrX3BhZ2UocGFnZSk7Cit9CisKKy8qCisgKiBUaGlzIHNlcmlhbGl6ZXMgYWNjZXNzIHRvIG1wLT5sc24gd2hlbiBtZXRhcGFnZXMgYXJlIGFkZGVkIHRvIGxvZ3N5bmNsaXN0CisgKiB3aXRob3V0IHNldHRpbmcgbm9ob21lb2suICBpLmUuIHVwZGF0aW5nIGltYXAgJiBkbWFwCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtZXRhcGFnZV93YWl0X2Zvcl9pbyhzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQoreworCWlmICh0ZXN0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpKQorCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKG1wLT5wYWdlKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYWxyZWFkeSBob2xkaW5nIHRoZSBtZXRhcGFnZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX21ldGFwYWdlX2hvbWVvayhzdHJ1Y3QgbWV0YXBhZ2UgKm1wKQoreworCWlmICghLS1tcC0+bm9ob21lb2spCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShtcC0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZXRhcGFnZV9ob21lb2soc3RydWN0IG1ldGFwYWdlICptcCkKK3sKKwlob2xkX21ldGFwYWdlKG1wKTsKKwlfbWV0YXBhZ2VfaG9tZW9rKG1wKTsKKwlwdXRfbWV0YXBhZ2UobXApOworfQorCitleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wczsKKwogLyoKICAqIFRoaXMgcm91dGluZXMgaW52YWxpZGF0ZSBhbGwgcGFnZXMgZm9yIGFuIGV4dGVudC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tb3VudC5jIGIvZnMvamZzL2pmc19tb3VudC5jCmluZGV4IGM1MzVmZmQuLjAzMmQxMTEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbW91bnQuYworKysgYi9mcy9qZnMvamZzX21vdW50LmMKQEAgLTI4NSwxMSArMjg1LDYgQEAKIAkgKi8KIAlsb2dNT1VOVChzYik7CiAKLQkvKgotCSAqIFNldCBwYWdlIGNhY2hlIGFsbG9jYXRpb24gcG9saWN5Ci0JICovCi0JbWFwcGluZ19zZXRfZ2ZwX21hc2soc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZywgR0ZQX05PRlMpOwotCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R4bm1nci5jIGIvZnMvamZzL2pmc190eG5tZ3IuYwppbmRleCBmNDAzMDFkOS4uZTkzZDAxYSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eG5tZ3IuYworKysgYi9mcy9qZnMvamZzX3R4bm1nci5jCkBAIC0yMjcsNiArMjI3LDcgQEAKIAogc3RhdGljIHZvaWQgdHhMb2NrRnJlZShsaWRfdCBsaWQpCiB7CisJVHhMb2NrW2xpZF0udGlkID0gMDsKIAlUeExvY2tbbGlkXS5uZXh0ID0gVHhBbmNob3IuZnJlZWxvY2s7CiAJVHhBbmNob3IuZnJlZWxvY2sgPSBsaWQ7CiAJVHhBbmNob3IudGxvY2tzSW5Vc2UtLTsKQEAgLTU2Niw5ICs1NjcsNiBAQAogCQkgKiBzeW5jaHJvbml6ZSB3aXRoIGxvZ3N5bmMgYmFycmllcgogCQkgKi8KIAkJaWYgKHRlc3RfYml0KGxvZ19TWU5DQkFSUklFUiwgJmxvZy0+ZmxhZykpIHsKLQkJCS8qIGZvcndhcmQgbG9nIHN5bmNwdCAqLwotCQkJLyogbG1TeW5jKGxvZyk7ICovCi0KIAkJCWpmc19pbmZvKCJsb2cgYmFycmllciBvZmY6IDB4JXgiLCBsb2ctPmxzbik7CiAKIAkJCS8qIGVuYWJsZSBuZXcgdHJhbnNhY3Rpb25zIHN0YXJ0ICovCkBAIC01NzYsMTUgKzU3NCwyMiBAQAogCiAJCQkvKiB3YWtldXAgYWxsIHdhaXRvcnMgZm9yIGxvZ3N5bmMgYmFycmllciAqLwogCQkJVFhOX1dBS0VVUCgmbG9nLT5zeW5jd2FpdCk7CisKKwkJCVRYTl9VTkxPQ0soKTsKKworCQkJLyogZm9yd2FyZCBsb2cgc3luY3B0ICovCisJCQlqZnNfc3luY3B0KGxvZyk7CisKKwkJCWdvdG8gd2FrZXVwOwogCQl9CiAJfQogCisJVFhOX1VOTE9DSygpOword2FrZXVwOgogCS8qCiAJICogd2FrZXVwIGFsbCB3YWl0b3JzIGZvciBhIGZyZWUgdGJsb2NrCiAJICovCiAJVFhOX1dBS0VVUCgmVHhBbmNob3IuZnJlZXdhaXQpOwotCi0JVFhOX1VOTE9DSygpOwogfQogCiAKQEAgLTYzMyw4ICs2MzgsMTAgQEAKIAogCS8qIGlzIHBhZ2UgbG9ja2VkIGJ5IHRoZSByZXF1ZXN0ZXIgdHJhbnNhY3Rpb24gPyAqLwogCXRsY2sgPSBsaWRfdG9fdGxvY2sobGlkKTsKLQlpZiAoKHh0aWQgPSB0bGNrLT50aWQpID09IHRpZCkKKwlpZiAoKHh0aWQgPSB0bGNrLT50aWQpID09IHRpZCkgeworCQlUWE5fVU5MT0NLKCk7CiAJCWdvdG8gZ3JhbnRMb2NrOworCX0KIAogCS8qCiAJICogaXMgcGFnZSBsb2NrZWQgYnkgYW5vbnltb3VzIHRyYW5zYWN0aW9uL2xvY2sgPwpAQCAtNjQ5LDYgKzY1Niw3IEBACiAJICovCiAJaWYgKHh0aWQgPT0gMCkgewogCQl0bGNrLT50aWQgPSB0aWQ7CisJCVRYTl9VTkxPQ0soKTsKIAkJdGJsayA9IHRpZF90b190YmxvY2sodGlkKTsKIAkJLyoKIAkJICogVGhlIG9yZGVyIG9mIHRoZSB0bG9ja3MgaW4gdGhlIHRyYW5zYWN0aW9uIGlzIGltcG9ydGFudApAQCAtNzA2LDE3ICs3MTQsMTggQEAKIAkgKi8KIAl0bGNrLT50aWQgPSB0aWQ7CiAKKwlUWE5fVU5MT0NLKCk7CisKIAkvKiBtYXJrIHRsb2NrIGZvciBtZXRhLWRhdGEgcGFnZSAqLwogCWlmIChtcC0+eGZsYWcgJiBDT01NSVRfUEFHRSkgewogCiAJCXRsY2stPmZsYWcgPSB0bGNrUEFHRUxPQ0s7CiAKIAkJLyogbWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgbm9ob21lb2sgKi8KLQkJbWFya19tZXRhcGFnZV9kaXJ0eShtcCk7Ci0JCWF0b21pY19pbmMoJm1wLT5ub2hvbWVvayk7CisJCW1ldGFwYWdlX25vaG9tZW9rKG1wKTsKIAogCQlqZnNfaW5mbygibG9ja2luZyBtcCA9IDB4JXAsIG5vaG9tZW9rID0gJWQgdGlkID0gJWQgdGxjayA9IDB4JXAiLAotCQkJIG1wLCBhdG9taWNfcmVhZCgmbXAtPm5vaG9tZW9rKSwgdGlkLCB0bGNrKTsKKwkJCSBtcCwgbXAtPm5vaG9tZW9rLCB0aWQsIHRsY2spOwogCiAJCS8qIGlmIGFub255bW91cyB0cmFuc2FjdGlvbiwgYW5kIGJ1ZmZlciBpcyBvbiB0aGUgZ3JvdXAKIAkJICogY29tbWl0IHN5bmNsaXN0LCBtYXJrIGlub2RlIHRvIHNob3cgdGhpcy4gIFRoaXMgd2lsbApAQCAtNzYyLDggKzc3MSwxMCBAQAogCQlpZiAodGxjay0+bmV4dCA9PSAwKSB7CiAJCQkvKiBUaGlzIGlub2RlJ3MgZmlyc3QgYW5vbnltb3VzIHRyYW5zYWN0aW9uICovCiAJCQlqZnNfaXAtPmF0bHRhaWwgPSBsaWQ7CisJCQlUWE5fTE9DSygpOwogCQkJbGlzdF9hZGRfdGFpbCgmamZzX2lwLT5hbm9uX2lub2RlX2xpc3QsCiAJCQkJICAgICAgJlR4QW5jaG9yLmFub25fbGlzdCk7CisJCQlUWE5fVU5MT0NLKCk7CiAJCX0KIAl9CiAKQEAgLTgyMSw4ICs4MzIsNiBAQAogICAgICAgZ3JhbnRMb2NrOgogCXRsY2stPnR5cGUgfD0gdHlwZTsKIAotCVRYTl9VTkxPQ0soKTsKLQogCXJldHVybiB0bGNrOwogCiAJLyoKQEAgLTg0MSwxMSArODUwLDE5IEBACiAJCUJVRygpOwogCX0KIAlJTkNSRU1FTlQoc3RhdHR4LndhaXRsb2NrKTsJLyogc3RhdGlzdGljcyAqLworCVRYTl9VTkxPQ0soKTsKIAlyZWxlYXNlX21ldGFwYWdlKG1wKTsKKwlUWE5fTE9DSygpOworCXh0aWQgPSB0bGNrLT50aWQ7CS8qIHJlYXF1aXJlIGFmdGVyIGRyb3BwaW5nIFRYTl9MT0NLICovCiAKIAlqZnNfaW5mbygidHhMb2NrOiBpbiB3YWl0TG9jaywgdGlkID0gJWQsIHh0aWQgPSAlZCwgbGlkID0gJWQiLAogCQkgdGlkLCB4dGlkLCBsaWQpOwotCVRYTl9TTEVFUF9EUk9QX0xPQ0soJnRpZF90b190YmxvY2soeHRpZCktPndhaXRvcik7CisKKwkvKiBSZWNoZWNrIGV2ZXJ5dGhpbmcgc2luY2UgZHJvcHBpbmcgVFhOX0xPQ0sgKi8KKwlpZiAoeHRpZCAmJiAodGxjay0+bXAgPT0gbXApICYmIChtcC0+bGlkID09IGxpZCkpCisJCVRYTl9TTEVFUF9EUk9QX0xPQ0soJnRpZF90b190YmxvY2soeHRpZCktPndhaXRvcik7CisJZWxzZQorCQlUWE5fVU5MT0NLKCk7CiAJamZzX2luZm8oInR4TG9jazogYXdha2VuZWQgICAgIHRpZCA9ICVkLCBsaWQgPSAlZCIsIHRpZCwgbGlkKTsKIAogCXJldHVybiBOVUxMOwpAQCAtOTA2LDYgKzkyMyw3IEBACiAJc3RydWN0IG1ldGFwYWdlICptcDsKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nOwogCWludCBkaWZmdCwgZGlmZnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWpmc19pbmZvKCJ0eFVubG9jazogdGJsayA9IDB4JXAiLCB0YmxrKTsKIAlsb2cgPSBKRlNfU0JJKHRibGstPnNiKS0+bG9nOwpAQCAtOTI1LDE5ICs5NDMsMTQgQEAKIAkJCWFzc2VydChtcC0+eGZsYWcgJiBDT01NSVRfUEFHRSk7CiAKIAkJCS8qIGhvbGQgYnVmZmVyCi0JCQkgKgotCQkJICogSXQncyBwb3NzaWJsZSB0aGF0IHNvbWVvbmUgZWxzZSBoYXMgdGhlIG1ldGFwYWdlLgotCQkJICogVGhlIG9ubHkgdGhpbmdzIHdlcmUgY2hhbmdpbmcgYXJlIG5vaG9tZW9rLCB3aGljaAotCQkJICogaXMgaGFuZGxlZCBhdG9taWNhbGx5LCBhbmQgY2xzbiB3aGljaCBpcyBwcm90ZWN0ZWQKLQkJCSAqIGJ5IHRoZSBMT0dTWU5DX0xPQ0suCiAJCQkgKi8KLQkJCWhvbGRfbWV0YXBhZ2UobXAsIDEpOworCQkJaG9sZF9tZXRhcGFnZShtcCk7CiAKLQkJCWFzc2VydChhdG9taWNfcmVhZCgmbXAtPm5vaG9tZW9rKSA+IDApOwotCQkJYXRvbWljX2RlYygmbXAtPm5vaG9tZW9rKTsKKwkJCWFzc2VydChtcC0+bm9ob21lb2sgPiAwKTsKKwkJCV9tZXRhcGFnZV9ob21lb2sobXApOwogCiAJCQkvKiBpbmhlcml0IHlvdW5nZXIvbGFyZ2VyIGNsc24gKi8KLQkJCUxPR1NZTkNfTE9DSyhsb2cpOworCQkJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCQkJaWYgKG1wLT5jbHNuKSB7CiAJCQkJbG9nZGlmZihkaWZmdCwgdGJsay0+Y2xzbiwgbG9nKTsKIAkJCQlsb2dkaWZmKGRpZmZwLCBtcC0+Y2xzbiwgbG9nKTsKQEAgLTk0NSwxNiArOTU4LDExIEBACiAJCQkJCW1wLT5jbHNuID0gdGJsay0+Y2xzbjsKIAkJCX0gZWxzZQogCQkJCW1wLT5jbHNuID0gdGJsay0+Y2xzbjsKLQkJCUxPR1NZTkNfVU5MT0NLKGxvZyk7CisJCQlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAogCQkJYXNzZXJ0KCEodGxjay0+ZmxhZyAmIHRsY2tGUkVFUEFHRSkpOwogCi0JCQlpZiAodGxjay0+ZmxhZyAmIHRsY2tXUklURVBBR0UpIHsKLQkJCQl3cml0ZV9tZXRhcGFnZShtcCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIHJlbGVhc2UgcGFnZSB3aGljaCBoYXMgYmVlbiBmb3JjZWQgKi8KLQkJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKLQkJCX0KKwkJCXB1dF9tZXRhcGFnZShtcCk7CiAJCX0KIAogCQkvKiBpbnNlcnQgdGxvY2ssIGFuZCBsaW5lbG9jayhzKSBvZiB0aGUgdGxvY2sgaWYgYW55LApAQCAtOTgxLDEwICs5ODksMTAgQEAKIAkgKiBoYXMgYmVlbiBpbnNlcnRlZCBpbiBsb2dzeW5jIGxpc3QgYXQgdHhVcGRhdGVNYXAoKSkKIAkgKi8KIAlpZiAodGJsay0+bHNuKSB7Ci0JCUxPR1NZTkNfTE9DSyhsb2cpOworCQlMT0dTWU5DX0xPQ0sobG9nLCBmbGFncyk7CiAJCWxvZy0+Y291bnQtLTsKIAkJbGlzdF9kZWwoJnRibGstPnN5bmNsaXN0KTsKLQkJTE9HU1lOQ19VTkxPQ0sobG9nKTsKKwkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJfQogfQogCkBAIC0xNTczLDggKzE1ODEsOCBAQAogCQkgKiB0aGUgbGFzdCBlbnRyeSwgc28gZG9uJ3QgYm90aGVyIGxvZ2dpbmcgdGhpcwogCQkgKi8KIAkJbXAtPmxpZCA9IDA7Ci0JCWhvbGRfbWV0YXBhZ2UobXAsIDApOwotCQlhdG9taWNfZGVjKCZtcC0+bm9ob21lb2spOworCQlncmFiX21ldGFwYWdlKG1wKTsKKwkJbWV0YXBhZ2VfaG9tZW9rKG1wKTsKIAkJZGlzY2FyZF9tZXRhcGFnZShtcCk7CiAJCXRsY2stPm1wID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC0xNzEyLDcgKzE3MjAsNyBAQAogCXN0cnVjdCBtYXBsb2NrICptYXBsb2NrOwogCXN0cnVjdCB4ZGxpc3Rsb2NrICp4YWRsb2NrOwogCXN0cnVjdCBweGRfbG9jayAqcHhkbG9jazsKLQlweGRfdCAqcHhkOworCXB4ZF90ICpwYWdlX3B4ZDsKIAlpbnQgbmV4dCwgbHdtLCBod207CiAKIAlpcCA9IHRsY2stPmlwOwpAQCAtMTcyMiw3ICsxNzMwLDcgQEAKIAlscmQtPmxvZy5yZWRvcGFnZS50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1hUUkVFKTsKIAlscmQtPmxvZy5yZWRvcGFnZS5sMmxpbmVzaXplID0gY3B1X3RvX2xlMTYoTDJYVFNMT1RTSVpFKTsKIAotCXB4ZCA9ICZscmQtPmxvZy5yZWRvcGFnZS5weGQ7CisJcGFnZV9weGQgPSAmbHJkLT5sb2cucmVkb3BhZ2UucHhkOwogCiAJaWYgKHRsY2stPnR5cGUgJiB0bGNrQlRST09UKSB7CiAJCWxyZC0+bG9nLnJlZG9wYWdlLnR5cGUgfD0gY3B1X3RvX2xlMTYoTE9HX0JUUk9PVCk7CkBAIC0xNzUyLDkgKzE3NjAsOSBAQAogCQkgKiBhcHBseWluZyB0aGUgYWZ0ZXItaW1hZ2UgdG8gdGhlIG1ldGEtZGF0YSBwYWdlLgogCQkgKi8KIAkJbHJkLT50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1JFRE9QQUdFKTsKLS8vICAgICAgICAgICAgICAqcHhkID0gbXAtPmNtX3B4ZDsKLQkJUFhEYWRkcmVzcyhweGQsIG1wLT5pbmRleCk7Ci0JCVBYRGxlbmd0aChweGQsCisvLyAgICAgICAgICAgICAgKnBhZ2VfcHhkID0gbXAtPmNtX3B4ZDsKKwkJUFhEYWRkcmVzcyhwYWdlX3B4ZCwgbXAtPmluZGV4KTsKKwkJUFhEbGVuZ3RoKHBhZ2VfcHhkLAogCQkJICBtcC0+bG9naWNhbF9zaXplID4+IHRibGstPnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKIAkJbHJkLT5iYWNrY2hhaW4gPSBjcHVfdG9fbGUzMihsbUxvZyhsb2csIHRibGssIGxyZCwgdGxjaykpOwogCkBAIC0xNzc2LDI1ICsxNzg0LDMxIEBACiAJCXRsY2stPmZsYWcgfD0gdGxja1VQREFURU1BUDsKIAkJeGFkbG9jay0+ZmxhZyA9IG1sY2tBTExPQ1hBRExJU1Q7CiAJCXhhZGxvY2stPmNvdW50ID0gbmV4dCAtIGx3bTsKLQkJaWYgKCh4YWRsb2NrLT5jb3VudCA8PSAyKSAmJiAodGJsay0+eGZsYWcgJiBDT01NSVRfTEFaWSkpIHsKKwkJaWYgKCh4YWRsb2NrLT5jb3VudCA8PSA0KSAmJiAodGJsay0+eGZsYWcgJiBDT01NSVRfTEFaWSkpIHsKIAkJCWludCBpOworCQkJcHhkX3QgKnB4ZDsKIAkJCS8qCiAJCQkgKiBMYXp5IGNvbW1pdCBtYXkgYWxsb3cgeHRyZWUgdG8gYmUgbW9kaWZpZWQgYmVmb3JlCiAJCQkgKiB0eFVwZGF0ZU1hcCBydW5zLiAgQ29weSB4YWQgaW50byBsaW5lbG9jayB0bwogCQkJICogcHJlc2VydmUgY29ycmVjdCBkYXRhLgorCQkJICoKKwkJCSAqIFdlIGNhbiBmaXQgdHdpY2UgYXMgbWF5IHB4ZCdzIGFzIHhhZHMgaW4gdGhlIGxvY2sKIAkJCSAqLwotCQkJeGFkbG9jay0+eGRsaXN0ID0gJnh0bGNrLT5weGRsb2NrOwotCQkJbWVtY3B5KHhhZGxvY2stPnhkbGlzdCwgJnAtPnhhZFtsd21dLAotCQkJICAgICAgIHNpemVvZih4YWRfdCkgKiB4YWRsb2NrLT5jb3VudCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCB4YWRsb2NrLT5jb3VudDsgaSsrKQorCQkJeGFkbG9jay0+ZmxhZyA9IG1sY2tBTExPQ1BYRExJU1Q7CisJCQlweGQgPSB4YWRsb2NrLT54ZGxpc3QgPSAmeHRsY2stPnB4ZGxvY2s7CisJCQlmb3IgKGkgPSAwOyBpIDwgeGFkbG9jay0+Y291bnQ7IGkrKykgeworCQkJCVBYRGFkZHJlc3MocHhkLCBhZGRyZXNzWEFEKCZwLT54YWRbbHdtICsgaV0pKTsKKwkJCQlQWERsZW5ndGgocHhkLCBsZW5ndGhYQUQoJnAtPnhhZFtsd20gKyBpXSkpOwogCQkJCXAtPnhhZFtsd20gKyBpXS5mbGFnICY9CiAJCQkJICAgIH4oWEFEX05FVyB8IFhBRF9FWFRFTkRFRCk7CisJCQkJcHhkKys7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogeGRsaXN0IHdpbGwgcG9pbnQgdG8gaW50byBpbm9kZSdzIHh0cmVlLCBlbnN1cmUKIAkJCSAqIHRoYXQgdHJhbnNhY3Rpb24gaXMgbm90IGNvbW1pdHRlZCBsYXppbHkuCiAJCQkgKi8KKwkJCXhhZGxvY2stPmZsYWcgPSBtbGNrQUxMT0NYQURMSVNUOwogCQkJeGFkbG9jay0+eGRsaXN0ID0gJnAtPnhhZFtsd21dOwogCQkJdGJsay0+eGZsYWcgJj0gfkNPTU1JVF9MQVpZOwogCQl9CkBAIC0xODM2LDggKzE4NTAsOCBAQAogCQlpZiAodGJsay0+eGZsYWcgJiBDT01NSVRfVFJVTkNBVEUpIHsKIAkJCS8qIHdyaXRlIE5PUkVET1BBR0UgZm9yIHRoZSBwYWdlICovCiAJCQlscmQtPnR5cGUgPSBjcHVfdG9fbGUxNihMT0dfTk9SRURPUEFHRSk7Ci0JCQlQWERhZGRyZXNzKHB4ZCwgbXAtPmluZGV4KTsKLQkJCVBYRGxlbmd0aChweGQsCisJCQlQWERhZGRyZXNzKHBhZ2VfcHhkLCBtcC0+aW5kZXgpOworCQkJUFhEbGVuZ3RoKHBhZ2VfcHhkLAogCQkJCSAgbXAtPmxvZ2ljYWxfc2l6ZSA+PiB0YmxrLT5zYi0+CiAJCQkJICBzX2Jsb2Nrc2l6ZV9iaXRzKTsKIAkJCWxyZC0+YmFja2NoYWluID0KQEAgLTE4NzIsMjIgKzE4ODYsMzIgQEAKIAkJICogZGVsZXRlZCBwYWdlIGl0c2VsZjsKIAkJICovCiAJCXRsY2stPmZsYWcgfD0gdGxja1VQREFURU1BUDsKLQkJeGFkbG9jay0+ZmxhZyA9IG1sY2tGUkVFWEFETElTVDsKIAkJeGFkbG9jay0+Y291bnQgPSBod20gLSBYVEVOVFJZU1RBUlQgKyAxOwotCQlpZiAoKHhhZGxvY2stPmNvdW50IDw9IDIpICYmICh0YmxrLT54ZmxhZyAmIENPTU1JVF9MQVpZKSkgeworCQlpZiAoKHhhZGxvY2stPmNvdW50IDw9IDQpICYmICh0YmxrLT54ZmxhZyAmIENPTU1JVF9MQVpZKSkgeworCQkJaW50IGk7CisJCQlweGRfdCAqcHhkOwogCQkJLyoKIAkJCSAqIExhenkgY29tbWl0IG1heSBhbGxvdyB4dHJlZSB0byBiZSBtb2RpZmllZCBiZWZvcmUKIAkJCSAqIHR4VXBkYXRlTWFwIHJ1bnMuICBDb3B5IHhhZCBpbnRvIGxpbmVsb2NrIHRvCiAJCQkgKiBwcmVzZXJ2ZSBjb3JyZWN0IGRhdGEuCisJCQkgKgorCQkJICogV2UgY2FuIGZpdCB0d2ljZSBhcyBtYXkgcHhkJ3MgYXMgeGFkcyBpbiB0aGUgbG9jawogCQkJICovCi0JCQl4YWRsb2NrLT54ZGxpc3QgPSAmeHRsY2stPnB4ZGxvY2s7Ci0JCQltZW1jcHkoeGFkbG9jay0+eGRsaXN0LCAmcC0+eGFkW1hURU5UUllTVEFSVF0sCi0JCQkgICAgICAgc2l6ZW9mKHhhZF90KSAqIHhhZGxvY2stPmNvdW50KTsKKwkJCXhhZGxvY2stPmZsYWcgPSBtbGNrRlJFRVBYRExJU1Q7CisJCQlweGQgPSB4YWRsb2NrLT54ZGxpc3QgPSAmeHRsY2stPnB4ZGxvY2s7CisJCQlmb3IgKGkgPSAwOyBpIDwgeGFkbG9jay0+Y291bnQ7IGkrKykgeworCQkJCVBYRGFkZHJlc3MocHhkLAorCQkJCQlhZGRyZXNzWEFEKCZwLT54YWRbWFRFTlRSWVNUQVJUICsgaV0pKTsKKwkJCQlQWERsZW5ndGgocHhkLAorCQkJCQlsZW5ndGhYQUQoJnAtPnhhZFtYVEVOVFJZU1RBUlQgKyBpXSkpOworCQkJCXB4ZCsrOworCQkJfQogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIHhkbGlzdCB3aWxsIHBvaW50IHRvIGludG8gaW5vZGUncyB4dHJlZSwgZW5zdXJlCiAJCQkgKiB0aGF0IHRyYW5zYWN0aW9uIGlzIG5vdCBjb21taXR0ZWQgbGF6aWx5LgogCQkJICovCisJCQl4YWRsb2NrLT5mbGFnID0gbWxja0ZSRUVYQURMSVNUOwogCQkJeGFkbG9jay0+eGRsaXN0ID0gJnAtPnhhZFtYVEVOVFJZU1RBUlRdOwogCQkJdGJsay0+eGZsYWcgJj0gfkNPTU1JVF9MQVpZOwogCQl9CkBAIC0xOTE4LDcgKzE5NDIsNyBAQAogCSAqIGhlYWRlciA/CiAJICovCiAJaWYgKHRsY2stPnR5cGUgJiB0bGNrVFJVTkNBVEUpIHsKLQkJcHhkX3QgdHB4ZDsJLyogdHJ1bmNhdGVkIGV4dGVudCBvZiB4YWQgKi8KKwkJcHhkX3QgcHhkOwkvKiB0cnVuY2F0ZWQgZXh0ZW50IG9mIHhhZCAqLwogCQlpbnQgdHdtOwogCiAJCS8qCkBAIC0xOTQ3LDggKzE5NzEsOSBAQAogCQkgKiBhcHBseWluZyB0aGUgYWZ0ZXItaW1hZ2UgdG8gdGhlIG1ldGEtZGF0YSBwYWdlLgogCQkgKi8KIAkJbHJkLT50eXBlID0gY3B1X3RvX2xlMTYoTE9HX1JFRE9QQUdFKTsKLQkJUFhEYWRkcmVzcyhweGQsIG1wLT5pbmRleCk7Ci0JCVBYRGxlbmd0aChweGQsIG1wLT5sb2dpY2FsX3NpemUgPj4gdGJsay0+c2ItPnNfYmxvY2tzaXplX2JpdHMpOworCQlQWERhZGRyZXNzKHBhZ2VfcHhkLCBtcC0+aW5kZXgpOworCQlQWERsZW5ndGgocGFnZV9weGQsCisJCQkgIG1wLT5sb2dpY2FsX3NpemUgPj4gdGJsay0+c2ItPnNfYmxvY2tzaXplX2JpdHMpOwogCQlscmQtPmJhY2tjaGFpbiA9IGNwdV90b19sZTMyKGxtTG9nKGxvZywgdGJsaywgbHJkLCB0bGNrKSk7CiAKIAkJLyoKQEAgLTE5NjYsNyArMTk5MSw3IEBACiAJCQlscmQtPmxvZy51cGRhdGVtYXAudHlwZSA9IGNwdV90b19sZTE2KExPR19GUkVFUFhEKTsKIAkJCWxyZC0+bG9nLnVwZGF0ZW1hcC5ueGQgPSBjcHVfdG9fbGUxNigxKTsKIAkJCWxyZC0+bG9nLnVwZGF0ZW1hcC5weGQgPSBweGRsb2NrLT5weGQ7Ci0JCQl0cHhkID0gcHhkbG9jay0+cHhkOwkvKiBzYXZlIHRvIGZvcm1hdCBtYXBsb2NrICovCisJCQlweGQgPSBweGRsb2NrLT5weGQ7CS8qIHNhdmUgdG8gZm9ybWF0IG1hcGxvY2sgKi8KIAkJCWxyZC0+YmFja2NoYWluID0KIAkJCSAgICBjcHVfdG9fbGUzMihsbUxvZyhsb2csIHRibGssIGxyZCwgTlVMTCkpOwogCQl9CkBAIC0yMDM1LDcgKzIwNjAsNyBAQAogCQkJcHhkbG9jayA9IChzdHJ1Y3QgcHhkX2xvY2sgKikgeGFkbG9jazsKIAkJCXB4ZGxvY2stPmZsYWcgPSBtbGNrRlJFRVBYRDsKIAkJCXB4ZGxvY2stPmNvdW50ID0gMTsKLQkJCXB4ZGxvY2stPnB4ZCA9IHRweGQ7CisJCQlweGRsb2NrLT5weGQgPSBweGQ7CiAKIAkJCWpmc19pbmZvKCJ4dExvZzogdHJ1bmNhdGUgaXA6MHglcCBtcDoweCVwIGNvdW50OiVkICIKIAkJCQkgImh3bTolZCIsIGlwLCBtcCwgcHhkbG9jay0+Y291bnQsIGh3bSk7CkBAIC0yMjUzLDcgKzIyNzgsOCBAQAogCQkJCXRsY2stPmZsYWcgJj0gfnRsY2tXUklURVBBR0U7CiAKIAkJCQkvKiBkbyBub3QgcmVsZWFzZSBwYWdlIHRvIGZyZWVsaXN0ICovCi0KKwkJCQlmb3JjZV9tZXRhcGFnZShtcCk7CisjaWYgMAogCQkJCS8qCiAJCQkJICogVGhlICJyaWdodCIgdGhpbmcgdG8gZG8gaGVyZSBpcyB0bwogCQkJCSAqIHN5bmNocm9ub3VzbHkgd3JpdGUgdGhlIG1ldGFkYXRhLgpAQCAtMjI2NSw5ICsyMjkxLDEwIEBACiAJCQkJICogd2UgY2FuIGdldCBieSB3aXRoIHN5bmNocm9ub3VzbHkgd3JpdGluZwogCQkJCSAqIHRoZSBwYWdlcyB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkLgogCQkJCSAqLwotCQkJCWFzc2VydChhdG9taWNfcmVhZCgmbXAtPm5vaG9tZW9rKSk7CisJCQkJYXNzZXJ0KG1wLT5ub2hvbWVvayk7CiAJCQkJc2V0X2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOwogCQkJCXNldF9iaXQoTUVUQV9zeW5jLCAmbXAtPmZsYWcpOworI2VuZGlmCiAJCQl9CiAJCX0KIAl9CkBAIC0yMzI3LDcgKzIzNTQsNyBAQAogCQkJICovCiAJCQltcCA9IHRsY2stPm1wOwogCQkJQVNTRVJUKG1wLT54ZmxhZyAmIENPTU1JVF9QQUdFKTsKLQkJCWhvbGRfbWV0YXBhZ2UobXAsIDApOworCQkJZ3JhYl9tZXRhcGFnZShtcCk7CiAJCX0KIAogCQkvKgpAQCAtMjM3Nyw4ICsyNDA0LDggQEAKIAkJCQlBU1NFUlQobXAtPmxpZCA9PSBsaWQpOwogCQkJCXRsY2stPm1wLT5saWQgPSAwOwogCQkJfQotCQkJYXNzZXJ0KGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spID09IDEpOwotCQkJYXRvbWljX2RlYygmbXAtPm5vaG9tZW9rKTsKKwkJCWFzc2VydChtcC0+bm9ob21lb2sgPT0gMSk7CisJCQltZXRhcGFnZV9ob21lb2sobXApOwogCQkJZGlzY2FyZF9tZXRhcGFnZShtcCk7CiAJCQl0bGNrLT5tcCA9IE5VTEw7CiAJCX0KQEAgLTI4NDQsMjQgKzI4NzEsOSBAQAogewogCXN0cnVjdCBqZnNfbG9nICpsb2cgPSBtcC0+bG9nOwogCi0JYXNzZXJ0KGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spKTsKKwlhc3NlcnQobXAtPm5vaG9tZW9rKTsKIAlhc3NlcnQobG9nKTsKLQlhdG9taWNfZGVjKCZtcC0+bm9ob21lb2spOwotCi0JaWYgKGF0b21pY19yZWFkKCZtcC0+bm9ob21lb2spKQotCQlyZXR1cm47Ci0KLQlob2xkX21ldGFwYWdlKG1wLCAwKTsKLQotCUxPR1NZTkNfTE9DSyhsb2cpOwotCW1wLT5sb2cgPSBOVUxMOwotCW1wLT5sc24gPSAwOwotCW1wLT5jbHNuID0gMDsKLQlsb2ctPmNvdW50LS07Ci0JbGlzdF9kZWxfaW5pdCgmbXAtPnN5bmNsaXN0KTsKLQlMT0dTWU5DX1VOTE9DSyhsb2cpOwotCi0JcmVsZWFzZV9tZXRhcGFnZShtcCk7CisJbWV0YXBhZ2VfaG9tZW9rKG1wKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfdW1vdW50LmMgYi9mcy9qZnMvamZzX3Vtb3VudC5jCmluZGV4IGYzMWE5ZTMuLjVjZjkxNzggMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdW1vdW50LmMKKysrIGIvZnMvamZzL2pmc191bW91bnQuYwpAQCAtNDksNyArNDksNiBAQAogICovCiBpbnQgamZzX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpiZGV2X21hcHBpbmcgPSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBqZnNfc2JfaW5mbyAqc2JpID0gSkZTX1NCSShzYik7CiAJc3RydWN0IGlub2RlICppcGJtYXAgPSBzYmktPmlwYm1hcDsKIAlzdHJ1Y3QgaW5vZGUgKmlwaW1hcCA9IHNiaS0+aXBpbWFwOwpAQCAtMTA5LDggKzEwOCw4IEBACiAJICogTWFrZSBzdXJlIGFsbCBtZXRhZGF0YSBtYWtlcyBpdCB0byBkaXNrIGJlZm9yZSB3ZSBtYXJrCiAJICogdGhlIHN1cGVyYmxvY2sgYXMgY2xlYW4KIAkgKi8KLQlmaWxlbWFwX2ZkYXRhd3JpdGUoYmRldl9tYXBwaW5nKTsKLQlmaWxlbWFwX2ZkYXRhd2FpdChiZGV2X21hcHBpbmcpOworCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKIAogCS8qCiAJICogZW5zdXJlIGFsbCBmaWxlIHN5c3RlbSBmaWxlIHBhZ2VzIGFyZSBwcm9wYWdhdGVkIHRvIHRoZWlyCkBAIC0xMjMsOSArMTIyLDYgQEAKIAlpZiAobG9nKSB7CQkvKiBsb2cgPSBOVUxMIGlmIHJlYWQtb25seSBtb3VudCAqLwogCQl1cGRhdGVTdXBlcihzYiwgRk1fQ0xFQU4pOwogCi0JCS8qIFJlc3RvcmUgZGVmYXVsdCBnZnBfbWFzayBmb3IgYmRldiAqLwotCQltYXBwaW5nX3NldF9nZnBfbWFzayhiZGV2X21hcHBpbmcsIEdGUF9VU0VSKTsKLQogCQkvKgogCQkgKiBjbG9zZSBsb2c6IAogCQkgKgpAQCAtMTQwLDcgKzEzNiw2IEBACiAKIGludCBqZnNfdW1vdW50X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJkZXZfbWFwcGluZyA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CiAJc3RydWN0IGpmc19zYl9pbmZvICpzYmkgPSBKRlNfU0JJKHNiKTsKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nID0gc2JpLT5sb2c7CiAKQEAgLTE2NiwxMyArMTYxLDEwIEBACiAJICogbWFyayB0aGUgc3VwZXJibG9jayBjbGVhbiBiZWZvcmUgZXZlcnl0aGluZyBpcyBmbHVzaGVkIHRvCiAJICogZGlzay4KIAkgKi8KLQlmaWxlbWFwX2ZkYXRhd3JpdGUoYmRldl9tYXBwaW5nKTsKLQlmaWxlbWFwX2ZkYXRhd2FpdChiZGV2X21hcHBpbmcpOworCWZpbGVtYXBfZmRhdGF3cml0ZShzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKKwlmaWxlbWFwX2ZkYXRhd2FpdChzYmktPmRpcmVjdF9pbm9kZS0+aV9tYXBwaW5nKTsKIAogCXVwZGF0ZVN1cGVyKHNiLCBGTV9DTEVBTik7CiAKLQkvKiBSZXN0b3JlIGRlZmF1bHQgZ2ZwX21hc2sgZm9yIGJkZXYgKi8KLQltYXBwaW5nX3NldF9nZnBfbWFzayhiZGV2X21hcHBpbmcsIEdGUF9VU0VSKTsKLQogCXJldHVybiBsbUxvZ0Nsb3NlKHNiKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfeHRyZWUuYyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwppbmRleCAxMWM1OGM1Li4yYzFmMzExIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3h0cmVlLmMKKysrIGIvZnMvamZzL2pmc194dHJlZS5jCkBAIC0xMTEsOCArMTExLDggQEAKIC8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZXMKICAqLwotc3RhdGljIGludCB4dFNlYXJjaChzdHJ1Y3QgaW5vZGUgKmlwLAotCQkgICAgczY0IHhvZmYsIGludCAqY21wcCwgc3RydWN0IGJ0c3RhY2sgKiBidHN0YWNrLCBpbnQgZmxhZyk7CitzdGF0aWMgaW50IHh0U2VhcmNoKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4b2ZmLCBzNjQgKm5leHQsIGludCAqY21wcCwKKwkJICAgIHN0cnVjdCBidHN0YWNrICogYnRzdGFjaywgaW50IGZsYWcpOwogCiBzdGF0aWMgaW50IHh0U3BsaXRVcCh0aWRfdCB0aWQsCiAJCSAgICAgc3RydWN0IGlub2RlICppcCwKQEAgLTE1OSwxMSArMTU5LDEyIEBACiAJeHRwYWdlX3QgKnA7CiAJaW50IGluZGV4OwogCXhhZF90ICp4YWQ7Ci0JczY0IHNpemUsIHhvZmYsIHhlbmQ7CisJczY0IG5leHQsIHNpemUsIHhvZmYsIHhlbmQ7CiAJaW50IHhsZW47CiAJczY0IHhhZGRyOwogCi0JKnBsZW4gPSAwOworCSpwYWRkciA9IDA7CisJKnBsZW4gPSBsbGVuOwogCiAJaWYgKCFub19jaGVjaykgewogCQkvKiBpcyBsb29rdXAgb2Zmc2V0IGJleW9uZCBlb2YgPyAqLwpAQCAtMTgwLDcgKzE4MSw3IEBACiAJICogc2VhcmNoIGZvciB0aGUgeGFkIGVudHJ5IGNvdmVyaW5nIHRoZSBsb2dpY2FsIGV4dGVudAogCSAqLwogLy9zZWFyY2g6Ci0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBsc3RhcnQsICZjbXAsICZidHN0YWNrLCAwKSkpIHsKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIGxzdGFydCwgJm5leHQsICZjbXAsICZidHN0YWNrLCAwKSkpIHsKIAkJamZzX2VycigieHRMb29rdXA6IHh0U2VhcmNoIHJldHVybmVkICVkIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMTk4LDggKzE5OSwxMSBAQAogCSAqIGxzdGFydCBpcyBhIHBhZ2Ugc3RhcnQgYWRkcmVzcywKIAkgKiBpLmUuLCBsc3RhcnQgY2Fubm90IHN0YXJ0IGluIGEgaG9sZTsKIAkgKi8KLQlpZiAoY21wKQorCWlmIChjbXApIHsKKwkJaWYgKG5leHQpCisJCQkqcGxlbiA9IG1pbihuZXh0IC0gbHN0YXJ0LCBsbGVuKTsKIAkJZ290byBvdXQ7CisJfQogCiAJLyoKIAkgKiBseGQgY292ZXJlZCBieSB4YWQKQEAgLTI4NCw3ICsyODgsNyBAQAogCWlmIChsc3RhcnQgPj0gc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKHJjID0geHRTZWFyY2goaXAsIGxzdGFydCwgJmNtcCwgJmJ0c3RhY2ssIDApKSkKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIGxzdGFydCwgTlVMTCwgJmNtcCwgJmJ0c3RhY2ssIDApKSkKIAkJcmV0dXJuIHJjOwogCiAJLyoKQEAgLTQ4OCw2ICs0OTIsNyBAQAogICogcGFyYW1ldGVyczoKICAqICAgICAgaXAgICAgICAtIGZpbGUgb2JqZWN0OwogICogICAgICB4b2ZmICAgIC0gZXh0ZW50IG9mZnNldDsKKyAqICAgICAgbmV4dHAJLSBhZGRyZXNzIG9mIG5leHQgZXh0ZW50IChpZiBhbnkpIGZvciBzZWFyY2ggbWlzcwogICogICAgICBjbXBwICAgIC0gY29tcGFyaXNvbiByZXN1bHQ6CiAgKiAgICAgIGJ0c3RhY2sgLSB0cmF2ZXJzZSBzdGFjazsKICAqICAgICAgZmxhZyAgICAtIHNlYXJjaCBwcm9jZXNzIGZsYWcgKFhUX0lOU0VSVCk7CkBAIC00OTcsNyArNTAyLDcgQEAKICAqICAgICAgKmNtcHAgaXMgc2V0IHRvIHJlc3VsdCBvZiBjb21wYXJpc29uIHdpdGggdGhlIGVudHJ5IHJldHVybmVkLgogICogICAgICB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBlbnRyeSBpcyBwaW5uZWQgYXQgZXhpdC4KICAqLwotc3RhdGljIGludCB4dFNlYXJjaChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgeG9mZiwJLyogb2Zmc2V0IG9mIGV4dGVudCAqLworc3RhdGljIGludCB4dFNlYXJjaChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgeG9mZiwJczY0ICpuZXh0cCwKIAkJICAgIGludCAqY21wcCwgc3RydWN0IGJ0c3RhY2sgKiBidHN0YWNrLCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgamZzX2lub2RlX2luZm8gKmpmc19pcCA9IEpGU19JUChpcCk7CkBAIC01MTEsNiArNTE2LDcgQEAKIAlzdHJ1Y3QgYnRmcmFtZSAqYnRzcDsKIAlpbnQgbnNwbGl0ID0gMDsJCS8qIG51bWJlciBvZiBwYWdlcyB0byBzcGxpdCAqLwogCXM2NCB0NjQ7CisJczY0IG5leHQgPSAwOwogCiAJSU5DUkVNRU5UKHh0U3RhdC5zZWFyY2gpOwogCkBAIC01NzksNiArNTg1LDcgQEAKIAkJCQkJCSAqIHByZXZpb3VzIGFuZCB0aGlzIGVudHJ5CiAJCQkJCQkgKi8KIAkJCQkJCSpjbXBwID0gMTsKKwkJCQkJCW5leHQgPSB0NjQ7CiAJCQkJCQlnb3RvIG91dDsKIAkJCQkJfQogCkBAIC02MjMsNiArNjMwLDkgQEAKIAkJCS8qIHVwZGF0ZSBzZXF1ZW50aWFsIGFjY2VzcyBoZXVyaXN0aWNzICovCiAJCQlqZnNfaXAtPmJ0aW5kZXggPSBpbmRleDsKIAorCQkJaWYgKG5leHRwKQorCQkJCSpuZXh0cCA9IG5leHQ7CisKIAkJCUlOQ1JFTUVOVCh4dFN0YXQuZmFzdFNlYXJjaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNjc1LDEwICs2ODUsMTEgQEAKIAogCQkJCQlyZXR1cm4gMDsKIAkJCQl9Ci0KIAkJCQkvKiBzZWFyY2ggaGl0IC0gaW50ZXJuYWwgcGFnZToKIAkJCQkgKiBkZXNjZW5kL3NlYXJjaCBpdHMgY2hpbGQgcGFnZQogCQkJCSAqLworCQkJCWlmIChpbmRleCA8IHAtPmhlYWRlci5uZXh0aW5kZXggLSAxKQorCQkJCQluZXh0ID0gb2Zmc2V0WEFEKCZwLT54YWRbaW5kZXggKyAxXSk7CiAJCQkJZ290byBuZXh0OwogCQkJfQogCkBAIC02OTQsNiArNzA1LDggQEAKIAkJICogYmFzZSBpcyB0aGUgc21hbGxlc3QgaW5kZXggd2l0aCBrZXkgKEtqKSBncmVhdGVyIHRoYW4KIAkJICogc2VhcmNoIGtleSAoSykgYW5kIG1heSBiZSB6ZXJvIG9yIG1heGVudHJ5IGluZGV4LgogCQkgKi8KKwkJaWYgKGJhc2UgPCBwLT5oZWFkZXIubmV4dGluZGV4KQorCQkJbmV4dCA9IG9mZnNldFhBRCgmcC0+eGFkW2Jhc2VdKTsKIAkJLyoKIAkJICogc2VhcmNoIG1pc3MgLSBsZWFmIHBhZ2U6CiAJCSAqCkBAIC03MjcsNiArNzQwLDkgQEAKIAkJCQlqZnNfaXAtPmJ0b3JkZXIgPSBCVF9SQU5ET007CiAJCQlqZnNfaXAtPmJ0aW5kZXggPSBiYXNlOwogCisJCQlpZiAobmV4dHApCisJCQkJKm5leHRwID0gbmV4dDsKKwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNzkzLDYgKzgwOSw3IEBACiAJc3RydWN0IHh0c3BsaXQgc3BsaXQ7CS8qIHNwbGl0IGluZm9ybWF0aW9uICovCiAJeGFkX3QgKnhhZDsKIAlpbnQgY21wOworCXM2NCBuZXh0OwogCXN0cnVjdCB0bG9jayAqdGxjazsKIAlzdHJ1Y3QgeHRsb2NrICp4dGxjazsKIApAQCAtODA2LDcgKzgyMyw3IEBACiAJICogbi5iLiB4dFNlYXJjaCgpIG1heSByZXR1cm4gaW5kZXggb2YgbWF4ZW50cnkgb2YKIAkgKiB0aGUgZnVsbCBwYWdlLgogCSAqLwotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQorCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJm5leHQsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKIAkJcmV0dXJuIHJjOwogCiAJLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwpAQCAtODE0LDcgKzgzMSw3IEBACiAKIAkvKiBUaGlzIHRlc3QgbXVzdCBmb2xsb3cgWFRfR0VUU0VBUkNIIHNpbmNlIG1wIG11c3QgYmUgdmFsaWQgaWYKIAkgKiB3ZSBicmFuY2ggdG8gb3V0OiAqLwotCWlmIChjbXAgPT0gMCkgeworCWlmICgoY21wID09IDApIHx8IChuZXh0ICYmICh4bGVuID4gbmV4dCAtIHhvZmYpKSkgewogCQlyYyA9IC1FRVhJU1Q7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE2MjYsNyArMTY0Myw3IEBACiAJamZzX2luZm8oInh0RXh0ZW5kOiBueG9mZjoweCVseCBueGxlbjoweCV4IiwgKHVsb25nKSB4b2ZmLCB4bGVuKTsKIAogCS8qIHRoZXJlIG11c3QgZXhpc3QgZXh0ZW50IHRvIGJlIGV4dGVuZGVkICovCi0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmIC0gMSwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQorCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiAtIDEsIE5VTEwsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKIAkJcmV0dXJuIHJjOwogCiAJLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwpAQCAtMTc5NCw3ICsxODExLDcgQEAKICovCiAKIAkvKiB0aGVyZSBtdXN0IGV4aXN0IGV4dGVudCB0byBiZSB0YWlsZ2F0ZWQgKi8KLQlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsIE5VTEwsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKIAkJcmV0dXJuIHJjOwogCiAJLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwpAQCAtMTk3Nyw3ICsxOTk0LDcgQEAKIAlueGxlbiA9IGxlbmd0aFhBRChueGFkKTsKIAlueGFkZHIgPSBhZGRyZXNzWEFEKG54YWQpOwogCi0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBueG9mZiwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQorCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbnhvZmYsIE5VTEwsICZjbXAsICZidHN0YWNrLCBYVF9JTlNFUlQpKSkKIAkJcmV0dXJuIHJjOwogCiAJLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwpAQCAtMjI5MSw3ICsyMzA4LDcgQEAKIAlpZiAobmV4dGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5tYXhlbnRyeSkpIHsKIAkJWFRfUFVUUEFHRShtcCk7CiAKLQkJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCBueG9mZiwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQorCQlpZiAoKHJjID0geHRTZWFyY2goaXAsIG54b2ZmLCBOVUxMLCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCiAJCQlyZXR1cm4gcmM7CiAKIAkJLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwpAQCAtMjQzOCw2ICsyNDU1LDcgQEAKIAlpbnQgbnNwbGl0LCBuYmxvY2tzLCB4bGVuOwogCXN0cnVjdCBweGRsaXN0IHB4ZGxpc3Q7CiAJcHhkX3QgKnB4ZDsKKwlzNjQgbmV4dDsKIAogCXhhZGRyID0gKnhhZGRycDsKIAl4bGVuID0gKnhsZW5wOwpAQCAtMjQ1Miw3ICsyNDcwLDcgQEAKIAkgKiBuLmIuIHh0U2VhcmNoKCkgbWF5IHJldHVybiBpbmRleCBvZiBtYXhlbnRyeSBvZgogCSAqIHRoZSBmdWxsIHBhZ2UuCiAJICovCi0JaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCAmY21wLCAmYnRzdGFjaywgWFRfSU5TRVJUKSkpCisJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCAmbmV4dCwgJmNtcCwgJmJ0c3RhY2ssIFhUX0lOU0VSVCkpKQogCQlyZXR1cm4gcmM7CiAKIAkvKiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0ICovCkBAIC0yNDYyLDYgKzI0ODAsOSBAQAogCQlyYyA9IC1FRVhJU1Q7CiAJCWdvdG8gb3V0OwogCX0KKworCWlmIChuZXh0KQorCQl4bGVuID0gbWluKHhsZW4sIChpbnQpKG5leHQgLSB4b2ZmKSk7CiAvL2luc2VydDoKIAkvKgogCSAqICAgICAgaW5zZXJ0IGVudHJ5IGZvciBuZXcgZXh0ZW50CkBAIC0yNjAwLDcgKzI2MjEsNyBAQAogCS8qCiAJICogZmluZCB0aGUgbWF0Y2hpbmcgZW50cnk7IHh0U2VhcmNoKCkgcGlucyB0aGUgcGFnZQogCSAqLwotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgeG9mZiwgJmNtcCwgJmJ0c3RhY2ssIDApKSkKKwlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsIE5VTEwsICZjbXAsICZidHN0YWNrLCAwKSkpCiAJCXJldHVybiByYzsKIAogCVhUX0dFVFNFQVJDSChpcCwgYnRzdGFjay50b3AsIGJuLCBtcCwgcCwgaW5kZXgpOwpAQCAtMjg1Miw3ICsyODczLDcgQEAKIAkgKi8KIAlpZiAoeHR5cGUgPT0gREFUQUVYVCkgewogCQkvKiBzZWFyY2ggaW4gbGVhZiBlbnRyeSAqLwotCQlyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCAmY21wLCAmYnRzdGFjaywgMCk7CisJCXJjID0geHRTZWFyY2goaXAsIHhvZmYsIE5VTEwsICZjbXAsICZidHN0YWNrLCAwKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCkBAIC0yOTU4LDcgKzI5NzksNyBAQAogCQl9CiAKIAkJLyogZ2V0IGJhY2sgcGFyZW50IHBhZ2UgKi8KLQkJaWYgKChyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCAmY21wLCAmYnRzdGFjaywgMCkpKQorCQlpZiAoKHJjID0geHRTZWFyY2goaXAsIHhvZmYsIE5VTEwsICZjbXAsICZidHN0YWNrLCAwKSkpCiAJCQlyZXR1cm4gcmM7CiAKIAkJWFRfR0VUU0VBUkNIKGlwLCBidHN0YWNrLnRvcCwgYm4sIHBtcCwgcHAsIGluZGV4KTsKQEAgLTM5OTEsNyArNDAxMiw3IEBACiAKIAlpZiAoY29tbWl0dGVkX3NpemUpIHsKIAkJeG9mZiA9IChjb21taXR0ZWRfc2l6ZSA+PiBKRlNfU0JJKGlwLT5pX3NiKS0+bDJic2l6ZSkgLSAxOwotCQlyYyA9IHh0U2VhcmNoKGlwLCB4b2ZmLCAmY21wLCAmYnRzdGFjaywgMCk7CisJCXJjID0geHRTZWFyY2goaXAsIHhvZmYsIE5VTEwsICZjbXAsICZidHN0YWNrLCAwKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9mcy9qZnMvcmVzaXplLmMgYi9mcy9qZnMvcmVzaXplLmMKaW5kZXggMmViNjg2OS4uYzZkYzI1NCAxMDA2NDQKLS0tIGEvZnMvamZzL3Jlc2l6ZS5jCisrKyBiL2ZzL2pmcy9yZXNpemUuYwpAQCAtMjA5LDYgKzIwOSw5IEBACiAJICovCiAJdHhRdWllc2NlKHNiKTsKIAorCS8qIFJlc2V0IHNpemUgb2YgZGlyZWN0IGlub2RlICovCisJc2JpLT5kaXJlY3RfaW5vZGUtPmlfc2l6ZSA9ICBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplOworCiAJaWYgKHNiaS0+bW50ZmxhZyAmIEpGU19JTkxJTkVMT0cpIHsKIAkJLyoKIAkJICogZGVhY3RpdmF0ZSBvbGQgaW5saW5lIGxvZwpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCA1ODU2ODY2Li41ZTc3NGVkIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtMjEwLDYgKzIxMCwxMCBAQAogCQl1bmxvYWRfbmxzKHNiaS0+bmxzX3RhYik7CiAJc2JpLT5ubHNfdGFiID0gTlVMTDsKIAorCXRydW5jYXRlX2lub2RlX3BhZ2VzKHNiaS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmcsIDApOworCWlwdXQoc2JpLT5kaXJlY3RfaW5vZGUpOworCXNiaS0+ZGlyZWN0X2lub2RlID0gTlVMTDsKKwogCWtmcmVlKHNiaSk7CiB9CiAKQEAgLTM1OCw2ICszNjIsMTIgQEAKIAl9CiAKIAlpZiAoKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSAmJiAhKCpmbGFncyAmIE1TX1JET05MWSkpIHsKKwkJLyoKKwkJICogSW52YWxpZGF0ZSBhbnkgcHJldmlvdXNseSByZWFkIG1ldGFkYXRhLiAgZnNjayBtYXkgaGF2ZQorCQkgKiBjaGFuZ2VkIHRoZSBvbi1kaXNrIGRhdGEgc2luY2Ugd2UgbW91bnRlZCByL28KKwkJICovCisJCXRydW5jYXRlX2lub2RlX3BhZ2VzKEpGU19TQkkoc2IpLT5kaXJlY3RfaW5vZGUtPmlfbWFwcGluZywgMCk7CisKIAkJSkZTX1NCSShzYiktPmZsYWcgPSBmbGFnOwogCQlyZXR1cm4gamZzX21vdW50X3J3KHNiLCAxKTsKIAl9CkBAIC00MjgsMTIgKzQzOCwyNiBAQAogCXNiLT5zX29wID0gJmpmc19zdXBlcl9vcGVyYXRpb25zOwogCXNiLT5zX2V4cG9ydF9vcCA9ICZqZnNfZXhwb3J0X29wZXJhdGlvbnM7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgZGlyZWN0LW1hcHBpbmcgaW5vZGUvYWRkcmVzcy1zcGFjZQorCSAqLworCWlub2RlID0gbmV3X2lub2RlKHNiKTsKKwlpZiAoaW5vZGUgPT0gTlVMTCkKKwkJZ290byBvdXRfa2ZyZWU7CisJaW5vZGUtPmlfaW5vID0gMDsKKwlpbm9kZS0+aV9ubGluayA9IDE7CisJaW5vZGUtPmlfc2l6ZSA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemU7CisJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmamZzX21ldGFwYWdlX2FvcHM7CisJbWFwcGluZ19zZXRfZ2ZwX21hc2soaW5vZGUtPmlfbWFwcGluZywgR0ZQX05PRlMpOworCisJc2JpLT5kaXJlY3RfaW5vZGUgPSBpbm9kZTsKKwogCXJjID0gamZzX21vdW50KHNiKTsKIAlpZiAocmMpIHsKIAkJaWYgKCFzaWxlbnQpIHsKIAkJCWpmc19lcnIoImpmc19tb3VudCBmYWlsZWQgdy9yZXR1cm4gY29kZSA9ICVkIiwgcmMpOwogCQl9Ci0JCWdvdG8gb3V0X2tmcmVlOworCQlnb3RvIG91dF9tb3VudF9mYWlsZWQ7CiAJfQogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJc2JpLT5sb2cgPSBOVUxMOwpAQCAtNDgyLDYgKzUwNiwxMyBAQAogCWlmIChyYykgewogCQlqZnNfZXJyKCJqZnNfdW1vdW50IGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkIiwgcmMpOwogCX0KK291dF9tb3VudF9mYWlsZWQ6CisJZmlsZW1hcF9mZGF0YXdyaXRlKHNiaS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmcpOworCWZpbGVtYXBfZmRhdGF3YWl0KHNiaS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmcpOworCXRydW5jYXRlX2lub2RlX3BhZ2VzKHNiaS0+ZGlyZWN0X2lub2RlLT5pX21hcHBpbmcsIDApOworCW1ha2VfYmFkX2lub2RlKHNiaS0+ZGlyZWN0X2lub2RlKTsKKwlpcHV0KHNiaS0+ZGlyZWN0X2lub2RlKTsKKwlzYmktPmRpcmVjdF9pbm9kZSA9IE5VTEw7CiBvdXRfa2ZyZWU6CiAJaWYgKHNiaS0+bmxzX3RhYikKIAkJdW5sb2FkX25scyhzYmktPm5sc190YWIpOwpAQCAtNTI3LDggKzU1OCwxMCBAQAogCXN0cnVjdCBqZnNfbG9nICpsb2cgPSBKRlNfU0JJKHNiKS0+bG9nOwogCiAJLyogbG9nID09IE5VTEwgaW5kaWNhdGVzIHJlYWQtb25seSBtb3VudCAqLwotCWlmIChsb2cpCisJaWYgKGxvZykgewogCQlqZnNfZmx1c2hfam91cm5hbChsb2csIHdhaXQpOworCQlqZnNfc3luY3B0KGxvZyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9tcGFnZS5jIGIvZnMvbXBhZ2UuYwppbmRleCBlN2Q4ZDFhLi4zMmM3YzhmIDEwMDY0NAotLS0gYS9mcy9tcGFnZS5jCisrKyBiL2ZzL21wYWdlLmMKQEAgLTE2MCw1MiArMTYwLDYgQEAKIAl9IHdoaWxlIChwYWdlX2JoICE9IGhlYWQpOwogfQogCi0vKioKLSAqIG1wYWdlX3JlYWRwYWdlcyAtIHBvcHVsYXRlIGFuIGFkZHJlc3Mgc3BhY2Ugd2l0aCBzb21lIHBhZ2VzLCBhbmQKLSAqICAgICAgICAgICAgICAgICAgICAgICBzdGFydCByZWFkcyBhZ2FpbnN0IHRoZW0uCi0gKgotICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlCi0gKiBAcGFnZXM6IFRoZSBhZGRyZXNzIG9mIGEgbGlzdF9oZWFkIHdoaWNoIGNvbnRhaW5zIHRoZSB0YXJnZXQgcGFnZXMuICBUaGVzZQotICogICBwYWdlcyBoYXZlIHRoZWlyIC0+aW5kZXggcG9wdWxhdGVkIGFuZCBhcmUgb3RoZXJ3aXNlIHVuaW5pdGlhbGlzZWQuCi0gKgotICogICBUaGUgcGFnZSBhdCBAcGFnZXMtPnByZXYgaGFzIHRoZSBsb3dlc3QgZmlsZSBvZmZzZXQsIGFuZCByZWFkcyBzaG91bGQgYmUKLSAqICAgaXNzdWVkIGluIEBwYWdlcy0+cHJldiB0byBAcGFnZXMtPm5leHQgb3JkZXIuCi0gKgotICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGF0ICpAcGFnZXMKLSAqIEBnZXRfYmxvY2s6IFRoZSBmaWxlc3lzdGVtJ3MgYmxvY2sgbWFwcGVyIGZ1bmN0aW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIHBhZ2VzIGFuZCB0aGUgYmxvY2tzIHdpdGhpbiBlYWNoIHBhZ2UsIGJ1aWxkaW5nIGFuZAotICogZW1pdHRpbmcgbGFyZ2UgQklPcy4KLSAqCi0gKiBJZiBhbnl0aGluZyB1bnVzdWFsIGhhcHBlbnMsIHN1Y2ggYXM6Ci0gKgotICogLSBlbmNvdW50ZXJpbmcgYSBwYWdlIHdoaWNoIGhhcyBidWZmZXJzCi0gKiAtIGVuY291bnRlcmluZyBhIHBhZ2Ugd2hpY2ggaGFzIGEgbm9uLWhvbGUgYWZ0ZXIgYSBob2xlCi0gKiAtIGVuY291bnRlcmluZyBhIHBhZ2Ugd2l0aCBub24tY29udGlndW91cyBibG9ja3MKLSAqCi0gKiB0aGVuIHRoaXMgY29kZSBqdXN0IGdpdmVzIHVwIGFuZCBjYWxscyB0aGUgYnVmZmVyX2hlYWQtYmFzZWQgcmVhZCBmdW5jdGlvbi4KLSAqIEl0IGRvZXMgaGFuZGxlIGEgcGFnZSB3aGljaCBoYXMgaG9sZXMgYXQgdGhlIGVuZCAtIHRoYXQgaXMgYSBjb21tb24gY2FzZToKLSAqIHRoZSBlbmQtb2YtZmlsZSBvbiBibG9ja3NpemUgPCBQQUdFX0NBQ0hFX1NJWkUgc2V0dXBzLgotICoKLSAqIEJIX0JvdW5kYXJ5IGV4cGxhbmF0aW9uOgotICoKLSAqIFRoZXJlIGlzIGEgcHJvYmxlbS4gIFRoZSBtcGFnZSByZWFkIGNvZGUgYXNzZW1ibGVzIHNldmVyYWwgcGFnZXMsIGdldHMgYWxsCi0gKiB0aGVpciBkaXNrIG1hcHBpbmdzLCBhbmQgdGhlbiBzdWJtaXRzIHRoZW0gYWxsLiAgVGhhdCdzIGZpbmUsIGJ1dCBvYnRhaW5pbmcKLSAqIHRoZSBkaXNrIG1hcHBpbmdzIG1heSByZXF1aXJlIEkvTy4gIFJlYWRzIG9mIGluZGlyZWN0IGJsb2NrcywgZm9yIGV4YW1wbGUuCi0gKgotICogU28gYW4gbXBhZ2UgcmVhZCBvZiB0aGUgZmlyc3QgMTYgYmxvY2tzIG9mIGFuIGV4dDIgZmlsZSB3aWxsIGNhdXNlIEkvTyB0byBiZQotICogc3VibWl0dGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0gKiAJMTIgMCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMyAxNCAxNSAxNgotICogYmVjYXVzZSB0aGUgaW5kaXJlY3QgYmxvY2sgaGFzIHRvIGJlIHJlYWQgdG8gZ2V0IHRoZSBtYXBwaW5ncyBvZiBibG9ja3MKLSAqIDEzLDE0LDE1LDE2LiAgT2J2aW91c2x5LCB0aGlzIGltcGFjdHMgcGVyZm9ybWFuY2UuCi0gKiAKLSAqIFNvIHdoYXQgd2UgZG8gaXQgdG8gYWxsb3cgdGhlIGZpbGVzeXN0ZW0ncyBnZXRfYmxvY2soKSBmdW5jdGlvbiB0byBzZXQKLSAqIEJIX0JvdW5kYXJ5IHdoZW4gaXQgbWFwcyBibG9jayAxMS4gIEJIX0JvdW5kYXJ5IHNheXM6IG1hcHBpbmcgb2YgdGhlIGJsb2NrCi0gKiBhZnRlciB0aGlzIG9uZSB3aWxsIHJlcXVpcmUgSS9PIGFnYWluc3QgYSBibG9jayB3aGljaCBpcyBwcm9iYWJseSBjbG9zZSB0bwotICogdGhpcyBvbmUuICBTbyB5b3Ugc2hvdWxkIHB1c2ggd2hhdCBJL08geW91IGhhdmUgY3VycmVudGx5IGFjY3VtdWxhdGVkLgotICoKLSAqIFRoaXMgYWxsIGNhdXNlcyB0aGUgZGlzayByZXF1ZXN0cyB0byBiZSBpc3N1ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCi0gKi8KIHN0YXRpYyBzdHJ1Y3QgYmlvICoKIGRvX21wYWdlX3JlYWRwYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG5yX3BhZ2VzLAogCQkJc2VjdG9yX3QgKmxhc3RfYmxvY2tfaW5fYmlvLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spCkBAIC0zMjAsNiArMjc0LDUyIEBACiAJZ290byBvdXQ7CiB9CiAKKy8qKgorICogbXBhZ2VfcmVhZHBhZ2VzIC0gcG9wdWxhdGUgYW4gYWRkcmVzcyBzcGFjZSB3aXRoIHNvbWUgcGFnZXMsIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHJlYWRzIGFnYWluc3QgdGhlbS4KKyAqCisgKiBAbWFwcGluZzogdGhlIGFkZHJlc3Nfc3BhY2UKKyAqIEBwYWdlczogVGhlIGFkZHJlc3Mgb2YgYSBsaXN0X2hlYWQgd2hpY2ggY29udGFpbnMgdGhlIHRhcmdldCBwYWdlcy4gIFRoZXNlCisgKiAgIHBhZ2VzIGhhdmUgdGhlaXIgLT5pbmRleCBwb3B1bGF0ZWQgYW5kIGFyZSBvdGhlcndpc2UgdW5pbml0aWFsaXNlZC4KKyAqCisgKiAgIFRoZSBwYWdlIGF0IEBwYWdlcy0+cHJldiBoYXMgdGhlIGxvd2VzdCBmaWxlIG9mZnNldCwgYW5kIHJlYWRzIHNob3VsZCBiZQorICogICBpc3N1ZWQgaW4gQHBhZ2VzLT5wcmV2IHRvIEBwYWdlcy0+bmV4dCBvcmRlci4KKyAqCisgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgYXQgKkBwYWdlcworICogQGdldF9ibG9jazogVGhlIGZpbGVzeXN0ZW0ncyBibG9jayBtYXBwZXIgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgcGFnZXMgYW5kIHRoZSBibG9ja3Mgd2l0aGluIGVhY2ggcGFnZSwgYnVpbGRpbmcgYW5kCisgKiBlbWl0dGluZyBsYXJnZSBCSU9zLgorICoKKyAqIElmIGFueXRoaW5nIHVudXN1YWwgaGFwcGVucywgc3VjaCBhczoKKyAqCisgKiAtIGVuY291bnRlcmluZyBhIHBhZ2Ugd2hpY2ggaGFzIGJ1ZmZlcnMKKyAqIC0gZW5jb3VudGVyaW5nIGEgcGFnZSB3aGljaCBoYXMgYSBub24taG9sZSBhZnRlciBhIGhvbGUKKyAqIC0gZW5jb3VudGVyaW5nIGEgcGFnZSB3aXRoIG5vbi1jb250aWd1b3VzIGJsb2NrcworICoKKyAqIHRoZW4gdGhpcyBjb2RlIGp1c3QgZ2l2ZXMgdXAgYW5kIGNhbGxzIHRoZSBidWZmZXJfaGVhZC1iYXNlZCByZWFkIGZ1bmN0aW9uLgorICogSXQgZG9lcyBoYW5kbGUgYSBwYWdlIHdoaWNoIGhhcyBob2xlcyBhdCB0aGUgZW5kIC0gdGhhdCBpcyBhIGNvbW1vbiBjYXNlOgorICogdGhlIGVuZC1vZi1maWxlIG9uIGJsb2Nrc2l6ZSA8IFBBR0VfQ0FDSEVfU0laRSBzZXR1cHMuCisgKgorICogQkhfQm91bmRhcnkgZXhwbGFuYXRpb246CisgKgorICogVGhlcmUgaXMgYSBwcm9ibGVtLiAgVGhlIG1wYWdlIHJlYWQgY29kZSBhc3NlbWJsZXMgc2V2ZXJhbCBwYWdlcywgZ2V0cyBhbGwKKyAqIHRoZWlyIGRpc2sgbWFwcGluZ3MsIGFuZCB0aGVuIHN1Ym1pdHMgdGhlbSBhbGwuICBUaGF0J3MgZmluZSwgYnV0IG9idGFpbmluZworICogdGhlIGRpc2sgbWFwcGluZ3MgbWF5IHJlcXVpcmUgSS9PLiAgUmVhZHMgb2YgaW5kaXJlY3QgYmxvY2tzLCBmb3IgZXhhbXBsZS4KKyAqCisgKiBTbyBhbiBtcGFnZSByZWFkIG9mIHRoZSBmaXJzdCAxNiBibG9ja3Mgb2YgYW4gZXh0MiBmaWxlIHdpbGwgY2F1c2UgSS9PIHRvIGJlCisgKiBzdWJtaXR0ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAqIAkxMiAwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEzIDE0IDE1IDE2CisgKiBiZWNhdXNlIHRoZSBpbmRpcmVjdCBibG9jayBoYXMgdG8gYmUgcmVhZCB0byBnZXQgdGhlIG1hcHBpbmdzIG9mIGJsb2NrcworICogMTMsMTQsMTUsMTYuICBPYnZpb3VzbHksIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZS4KKyAqCisgKiBTbyB3aGF0IHdlIGRvIGl0IHRvIGFsbG93IHRoZSBmaWxlc3lzdGVtJ3MgZ2V0X2Jsb2NrKCkgZnVuY3Rpb24gdG8gc2V0CisgKiBCSF9Cb3VuZGFyeSB3aGVuIGl0IG1hcHMgYmxvY2sgMTEuICBCSF9Cb3VuZGFyeSBzYXlzOiBtYXBwaW5nIG9mIHRoZSBibG9jaworICogYWZ0ZXIgdGhpcyBvbmUgd2lsbCByZXF1aXJlIEkvTyBhZ2FpbnN0IGEgYmxvY2sgd2hpY2ggaXMgcHJvYmFibHkgY2xvc2UgdG8KKyAqIHRoaXMgb25lLiAgU28geW91IHNob3VsZCBwdXNoIHdoYXQgSS9PIHlvdSBoYXZlIGN1cnJlbnRseSBhY2N1bXVsYXRlZC4KKyAqCisgKiBUaGlzIGFsbCBjYXVzZXMgdGhlIGRpc2sgcmVxdWVzdHMgdG8gYmUgaXNzdWVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICovCiBpbnQKIG1wYWdlX3JlYWRwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCiAJCQkJdW5zaWduZWQgbnJfcGFnZXMsIGdldF9ibG9ja190IGdldF9ibG9jaykKQEAgLTcyNyw2ICs3MjcsOCBAQAogCQkJCQkJJmxhc3RfYmxvY2tfaW5fYmlvLCAmcmV0LCB3YmMsCiAJCQkJCQl3cml0ZXBhZ2VfZm4pOwogCQkJfQorCQkJaWYgKHVubGlrZWx5KHJldCA9PSBXUklURVBBR0VfQUNUSVZBVEUpKQorCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJaWYgKHJldCB8fCAoLS0od2JjLT5ucl90b193cml0ZSkgPD0gMCkpCiAJCQkJZG9uZSA9IDE7CiAJCQlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNTc1NTRiZi4uZTMxOTAzYSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTE0MTksNiArMTQxOSw4IEBACiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY190Z2lkX2F0dHJfaW5vZGVfb3BlcmF0aW9uczsKICNlbmRpZgogCitzdGF0aWMgaW50IGdldF90aWRfbGlzdChpbnQgaW5kZXgsIHVuc2lnbmVkIGludCAqdGlkcywgc3RydWN0IGlub2RlICpkaXIpOworCiAvKiBTTVAtc2FmZSAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfcGlkZW50X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgCiAJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0xNDU4LDcgKzE0NjAsNyBAQAogCSAqLwogCXN3aXRjaChwLT50eXBlKSB7CiAJCWNhc2UgUFJPQ19UR0lEX1RBU0s6Ci0JCQlpbm9kZS0+aV9ubGluayA9IDM7CisJCQlpbm9kZS0+aV9ubGluayA9IDIgKyBnZXRfdGlkX2xpc3QoMiwgTlVMTCwgZGlyKTsKIAkJCWlub2RlLT5pX29wID0gJnByb2NfdGFza19pbm9kZV9vcGVyYXRpb25zOwogCQkJaW5vZGUtPmlfZm9wID0gJnByb2NfdGFza19vcGVyYXRpb25zOwogCQkJYnJlYWs7CkBAIC0xNzAxLDEzICsxNzAzLDEzIEBACiB9OwogCiAvKioKLSAqIHByb2NfcGlkX3VuaGFzaCAtICBVbmhhc2ggL3Byb2MvPHBpZD4gZW50cnkgZnJvbSB0aGUgZGNhY2hlLgorICogcHJvY19waWRfdW5oYXNoIC0gIFVuaGFzaCAvcHJvYy9AcGlkIGVudHJ5IGZyb20gdGhlIGRjYWNoZS4KICAqIEBwOiB0YXNrIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQuCiAgKgotICogRHJvcHMgdGhlIC9wcm9jLzxwaWQ+IGRjYWNoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIGNoYWlucy4KKyAqIERyb3BzIHRoZSAvcHJvYy9AcGlkIGRjYWNoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIGNoYWlucy4KICAqCi0gKiBEcm9wcGluZyAvcHJvYy88cGlkPiBlbnRyaWVzIGFuZCBkZXRhY2hfcGlkIG11c3QgYmUgc3luY2hyb25lb3VzLAotICogb3RoZXJ3aXNlIGUuZy4gL3Byb2MvPHBpZD4vZXhlIG1pZ2h0IHBvaW50IHRvIHRoZSB3cm9uZyBleGVjdXRhYmxlLAorICogRHJvcHBpbmcgL3Byb2MvQHBpZCBlbnRyaWVzIGFuZCBkZXRhY2hfcGlkIG11c3QgYmUgc3luY2hyb25lb3VzLAorICogb3RoZXJ3aXNlIGUuZy4gL3Byb2MvQHBpZC9leGUgbWlnaHQgcG9pbnQgdG8gdGhlIHdyb25nIGV4ZWN1dGFibGUsCiAgKiBpZiB0aGUgcGlkIHZhbHVlIGlzIGltbWVkaWF0ZWx5IHJldXNlZC4gVGhpcyBpcyBlbmZvcmNlZCBieQogICogLSBjYWxsZXIgbXVzdCBhY3F1aXJlIHNwaW5fbG9jayhwLT5wcm9jX2xvY2spCiAgKiAtIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZXRhY2hfcGlkKCkKQEAgLTE3MzksOCArMTc0MSw4IEBACiB9CiAKIC8qKgotICogcHJvY19waWRfZmx1c2ggLSByZWNvdmVyIG1lbW9yeSB1c2VkIGJ5IHN0YWxlIC9wcm9jLzxwaWQ+L3ggZW50cmllcwotICogQHByb2NfZW50cnk6IGRpcmVjdG95IHRvIHBydW5lLgorICogcHJvY19waWRfZmx1c2ggLSByZWNvdmVyIG1lbW9yeSB1c2VkIGJ5IHN0YWxlIC9wcm9jL0BwaWQveCBlbnRyaWVzCisgKiBAcHJvY19kZW50cnk6IGRpcmVjdG95IHRvIHBydW5lLgogICoKICAqIFNocmluayB0aGUgL3Byb2MgZGlyZWN0b3J5IHRoYXQgd2FzIHVzZWQgYnkgdGhlIGp1c3Qga2lsbGVkIHRocmVhZC4KICAqLwpAQCAtMTgwMCw4ICsxODAyLDEyIEBACiAJaW5vZGUtPmlfbW9kZSA9IFNfSUZESVJ8U19JUlVHT3xTX0lYVUdPOwogCWlub2RlLT5pX29wID0gJnByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJnByb2NfdGdpZF9iYXNlX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfbmxpbmsgPSAzOwogCWlub2RlLT5pX2ZsYWdzfD1TX0lNTVVUQUJMRTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKwlpbm9kZS0+aV9ubGluayA9IDU7CisjZWxzZQorCWlub2RlLT5pX25saW5rID0gNDsKKyNlbmRpZgogCiAJZGVudHJ5LT5kX29wID0gJnBpZF9iYXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC0xODU1LDggKzE4NjEsMTIgQEAKIAlpbm9kZS0+aV9tb2RlID0gU19JRkRJUnxTX0lSVUdPfFNfSVhVR087CiAJaW5vZGUtPmlfb3AgPSAmcHJvY190aWRfYmFzZV9pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX2ZvcCA9ICZwcm9jX3RpZF9iYXNlX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfbmxpbmsgPSAzOwogCWlub2RlLT5pX2ZsYWdzfD1TX0lNTVVUQUJMRTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKwlpbm9kZS0+aV9ubGluayA9IDQ7CisjZWxzZQorCWlub2RlLT5pX25saW5rID0gMzsKKyNlbmRpZgogCiAJZGVudHJ5LT5kX29wID0gJnBpZF9iYXNlX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC0xOTM1LDcgKzE5NDUsOCBAQAogCiAJCWlmICgtLWluZGV4ID49IDApCiAJCQljb250aW51ZTsKLQkJdGlkc1tucl90aWRzXSA9IHRpZDsKKwkJaWYgKHRpZHMgIT0gTlVMTCkKKwkJCXRpZHNbbnJfdGlkc10gPSB0aWQ7CiAJCW5yX3RpZHMrKzsKIAkJaWYgKG5yX3RpZHMgPj0gUFJPQ19NQVhQSURTKQogCQkJYnJlYWs7CkBAIC0yMDM1LDYgKzIwNDYsNyBAQAogCX0KIAogCW5yX3RpZHMgPSBnZXRfdGlkX2xpc3QocG9zLCB0aWRfYXJyYXksIGlub2RlKTsKKwlpbm9kZS0+aV9ubGluayA9IHBvcyArIG5yX3RpZHM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfdGlkczsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgaiA9IFBST0NfTlVNQlVGOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvYml0bWFwLmMgYi9mcy9yZWlzZXJmcy9iaXRtYXAuYwppbmRleCBhNGUyZWQ1Li40OWM0NzljIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9iaXRtYXAuYworKysgYi9mcy9yZWlzZXJmcy9iaXRtYXAuYwpAQCAtMjYwLDggKzI2MCw5IEBACiAvKgogICogdGhlIHBhY2tpbmcgaXMgcmV0dXJuZWQgaW4gZGlzayBieXRlIG9yZGVyCiAgKi8KLXUzMiByZWlzZXJmc19jaG9vc2VfcGFja2luZyhzdHJ1Y3QgaW5vZGUgKmRpcikgewotICAgIHUzMiBwYWNraW5nOworX19sZTMyIHJlaXNlcmZzX2Nob29zZV9wYWNraW5nKHN0cnVjdCBpbm9kZSAqZGlyKQoreworICAgIF9fbGUzMiBwYWNraW5nOwogICAgIGlmIChURVNUX09QVElPTihwYWNraW5nX2dyb3VwcywgZGlyLT5pX3NiKSkgewogCXUzMiBwYXJlbnRfZGlyID0gbGUzMl90b19jcHUoSU5PREVfUEtFWShkaXIpLT5rX2Rpcl9pZCk7CiAJLyoKQEAgLTY1NSw3ICs2NTYsNyBAQAogICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOwogICAgIHN0cnVjdCBpdGVtX2hlYWQgKiBpaDsKICAgICBpbnQgcG9zX2luX2l0ZW07Ci0gICAgX191MzIgKiBpdGVtOworICAgIF9fbGUzMiAqIGl0ZW07CiAgICAgaW50IHJldCA9IDA7CiAKICAgICBpZiAoIWhpbnQtPnBhdGgpCQkvKiByZWlzZXJmcyBjb2RlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdy9vIHBvaW50ZXIgdG8gcGF0aApAQCAtNzM2LDcgKzczNyw3IEBACiAjaWZkZWYgRElTUExBQ0VfTkVXX1BBQ0tJTkdfTE9DQUxJVElFUwogc3RhdGljIGlubGluZSB2b2lkIGRpc3BsYWNlX25ld19wYWNraW5nX2xvY2FsaXR5IChyZWlzZXJmc19ibG9ja25yX2hpbnRfdCAqaGludCkKIHsKLSAgICBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICoga2V5ID0gJmhpbnQtPmtleTsKKyAgICBzdHJ1Y3QgaW5fY29yZV9rZXkgKiBrZXkgPSAmaGludC0+a2V5OwogCiAgICAgaGludC0+dGgtPmRpc3BsYWNlX25ld19ibG9ja3MgPSAwOwogICAgIGhpbnQtPnNlYXJjaF9zdGFydCA9IGhpbnQtPmJlZyArIGtleWVkX2hhc2goKGNoYXIqKSgma2V5LT5rX29iamVjdGlkKSw0KSAlIChoaW50LT5lbmQgLSBoaW50LT5iZWcpOwpAQCAtNzc3LDcgKzc3OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBodW5kcmVkdGhfc2xpY2VzIChyZWlzZXJmc19ibG9ja25yX2hpbnRfdCAqIGhpbnQpCiB7Ci0gICAgc3RydWN0IHJlaXNlcmZzX2tleSAqIGtleSA9ICZoaW50LT5rZXk7CisgICAgc3RydWN0IGluX2NvcmVfa2V5ICoga2V5ID0gJmhpbnQtPmtleTsKICAgICBiX2Jsb2NrbnJfdCBzbGljZV9zdGFydDsKIAogICAgIHNsaWNlX3N0YXJ0ID0gKGtleWVkX2hhc2goKGNoYXIqKSgma2V5LT5rX2Rpcl9pZCksNCkgJSAxMDApICogKGhpbnQtPmVuZCAvIDEwMCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9kaXIuYyBiL2ZzL3JlaXNlcmZzL2Rpci5jCmluZGV4IGQxNTE0YTkuLmZiZGU0YjAxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kaXIuYworKysgYi9mcy9yZWlzZXJmcy9kaXIuYwpAQCAtMjA5LDggKzIwOSw4IEBACiAvKiBjb21wb3NlIGRpcmVjdG9yeSBpdGVtIGNvbnRhaW5pbmcgIi4iIGFuZCAiLi4iIGVudHJpZXMgKGVudHJpZXMgYXJlCiAgICBub3QgYWxpZ25lZCB0byA0IGJ5dGUgYm91bmRhcnkpICovCiAvKiB0aGUgbGFzdCBmb3VyIHBhcmFtcyBhcmUgTEUgKi8KLXZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbV92MSAoY2hhciAqIGJvZHksIF9fdTMyIGRpcmlkLCBfX3UzMiBvYmppZCwKLQkJCSAgICAgX191MzIgcGFyX2RpcmlkLCBfX3UzMiBwYXJfb2JqaWQpCit2b2lkIG1ha2VfZW1wdHlfZGlyX2l0ZW1fdjEgKGNoYXIgKiBib2R5LCBfX2xlMzIgZGlyaWQsIF9fbGUzMiBvYmppZCwKKwkJCSAgICAgX19sZTMyIHBhcl9kaXJpZCwgX19sZTMyIHBhcl9vYmppZCkKIHsKICAgICBzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqIGRlaDsKIApAQCAtMjQyLDggKzI0Miw4IEBACiB9CiAKIC8qIGNvbXBvc2UgZGlyZWN0b3J5IGl0ZW0gY29udGFpbmluZyAiLiIgYW5kICIuLiIgZW50cmllcyAqLwotdm9pZCBtYWtlX2VtcHR5X2Rpcl9pdGVtIChjaGFyICogYm9keSwgX191MzIgZGlyaWQsIF9fdTMyIG9iamlkLAotCQkJICBfX3UzMiBwYXJfZGlyaWQsIF9fdTMyIHBhcl9vYmppZCkKK3ZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbSAoY2hhciAqIGJvZHksIF9fbGUzMiBkaXJpZCwgX19sZTMyIG9iamlkLAorCQkJICBfX2xlMzIgcGFyX2RpcmlkLCBfX2xlMzIgcGFyX29iamlkKQogewogICAgIHN0cnVjdCByZWlzZXJmc19kZV9oZWFkICogZGVoOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggMjY5NTAxMS4uMjIzMGFmZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgc3RydWN0IGNwdV9rZXkga2V5OyAvLyBjcHUga2V5IG9mIGl0ZW0gdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCiAgICAgc3RydWN0IGl0ZW1faGVhZCAqaWg7IC8vIHBvaW50ZXIgdG8gaXRlbSBoZWFkIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aAogICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7IC8vIEJ1ZmZlciBoZWFkIHRoYXQgY29udGFpbnMgaXRlbXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCi0gICAgX191MzIgKiBpdGVtOyAvLyBwb2ludGVyIHRvIGl0ZW0gd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aAorICAgIF9fbGUzMiAqIGl0ZW07IC8vIHBvaW50ZXIgdG8gaXRlbSB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCiAgICAgSU5JVElBTElaRV9QQVRIKHBhdGgpOyAvLyBwYXRoIHRvIGl0ZW0sIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aC4KICAgICBiX2Jsb2NrbnJfdCAqYWxsb2NhdGVkX2Jsb2NrczsgLy8gUG9pbnRlciB0byBhIHBsYWNlIHdoZXJlIGFsbG9jYXRlZCBibG9ja251bWJlcnMgd291bGQgYmUgc3RvcmVkLgogICAgIHJlaXNlcmZzX2Jsb2NrbnJfaGludF90IGhpbnQ7IC8vIGhpbnQgc3RydWN0dXJlIGZvciBibG9jayBhbGxvY2F0b3IuCkBAIC04OTEsNyArODkxLDcgQEAKICAgICBzdHJ1Y3QgaXRlbV9oZWFkICppaCA9IE5VTEw7IC8vIHBvaW50ZXIgdG8gaXRlbSBoZWFkIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aAogICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqaXRlbWJ1Zj1OVUxMOyAvLyBCdWZmZXIgaGVhZCB0aGF0IGNvbnRhaW5zIGl0ZW1zIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aAogICAgIElOSVRJQUxJWkVfUEFUSChwYXRoKTsgLy8gcGF0aCB0byBpdGVtLCB0aGF0IHdlIGFyZSBnb2luZyB0byBkZWFsIHdpdGguCi0gICAgX191MzIgKiBpdGVtPU5VTEw7IC8vIHBvaW50ZXIgdG8gaXRlbSB3ZSBhcmUgZ29pbmcgdG8gZGVhbCB3aXRoCisgICAgX19sZTMyICogaXRlbT1OVUxMOyAvLyBwb2ludGVyIHRvIGl0ZW0gd2UgYXJlIGdvaW5nIHRvIGRlYWwgd2l0aAogICAgIGludCBpdGVtX3Bvcz0tMTsgLyogUG9zaXRpb24gaW4gaW5kaXJlY3QgaXRlbSAqLwogCiAKQEAgLTEyODQsMTAgKzEyODQsMTEgQEAKIAlyZWlzZXJmc19jbGFpbV9ibG9ja3NfdG9fYmVfYWxsb2NhdGVkKGlub2RlLT5pX3NiLCBudW1fcGFnZXMgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKSk7CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAotCWlmICggIW51bV9wYWdlcyApIHsgLyogSWYgd2UgZG8gbm90IGhhdmUgZW5vdWdoIHNwYWNlIGV2ZW4gZm9yICovCi0JICAgIHJlcyA9IC1FTk9TUEM7ICAvKiBzaW5nbGUgcGFnZSwgcmV0dXJuIC1FTk9TUEMgKi8KLQkgICAgaWYgKCBwb3MgPiAoaW5vZGUtPmlfc2l6ZSAmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUtMSkpKQotCQlicmVhazsgLy8gSW4gY2FzZSB3ZSBhcmUgd3JpdGluZyBwYXN0IHRoZSBmaWxlIGVuZCwgYnJlYWsuCisJaWYgKCAhbnVtX3BhZ2VzICkgeyAvKiBJZiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2ggc3BhY2UgZXZlbiBmb3IgYSBzaW5nbGUgcGFnZS4uLiAqLworCSAgICBpZiAoIHBvcyA+IGlub2RlLT5pX3NpemUraW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLShwb3MgJiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLTEpKSkgeworCQlyZXMgPSAtRU5PU1BDOworCQlicmVhazsgLy8gSW4gY2FzZSB3ZSBhcmUgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGxhc3QgZmlsZSBibG9jaywgYnJlYWsuCisJICAgIH0KIAkgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBwb3NzaWJseSBvdmVyd3JpdGluZyB0aGUgZmlsZSwgc28KIAkgICAgLy8gbGV0J3Mgc2V0IHdyaXRlIHNpemUgdG8gYmUgZXF1YWwgb3IgbGVzcyB0aGFuIGJsb2Nrc2l6ZS4KIAkgICAgLy8gVGhpcyB3YXkgd2UgZ2V0IGl0IGNvcnJlY3RseSBmb3IgZmlsZSBob2xlcy4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDc1NDMwMzEuLjI3MTFkZmYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICBkb25lIGFscmVhZHkgb3Igbm9uLWhvbGUgcG9zaXRpb24gaGFzIGJlZW4gZm91bmQgaW4gdGhlIGluZGlyZWN0IGl0ZW0gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFsbG9jYXRpb25fbmVlZGVkIChpbnQgcmV0dmFsLCBiX2Jsb2NrbnJfdCBhbGxvY2F0ZWQsIAogCQkJCSAgICAgc3RydWN0IGl0ZW1faGVhZCAqIGloLAotCQkJCSAgICAgX191MzIgKiBpdGVtLCBpbnQgcG9zX2luX2l0ZW0pCisJCQkJICAgICBfX2xlMzIgKiBpdGVtLCBpbnQgcG9zX2luX2l0ZW0pCiB7CiAgIGlmIChhbGxvY2F0ZWQpCiAJIHJldHVybiAwOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAgICAgYmggPSBnZXRfbGFzdF9iaCAoJnBhdGgpOwogICAgIGloID0gZ2V0X2loICgmcGF0aCk7CiAgICAgaWYgKGlzX2luZGlyZWN0X2xlX2loIChpaCkpIHsKLQlfX3UzMiAqIGluZF9pdGVtID0gKF9fdTMyICopQl9JX1BJVEVNIChiaCwgaWgpOworCV9fbGUzMiAqIGluZF9pdGVtID0gKF9fbGUzMiAqKUJfSV9QSVRFTSAoYmgsIGloKTsKIAkKIAkvKiBGSVhNRTogaGVyZSB3ZSBjb3VsZCBjYWNoZSBpbmRpcmVjdCBpdGVtIG9yIHBhcnQgb2YgaXQgaW4KIAkgICB0aGUgaW5vZGUgdG8gYXZvaWQgc2VhcmNoX2J5X2tleSBpbiBjYXNlIG9mIHN1YnNlcXVlbnQKQEAgLTU4MSw3ICs1ODEsNyBAQAogICAgIHN0cnVjdCBjcHVfa2V5IGtleTsKICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgKiB1bmJoID0gTlVMTDsKICAgICBzdHJ1Y3QgaXRlbV9oZWFkICogaWgsIHRtcF9paDsKLSAgICBfX3UzMiAqIGl0ZW07CisgICAgX19sZTMyICogaXRlbTsKICAgICBpbnQgZG9uZTsKICAgICBpbnQgZnNfZ2VuOwogICAgIHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoID0gTlVMTDsKQEAgLTc0Niw3ICs3NDYsNyBAQAogICAgIGRvbmUgPSAwOwogICAgIGRvIHsKIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWggKGloKSkgewotCSAgICBfX3UzMiB1bnAgPSAwOworCSAgICBfX2xlMzIgdW5wID0gMDsKIAkgICAgc3RydWN0IGNwdV9rZXkgdG1wX2tleTsKIAogCSAgICAvKiBpbmRpcmVjdCBpdGVtIGhhcyB0byBiZSBpbnNlcnRlZCAqLwpAQCAtMTM0MSw4ICsxMzQxLDggQEAKICAgICBrZXkudmVyc2lvbiA9IEtFWV9GT1JNQVRfM181OwogICAgIGtleS5vbl9kaXNrX2tleS5rX2Rpcl9pZCA9IGRpcmlubzsKICAgICBrZXkub25fZGlza19rZXkua19vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKLSAgICBrZXkub25fZGlza19rZXkudS5rX29mZnNldF92MS5rX29mZnNldCA9IFNEX09GRlNFVDsKLSAgICBrZXkub25fZGlza19rZXkudS5rX29mZnNldF92MS5rX3VuaXF1ZW5lc3MgPSBTRF9VTklRVUVORVNTOworICAgIGtleS5vbl9kaXNrX2tleS5rX29mZnNldCA9IDA7CisgICAga2V5Lm9uX2Rpc2tfa2V5LmtfdHlwZSA9IDA7CiAKICAgICAvKiBsb29rIGZvciB0aGUgb2JqZWN0J3Mgc3RhdCBkYXRhICovCiAgICAgcmV0dmFsID0gc2VhcmNoX2l0ZW0gKGlub2RlLT5pX3NiLCAma2V5LCAmcGF0aF90b19zZCk7CkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogICAgIHN0cnVjdCBpdGVtX2hlYWQgdG1wX2loIDsKICAgICBzdHJ1Y3QgaXRlbV9oZWFkICppaCA7CiAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA7Ci0gICAgX191MzIgKml0ZW0gOworICAgIF9fbGUzMiAqaXRlbSA7CiAgICAgc3RydWN0IGNwdV9rZXkga2V5IDsKICAgICBJTklUSUFMSVpFX1BBVEgocGF0aCkgOwogICAgIGludCBwb3NfaW5faXRlbSA7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pdGVtX29wcy5jIGIvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYwppbmRleCA5Y2Y3YzEzLi4wY2UzM2RiIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCisrKyBiL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKQEAgLTI5NiwxMCArMjk2LDExIEBACiBzdGF0aWMgdm9pZCBpbmRpcmVjdF9wcmludF9pdGVtIChzdHJ1Y3QgaXRlbV9oZWFkICogaWgsIGNoYXIgKiBpdGVtKQogewogICAgIGludCBqOwotICAgIF9fdTMyICogdW5wLCBwcmV2ID0gSU5UX01BWDsKKyAgICBfX2xlMzIgKiB1bnA7CisgICAgX191MzIgcHJldiA9IElOVF9NQVg7CiAgICAgaW50IG51bTsKIAotICAgIHVucCA9IChfX3UzMiAqKWl0ZW07CisgICAgdW5wID0gKF9fbGUzMiAqKWl0ZW07CiAKICAgICBpZiAoaWhfaXRlbV9sZW4oaWgpICUgVU5GTV9QX1NJWkUpCiAJcmVpc2VyZnNfd2FybmluZyAoTlVMTCwgImluZGlyZWN0X3ByaW50X2l0ZW06IGludmFsaWQgaXRlbSBsZW4iKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwppbmRleCBjOWFkM2E3Li4zMDcyY2ZkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMKKysrIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCkBAIC0yMzA2LDEzICsyMzA2LDE2IEBACiAJaWYoICFJU19FUlIoIGpvdXJuYWwgLT4gal9kZXZfZmlsZSApICkgewogCQlzdHJ1Y3QgaW5vZGUgKmpkZXZfaW5vZGUgPSBqb3VybmFsLT5qX2Rldl9maWxlLT5mX21hcHBpbmctPmhvc3Q7CiAJCWlmKCAhU19JU0JMSyggamRldl9pbm9kZSAtPiBpX21vZGUgKSApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcgIChzdXBlciwgImpvdXJuYWxfaW5pdF9kZXY6ICclcycgaXMgIgotCQkJCQkgICAibm90IGEgYmxvY2sgZGV2aWNlIiwgamRldl9uYW1lICk7CisJCQlyZWlzZXJmc193YXJuaW5nKHN1cGVyLCAiam91cm5hbF9pbml0X2RldjogJyVzJyBpcyAiCisJCQkJCSAibm90IGEgYmxvY2sgZGV2aWNlIiwgamRldl9uYW1lICk7CiAJCQlyZXN1bHQgPSAtRU5PVEJMSzsKKwkJCXJlbGVhc2Vfam91cm5hbF9kZXYoIHN1cGVyLCBqb3VybmFsICk7CiAJCX0gZWxzZSAgewogCQkJLyogb2sgKi8KIAkJCWpvdXJuYWwtPmpfZGV2X2JkID0gSV9CREVWKGpkZXZfaW5vZGUpOwogCQkJc2V0X2Jsb2Nrc2l6ZShqb3VybmFsLT5qX2Rldl9iZCwgc3VwZXItPnNfYmxvY2tzaXplKTsKKwkJCXJlaXNlcmZzX2luZm8oc3VwZXIsICJqb3VybmFsX2luaXRfZGV2OiBqb3VybmFsIGRldmljZTogJXNcbiIsCisJCQkJICAgICAgYmRldm5hbWUoam91cm5hbC0+al9kZXZfYmQsIGIpKTsKIAkJfQogCX0gZWxzZSB7CiAJCXJlc3VsdCA9IFBUUl9FUlIoIGpvdXJuYWwgLT4gal9kZXZfZmlsZSApOwpAQCAtMjMyMSwxMSArMjMyNCw2IEBACiAJCQkJICAiam91cm5hbF9pbml0X2RldjogQ2Fubm90IG9wZW4gJyVzJzogJWkiLAogCQkJCSAgamRldl9uYW1lLCByZXN1bHQgKTsKIAl9Ci0JaWYoIHJlc3VsdCAhPSAwICkgewotCQlyZWxlYXNlX2pvdXJuYWxfZGV2KCBzdXBlciwgam91cm5hbCApOwotCX0KLQlyZWlzZXJmc19pbmZvKHN1cGVyLCAiam91cm5hbF9pbml0X2Rldjogam91cm5hbCBkZXZpY2U6ICVzXG4iLAotCQliZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYikpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIzOTMsNyArMjM5MSw3IEBACiAgICAgIGpoID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqKShiaGpoLT5iX2RhdGEpOwogICAgICAKICAgICAgLyogbWFrZSBzdXJlIHRoYXQgam91cm5hbCBtYXRjaGVzIHRvIHRoZSBzdXBlciBibG9jayAqLwotICAgICBpZiAoaXNfcmVpc2VyZnNfanIocnMpICYmIChqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21hZ2ljICE9IHNiX2pwX2pvdXJuYWxfbWFnaWMocnMpKSkgeworICAgICBpZiAoaXNfcmVpc2VyZnNfanIocnMpICYmIChsZTMyX3RvX2NwdShqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21hZ2ljKSAhPSBzYl9qcF9qb3VybmFsX21hZ2ljKHJzKSkpIHsKIAkgcmVpc2VyZnNfd2FybmluZyAocF9zX3NiLCAic2gtNDYwOiBqb3VybmFsIGhlYWRlciBtYWdpYyAleCAiCiAJCQkgICAiKGRldmljZSAlcykgZG9lcyBub3QgbWF0Y2ggdG8gbWFnaWMgZm91bmQgaW4gc3VwZXIgIgogCQkJICAgImJsb2NrICV4IiwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMgYi9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCmluZGV4IDA3ODVjNDMuLmJmZThlMjUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKKysrIGIvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYwpAQCAtMTEsMTMgKzExLDEzIEBACiAKIC8vIGZpbmQgd2hlcmUgb2JqZWN0aWQgbWFwIHN0YXJ0cwogI2RlZmluZSBvYmplY3RpZF9tYXAocyxycykgKG9sZF9mb3JtYXRfb25seSAocykgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKF9fdTMyICopKChzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEgKikocnMpICsgMSkgOlwKLQkJCSAoX191MzIgKikoKHJzKSArIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChfX2xlMzIgKikoKHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSAqKShycykgKyAxKSA6XAorCQkJIChfX2xlMzIgKikoKHJzKSArIDEpKQogCiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAotc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0aWRfbWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzLCBfX3UzMiAqIG1hcCkKK3N0YXRpYyB2b2lkIGNoZWNrX29iamVjdGlkX21hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogcywgX19sZTMyICogbWFwKQogewogICAgIGlmIChsZTMyX3RvX2NwdSAobWFwWzBdKSAhPSAxKQogCXJlaXNlcmZzX3BhbmljIChzLCAidnMtMTUwMTA6IGNoZWNrX29iamVjdGlkX21hcDogbWFwIGNvcnJ1cHRlZDogJWx4IiwKQEAgLTI3LDcgKzI3LDcgQEAKIH0KIAogI2Vsc2UKLXN0YXRpYyB2b2lkIGNoZWNrX29iamVjdGlkX21hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogcywgX191MzIgKiBtYXApCitzdGF0aWMgdm9pZCBjaGVja19vYmplY3RpZF9tYXAgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHMsIF9fbGUzMiAqIG1hcCkKIHs7fQogI2VuZGlmCiAKQEAgLTUyLDcgKzUyLDcgQEAKIHsKICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzID0gdGgtPnRfc3VwZXI7CiAgICAgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICogcnMgPSBTQl9ESVNLX1NVUEVSX0JMT0NLIChzKTsKLSAgICBfX3UzMiAqIG1hcCA9IG9iamVjdGlkX21hcCAocywgcnMpOworICAgIF9fbGUzMiAqIG1hcCA9IG9iamVjdGlkX21hcCAocywgcnMpOwogICAgIF9fdTMyIHVudXNlZF9vYmplY3RpZDsKIAogICAgIEJVR19PTiAoIXRoLT50X3RyYW5zX2lkKTsKQEAgLTk3LDcgKzk3LDcgQEAKIHsKICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzID0gdGgtPnRfc3VwZXI7CiAgICAgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICogcnMgPSBTQl9ESVNLX1NVUEVSX0JMT0NLIChzKTsKLSAgICBfX3UzMiAqIG1hcCA9IG9iamVjdGlkX21hcCAocywgcnMpOworICAgIF9fbGUzMiAqIG1hcCA9IG9iamVjdGlkX21hcCAocywgcnMpOwogICAgIGludCBpID0gMDsKIAogICAgIEJVR19PTiAoIXRoLT50X3RyYW5zX2lkKTsKQEAgLTE3MiwxMiArMTcyLDEyIEBACiAgICAgaW50IG5ld19zaXplID0gKHMtPnNfYmxvY2tzaXplIC0gU0JfU0laRSkgLyBzaXplb2YoX191MzIpIC8gMiAqIDIgOwogICAgIGludCBvbGRfbWF4ID0gc2Jfb2lkX21heHNpemUoZGlza19zYik7CiAgICAgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxICpkaXNrX3NiX3YxIDsKLSAgICBfX3UzMiAqb2JqZWN0aWRfbWFwLCAqbmV3X29iamVjdGlkX21hcCA7CisgICAgX19sZTMyICpvYmplY3RpZF9tYXAsICpuZXdfb2JqZWN0aWRfbWFwIDsKICAgICBpbnQgaSA7CiAKICAgICBkaXNrX3NiX3YxPShzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEgKikoU0JfQlVGRkVSX1dJVEhfU0IocyktPmJfZGF0YSk7Ci0gICAgb2JqZWN0aWRfbWFwID0gKF9fdTMyICopKGRpc2tfc2JfdjEgKyAxKSA7Ci0gICAgbmV3X29iamVjdGlkX21hcCA9IChfX3UzMiAqKShkaXNrX3NiICsgMSkgOworICAgIG9iamVjdGlkX21hcCA9IChfX2xlMzIgKikoZGlza19zYl92MSArIDEpIDsKKyAgICBuZXdfb2JqZWN0aWRfbWFwID0gKF9fbGUzMiAqKShkaXNrX3NiICsgMSkgOwogCiAgICAgaWYgKGN1cl9zaXplID4gbmV3X3NpemUpIHsKIAkvKiBtYXJrIGV2ZXJ5b25lIHVzZWQgdGhhdCB3YXMgbGlzdGVkIGFzIGZyZWUgYXQgdGhlIGVuZCBvZiB0aGUgb2JqZWN0aWQKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggZjRlYTgxYS4uZTI0MmViYyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTczLDggKzczLDggQEAKICNkZWZpbmUgREZMKCB4ICkgRDRDKCBycyAtPiBzX3YxLnggKQogCiAjZGVmaW5lIG9iamVjdGlkX21hcCggcywgcnMgKSAob2xkX2Zvcm1hdF9vbmx5IChzKSA/CQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoX191MzIgKikoKHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MSAqKXJzICsgMSkgOglcCi0JCQkgKF9fdTMyICopKHJzICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbGUzMiAqKSgoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxICopcnMgKyAxKSA6CVwKKwkJCSAoX19sZTMyICopKHJzICsgMSkpCiAjZGVmaW5lIE1BUCggaSApIEQ0Qyggb2JqZWN0aWRfbWFwKCBzYiwgcnMgKVsgaSBdICkKIAogI2RlZmluZSBESkYoIHggKSBsZTMyX3RvX2NwdSggcnMgLT4geCApCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdHJlZS5jIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwppbmRleCA3M2VjNTIxLi5kYTIzYmE3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdHJlZS5jCisrKyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKQEAgLTg3LDIyICs4NywyMCBAQAogaW5saW5lIGludCAgY29tcF9zaG9ydF9rZXlzIChjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICogbGVfa2V5LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqIGNwdV9rZXkpCiB7Ci0gIF9fdTMyICogcF9zX2xlX3UzMiwgKiBwX3NfY3B1X3UzMjsKLSAgaW50IG5fa2V5X2xlbmd0aCA9IFJFSVNFUkZTX1NIT1JUX0tFWV9MRU47Ci0KLSAgcF9zX2xlX3UzMiA9IChfX3UzMiAqKWxlX2tleTsKLSAgcF9zX2NwdV91MzIgPSAoX191MzIgKikmY3B1X2tleS0+b25fZGlza19rZXk7Ci0gIGZvciggOyBuX2tleV9sZW5ndGgtLTsgKytwX3NfbGVfdTMyLCArK3Bfc19jcHVfdTMyICkgewotICAgIGlmICggbGUzMl90b19jcHUgKCpwX3NfbGVfdTMyKSA8ICpwX3NfY3B1X3UzMiApCisgIF9fdTMyIG47CisgIG4gPSBsZTMyX3RvX2NwdShsZV9rZXktPmtfZGlyX2lkKTsKKyAgaWYgKG4gPCBjcHVfa2V5LT5vbl9kaXNrX2tleS5rX2Rpcl9pZCkKICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIGxlMzJfdG9fY3B1ICgqcF9zX2xlX3UzMikgPiAqcF9zX2NwdV91MzIgKQorICBpZiAobiA+IGNwdV9rZXktPm9uX2Rpc2tfa2V5LmtfZGlyX2lkKQogICAgICAgcmV0dXJuIDE7Ci0gIH0KLQorICBuID0gbGUzMl90b19jcHUobGVfa2V5LT5rX29iamVjdGlkKTsKKyAgaWYgKG4gPCBjcHVfa2V5LT5vbl9kaXNrX2tleS5rX29iamVjdGlkKQorICAgICAgcmV0dXJuIC0xOworICBpZiAobiA+IGNwdV9rZXktPm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQpCisgICAgICByZXR1cm4gMTsKICAgcmV0dXJuIDA7CiB9CiAKLQogLyogazEgaXMgcG9pbnRlciB0byBvbi1kaXNrIHN0cnVjdHVyZSB3aGljaCBpcyBzdG9yZWQgaW4gbGl0dGxlLWVuZGlhbgogICAgZm9ybS4gazIgaXMgcG9pbnRlciB0byBjcHUgdmFyaWFibGUuCiAgICBDb21wYXJlIGtleXMgdXNpbmcgYWxsIDQga2V5IGZpZWxkcy4KQEAgLTE1MiwxOCArMTUwLDE1IEBACiAKIGlubGluZSB2b2lkIGxlX2tleTJjcHVfa2V5IChzdHJ1Y3QgY3B1X2tleSAqIHRvLCBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICogZnJvbSkKIHsKKyAgICBpbnQgdmVyc2lvbjsKICAgICB0by0+b25fZGlza19rZXkua19kaXJfaWQgPSBsZTMyX3RvX2NwdSAoZnJvbS0+a19kaXJfaWQpOwogICAgIHRvLT5vbl9kaXNrX2tleS5rX29iamVjdGlkID0gbGUzMl90b19jcHUgKGZyb20tPmtfb2JqZWN0aWQpOwogICAgIAogICAgIC8vIGZpbmQgb3V0IHZlcnNpb24gb2YgdGhlIGtleQotICAgIHRvLT52ZXJzaW9uID0gbGVfa2V5X3ZlcnNpb24gKGZyb20pOwotICAgIGlmICh0by0+dmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkgewotCXRvLT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0ID0gbGUzMl90b19jcHUgKGZyb20tPnUua19vZmZzZXRfdjEua19vZmZzZXQpOwotCXRvLT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcyA9IGxlMzJfdG9fY3B1IChmcm9tLT51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcyk7Ci0gICAgfSBlbHNlIHsKLQl0by0+b25fZGlza19rZXkudS5rX29mZnNldF92Mi5rX29mZnNldCA9IG9mZnNldF92Ml9rX29mZnNldCgmZnJvbS0+dS5rX29mZnNldF92Mik7Ci0JdG8tPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua190eXBlID0gb2Zmc2V0X3YyX2tfdHlwZSgmZnJvbS0+dS5rX29mZnNldF92Mik7Ci0gICAgfSAKKyAgICB2ZXJzaW9uID0gbGVfa2V5X3ZlcnNpb24gKGZyb20pOworICAgIHRvLT52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICB0by0+b25fZGlza19rZXkua19vZmZzZXQgPSBsZV9rZXlfa19vZmZzZXQodmVyc2lvbiwgZnJvbSk7CisgICAgdG8tPm9uX2Rpc2tfa2V5LmtfdHlwZSA9IGxlX2tleV9rX3R5cGUodmVyc2lvbiwgZnJvbSk7CiB9CiAKIApAQCAtMjI4LDggKzIyMywxNCBAQAogY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAgTUlOX0tFWSA9IHswLCAwLCB7ezAsIDB9LH19OwogCiAvKiBNYXhpbWFsIHBvc3NpYmxlIGtleS4gSXQgaXMgbmV2ZXIgaW4gdGhlIHRyZWUuICovCi1jb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBNQVhfS0VZID0gezB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIHt7MHhmZmZmZmZmZiwgMHhmZmZmZmZmZn0sfX07Citjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBNQVhfS0VZID0geworCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHhmZmZmZmZmZiksCisJX19jb25zdGFudF9jcHVfdG9fbGUzMigweGZmZmZmZmZmKSwKKwl7e19fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHhmZmZmZmZmZiksCisJX19jb25zdGFudF9jcHVfdG9fbGUzMigweGZmZmZmZmZmKX0sfQorfTsKIAorY29uc3Qgc3RydWN0IGluX2NvcmVfa2V5ICBNQVhfSU5fQ09SRV9LRVkgPSB7fjBVLCB+MFUsIH4wVUxMPj40LCAxNX07CiAKIC8qIEdldCBkZWxpbWl0aW5nIGtleSBvZiB0aGUgYnVmZmVyIGJ5IGxvb2tpbmcgZm9yIGl0IGluIHRoZSBidWZmZXJzIGluIHRoZSBwYXRoLCBzdGFydGluZyBmcm9tIHRoZSBib3R0b20KICAgIG9mIHRoZSBwYXRoLCBhbmQgZ29pbmcgdXB3YXJkcy4gIFdlIG11c3QgY2hlY2sgdGhlIHBhdGgncyB2YWxpZGl0eSBhdCBlYWNoIHN0ZXAuICBJZiB0aGUga2V5IGlzIG5vdCBpbgpAQCAtOTk3LDcgKzk5OCw3IEBACiAJaW50ICAgICAgICAgICAgICAgICAgIG5fdW5mbV9udW1iZXIsICAgIC8qIE51bWJlciBvZiB0aGUgaXRlbSB1bmZvcm1hdHRlZCBub2Rlcy4gKi8KIAkgICAgbl9jb3VudGVyLAogCSAgICBuX2Jsa19zaXplOwotCV9fdTMyICAgICAgICAgICAgICAgKiBwX25fdW5mbV9wb2ludGVyOyAvKiBQb2ludGVyIHRvIHRoZSB1bmZvcm1hdHRlZCBub2RlIG51bWJlci4gKi8KKwlfX2xlMzIgICAgICAgICAgICAgICAqIHBfbl91bmZtX3BvaW50ZXI7IC8qIFBvaW50ZXIgdG8gdGhlIHVuZm9ybWF0dGVkIG5vZGUgbnVtYmVyLiAqLwogCV9fdTMyIHRtcDsKIAlzdHJ1Y3QgaXRlbV9oZWFkICAgICAgc19paDsgICAgICAgICAgIC8qIEl0ZW0gaGVhZGVyLiAqLwogCWNoYXIgICAgICAgICAgICAgICAgICBjX21vZGU7ICAgICAgICAgICAvKiBSZXR1cm5lZCBtb2RlIG9mIHRoZSBiYWxhbmNlLiAqLwpAQCAtMTA1OSw3ICsxMDYwLDcgQEAKIAkgICAgLyogcG9pbnRlcnMgdG8gYmUgY3V0ICovCiAJICAgIG5fdW5mbV9udW1iZXIgLT0gcG9zX2luX2l0ZW0gKHBfc19wYXRoKTsKIAkgICAgLyogU2V0IHBvaW50ZXIgdG8gdGhlIGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyIHRoYXQgaXMgdG8gYmUgY3V0LiAqLwotCSAgICBwX25fdW5mbV9wb2ludGVyID0gKF9fdTMyICopQl9JX1BJVEVNKHBfc19iaCwgJnNfaWgpICsgSV9VTkZNX05VTSgmc19paCkgLSAxIC0gKnBfbl9yZW1vdmVkOworCSAgICBwX25fdW5mbV9wb2ludGVyID0gKF9fbGUzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSArIElfVU5GTV9OVU0oJnNfaWgpIC0gMSAtICpwX25fcmVtb3ZlZDsKIAogCiAJICAgIC8qIFdlIGdvIHRocm91Z2ggdGhlIHVuZm9ybWF0dGVkIG5vZGVzIHBvaW50ZXJzIG9mIHRoZSBpbmRpcmVjdApAQCAtMTA4MSw4ICsxMDgyLDggQEAKIAkJICAgIG5lZWRfcmVzZWFyY2ggPSAxIDsKIAkJICAgIGJyZWFrOwogCQl9Ci0JCVJGQUxTRSggcF9uX3VuZm1fcG9pbnRlciA8IChfX3UzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSB8fAotCQkJcF9uX3VuZm1fcG9pbnRlciA+IChfX3UzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSArIElfVU5GTV9OVU0oJnNfaWgpIC0gMSwKKwkJUkZBTFNFKCBwX25fdW5mbV9wb2ludGVyIDwgKF9fbGUzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSB8fAorCQkJcF9uX3VuZm1fcG9pbnRlciA+IChfX2xlMzIgKilCX0lfUElURU0ocF9zX2JoLCAmc19paCkgKyBJX1VORk1fTlVNKCZzX2loKSAtIDEsCiAJCQkidnMtNTI2NTogcG9pbnRlciBvdXQgb2YgcmFuZ2UiKTsKIAogCQkvKiBIb2xlLCBub3RoaW5nIHRvIHJlbW92ZS4gKi8KQEAgLTE0MzEsNyArMTQzMiw3IEBACiAjaWYgZGVmaW5lZCggVVNFX0lOT0RFX0dFTkVSQVRJT05fQ09VTlRFUiApCiAgICAgaWYoICFvbGRfZm9ybWF0X29ubHkgKCB0aCAtPiB0X3N1cGVyICkgKQogICAgICAgewotICAgICAgIF9fdTMyICppbm9kZV9nZW5lcmF0aW9uOworICAgICAgIF9fbGUzMiAqaW5vZGVfZ2VuZXJhdGlvbjsKICAgICAgICAKICAgICAgICBpbm9kZV9nZW5lcmF0aW9uID0gCiAgICAgICAgICAmUkVJU0VSRlNfU0IodGggLT4gdF9zdXBlcikgLT4gc19ycyAtPiBzX2lub2RlX2dlbmVyYXRpb247CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCBiY2RmMjQzLi4zMWU3NTEyIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogICByZWlzZXJmc19hbGxvd193cml0ZXMocykgOwogfQogCi1leHRlcm4gY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAgTUFYX0tFWTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5fY29yZV9rZXkgIE1BWF9JTl9DT1JFX0tFWTsKIAogCiAvKiB0aGlzIGlzIHVzZWQgdG8gZGVsZXRlICJzYXZlIGxpbmsiIHdoZW4gdGhlcmUgYXJlIG5vIGl0ZW1zIG9mIGEKQEAgLTE2NCw3ICsxNjQsNyBAQAogIAogICAgIC8qIGNvbXBvc2Uga2V5IHRvIGxvb2sgZm9yICJzYXZlIiBsaW5rcyAqLwogICAgIG1heF9jcHVfa2V5LnZlcnNpb24gPSBLRVlfRk9STUFUXzNfNTsKLSAgICBtYXhfY3B1X2tleS5vbl9kaXNrX2tleSA9IE1BWF9LRVk7CisgICAgbWF4X2NwdV9rZXkub25fZGlza19rZXkgPSBNQVhfSU5fQ09SRV9LRVk7CiAgICAgbWF4X2NwdV9rZXkua2V5X2xlbmd0aCA9IDM7CiAKICNpZmRlZiBDT05GSUdfUVVPVEEKQEAgLTIxNiwxMCArMjE2LDEwIEBACiAgCiAgICAgICAgIC8qIHJlaXNlcmZzX2lnZXQgbmVlZHMga19kaXJpZCBhbmQga19vYmplY3RpZCBvbmx5ICovCiAgICAgICAgIGl0ZW0gPSBCX0lfUElURU0gKGJoLCBpaCk7Ci0gICAgICAgIG9ial9rZXkub25fZGlza19rZXkua19kaXJfaWQgPSBsZTMyX3RvX2NwdSAoKihfX3UzMiAqKWl0ZW0pOworICAgICAgICBvYmpfa2V5Lm9uX2Rpc2tfa2V5LmtfZGlyX2lkID0gbGUzMl90b19jcHUgKCooX19sZTMyICopaXRlbSk7CiAgICAgICAgIG9ial9rZXkub25fZGlza19rZXkua19vYmplY3RpZCA9IGxlMzJfdG9fY3B1IChpaC0+aWhfa2V5Lmtfb2JqZWN0aWQpOwotCW9ial9rZXkub25fZGlza19rZXkudS5rX29mZnNldF92MS5rX29mZnNldCA9IDA7Ci0Jb2JqX2tleS5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcyA9IDA7CisJb2JqX2tleS5vbl9kaXNrX2tleS5rX29mZnNldCA9IDA7CisJb2JqX2tleS5vbl9kaXNrX2tleS5rX3R5cGUgPSAwOwogCQogICAgICAgICBwYXRocmVsc2UgKCZwYXRoKTsKICAKQEAgLTMwNCw3ICszMDQsNyBAQAogICAgIGludCByZXR2YWw7CiAgICAgc3RydWN0IGNwdV9rZXkga2V5OwogICAgIHN0cnVjdCBpdGVtX2hlYWQgaWg7Ci0gICAgX191MzIgbGluazsKKyAgICBfX2xlMzIgbGluazsKIAogICAgIEJVR19PTiAoIXRoLT50X3RyYW5zX2lkKTsKIApAQCAtODg5LDEyICs4ODksMTggQEAKIAkgICAgY2hhciAqIHA7CiAJICAgIAogCSAgICBwID0gTlVMTDsKLQkgICAgLyogInJlc2l6ZT1OTk4iICovCi0JICAgICpibG9ja3MgPSBzaW1wbGVfc3RydG91bCAoYXJnLCAmcCwgMCk7Ci0JICAgIGlmICgqcCAhPSAnXDAnKSB7Ci0JCS8qIE5OTiBkb2VzIG5vdCBsb29rIGxpa2UgYSBudW1iZXIgKi8KLQkJcmVpc2VyZnNfd2FybmluZyAocywgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGJhZCB2YWx1ZSAlcyIsIGFyZyk7Ci0JCXJldHVybiAwOworCSAgICAvKiAicmVzaXplPU5OTiIgb3IgInJlc2l6ZT1hdXRvIiAqLworCisJICAgIGlmICghc3RyY21wKGFyZywgImF1dG8iKSkgeworCQkgICAgLyogRnJvbSBKRlMgY29kZSwgdG8gYXV0by1nZXQgdGhlIHNpemUuKi8KKwkJICAgICpibG9ja3MgPSBzLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gcy0+c19ibG9ja3NpemVfYml0czsKKwkgICAgfSBlbHNlIHsKKwkJICAgICpibG9ja3MgPSBzaW1wbGVfc3RydG91bCAoYXJnLCAmcCwgMCk7CisJCSAgICBpZiAoKnAgIT0gJ1wwJykgeworCQkJLyogTk5OIGRvZXMgbm90IGxvb2sgbGlrZSBhIG51bWJlciAqLworCQkJcmVpc2VyZnNfd2FybmluZyAocywgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGJhZCB2YWx1ZSAlcyIsIGFyZyk7CisJCQlyZXR1cm4gMDsKKwkJICAgIH0KIAkgICAgfQogCX0KIApAQCAtOTAzLDcgKzkwOSw4IEBACiAJCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwgKGFyZywgJnAsIDApOwogCQkvKiBjb21taXQ9Tk5OICh0aW1lIGluIHNlY29uZHMpICovCiAJCWlmICggKnAgIT0gJ1wwJyB8fCB2YWwgPj0gKHVuc2lnbmVkIGludCktMSkgewotCQkJcmVpc2VyZnNfd2FybmluZyAocywgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGJhZCB2YWx1ZSAlcyIsIGFyZyk7CQkJcmV0dXJuIDA7CisJCQlyZWlzZXJmc193YXJuaW5nIChzLCAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwgYXJnKTsKKwkJCXJldHVybiAwOwogCQl9CiAJCSpjb21taXRfbWF4X2FnZSA9ICh1bnNpZ25lZCBpbnQpdmFsOwogCX0KQEAgLTEzMjksNyArMTMzNiw3IEBACiAJcmV0dXJuIDE7CiAgICAgfQogCi0gICAgaWYgKCBycy0+c192MS5zX3Jvb3RfYmxvY2sgPT0gLTEgKSB7CisgICAgaWYgKCBycy0+c192MS5zX3Jvb3RfYmxvY2sgPT0gY3B1X3RvX2xlMzIoLTEpICkgewogICAgICAgIGJyZWxzZShiaCkgOwogICAgICAgIHJlaXNlcmZzX3dhcm5pbmcgKHMsICJVbmZpbmlzaGVkIHJlaXNlcmZzY2sgLS1yZWJ1aWxkLXRyZWUgcnVuIGRldGVjdGVkLiBQbGVhc2UgcnVuXG4iCiAgICAgICAgICAgICAgICJyZWlzZXJmc2NrIC0tcmVidWlsZC10cmVlIGFuZCB3YWl0IGZvciBhIGNvbXBsZXRpb24uIElmIHRoYXQgZmFpbHNcbiIKZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IDY1MGM0M2IuLjM4ZWY5MTMgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNTEsNyArNTEsMTAgQEAKIAogLyoqCiAgKglzZXFfcmVhZCAtCS0+cmVhZCgpIG1ldGhvZCBmb3Igc2VxdWVudGlhbCBmaWxlcy4KLSAqCUBmaWxlLCBAYnVmLCBAc2l6ZSwgQHBwb3M6IHNlZSBmaWxlX29wZXJhdGlvbnMgbWV0aG9kCisgKglAZmlsZTogdGhlIGZpbGUgdG8gcmVhZCBmcm9tCisgKglAYnVmOiB0aGUgYnVmZmVyIHRvIHJlYWQgdG8KKyAqCUBzaXplOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoJQHBwb3M6IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlCiAgKgogICoJUmVhZHktbWFkZSAtPmZfb3AtPnJlYWQoKQogICovCkBAIC0yMTksNyArMjIyLDkgQEAKIAogLyoqCiAgKglzZXFfbHNlZWsgLQktPmxsc2VlaygpIG1ldGhvZCBmb3Igc2VxdWVudGlhbCBmaWxlcy4KLSAqCUBmaWxlLCBAb2Zmc2V0LCBAb3JpZ2luOiBzZWUgZmlsZV9vcGVyYXRpb25zIG1ldGhvZAorICoJQGZpbGU6IHRoZSBmaWxlIGluIHF1ZXN0aW9uCisgKglAb2Zmc2V0OiBuZXcgcG9zaXRpb24KKyAqCUBvcmlnaW46IDAgZm9yIGFic29sdXRlLCAxIGZvciByZWxhdGl2ZSBwb3NpdGlvbgogICoKICAqCVJlYWR5LW1hZGUgLT5mX29wLT5sbHNlZWsoKQogICovCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggZGEyNWFlYi4uMzY0MjA4MCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtOTYsNyArOTYsNyBAQAogLyoqCiAgKglmbHVzaF9yZWFkX2J1ZmZlciAtIHB1c2ggYnVmZmVyIHRvIHVzZXJzcGFjZS4KICAqCUBidWZmZXI6CWRhdGEgYnVmZmVyIGZvciBmaWxlLgotICoJQHVzZXJidWY6CXVzZXItcGFzc2VkIGJ1ZmZlci4KKyAqCUBidWY6CQl1c2VyLXBhc3NlZCBidWZmZXIuCiAgKglAY291bnQ6CQludW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkLgogICoJQHBwb3M6CQlmaWxlIHBvc2l0aW9uLgogICoKQEAgLTE2NCw3ICsxNjQsNyBAQAogLyoqCiAgKglmaWxsX3dyaXRlX2J1ZmZlciAtIGNvcHkgYnVmZmVyIGZyb20gdXNlcnNwYWNlLgogICoJQGJ1ZmZlcjoJZGF0YSBidWZmZXIgZm9yIGZpbGUuCi0gKglAdXNlcmJ1ZjoJZGF0YSBmcm9tIHVzZXIuCisgKglAYnVmOgkJZGF0YSBmcm9tIHVzZXIuCiAgKglAY291bnQ6CQludW1iZXIgb2YgYnl0ZXMgaW4gQHVzZXJidWYuCiAgKgogICoJQWxsb2NhdGUgQGJ1ZmZlci0+cGFnZSBpZiBpdCBoYXNuJ3QgYmVlbiBhbHJlYWR5LCB0aGVuCmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuYwppbmRleCAyZmFhNDE3Li5iYjQwZDYzIDEwMDY0NAotLS0gYS9mcy91ZGYvZmlsZS5jCisrKyBiL2ZzL3VkZi9maWxlLmMKQEAgLTQ5LDggKzQ5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAljaGFyICprYWRkcjsKIAotCWlmICghUGFnZUxvY2tlZChwYWdlKSkKLQkJUEFHRV9CVUcocGFnZSk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAogCWthZGRyID0ga21hcChwYWdlKTsKIAltZW1zZXQoa2FkZHIsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CkBAIC02Nyw4ICs2Niw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJY2hhciAqa2FkZHI7CiAKLQlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCi0JCVBBR0VfQlVHKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlrYWRkciA9IGttYXAocGFnZSk7CiAJbWVtY3B5KFVERl9JX0RBVEEoaW5vZGUpICsgVURGX0lfTEVORUFUVFIoaW5vZGUpLCBrYWRkciwgaW5vZGUtPmlfc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jCmluZGV4IDA1MDZlMTEuLjNkNjhkZTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCisrKyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC0xNjcsOCArMTY3LDggQEAKIAl9CiAKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIDApOwotCWlmICghUGFnZUxvY2tlZChwYWdlKSkKLQkJUEFHRV9CVUcocGFnZSk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQogCXsKIAkJa2FkZHIgPSBrbWFwKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvYnVnLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9idWcuaAppbmRleCBhZTFlMGE1Li4zOWEzZTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9idWcuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0FMUEhBX0JVR19ICiAjZGVmaW5lIF9BTFBIQV9CVUdfSAogCisjaWZkZWYgQ09ORklHX0JVRwogI2luY2x1ZGUgPGFzbS9wYWwuaD4KIAogLyogPz8/IFdvdWxkIGJlIG5pY2UgdG8gdXNlIC5ncHJlbDMyIGhlcmUsIGJ1dCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQgdGhlCkBAIC0xMCw2ICsxMSw4IEBACiAJCSAgICAgICA6IDogImkiIChQQUxfYnVnY2hrKSwgImkiKF9fTElORV9fKSwgImkiKF9fRklMRV9fKSkKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9lcnJuby5oCmluZGV4IGM4NWFiNmIuLjY5ZTI2NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2Vycm5vLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvZXJybm8uaApAQCAtMTE2LDQgKzExNiw4IEBACiAjZGVmaW5lCUVLRVlSRVZPS0VECTEzNAkvKiBLZXkgaGFzIGJlZW4gcmV2b2tlZCAqLwogI2RlZmluZQlFS0VZUkVKRUNURUQJMTM1CS8qIEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSAqLwogCisvKiBmb3Igcm9idXN0IG11dGV4ZXMgKi8KKyNkZWZpbmUJRU9XTkVSREVBRAkxMzYJLyogT3duZXIgZGllZCAqLworI2RlZmluZQlFTk9UUkVDT1ZFUkFCTEUJMTM3CS8qIFN0YXRlIG5vdCByZWNvdmVyYWJsZSAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NpZ2luZm8uaAppbmRleCA4NmJjYWI1Li45ODIyMzYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc2lnaW5mby5oCkBAIC00LDggKzQsNiBAQAogI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQkJKDQgKiBzaXplb2YoaW50KSkKICNkZWZpbmUgX19BUkNIX1NJX1RSQVBOTwogCi0jZGVmaW5lIFNJR0VWX1BBRF9TSVpFCQkJKChTSUdFVl9NQVhfU0laRS9zaXplb2YoaW50KSkgLSA0KQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2lnbmFsLmgKaW5kZXggMjVmOThiYy4uNGUwODQyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc2lnbmFsLmgKQEAgLTEwOSwyMCArMTA5LDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJNDA5NgogI2RlZmluZSBTSUdTVEtTWgkxNjM4NAogCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHg0MDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMwkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaAppbmRleCBkMzFjMWE3MS4uMWFiMzUzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9jbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvY20uaApAQCAtMjQsOSArMjQsOSBAQAogI2RlZmluZSBDTV9DVFJMX0xDREJJQVNETgkJKDEgPDwgMTApCiAjZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX01BU0sJCSg3IDw8IDExKQogI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9HRU5MQ0QJKDEgPDwgMTEpCi0jZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX1NIQVJQTENEMQkoMyA8PCAxMSkKLSNkZWZpbmUgQ01fQ1RSTF9MQ0RNVVhTRUxfU0hBUlBMQ0QyCSg0IDw8IDExKQotI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9WR0EJCSg3IDw8IDExKQorI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9WR0FfMTZCUFAJKDIgPDwgMTEpCisjZGVmaW5lIENNX0NUUkxfTENETVVYU0VMX1NIQVJQTENECSgzIDw8IDExKQorI2RlZmluZSBDTV9DVFJMX0xDRE1VWFNFTF9WR0FfODQyMUJQUAkoNCA8PCAxMSkKICNkZWZpbmUgQ01fQ1RSTF9MQ0RFTjAJCQkoMSA8PCAxNCkKICNkZWZpbmUgQ01fQ1RSTF9MQ0RFTjEJCQkoMSA8PCAxNSkKICNkZWZpbmUgQ01fQ1RSTF9TVEFUSUMxCQkJKDEgPDwgMTYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BsYXRmb3JtLmgKaW5kZXggNTA5ZTQ0ZC4uOTAxYmJhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGxhdGZvcm0uaApAQCAtMTIxLDYgKzEyMSw3IEBACiAKIHN0cnVjdCBwY2lfc3lzX2RhdGE7CiAKK3UzMiAqaXhwMjAwMF9wY2lfY29uZmlnX2FkZHIodW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUpOwogdm9pZCBpeHAyMDAwX3BjaV9wcmVpbml0KHZvaWQpOwogaW50IGl4cDIwMDBfcGNpX3NldHVwKGludCwgc3RydWN0IHBjaV9zeXNfZGF0YSopOwogc3RydWN0IHBjaV9idXMqIGl4cDIwMDBfcGNpX3NjYW5fYnVzKGludCwgc3RydWN0IHBjaV9zeXNfZGF0YSopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2J1Zy5oIGIvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCmluZGV4IDVlOTFiOTAuLjI0ZDExNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQogZXh0ZXJuIHZvbGF0aWxlIHZvaWQgX19idWcoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHZvaWQgKmRhdGEpOwogCkBAIC0xNyw2ICsxOCw4IEBACiAjZW5kaWYKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKaW5kZXggNjliYzdhMy4uNjU4ZmZhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKQEAgLTk5LDEyICs5OSwxNiBAQAogICovCiAjaWZkZWYgX19pbwogI2RlZmluZSBvdXRiKHYscCkJCV9fcmF3X3dyaXRlYih2LF9faW8ocCkpCi0jZGVmaW5lIG91dHcodixwKQkJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KHYpLF9faW8ocCkpCi0jZGVmaW5lIG91dGwodixwKQkJX19yYXdfd3JpdGVsKGNwdV90b19sZTMyKHYpLF9faW8ocCkpCisjZGVmaW5lIG91dHcodixwKQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLF9faW8ocCkpCisjZGVmaW5lIG91dGwodixwKQkJX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKSBcCisJCQkJCWNwdV90b19sZTMyKHYpLF9faW8ocCkpCiAKLSNkZWZpbmUgaW5iKHApCSh7IHVuc2lnbmVkIGludCBfX3YgPSBfX3Jhd19yZWFkYihfX2lvKHApKTsgX192OyB9KQotI2RlZmluZSBpbncocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KF9faW8ocCkpKTsgX192OyB9KQotI2RlZmluZSBpbmwocCkJKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX192OyB9KQorI2RlZmluZSBpbmIocCkJKHsgX191OCBfX3YgPSBfX3Jhd19yZWFkYihfX2lvKHApKTsgX192OyB9KQorI2RlZmluZSBpbncocCkJKHsgX191MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCisJCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5sKHApCSh7IF9fdTMyIF9fdiA9IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMikgXAorCQkJX19yYXdfcmVhZGwoX19pbyhwKSkpOyBfX3Y7IH0pCiAKICNkZWZpbmUgb3V0c2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKF9faW8ocCksZCxsKQogI2RlZmluZSBvdXRzdyhwLGQsbCkJCV9fcmF3X3dyaXRlc3coX19pbyhwKSxkLGwpCkBAIC0xNDksOSArMTUzLDExIEBACiAgKiBJTyBwb3J0IHByaW1pdGl2ZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KICNpZmRlZiBfX21lbV9wY2kKLSNkZWZpbmUgcmVhZGIoYykgKHsgdW5zaWduZWQgaW50IF9fdiA9IF9fcmF3X3JlYWRiKF9fbWVtX3BjaShjKSk7IF9fdjsgfSkKLSNkZWZpbmUgcmVhZHcoYykgKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KF9fbWVtX3BjaShjKSkpOyBfX3Y7IH0pCi0jZGVmaW5lIHJlYWRsKGMpICh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTMyX3RvX2NwdShfX3Jhd19yZWFkbChfX21lbV9wY2koYykpKTsgX192OyB9KQorI2RlZmluZSByZWFkYihjKSAoeyBfX3U4ICBfX3YgPSBfX3Jhd19yZWFkYihfX21lbV9wY2koYykpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWR3KGMpICh7IF9fdTE2IF9fdiA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikgXAorCQkJCQlfX3Jhd19yZWFkdyhfX21lbV9wY2koYykpKTsgX192OyB9KQorI2RlZmluZSByZWFkbChjKSAoeyBfX3UzMiBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpIFwKKwkJCQkJX19yYXdfcmVhZGwoX19tZW1fcGNpKGMpKSk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQogI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCiAjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKQEAgLTE2MSw4ICsxNjcsMTAgQEAKICNkZWZpbmUgcmVhZHNsKHAsZCxsKQkJX19yYXdfcmVhZHNsKF9fbWVtX3BjaShwKSxkLGwpCiAKICNkZWZpbmUgd3JpdGViKHYsYykJCV9fcmF3X3dyaXRlYih2LF9fbWVtX3BjaShjKSkKLSNkZWZpbmUgd3JpdGV3KHYsYykJCV9fcmF3X3dyaXRldyhjcHVfdG9fbGUxNih2KSxfX21lbV9wY2koYykpCi0jZGVmaW5lIHdyaXRlbCh2LGMpCQlfX3Jhd193cml0ZWwoY3B1X3RvX2xlMzIodiksX19tZW1fcGNpKGMpKQorI2RlZmluZSB3cml0ZXcodixjKQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLF9fbWVtX3BjaShjKSkKKyNkZWZpbmUgd3JpdGVsKHYsYykJCV9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMikgXAorCQkJCQljcHVfdG9fbGUzMih2KSxfX21lbV9wY2koYykpCiAKICNkZWZpbmUgd3JpdGVzYihwLGQsbCkJCV9fcmF3X3dyaXRlc2IoX19tZW1fcGNpKHApLGQsbCkKICNkZWZpbmUgd3JpdGVzdyhwLGQsbCkJCV9fcmF3X3dyaXRlc3coX19tZW1fcGNpKHApLGQsbCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9ydGMuaCBiL2luY2x1ZGUvYXNtLWFybS9ydGMuaAppbmRleCBhYTdlMTZiLi4zNzBkZmU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3J0Yy5oCkBAIC0xOCw5ICsxOCw5IEBACiAJdm9pZAkJKCpyZWxlYXNlKSh2b2lkKTsKIAlpbnQJCSgqaW9jdGwpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKLQl2b2lkCQkoKnJlYWRfdGltZSkoc3RydWN0IHJ0Y190aW1lICopOworCWludAkJKCpyZWFkX3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKIAlpbnQJCSgqc2V0X3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKLQl2b2lkCQkoKnJlYWRfYWxhcm0pKHN0cnVjdCBydGNfd2thbHJtICopOworCWludAkJKCpyZWFkX2FsYXJtKShzdHJ1Y3QgcnRjX3drYWxybSAqKTsKIAlpbnQJCSgqc2V0X2FsYXJtKShzdHJ1Y3QgcnRjX3drYWxybSAqKTsKIAlpbnQJCSgqcHJvYykoY2hhciAqYnVmKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1hcm0vc2lnbmFsLmgKaW5kZXggYjAzM2U1Zi4uYjg2MGRjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zaWduYWwuaApAQCAtMTE0LDE4ICsxMTQsNyBAQAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCTB4ODAwMDAwMDAKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQkweDEwMDAwMDAwCiAjZGVmaW5lIFNBX0lSUU5PTUFTSwkJMHgwODAwMDAwMAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAogI2VuZGlmCiAKICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAppbmRleCBhMTllYzA5Li5hY2UyNzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCkBAIC0zNTksOCArMzU5LDcgQEAKICNkZWZpbmUgX19BUk1fTlJfY2FjaGVmbHVzaAkJKF9fQVJNX05SX0JBU0UrMikKICNkZWZpbmUgX19BUk1fTlJfdXNyMjYJCQkoX19BUk1fTlJfQkFTRSszKQogI2RlZmluZSBfX0FSTV9OUl91c3IzMgkJCShfX0FSTV9OUl9CQVNFKzQpCi0KLSNkZWZpbmUgX19BUk1fTlJfc2V0X3RscwkJKF9fQVJNX05SX0JBU0UrMHg4MDApCisjZGVmaW5lIF9fQVJNX05SX3NldF90bHMJCShfX0FSTV9OUl9CQVNFKzUpCiAKICNkZWZpbmUgX19zeXMyKHgpICN4CiAjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvYnVnLmgKaW5kZXggOTIwYjcwNS4uNzE3N2M3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvYnVnLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQogZXh0ZXJuIHZvbGF0aWxlIHZvaWQgX19idWcoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHZvaWQgKmRhdGEpOwogLyogZ2l2ZSBmaWxlL2xpbmUgaW5mb3JtYXRpb24gKi8KQEAgLTEyLDYgKzEzLDggQEAKICNlbmRpZgogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zaWduYWwuaAppbmRleCA2ZjYyZTUxLi5hMWFhY2VmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zaWduYWwuaApAQCAtMTE0LDE4ICsxMTQsNyBAQAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCTB4ODAwMDAwMDAKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQkweDEwMDAwMDAwCiAjZGVmaW5lIFNBX0lSUU5PTUFTSwkJMHgwODAwMDAwMAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAogI2VuZGlmCiAKICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGFnZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmgKaW5kZXggZGRkODkxNS4uYzc2N2RhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmgKQEAgLTc3LDEwICs3Nyw2IEBACiAgIHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUEFHRV9CVUcocGFnZSkgZG8geyBcCi0gICAgICAgICBCVUcoKTsgXAotfSB3aGlsZSAoMCkKLQogLyogUHVyZSAyXm4gdmVyc2lvbiBvZiBnZXRfb3JkZXIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9zaWduYWwuaAppbmRleCAzZjE4N2VjLi4yMzMwNzY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvc2lnbmFsLmgKQEAgLTEwOCwyMCArMTA4LDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydAotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9idWcuaCBiL2luY2x1ZGUvYXNtLWZydi9idWcuaAppbmRleCAwMTE4NjBiLi4wNzRjMGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKIC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KICAqLwpAQCAtNDUsNiArNDYsNyBAQAogI2RlZmluZSBIQVZFX0FSQ0hfS0dEQl9CQURfUEFHRQogI2RlZmluZSBrZ2RiX2JhZF9wYWdlKHBhZ2UpIGRvIHsga2dkYl9yYWlzZShTSUdBQlJUKTsgfSB3aGlsZSgwKQogI2VuZGlmCisjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAppbmRleCAzYzZkNDJhLi5kMGE5YzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKQEAgLTM0OSw5ICszNDksOSBAQAogCiAvKgogICogRGVmaW5lIHRoaXMgdG8gd2FybiBhYm91dCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgYXJlCi0gKiBkb25lIHdpdGhvdXQgYSAndmVyaWZ5X2FyZWEoVkVSSUZZX1dSSVRFLC4uKScKKyAqIGRvbmUgd2l0aG91dCBhICdhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLC4uKScKICAqLwotI3VuZGVmIFRFU1RfVkVSSUZZX0FSRUEKKyN1bmRlZiBURVNUX0FDQ0VTU19PSwogCiAjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCShwdGVfdmFsKHgpICYgX1BBR0VfUFJFU0VOVCkKICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApCWRvIHsgc2V0X3B0ZV9hdChtbSwgYWRkciwgeHAsIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWZydi9zaWduYWwuaAppbmRleCBmMTg5NTJmLi5jOTMwYmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NpZ25hbC5oCkBAIC0xMDcsMjAgKzEwNyw2IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IGU1OTEzYzMuLjQwMGMyYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCisjaWZkZWYgQ09ORklHX0JVRwogI2lmbmRlZiBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEJVRygpIGRvIHsgXAogCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKQEAgLTExLDEzICsxMiw2IEBACiB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9BUkNIX1BBR0VfQlVHCi0jZGVmaW5lIFBBR0VfQlVHKHBhZ2UpIGRvIHsgXAotCXByaW50aygicGFnZSBCVUcgZm9yIHBhZ2UgYXQgJXBcbiIsIHBhZ2UpOyBcCi0JQlVHKCk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OCiAjZGVmaW5lIEJVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgQlVHKCk7IH0gd2hpbGUoMCkKICNlbmRpZgpAQCAtMzEsNCArMjUsMTggQEAKIH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2Vsc2UgLyogIUNPTkZJR19CVUcgKi8KKyNpZm5kZWYgSEFWRV9BUkNIX0JVRworI2RlZmluZSBCVUcoKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX0JVR19PTgorI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmIChjb25kaXRpb24pIDsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX1dBUk5fT04KKyNkZWZpbmUgV0FSTl9PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgOyB9IHdoaWxlKDApCisjZW5kaWYKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZXJybm8uaAppbmRleCA0ZGQyMzg0Li5lODg1MmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2Vycm5vLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9lcnJuby5oCkBAIC0xMDIsNCArMTAyLDggQEAKICNkZWZpbmUJRUtFWVJFVk9LRUQJMTI4CS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCiAjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxMjkJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCiAKKy8qIGZvciByb2J1c3QgbXV0ZXhlcyAqLworI2RlZmluZQlFT1dORVJERUFECTEzMAkvKiBPd25lciBkaWVkICovCisjZGVmaW5lCUVOT1RSRUNPVkVSQUJMRQkxMzEJLyogU3RhdGUgbm90IHJlY292ZXJhYmxlICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCmluZGV4IGIxZmNkYTkuLmNmZTM2OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcmVzb3VyY2UuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3Jlc291cmNlLmgKQEAgLTQxLDggKzQxLDExIEBACiAjZGVmaW5lIFJMSU1JVF9MT0NLUwkJMTAJLyogbWF4aW11bSBmaWxlIGxvY2tzIGhlbGQgKi8KICNkZWZpbmUgUkxJTUlUX1NJR1BFTkRJTkcJMTEJLyogbWF4IG51bWJlciBvZiBwZW5kaW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgUkxJTUlUX01TR1FVRVVFCQkxMgkvKiBtYXhpbXVtIGJ5dGVzIGluIFBPU0lYIG1xdWV1ZXMgKi8KKyNkZWZpbmUgUkxJTUlUX05JQ0UJCTEzCS8qIG1heCBuaWNlIHByaW8gYWxsb3dlZCB0byByYWlzZSB0bworCQkJCQkgICAwLTM5IGZvciBuaWNlIGxldmVsIDE5IC4uIC0yMCAqLworI2RlZmluZSBSTElNSVRfUlRQUklPCQkxNAkvKiBtYXhpbXVtIHJlYWx0aW1lIHByaW9yaXR5ICovCiAKLSNkZWZpbmUgUkxJTV9OTElNSVRTCQkxMworI2RlZmluZSBSTElNX05MSU1JVFMJCTE1CiAKIC8qCiAgKiBTdVMgc2F5cyBsaW1pdHMgaGF2ZSB0byBiZSB1bnNpZ25lZC4KQEAgLTgxLDYgKzg0LDggQEAKIAlbUkxJTUlUX0xPQ0tTXQkJPSB7ICBSTElNX0lORklOSVRZLCAgUkxJTV9JTkZJTklUWSB9LAlcCiAJW1JMSU1JVF9TSUdQRU5ESU5HXQk9IHsgCQkwLAkgICAgICAgMCB9LAlcCiAJW1JMSU1JVF9NU0dRVUVVRV0JPSB7ICAgTVFfQllURVNfTUFYLCAgIE1RX0JZVEVTX01BWCB9LAlcCisJW1JMSU1JVF9OSUNFXQkJPSB7IDAsIDAgfSwJCQkJXAorCVtSTElNSVRfUlRQUklPXQkJPSB7IDAsIDAgfSwJCQkJXAogfQogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaAppbmRleCA5Y2FjOGU4Li44Nzg2ZTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaApAQCAtMjM2LDExICsyMzYsMTggQEAKICNkZWZpbmUgU0lHRVZfVEhSRUFECTIJLyogZGVsaXZlciB2aWEgdGhyZWFkIGNyZWF0aW9uICovCiAjZGVmaW5lIFNJR0VWX1RIUkVBRF9JRCA0CS8qIGRlbGl2ZXIgdG8gdGhyZWFkICovCiAKLSNkZWZpbmUgU0lHRVZfTUFYX1NJWkUJNjQKLSNpZm5kZWYgU0lHRVZfUEFEX1NJWkUKLSNkZWZpbmUgU0lHRVZfUEFEX1NJWkUJKChTSUdFVl9NQVhfU0laRS9zaXplb2YoaW50KSkgLSAzKQorLyoKKyAqIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYWxpZ25tZW50IGlzIG9rIG9uIGFsbCBjdXJyZW50IGFyY2hpdGVjdHVyZXMKKyAqIGJ1dCB3ZSBsZWF2ZSBvcGVuIHRoaXMgYmVpbmcgb3ZlcnJpZGRlbiBpbiB0aGUgZnV0dXJlCisgKi8KKyNpZm5kZWYgX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUKKyNkZWZpbmUgX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUJKHNpemVvZihpbnQpICogMiArIHNpemVvZihzaWd2YWxfdCkpCiAjZW5kaWYKIAorI2RlZmluZSBTSUdFVl9NQVhfU0laRQk2NAorI2RlZmluZSBTSUdFVl9QQURfU0laRQkoKFNJR0VWX01BWF9TSVpFIC0gX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUpIFwKKwkJLyBzaXplb2YoaW50KSkKKwogdHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQgewogCXNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwogCWludCBzaWdldl9zaWdubzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKaW5kZXggM2EwODU0NC4uYWMzZTAxYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ25hbC5oCkBAIC0xMDcsMTkgKzEwNyw2IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCmluZGV4IGUxZGU2NzQuLmE1ODEwY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oCkBAIC0xMDksNyArMTA5LDYgQEAKIGV4dGVybiB2b2lkIGRpc2FibGVfQVBJQ190aW1lcih2b2lkKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9BUElDX3RpbWVyKHZvaWQpOwogCi1leHRlcm4gaW50IGNoZWNrX25taV93YXRjaGRvZyAodm9pZCk7CiBleHRlcm4gdm9pZCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCAodm9pZCAqIGR1bW15KTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBubWlfd2F0Y2hkb2c7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oIGIvaW5jbHVkZS9hc20taTM4Ni9idWcuaAppbmRleCA3MDZlYjUxLi44Zjc5ZGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKQEAgLTksNiArOSw4IEBACiAgKiB1bmRlZmluZWQiIG9wY29kZSBmb3IgcGFyc2luZyBpbiB0aGUgdHJhcCBoYW5kbGVyLgogICovCiAKKyNpZmRlZiBDT05GSUdfQlVHCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQogI2RlZmluZSBCVUcoKQkJCQlcCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oCSJ1ZDJcbiIJCVwKQEAgLTE4LDggKzIwLDcgQEAKICNlbHNlCiAjZGVmaW5lIEJVRygpIF9fYXNtX18gX192b2xhdGlsZV9fKCJ1ZDJcbiIpCiAjZW5kaWYKKyNlbmRpZgogCi0jZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NoZWNrc3VtLmgKaW5kZXggZDc2YTVmMC4uNjQxMzQyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvY2hlY2tzdW0uaApAQCAtMzMsNyArMzMsNyBAQAogICoJcGFzc2VkIGluIGFuIGluY29ycmVjdCBrZXJuZWwgYWRkcmVzcyB0byBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLgogICoKICAqCUlmIHlvdSB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IHBsZWFzZSBkb24ndCBmb3JnZXQgdGhlCi0gKgl2ZXJpZnlfYXJlYSgpLgorICoJYWNjZXNzX29rKCkuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fCiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NwdWZlYXR1cmUuaCBiL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCmluZGV4IGUxNDdjYWIuLmZmMTE4N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oCkBAIC04Nyw4ICs4Nyw4IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVF9FTgkoNSozMisgNykgLyogb24tQ1BVIGNyeXB0byBlbmFibGVkICovCiAKIC8qIE1vcmUgZXh0ZW5kZWQgQU1EIGZsYWdzOiBDUFVJRCBsZXZlbCAweDgwMDAwMDAxLCBlY3gsIHdvcmQgNiAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9MQUhGX0xNCSg1KjMyKyAwKSAvKiBMQUhGL1NBSEYgaW4gbG9uZyBtb2RlICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kJKDUqMzIrIDEpIC8qIElmIHllcyBIeXBlclRocmVhZGluZyBub3QgdmFsaWQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTEFIRl9MTQkoNiozMisgMCkgLyogTEFIRi9TQUhGIGluIGxvbmcgbW9kZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZCSg2KjMyKyAxKSAvKiBJZiB5ZXMgSHlwZXJUaHJlYWRpbmcgbm90IHZhbGlkICovCiAKICNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpCQl0ZXN0X2JpdChiaXQsIChjKS0+eDg2X2NhcGFiaWxpdHkpCiAjZGVmaW5lIGJvb3RfY3B1X2hhcyhiaXQpCXRlc3RfYml0KGJpdCwgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZTgyMC5oIGIvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKaW5kZXggNWMyODVhZS4uZWRmNjViZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9lODIwLmgKQEAgLTEzLDcgKzEzLDcgQEAKICNkZWZpbmUgX19FODIwX0hFQURFUgogCiAjZGVmaW5lIEU4MjBNQVAJMHgyZDAJCS8qIG91ciBtYXAgKi8KLSNkZWZpbmUgRTgyME1BWAkzMgkJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gRTgyME1BUCAqLworI2RlZmluZSBFODIwTUFYCTEyOAkJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gRTgyME1BUCAqLwogI2RlZmluZSBFODIwTlIJMHgxZTgJCS8qICMgZW50cmllcyBpbiBFODIwTUFQICovCiAKICNkZWZpbmUgRTgyMF9SQU0JMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmggYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAppbmRleCA2ZTIwYjA3Li4xNmVmOWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaApAQCAtOTIsNiArOTIsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3RpY2s7ICAJLyogaHBldCBjbGtzIGNvdW50IHBlciB0aWNrICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CS8qIGhwZXQgbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCitleHRlcm4gaW50IGhwZXRfdXNlX3RpbWVyOwogCiBleHRlcm4gaW50IGhwZXRfcnRjX3RpbWVyX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGhwZXRfZW5hYmxlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAppbmRleCA1YzcyNTQyLi44ZDYwYzJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaApAQCAtMTkzLDkgKzE5Myw5IEBACiAvKgogICogRGVmaW5lIHRoaXMgaWYgdGhpbmdzIHdvcmsgZGlmZmVyZW50bHkgb24gYW4gaTM4NiBhbmQgYW4gaTQ4NjoKICAqIGl0IHdpbGwgKG9uIGFuIGk0ODYpIHdhcm4gYWJvdXQga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGFyZQotICogZG9uZSB3aXRob3V0IGEgJ3ZlcmlmeV9hcmVhKFZFUklGWV9XUklURSwuLiknCisgKiBkb25lIHdpdGhvdXQgYSAnYWNjZXNzX29rKFZFUklGWV9XUklURSwuLiknCiAgKi8KLSN1bmRlZiBURVNUX1ZFUklGWV9BUkVBCisjdW5kZWYgVEVTVF9BQ0NFU1NfT0sKIAogLyogVGhlIGJvb3QgcGFnZSB0YWJsZXMgKGFsbCBjcmVhdGVkIGFzIGEgc2luZ2xlIGFycmF5KSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGcwW107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NldHVwLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NldHVwLmgKaW5kZXggODgxNGI1NC4uN2EzMjE4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zZXR1cC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBNQVhNRU1fUEZOCVBGTl9ET1dOKE1BWE1FTSkKICNkZWZpbmUgTUFYX05PTlBBRV9QRk4JKDEgPDwgMjApCiAKLSNkZWZpbmUgUEFSQU1fU0laRSAyMDQ4CisjZGVmaW5lIFBBUkFNX1NJWkUgNDA5NgogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyNTYKIAogI2RlZmluZSBPTERfQ0xfTUFHSUNfQUREUgkweDkwMDIwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaAppbmRleCA3ZWYzNDNiLi4wZjA4MmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgKQEAgLTExMCwyMCArMTEwLDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYKLQogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKaW5kZXggMTY3OTk4My4uNmE3OGFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy5oCkBAIC0xOTgsNDYgKzE5OCw3OSBAQAogaW50IGQwLCBkMSwgZDI7CiBfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkicmVwIDsgbW92c2xcblx0IgotCSJ0ZXN0YiAkMiwlYjRcblx0IgotCSJqZSAxZlxuXHQiCi0JIm1vdnN3XG4iCi0JIjE6XHR0ZXN0YiAkMSwlYjRcblx0IgotCSJqZSAyZlxuXHQiCi0JIm1vdnNiXG4iCi0JIjI6IgorCSJtb3ZsICU0LCUlZWN4XG5cdCIKKwkiYW5kbCAkMywlJWVjeFxuXHQiCisjaWYgMQkvKiB3YW50IHRvIHBheSAyIGJ5dGUgcGVuYWx0eSBmb3IgYSBjaGFuY2UgdG8gc2tpcCBtaWNyb2NvZGVkIHJlcD8gKi8KKwkianogMWZcblx0IgorI2VuZGlmCisJInJlcCA7IG1vdnNiXG5cdCIKKwkiMToiCiAJOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpCi0JOiIwIiAobi80KSwgInEiIChuKSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkKKwk6ICIwIiAobi80KSwgImciIChuKSwgIjEiICgobG9uZykgdG8pLCAiMiIgKChsb25nKSBmcm9tKQogCTogIm1lbW9yeSIpOwogcmV0dXJuICh0byk7CiB9CiAKIC8qCi0gKiBUaGlzIGxvb2tzIGhvcnJpYmx5IHVnbHksIGJ1dCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGl0IHRvdGFsbHksCisgKiBUaGlzIGxvb2tzIHVnbHksIGJ1dCB0aGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGl0IHRvdGFsbHksCiAgKiBhcyB0aGUgY291bnQgaXMgY29uc3RhbnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqIF9fY29uc3RhbnRfbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBuKQogewotCWlmIChuIDw9IDEyOCkKLQkJcmV0dXJuIF9fYnVpbHRpbl9tZW1jcHkodG8sIGZyb20sIG4pOwotCi0jZGVmaW5lIENPTU1PTih4KSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyggXAotCSJyZXAgOyBtb3ZzbCIgXAotCXggXAotCTogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSBcCi0JOiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pIFwKLQk6ICJtZW1vcnkiKTsKLXsKLQlpbnQgZDAsIGQxLCBkMjsKLQlzd2l0Y2ggKG4gJSA0KSB7Ci0JCWNhc2UgMDogQ09NTU9OKCIiKTsgcmV0dXJuIHRvOwotCQljYXNlIDE6IENPTU1PTigiXG5cdG1vdnNiIik7IHJldHVybiB0bzsKLQkJY2FzZSAyOiBDT01NT04oIlxuXHRtb3ZzdyIpOyByZXR1cm4gdG87Ci0JCWRlZmF1bHQ6IENPTU1PTigiXG5cdG1vdnN3XG5cdG1vdnNiIik7IHJldHVybiB0bzsKKwlsb25nIGVzaSwgZWRpOworCWlmICghbikgcmV0dXJuIHRvOworI2lmIDEJLyogd2FudCB0byBkbyBzbWFsbCBjb3BpZXMgd2l0aCBub24tc3RyaW5nIG9wcz8gKi8KKwlzd2l0Y2ggKG4pIHsKKwkJY2FzZSAxOiAqKGNoYXIqKXRvID0gKihjaGFyKilmcm9tOyByZXR1cm4gdG87CisJCWNhc2UgMjogKihzaG9ydCopdG8gPSAqKHNob3J0Kilmcm9tOyByZXR1cm4gdG87CisJCWNhc2UgNDogKihpbnQqKXRvID0gKihpbnQqKWZyb207IHJldHVybiB0bzsKKyNpZiAxCS8qIGluY2x1ZGluZyB0aG9zZSBkb2FibGUgd2l0aCB0d28gbW92ZXM/ICovCisJCWNhc2UgMzogKihzaG9ydCopdG8gPSAqKHNob3J0Kilmcm9tOworCQkJKigoY2hhciopdG8rMikgPSAqKChjaGFyKilmcm9tKzIpOyByZXR1cm4gdG87CisJCWNhc2UgNTogKihpbnQqKXRvID0gKihpbnQqKWZyb207CisJCQkqKChjaGFyKil0bys0KSA9ICooKGNoYXIqKWZyb20rNCk7IHJldHVybiB0bzsKKwkJY2FzZSA2OiAqKGludCopdG8gPSAqKGludCopZnJvbTsKKwkJCSooKHNob3J0Kil0bysyKSA9ICooKHNob3J0Kilmcm9tKzIpOyByZXR1cm4gdG87CisJCWNhc2UgODogKihpbnQqKXRvID0gKihpbnQqKWZyb207CisJCQkqKChpbnQqKXRvKzEpID0gKigoaW50Kilmcm9tKzEpOyByZXR1cm4gdG87CisjZW5kaWYKIAl9Ci19Ci0gIAotI3VuZGVmIENPTU1PTgorI2VuZGlmCisJZXNpID0gKGxvbmcpIGZyb207CisJZWRpID0gKGxvbmcpIHRvOworCWlmIChuID49IDUqNCkgeworCQkvKiBsYXJnZSBibG9jazogdXNlIHJlcCBwcmVmaXggKi8KKwkJaW50IGVjeDsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkicmVwIDsgbW92c2wiCisJCQk6ICI9JmMiIChlY3gpLCAiPSZEIiAoZWRpKSwgIj0mUyIgKGVzaSkKKwkJCTogIjAiIChuLzQpLCAiMSIgKGVkaSksIjIiIChlc2kpCisJCQk6ICJtZW1vcnkiCisJCSk7CisJfSBlbHNlIHsKKwkJLyogc21hbGwgYmxvY2s6IGRvbid0IGNsb2JiZXIgZWN4ICsgc21hbGxlciBjb2RlICovCisJCWlmIChuID49IDQqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCWlmIChuID49IDMqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCWlmIChuID49IDIqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCWlmIChuID49IDEqNCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnNsIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJfQorCXN3aXRjaCAobiAlIDQpIHsKKwkJLyogdGFpbCAqLworCQljYXNlIDA6IHJldHVybiB0bzsKKwkJY2FzZSAxOiBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92c2IiCisJCQk6Ij0mRCIoZWRpKSwiPSZTIihlc2kpOiIwIihlZGkpLCIxIihlc2kpOiJtZW1vcnkiKTsKKwkJCXJldHVybiB0bzsKKwkJY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92c3ciCisJCQk6Ij0mRCIoZWRpKSwiPSZTIihlc2kpOiIwIihlZGkpLCIxIihlc2kpOiJtZW1vcnkiKTsKKwkJCXJldHVybiB0bzsKKwkJZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdnN3XG5cdG1vdnNiIgorCQkJOiI9JkQiKGVkaSksIj0mUyIoZXNpKToiMCIoZWRpKSwiMSIoZXNpKToibWVtb3J5Iik7CisJCQlyZXR1cm4gdG87CisJfQogfQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKaW5kZXggNmY3NGQ0Yy4uM2RiNzE3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCkBAIC04MSw3ICs4MSw3IEBACiAjZGVmaW5lIGxvYWRzZWdtZW50KHNlZyx2YWx1ZSkJCQlcCiAJYXNtIHZvbGF0aWxlKCJcbiIJCQlcCiAJCSIxOlx0IgkJCQlcCi0JCSJtb3ZsICUwLCUlIiAjc2VnICJcbiIJCVwKKwkJIm1vdiAlMCwlJSIgI3NlZyAiXG4iCQlcCiAJCSIyOlxuIgkJCQlcCiAJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKIAkJIjM6XHQiCQkJCVwKQEAgLTkzLDEzICs5MywxMyBAQAogCQkiLmFsaWduIDRcblx0IgkJCVwKIAkJIi5sb25nIDFiLDNiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCVwKLQkJOiA6Im0iICgqKHVuc2lnbmVkIGludCAqKSYodmFsdWUpKSkKKwkJOiA6Im0iICh2YWx1ZSkpCiAKIC8qCiAgKiBTYXZlIGEgc2VnbWVudCByZWdpc3RlciBhd2F5CiAgKi8KICNkZWZpbmUgc2F2ZXNlZ21lbnQoc2VnLCB2YWx1ZSkgXAotCWFzbSB2b2xhdGlsZSgibW92bCAlJSIgI3NlZyAiLCUwIjoiPW0iICgqKGludCAqKSYodmFsdWUpKSkKKwlhc20gdm9sYXRpbGUoIm1vdiAlJSIgI3NlZyAiLCUwIjoiPW0iICh2YWx1ZSkpCiAKIC8qCiAgKiBDbGVhciBhbmQgc2V0ICdUUycgYml0IHJlc3BlY3RpdmVseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9idWcuaCBiL2luY2x1ZGUvYXNtLWlhNjQvYnVnLmgKaW5kZXggMmMwY2Q1MS4uM2FhMGEwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2J1Zy5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQVNNX0lBNjRfQlVHX0gKICNkZWZpbmUgX0FTTV9JQTY0X0JVR19ICiAKKyNpZmRlZiBDT05GSUdfQlVHCiAjaWYgKF9fR05VQ19fID4gMykgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMSkKICMgZGVmaW5lIGlhNjRfYWJvcnQoKQlfX2J1aWx0aW5fdHJhcCgpCiAjZWxzZQpAQCAtOCw4ICs5LDEwIEBACiAjZW5kaWYKICNkZWZpbmUgQlVHKCkgZG8geyBwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBpYTY0X2Fib3J0KCk7IH0gd2hpbGUgKDApCiAKLS8qIHNob3VsZCB0aGlzIEJVRyBzaG91bGQgYmUgbWFkZSBnZW5lcmljPyAqLworLyogc2hvdWxkIHRoaXMgQlVHIGJlIG1hZGUgZ2VuZXJpYz8gKi8KICNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2lnaW5mby5oCmluZGV4IGQ1NWYxMzkuLjkyOTRlNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc2lnaW5mby5oCkBAIC04LDkgKzgsNyBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCiAgKi8KIAotI2RlZmluZSBTSV9QQURfU0laRQkoKFNJX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDQpCi0KLSNkZWZpbmUgU0lHRVZfUEFEX1NJWkUJKChTSUdFVl9NQVhfU0laRS9zaXplb2YoaW50KSkgLSA0KQorI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRQkoNCAqIHNpemVvZihpbnQpKQogCiAjZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKICNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmgKaW5kZXggNjYwYTc1OS4uODVhNTc3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ25hbC5oCkBAIC0xMTQsMTYgKzExNCw2IEBACiAjZGVmaW5lIF9OU0lHX0JQVwk2NAogI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCiAKLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCiAjZGVmaW5lIFNBX1BFUkNQVV9JUlEJCTB4MDIwMDAwMDAKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ25hbC5oCmluZGV4IGNlNDZlYWUuLjZlNTVmZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zaWduYWwuaApAQCAtMTE0LDIwICsxMTQsNiBAQAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oIGIvaW5jbHVkZS9hc20tbTY4ay9idWcuaAppbmRleCAzZTFkMjI2Li4wNzJjZTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYnVnLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQogI2lmbmRlZiBDT05GSUdfU1VOMwogI2RlZmluZSBCVUcoKSBkbyB7IFwKQEAgLTIyLDYgKzIzLDggQEAKICNlbmRpZgogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2lnbmFsLmgKaW5kZXggNjY4MWJiNi4uMWQwMTZlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NpZ25hbC5oCkBAIC0xMDUsMTkgKzEwNSw2IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRQkJU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNlbmRpZgotCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19VTkJMT0NLICAgICAgICAxCS8qIGZvciB1bmJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1NFVE1BU0sgICAgICAgIDIJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMyOC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMjguaAppbmRleCA0ZjVhOTg0NS4uYTMzN2U1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjgzMjguaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2ODMyOC5oCkBAIC05OTMsNyArOTkzLDcgQEAKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHBhZDE7CiAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBwYWQyOwogICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgcGFkMzsKLX0gbTY4MzI4X3VhcnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG02ODMyOF91YXJ0OwogCiAKIC8qKioqKioqKioqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OEVaMzI4LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OEVaMzI4LmgKaW5kZXggODAxOTMzZC4uNjliN2Y5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhFWjMyOC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4RVozMjguaApAQCAtODE1LDcgKzgxNSw3IEBACiAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBuaXByOwogICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgcGFkMTsKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IHBhZDI7Ci19IG02ODMyOF91YXJ0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtNjgzMjhfdWFydDsKIAogCiAvKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhWWjMyOC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L01DNjhWWjMyOC5oCmluZGV4IGRmNzQzMjIuLjJiOWJmNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9NQzY4VlozMjguaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvTUM2OFZaMzI4LmgKQEAgLTkwOSw3ICs5MDksNyBAQAogICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgbmlwcjsKICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IGhtYXJrOwogICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgdW51c2VkOwotfSBtNjgzMjhfdWFydCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbTY4MzI4X3VhcnQ7CiAKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnbmFsLmgKaW5kZXggNDg2Y2JiMC4uMzdjOWM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaWduYWwuaApAQCAtMTA1LDE5ICsxMDUsNiBAQAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYKLQogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKaW5kZXggZWI5NGJiOS4uM2Y1OTRiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2J1Zy5oCkBAIC0zLDEyICszLDE0IEBACiAKICNpbmNsdWRlIDxhc20vYnJlYWsuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKKyNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBCVUcoKQkJCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnJlYWsgJTAiIDogOiAiaSIgKEJSS19CVUcpKTsJCVwKIH0gd2hpbGUgKDApCisjZW5kaWYKIAotI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lcnJuby5oIGIvaW5jbHVkZS9hc20tbWlwcy9lcnJuby5oCmluZGV4IDJiNDU4ZjkuLjNjMGQ4NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZXJybm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Vycm5vLmgKQEAgLTExNSw2ICsxMTUsMTAgQEAKICNkZWZpbmUJRUtFWVJFVk9LRUQJMTYzCS8qIEtleSBoYXMgYmVlbiByZXZva2VkICovCiAjZGVmaW5lCUVLRVlSRUpFQ1RFRAkxNjQJLyogS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlICovCiAKKy8qIGZvciByb2J1c3QgbXV0ZXhlcyAqLworI2RlZmluZQlFT1dORVJERUFECTE2NQkvKiBPd25lciBkaWVkICovCisjZGVmaW5lCUVOT1RSRUNPVkVSQUJMRQkxNjYJLyogU3RhdGUgbm90IHJlY292ZXJhYmxlICovCisKICNkZWZpbmUgRURRVU9UCQkxMTMzCS8qIFF1b3RhIGV4Y2VlZGVkICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCmluZGV4IDhkZGQzYzkuLmEwZTI2ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCkBAIC0xMSw4ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotI2RlZmluZSBTSUdFVl9IRUFEX1NJWkUJKHNpemVvZihsb25nKSArIDIqc2l6ZW9mKGludCkpCi0jZGVmaW5lIFNJR0VWX1BBRF9TSVpFCSgoU0lHRVZfTUFYX1NJWkUtU0lHRVZfSEVBRF9TSVpFKSAvIHNpemVvZihpbnQpKQogI3VuZGVmIF9fQVJDSF9TSV9UUkFQTk8JLyogZXhjZXB0aW9uIGNvZGUgbmVlZHMgdG8gZmlsbCB0aGlzIC4uLiAgKi8KIAogI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaAppbmRleCA5OTQ5ODdkLi5kODEzNTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKQEAgLTk4LDIxICs5OCw2IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaICAgIDIwNDgKICNkZWZpbmUgU0lHU1RLU1ogICAgICAgODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGZsYWcgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDAyMDAwMDAwCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNkZWZpbmUgU0lHX0JMT0NLCTEJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sJMgkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19TRVRNQVNLCTMJLyogZm9yIHNldHRpbmcgdGhlIHNpZ25hbCBtYXNrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYnVnLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvYnVnLmgKaW5kZXggZTcyZjZlMi4uNjk1NTg4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9idWcuaApAQCAtMSwxMiArMSwxNCBAQAogI2lmbmRlZiBfUEFSSVNDX0JVR19ICiAjZGVmaW5lIF9QQVJJU0NfQlVHX0gKIAorI2lmZGVmIENPTkZJR19CVUcKICNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBCVUcoKSBkbyB7IFwKIAlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCiAJZHVtcF9zdGFjaygpOyBcCiAJcGFuaWMoIkJVRyEiKTsgXAogfSB3aGlsZSAoMCkKKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lcnJuby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Vycm5vLmgKaW5kZXggYTEwZjEwOS4uMDg0NjRjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2Vycm5vLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Vycm5vLmgKQEAgLTExNSw1ICsxMTUsOSBAQAogI2RlZmluZSBFTk9UU1VQCQkyNTIJLyogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkIChQT1NJWC40IC8gSFBVWCkgKi8KICNkZWZpbmUgRUNBTkNFTExFRAkyNTMJLyogYWlvIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGJlZm9yZSBjb21wbGV0ZSAoUE9TSVguNCAvIEhQVVgpICovCiAKKy8qIGZvciByb2J1c3QgbXV0ZXhlcyAqLworI2RlZmluZSBFT1dORVJERUFECTI1NAkvKiBPd25lciBkaWVkICovCisjZGVmaW5lIEVOT1RSRUNPVkVSQUJMRQkyNTUJLyogU3RhdGUgbm90IHJlY292ZXJhYmxlICovCisKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmgKaW5kZXggMzU4ZjU3Ny4uMjVjYjIzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWduYWwuaApAQCAtODksMTcgKzg5LDYgQEAKICNkZWZpbmUgX05TSUdfQlBXCUJJVFNfUEVSX0xPTkcKICNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQogCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaAppbmRleCA4YTA4NDIzLi5jMWI1YmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy91YWNjZXNzLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogLyoKICAqIE5vdGUgdGhhdCBzaW5jZSBrZXJuZWwgYWRkcmVzc2VzIGFyZSBpbiBhIHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2Ugb24KLSAqIHBhcmlzYywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgYWNjZXNzX29rKCkgb3IgdmVyaWZ5X2FyZWEoKS4KKyAqIHBhcmlzYywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgYWNjZXNzX29rKCkuCiAgKiBXZSBqdXN0IGxldCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGRvIHRoZSByaWdodCB0aGluZy4gVGhpcyBhbHNvIG1lYW5zCiAgKiB0aGF0IHB1dF91c2VyIGlzIHRoZSBzYW1lIGFzIF9fcHV0X3VzZXIsIGV0Yy4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2J1Zy5oIGIvaW5jbHVkZS9hc20tcHBjL2J1Zy5oCmluZGV4IGU5OWM2Y2IuLjhiMzRmZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYnVnLmgKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogI2RlZmluZSBCVUdfV0FSTklOR19UUkFQCTB4MTAwMDAwMAogCisjaWZkZWYgQ09ORklHX0JVRwogI2RlZmluZSBCVUcoKSBkbyB7CQkJCQkJCSBcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJIFwKIAkJIjE6CXR3aSAzMSwwLDBcbiIJCQkJCSBcCkBAIC01MCw2ICs1MSw4IEBACiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNkZWZpbmUgSEFWRV9BUkNIX0JVR19PTgogI2RlZmluZSBIQVZFX0FSQ0hfV0FSTl9PTgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcG1hY19mZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1wcGMvcG1hY19mZWF0dXJlLmgKaW5kZXggNjM5YjY5MC4uOGJlYjE2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BtYWNfZmVhdHVyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wbWFjX2ZlYXR1cmUuaApAQCAtMzE2LDYgKzMxNiw5IEBACiBleHRlcm4gdm9pZCBwbWFjX3N1c3BlbmRfYWdwX2Zvcl9jYXJkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcG1hY19yZXN1bWVfYWdwX2Zvcl9jYXJkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCisvKiBVc2VkIGJ5IHRoZSB2aWEtcG11IGRyaXZlciBmb3Igc3VzcGVuZC9yZXN1bWUKKyAqLworZXh0ZXJuIHZvaWQgcG1hY190d2Vha19jbG9ja19zcHJlYWRpbmcoaW50IGVuYWJsZSk7CiAKIC8qCiAgKiBUaGUgcGFydCBiZWxvdyBpcyBmb3IgdXNlIGJ5IG1hY2lvX2FzaWMuYyBvbmx5LCBkbyBub3QgcmVseQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oIGIvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCmluZGV4IGU3MGMyNWYuLjQ1YzVlNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcmVnX2Jvb2tlLmgKQEAgLTMwNSw2ICszMDUsNyBAQAogI2RlZmluZSBFU1JfUElMCQkweDA4MDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gSWxsZWdhbCAqLwogI2RlZmluZSBFU1JfUFBSCQkweDA0MDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gUHJpdmVsZWdlZCAqLwogI2RlZmluZSBFU1JfUFRSCQkweDAyMDAwMDAwCS8qIFByb2dyYW0gRXhjZXB0aW9uIC0gVHJhcCAqLworI2RlZmluZSBFU1JfRlAJCTB4MDEwMDAwMDAJLyogRmxvYXRpbmcgUG9pbnQgT3BlcmF0aW9uICovCiAjZGVmaW5lIEVTUl9EU1QJCTB4MDA4MDAwMDAJLyogU3RvcmFnZSBFeGNlcHRpb24gLSBEYXRhIG1pc3MgKi8KICNkZWZpbmUgRVNSX0RJWgkJMHgwMDQwMDAwMAkvKiBTdG9yYWdlIEV4Y2VwdGlvbiAtIFpvbmUgZmF1bHQgKi8KICNkZWZpbmUgRVNSX1NUCQkweDAwODAwMDAwCS8qIFN0b3JlIE9wZXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCmluZGV4IDhjYzhiODguLmQ4OTBkYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc2lnbmFsLmgKQEAgLTk5LDE5ICs5OSw2IEBACiAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9hLm91dC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvYS5vdXQuaAppbmRleCA4MDIzMzhlLi4zODcxZTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9hLm91dC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2Eub3V0LmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9fUFBDNjRfQV9PVVRfSF9fCiAjZGVmaW5lIF9fUFBDNjRfQV9PVVRfSF9fCiAKLSNpbmNsdWRlIDxhc20vcHBjZGVidWcuaD4KLQogLyoKICAqIGMgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9idWcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2J1Zy5oCmluZGV4IGRiMzFkZDIuLjE2OTg2OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2J1Zy5oCkBAIC0yNiw2ICsyNiw4IEBACiAgKi8KICNkZWZpbmUgQlVHX1dBUk5JTkdfVFJBUAkweDEwMDAwMDAKIAorI2lmZGVmIENPTkZJR19CVUcKKwogI2RlZmluZSBCVUcoKSBkbyB7CQkJCQkJCSBcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJIFwKIAkJIjE6CXR3aSAzMSwwLDBcbiIJCQkJCSBcCkBAIC01NSwxMSArNTcsMTIgQEAKIAkJICAgICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOwlcCiB9IHdoaWxlICgwKQogCi0jZW5kaWYKLQogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUdfT04KICNkZWZpbmUgSEFWRV9BUkNIX1dBUk5fT04KKyNlbmRpZgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2VsZi5oCmluZGV4IDg0NTdkOTAuLjZjNDJkNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2VsZi5oCkBAIC0yMjksOSArMjI5LDEzIEBACiAKIC8qCiAgKiBBbiBleGVjdXRhYmxlIGZvciB3aGljaCBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoKSByZXR1cm5zIFRSVUUgd2lsbAotICogaGF2ZSB0aGUgUkVBRF9JTVBMSUVTX0VYRUMgcGVyc29uYWxpdHkgZmxhZyBzZXQgYXV0b21hdGljYWxseS4KKyAqIGhhdmUgdGhlIFJFQURfSU1QTElFU19FWEVDIHBlcnNvbmFsaXR5IGZsYWcgc2V0IGF1dG9tYXRpY2FsbHkuIFRoaXMKKyAqIGlzIG9ubHkgcmVxdWlyZWQgdG8gd29yayBhcm91bmQgYnVncyBpbiBvbGQgMzJiaXQgdG9vbGNoYWlucy4gU2luY2UKKyAqIHRoZSA2NGJpdCBBQkkgaGFzIG5ldmVyIGhhZCB0aGVzZSBpc3N1ZXMgZG9udCBlbmFibGUgdGhlIHdvcmthcm91bmQKKyAqIGV2ZW4gaWYgd2UgaGF2ZSBhbiBleGVjdXRhYmxlIHN0YWNrLgogICovCi0jZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY19zdGspCShleGVjX3N0ayAhPSBFWFNUQUNLX0RJU0FCTEVfWCkKKyNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBleGVjX3N0aykgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKKwkJKGV4ZWNfc3RrICE9IEVYU1RBQ0tfRElTQUJMRV9YKSA6IDApCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKaW5kZXggMjBlMGYxOS4uODYyMTk1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaApAQCAtMjUyLDEwICsyNTIsMTkgQEAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgYSBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSBhIFBUX0dOVV9TVEFDSwotICogcHJvZ3JhbSBoZWFkZXIgZW50cnkuCisgKiBwcm9ncmFtIGhlYWRlciBlbnRyeS4gVGhlIFBQQzY0IEVMRiBBQkkgaGFzIGEgbm9uIGV4ZWN1dGFibGUgc3RhY2sKKyAqIHN0YWNrIGJ5IGRlZmF1bHQsIHNvIGluIHRoZSBhYnNlbnNlIG9mIGEgUFRfR05VX1NUQUNLIHByb2dyYW0gaGVhZGVyCisgKiB3ZSB0dXJuIGV4ZWN1dGUgcGVybWlzc2lvbiBvZmYuCiAgKi8KLSNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKLQkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKyNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUzMyCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAorCQkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKworI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTNjQJKFZNX1JFQUQgfCBWTV9XUklURSB8IFwKKwkJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUyBcCisJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKKwkgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUzMyIDogVk1fU1RBQ0tfREVGQVVMVF9GTEFHUzY0KQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9QUEM2NF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaAppbmRleCAxNjIzMmQ3Li40ZmM0YjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCkBAIC0yNyw3ICsyNyw3IEBACiAJa21lbV9jYWNoZV9mcmVlKHplcm9fY2FjaGUsIHBnZCk7CiB9CiAKLSNkZWZpbmUgcGdkX3BvcHVsYXRlKE1NLCBQR0QsIFBNRCkJcGdkX3NldChQR0QsIFBNRCkKKyNkZWZpbmUgcHVkX3BvcHVsYXRlKE1NLCBQVUQsIFBNRCkJcHVkX3NldChQVUQsIFBNRCkKIAogc3RhdGljIGlubGluZSBwbWRfdCAqCiBwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ3RhYmxlLmgKaW5kZXggYTI2MTIwNS4uYjk4NGUyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BndGFibGUuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgX1BQQzY0X1BHVEFCTEVfSAogI2RlZmluZSBfUFBDNjRfUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KLQogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQogICogdGhlIHBwYzY0IGhhc2hlZCBwYWdlIHRhYmxlLgpAQCAtMTcsNiArMTUsOCBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorCiAvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwogI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQQUdFX1NISUZUIC0gMykKICNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCkBAIC0yMjgsMTIgKzIyOCwxMyBAQAogI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQlcCiAJKF9fYnBuX3RvX2JhKHBtZF92YWwocG1kKSA+PiBQTURfVE9fUFRFUEFHRV9TSElGVCkpCiAjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCXZpcnRfdG9fcGFnZShwbWRfcGFnZV9rZXJuZWwocG1kKSkKLSNkZWZpbmUgcGdkX3NldChwZ2RwLCBwbWRwKQkocGdkX3ZhbCgqKHBnZHApKSA9IChfX2JhX3RvX2JwbihwbWRwKSkpCi0jZGVmaW5lIHBnZF9ub25lKHBnZCkJCSghcGdkX3ZhbChwZ2QpKQotI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgocGdkX3ZhbChwZ2QpKSA9PSAwKQotI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgIT0gMFVMKQotI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCShwZ2RfdmFsKCoocGdkcCkpID0gMFVMKQotI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQkoX19icG5fdG9fYmEocGdkX3ZhbChwZ2QpKSkgCisKKyNkZWZpbmUgcHVkX3NldChwdWRwLCBwbWRwKQkocHVkX3ZhbCgqKHB1ZHApKSA9IChfX2JhX3RvX2JwbihwbWRwKSkpCisjZGVmaW5lIHB1ZF9ub25lKHB1ZCkJCSghcHVkX3ZhbChwdWQpKQorI2RlZmluZSBwdWRfYmFkKHB1ZCkJCSgocHVkX3ZhbChwdWQpKSA9PSAwVUwpCisjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkJKHB1ZF92YWwocHVkKSAhPSAwVUwpCisjZGVmaW5lIHB1ZF9jbGVhcihwdWRwKQkJKHB1ZF92YWwoKihwdWRwKSkgPSAwVUwpCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJCShfX2Jwbl90b19iYShwdWRfdmFsKHB1ZCkpKQogCiAvKiAKICAqIEZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeS4gIFdlIGNvbWJpbmUgdGhlIGFkZHJlc3MgcmVnaW9uIApAQCAtMjQ1LDEyICsyNDYsMTMgQEAKICNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykJICgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCiAKIC8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KLSNkZWZpbmUgcG1kX29mZnNldChkaXIsYWRkcikgXAotICAoKHBtZF90ICopIHBnZF9wYWdlKCooZGlyKSkgKyAoKChhZGRyKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpKSkKKyNkZWZpbmUgcG1kX29mZnNldChwdWRwLGFkZHIpIFwKKyAgKChwbWRfdCAqKSBwdWRfcGFnZSgqKHB1ZHApKSArICgoKGFkZHIpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSkpKQogCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KICNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHIpIFwKLSAgKChwdGVfdCAqKSBwbWRfcGFnZV9rZXJuZWwoKihkaXIpKSArICgoKGFkZHIpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKSkKKyAgKChwdGVfdCAqKSBwbWRfcGFnZV9rZXJuZWwoKihkaXIpKSBcCisgKyAoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkpCiAKICNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLGFkZHIpCXB0ZV9vZmZzZXRfa2VybmVsKChkaXIpLCAoYWRkcikpCiAjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsYWRkcikJcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyKSkKQEAgLTU4MiwxOSArNTg0LDIyIEBACiBzdGF0aWMgaW5saW5lIHB0ZV90ICpmaW5kX2xpbnV4X3B0ZShwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgZWEpCiB7CiAJcGdkX3QgKnBnOworCXB1ZF90ICpwdTsKIAlwbWRfdCAqcG07CiAJcHRlX3QgKnB0ID0gTlVMTDsKIAlwdGVfdCBwdGU7CiAKIAlwZyA9IHBnZGlyICsgcGdkX2luZGV4KGVhKTsKIAlpZiAoIXBnZF9ub25lKCpwZykpIHsKLQotCQlwbSA9IHBtZF9vZmZzZXQocGcsIGVhKTsKLQkJaWYgKHBtZF9wcmVzZW50KCpwbSkpIHsgCi0JCQlwdCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtLCBlYSk7Ci0JCQlwdGUgPSAqcHQ7Ci0JCQlpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpCi0JCQkJcHQgPSBOVUxMOworCQlwdSA9IHB1ZF9vZmZzZXQocGcsIGVhKTsKKwkJaWYgKCFwdWRfbm9uZSgqcHUpKSB7CisJCQlwbSA9IHBtZF9vZmZzZXQocHUsIGVhKTsKKwkJCWlmIChwbWRfcHJlc2VudCgqcG0pKSB7CisJCQkJcHQgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbSwgZWEpOworCQkJCXB0ZSA9ICpwdDsKKwkJCQlpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpCisJCQkJCXB0ID0gTlVMTDsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaAppbmRleCBmZTU0MDFhLi5hMmQ3YmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaApAQCAtOTYsMTkgKzk2LDYgQEAKIAogI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4CiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYKIAogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc3BpbmxvY2suaAppbmRleCBhOWIyYTExLi5hY2QxMTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3NwaW5sb2NrLmgKQEAgLTExMCw3ICsxMTAsNyBAQAogCQkJSE1UX2xvdygpOwogCQkJaWYgKFNIQVJFRF9QUk9DRVNTT1IpCiAJCQkJX19zcGluX3lpZWxkKGxvY2spOwotCQl9IHdoaWxlIChsaWtlbHkobG9jay0+bG9jayAhPSAwKSk7CisJCX0gd2hpbGUgKHVubGlrZWx5KGxvY2stPmxvY2sgIT0gMCkpOwogCQlITVRfbWVkaXVtKCk7CiAJfQogfQpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCQlITVRfbG93KCk7CiAJCQlpZiAoU0hBUkVEX1BST0NFU1NPUikKIAkJCQlfX3NwaW5feWllbGQobG9jayk7Ci0JCX0gd2hpbGUgKGxpa2VseShsb2NrLT5sb2NrICE9IDApKTsKKwkJfSB3aGlsZSAodW5saWtlbHkobG9jay0+bG9jayAhPSAwKSk7CiAJCUhNVF9tZWRpdW0oKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3NfZGlzKTsKIAl9CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJCUhNVF9sb3coKTsKIAkJCWlmIChTSEFSRURfUFJPQ0VTU09SKQogCQkJCV9fcndfeWllbGQocncpOwotCQl9IHdoaWxlIChsaWtlbHkocnctPmxvY2sgPCAwKSk7CisJCX0gd2hpbGUgKHVubGlrZWx5KHJ3LT5sb2NrIDwgMCkpOwogCQlITVRfbWVkaXVtKCk7CiAJfQogfQpAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQlITVRfbG93KCk7CiAJCQlpZiAoU0hBUkVEX1BST0NFU1NPUikKIAkJCQlfX3J3X3lpZWxkKHJ3KTsKLQkJfSB3aGlsZSAobGlrZWx5KHJ3LT5sb2NrICE9IDApKTsKKwkJfSB3aGlsZSAodW5saWtlbHkocnctPmxvY2sgIT0gMCkpOwogCQlITVRfbWVkaXVtKCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9idWcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmgKaW5kZXggMmI4ZDZkNC4uYTJlNzQzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2J1Zy5oCkBAIC0zLDEyICszLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKICNkZWZpbmUgQlVHKCkgZG8geyBcCiAgICAgICAgIHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5sb25nIDAiKTsgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY21iLmggYi9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oCmluZGV4IDFiZmUyYmQuLmRhZTFkZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvY21iLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jbWIuaApAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBCSU9EQVNEUkVBREFMTENNQglfSU9XUihEQVNEX0lPQ1RMX0xFVFRFUiwzMyxzdHJ1Y3QgY21iZGF0YSkKIAogI2lmZGVmIF9fS0VSTkVMX18KLQorc3RydWN0IGNjd19kZXZpY2U7CiAvKioKICAqIGVuYWJsZV9jbWYoKSAtIHN3aXRjaCBvbiB0aGUgY2hhbm5lbCBtZWFzdXJlbWVudCBmb3IgYSBzcGVjaWZpYyBkZXZpY2UKICAqICBAY2RldjoJVGhlIGNjdyBkZXZpY2UgdG8gYmUgZW5hYmxlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCmluZGV4IDI4ZWYyMzUuLjZiYmNkZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgREVCVUdfT0ZGX0xFVkVMICAgICAgICAgICAgLTEgLyogbGV2ZWwgd2hlcmUgZGVidWcgaXMgc3dpdGNoZWQgb2ZmICovCiAjZGVmaW5lIERFQlVHX0ZMVVNIX0FMTCAgICAgICAgICAgIC0xIC8qIHBhcmFtZXRlciB0byBmbHVzaCBhbGwgYXJlYXMgKi8KICNkZWZpbmUgREVCVUdfTUFYX1ZJRVdTICAgICAgICAgICAgMTAgLyogbWF4IG51bWJlciBvZiB2aWV3cyBpbiBwcm9jIGZzICovCi0jZGVmaW5lIERFQlVHX01BWF9QUk9DRl9MRU4gICAgICAgIDE2IC8qIG1heCBsZW5ndGggZm9yIGEgcHJvYyBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgREVCVUdfTUFYX1BST0NGX0xFTiAgICAgICAgNjQgLyogbWF4IGxlbmd0aCBmb3IgYSBwcm9jIGZpbGUgbmFtZSAqLwogI2RlZmluZSBERUJVR19ERUZBVUxUX0xFVkVMICAgICAgICAzICAvKiBpbml0aWFsIGRlYnVnIGxldmVsICovCiAKICNkZWZpbmUgREVCVUdfRElSX1JPT1QgInMzOTBkYmYiIC8qIG5hbWUgb2YgZGVidWcgcm9vdCBkaXJlY3RvcnkgaW4gcHJvYyBmcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaAppbmRleCA2MTRlMmE5Li4yYmUyODdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaApAQCAtMTYsNiArMTYsOCBAQAogI2RlZmluZSBQQUdFX1NISUZUICAgICAgMTIKICNkZWZpbmUgUEFHRV9TSVpFICAgICAgICgxVUwgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLICAgICAgICh+KFBBR0VfU0laRS0xKSkKKyNkZWZpbmUgUEFHRV9ERUZBVUxUX0FDQwkwCisjZGVmaW5lIFBBR0VfREVGQVVMVF9LRVkJKFBBR0VfREVGQVVMVF9BQ0MgPDwgNCkKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaAppbmRleCA4OGMyNzJjLi5mYjQ2ZTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKQEAgLTI0NSw3ICsyNDUsNyBAQAogCXBzd190IHdhaXRfcHN3OwogCiAJd2FpdF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCB8Ci0JCVBTV19NQVNLX01DSEVDSyB8IFBTV19NQVNLX1dBSVQ7CisJCVBTV19NQVNLX01DSEVDSyB8IFBTV19NQVNLX1dBSVQgfCBQU1dfREVGQVVMVF9LRVk7CiAjaWZuZGVmIF9fczM5MHhfXwogCWFzbSB2b2xhdGlsZSAoCiAJCSIgICAgYmFzciAlMCwwXG4iCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaAppbmRleCAxZGM4MDY2Li40ZWZmOGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmgKQEAgLTE4NSw2ICsxODUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogdHlwZWRlZiB1bmlvbgogewpAQCAtMjM1LDYgKzIzNiw3IEBACiAjZGVmaW5lIFBTV19BRERSX0lOU04JCTB4N0ZGRkZGRkZVTAogCiAjZGVmaW5lIFBTV19CQVNFX0JJVFMJCTB4MDAwODAwMDBVTAorI2RlZmluZSBQU1dfREVGQVVMVF9LRVkJCSgoKHVuc2lnbmVkIGxvbmcpIFBBR0VfREVGQVVMVF9BQ0MpIDw8IDIwKQogCiAjZGVmaW5lIFBTV19BU0NfUFJJTUFSWQkJMHgwMDAwMDAwMFVMCiAjZGVmaW5lIFBTV19BU0NfQUNDUkVHCQkweDAwMDA0MDAwVUwKQEAgLTI2MCw2ICsyNjIsNyBAQAogCiAjZGVmaW5lIFBTV19CQVNFX0JJVFMJCTB4MDAwMDAwMDE4MDAwMDAwMFVMCiAjZGVmaW5lIFBTV19CQVNFMzJfQklUUwkJMHgwMDAwMDAwMDgwMDAwMDAwVUwKKyNkZWZpbmUgUFNXX0RFRkFVTFRfS0VZCQkoKCh1bnNpZ25lZCBsb25nKSBQQUdFX0RFRkFVTFRfQUNDKSA8PCA1MikKIAogI2RlZmluZSBQU1dfQVNDX1BSSU1BUlkJCTB4MDAwMDAwMDAwMDAwMDAwMFVMCiAjZGVmaW5lIFBTV19BU0NfQUNDUkVHCQkweDAwMDA0MDAwMDAwMDAwMDBVTApAQCAtMjY4LDE0ICsyNzEsMTUgQEAKIAogI2RlZmluZSBQU1dfVVNFUjMyX0JJVFMgKFBTV19CQVNFMzJfQklUUyB8IFBTV19NQVNLX0RBVCB8IFBTV19BU0NfSE9NRSB8IFwKIAkJCSBQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCB8IFBTV19NQVNLX01DSEVDSyB8IFwKLQkJCSBQU1dfTUFTS19QU1RBVEUpCisJCQkgUFNXX01BU0tfUFNUQVRFIHwgUFNXX0RFRkFVTFRfS0VZKQogCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKLSNkZWZpbmUgUFNXX0tFUk5FTF9CSVRTCShQU1dfQkFTRV9CSVRTIHwgUFNXX01BU0tfREFUIHwgUFNXX0FTQ19QUklNQVJZKQorI2RlZmluZSBQU1dfS0VSTkVMX0JJVFMJKFBTV19CQVNFX0JJVFMgfCBQU1dfTUFTS19EQVQgfCBQU1dfQVNDX1BSSU1BUlkgfCBcCisJCQkgUFNXX0RFRkFVTFRfS0VZKQogI2RlZmluZSBQU1dfVVNFUl9CSVRTCShQU1dfQkFTRV9CSVRTIHwgUFNXX01BU0tfREFUIHwgUFNXX0FTQ19IT01FIHwgXAogCQkJIFBTV19NQVNLX0lPIHwgUFNXX01BU0tfRVhUIHwgUFNXX01BU0tfTUNIRUNLIHwgXAotCQkJIFBTV19NQVNLX1BTVEFURSkKKwkJCSBQU1dfTUFTS19QU1RBVEUgfCBQU1dfREVGQVVMVF9LRVkpCiAKIC8qIFRoaXMgbWFjcm8gbWVyZ2VzIGEgTkVXIFBTVyBtYXNrIHNwZWNpZmllZCBieSB0aGUgdXNlciBpbnRvCiAgICB0aGUgY3VycmVudGx5IGFjdGl2ZSBQU1cgbWFzayBDVVJSRU5ULCBtb2RpZnlpbmcgb25seSB0aG9zZQpAQCAtNDcwLDYgKzQ3NCwxMiBAQAogZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkCitwc3dfc2V0X2tleSh1bnNpZ25lZCBpbnQga2V5KQoreworCWFzbSB2b2xhdGlsZSAoICJzcGthIDAoJTApIiA6IDogImQiIChrZXkpICk7Cit9CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9TMzkwX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2lnaW5mby5oCmluZGV4IDcyMzAzNTMuLmUwZmYxYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2lnaW5mby5oCkBAIC0xMywxMiArMTMsNiBAQAogI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSAoNCAqIHNpemVvZihpbnQpKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9TMzkwWAotI2RlZmluZSBTSUdFVl9QQURfU0laRSAoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDQpCi0jZWxzZQotI2RlZmluZSBTSUdFVl9QQURfU0laRSAoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDMpCi0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tczM5MC9zaWduYWwuaAppbmRleCBmMjczY2RjLi5iZmVkODNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmgKQEAgLTExNywyMCArMTE3LDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1ogICAgIDIwNDgKICNkZWZpbmUgU0lHU1RLU1ogICAgICAgIDgxOTIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKiBTQV9TSElSUSBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9QUk9CRSAgICAgICAgICAgICAgICBTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00gICAgICAgIFNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAgICAgLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEgICAgLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMiAgICAvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J1Zy5oIGIvaW5jbHVkZS9hc20tc2gvYnVnLmgKaW5kZXggNzAxNzIyMS4uNzA1MDhhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYnVnLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAorI2lmZGVmIENPTkZJR19CVUcKIC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KICAqLwpAQCAtMTIsNiArMTMsOCBAQAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCmluZGV4IDUxMTNjN2YuLjVlYmQwZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaApAQCAtNDIsNyArNDIsNyBAQAogICoJcGFzc2VkIGluIGFuIGluY29ycmVjdCBrZXJuZWwgYWRkcmVzcyB0byBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLiAKICAqCQogICoJSWYgeW91IHVzZSB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHkgcGxlYXNlIGRvbid0IGZvcmdldCB0aGUgCi0gKgl2ZXJpZnlfYXJlYSgpLgorICoJYWNjZXNzX29rKCkuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fCiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNoL3NpZ25hbC5oCmluZGV4IDBhN2ZmNzEuLjI5ZjFhYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NpZ25hbC5oCkBAIC0xMDgsMjAgKzEwOCw2IEBACiAjZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKICNkZWZpbmUgU0lHU1RLU1oJODE5MgogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmggYi9pbmNsdWRlL2FzbS1zaDY0L2J1Zy5oCmluZGV4IDNhY2Q1NGQuLjVkNjU5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9idWcuaApAQCAtMTcsMTAgKzE3LDYgQEAKIAkJQlVHKCk7IFwKIH0gd2hpbGUoMCkKIAotI2RlZmluZSBQQUdFX0JVRyhwYWdlKSBkbyB7IFwKLQlCVUcoKTsgXAotfSB3aGlsZSAoMCkKLQogI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBcCiAJaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgeyBcCiAJCXByaW50aygiQmFkbmVzcyBpbiAlcyBhdCAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmgKaW5kZXggYWEzOTExYS4uZmQwMzRlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvY2hlY2tzdW0uaApAQCAtMzQsNyArMzQsNyBAQAogICoJcGFzc2VkIGluIGFuIGluY29ycmVjdCBrZXJuZWwgYWRkcmVzcyB0byBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLgogICoKICAqCUlmIHlvdSB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IHBsZWFzZSBkb24ndCBmb3JnZXQgdGhlCi0gKgl2ZXJpZnlfYXJlYSgpLgorICoJYWNjZXNzX29rKCkuCiAgKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc2g2NC9zaWduYWwuaAppbmRleCA3Nzk1N2U5Li44NjRjOTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2lnbmFsLmgKQEAgLTEwNywyMCArMTA3LDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWglUSFJFQURfU0laRQogCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICovCi0jZGVmaW5lIFNBX1BST0JFCQlTQV9PTkVTSE9UCi0jZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JU0FfUkVTVEFSVAotI2RlZmluZSBTQV9TSElSUQkJMHgwNDAwMDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2J1Zy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYnVnLmgKaW5kZXggMGQzMGE2Ny4uMDQxNTEyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYnVnLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9TUEFSQ19CVUdfSAogI2RlZmluZSBfU1BBUkNfQlVHX0gKIAorI2lmZGVmIENPTkZJR19CVUcKIC8qIE9ubHkgdXNlIHRoZSBpbmxpbmUgYXNtIHVudGlsIGEgZ2NjIHJlbGVhc2UgdGhhdCBjYW4gaGFuZGxlIF9fYnVpbHRpbl90cmFwCiAgKiAtcm9iIDIwMDMtMDYtMjUKICAqCkBAIC0yNiw2ICsyNyw4IEBACiAjZW5kaWYKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Vycm5vLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9lcnJuby5oCmluZGV4IDhjMDFjNWYzLi5lZDQxYzhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9lcnJuby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2Vycm5vLmgKQEAgLTEwNyw0ICsxMDcsOCBAQAogI2RlZmluZQlFS0VZUkVWT0tFRAkxMzAJLyogS2V5IGhhcyBiZWVuIHJldm9rZWQgKi8KICNkZWZpbmUJRUtFWVJFSkVDVEVECTEzMQkvKiBLZXkgd2FzIHJlamVjdGVkIGJ5IHNlcnZpY2UgKi8KIAorLyogZm9yIHJvYnVzdCBtdXRleGVzICovCisjZGVmaW5lCUVPV05FUkRFQUQJMTMyCS8qIE93bmVyIGRpZWQgKi8KKyNkZWZpbmUJRU5PVFJFQ09WRVJBQkxFCTEzMwkvKiBTdGF0ZSBub3QgcmVjb3ZlcmFibGUgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oCmluZGV4IGQ4MjExY2IuLmY3OTJlMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oCkBAIC0xNDMsNyArMTQzLDYgQEAKICNkZWZpbmUgU0FfT05FU0hPVAlfU1ZfUkVTRVQKICNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MTB1CiAjZGVmaW5lIFNBX05PTUFTSwkweDIwdQotI2RlZmluZSBTQV9TSElSUQkweDQwdQogI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgxMDB1CiAjZGVmaW5lIFNBX1NJR0lORk8JMHgyMDB1CiAKQEAgLTE2MiwxMSArMTYxLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIC8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKICAqIERKSFIKICAqIFNBX1NUQVRJQ19BTExPQyBpcyB1c2VkIGZvciB0aGUgU1BBUkMgc3lzdGVtIHRvIGluZGljYXRlIHRoYXQgdGhpcwogICogaW50ZXJydXB0IGhhbmRsZXIncyBpcnEgc3RydWN0dXJlIHNob3VsZCBiZSBzdGF0aWNhbGx5IGFsbG9jYXRlZApAQCAtMTc3LDggKzE3MSw2IEBACiAgKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBkYXRhLi4gd2hpY2ggaXMgTk9UIEdPT0QuCiAgKgogICovCi0jZGVmaW5lIFNBX1BST0JFIFNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTSBTQV9SRVNUQVJUCiAjZGVmaW5lIFNBX1NUQVRJQ19BTExPQwkJMHg4MAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3MuaAppbmRleCAzZjQ3ODg5Li5mNDYxMTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdWFjY2Vzcy5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLS8qIFNwYXJjIGlzIG5vdCBzZWdtZW50ZWQsIGhvd2V2ZXIgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZvb2wgdmVyaWZ5X2FyZWEoKQorLyogU3BhcmMgaXMgbm90IHNlZ21lbnRlZCwgaG93ZXZlciB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZm9vbCBhY2Nlc3Nfb2soKQogICogd2hlbiBkb2luZyBzeXN0ZW0gY2FsbHMgZnJvbSBrZXJuZWwgbW9kZSBsZWdpdGltYXRlbHkuCiAgKgogICogIkZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZXNlIG1hY3JvcyBhcmUgZ3Jvc3NseSBtaXNuYW1lZC4iIC1MaW51cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9idWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVnLmgKaW5kZXggMjVjNWIxZC4uNTE2YmIyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Zy5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfU1BBUkM2NF9CVUdfSAogI2RlZmluZSBfU1BBUkM2NF9CVUdfSAogCisjaWZkZWYgQ09ORklHX0JVRwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQpAQCAtMTQsNiArMTUsOCBAQAogI2VuZGlmCiAKICNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Vycm5vLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2Vycm5vLmgKaW5kZXggY2M5OGE3My4uZWEzNTA5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9lcnJuby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZXJybm8uaApAQCAtMTA3LDQgKzEwNyw4IEBACiAjZGVmaW5lCUVLRVlSRVZPS0VECTEzMAkvKiBLZXkgaGFzIGJlZW4gcmV2b2tlZCAqLwogI2RlZmluZQlFS0VZUkVKRUNURUQJMTMxCS8qIEtleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSAqLwogCisvKiBmb3Igcm9idXN0IG11dGV4ZXMgKi8KKyNkZWZpbmUJRU9XTkVSREVBRAkxMzIJLyogT3duZXIgZGllZCAqLworI2RlZmluZQlFTk9UUkVDT1ZFUkFCTEUJMTMzCS8qIFN0YXRlIG5vdCByZWNvdmVyYWJsZSAqLworCiAjZW5kaWYgLyogIShfU1BBUkM2NF9FUlJOT19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAppbmRleCA3MTYwNDQ5Li5kZjE3ZTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaApAQCAtMyw4ICszLDYgQEAKIAogI2RlZmluZSBTSV9QQURfU0laRTMyCSgoU0lfTUFYX1NJWkUvc2l6ZW9mKGludCkpIC0gMykKIAotI2RlZmluZSBTSUdFVl9QQURfU0laRQkoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDQpCi0KICNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKICNkZWZpbmUgX19BUkNIX1NJX1RSQVBOTwogI2RlZmluZSBfX0FSQ0hfU0lfQkFORF9UIGludApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKaW5kZXggNjQyOGUzNi4uNDY2ZDAyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCkBAIC0xNDUsNyArMTQ1LDYgQEAKICNkZWZpbmUgU0FfT05FU0hPVAlfU1ZfUkVTRVQKICNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MTB1CiAjZGVmaW5lIFNBX05PTUFTSwkweDIwdQotI2RlZmluZSBTQV9TSElSUQkweDQwdQogI2RlZmluZSBTQV9OT0NMRFdBSVQgICAgMHgxMDB1CiAjZGVmaW5lIFNBX1NJR0lORk8gICAgICAweDIwMHUKIApAQCAtMTY1LDExICsxNjQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogLyoKLSAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKLSAqIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqCi0gKiBTQV9JTlRFUlJVUFQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgogICogREpIUgogICogU0FfU1RBVElDX0FMTE9DIGlzIHVzZWQgZm9yIHRoZSBTUEFSQyBzeXN0ZW0gdG8gaW5kaWNhdGUgdGhhdCB0aGlzCiAgKiBpbnRlcnJ1cHQgaGFuZGxlcidzIGlycSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkCkBAIC0xODAsOCArMTc0LDYgQEAKICAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGRhdGEuLiB3aGljaCBpcyBOT1QgR09PRC4KICAqCiAgKi8KLSNkZWZpbmUgU0FfUFJPQkUgU0FfT05FU0hPVAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NIFNBX1JFU1RBUlQKICNkZWZpbmUgU0FfU1RBVElDX0FMTE9DCQkweDgwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vY29tbW9uLmxkcy5TIGIvaW5jbHVkZS9hc20tdW0vY29tbW9uLmxkcy5TCmluZGV4IGEzZDZhYWIuLjEwMTAxNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2NvbW1vbi5sZHMuUworKysgYi9pbmNsdWRlL2FzbS11bS9jb21tb24ubGRzLlMKQEAgLTgsMTEgKzgsNiBAQAogICBfc2RhdGEgPSAuOwogICBQUk9WSURFIChzZGF0YSA9IC4pOwogCi0gIC4gPSBBTElHTigxNik7CQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQogICBST0RBVEEKIAogICAudW5wcm90ZWN0ZWQgOiB7ICooLnVucHJvdGVjdGVkKSB9CkBAIC0yMCw2ICsxNSwxMCBAQAogICBQUk9WSURFIChfdW5wcm90ZWN0ZWRfZW5kID0gLik7CiAKICAgLiA9IEFMSUdOKDQwOTYpOworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCiAgIF9fdW1sX3NldHVwX3N0YXJ0ID0gLjsKICAgLnVtbC5zZXR1cC5pbml0IDogeyAqKC51bWwuc2V0dXAuaW5pdCkgfQogICBfX3VtbF9zZXR1cF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLmggYi9pbmNsdWRlL2FzbS11bS9lbGYuaAppbmRleCBiM2E3MjU4Li43OTA4ZjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYuaApAQCAtMTMsNyArMTMsNyBAQAogCiAjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICgxKQogCi0jaWZkZWYgQ09ORklHXzY0X0JJVAorI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1M2NAogI2Vsc2UKICNkZWZpbmUgRUxGX0NMQVNTIEVMRkNMQVNTMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaAppbmRleCAzNjIwYTA4Li4xMDJlYjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcGFnZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKICNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQogCi0jaWYgZGVmaW5lZChDT05GSUdfM19MRVZFTF9QR1RBQkxFUykgJiYgIWRlZmluZWQoQ09ORklHXzY0X0JJVCkKKyNpZiBkZWZpbmVkKENPTkZJR18zX0xFVkVMX1BHVEFCTEVTKSAmJiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCiAKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsgfSBwdGVfdDsKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHBtZDsgfSBwbWRfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUtM2xldmVsLmggYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLTNsZXZlbC5oCmluZGV4IGJkYmMzZjkuLmQzMDlmM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3BndGFibGUtM2xldmVsLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS0zbGV2ZWwuaApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgKi8KICNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzIKIAotI2lmZGVmIENPTkZJR182NF9CSVQKKyNpZmRlZiBDT05GSUdfNjRCSVQKIAogI2RlZmluZSBwdGVfdG9fcGdvZmYocCkgKChwKS5wdGUgPj4gMzIpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmggYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCmluZGV4IDAzOGJhNmYuLmI5NTNiMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaApAQCAtMTcsNiArMTcsMTAgQEAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKKwkvKiBUaGlzIGZsYWcgaXMgc2V0IHRvIDEgYmVmb3JlIGNhbGxpbmcgZG9fZm9yayAoYW5kIGFuYWx5emVkIGluCisJICogY29weV90aHJlYWQpIHRvIG1hcmsgdGhhdCB3ZSBhcmUgYmVnaW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIChmb3JrIC8KKwkgKiB2Zm9yayAvIGNsb25lKSwgYW5kIHJlc2V0IHRvIDAgYWZ0ZXIuIEl0IGlzIGxlZnQgdG8gMCB3aGVuIGNhbGxlZAorCSAqIGZyb20ga2VybmVsc3BhY2UgKGkuZS4ga2VybmVsX3RocmVhZCgpIG9yIGZvcmtfaWRsZSgpLCBhcyBvZiAyLjYuMTEpLiAqLwogCWludCBmb3JraW5nOwogCWludCBuc3lzY2FsbHM7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKQEAgLTg5LDcgKzkzLDExIEBACiBleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgZHVtcF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB1c2VyICp1KTsKLWV4dGVybiB2b2lkIHByZXBhcmVfdG9fY29weShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3RvX2NvcHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvYnVnLmggYi9pbmNsdWRlL2FzbS12ODUwL2J1Zy5oCmluZGV4IGM3Nzg5MTYuLmIwZWQyZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9idWcuaApAQCAtMTQsOSArMTQsMTIgQEAKICNpZm5kZWYgX19WODUwX0JVR19IX18KICNkZWZpbmUgX19WODUwX0JVR19IX18KIAorI2lmZGVmIENPTkZJR19CVUcKIGV4dGVybiB2b2lkIF9fYnVnICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKICNkZWZpbmUgQlVHKCkJCV9fYnVnKCkKICNkZWZpbmUgSEFWRV9BUkNIX0JVRworI2VuZGlmCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KIAogI2VuZGlmIC8qIF9fVjg1MF9CVUdfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tdjg1MC9zaWduYWwuaAppbmRleCA0MDdkYjg3Li5lYzM1NjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2lnbmFsLmgKQEAgLTExMCwyMSArMTEwLDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLQotI2lmZGVmIF9fS0VSTkVMX18KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0KICNkZWZpbmUgU0lHX0JMT0NLICAgICAgICAgIDAJLyogZm9yIGJsb2NraW5nIHNpZ25hbHMgKi8KICNkZWZpbmUgU0lHX1VOQkxPQ0sgICAgICAgIDEJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSyAgICAgICAgMgkvKiBmb3Igc2V0dGluZyB0aGUgc2lnbmFsIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYXBpYy5oCmluZGV4IGMwMjVjYzMuLmU0YjEwMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaApAQCAtOTksNyArOTksNiBAQAogZXh0ZXJuIHZvaWQgZW5hYmxlX0FQSUNfdGltZXIodm9pZCk7CiBleHRlcm4gdm9pZCBjbHVzdGVyZWRfYXBpY19jaGVjayh2b2lkKTsKIAotZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCk7CiBleHRlcm4gdm9pZCBubWlfd2F0Y2hkb2dfZGVmYXVsdCh2b2lkKTsKIGV4dGVybiBpbnQgc2V0dXBfbm1pX3dhdGNoZG9nKGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ib290c2V0dXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9ib290c2V0dXAuaAppbmRleCBiNTcwYTQ4Li5iODI5ZjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYm9vdHNldHVwLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2Jvb3RzZXR1cC5oCkBAIC0yLDcgKzIsOCBAQAogI2lmbmRlZiBfWDg2XzY0X0JPT1RTRVRVUF9ICiAjZGVmaW5lIF9YODZfNjRfQk9PVFNFVFVQX0ggMQogCi1leHRlcm4gY2hhciB4ODZfYm9vdF9wYXJhbXNbMjA0OF07CisjZGVmaW5lIEJPT1RfUEFSQU1fU0laRQkJNDA5NgorZXh0ZXJuIGNoYXIgeDg2X2Jvb3RfcGFyYW1zW0JPT1RfUEFSQU1fU0laRV07CiAKIC8qCiAgKiBUaGlzIGlzIHNldCB1cCBieSB0aGUgc2V0dXAtcm91dGluZSBhdCBib290LXRpbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9idWcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9idWcuaAppbmRleCAxOWFlZDZlLi5iZGJmNjZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Zy5oCkBAIC0xNSwxMSArMTUsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCBsaW5lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorI2lmZGVmIENPTkZJR19CVUcKICNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBCVUcoKSBcCiAJYXNtIHZvbGF0aWxlKCJ1ZDIgOyAucXVhZCAlYzEgOyAuc2hvcnQgJWMwIiA6OiBcCiAJCSAgICAgImkiKF9fTElORV9fKSwgImkiIChfX3N0cmluZ2lmeShfX0ZJTEVfXykpKQogdm9pZCBvdXRfb2ZfbGluZV9idWcodm9pZCk7Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisjZW5kaWYKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NwdWZlYXR1cmUuaAppbmRleCBlNjhhZDk3Li5hZWEzMDhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvY3B1ZmVhdHVyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jcHVmZWF0dXJlLmgKQEAgLTcsNyArNyw3IEBACiAjaWZuZGVmIF9fQVNNX1g4NjY0X0NQVUZFQVRVUkVfSAogI2RlZmluZSBfX0FTTV9YODY2NF9DUFVGRUFUVVJFX0gKIAotI2RlZmluZSBOQ0FQSU5UUwk2CisjZGVmaW5lIE5DQVBJTlRTCTcJLyogTiAzMi1iaXQgd29yZHMgd29ydGggb2YgaW5mbyAqLwogCiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwMSwgd29yZCAwICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZQVQkJKDAqMzIrIDApIC8qIE9uYm9hcmQgRlBVICovCkBAIC03NCw5ICs3NCwxNSBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9DWDE2CSg0KjMyKzEzKSAvKiBDTVBYQ0hHMTZCICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1hUUFIJKDQqMzIrMTQpIC8qIFNlbmQgVGFzayBQcmlvcml0eSBNZXNzYWdlcyAqLwogCi0vKiBNb3JlIGV4dGVuZGVkIEFNRCBmbGFnczogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAwMSwgZWN4LCB3b3JkIDUgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTEFIRl9MTQkoNSozMisgMCkgLyogTEFIRi9TQUhGIGluIGxvbmcgbW9kZSAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZCSg1KjMyKyAxKSAvKiBJZiB5ZXMgSHlwZXJUaHJlYWRpbmcgbm90IHZhbGlkICovCisvKiBWSUEvQ3lyaXgvQ2VudGF1ci1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHhDMDAwMDAwMSwgd29yZCA1ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hTVE9SRQkoNSozMisgMikgLyogb24tQ1BVIFJORyBwcmVzZW50ICh4c3RvcmUgaW5zbikgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNUT1JFX0VOCSg1KjMyKyAzKSAvKiBvbi1DUFUgUk5HIGVuYWJsZWQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWENSWVBUCSg1KjMyKyA2KSAvKiBvbi1DUFUgY3J5cHRvICh4Y3J5cHQgaW5zbikgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWENSWVBUX0VOCSg1KjMyKyA3KSAvKiBvbi1DUFUgY3J5cHRvIGVuYWJsZWQgKi8KKworLyogTW9yZSBleHRlbmRlZCBBTUQgZmxhZ3M6IENQVUlEIGxldmVsIDB4ODAwMDAwMDEsIGVjeCwgd29yZCA2ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xBSEZfTE0JKDYqMzIrIDApIC8qIExBSEYvU0FIRiBpbiBsb25nIG1vZGUgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWQkoNiozMisgMSkgLyogSWYgeWVzIEh5cGVyVGhyZWFkaW5nIG5vdCB2YWxpZCAqLwogCiAjZGVmaW5lIGNwdV9oYXMoYywgYml0KSAgICAgICAgICAgICAgICB0ZXN0X2JpdChiaXQsIChjKS0+eDg2X2NhcGFiaWxpdHkpCiAjZGVmaW5lIGJvb3RfY3B1X2hhcyhiaXQpICAgICAgdGVzdF9iaXQoYml0LCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKaW5kZXggMDhmODNhNC4uOGU5NGVkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAKICNkZWZpbmUgRTgyME1BUAkweDJkMAkJLyogb3VyIG1hcCAqLwotI2RlZmluZSBFODIwTUFYCTMyCQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBFODIwTUFQICovCisjZGVmaW5lIEU4MjBNQVgJMTI4CQkvKiBudW1iZXIgb2YgZW50cmllcyBpbiBFODIwTUFQICovCiAjZGVmaW5lIEU4MjBOUgkweDFlOAkJLyogIyBlbnRyaWVzIGluIEU4MjBNQVAgKi8KIAogI2RlZmluZSBFODIwX1JBTQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NpZ2luZm8uaAppbmRleCA3YmMxNTk4Li5kMDlhMWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWdpbmZvLmgKQEAgLTMsOCArMyw2IEBACiAKICNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUJKDQgKiBzaXplb2YoaW50KSkKIAotI2RlZmluZSBTSUdFVl9QQURfU0laRSAoKFNJR0VWX01BWF9TSVpFL3NpemVvZihpbnQpKSAtIDQpCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NpZ25hbC5oCmluZGV4IDY0M2EyMGQuLjQ5ODdhZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmgKQEAgLTExNiwyMCArMTE2LDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZW5kaWYKLQogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19TRVRNQVNLICAgICAgICAyCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCmluZGV4IDNkNjVkMjQuLjNjOWFmNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKQEAgLTc2LDcgKzc2LDcgQEAKICNkZWZpbmUgX19OUl9zaG1nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CiBfX1NZU0NBTEwoX19OUl9zaG1nZXQsIHN5c19zaG1nZXQpCiAjZGVmaW5lIF9fTlJfc2htYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotX19TWVNDQUxMKF9fTlJfc2htYXQsIHdyYXBfc3lzX3NobWF0KQorX19TWVNDQUxMKF9fTlJfc2htYXQsIHN5c19zaG1hdCkKICNkZWZpbmUgX19OUl9zaG1jdGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCiBfX1NZU0NBTEwoX19OUl9zaG1jdGwsIHN5c19zaG1jdGwpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaCBiL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAppbmRleCBkMWM3YjBlLi5hMTY1N2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIEFVVE9GU19NSU5fUFJPVE9fVkVSU0lPTgkzCiAjZGVmaW5lIEFVVE9GU19NQVhfUFJPVE9fVkVSU0lPTgk0CiAKLSNkZWZpbmUgQVVUT0ZTX1BST1RPX1NVQlZFUlNJT04gICAgICAgICA1CisjZGVmaW5lIEFVVE9GU19QUk9UT19TVUJWRVJTSU9OCQk2CiAKIC8qIE1hc2sgZm9yIGV4cGlyZSBiZWhhdmlvdXIgKi8KICNkZWZpbmUgQVVUT0ZTX0VYUF9JTU1FRElBVEUJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjMi5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MyLmgKaW5kZXggNWEzNTkxNS4uZWJlZDE3NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjMi5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjMi5oCkBAIC0yMiwzICsyMiw4IEBACiAjIGRlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18JX19hdHRyaWJ1dGVfXygocHVyZSkpCiAjIGRlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCV9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpCiAjZW5kaWYKKworLyogR0NDIDIuOTUueC8yLjk2IHJlY29nbml6ZSBfX3ZhX2NvcHksIGJ1dCBub3QgdmFfY29weS4gQWN0dWFsbHkgbGF0ZXIgR0NDJ3MKKyAqIGRlZmluZSBib3RoIHZhX2NvcHkgYW5kIF9fdmFfY29weSwgYnV0IHRoZSBsYXR0ZXIgbWF5IGdvIGF3YXksIHNvIGxpbWl0IHRoaXMKKyAqIHRvIHRoaXMgaGVhZGVyICovCisjZGVmaW5lIHZhX2NvcHkJCQlfX3ZhX2NvcHkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCA0ODc3MjVjLi5kNzM3ODIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC05MCw2ICs5MCwxMiBAQAogIyBkZWZpbmUgX19kZXByZWNhdGVkCQkvKiB1bmltcGxlbWVudGVkICovCiAjZW5kaWYKIAorI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMgX19kZXByZWNhdGVkCisjZWxzZQorI2RlZmluZSBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMKKyNlbmRpZgorCiAjaWZuZGVmIF9fbXVzdF9jaGVjawogI2RlZmluZSBfX211c3RfY2hlY2sKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCA5MTBlY2EzLi5mMjFhZjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMTAzLDYgKzEwMyw3IEBACiAjZGVmaW5lIENQVUZSRVFfUFJFQ0hBTkdFCSgwKQogI2RlZmluZSBDUFVGUkVRX1BPU1RDSEFOR0UJKDEpCiAjZGVmaW5lIENQVUZSRVFfUkVTVU1FQ0hBTkdFCSg4KQorI2RlZmluZSBDUFVGUkVRX1NVU1BFTkRDSEFOR0UJKDkpCiAKIHN0cnVjdCBjcHVmcmVxX2ZyZXFzIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwkvKiBjcHUgbnIgKi8KQEAgLTIwMCw2ICsyMDEsNyBAQAogCiAJLyogb3B0aW9uYWwgKi8KIAlpbnQJKCpleGl0KQkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKKwlpbnQJKCpzdXNwZW5kKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHUzMiBzdGF0ZSk7CiAJaW50CSgqcmVzdW1lKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOwogCXN0cnVjdCBmcmVxX2F0dHIJKiphdHRyOwogfTsKQEAgLTIxMSw3ICsyMTMsOCBAQAogI2RlZmluZSBDUFVGUkVRX0NPTlNUX0xPT1BTIAkweDAyCS8qIGxvb3BzX3Blcl9qaWZmeSBvciBvdGhlciBrZXJuZWwKIAkJCQkJICogImNvbnN0YW50cyIgYXJlbid0IGFmZmVjdGVkIGJ5CiAJCQkJCSAqIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwotCisjZGVmaW5lIENQVUZSRVFfUE1fTk9fV0FSTgkweDA0CS8qIGRvbid0IHdhcm4gb24gc3VzcGVuZC9yZXN1bWUgc3BlZWQKKwkJCQkJICogbWlzbWF0Y2hlcyAqLwogCiBpbnQgY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGNwdWZyZXFfZHJpdmVyICpkcml2ZXJfZGF0YSk7CiBpbnQgY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgKmRyaXZlcl9kYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRkLmggYi9pbmNsdWRlL2xpbnV4L2VkZC5oCmluZGV4IGM2ZTY3NDcuLjE2MjUxMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZGQuaApAQCAtMzIsNyArMzIsNyBAQAogCiAjZGVmaW5lIEVERE5SIDB4MWU5CQkvKiBhZGRyIG9mIG51bWJlciBvZiBlZGRfaW5mbyBzdHJ1Y3RzIGF0IEVEREJVRgogCQkJCSAgIGluIGJvb3RfcGFyYW1zIC0gdHJlYXQgdGhpcyBhcyAxIGJ5dGUgICovCi0jZGVmaW5lIEVEREJVRgkweDYwMAkJLyogYWRkciBvZiBlZGRfaW5mbyBzdHJ1Y3RzIGluIGJvb3RfcGFyYW1zICovCisjZGVmaW5lIEVEREJVRgkweGQwMAkJLyogYWRkciBvZiBlZGRfaW5mbyBzdHJ1Y3RzIGluIGJvb3RfcGFyYW1zICovCiAjZGVmaW5lIEVERE1BWE5SIDYJCS8qIG51bWJlciBvZiBlZGRfaW5mbyBzdHJ1Y3RzIHN0YXJ0aW5nIGF0IEVEREJVRiAgKi8KICNkZWZpbmUgRURERVhUU0laRSA4CQkvKiBjaGFuZ2UgdGhlc2UgaWYgeW91IG11Y2sgd2l0aCB0aGUgc3RydWN0dXJlcyAqLwogI2RlZmluZSBFRERQQVJNU0laRSA3NApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IGI0NWQzZTIuLmI0NjhiZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTU2Myw2ICs1NjMsOSBAQAogCWludCAoKmZiX3NldGNvbHJlZykodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCiAJCQkgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKKwkvKiBzZXQgY29sb3IgcmVnaXN0ZXJzIGluIGJhdGNoICovCisJaW50ICgqZmJfc2V0Y21hcCkoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKwogCS8qIGJsYW5rIGRpc3BsYXkgKi8KIAlpbnQgKCpmYl9ibGFuaykoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA1ZGY2ODdkLi40ZWRiYTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xMDUzLDgzICsxMDUzLDg3IEBACiBpbnQgc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiAKIC8qKgotICogJmV4cG9ydF9vcGVyYXRpb25zIC0gZm9yIG5mc2QgdG8gY29tbXVuaWNhdGUgd2l0aCBmaWxlIHN5c3RlbXMKLSAqIGRlY29kZV9maDogICAgICBkZWNvZGUgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCBhbmQgcmV0dXJuIGEgJnN0cnVjdCBkZW50cnkKLSAqIGVuY29kZV9maDogICAgICBlbmNvZGUgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCBmcm9tIGEgZGVudHJ5Ci0gKiBnZXRfbmFtZTogICAgICAgZmluZCB0aGUgbmFtZSBmb3IgYSBnaXZlbiBpbm9kZSBpbiBhIGdpdmVuIGRpcmVjdG9yeQotICogZ2V0X3BhcmVudDogICAgIGZpbmQgdGhlIHBhcmVudCBvZiBhIGdpdmVuIGRpcmVjdG9yeQotICogZ2V0X2RlbnRyeTogICAgIGZpbmQgYSBkZW50cnkgZm9yIHRoZSBpbm9kZSBnaXZlbiBhIGZpbGUgaGFuZGxlIHN1Yi1mcmFnbWVudAorICogc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIC0gZm9yIG5mc2QgdG8gY29tbXVuaWNhdGUgd2l0aCBmaWxlIHN5c3RlbXMKKyAqIEBkZWNvZGVfZmg6ICAgICAgZGVjb2RlIGEgZmlsZSBoYW5kbGUgZnJhZ21lbnQgYW5kIHJldHVybiBhICZzdHJ1Y3QgZGVudHJ5CisgKiBAZW5jb2RlX2ZoOiAgICAgIGVuY29kZSBhIGZpbGUgaGFuZGxlIGZyYWdtZW50IGZyb20gYSBkZW50cnkKKyAqIEBnZXRfbmFtZTogICAgICAgZmluZCB0aGUgbmFtZSBmb3IgYSBnaXZlbiBpbm9kZSBpbiBhIGdpdmVuIGRpcmVjdG9yeQorICogQGdldF9wYXJlbnQ6ICAgICBmaW5kIHRoZSBwYXJlbnQgb2YgYSBnaXZlbiBkaXJlY3RvcnkKKyAqIEBnZXRfZGVudHJ5OiAgICAgZmluZCBhIGRlbnRyeSBmb3IgdGhlIGlub2RlIGdpdmVuIGEgZmlsZSBoYW5kbGUgc3ViLWZyYWdtZW50CiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgICBUaGUgZXhwb3J0X29wZXJhdGlvbnMgc3RydWN0dXJlIHByb3ZpZGVzIGEgbWVhbnMgZm9yIG5mc2QgdG8gY29tbXVuaWNhdGUKICAqICAgIHdpdGggYSBwYXJ0aWN1bGFyIGV4cG9ydGVkIGZpbGUgc3lzdGVtICAtIHBhcnRpY3VsYXJseSBlbmFibGluZyBuZnNkIGFuZAogICogICAgdGhlIGZpbGVzeXN0ZW0gdG8gY28tb3BlcmF0ZSB3aGVuIGRlYWxpbmcgd2l0aCBmaWxlIGhhbmRsZXMuCiAgKgotICogICAgZXhwb3J0X29wZXJhdGlvbnMgY29udGFpbnMgdHdvIGJhc2ljIG9wZXJhdGlvbiBmb3IgZGVhbGluZyB3aXRoIGZpbGUgaGFuZGxlcywKLSAqICAgIGRlY29kZV9maCgpIGFuZCBlbmNvZGVfZmgoKSwgYW5kIGFsbG93cyBmb3Igc29tZSBvdGhlciBvcGVyYXRpb25zIHRvIGJlIGRlZmluZWQKLSAqICAgIHdoaWNoIHN0YW5kYXJkIGhlbHBlciByb3V0aW5lcyB1c2UgdG8gZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdGhlCi0gKiAgICBmaWxlc3lzdGVtLgorICogICAgZXhwb3J0X29wZXJhdGlvbnMgY29udGFpbnMgdHdvIGJhc2ljIG9wZXJhdGlvbiBmb3IgZGVhbGluZyB3aXRoIGZpbGUKKyAqICAgIGhhbmRsZXMsIGRlY29kZV9maCgpIGFuZCBlbmNvZGVfZmgoKSwgYW5kIGFsbG93cyBmb3Igc29tZSBvdGhlcgorICogICAgb3BlcmF0aW9ucyB0byBiZSBkZWZpbmVkIHdoaWNoIHN0YW5kYXJkIGhlbHBlciByb3V0aW5lcyB1c2UgdG8gZ2V0CisgKiAgICBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmaWxlc3lzdGVtLgogICoKICAqICAgIG5mc2QgZW5jb2RlcyBpbmZvcm1hdGlvbiB1c2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzeXN0ZW0gYSBmaWxlaGFuZGxlCi0gKiAgICBhcHBsaWVzIHRvIGluIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGZpbGUgaGFuZGxlLiAgVGhlIHJlbWFpbmRlciwgdGVybWVkIGEKLSAqICAgIGZpbGUgaGFuZGxlIGZyYWdtZW50LCBpcyBjb250cm9sbGVkIGNvbXBsZXRlbHkgYnkgdGhlIGZpbGVzeXN0ZW0uCi0gKiAgICBUaGUgc3RhbmRhcmQgaGVscGVyIHJvdXRpbmVzIGFzc3VtZSB0aGF0IHRoaXMgZnJhZ21lbnQgd2lsbCBjb250YWluIG9uZSBvciB0d28KLSAqICAgIHN1Yi1mcmFnbWVudHMsIG9uZSB3aGljaCBpZGVudGlmaWVzIHRoZSBmaWxlLCBhbmQgb25lIHdoaWNoIG1heSBiZSB1c2VkIHRvCi0gKiAgICBpZGVudGlmeSB0aGUgKGEpIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlLgorICogICAgYXBwbGllcyB0byBpbiB0aGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBmaWxlIGhhbmRsZS4gIFRoZSByZW1haW5kZXIsIHRlcm1lZAorICogICAgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCwgaXMgY29udHJvbGxlZCBjb21wbGV0ZWx5IGJ5IHRoZSBmaWxlc3lzdGVtLiAgVGhlCisgKiAgICBzdGFuZGFyZCBoZWxwZXIgcm91dGluZXMgYXNzdW1lIHRoYXQgdGhpcyBmcmFnbWVudCB3aWxsIGNvbnRhaW4gb25lIG9yCisgKiAgICB0d28gc3ViLWZyYWdtZW50cywgb25lIHdoaWNoIGlkZW50aWZpZXMgdGhlIGZpbGUsIGFuZCBvbmUgd2hpY2ggbWF5IGJlCisgKiAgICB1c2VkIHRvIGlkZW50aWZ5IHRoZSAoYSkgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUuCiAgKgogICogICAgSW4gc29tZSBzaXR1YXRpb25zLCBuZnNkIG5lZWRzIHRvIGdldCBhIGRlbnRyeSB3aGljaCBpcyBjb25uZWN0ZWQgaW50byBhCi0gKiAgICBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBmaWxlIHRyZWUuICBUbyBhbGxvdyBmb3IgdGhpcywgaXQgcGFzc2VzIHRoZSBmdW5jdGlvbgotICogICAgYWNjZXB0YWJsZSgpIHRvZ2V0aGVyIHdpdGggYSBAY29udGV4dCB3aGljaCBjYW4gYmUgdXNlZCB0byBzZWUgaWYgdGhlIGRlbnRyeQotICogICAgaXMgYWNjZXB0YWJsZS4gIEFzIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBkZW50cnlzIGZvciBhIGdpdmVuIGZpbGUsIHRoZSBmaWxlc3lzdGVtCi0gKiAgICBzaG91bGQgY2hlY2sgZWFjaCBvbmUgZm9yIGFjY2VwdGFiaWxpdHkgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZSBuZXh0LiAgQXMgc29vbgotICogICAgYXMgYW4gYWNjZXB0YWJsZSBvbmUgaXMgZm91bmQsIGl0IHNob3VsZCBiZSByZXR1cm5lZC4KKyAqICAgIHNwZWNpZmljIHBhcnQgb2YgdGhlIGZpbGUgdHJlZS4gIFRvIGFsbG93IGZvciB0aGlzLCBpdCBwYXNzZXMgdGhlCisgKiAgICBmdW5jdGlvbiBhY2NlcHRhYmxlKCkgdG9nZXRoZXIgd2l0aCBhIEBjb250ZXh0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlZQorICogICAgaWYgdGhlIGRlbnRyeSBpcyBhY2NlcHRhYmxlLiAgQXMgdGhlcmUgY2FuIGJlIG11bHRpcGxlIGRlbnRyeXMgZm9yIGEKKyAqICAgIGdpdmVuIGZpbGUsIHRoZSBmaWxlc3lzdGVtIHNob3VsZCBjaGVjayBlYWNoIG9uZSBmb3IgYWNjZXB0YWJpbGl0eSBiZWZvcmUKKyAqICAgIGxvb2tpbmcgZm9yIHRoZSBuZXh0LiAgQXMgc29vbiBhcyBhbiBhY2NlcHRhYmxlIG9uZSBpcyBmb3VuZCwgaXQgc2hvdWxkCisgKiAgICBiZSByZXR1cm5lZC4KICAqCiAgKiBkZWNvZGVfZmg6Ci0gKiAgICBAZGVjb2RlX2ZoIGlzIGdpdmVuIGEgJnN0cnVjdCBzdXBlcl9ibG9jayAoQHNiKSwgYSBmaWxlIGhhbmRsZSBmcmFnbWVudCAoQGZoLCBAZmhfbGVuKQotICogICAgYW5kIGFuIGFjY2VwdGFiaWxpdHkgdGVzdGluZyBmdW5jdGlvbiAoQGFjY2VwdGFibGUsIEBjb250ZXh0KS4gIEl0IHNob3VsZCByZXR1cm4KLSAqICAgIGEgJnN0cnVjdCBkZW50cnkgd2hpY2ggcmVmZXJzIHRvIHRoZSBzYW1lIGZpbGUgdGhhdCB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgcmVmZXJzCi0gKiAgICB0bywgIGFuZCB3aGljaCBwYXNzZXMgdGhlIGFjY2VwdGFiaWxpdHkgdGVzdC4gIElmIGl0IGNhbm5vdCwgaXQgc2hvdWxkIHJldHVybgotICogICAgYSAlTlVMTCBwb2ludGVyIGlmIHRoZSBmaWxlIHdhcyBmb3VuZCBidXQgbm8gYWNjZXB0YWJsZSAmZGVudHJpZXMgd2VyZSBhdmFpbGFibGUsIG9yCi0gKiAgICBhICVFUlJfUFRSIGVycm9yIGNvZGUgaW5kaWNhdGluZyB3aHkgaXQgY291bGRuJ3QgYmUgZm91bmQgKGUuZy4gJUVOT0VOVCBvciAlRU5PTUVNKS4KKyAqICAgIEBkZWNvZGVfZmggaXMgZ2l2ZW4gYSAmc3RydWN0IHN1cGVyX2Jsb2NrIChAc2IpLCBhIGZpbGUgaGFuZGxlIGZyYWdtZW50CisgKiAgICAoQGZoLCBAZmhfbGVuKSBhbmQgYW4gYWNjZXB0YWJpbGl0eSB0ZXN0aW5nIGZ1bmN0aW9uIChAYWNjZXB0YWJsZSwKKyAqICAgIEBjb250ZXh0KS4gIEl0IHNob3VsZCByZXR1cm4gYSAmc3RydWN0IGRlbnRyeSB3aGljaCByZWZlcnMgdG8gdGhlIHNhbWUKKyAqICAgIGZpbGUgdGhhdCB0aGUgZmlsZSBoYW5kbGUgZnJhZ21lbnQgcmVmZXJzIHRvLCAgYW5kIHdoaWNoIHBhc3NlcyB0aGUKKyAqICAgIGFjY2VwdGFiaWxpdHkgdGVzdC4gIElmIGl0IGNhbm5vdCwgaXQgc2hvdWxkIHJldHVybiBhICVOVUxMIHBvaW50ZXIgaWYKKyAqICAgIHRoZSBmaWxlIHdhcyBmb3VuZCBidXQgbm8gYWNjZXB0YWJsZSAmZGVudHJpZXMgd2VyZSBhdmFpbGFibGUsIG9yIGEKKyAqICAgICVFUlJfUFRSIGVycm9yIGNvZGUgaW5kaWNhdGluZyB3aHkgaXQgY291bGRuJ3QgYmUgZm91bmQgKGUuZy4gJUVOT0VOVCBvcgorICogICAgJUVOT01FTSkuCiAgKgogICogZW5jb2RlX2ZoOgotICogICAgQGVuY29kZV9maCBzaG91bGQgc3RvcmUgaW4gdGhlIGZpbGUgaGFuZGxlIGZyYWdtZW50IEBmaCAodXNpbmcgYXQgbW9zdCBAbWF4X2xlbiBieXRlcykKLSAqICAgIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgQGRlY29kZV9maCB0byByZWNvdmVyIHRoZSBmaWxlIHJlZmVyZWQgdG8gYnkgdGhlCi0gKiAgICAmc3RydWN0IGRlbnRyeSBAZGUuICBJZiB0aGUgQGNvbm5lY3RhYmxlIGZsYWcgaXMgc2V0LCB0aGUgZW5jb2RlX2ZoKCkgc2hvdWxkIHN0b3JlCi0gKiAgICBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgYSBnb29kIGF0dGVtcHQgY2FuIGJlIG1hZGUgdG8gZmluZCBub3Qgb25seQotICogICAgdGhlIGZpbGUgYnV0IGFsc28gaXQncyBwbGFjZSBpbiB0aGUgZmlsZXN5c3RlbS4gICBUaGlzIHR5cGljYWxseSBtZWFucyBzdG9yaW5nCi0gKiAgICBhIHJlZmVyZW5jZSB0byBkZS0+ZF9wYXJlbnQgaW4gdGhlIGZpbGVoYW5kbGUgZnJhZ21lbnQuCi0gKiAgICBlbmNvZGVfZmgoKSBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3RvcmVkIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQotICogICAgc3VjaCBhcyAlLUVOT1NQQworICogICAgQGVuY29kZV9maCBzaG91bGQgc3RvcmUgaW4gdGhlIGZpbGUgaGFuZGxlIGZyYWdtZW50IEBmaCAodXNpbmcgYXQgbW9zdAorICogICAgQG1heF9sZW4gYnl0ZXMpIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgQGRlY29kZV9maCB0byByZWNvdmVyIHRoZQorICogICAgZmlsZSByZWZlcmVkIHRvIGJ5IHRoZSAmc3RydWN0IGRlbnRyeSBAZGUuICBJZiB0aGUgQGNvbm5lY3RhYmxlIGZsYWcgaXMKKyAqICAgIHNldCwgdGhlIGVuY29kZV9maCgpIHNob3VsZCBzdG9yZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgYSBnb29kCisgKiAgICBhdHRlbXB0IGNhbiBiZSBtYWRlIHRvIGZpbmQgbm90IG9ubHkgdGhlIGZpbGUgYnV0IGFsc28gaXQncyBwbGFjZSBpbiB0aGUKKyAqICAgIGZpbGVzeXN0ZW0uICAgVGhpcyB0eXBpY2FsbHkgbWVhbnMgc3RvcmluZyBhIHJlZmVyZW5jZSB0byBkZS0+ZF9wYXJlbnQgaW4KKyAqICAgIHRoZSBmaWxlaGFuZGxlIGZyYWdtZW50LiAgZW5jb2RlX2ZoKCkgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiAgICBzdG9yZWQgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHN1Y2ggYXMgJS1FTk9TUEMKICAqCiAgKiBnZXRfbmFtZToKLSAqICAgIEBnZXRfbmFtZSBzaG91bGQgZmluZCBhIG5hbWUgZm9yIHRoZSBnaXZlbiBAY2hpbGQgaW4gdGhlIGdpdmVuIEBwYXJlbnQgZGlyZWN0b3J5LgotICogICAgVGhlIG5hbWUgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgQG5hbWUgKHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBpdCBpcyBhbHJlYWR5Ci0gKiAgICBwb2ludGluZyB0byBhIGEgJU5BTUVfTUFYKzEgc2l6ZWQgYnVmZmVyLiAgIGdldF9uYW1lKCkgc2hvdWxkIHJldHVybiAlMCBvbiBzdWNjZXNzLAotICogICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIGVycm9yLgotICogICAgQGdldF9uYW1lIHdpbGwgYmUgY2FsbGVkIHdpdGhvdXQgQHBhcmVudC0+aV9zZW0gaGVsZC4KKyAqICAgIEBnZXRfbmFtZSBzaG91bGQgZmluZCBhIG5hbWUgZm9yIHRoZSBnaXZlbiBAY2hpbGQgaW4gdGhlIGdpdmVuIEBwYXJlbnQKKyAqICAgIGRpcmVjdG9yeS4gIFRoZSBuYW1lIHNob3VsZCBiZSBzdG9yZWQgaW4gdGhlIEBuYW1lICh3aXRoIHRoZQorICogICAgdW5kZXJzdGFuZGluZyB0aGF0IGl0IGlzIGFscmVhZHkgcG9pbnRpbmcgdG8gYSBhICVOQU1FX01BWCsxIHNpemVkCisgKiAgICBidWZmZXIuICAgZ2V0X25hbWUoKSBzaG91bGQgcmV0dXJuICUwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICogICAgb3IgZXJyb3IuICBAZ2V0X25hbWUgd2lsbCBiZSBjYWxsZWQgd2l0aG91dCBAcGFyZW50LT5pX3NlbSBoZWxkLgogICoKICAqIGdldF9wYXJlbnQ6Ci0gKiAgICBAZ2V0X3BhcmVudCBzaG91bGQgZmluZCB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGdpdmVuIEBjaGlsZCB3aGljaCBpcyBhbHNvCi0gKiAgICBhIGRpcmVjdG9yeS4gIEluIHRoZSBldmVudCB0aGF0IGl0IGNhbm5vdCBiZSBmb3VuZCwgb3Igc3RvcmFnZSBzcGFjZSBjYW5ub3QgYmUKLSAqICAgIGFsbG9jYXRlZCwgYSAlRVJSX1BUUiBzaG91bGQgYmUgcmV0dXJuZWQuCisgKiAgICBAZ2V0X3BhcmVudCBzaG91bGQgZmluZCB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGdpdmVuIEBjaGlsZCB3aGljaAorICogICAgaXMgYWxzbyBhIGRpcmVjdG9yeS4gIEluIHRoZSBldmVudCB0aGF0IGl0IGNhbm5vdCBiZSBmb3VuZCwgb3Igc3RvcmFnZQorICogICAgc3BhY2UgY2Fubm90IGJlIGFsbG9jYXRlZCwgYSAlRVJSX1BUUiBzaG91bGQgYmUgcmV0dXJuZWQuCiAgKgogICogZ2V0X2RlbnRyeToKLSAqICAgIEdpdmVuIGEgJnN1cGVyX2Jsb2NrIChAc2IpIGFuZCBhIHBvaW50ZXIgdG8gYSBmaWxlLXN5c3RlbSBzcGVjaWZpYyBpbm9kZSBpZGVudGlmaWVyLAotICogICAgcG9zc2libHkgYW4gaW5vZGUgbnVtYmVyLCAoQGludW1wKSBnZXRfZGVudHJ5KCkgc2hvdWxkIGZpbmQgdGhlIGlkZW50aWZpZWQgaW5vZGUgYW5kCi0gKiAgICByZXR1cm4gYSBkZW50cnkgZm9yIHRoYXQgaW5vZGUuCi0gKiAgICBBbnkgc3VpdGFibGUgZGVudHJ5IGNhbiBiZSByZXR1cm5lZCBpbmNsdWRpbmcsIGlmIG5lY2Vzc2FyeSwgYSBuZXcgZGVudHJ5IGNyZWF0ZWQKLSAqICAgIHdpdGggZF9hbGxvY19yb290LiAgVGhlIGNhbGxlciBjYW4gdGhlbiBmaW5kIGFueSBvdGhlciBleHRhbnQgZGVudHJ5cyBieSBmb2xsb3dpbmcgdGhlCi0gKiAgICBkX2FsaWFzIGxpbmtzLiAgSWYgYSBuZXcgZGVudHJ5IHdhcyBjcmVhdGVkIHVzaW5nIGRfYWxsb2Nfcm9vdCwgRENBQ0hFX05GU0RfRElTQ09OTkVDVEVECi0gKiAgICBzaG91bGQgYmUgc2V0LCBhbmQgdGhlIGRlbnRyeSBzaG91bGQgYmUgZF9yZWhhc2goKWVkLgorICogICAgR2l2ZW4gYSAmc3VwZXJfYmxvY2sgKEBzYikgYW5kIGEgcG9pbnRlciB0byBhIGZpbGUtc3lzdGVtIHNwZWNpZmljIGlub2RlCisgKiAgICBpZGVudGlmaWVyLCBwb3NzaWJseSBhbiBpbm9kZSBudW1iZXIsIChAaW51bXApIGdldF9kZW50cnkoKSBzaG91bGQgZmluZAorICogICAgdGhlIGlkZW50aWZpZWQgaW5vZGUgYW5kIHJldHVybiBhIGRlbnRyeSBmb3IgdGhhdCBpbm9kZS4gIEFueSBzdWl0YWJsZQorICogICAgZGVudHJ5IGNhbiBiZSByZXR1cm5lZCBpbmNsdWRpbmcsIGlmIG5lY2Vzc2FyeSwgYSBuZXcgZGVudHJ5IGNyZWF0ZWQgd2l0aAorICogICAgZF9hbGxvY19yb290LiAgVGhlIGNhbGxlciBjYW4gdGhlbiBmaW5kIGFueSBvdGhlciBleHRhbnQgZGVudHJ5cyBieQorICogICAgZm9sbG93aW5nIHRoZSBkX2FsaWFzIGxpbmtzLiAgSWYgYSBuZXcgZGVudHJ5IHdhcyBjcmVhdGVkIHVzaW5nCisgKiAgICBkX2FsbG9jX3Jvb3QsIERDQUNIRV9ORlNEX0RJU0NPTk5FQ1RFRCBzaG91bGQgYmUgc2V0LCBhbmQgdGhlIGRlbnRyeQorICogICAgc2hvdWxkIGJlIGRfcmVoYXNoKCllZC4KICAqCi0gKiAgICBJZiB0aGUgaW5vZGUgY2Fubm90IGJlIGZvdW5kLCBlaXRoZXIgYSAlTlVMTCBwb2ludGVyIG9yIGFuICVFUlJfUFRSIGNvZGUgY2FuIGJlIHJldHVybmVkLgotICogICAgVGhlIEBpbnVtcCB3aWxsIGJlIHdoYXRldmVyIHdhcyBwYXNzZWQgdG8gbmZzZF9maW5kX2ZoX2RlbnRyeSgpIGluIGVpdGhlciB0aGUKLSAqICAgIEBvYmogb3IgQHBhcmVudCBwYXJhbWV0ZXJzLgorICogICAgSWYgdGhlIGlub2RlIGNhbm5vdCBiZSBmb3VuZCwgZWl0aGVyIGEgJU5VTEwgcG9pbnRlciBvciBhbiAlRVJSX1BUUiBjb2RlCisgKiAgICBjYW4gYmUgcmV0dXJuZWQuICBUaGUgQGludW1wIHdpbGwgYmUgd2hhdGV2ZXIgd2FzIHBhc3NlZCB0bworICogICAgbmZzZF9maW5kX2ZoX2RlbnRyeSgpIGluIGVpdGhlciB0aGUgQG9iaiBvciBAcGFyZW50IHBhcmFtZXRlcnMuCiAgKgogICogTG9ja2luZyBydWxlczoKLSAqICBnZXRfcGFyZW50IGlzIGNhbGxlZCB3aXRoIGNoaWxkLT5kX2lub2RlLT5pX3NlbSBkb3duCi0gKiAgZ2V0X25hbWUgaXMgbm90ICh3aGljaCBpcyBwb3NzaWJseSBpbmNvbnNpc3RlbnQpCisgKiAgICBnZXRfcGFyZW50IGlzIGNhbGxlZCB3aXRoIGNoaWxkLT5kX2lub2RlLT5pX3NlbSBkb3duCisgKiAgICBnZXRfbmFtZSBpcyBub3QgKHdoaWNoIGlzIHBvc3NpYmx5IGluY29uc2lzdGVudCkKICAqLwogCiBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggODQ4YTFiYS4uYWY3NDA3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zOCwxNCArMzgsMTYgQEAKICNkZWZpbmUgX19HRlBfTk9fR1JPVwkweDIwMDB1CS8qIFNsYWIgaW50ZXJuYWwgdXNhZ2UgKi8KICNkZWZpbmUgX19HRlBfQ09NUAkweDQwMDB1CS8qIEFkZCBjb21wb3VuZCBwYWdlIG1ldGFkYXRhICovCiAjZGVmaW5lIF9fR0ZQX1pFUk8JMHg4MDAwdQkvKiBSZXR1cm4gemVyb2VkIHBhZ2Ugb24gc3VjY2VzcyAqLworI2RlZmluZSBfX0dGUF9OT01FTUFMTE9DIDB4MTAwMDB1IC8qIERvbid0IHVzZSBlbWVyZ2VuY3kgcmVzZXJ2ZXMgKi8KIAotI2RlZmluZSBfX0dGUF9CSVRTX1NISUZUIDE2CS8qIFJvb20gZm9yIDE2IF9fR0ZQX0ZPTyBiaXRzICovCisjZGVmaW5lIF9fR0ZQX0JJVFNfU0hJRlQgMjAJLyogUm9vbSBmb3IgMjAgX19HRlBfRk9PIGJpdHMgKi8KICNkZWZpbmUgX19HRlBfQklUU19NQVNLICgoMSA8PCBfX0dGUF9CSVRTX1NISUZUKSAtIDEpCiAKIC8qIGlmIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBiaXRtYXNrIGhlcmUga2VybmVsIHdpbGwgY3Jhc2gsIHBlcmlvZCAqLwogI2RlZmluZSBHRlBfTEVWRUxfTUFTSyAoX19HRlBfV0FJVHxfX0dGUF9ISUdIfF9fR0ZQX0lPfF9fR0ZQX0ZTfCBcCiAJCQlfX0dGUF9DT0xEfF9fR0ZQX05PV0FSTnxfX0dGUF9SRVBFQVR8IFwKLQkJCV9fR0ZQX05PRkFJTHxfX0dGUF9OT1JFVFJZfF9fR0ZQX05PX0dST1d8X19HRlBfQ09NUCkKKwkJCV9fR0ZQX05PRkFJTHxfX0dGUF9OT1JFVFJZfF9fR0ZQX05PX0dST1d8X19HRlBfQ09NUHwgXAorCQkJX19HRlBfTk9NRU1BTExPQykKIAogI2RlZmluZSBHRlBfQVRPTUlDCShfX0dGUF9ISUdIKQogI2RlZmluZSBHRlBfTk9JTwkoX19HRlBfV0FJVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCBiNzBkZjhmLi43MjczMWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC0zMjgsNiArMzI4LDExIEBACiAjZGVmaW5lIEtFWV9CUklHSFRORVNTVVAJMjI1CiAjZGVmaW5lIEtFWV9NRURJQQkJMjI2CiAKKyNkZWZpbmUgS0VZX1NXSVRDSFZJREVPTU9ERQkyMjcKKyNkZWZpbmUgS0VZX0tCRElMTFVNVE9HR0xFCTIyOAorI2RlZmluZSBLRVlfS0JESUxMVU1ET1dOCTIyOQorI2RlZmluZSBLRVlfS0JESUxMVU1VUAkJMjMwCisKICNkZWZpbmUgS0VZX1VOS05PV04JCTI0MAogCiAjZGVmaW5lIEJUTl9NSVNDCQkweDEwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggN2MxY2JhNC4uZTI1Yjk3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMTUsMTAgKzExNSwxOSBAQAogZXh0ZXJuIGludCBrZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IHNlc3Npb25fb2ZfcGdycChpbnQgcGdycCk7CiAKKyNpZmRlZiBDT05GSUdfUFJJTlRLCiBhc21saW5rYWdlIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMCkpKTsKIGFzbWxpbmthZ2UgaW50IHByaW50ayhjb25zdCBjaGFyICogZm10LCAuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHZwcmludGsoY29uc3QgY2hhciAqcywgdmFfbGlzdCBhcmdzKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMCkpKTsKK3N0YXRpYyBpbmxpbmUgaW50IHZwcmludGsoY29uc3QgY2hhciAqcywgdmFfbGlzdCBhcmdzKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwcmludGsoY29uc3QgY2hhciAqcywgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyBpbmxpbmUgaW50IHByaW50ayhjb25zdCBjaGFyICpzLCAuLi4pIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiB1bnNpZ25lZCBsb25nIGludF9zcXJ0KHVuc2lnbmVkIGxvbmcpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggYzc0YTc0Yy4uOGIwMDdhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtNzI2LDYgKzcyNiw3IEBACiBleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiosCiAJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgcGdvZmZfdCBwZ29mZik7CiBleHRlcm4gdm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgbWF5X2V4cGFuZF92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucGFnZXMpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggNzgyM2IzNC4uZTU5MTRjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC02NCwxOSArNjQsMTkgQEAKICNkZWZpbmUgU09DS19QQVNTQ1JFRAkJMwogCiAjaWZuZGVmIEFSQ0hfSEFTX1NPQ0tFVF9UWVBFUwotLyoqIHNvY2tfdHlwZSAtIFNvY2tldCB0eXBlcwotICogCisvKioKKyAqIGVudW0gc29ja190eXBlIC0gU29ja2V0IHR5cGVzCisgKiBAU09DS19TVFJFQU06IHN0cmVhbSAoY29ubmVjdGlvbikgc29ja2V0CisgKiBAU09DS19ER1JBTTogZGF0YWdyYW0gKGNvbm4ubGVzcykgc29ja2V0CisgKiBAU09DS19SQVc6IHJhdyBzb2NrZXQKKyAqIEBTT0NLX1JETTogcmVsaWFibHktZGVsaXZlcmVkIG1lc3NhZ2UKKyAqIEBTT0NLX1NFUVBBQ0tFVDogc2VxdWVudGlhbCBwYWNrZXQgc29ja2V0CisgKiBAU09DS19QQUNLRVQ6IGxpbnV4IHNwZWNpZmljIHdheSBvZiBnZXR0aW5nIHBhY2tldHMgYXQgdGhlIGRldiBsZXZlbC4KKyAqCQkgIEZvciB3cml0aW5nIHJhcnAgYW5kIG90aGVyIHNpbWlsYXIgdGhpbmdzIG9uIHRoZSB1c2VyIGxldmVsLgorICoKICAqIFdoZW4gYWRkaW5nIHNvbWUgbmV3IHNvY2tldCB0eXBlIHBsZWFzZQogICogZ3JlcCBBUkNIX0hBU19TT0NLRVRfVFlQRSBpbmNsdWRlL2FzbS0qIC9zb2NrZXQuaCwgYXQgbGVhc3QgTUlQUwogICogb3ZlcnJpZGVzIHRoaXMgZW51bSBmb3IgYmluYXJ5IGNvbXBhdCByZWFzb25zLgotICogCi0gKiBAU09DS19TVFJFQU0gLSBzdHJlYW0gKGNvbm5lY3Rpb24pIHNvY2tldAotICogQFNPQ0tfREdSQU0gLSBkYXRhZ3JhbSAoY29ubi5sZXNzKSBzb2NrZXQKLSAqIEBTT0NLX1JBVyAtIHJhdyBzb2NrZXQKLSAqIEBTT0NLX1JETSAtIHJlbGlhYmx5LWRlbGl2ZXJlZCBtZXNzYWdlCi0gKiBAU09DS19TRVFQQUNLRVQgLSBzZXF1ZW50aWFsIHBhY2tldCBzb2NrZXQgCi0gKiBAU09DS19QQUNLRVQgLSBsaW51eCBzcGVjaWZpYyB3YXkgb2YgZ2V0dGluZyBwYWNrZXRzIGF0IHRoZSBkZXYgbGV2ZWwuCi0gKgkJICBGb3Igd3JpdGluZyByYXJwIGFuZCBvdGhlciBzaW1pbGFyIHRoaW5ncyBvbiB0aGUgdXNlciBsZXZlbC4KICAqLwogZW51bSBzb2NrX3R5cGUgewogCVNPQ0tfU1RSRUFNCT0gMSwKQEAgLTkzLDE1ICs5MywxNSBAQAogCiAvKioKICAqICBzdHJ1Y3Qgc29ja2V0IC0gZ2VuZXJhbCBCU0Qgc29ja2V0Ci0gKiAgQHN0YXRlIC0gc29ja2V0IHN0YXRlICglU1NfQ09OTkVDVEVELCBldGMpCi0gKiAgQGZsYWdzIC0gc29ja2V0IGZsYWdzICglU09DS19BU1lOQ19OT1NQQUNFLCBldGMpCi0gKiAgQG9wcyAtIHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBvcGVyYXRpb25zCi0gKiAgQGZhc3luY19saXN0IC0gQXN5bmNocm9ub3VzIHdha2UgdXAgbGlzdAotICogIEBmaWxlIC0gRmlsZSBiYWNrIHBvaW50ZXIgZm9yIGdjCi0gKiAgQHNrIC0gaW50ZXJuYWwgbmV0d29ya2luZyBwcm90b2NvbCBhZ25vc3RpYyBzb2NrZXQgcmVwcmVzZW50YXRpb24KLSAqICBAd2FpdCAtIHdhaXQgcXVldWUgZm9yIHNldmVyYWwgdXNlcwotICogIEB0eXBlIC0gc29ja2V0IHR5cGUgKCVTT0NLX1NUUkVBTSwgZXRjKQotICogIEBwYXNzY3JlZCAtIGNyZWRlbnRpYWxzICh1c2VkIG9ubHkgaW4gVW5peCBTb2NrZXRzIChha2EgUEZfTE9DQUwpKQorICogIEBzdGF0ZTogc29ja2V0IHN0YXRlICglU1NfQ09OTkVDVEVELCBldGMpCisgKiAgQGZsYWdzOiBzb2NrZXQgZmxhZ3MgKCVTT0NLX0FTWU5DX05PU1BBQ0UsIGV0YykKKyAqICBAb3BzOiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgb3BlcmF0aW9ucworICogIEBmYXN5bmNfbGlzdDogQXN5bmNocm9ub3VzIHdha2UgdXAgbGlzdAorICogIEBmaWxlOiBGaWxlIGJhY2sgcG9pbnRlciBmb3IgZ2MKKyAqICBAc2s6IGludGVybmFsIG5ldHdvcmtpbmcgcHJvdG9jb2wgYWdub3N0aWMgc29ja2V0IHJlcHJlc2VudGF0aW9uCisgKiAgQHdhaXQ6IHdhaXQgcXVldWUgZm9yIHNldmVyYWwgdXNlcworICogIEB0eXBlOiBzb2NrZXQgdHlwZSAoJVNPQ0tfU1RSRUFNLCBldGMpCisgKiAgQHBhc3NjcmVkOiBjcmVkZW50aWFscyAodXNlZCBvbmx5IGluIFVuaXggU29ja2V0cyAoYWthIFBGX0xPQ0FMKSkKICAqLwogc3RydWN0IHNvY2tldCB7CiAJc29ja2V0X3N0YXRlCQlzdGF0ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggNmI3NGZjZi4uMzlhYjhjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTEzMSw2ICsxMzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWxsb2NzdGFsbDsJLyogZGlyZWN0IHJlY2xhaW0gY2FsbHMgKi8KIAogCXVuc2lnbmVkIGxvbmcgcGdyb3RhdGVkOwkvKiBwYWdlcyByb3RhdGVkIHRvIHRhaWwgb2YgdGhlIExSVSAqLworCXVuc2lnbmVkIGxvbmcgbnJfYm91bmNlOwkvKiBwYWdlcyBmb3IgYm91bmNlIGJ1ZmZlcnMgKi8KIH07CiAKIGV4dGVybiB2b2lkIGdldF9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlX3N0YXRlICpyZXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA2YTE4OTc0Li41ZDU4MjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMjQxNSw2ICsyNDE1LDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEJMHgyN2I5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yCTB4MjdjMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMwkweDI3YzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMwCTB4MjdiMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMzEJMHgyN2JkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN181CTB4MjdjNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfNgkweDI3YzUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzcJMHgyN2M4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNGQ3NDc0My4uZmQyNzZhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtMTU3LDkgKzE1Nyw5IEBACiAvKioKICAqIHJjdV9yZWFkX2xvY2sgLSBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgogICoKLSAqIFdoZW4gc3luY2hyb25pemVfa2VybmVsKCkgaXMgaW52b2tlZCBvbiBvbmUgQ1BVIHdoaWxlIG90aGVyIENQVXMKKyAqIFdoZW4gc3luY2hyb25pemVfcmN1KCkgaXMgaW52b2tlZCBvbiBvbmUgQ1BVIHdoaWxlIG90aGVyIENQVXMKICAqIGFyZSB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgdGhlbiB0aGUKLSAqIHN5bmNocm9uaXplX2tlcm5lbCgpIGlzIGd1YXJhbnRlZWQgdG8gYmxvY2sgdW50aWwgYWZ0ZXIgYWxsIHRoZSBvdGhlcgorICogc3luY2hyb25pemVfcmN1KCkgaXMgZ3VhcmFudGVlZCB0byBibG9jayB1bnRpbCBhZnRlciBhbGwgdGhlIG90aGVyCiAgKiBDUFVzIGV4aXQgdGhlaXIgY3JpdGljYWwgc2VjdGlvbnMuICBTaW1pbGFybHksIGlmIGNhbGxfcmN1KCkgaXMgaW52b2tlZAogICogb24gb25lIENQVSB3aGlsZSBvdGhlciBDUFVzIGFyZSB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAogICogc2VjdGlvbnMsIGludm9jYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgUkNVIGNhbGxiYWNrIGlzIGRlZmVycmVkCkBAIC0yNTYsNiArMjU2LDIxIEBACiAJCQkJCQkocCkgPSAodik7IFwKIAkJCQkJfSkKIAorLyoqCisgKiBzeW5jaHJvbml6ZV9zY2hlZCAtIGJsb2NrIHVudGlsIGFsbCBDUFVzIGhhdmUgZXhpdGVkIGFueSBub24tcHJlZW1wdGl2ZQorICoga2VybmVsIGNvZGUgc2VxdWVuY2VzLgorICoKKyAqIFRoaXMgbWVhbnMgdGhhdCBhbGwgcHJlZW1wdF9kaXNhYmxlIGNvZGUgc2VxdWVuY2VzLCBpbmNsdWRpbmcgTk1JIGFuZAorICogaGFyZHdhcmUtaW50ZXJydXB0IGhhbmRsZXJzLCBpbiBwcm9ncmVzcyBvbiBlbnRyeSB3aWxsIGhhdmUgY29tcGxldGVkCisgKiBiZWZvcmUgdGhpcyBwcmltaXRpdmUgcmV0dXJucy4gIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQKKyAqIHNvZnRpcnEgaGFuZGxlcnMgd2lsbCBoYXZlIGNvbXBsZXRlZCwgc2luY2UgaW4gc29tZSBrZXJuZWxzCisgKgorICogVGhpcyBwcmltaXRpdmUgcHJvdmlkZXMgdGhlIGd1YXJhbnRlZXMgbWFkZSBieSB0aGUgKGRlcHJlY2F0ZWQpCisgKiBzeW5jaHJvbml6ZV9rZXJuZWwoKSBBUEkuICBJbiBjb250cmFzdCwgc3luY2hyb25pemVfcmN1KCkgb25seQorICogZ3VhcmFudGVlcyB0aGF0IHJjdV9yZWFkX2xvY2soKSBzZWN0aW9ucyB3aWxsIGhhdmUgY29tcGxldGVkLgorICovCisjZGVmaW5lIHN5bmNocm9uaXplX3NjaGVkKCkgc3luY2hyb25pemVfcmN1KCkKKwogZXh0ZXJuIHZvaWQgcmN1X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKIGV4dGVybiB2b2lkIHJjdV9yZXN0YXJ0X2NwdShpbnQgY3B1KTsKQEAgLTI2NSw3ICsyODAsOSBAQAogCQkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKSk7CiBleHRlcm4gdm9pZCBGQVNUQ0FMTChjYWxsX3JjdV9iaChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCiAJCQkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkpKTsKLWV4dGVybiB2b2lkIHN5bmNocm9uaXplX2tlcm5lbCh2b2lkKTsKK2V4dGVybiBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMgdm9pZCBzeW5jaHJvbml6ZV9rZXJuZWwodm9pZCk7CitleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZCk7Cit2b2lkIHN5bmNocm9uaXplX2lkbGUodm9pZCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VQREFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlYm9vdF9maXh1cHMuaCBiL2luY2x1ZGUvbGludXgvcmVib290X2ZpeHVwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGVhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JlYm9vdF9maXh1cHMuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9MSU5VWF9SRUJPT1RfRklYVVBTX0gKKyNkZWZpbmUgX0xJTlVYX1JFQk9PVF9GSVhVUFNfSAorCisjaWZkZWYgQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMKK2V4dGVybiB2b2lkIG1hY2hfcmVib290X2ZpeHVwcyh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIG1hY2hfcmVib290X2ZpeHVwcygpICgodm9pZCkoMCkpCisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU5VWF9SRUJPT1RfRklYVVBTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCmluZGV4IGE1N2U5NzMuLjJhZWY5YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaApAQCAtNSwxOCArNSwxOCBAQAogI2RlZmluZSBSRUlTRVJGU19BQ0xfVkVSU0lPTgkweDAwMDEKIAogdHlwZWRlZiBzdHJ1Y3QgewotCV9fdTE2CQllX3RhZzsKLQlfX3UxNgkJZV9wZXJtOwotCV9fdTMyCQllX2lkOworCV9fbGUxNgkJZV90YWc7CisJX19sZTE2CQllX3Blcm07CisJX19sZTMyCQllX2lkOwogfSByZWlzZXJmc19hY2xfZW50cnk7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlfX3UxNgkJZV90YWc7Ci0JX191MTYJCWVfcGVybTsKKwlfX2xlMTYJCWVfdGFnOworCV9fbGUxNgkJZV9wZXJtOwogfSByZWlzZXJmc19hY2xfZW50cnlfc2hvcnQ7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlfX3UzMgkJYV92ZXJzaW9uOworCV9fbGUzMgkJYV92ZXJzaW9uOwogfSByZWlzZXJmc19hY2xfaGVhZGVyOwogCiBzdGF0aWMgaW5saW5lIHNpemVfdCByZWlzZXJmc19hY2xfc2l6ZShpbnQgY291bnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggYmNjZmY4Yi4uMzIxNDg2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMTE0LDQ3ICsxMTQsNDcgQEAKIAogCiBzdHJ1Y3Qgam91cm5hbF9wYXJhbXMgewotICAgIF9fdTMyIGpwX2pvdXJuYWxfMXN0X2Jsb2NrOwkgICAgICAvKiB3aGVyZSBkb2VzIGpvdXJuYWwgc3RhcnQgZnJvbSBvbiBpdHMKKyAgICBfX2xlMzIganBfam91cm5hbF8xc3RfYmxvY2s7CSAgICAgIC8qIHdoZXJlIGRvZXMgam91cm5hbCBzdGFydCBmcm9tIG9uIGl0cwogCQkJCSAgICAgICAqIGRldmljZSAqLwotICAgIF9fdTMyIGpwX2pvdXJuYWxfZGV2OwkgICAgICAvKiBqb3VybmFsIGRldmljZSBzdF9yZGV2ICovCi0gICAgX191MzIganBfam91cm5hbF9zaXplOwkgICAgICAvKiBzaXplIG9mIHRoZSBqb3VybmFsICovCi0gICAgX191MzIganBfam91cm5hbF90cmFuc19tYXg7CSAgICAgIC8qIG1heCBudW1iZXIgb2YgYmxvY2tzIGluIGEgdHJhbnNhY3Rpb24uICovCi0gICAgX191MzIganBfam91cm5hbF9tYWdpYzsgCSAgICAgIC8qIHJhbmRvbSB2YWx1ZSBtYWRlIG9uIGZzIGNyZWF0aW9uICh0aGlzCisgICAgX19sZTMyIGpwX2pvdXJuYWxfZGV2OwkgICAgICAvKiBqb3VybmFsIGRldmljZSBzdF9yZGV2ICovCisgICAgX19sZTMyIGpwX2pvdXJuYWxfc2l6ZTsJICAgICAgLyogc2l6ZSBvZiB0aGUgam91cm5hbCAqLworICAgIF9fbGUzMiBqcF9qb3VybmFsX3RyYW5zX21heDsJICAgICAgLyogbWF4IG51bWJlciBvZiBibG9ja3MgaW4gYSB0cmFuc2FjdGlvbi4gKi8KKyAgICBfX2xlMzIganBfam91cm5hbF9tYWdpYzsgCSAgICAgIC8qIHJhbmRvbSB2YWx1ZSBtYWRlIG9uIGZzIGNyZWF0aW9uICh0aGlzCiAJCQkJICAgICAgICogd2FzIHNiX2pvdXJuYWxfYmxvY2tfY291bnQpICovCi0gICAgX191MzIganBfam91cm5hbF9tYXhfYmF0Y2g7CSAgICAgIC8qIG1heCBudW1iZXIgb2YgYmxvY2tzIHRvIGJhdGNoIGludG8gYQorICAgIF9fbGUzMiBqcF9qb3VybmFsX21heF9iYXRjaDsJICAgICAgLyogbWF4IG51bWJlciBvZiBibG9ja3MgdG8gYmF0Y2ggaW50byBhCiAJCQkJICAgICAgICogdHJhbnMgKi8KLSAgICBfX3UzMiBqcF9qb3VybmFsX21heF9jb21taXRfYWdlOyAgLyogaW4gc2Vjb25kcywgaG93IG9sZCBjYW4gYW4gYXN5bmMKKyAgICBfX2xlMzIganBfam91cm5hbF9tYXhfY29tbWl0X2FnZTsgIC8qIGluIHNlY29uZHMsIGhvdyBvbGQgY2FuIGFuIGFzeW5jCiAJCQkJICAgICAgICogY29tbWl0IGJlICovCi0gICAgX191MzIganBfam91cm5hbF9tYXhfdHJhbnNfYWdlOyAgIC8qIGluIHNlY29uZHMsIGhvdyBvbGQgY2FuIGEgdHJhbnNhY3Rpb24KKyAgICBfX2xlMzIganBfam91cm5hbF9tYXhfdHJhbnNfYWdlOyAgIC8qIGluIHNlY29uZHMsIGhvdyBvbGQgY2FuIGEgdHJhbnNhY3Rpb24KIAkJCQkgICAgICAgKiBiZSAqLwogfTsKIAogLyogdGhpcyBpcyB0aGUgc3VwZXIgZnJvbSAzLjUuWCwgd2hlcmUgWCA+PSAxMCAqLwogc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxCiB7Ci0gICAgX191MzIgc19ibG9ja19jb3VudDsJICAgLyogYmxvY2tzIGNvdW50ICAgICAgICAgKi8KLSAgICBfX3UzMiBzX2ZyZWVfYmxvY2tzOyAgICAgICAgICAgLyogZnJlZSBibG9ja3MgY291bnQgICAgKi8KLSAgICBfX3UzMiBzX3Jvb3RfYmxvY2s7ICAgICAgICAgICAgLyogcm9vdCBibG9jayBudW1iZXIgICAgKi8KKyAgICBfX2xlMzIgc19ibG9ja19jb3VudDsJICAgLyogYmxvY2tzIGNvdW50ICAgICAgICAgKi8KKyAgICBfX2xlMzIgc19mcmVlX2Jsb2NrczsgICAgICAgICAgIC8qIGZyZWUgYmxvY2tzIGNvdW50ICAgICovCisgICAgX19sZTMyIHNfcm9vdF9ibG9jazsgICAgICAgICAgICAvKiByb290IGJsb2NrIG51bWJlciAgICAqLwogICAgIHN0cnVjdCBqb3VybmFsX3BhcmFtcyBzX2pvdXJuYWw7Ci0gICAgX191MTYgc19ibG9ja3NpemU7ICAgICAgICAgICAgIC8qIGJsb2NrIHNpemUgKi8KLSAgICBfX3UxNiBzX29pZF9tYXhzaXplOwkgICAvKiBtYXggc2l6ZSBvZiBvYmplY3QgaWQgYXJyYXksIHNlZQorICAgIF9fbGUxNiBzX2Jsb2Nrc2l6ZTsgICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSAqLworICAgIF9fbGUxNiBzX29pZF9tYXhzaXplOwkgICAvKiBtYXggc2l6ZSBvZiBvYmplY3QgaWQgYXJyYXksIHNlZQogCQkJCSAgICAqIGdldF9vYmplY3RpZCgpIGNvbW1lbnRhcnkgICovCi0gICAgX191MTYgc19vaWRfY3Vyc2l6ZTsJICAgLyogY3VycmVudCBzaXplIG9mIG9iamVjdCBpZCBhcnJheSAqLwotICAgIF9fdTE2IHNfdW1vdW50X3N0YXRlOyAgICAgICAgICAvKiB0aGlzIGlzIHNldCB0byAxIHdoZW4gZmlsZXN5c3RlbSB3YXMKKyAgICBfX2xlMTYgc19vaWRfY3Vyc2l6ZTsJICAgLyogY3VycmVudCBzaXplIG9mIG9iamVjdCBpZCBhcnJheSAqLworICAgIF9fbGUxNiBzX3Vtb3VudF9zdGF0ZTsgICAgICAgICAgLyogdGhpcyBpcyBzZXQgdG8gMSB3aGVuIGZpbGVzeXN0ZW0gd2FzCiAJCQkJICAgICogdW1vdW50ZWQsIHRvIDIgLSB3aGVuIG5vdCAqLyAgICAKICAgICBjaGFyIHNfbWFnaWNbMTBdOyAgICAgICAgICAgICAgLyogcmVpc2VyZnMgbWFnaWMgc3RyaW5nIGluZGljYXRlcyB0aGF0CiAJCQkJICAgICogZmlsZSBzeXN0ZW0gaXMgcmVpc2VyZnM6CiAJCQkJICAgICogIlJlSXNFckZzIiBvciAiUmVJc0VyMkZzIiBvciAiUmVJc0VyM0ZzIiAqLwotICAgIF9fdTE2IHNfZnNfc3RhdGU7CSAgICAgICAgICAgLyogaXQgaXMgc2V0IHRvIHVzZWQgYnkgZnNjayB0byBtYXJrIHdoaWNoCisgICAgX19sZTE2IHNfZnNfc3RhdGU7CSAgICAgICAgICAgLyogaXQgaXMgc2V0IHRvIHVzZWQgYnkgZnNjayB0byBtYXJrIHdoaWNoCiAJCQkJICAgICogcGhhc2Ugb2YgcmVidWlsZGluZyBpcyBkb25lICovCi0gICAgX191MzIgc19oYXNoX2Z1bmN0aW9uX2NvZGU7ICAgIC8qIGluZGljYXRlLCB3aGF0IGhhc2ggZnVuY3Rpb24gaXMgYmVpbmcgdXNlCisgICAgX19sZTMyIHNfaGFzaF9mdW5jdGlvbl9jb2RlOyAgICAvKiBpbmRpY2F0ZSwgd2hhdCBoYXNoIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZQogCQkJCSAgICAqIHRvIHNvcnQgbmFtZXMgaW4gYSBkaXJlY3RvcnkqLwotICAgIF9fdTE2IHNfdHJlZV9oZWlnaHQ7ICAgICAgICAgICAvKiBoZWlnaHQgb2YgZGlzayB0cmVlICovCi0gICAgX191MTYgc19ibWFwX25yOyAgICAgICAgICAgICAgIC8qIGFtb3VudCBvZiBiaXRtYXAgYmxvY2tzIG5lZWRlZCB0byBhZGRyZXNzCisgICAgX19sZTE2IHNfdHJlZV9oZWlnaHQ7ICAgICAgICAgICAvKiBoZWlnaHQgb2YgZGlzayB0cmVlICovCisgICAgX19sZTE2IHNfYm1hcF9ucjsgICAgICAgICAgICAgICAvKiBhbW91bnQgb2YgYml0bWFwIGJsb2NrcyBuZWVkZWQgdG8gYWRkcmVzcwogCQkJCSAgICAqIGVhY2ggYmxvY2sgb2YgZmlsZSBzeXN0ZW0gKi8KLSAgICBfX3UxNiBzX3ZlcnNpb247ICAgICAgICAgICAgICAgLyogdGhpcyBmaWVsZCBpcyBvbmx5IHJlbGlhYmxlIG9uIGZpbGVzeXN0ZW0KKyAgICBfX2xlMTYgc192ZXJzaW9uOyAgICAgICAgICAgICAgIC8qIHRoaXMgZmllbGQgaXMgb25seSByZWxpYWJsZSBvbiBmaWxlc3lzdGVtCiAJCQkJICAgICogd2l0aCBub24tc3RhbmRhcmQgam91cm5hbCAqLwotICAgIF9fdTE2IHNfcmVzZXJ2ZWRfZm9yX2pvdXJuYWw7ICAvKiBzaXplIGluIGJsb2NrcyBvZiBqb3VybmFsIGFyZWEgb24gbWFpbgorICAgIF9fbGUxNiBzX3Jlc2VydmVkX2Zvcl9qb3VybmFsOyAgLyogc2l6ZSBpbiBibG9ja3Mgb2Ygam91cm5hbCBhcmVhIG9uIG1haW4KIAkJCQkgICAgKiBkZXZpY2UsIHdlIG5lZWQgdG8ga2VlcCBhZnRlcgogCQkJCSAgICAqIG1ha2luZyBmcyB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsICovCQogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwpAQCAtMTY1LDggKzE2NSw4IEBACiBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sKIHsKICAgICBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEgc192MTsKLSAgICBfX3UzMiBzX2lub2RlX2dlbmVyYXRpb247Ci0gICAgX191MzIgc19mbGFnczsgICAgICAgICAgICAgICAgICAvKiBSaWdodCBub3cgdXNlZCBvbmx5IGJ5IGlub2RlLWF0dHJpYnV0ZXMsIGlmIGVuYWJsZWQgKi8KKyAgICBfX2xlMzIgc19pbm9kZV9nZW5lcmF0aW9uOworICAgIF9fbGUzMiBzX2ZsYWdzOyAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0IG5vdyB1c2VkIG9ubHkgYnkgaW5vZGUtYXR0cmlidXRlcywgaWYgZW5hYmxlZCAqLwogICAgIHVuc2lnbmVkIGNoYXIgc191dWlkWzE2XTsgICAgICAgLyogZmlsZXN5c3RlbSB1bmlxdWUgaWRlbnRpZmllciAqLwogICAgIHVuc2lnbmVkIGNoYXIgc19sYWJlbFsxNl07ICAgICAgLyogZmlsZXN5c3RlbSB2b2x1bWUgbGFiZWwgKi8KICAgICBjaGFyIHNfdW51c2VkWzg4XSA7ICAgICAgICAgICAgIC8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCkBAIC0yMjUsNyArMjI1LDcgQEAKICNkZWZpbmUgU0JfT05ESVNLX0pPVVJOQUxfREVWSUNFKHMpIFwKICAgICAgICAgIGxlMzJfdG9fY3B1ICgoU0JfT05ESVNLX0pQKHMpLT5qcF9qb3VybmFsX2RldikpCiAjZGVmaW5lIFNCX09ORElTS19SRVNFUlZFRF9GT1JfSk9VUk5BTChzKSBcCi0gICAgICAgICBsZTMyX3RvX2NwdSAoKFNCX1YxX0RJU0tfU1VQRVJfQkxPQ0socyktPnNfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwpKQorICAgICAgICAgbGUxNl90b19jcHUgKChTQl9WMV9ESVNLX1NVUEVSX0JMT0NLKHMpLT5zX3Jlc2VydmVkX2Zvcl9qb3VybmFsKSkKIAogI2RlZmluZSBpc19ibG9ja19pbl9sb2dfb3JfcmVzZXJ2ZWRfYXJlYShzLCBibG9jaykgXAogICAgICAgICAgYmxvY2sgPj0gU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0socykgXApAQCAtMjY5LDcgKzI2OSw3IEBACiAjZGVmaW5lIFFVT1RBX0VYQ0VFREVEIC02CiAKIHR5cGVkZWYgX191MzIgYl9ibG9ja25yX3Q7Ci10eXBlZGVmIF9fdTMyIHVucF90OwordHlwZWRlZiBfX2xlMzIgdW5wX3Q7CiAKIHN0cnVjdCB1bmZtX25vZGVpbmZvIHsKICAgICB1bnBfdCB1bmZtX25vZGVudW07CkBAIC0zNzYsNzggKzM3Niw1NyBAQAogLy8gZGlyZWN0b3JpZXMgdXNlIHRoaXMga2V5IGFzIHdlbGwgYXMgb2xkIGZpbGVzCiAvLwogc3RydWN0IG9mZnNldF92MSB7Ci0gICAgX191MzIga19vZmZzZXQ7Ci0gICAgX191MzIga191bmlxdWVuZXNzOworICAgIF9fbGUzMiBrX29mZnNldDsKKyAgICBfX2xlMzIga191bmlxdWVuZXNzOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBzdHJ1Y3Qgb2Zmc2V0X3YyIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLQkgICAgLyogbGl0dGxlIGVuZGlhbiB2ZXJzaW9uICovCi0JICAgIF9fdTY0IGtfb2Zmc2V0OjYwOwotCSAgICBfX3U2NCBrX3R5cGU6IDQ7Ci0jZWxzZQotCSAgICAvKiBiaWcgZW5kaWFuIHZlcnNpb24gKi8KLQkgICAgX191NjQga190eXBlOiA0OwotCSAgICBfX3U2NCBrX29mZnNldDo2MDsKLSNlbmRpZgorCV9fbGU2NCB2OwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCi0jaWZuZGVmIF9fTElUVExFX0VORElBTgotdHlwZWRlZiB1bmlvbiB7Ci0gICAgc3RydWN0IG9mZnNldF92MiBvZmZzZXRfdjI7Ci0gICAgX191NjQgbGluZWFyOwotfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIG9mZnNldF92Ml9lc2FmZV9vdmVybGF5OwotCiBzdGF0aWMgaW5saW5lIF9fdTE2IG9mZnNldF92Ml9rX3R5cGUoIGNvbnN0IHN0cnVjdCBvZmZzZXRfdjIgKnYyICkKIHsKLSAgICBvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSB0bXAgPSAqKGNvbnN0IG9mZnNldF92Ml9lc2FmZV9vdmVybGF5ICopdjI7Ci0gICAgdG1wLmxpbmVhciA9IGxlNjRfdG9fY3B1KCB0bXAubGluZWFyICk7Ci0gICAgcmV0dXJuICh0bXAub2Zmc2V0X3YyLmtfdHlwZSA8PSBUWVBFX01BWFRZUEUpP3RtcC5vZmZzZXRfdjIua190eXBlOlRZUEVfQU5ZOworCV9fdTggdHlwZSA9IGxlNjRfdG9fY3B1KHYyLT52KSA+PiA2MDsKKwlyZXR1cm4gKHR5cGUgPD0gVFlQRV9NQVhUWVBFKT90eXBlOlRZUEVfQU5ZOwogfQogIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9vZmZzZXRfdjJfa190eXBlKCBzdHJ1Y3Qgb2Zmc2V0X3YyICp2MiwgaW50IHR5cGUgKQogewotICAgIG9mZnNldF92Ml9lc2FmZV9vdmVybGF5ICp0bXAgPSAob2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKil2MjsKLSAgICB0bXAtPmxpbmVhciA9IGxlNjRfdG9fY3B1KHRtcC0+bGluZWFyKTsKLSAgICB0bXAtPm9mZnNldF92Mi5rX3R5cGUgPSB0eXBlOwotICAgIHRtcC0+bGluZWFyID0gY3B1X3RvX2xlNjQodG1wLT5saW5lYXIpOworCXYyLT52ID0gKHYyLT52ICYgY3B1X3RvX2xlNjQofjBVTEw+PjQpKSB8IGNwdV90b19sZTY0KChfX3U2NCl0eXBlPDw2MCk7CiB9CiAgCiBzdGF0aWMgaW5saW5lIGxvZmZfdCBvZmZzZXRfdjJfa19vZmZzZXQoIGNvbnN0IHN0cnVjdCBvZmZzZXRfdjIgKnYyICkKIHsKLSAgICBvZmZzZXRfdjJfZXNhZmVfb3ZlcmxheSB0bXAgPSAqKGNvbnN0IG9mZnNldF92Ml9lc2FmZV9vdmVybGF5ICopdjI7Ci0gICAgdG1wLmxpbmVhciA9IGxlNjRfdG9fY3B1KCB0bXAubGluZWFyICk7Ci0gICAgcmV0dXJuIHRtcC5vZmZzZXRfdjIua19vZmZzZXQ7CisJcmV0dXJuIGxlNjRfdG9fY3B1KHYyLT52KSAmICh+MFVMTD4+NCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfb2Zmc2V0X3YyX2tfb2Zmc2V0KCBzdHJ1Y3Qgb2Zmc2V0X3YyICp2MiwgbG9mZl90IG9mZnNldCApewotICAgIG9mZnNldF92Ml9lc2FmZV9vdmVybGF5ICp0bXAgPSAob2Zmc2V0X3YyX2VzYWZlX292ZXJsYXkgKil2MjsKLSAgICB0bXAtPmxpbmVhciA9IGxlNjRfdG9fY3B1KHRtcC0+bGluZWFyKTsKLSAgICB0bXAtPm9mZnNldF92Mi5rX29mZnNldCA9IG9mZnNldDsKLSAgICB0bXAtPmxpbmVhciA9IGNwdV90b19sZTY0KHRtcC0+bGluZWFyKTsKKwlvZmZzZXQgJj0gKH4wVUxMPj40KTsKKwl2Mi0+diA9ICh2Mi0+diAmIGNwdV90b19sZTY0KDE1VUxMPDw2MCkpIHwgY3B1X3RvX2xlNjQob2Zmc2V0KTsKIH0KLSNlbHNlCi0jIGRlZmluZSBvZmZzZXRfdjJfa190eXBlKHYyKSAgICAgICAgICAgKCh2MiktPmtfdHlwZSkKLSMgZGVmaW5lIHNldF9vZmZzZXRfdjJfa190eXBlKHYyLHZhbCkgICAob2Zmc2V0X3YyX2tfdHlwZSh2MikgPSAodmFsKSkKLSMgZGVmaW5lIG9mZnNldF92Ml9rX29mZnNldCh2MikgICAgICAgICAoKHYyKS0+a19vZmZzZXQpCi0jIGRlZmluZSBzZXRfb2Zmc2V0X3YyX2tfb2Zmc2V0KHYyLHZhbCkgKG9mZnNldF92Ml9rX29mZnNldCh2MikgPSAodmFsKSkKLSNlbmRpZgogCiAvKiBLZXkgb2YgYW4gaXRlbSBkZXRlcm1pbmVzIGl0cyBsb2NhdGlvbiBpbiB0aGUgUyt0cmVlLCBhbmQKICAgIGlzIGNvbXBvc2VkIG9mIDQgY29tcG9uZW50cyAqLwogc3RydWN0IHJlaXNlcmZzX2tleSB7Ci0gICAgX191MzIga19kaXJfaWQ7ICAgIC8qIHBhY2tpbmcgbG9jYWxpdHk6IGJ5IGRlZmF1bHQgcGFyZW50CisgICAgX19sZTMyIGtfZGlyX2lkOyAgICAvKiBwYWNraW5nIGxvY2FsaXR5OiBieSBkZWZhdWx0IHBhcmVudAogCQkJICBkaXJlY3Rvcnkgb2JqZWN0IGlkICovCi0gICAgX191MzIga19vYmplY3RpZDsgIC8qIG9iamVjdCBpZGVudGlmaWVyICovCisgICAgX19sZTMyIGtfb2JqZWN0aWQ7ICAvKiBvYmplY3QgaWRlbnRpZmllciAqLwogICAgIHVuaW9uIHsKIAlzdHJ1Y3Qgb2Zmc2V0X3YxIGtfb2Zmc2V0X3YxOwogCXN0cnVjdCBvZmZzZXRfdjIga19vZmZzZXRfdjI7CiAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHU7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKK3N0cnVjdCBpbl9jb3JlX2tleSB7CisgICAgX191MzIga19kaXJfaWQ7ICAgIC8qIHBhY2tpbmcgbG9jYWxpdHk6IGJ5IGRlZmF1bHQgcGFyZW50CisJCQkgIGRpcmVjdG9yeSBvYmplY3QgaWQgKi8KKyAgICBfX3UzMiBrX29iamVjdGlkOyAgLyogb2JqZWN0IGlkZW50aWZpZXIgKi8KKyAgICBfX3U2NCBrX29mZnNldDsKKyAgICBfX3U4IGtfdHlwZTsKK307CiAKIHN0cnVjdCBjcHVfa2V5IHsKLSAgICBzdHJ1Y3QgcmVpc2VyZnNfa2V5IG9uX2Rpc2tfa2V5OworICAgIHN0cnVjdCBpbl9jb3JlX2tleSBvbl9kaXNrX2tleTsKICAgICBpbnQgdmVyc2lvbjsKICAgICBpbnQga2V5X2xlbmd0aDsgLyogMyBpbiBhbGwgY2FzZXMgYnV0IGRpcmVjdDJpbmRpcmVjdCBhbmQKIAkJICAgICAgIGluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uICovCkBAIC01MDgsMTUgKzQ4NywxNSBAQAogCQkgICBpdGVtLiBOb3RlIHRoYXQgdGhlIGtleSwgbm90IHRoaXMgZmllbGQsIGlzIHVzZWQgdG8KIAkJICAgZGV0ZXJtaW5lIHRoZSBpdGVtIHR5cGUsIGFuZCB0aHVzIHdoaWNoIGZpZWxkIHRoaXMKIAkJICAgdW5pb24gY29udGFpbnMuICovCi0JCV9fdTE2IGloX2ZyZWVfc3BhY2VfcmVzZXJ2ZWQ7IAorCQlfX2xlMTYgaWhfZnJlZV9zcGFjZV9yZXNlcnZlZDsKIAkJLyogSWZmIHRoaXMgaXMgYSBkaXJlY3RvcnkgaXRlbSwgdGhpcyBmaWVsZCBlcXVhbHMgdGhlCiAJCSAgIG51bWJlciBvZiBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGl0ZW0uICovCi0JCV9fdTE2IGloX2VudHJ5X2NvdW50OyAKKwkJX19sZTE2IGloX2VudHJ5X2NvdW50OwogCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB1OwotCV9fdTE2IGloX2l0ZW1fbGVuOyAgICAgICAgICAgLyogdG90YWwgc2l6ZSBvZiB0aGUgaXRlbSBib2R5ICovCi0JX191MTYgaWhfaXRlbV9sb2NhdGlvbjsgICAgICAvKiBhbiBvZmZzZXQgdG8gdGhlIGl0ZW0gYm9keQorCV9fbGUxNiBpaF9pdGVtX2xlbjsgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgdGhlIGl0ZW0gYm9keSAqLworCV9fbGUxNiBpaF9pdGVtX2xvY2F0aW9uOyAgICAgIC8qIGFuIG9mZnNldCB0byB0aGUgaXRlbSBib2R5CiAJCQkJICAgICAgKiB3aXRoaW4gdGhlIGJsb2NrICovCi0JX191MTYgaWhfdmVyc2lvbjsJICAgICAvKiAwIGZvciBhbGwgb2xkIGl0ZW1zLCAyIGZvciBuZXcKKwlfX2xlMTYgaWhfdmVyc2lvbjsJICAgICAvKiAwIGZvciBhbGwgb2xkIGl0ZW1zLCAyIGZvciBuZXcKIAkJCQkJb25lcy4gSGlnaGVzdCBiaXQgaXMgc2V0IGJ5IGZzY2sKIAkJCQkJdGVtcG9yYXJ5LCBjbGVhbmVkIGFmdGVyIGFsbAogCQkJCQlkb25lICovCkBAIC02NzAsNDMgKzY0OSwyOSBAQAogLy8KIHN0YXRpYyBpbmxpbmUgbG9mZl90IGNwdV9rZXlfa19vZmZzZXQgKGNvbnN0IHN0cnVjdCBjcHVfa2V5ICoga2V5KQogewotICAgIHJldHVybiAoa2V5LT52ZXJzaW9uID09IEtFWV9GT1JNQVRfM181KSA/Ci0gICAgICAgIGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92MS5rX29mZnNldCA6Ci0Ja2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YyLmtfb2Zmc2V0OworICAgIHJldHVybiBrZXktPm9uX2Rpc2tfa2V5Lmtfb2Zmc2V0OwogfQogCiBzdGF0aWMgaW5saW5lIGxvZmZfdCBjcHVfa2V5X2tfdHlwZSAoY29uc3Qgc3RydWN0IGNwdV9rZXkgKiBrZXkpCiB7Ci0gICAgcmV0dXJuIChrZXktPnZlcnNpb24gPT0gS0VZX0ZPUk1BVF8zXzUpID8KLSAgICAgICAgdW5pcXVlbmVzczJ0eXBlIChrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua191bmlxdWVuZXNzKSA6Ci0Ja2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YyLmtfdHlwZTsKKyAgICByZXR1cm4ga2V5LT5vbl9kaXNrX2tleS5rX3R5cGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3B1X2tleV9rX29mZnNldCAoc3RydWN0IGNwdV9rZXkgKiBrZXksIGxvZmZfdCBvZmZzZXQpCiB7Ci0gICAgKGtleS0+dmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkgPwotICAgICAgICAoa2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfb2Zmc2V0ID0gb2Zmc2V0KSA6Ci0JKGtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92Mi5rX29mZnNldCA9IG9mZnNldCk7CisJa2V5LT5vbl9kaXNrX2tleS5rX29mZnNldCA9IG9mZnNldDsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NwdV9rZXlfa190eXBlIChzdHJ1Y3QgY3B1X2tleSAqIGtleSwgaW50IHR5cGUpCiB7Ci0gICAgKGtleS0+dmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkgPwotICAgICAgICAoa2V5LT5vbl9kaXNrX2tleS51Lmtfb2Zmc2V0X3YxLmtfdW5pcXVlbmVzcyA9IHR5cGUydW5pcXVlbmVzcyAodHlwZSkpOgotCShrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjIua190eXBlID0gdHlwZSk7CisJa2V5LT5vbl9kaXNrX2tleS5rX3R5cGUgPSB0eXBlOwogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfa2V5X2tfb2Zmc2V0X2RlYyAoc3RydWN0IGNwdV9rZXkgKiBrZXkpCiB7Ci0gICAgaWYgKGtleS0+dmVyc2lvbiA9PSBLRVlfRk9STUFUXzNfNSkKLQlrZXktPm9uX2Rpc2tfa2V5LnUua19vZmZzZXRfdjEua19vZmZzZXQgLS07Ci0gICAgZWxzZQotCWtleS0+b25fZGlza19rZXkudS5rX29mZnNldF92Mi5rX29mZnNldCAtLTsKKwlrZXktPm9uX2Rpc2tfa2V5Lmtfb2Zmc2V0IC0tOwogfQogCi0KICNkZWZpbmUgaXNfZGlyZW50cnlfY3B1X2tleShrZXkpIChjcHVfa2V5X2tfdHlwZSAoa2V5KSA9PSBUWVBFX0RJUkVOVFJZKQogI2RlZmluZSBpc19kaXJlY3RfY3B1X2tleShrZXkpIChjcHVfa2V5X2tfdHlwZSAoa2V5KSA9PSBUWVBFX0RJUkVDVCkKICNkZWZpbmUgaXNfaW5kaXJlY3RfY3B1X2tleShrZXkpIChjcHVfa2V5X2tfdHlwZSAoa2V5KSA9PSBUWVBFX0lORElSRUNUKQpAQCAtNzUyLDEwICs3MTcsMTAgQEAKIC8qIEhlYWRlciBvZiBhIGRpc2sgYmxvY2suICBNb3JlIHByZWNpc2VseSwgaGVhZGVyIG9mIGEgZm9ybWF0dGVkIGxlYWYKICAgIG9yIGludGVybmFsIG5vZGUsIGFuZCBub3QgdGhlIGhlYWRlciBvZiBhbiB1bmZvcm1hdHRlZCBub2RlLiAqLwogc3RydWN0IGJsb2NrX2hlYWQgeyAgICAgICAKLSAgX191MTYgYmxrX2xldmVsOyAgICAgICAgLyogTGV2ZWwgb2YgYSBibG9jayBpbiB0aGUgdHJlZS4gKi8KLSAgX191MTYgYmxrX25yX2l0ZW07ICAgICAgLyogTnVtYmVyIG9mIGtleXMvaXRlbXMgaW4gYSBibG9jay4gKi8KLSAgX191MTYgYmxrX2ZyZWVfc3BhY2U7ICAgLyogQmxvY2sgZnJlZSBzcGFjZSBpbiBieXRlcy4gKi8KLSAgX191MTYgYmxrX3Jlc2VydmVkOworICBfX2xlMTYgYmxrX2xldmVsOyAgICAgICAgLyogTGV2ZWwgb2YgYSBibG9jayBpbiB0aGUgdHJlZS4gKi8KKyAgX19sZTE2IGJsa19ucl9pdGVtOyAgICAgIC8qIE51bWJlciBvZiBrZXlzL2l0ZW1zIGluIGEgYmxvY2suICovCisgIF9fbGUxNiBibGtfZnJlZV9zcGFjZTsgICAvKiBCbG9jayBmcmVlIHNwYWNlIGluIGJ5dGVzLiAqLworICBfX2xlMTYgYmxrX3Jlc2VydmVkOwogCQkJCS8qIGR1bXAgdGhpcyBpbiB2NC9wbGFuQSAqLwogICBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICBibGtfcmlnaHRfZGVsaW1fa2V5OyAvKiBrZXB0IG9ubHkgZm9yIGNvbXBhdGliaWxpdHkgKi8KIH07CkBAIC04MTksMTkgKzc4NCwxOSBAQAogLy8KIHN0cnVjdCBzdGF0X2RhdGFfdjEKIHsKLSAgICBfX3UxNiBzZF9tb2RlOwkvKiBmaWxlIHR5cGUsIHBlcm1pc3Npb25zICovCi0gICAgX191MTYgc2Rfbmxpbms7CS8qIG51bWJlciBvZiBoYXJkIGxpbmtzICovCi0gICAgX191MTYgc2RfdWlkOwkJLyogb3duZXIgKi8KLSAgICBfX3UxNiBzZF9naWQ7CQkvKiBncm91cCAqLwotICAgIF9fdTMyIHNkX3NpemU7CS8qIGZpbGUgc2l6ZSAqLwotICAgIF9fdTMyIHNkX2F0aW1lOwkvKiB0aW1lIG9mIGxhc3QgYWNjZXNzICovCi0gICAgX191MzIgc2RfbXRpbWU7CS8qIHRpbWUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZCAgKi8KLSAgICBfX3UzMiBzZF9jdGltZTsJLyogdGltZSBpbm9kZSAoc3RhdCBkYXRhKSB3YXMgbGFzdCBjaGFuZ2VkIChleGNlcHQgY2hhbmdlcyB0byBzZF9hdGltZSBhbmQgc2RfbXRpbWUpICovCisgICAgX19sZTE2IHNkX21vZGU7CS8qIGZpbGUgdHlwZSwgcGVybWlzc2lvbnMgKi8KKyAgICBfX2xlMTYgc2Rfbmxpbms7CS8qIG51bWJlciBvZiBoYXJkIGxpbmtzICovCisgICAgX19sZTE2IHNkX3VpZDsJCS8qIG93bmVyICovCisgICAgX19sZTE2IHNkX2dpZDsJCS8qIGdyb3VwICovCisgICAgX19sZTMyIHNkX3NpemU7CS8qIGZpbGUgc2l6ZSAqLworICAgIF9fbGUzMiBzZF9hdGltZTsJLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworICAgIF9fbGUzMiBzZF9tdGltZTsJLyogdGltZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkICAqLworICAgIF9fbGUzMiBzZF9jdGltZTsJLyogdGltZSBpbm9kZSAoc3RhdCBkYXRhKSB3YXMgbGFzdCBjaGFuZ2VkIChleGNlcHQgY2hhbmdlcyB0byBzZF9hdGltZSBhbmQgc2RfbXRpbWUpICovCiAgICAgdW5pb24gewotCV9fdTMyIHNkX3JkZXY7Ci0JX191MzIgc2RfYmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzIGZpbGUgdXNlcyAqLworCV9fbGUzMiBzZF9yZGV2OworCV9fbGUzMiBzZF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgZmlsZSB1c2VzICovCiAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHU7Ci0gICAgX191MzIgc2RfZmlyc3RfZGlyZWN0X2J5dGU7IC8qIGZpcnN0IGJ5dGUgb2YgZmlsZSB3aGljaCBpcyBzdG9yZWQKKyAgICBfX2xlMzIgc2RfZmlyc3RfZGlyZWN0X2J5dGU7IC8qIGZpcnN0IGJ5dGUgb2YgZmlsZSB3aGljaCBpcyBzdG9yZWQKIAkJCQkgICBpbiBhIGRpcmVjdCBpdGVtOiBleGNlcHQgdGhhdCBpZiBpdAogCQkJCSAgIGVxdWFscyAxIGl0IGlzIGEgc3ltbGluayBhbmQgaWYgaXQKIAkJCQkgICBlcXVhbHMgfihfX3UzMikwIHRoZXJlIGlzIG5vCkBAIC04OTcsMjAgKzg2MiwyMCBAQAogLyogU3RhdCBEYXRhIG9uIGRpc2sgKHJlaXNlcmZzIHZlcnNpb24gb2YgVUZTIGRpc2sgaW5vZGUgbWludXMgdGhlCiAgICBhZGRyZXNzIGJsb2NrcykgKi8KIHN0cnVjdCBzdGF0X2RhdGEgewotICAgIF9fdTE2IHNkX21vZGU7CS8qIGZpbGUgdHlwZSwgcGVybWlzc2lvbnMgKi8KLSAgICBfX3UxNiBzZF9hdHRyczsgICAgIC8qIHBlcnNpc3RlbnQgaW5vZGUgZmxhZ3MgKi8KLSAgICBfX3UzMiBzZF9ubGluazsJLyogbnVtYmVyIG9mIGhhcmQgbGlua3MgKi8KLSAgICBfX3U2NCBzZF9zaXplOwkvKiBmaWxlIHNpemUgKi8KLSAgICBfX3UzMiBzZF91aWQ7CQkvKiBvd25lciAqLwotICAgIF9fdTMyIHNkX2dpZDsJCS8qIGdyb3VwICovCi0gICAgX191MzIgc2RfYXRpbWU7CS8qIHRpbWUgb2YgbGFzdCBhY2Nlc3MgKi8KLSAgICBfX3UzMiBzZF9tdGltZTsJLyogdGltZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkICAqLwotICAgIF9fdTMyIHNkX2N0aW1lOwkvKiB0aW1lIGlub2RlIChzdGF0IGRhdGEpIHdhcyBsYXN0IGNoYW5nZWQgKGV4Y2VwdCBjaGFuZ2VzIHRvIHNkX2F0aW1lIGFuZCBzZF9tdGltZSkgKi8KLSAgICBfX3UzMiBzZF9ibG9ja3M7CisgICAgX19sZTE2IHNkX21vZGU7CS8qIGZpbGUgdHlwZSwgcGVybWlzc2lvbnMgKi8KKyAgICBfX2xlMTYgc2RfYXR0cnM7ICAgICAvKiBwZXJzaXN0ZW50IGlub2RlIGZsYWdzICovCisgICAgX19sZTMyIHNkX25saW5rOwkvKiBudW1iZXIgb2YgaGFyZCBsaW5rcyAqLworICAgIF9fbGU2NCBzZF9zaXplOwkvKiBmaWxlIHNpemUgKi8KKyAgICBfX2xlMzIgc2RfdWlkOwkJLyogb3duZXIgKi8KKyAgICBfX2xlMzIgc2RfZ2lkOwkJLyogZ3JvdXAgKi8KKyAgICBfX2xlMzIgc2RfYXRpbWU7CS8qIHRpbWUgb2YgbGFzdCBhY2Nlc3MgKi8KKyAgICBfX2xlMzIgc2RfbXRpbWU7CS8qIHRpbWUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZCAgKi8KKyAgICBfX2xlMzIgc2RfY3RpbWU7CS8qIHRpbWUgaW5vZGUgKHN0YXQgZGF0YSkgd2FzIGxhc3QgY2hhbmdlZCAoZXhjZXB0IGNoYW5nZXMgdG8gc2RfYXRpbWUgYW5kIHNkX210aW1lKSAqLworICAgIF9fbGUzMiBzZF9ibG9ja3M7CiAgICAgdW5pb24gewotCV9fdTMyIHNkX3JkZXY7Ci0JX191MzIgc2RfZ2VuZXJhdGlvbjsKLSAgICAgIC8vX191MzIgc2RfZmlyc3RfZGlyZWN0X2J5dGU7IAorCV9fbGUzMiBzZF9yZGV2OworCV9fbGUzMiBzZF9nZW5lcmF0aW9uOworICAgICAgLy9fX2xlMzIgc2RfZmlyc3RfZGlyZWN0X2J5dGU7CiAgICAgICAvKiBmaXJzdCBieXRlIG9mIGZpbGUgd2hpY2ggaXMgc3RvcmVkIGluIGEKIAkJCQkgICAgICAgZGlyZWN0IGl0ZW06IGV4Y2VwdCB0aGF0IGlmIGl0IGVxdWFscyAxCiAJCQkJICAgICAgIGl0IGlzIGEgc3ltbGluayBhbmQgaWYgaXQgZXF1YWxzCkBAIC05OTMsMTIgKzk1OCwxMiBAQAogCiBzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZAogewotICBfX3UzMiBkZWhfb2Zmc2V0OwkJLyogdGhpcmQgY29tcG9uZW50IG9mIHRoZSBkaXJlY3RvcnkgZW50cnkga2V5ICovCi0gIF9fdTMyIGRlaF9kaXJfaWQ7CQkvKiBvYmplY3RpZCBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgb2JqZWN0LCB0aGF0IGlzIHJlZmVyZW5jZWQKKyAgX19sZTMyIGRlaF9vZmZzZXQ7CQkvKiB0aGlyZCBjb21wb25lbnQgb2YgdGhlIGRpcmVjdG9yeSBlbnRyeSBrZXkgKi8KKyAgX19sZTMyIGRlaF9kaXJfaWQ7CQkvKiBvYmplY3RpZCBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgb2JqZWN0LCB0aGF0IGlzIHJlZmVyZW5jZWQKIAkJCQkJICAgYnkgZGlyZWN0b3J5IGVudHJ5ICovCi0gIF9fdTMyIGRlaF9vYmplY3RpZDsJCS8qIG9iamVjdGlkIG9mIHRoZSBvYmplY3QsIHRoYXQgaXMgcmVmZXJlbmNlZCBieSBkaXJlY3RvcnkgZW50cnkgKi8KLSAgX191MTYgZGVoX2xvY2F0aW9uOwkJLyogb2Zmc2V0IG9mIG5hbWUgaW4gdGhlIHdob2xlIGl0ZW0gKi8KLSAgX191MTYgZGVoX3N0YXRlOwkJLyogd2hldGhlciAxKSBlbnRyeSBjb250YWlucyBzdGF0IGRhdGEgKGZvciBmdXR1cmUpLCBhbmQgMikgd2hldGhlcgorICBfX2xlMzIgZGVoX29iamVjdGlkOwkJLyogb2JqZWN0aWQgb2YgdGhlIG9iamVjdCwgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IGRpcmVjdG9yeSBlbnRyeSAqLworICBfX2xlMTYgZGVoX2xvY2F0aW9uOwkJLyogb2Zmc2V0IG9mIG5hbWUgaW4gdGhlIHdob2xlIGl0ZW0gKi8KKyAgX19sZTE2IGRlaF9zdGF0ZTsJCS8qIHdoZXRoZXIgMSkgZW50cnkgY29udGFpbnMgc3RhdCBkYXRhIChmb3IgZnV0dXJlKSwgYW5kIDIpIHdoZXRoZXIKIAkJCQkJICAgZW50cnkgaXMgaGlkZGVuICh1bmxpbmtlZCkgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKICNkZWZpbmUgREVIX1NJWkUgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2RlX2hlYWQpCkBAIC0xMDU4LDEwICsxMDIzLDEwIEBACiAjZGVmaW5lIGRlX3Zpc2libGUoZGVoKQkgICAgCSAgICB0ZXN0X2JpdF91bmFsaWduZWQgKERFSF9WaXNpYmxlLCAmKChkZWgpLT5kZWhfc3RhdGUpKQogI2RlZmluZSBkZV9oaWRkZW4oZGVoKQkgICAgCSAgICAhdGVzdF9iaXRfdW5hbGlnbmVkIChERUhfVmlzaWJsZSwgJigoZGVoKS0+ZGVoX3N0YXRlKSkKIAotZXh0ZXJuIHZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbV92MSAoY2hhciAqIGJvZHksIF9fdTMyIGRpcmlkLCBfX3UzMiBvYmppZCwKLQkJCQkgICAgX191MzIgcGFyX2RpcmlkLCBfX3UzMiBwYXJfb2JqaWQpOwotZXh0ZXJuIHZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbSAoY2hhciAqIGJvZHksIF9fdTMyIGRpcmlkLCBfX3UzMiBvYmppZCwKLQkJCQkgX191MzIgcGFyX2RpcmlkLCBfX3UzMiBwYXJfb2JqaWQpOworZXh0ZXJuIHZvaWQgbWFrZV9lbXB0eV9kaXJfaXRlbV92MSAoY2hhciAqIGJvZHksIF9fbGUzMiBkaXJpZCwgX19sZTMyIG9iamlkLAorCQkJCSAgICBfX2xlMzIgcGFyX2RpcmlkLCBfX2xlMzIgcGFyX29iamlkKTsKK2V4dGVybiB2b2lkIG1ha2VfZW1wdHlfZGlyX2l0ZW0gKGNoYXIgKiBib2R5LCBfX2xlMzIgZGlyaWQsIF9fbGUzMiBvYmppZCwKKwkJCQkgX19sZTMyIHBhcl9kaXJpZCwgX19sZTMyIHBhcl9vYmppZCk7CiAKIC8qIGFycmF5IG9mIHRoZSBlbnRyeSBoZWFkZXJzICovCiAgLyogZ2V0IGl0ZW0gYm9keSAqLwpAQCAtMTE2MCw5ICsxMTI1LDkgQEAKIC8qIERpc2sgY2hpbGQgcG9pbnRlcjogVGhlIHBvaW50ZXIgZnJvbSBhbiBpbnRlcm5hbCBub2RlIG9mIHRoZSB0cmVlCiAgICB0byBhIG5vZGUgdGhhdCBpcyBvbiBkaXNrLiAqLwogc3RydWN0IGRpc2tfY2hpbGQgewotICBfX3UzMiAgICAgICBkY19ibG9ja19udW1iZXI7ICAgICAgICAgICAgICAvKiBEaXNrIGNoaWxkJ3MgYmxvY2sgbnVtYmVyLiAqLwotICBfX3UxNiAgICAgICBkY19zaXplOwkJICAgICAgICAgICAgLyogRGlzayBjaGlsZCdzIHVzZWQgc3BhY2UuICAgKi8KLSAgX191MTYgICAgICAgZGNfcmVzZXJ2ZWQ7CisgIF9fbGUzMiAgICAgICBkY19ibG9ja19udW1iZXI7ICAgICAgICAgICAgICAvKiBEaXNrIGNoaWxkJ3MgYmxvY2sgbnVtYmVyLiAqLworICBfX2xlMTYgICAgICAgZGNfc2l6ZTsJCSAgICAgICAgICAgIC8qIERpc2sgY2hpbGQncyB1c2VkIHNwYWNlLiAgICovCisgIF9fbGUxNiAgICAgICBkY19yZXNlcnZlZDsKIH07CiAKICNkZWZpbmUgRENfU0laRSAoc2l6ZW9mKHN0cnVjdCBkaXNrX2NoaWxkKSkKQEAgLTE0NzYsNyArMTQ0MSw3IEBACiAgIGludCBmc19nZW47ICAgICAgICAgICAgICAgICAgLyogc2F2ZWQgdmFsdWUgb2YgYHJlaXNlcmZzX2dlbmVyYXRpb24nIGNvdW50ZXIKIAkJCSAgICAgICAgICBzZWUgRklMRVNZU1RFTV9DSEFOR0VEKCkgbWFjcm8gaW4gcmVpc2VyZnNfZnMuaCAqLwogI2lmZGVmIERJU1BMQUNFX05FV19QQUNLSU5HX0xPQ0FMSVRJRVMKLSAgc3RydWN0IHJlaXNlcmZzX2tleSAga2V5OwkgICAgICAvKiBrZXkgcG9pbnRlciwgdG8gcGFzcyB0byBibG9jayBhbGxvY2F0b3Igb3IKKyAgc3RydWN0IGluX2NvcmVfa2V5ICBrZXk7CSAgICAgIC8qIGtleSBwb2ludGVyLCB0byBwYXNzIHRvIGJsb2NrIGFsbG9jYXRvciBvcgogCQkJCSBhbm90aGVyIGxvdy1sZXZlbCBzdWJzeXN0ZW0gKi8KICNlbmRpZgogfSA7CkBAIC0xNjMwLDEwICsxNTk1LDEwIEBACiAKIC8qIGZpcnN0IGJsb2NrIHdyaXR0ZW4gaW4gYSBjb21taXQuICAqLwogc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyB7Ci0gIF9fdTMyIGpfdHJhbnNfaWQgOwkJCS8qIGlkIG9mIGNvbW1pdCAqLwotICBfX3UzMiBqX2xlbiA7CQkJLyogbGVuZ3RoIG9mIGNvbW1pdC4gbGVuICsxIGlzIHRoZSBjb21taXQgYmxvY2sgKi8KLSAgX191MzIgal9tb3VudF9pZCA7CQkJCS8qIG1vdW50IGlkIG9mIHRoaXMgdHJhbnMqLwotICBfX3UzMiBqX3JlYWxibG9ja1sxXSA7IC8qIHJlYWwgbG9jYXRpb25zIGZvciBlYWNoIGJsb2NrICovCisgIF9fbGUzMiBqX3RyYW5zX2lkIDsJCQkvKiBpZCBvZiBjb21taXQgKi8KKyAgX19sZTMyIGpfbGVuIDsJCQkvKiBsZW5ndGggb2YgY29tbWl0LiBsZW4gKzEgaXMgdGhlIGNvbW1pdCBibG9jayAqLworICBfX2xlMzIgal9tb3VudF9pZCA7CQkJCS8qIG1vdW50IGlkIG9mIHRoaXMgdHJhbnMqLworICBfX2xlMzIgal9yZWFsYmxvY2tbMV0gOyAvKiByZWFsIGxvY2F0aW9ucyBmb3IgZWFjaCBibG9jayAqLwogfSA7CiAKICNkZWZpbmUgZ2V0X2Rlc2NfdHJhbnNfaWQoZCkgICBsZTMyX3RvX2NwdSgoZCktPmpfdHJhbnNfaWQpCkBAIC0xNjQ2LDkgKzE2MTEsOSBAQAogCiAvKiBsYXN0IGJsb2NrIHdyaXR0ZW4gaW4gYSBjb21taXQgKi8KIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCB7Ci0gIF9fdTMyIGpfdHJhbnNfaWQgOwkJCS8qIG11c3QgbWF0Y2ggal90cmFuc19pZCBmcm9tIHRoZSBkZXNjIGJsb2NrICovCi0gIF9fdTMyIGpfbGVuIDsJCQkvKiBkaXR0byAqLwotICBfX3UzMiBqX3JlYWxibG9ja1sxXSA7IC8qIHJlYWwgbG9jYXRpb25zIGZvciBlYWNoIGJsb2NrICovCisgIF9fbGUzMiBqX3RyYW5zX2lkIDsJCQkvKiBtdXN0IG1hdGNoIGpfdHJhbnNfaWQgZnJvbSB0aGUgZGVzYyBibG9jayAqLworICBfX2xlMzIgal9sZW4gOwkJCS8qIGRpdHRvICovCisgIF9fbGUzMiBqX3JlYWxibG9ja1sxXSA7IC8qIHJlYWwgbG9jYXRpb25zIGZvciBlYWNoIGJsb2NrICovCiB9IDsKIAogI2RlZmluZSBnZXRfY29tbWl0X3RyYW5zX2lkKGMpIGxlMzJfdG9fY3B1KChjKS0+al90cmFuc19pZCkKQEAgLTE2NjMsOSArMTYyOCw5IEBACiAqKiBhbmQgdGhpcyB0cmFuc2FjdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlcGxheWVkLgogKi8KIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciB7Ci0gIF9fdTMyIGpfbGFzdF9mbHVzaF90cmFuc19pZCA7CQkvKiBpZCBvZiBsYXN0IGZ1bGx5IGZsdXNoZWQgdHJhbnNhY3Rpb24gKi8KLSAgX191MzIgal9maXJzdF91bmZsdXNoZWRfb2Zmc2V0IDsgICAgICAvKiBvZmZzZXQgaW4gdGhlIGxvZyBvZiB3aGVyZSB0byBzdGFydCByZXBsYXkgYWZ0ZXIgYSBjcmFzaCAqLwotICBfX3UzMiBqX21vdW50X2lkIDsKKyAgX19sZTMyIGpfbGFzdF9mbHVzaF90cmFuc19pZCA7CQkvKiBpZCBvZiBsYXN0IGZ1bGx5IGZsdXNoZWQgdHJhbnNhY3Rpb24gKi8KKyAgX19sZTMyIGpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA7ICAgICAgLyogb2Zmc2V0IGluIHRoZSBsb2cgb2Ygd2hlcmUgdG8gc3RhcnQgcmVwbGF5IGFmdGVyIGEgY3Jhc2ggKi8KKyAgX19sZTMyIGpfbW91bnRfaWQgOwogICAvKiAxMiAqLyBzdHJ1Y3Qgam91cm5hbF9wYXJhbXMgamhfam91cm5hbDsKIH0gOwogCkBAIC0yMTE3LDcgKzIwODIsNyBAQAogIHN0cnVjdCBfX3JlaXNlcmZzX2Jsb2NrbnJfaGludCB7CiAgICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlOwkJLyogaW5vZGUgcGFzc2VkIHRvIGFsbG9jYXRvciwgaWYgd2UgYWxsb2NhdGUgdW5mLiBub2RlcyAqLwogICAgICBsb25nIGJsb2NrOwkJCS8qIGZpbGUgb2Zmc2V0LCBpbiBibG9ja3MgKi8KLSAgICAgc3RydWN0IHJlaXNlcmZzX2tleSBrZXk7CisgICAgIHN0cnVjdCBpbl9jb3JlX2tleSBrZXk7CiAgICAgIHN0cnVjdCBwYXRoICogcGF0aDsJCS8qIHNlYXJjaCBwYXRoLCB1c2VkIGJ5IGFsbG9jYXRvciB0byBkZXRlcm5pbmUgc2VhcmNoX3N0YXJ0IGJ5CiAJCQkJCSAqIHZhcmlvdXMgd2F5cyAqLwogICAgICBzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICogdGg7IC8qIHRyYW5zYWN0aW9uIGhhbmRsZSBpcyBuZWVkZWQgdG8gbG9nIHN1cGVyIGJsb2NrcyBhbmQKQEAgLTIxNDQsNyArMjEwOSw3IEBACiAgKiB0byB1c2UgZm9yIGEgbmV3IG9iamVjdCB1bmRlcm5lYXQgaXQuICBUaGUgbG9jYWxpdHkgaXMgcmV0dXJuZWQKICAqIGluIGRpc2sgYnl0ZSBvcmRlciAobGUpLgogICovCi11MzIgcmVpc2VyZnNfY2hvb3NlX3BhY2tpbmcoc3RydWN0IGlub2RlICpkaXIpOworX19sZTMyIHJlaXNlcmZzX2Nob29zZV9wYWNraW5nKHN0cnVjdCBpbm9kZSAqZGlyKTsKIAogaW50IGlzX3JldXNhYmxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzLCBiX2Jsb2NrbnJfdCBibG9jaywgaW50IGJpdF92YWx1ZSk7CiB2b2lkIHJlaXNlcmZzX2ZyZWVfYmxvY2sgKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKiwgYl9ibG9ja25yX3QsIGludCBmb3JfdW5mb3JtYXR0ZWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCmluZGV4IDFlYWE0OGUuLjkyNDRjNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKQEAgLTEwLDggKzEwLDggQEAKICNkZWZpbmUgUkVJU0VSRlNfWEFUVFJfTUFHSUMgMHg1MjQ2NTg0MSAvKiAiUkZYQSIgKi8KIAogc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hlYWRlciB7Ci0gICAgX191MzIgaF9tYWdpYzsgICAgICAgICAgICAgIC8qIG1hZ2ljIG51bWJlciBmb3IgaWRlbnRpZmljYXRpb24gKi8KLSAgICBfX3UzMiBoX2hhc2g7ICAgICAgICAgICAgICAgLyogaGFzaCBvZiB0aGUgdmFsdWUgKi8KKyAgICBfX2xlMzIgaF9tYWdpYzsgICAgICAgICAgICAgIC8qIG1hZ2ljIG51bWJlciBmb3IgaWRlbnRpZmljYXRpb24gKi8KKyAgICBfX2xlMzIgaF9oYXNoOyAgICAgICAgICAgICAgIC8qIGhhc2ggb2YgdGhlIHZhbHVlICovCiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDFjY2VkOTcuLjVmODY4YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTg0NSw2ICs4NDUsNyBAQAogZXh0ZXJuIHZvaWQgc2V0X3VzZXJfbmljZSh0YXNrX3QgKnAsIGxvbmcgbmljZSk7CiBleHRlcm4gaW50IHRhc2tfcHJpbyhjb25zdCB0YXNrX3QgKnApOwogZXh0ZXJuIGludCB0YXNrX25pY2UoY29uc3QgdGFza190ICpwKTsKK2V4dGVybiBpbnQgY2FuX25pY2UoY29uc3QgdGFza190ICpwLCBjb25zdCBpbnQgbmljZSk7CiBleHRlcm4gaW50IHRhc2tfY3Vycihjb25zdCB0YXNrX3QgKnApOwogZXh0ZXJuIGludCBpZGxlX2NwdShpbnQgY3B1KTsKIGV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKQEAgLTEwMTEsNyArMTAxMiw2IEBACiBleHRlcm4gdm9pZCBmbHVzaF90aHJlYWQodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3RocmVhZCh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGV4aXRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIF9fZXhpdF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKaW5kZXggOTljOTdhZC4uMGE5OGY1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCkBAIC05LDYgKzksMTcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCisgKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgorICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCisgKi8KKyNkZWZpbmUgU0FfUFJPQkUJCVNBX09ORVNIT1QKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCisjZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCisKKy8qCiAgKiBSZWFsIFRpbWUgc2lnbmFscyBtYXkgYmUgcXVldWVkLgogICovCiAKQEAgLTIwOSw2ICsyMjAsMTIgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2lnLT5saXN0KTsKIH0KIAorLyogVGVzdCBpZiAnc2lnJyBpcyB2YWxpZCBzaWduYWwuIFVzZSB0aGlzIGluc3RlYWQgb2YgdGVzdGluZyBfTlNJRyBkaXJlY3RseSAqLworc3RhdGljIGlubGluZSBpbnQgdmFsaWRfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnKQoreworCXJldHVybiBzaWcgPD0gX05TSUcgPyAxIDogMDsKK30KKwogZXh0ZXJuIGludCBncm91cF9zZW5kX3NpZ19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIGludCBfX2dyb3VwX3NlbmRfc2lnX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gbG9uZyBkb19zaWdwZW5kaW5nKHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJiNzAxOC4uY2MwNGY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xNjcsMTMgKzE2NywxNCBAQAogICoJQGg6IFRyYW5zcG9ydCBsYXllciBoZWFkZXIKICAqCUBuaDogTmV0d29yayBsYXllciBoZWFkZXIKICAqCUBtYWM6IExpbmsgbGF5ZXIgaGVhZGVyCi0gKglAZHN0OiBGSVhNRTogRGVzY3JpYmUgdGhpcyBmaWVsZAorICoJQGRzdDogZGVzdGluYXRpb24gZW50cnkKKyAqCUBzcDogdGhlIHNlY3VyaXR5IHBhdGgsIHVzZWQgZm9yIHhmcm0KICAqCUBjYjogQ29udHJvbCBidWZmZXIuIEZyZWUgZm9yIHVzZSBieSBldmVyeSBsYXllci4gUHV0IHByaXZhdGUgdmFycyBoZXJlCiAgKglAbGVuOiBMZW5ndGggb2YgYWN0dWFsIGRhdGEKICAqCUBkYXRhX2xlbjogRGF0YSBsZW5ndGgKICAqCUBtYWNfbGVuOiBMZW5ndGggb2YgbGluayBsYXllciBoZWFkZXIKICAqCUBjc3VtOiBDaGVja3N1bQotICoJQF9fdW51c2VkOiBEZWFkIGZpZWxkLCBtYXkgYmUgcmV1c2VkCisgKglAbG9jYWxfZGY6IGFsbG93IGxvY2FsIGZyYWdtZW50YXRpb24KICAqCUBjbG9uZWQ6IEhlYWQgbWF5IGJlIGNsb25lZCAoY2hlY2sgcmVmY250IHRvIGJlIHN1cmUpCiAgKglAbm9oZHI6IFBheWxvYWQgcmVmZXJlbmNlIG9ubHksIG11c3Qgbm90IG1vZGlmeSBoZWFkZXIKICAqCUBwa3RfdHlwZTogUGFja2V0IGNsYXNzCkBAIC05NjgsNiArOTY5LDcgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiB9CiAKKyNpZm5kZWYgQ09ORklHX0hBVkVfQVJDSF9ERVZfQUxMT0NfU0tCCiAvKioKICAqCV9fZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igc2VuZGluZwogICoJQGxlbmd0aDogbGVuZ3RoIHRvIGFsbG9jYXRlCkBAIC05ODAsNyArOTgyLDYgQEAKICAqCiAgKgklTlVMTCBpcyByZXR1cm5lZCBpbiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4KICAqLwotI2lmbmRlZiBDT05GSUdfSEFWRV9BUkNIX0RFVl9BTExPQ19TS0IKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fZGV2X2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkgICAgICBpbnQgZ2ZwX21hc2spCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDNlM2MzYWIuLjdkNjYzODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC02MiwxNiArNjIsOSBAQAogZXh0ZXJuIGludCBrbWVtX2NhY2hlX2Rlc3Ryb3koa21lbV9jYWNoZV90ICopOwogZXh0ZXJuIGludCBrbWVtX2NhY2hlX3NocmluayhrbWVtX2NhY2hlX3QgKik7CiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLSNpZmRlZiBDT05GSUdfTlVNQQotZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShrbWVtX2NhY2hlX3QgKiwgaW50KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShrbWVtX2NhY2hlX3QgKmNhY2hlcCwgaW50IG5vZGUpCi17Ci0JcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoY2FjaGVwLCBHRlBfS0VSTkVMKTsKLX0KLSNlbmRpZgogZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfdCAqLCB2b2lkICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoa21lbV9jYWNoZV90ICopOworZXh0ZXJuIGttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpOwogCiAvKiBTaXplIGRlc2NyaXB0aW9uIHN0cnVjdCBmb3IgZ2VuZXJhbCBjYWNoZXMuICovCiBzdHJ1Y3QgY2FjaGVfc2l6ZXMgewpAQCAtMTA5LDYgKzEwMiwyMCBAQAogZXh0ZXJuIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQga3NpemUoY29uc3Qgdm9pZCAqKTsKIAorI2lmZGVmIENPTkZJR19OVU1BCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqLCBpbnQgZmxhZ3MsIGludCBub2RlKTsKK2V4dGVybiB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IG5vZGUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW1fY2FjaGVfdCAqY2FjaGVwLCBpbnQgZmxhZ3MsIGludCBub2RlKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworfQorc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IG5vZGUpCit7CisJcmV0dXJuIGttYWxsb2Moc2l6ZSwgZmxhZ3MpOworfQorI2VuZGlmCisKIGV4dGVybiBpbnQgRkFTVENBTEwoa21lbV9jYWNoZV9yZWFwKGludCkpOwogZXh0ZXJuIGludCBGQVNUQ0FMTChrbWVtX3B0cl92YWxpZGF0ZShrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdm9pZCAqcHRyKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA3NTdjZDliLi5jMzlmNmY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC00NTYsOCArNDU2LDcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2VtdGltZWRvcChpbnQgc2VtaWQsIHN0cnVjdCBzZW1idWYgX191c2VyICpzb3BzLAogCQkJCXVuc2lnbmVkIG5zb3BzLAogCQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnRpbWVvdXQpOwotYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLAotCQkJCWludCBzaG1mbGcsIHVuc2lnbmVkIGxvbmcgX191c2VyICphZGRyKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwgaW50IHNobWZsZyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3NobWdldChrZXlfdCBrZXksIHNpemVfdCBzaXplLCBpbnQgZmxhZyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3NobWR0KGNoYXIgX191c2VyICpzaG1hZGRyKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2htY3RsKGludCBzaG1pZCwgaW50IGNtZCwgc3RydWN0IHNobWlkX2RzIF9fdXNlciAqYnVmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBiZTgxY2FiLi5jYzRjOTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC05MCwxNyArOTAsMTcgQEAKIHN0cnVjdCBzb2NrOwogCiAvKioKLSAgKglzdHJ1Y3Qgc29ja19jb21tb24gLSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cwotICAqCUBza2NfZmFtaWx5IC0gbmV0d29yayBhZGRyZXNzIGZhbWlseQotICAqCUBza2Nfc3RhdGUgLSBDb25uZWN0aW9uIHN0YXRlCi0gICoJQHNrY19yZXVzZSAtICVTT19SRVVTRUFERFIgc2V0dGluZwotICAqCUBza2NfYm91bmRfZGV2X2lmIC0gYm91bmQgZGV2aWNlIGluZGV4IGlmICE9IDAKLSAgKglAc2tjX25vZGUgLSBtYWluIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCi0gICoJQHNrY19iaW5kX25vZGUgLSBiaW5kIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCi0gICoJQHNrY19yZWZjbnQgLSByZWZlcmVuY2UgY291bnQKLSAgKgotICAqCVRoaXMgaXMgdGhlIG1pbmltYWwgbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzLCB0aGUgaGVhZGVyCi0gICoJZm9yIHN0cnVjdCBzb2NrIGFuZCBzdHJ1Y3QgdGNwX3R3X2J1Y2tldC4KKyAqCXN0cnVjdCBzb2NrX2NvbW1vbiAtIG1pbmltYWwgbmV0d29yayBsYXllciByZXByZXNlbnRhdGlvbiBvZiBzb2NrZXRzCisgKglAc2tjX2ZhbWlseTogbmV0d29yayBhZGRyZXNzIGZhbWlseQorICoJQHNrY19zdGF0ZTogQ29ubmVjdGlvbiBzdGF0ZQorICoJQHNrY19yZXVzZTogJVNPX1JFVVNFQUREUiBzZXR0aW5nCisgKglAc2tjX2JvdW5kX2Rldl9pZjogYm91bmQgZGV2aWNlIGluZGV4IGlmICE9IDAKKyAqCUBza2Nfbm9kZTogbWFpbiBoYXNoIGxpbmthZ2UgZm9yIHZhcmlvdXMgcHJvdG9jb2wgbG9va3VwIHRhYmxlcworICoJQHNrY19iaW5kX25vZGU6IGJpbmQgaGFzaCBsaW5rYWdlIGZvciB2YXJpb3VzIHByb3RvY29sIGxvb2t1cCB0YWJsZXMKKyAqCUBza2NfcmVmY250OiByZWZlcmVuY2UgY291bnQKKyAqCisgKglUaGlzIGlzIHRoZSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cywgdGhlIGhlYWRlcgorICoJZm9yIHN0cnVjdCBzb2NrIGFuZCBzdHJ1Y3QgdGNwX3R3X2J1Y2tldC4KICAgKi8KIHN0cnVjdCBzb2NrX2NvbW1vbiB7CiAJdW5zaWduZWQgc2hvcnQJCXNrY19mYW1pbHk7CkBAIC0xMTQsNjAgKzExNCw2MSBAQAogCiAvKioKICAgKglzdHJ1Y3Qgc29jayAtIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cwotICAqCUBfX3NrX2NvbW1vbiAtIHNoYXJlZCBsYXlvdXQgd2l0aCB0Y3BfdHdfYnVja2V0Ci0gICoJQHNrX3NodXRkb3duIC0gbWFzayBvZiAlU0VORF9TSFVURE9XTiBhbmQvb3IgJVJDVl9TSFVURE9XTgotICAqCUBza191c2VybG9ja3MgLSAlU09fU05EQlVGIGFuZCAlU09fUkNWQlVGIHNldHRpbmdzCi0gICoJQHNrX2xvY2sgLQlzeW5jaHJvbml6ZXIKLSAgKglAc2tfcmN2YnVmIC0gc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciBpbiBieXRlcwotICAqCUBza19zbGVlcCAtIHNvY2sgd2FpdCBxdWV1ZQotICAqCUBza19kc3RfY2FjaGUgLSBkZXN0aW5hdGlvbiBjYWNoZQotICAqCUBza19kc3RfbG9jayAtIGRlc3RpbmF0aW9uIGNhY2hlIGxvY2sKLSAgKglAc2tfcG9saWN5IC0gZmxvdyBwb2xpY3kKLSAgKglAc2tfcm1lbV9hbGxvYyAtIHJlY2VpdmUgcXVldWUgYnl0ZXMgY29tbWl0dGVkCi0gICoJQHNrX3JlY2VpdmVfcXVldWUgLSBpbmNvbWluZyBwYWNrZXRzCi0gICoJQHNrX3dtZW1fYWxsb2MgLSB0cmFuc21pdCBxdWV1ZSBieXRlcyBjb21taXR0ZWQKLSAgKglAc2tfd3JpdGVfcXVldWUgLSBQYWNrZXQgc2VuZGluZyBxdWV1ZQotICAqCUBza19vbWVtX2FsbG9jIC0gIm8iIGlzICJvcHRpb24iIG9yICJvdGhlciIKLSAgKglAc2tfd21lbV9xdWV1ZWQgLSBwZXJzaXN0ZW50IHF1ZXVlIHNpemUKLSAgKglAc2tfZm9yd2FyZF9hbGxvYyAtIHNwYWNlIGFsbG9jYXRlZCBmb3J3YXJkCi0gICoJQHNrX2FsbG9jYXRpb24gLSBhbGxvY2F0aW9uIG1vZGUKLSAgKglAc2tfc25kYnVmIC0gc2l6ZSBvZiBzZW5kIGJ1ZmZlciBpbiBieXRlcwotICAqCUBza19mbGFncyAtICVTT19MSU5HRVIgKGxfb25vZmYpLCAlU09fQlJPQURDQVNULCAlU09fS0VFUEFMSVZFLCAlU09fT09CSU5MSU5FIHNldHRpbmdzCi0gICoJQHNrX25vX2NoZWNrIC0gJVNPX05PX0NIRUNLIHNldHRpbmcsIHdldGhlciBvciBub3QgY2hlY2t1cCBwYWNrZXRzCi0gICoJQHNrX3JvdXRlX2NhcHMgLSByb3V0ZSBjYXBhYmlsaXRpZXMgKGUuZy4gJU5FVElGX0ZfVFNPKQotICAqCUBza19saW5nZXJ0aW1lIC0gJVNPX0xJTkdFUiBsX2xpbmdlciBzZXR0aW5nCi0gICoJQHNrX2hhc2hlbnQgLSBoYXNoIGVudHJ5IGluIHNldmVyYWwgdGFibGVzIChlLmcuIHRjcF9laGFzaCkKLSAgKglAc2tfYmFja2xvZyAtIGFsd2F5cyB1c2VkIHdpdGggdGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgaGVsZAotICAqCUBza19jYWxsYmFja19sb2NrIC0gdXNlZCB3aXRoIHRoZSBjYWxsYmFja3MgaW4gdGhlIGVuZCBvZiB0aGlzIHN0cnVjdAotICAqCUBza19lcnJvcl9xdWV1ZSAtIHJhcmVseSB1c2VkCi0gICoJQHNrX3Byb3QgLSBwcm90b2NvbCBoYW5kbGVycyBpbnNpZGUgYSBuZXR3b3JrIGZhbWlseQotICAqCUBza19lcnIgLSBsYXN0IGVycm9yCi0gICoJQHNrX2Vycl9zb2Z0IC0gZXJyb3JzIHRoYXQgZG9uJ3QgY2F1c2UgZmFpbHVyZSBidXQgYXJlIHRoZSBjYXVzZSBvZiBhIHBlcnNpc3RlbnQgZmFpbHVyZSBub3QganVzdCAndGltZWQgb3V0JwotICAqCUBza19hY2tfYmFja2xvZyAtIGN1cnJlbnQgbGlzdGVuIGJhY2tsb2cKLSAgKglAc2tfbWF4X2Fja19iYWNrbG9nIC0gbGlzdGVuIGJhY2tsb2cgc2V0IGluIGxpc3RlbigpCi0gICoJQHNrX3ByaW9yaXR5IC0gJVNPX1BSSU9SSVRZIHNldHRpbmcKLSAgKglAc2tfdHlwZSAtIHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YykKLSAgKglAc2tfcHJvdG9jb2wgLSB3aGljaCBwcm90b2NvbCB0aGlzIHNvY2tldCBiZWxvbmdzIGluIHRoaXMgbmV0d29yayBmYW1pbHkKLSAgKglAc2tfcGVlcmNyZWQgLSAlU09fUEVFUkNSRUQgc2V0dGluZwotICAqCUBza19yY3Zsb3dhdCAtICVTT19SQ1ZMT1dBVCBzZXR0aW5nCi0gICoJQHNrX3JjdnRpbWVvIC0gJVNPX1JDVlRJTUVPIHNldHRpbmcKLSAgKglAc2tfc25kdGltZW8gLSAlU09fU05EVElNRU8gc2V0dGluZwotICAqCUBza19maWx0ZXIgLSBzb2NrZXQgZmlsdGVyaW5nIGluc3RydWN0aW9ucwotICAqCUBza19wcm90aW5mbyAtIHByaXZhdGUgYXJlYSwgbmV0IGZhbWlseSBzcGVjaWZpYywgd2hlbiBub3QgdXNpbmcgc2xhYgotICAqCUBza190aW1lciAtIHNvY2sgY2xlYW51cCB0aW1lcgotICAqCUBza19zdGFtcCAtIHRpbWUgc3RhbXAgb2YgbGFzdCBwYWNrZXQgcmVjZWl2ZWQKLSAgKglAc2tfc29ja2V0IC0gSWRlbnRkIGFuZCByZXBvcnRpbmcgSU8gc2lnbmFscwotICAqCUBza191c2VyX2RhdGEgLSBSUEMgbGF5ZXIgcHJpdmF0ZSBkYXRhCi0gICoJQHNrX3NuZG1zZ19wYWdlIC0gY2FjaGVkIHBhZ2UgZm9yIHNlbmRtc2cKLSAgKglAc2tfc25kbXNnX29mZiAtIGNhY2hlZCBvZmZzZXQgZm9yIHNlbmRtc2cKLSAgKglAc2tfc2VuZF9oZWFkIC0gZnJvbnQgb2Ygc3R1ZmYgdG8gdHJhbnNtaXQKLSAgKglAc2tfd3JpdGVfcGVuZGluZyAtIGEgd3JpdGUgdG8gc3RyZWFtIHNvY2tldCB3YWl0cyB0byBzdGFydAotICAqCUBza19zdGF0ZV9jaGFuZ2UgLSBjYWxsYmFjayB0byBpbmRpY2F0ZSBjaGFuZ2UgaW4gdGhlIHN0YXRlIG9mIHRoZSBzb2NrCi0gICoJQHNrX2RhdGFfcmVhZHkgLSBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGVyZSBpcyBkYXRhIHRvIGJlIHByb2Nlc3NlZAotICAqCUBza193cml0ZV9zcGFjZSAtIGNhbGxiYWNrIHRvIGluZGljYXRlIHRoZXJlIGlzIGJmIHNlbmRpbmcgc3BhY2UgYXZhaWxhYmxlCi0gICoJQHNrX2Vycm9yX3JlcG9ydCAtIGNhbGxiYWNrIHRvIGluZGljYXRlIGVycm9ycyAoZS5nLiAlTVNHX0VSUlFVRVVFKQotICAqCUBza19iYWNrbG9nX3JjdiAtIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIGJhY2tsb2cKLSAgKglAc2tfZGVzdHJ1Y3QgLSBjYWxsZWQgYXQgc29jayBmcmVlaW5nIHRpbWUsIGkuZS4gd2hlbiBhbGwgcmVmY250ID09IDAKKyAgKglAX19za19jb21tb246IHNoYXJlZCBsYXlvdXQgd2l0aCB0Y3BfdHdfYnVja2V0CisgICoJQHNrX3NodXRkb3duOiBtYXNrIG9mICVTRU5EX1NIVVRET1dOIGFuZC9vciAlUkNWX1NIVVRET1dOCisgICoJQHNrX3VzZXJsb2NrczogJVNPX1NOREJVRiBhbmQgJVNPX1JDVkJVRiBzZXR0aW5ncworICAqCUBza19sb2NrOglzeW5jaHJvbml6ZXIKKyAgKglAc2tfcmN2YnVmOiBzaXplIG9mIHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzCisgICoJQHNrX3NsZWVwOiBzb2NrIHdhaXQgcXVldWUKKyAgKglAc2tfZHN0X2NhY2hlOiBkZXN0aW5hdGlvbiBjYWNoZQorICAqCUBza19kc3RfbG9jazogZGVzdGluYXRpb24gY2FjaGUgbG9jaworICAqCUBza19wb2xpY3k6IGZsb3cgcG9saWN5CisgICoJQHNrX3JtZW1fYWxsb2M6IHJlY2VpdmUgcXVldWUgYnl0ZXMgY29tbWl0dGVkCisgICoJQHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHMKKyAgKglAc2tfd21lbV9hbGxvYzogdHJhbnNtaXQgcXVldWUgYnl0ZXMgY29tbWl0dGVkCisgICoJQHNrX3dyaXRlX3F1ZXVlOiBQYWNrZXQgc2VuZGluZyBxdWV1ZQorICAqCUBza19vbWVtX2FsbG9jOiAibyIgaXMgIm9wdGlvbiIgb3IgIm90aGVyIgorICAqCUBza193bWVtX3F1ZXVlZDogcGVyc2lzdGVudCBxdWV1ZSBzaXplCisgICoJQHNrX2ZvcndhcmRfYWxsb2M6IHNwYWNlIGFsbG9jYXRlZCBmb3J3YXJkCisgICoJQHNrX2FsbG9jYXRpb246IGFsbG9jYXRpb24gbW9kZQorICAqCUBza19zbmRidWY6IHNpemUgb2Ygc2VuZCBidWZmZXIgaW4gYnl0ZXMKKyAgKglAc2tfZmxhZ3M6ICVTT19MSU5HRVIgKGxfb25vZmYpLCAlU09fQlJPQURDQVNULCAlU09fS0VFUEFMSVZFLCAlU09fT09CSU5MSU5FIHNldHRpbmdzCisgICoJQHNrX25vX2NoZWNrOiAlU09fTk9fQ0hFQ0sgc2V0dGluZywgd2V0aGVyIG9yIG5vdCBjaGVja3VwIHBhY2tldHMKKyAgKglAc2tfcm91dGVfY2Fwczogcm91dGUgY2FwYWJpbGl0aWVzIChlLmcuICVORVRJRl9GX1RTTykKKyAgKglAc2tfbGluZ2VydGltZTogJVNPX0xJTkdFUiBsX2xpbmdlciBzZXR0aW5nCisgICoJQHNrX2hhc2hlbnQ6IGhhc2ggZW50cnkgaW4gc2V2ZXJhbCB0YWJsZXMgKGUuZy4gdGNwX2VoYXNoKQorICAqCUBza19iYWNrbG9nOiBhbHdheXMgdXNlZCB3aXRoIHRoZSBwZXItc29ja2V0IHNwaW5sb2NrIGhlbGQKKyAgKglAc2tfY2FsbGJhY2tfbG9jazogdXNlZCB3aXRoIHRoZSBjYWxsYmFja3MgaW4gdGhlIGVuZCBvZiB0aGlzIHN0cnVjdAorICAqCUBza19lcnJvcl9xdWV1ZTogcmFyZWx5IHVzZWQKKyAgKglAc2tfcHJvdDogcHJvdG9jb2wgaGFuZGxlcnMgaW5zaWRlIGEgbmV0d29yayBmYW1pbHkKKyAgKglAc2tfZXJyOiBsYXN0IGVycm9yCisgICoJQHNrX2Vycl9zb2Z0OiBlcnJvcnMgdGhhdCBkb24ndCBjYXVzZSBmYWlsdXJlIGJ1dCBhcmUgdGhlIGNhdXNlIG9mIGEgcGVyc2lzdGVudCBmYWlsdXJlIG5vdCBqdXN0ICd0aW1lZCBvdXQnCisgICoJQHNrX2Fja19iYWNrbG9nOiBjdXJyZW50IGxpc3RlbiBiYWNrbG9nCisgICoJQHNrX21heF9hY2tfYmFja2xvZzogbGlzdGVuIGJhY2tsb2cgc2V0IGluIGxpc3RlbigpCisgICoJQHNrX3ByaW9yaXR5OiAlU09fUFJJT1JJVFkgc2V0dGluZworICAqCUBza190eXBlOiBzb2NrZXQgdHlwZSAoJVNPQ0tfU1RSRUFNLCBldGMpCisgICoJQHNrX3Byb3RvY29sOiB3aGljaCBwcm90b2NvbCB0aGlzIHNvY2tldCBiZWxvbmdzIGluIHRoaXMgbmV0d29yayBmYW1pbHkKKyAgKglAc2tfcGVlcmNyZWQ6ICVTT19QRUVSQ1JFRCBzZXR0aW5nCisgICoJQHNrX3Jjdmxvd2F0OiAlU09fUkNWTE9XQVQgc2V0dGluZworICAqCUBza19yY3Z0aW1lbzogJVNPX1JDVlRJTUVPIHNldHRpbmcKKyAgKglAc2tfc25kdGltZW86ICVTT19TTkRUSU1FTyBzZXR0aW5nCisgICoJQHNrX2ZpbHRlcjogc29ja2V0IGZpbHRlcmluZyBpbnN0cnVjdGlvbnMKKyAgKglAc2tfcHJvdGluZm86IHByaXZhdGUgYXJlYSwgbmV0IGZhbWlseSBzcGVjaWZpYywgd2hlbiBub3QgdXNpbmcgc2xhYgorICAqCUBza190aW1lcjogc29jayBjbGVhbnVwIHRpbWVyCisgICoJQHNrX3N0YW1wOiB0aW1lIHN0YW1wIG9mIGxhc3QgcGFja2V0IHJlY2VpdmVkCisgICoJQHNrX3NvY2tldDogSWRlbnRkIGFuZCByZXBvcnRpbmcgSU8gc2lnbmFscworICAqCUBza191c2VyX2RhdGE6IFJQQyBsYXllciBwcml2YXRlIGRhdGEKKyAgKglAc2tfc25kbXNnX3BhZ2U6IGNhY2hlZCBwYWdlIGZvciBzZW5kbXNnCisgICoJQHNrX3NuZG1zZ19vZmY6IGNhY2hlZCBvZmZzZXQgZm9yIHNlbmRtc2cKKyAgKglAc2tfc2VuZF9oZWFkOiBmcm9udCBvZiBzdHVmZiB0byB0cmFuc21pdAorICAqCUBza19zZWN1cml0eTogdXNlZCBieSBzZWN1cml0eSBtb2R1bGVzCisgICoJQHNrX3dyaXRlX3BlbmRpbmc6IGEgd3JpdGUgdG8gc3RyZWFtIHNvY2tldCB3YWl0cyB0byBzdGFydAorICAqCUBza19zdGF0ZV9jaGFuZ2U6IGNhbGxiYWNrIHRvIGluZGljYXRlIGNoYW5nZSBpbiB0aGUgc3RhdGUgb2YgdGhlIHNvY2sKKyAgKglAc2tfZGF0YV9yZWFkeTogY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhlcmUgaXMgZGF0YSB0byBiZSBwcm9jZXNzZWQKKyAgKglAc2tfd3JpdGVfc3BhY2U6IGNhbGxiYWNrIHRvIGluZGljYXRlIHRoZXJlIGlzIGJmIHNlbmRpbmcgc3BhY2UgYXZhaWxhYmxlCisgICoJQHNrX2Vycm9yX3JlcG9ydDogY2FsbGJhY2sgdG8gaW5kaWNhdGUgZXJyb3JzIChlLmcuICVNU0dfRVJSUVVFVUUpCisgICoJQHNrX2JhY2tsb2dfcmN2OiBjYWxsYmFjayB0byBwcm9jZXNzIHRoZSBiYWNrbG9nCisgICoJQHNrX2Rlc3RydWN0OiBjYWxsZWQgYXQgc29jayBmcmVlaW5nIHRpbWUsIGkuZS4gd2hlbiBhbGwgcmVmY250ID09IDAKICAqLwogc3RydWN0IHNvY2sgewogCS8qCkBAIC0xMjIzLDggKzEyMjQsOCBAQAogCiAvKioKICAqIHNrX2VhdF9za2IgLSBSZWxlYXNlIGEgc2tiIGlmIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQKLSAqIEBzayAtIHNvY2tldCB0byBlYXQgdGhpcyBza2IgZnJvbQotICogQHNrYiAtIHNvY2tldCBidWZmZXIgdG8gZWF0CisgKiBAc2s6IHNvY2tldCB0byBlYXQgdGhpcyBza2IgZnJvbQorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBlYXQKICAqCiAgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIG9yIHdpdGggdGhlIHNvY2tldAogICogbG9ja2VkIHNvIHRoYXQgdGhlIHNrX2J1ZmYgcXVldWUgb3BlcmF0aW9uIGlzIG9rLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9lZGlkLmggYi9pbmNsdWRlL3ZpZGVvL2VkaWQuaAppbmRleCBhYmMxYjQ4Li5iOTEzZjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL2VkaWQuaAorKysgYi9pbmNsdWRlL3ZpZGVvL2VkaWQuaApAQCAtNCw5ICs0LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpZmRlZiBDT05GSUdfUFBDX09GCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODYKIHN0cnVjdCBlZGlkX2luZm8gewpAQCAtMTQsMTQgKzExLDggQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgZWRpZF9pbmZvIGVkaWRfaW5mbzsKLWV4dGVybiBjaGFyICpnZXRfRURJRF9mcm9tX0JJT1Modm9pZCAqKTsKLQogI2VuZGlmIC8qIENPTkZJR19YODYgKi8KIAotI2lmZGVmIENPTkZJR19QUENfT0YKLWV4dGVybiBjaGFyICpnZXRfRURJRF9mcm9tX09GKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLSNlbmRpZgotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX19saW51eF92aWRlb19lZGlkX2hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby90ZGZ4LmggYi9pbmNsdWRlL3ZpZGVvL3RkZnguaAppbmRleCBhODk2ZTQ0Li4wNDIzNzY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3RkZnguaAorKysgYi9pbmNsdWRlL3ZpZGVvL3RkZnguaApAQCAtOTksNiArOTksOCBAQAogI2RlZmluZSBNSVNDSU5JVDFfMkRCTE9DS19ESVMgICAgICAgICAgIEJJVCgxNSkKICNkZWZpbmUgRFJBTUlOSVQwX1NHUkFNX05VTSAgICAgICAgICAgICBCSVQoMjYpCiAjZGVmaW5lIERSQU1JTklUMF9TR1JBTV9UWVBFICAgICAgICAgICAgQklUKDI3KQorI2RlZmluZSBEUkFNSU5JVDBfU0dSQU1fVFlQRV9NQVNLICAgICAgIChCSVQoMjcpfEJJVCgyOCl8QklUKDI5KSkKKyNkZWZpbmUgRFJBTUlOSVQwX1NHUkFNX1RZUEVfU0hJRlQgICAgICAyNwogI2RlZmluZSBEUkFNSU5JVDFfTUVNX1NEUkFNICAgICAgICAgICAgIEJJVCgzMCkKICNkZWZpbmUgVkdBSU5JVDBfVkdBX0RJU0FCTEUgICAgICAgICAgICBCSVQoMCkKICNkZWZpbmUgVkdBSU5JVDBfRVhUX1RJTUlORyAgICAgICAgICAgICBCSVQoMSkKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAzMzhkODJhLi5kOTIwYmFlIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0yNzUsNiArMjc1LDI3IEBACiAJICAgcmVwb3J0ZWQuICBLQUxMU1lNU19FWFRSQV9QQVNTIGlzIG9ubHkgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGlsZQogCSAgIHlvdSB3YWl0IGZvciBrYWxsc3ltcyB0byBiZSBmaXhlZC4KIAorCitjb25maWcgUFJJTlRLCisJZGVmYXVsdCB5CisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIHByaW50ayIgaWYgRU1CRURERUQKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIG5vcm1hbCBwcmludGsgc3VwcG9ydC4gUmVtb3ZpbmcgaXQKKwkgIGVsaW1pbmF0ZXMgbW9zdCBvZiB0aGUgbWVzc2FnZSBzdHJpbmdzIGZyb20gdGhlIGtlcm5lbCBpbWFnZQorCSAgYW5kIG1ha2VzIHRoZSBrZXJuZWwgbW9yZSBvciBsZXNzIHNpbGVudC4gQXMgdGhpcyBtYWtlcyBpdAorCSAgdmVyeSBkaWZmaWN1bHQgdG8gZGlhZ25vc2Ugc3lzdGVtIHByb2JsZW1zLCBzYXlpbmcgTiBoZXJlIGlzCisJICBzdHJvbmdseSBkaXNjb3VyYWdlZC4KKworY29uZmlnIEJVRworCWJvb2wgIkJVRygpIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVmYXVsdCB5CisJaGVscAorICAgICAgICAgIERpc2FibGluZyB0aGlzIG9wdGlvbiBlbGltaW5hdGVzIHN1cHBvcnQgZm9yIEJVRyBhbmQgV0FSTiwgcmVkdWNpbmcKKyAgICAgICAgICB0aGUgc2l6ZSBvZiB5b3VyIGtlcm5lbCBpbWFnZSBhbmQgcG90ZW50aWFsbHkgcXVpZXRseSBpZ25vcmluZworICAgICAgICAgIG51bWVyb3VzIGZhdGFsIGNvbmRpdGlvbnMuIFlvdSBzaG91bGQgb25seSBjb25zaWRlciBkaXNhYmxpbmcgdGhpcworICAgICAgICAgIG9wdGlvbiBmb3IgZW1iZWRkZWQgc3lzdGVtcyB3aXRoIG5vIGZhY2lsaXRpZXMgZm9yIHJlcG9ydGluZyBlcnJvcnMuCisgICAgICAgICAgSnVzdCBzYXkgWS4KKwogY29uZmlnIEJBU0VfRlVMTAogCWRlZmF1bHQgeQogCWJvb2wgIkVuYWJsZSBmdWxsLXNpemVkIGRhdGEgc3RydWN0dXJlcyBmb3IgY29yZSIgaWYgRU1CRURERUQKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBjYjBjZDNjLi4wYWNmMjQ1IDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlICJ1dGlsLmgiCiAKQEAgLTc2Nyw3ICs3NjgsNyBAQAogCWxpc3RfZGVsKCZyZWNlaXZlci0+bGlzdCk7CiAJcmVjZWl2ZXItPnN0YXRlID0gU1RBVEVfUEVORElORzsKIAl3YWtlX3VwX3Byb2Nlc3MocmVjZWl2ZXItPnRhc2spOwotCXdtYigpOworCXNtcF93bWIoKTsKIAlyZWNlaXZlci0+c3RhdGUgPSBTVEFURV9SRUFEWTsKIH0KIApAQCAtNzg2LDcgKzc4Nyw3IEBACiAJbGlzdF9kZWwoJnNlbmRlci0+bGlzdCk7CiAJc2VuZGVyLT5zdGF0ZSA9IFNUQVRFX1BFTkRJTkc7CiAJd2FrZV91cF9wcm9jZXNzKHNlbmRlci0+dGFzayk7Ci0Jd21iKCk7CisJc21wX3dtYigpOwogCXNlbmRlci0+c3RhdGUgPSBTVEFURV9SRUFEWTsKIH0KIApAQCAtOTc2LDggKzk3Nyw3IEBACiAJCQkgICAgIG5vdGlmaWNhdGlvbi5zaWdldl9ub3RpZnkgIT0gU0lHRVZfVEhSRUFEKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAobm90aWZpY2F0aW9uLnNpZ2V2X25vdGlmeSA9PSBTSUdFVl9TSUdOQUwgJiYKLQkJCShub3RpZmljYXRpb24uc2lnZXZfc2lnbm8gPCAwIHx8Ci0JCQkgbm90aWZpY2F0aW9uLnNpZ2V2X3NpZ25vID4gX05TSUcpKSB7CisJCQkhdmFsaWRfc2lnbmFsKG5vdGlmaWNhdGlvbi5zaWdldl9zaWdubykpIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChub3RpZmljYXRpb24uc2lnZXZfbm90aWZ5ID09IFNJR0VWX1RIUkVBRCkgewpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDA2Y2Q1YzkxLi5jY2UwMjI0MyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInV0aWwuaCIKQEAgLTc3MSw2ICs3NzMsMTggQEAKIAlyZXR1cm4gZXJyOwogfQogCithc21saW5rYWdlIGxvbmcgc3lzX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJbG9uZyBlcnI7CisKKwllcnIgPSBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmV0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKTsKKwlyZXR1cm4gKGxvbmcpcmV0OworfQorCiAvKgogICogZGV0YWNoIGFuZCBraWxsIHNlZ21lbnQgaWYgbWFya2VkIGRlc3Ryb3llZC4KICAqIFRoZSB3b3JrIGlzIGRvbmUgaW4gc2htX2Nsb3NlLgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggMzlkMzU5MzUuLjdiZTI4M2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTM4LDYgKzM5LDggQEAKIAogaW50IGdldHJ1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKTsKIAorc3RhdGljIHZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spOworCiBzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlucl90aHJlYWRzLS07CkBAIC0yMDksNyArMjEyLDcgQEAKIH0KIAogLyoqCi0gKiByZXBhcmVudF90b19pbml0KCkgLSBSZXBhcmVudCB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkIHRvIHRoZSBpbml0IHRhc2suCisgKiByZXBhcmVudF90b19pbml0IC0gUmVwYXJlbnQgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0byB0aGUgaW5pdCB0YXNrLgogICoKICAqIElmIGEga2VybmVsIHRocmVhZCBpcyBsYXVuY2hlZCBhcyBhIHJlc3VsdCBvZiBhIHN5c3RlbSBjYWxsLCBvciBpZgogICogaXQgZXZlciBleGl0cywgaXQgc2hvdWxkIGdlbmVyYWxseSByZXBhcmVudCBpdHNlbGYgdG8gaW5pdCBzbyB0aGF0CkBAIC0yNzcsNyArMjgwLDcgQEAKICAqLwogaW50IGFsbG93X3NpZ25hbChpbnQgc2lnKQogewotCWlmIChzaWcgPCAxIHx8IHNpZyA+IF9OU0lHKQorCWlmICghdmFsaWRfc2lnbmFsKHNpZykgfHwgc2lnIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTI5OCw3ICszMDEsNyBAQAogCiBpbnQgZGlzYWxsb3dfc2lnbmFsKGludCBzaWcpCiB7Ci0JaWYgKHNpZyA8IDEgfHwgc2lnID4gX05TSUcpCisJaWYgKCF2YWxpZF9zaWduYWwoc2lnKSB8fCBzaWcgPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtNDczLDcgKzQ3Niw3IEBACiAgKiBUdXJuIHVzIGludG8gYSBsYXp5IFRMQiBwcm9jZXNzIGlmIHdlCiAgKiBhcmVuJ3QgYWxyZWFkeS4uCiAgKi8KLXZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spCitzdGF0aWMgdm9pZCBleGl0X21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CiAKQEAgLTUxNyw4ICs1MjAsNiBAQAogCSAqLwogCUJVR19PTihwID09IHJlYXBlciB8fCByZWFwZXItPmV4aXRfc3RhdGUgPj0gRVhJVF9aT01CSUUpOwogCXAtPnJlYWxfcGFyZW50ID0gcmVhcGVyOwotCWlmIChwLT5wYXJlbnQgPT0gcC0+cmVhbF9wYXJlbnQpCi0JCUJVRygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfdGhyZWFkKHRhc2tfdCAqcCwgdGFza190ICpmYXRoZXIsIGludCB0cmFjZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDdiNTRhNjcuLmM3MTMwZjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2RlZmluZSBGVVRFWF9IQVNIQklUUyAoQ09ORklHX0JBU0VfU01BTEwgPyA0IDogOCkKIApAQCAtNjU0LDcgKzY1NSw3IEBACiAJaW50IHJldCwgZXJyOwogCiAJcmV0ID0gLUVJTlZBTDsKLQlpZiAoc2lnbmFsIDwgMCB8fCBzaWduYWwgPiBfTlNJRykKKwlpZiAoIXZhbGlkX3NpZ25hbChzaWduYWwpKQogCQlnb3RvIG91dDsKIAogCXJldCA9IGdldF91bnVzZWRfZmQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IGUzNzdlMjIuLmY1MGYxNzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAkvKiBNdXN0IGluaXQgY29tcGxldGlvbiAqYmVmb3JlKiB0aHJlYWQgc2VlcyBrdGhyZWFkX3N0b3BfaW5mby5rICovCiAJaW5pdF9jb21wbGV0aW9uKCZrdGhyZWFkX3N0b3BfaW5mby5kb25lKTsKLQl3bWIoKTsKKwlzbXBfd21iKCk7CiAKIAkvKiBOb3cgc2V0IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB0byB0cnVlLCBhbmQgd2FrZSBpdCB1cC4gKi8KIAlrdGhyZWFkX3N0b3BfaW5mby5rID0gazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyZGJmYTA3Li41NzM0YWIwIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogCQkvKiBJbml0IHJvdXRpbmUgZmFpbGVkOiBhYm9ydC4gIFRyeSB0byBwcm90ZWN0IHVzIGZyb20KICAgICAgICAgICAgICAgICAgICBidWdneSByZWZjb3VudGVycy4gKi8KIAkJbW9kLT5zdGF0ZSA9IE1PRFVMRV9TVEFURV9HT0lORzsKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3NjaGVkKCk7CiAJCWlmIChtb2QtPnVuc2FmZSkKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1vZHVsZSBpcyBub3cgc3R1Y2shXG4iLAogCQkJICAgICAgIG1vZC0+bmFtZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKaW5kZXggYWU1YmViYy4uOTBiM2I2OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd3N1c3AuYwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAlyZXR1cm4gcGJsaXN0OwogfQogCi0vKioKKy8qCiAgKglVc2luZyBiaW8gdG8gcmVhZCBmcm9tIHN3YXAuCiAgKglUaGlzIGNvZGUgcmVxdWlyZXMgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCB1c2luZyBidWZmZXIgaGVhZHMKICAqCWJ1dCwgaXQgaXMgdGhlIHJlY29tbWVuZGVkIHdheSBmb3IgMi41LzIuNi4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCAxNDk4Njg5Li4yOTBhMDdjIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC04NSwxMCArODUsNiBAQAogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvZ2J1Zl9sb2NrKTsKIAotc3RhdGljIGNoYXIgX19sb2dfYnVmW19fTE9HX0JVRl9MRU5dOwotc3RhdGljIGNoYXIgKmxvZ19idWYgPSBfX2xvZ19idWY7Ci1zdGF0aWMgaW50IGxvZ19idWZfbGVuID0gX19MT0dfQlVGX0xFTjsKLQogI2RlZmluZSBMT0dfQlVGX01BU0sJKGxvZ19idWZfbGVuLTEpCiAjZGVmaW5lIExPR19CVUYoaWR4KSAobG9nX2J1ZlsoaWR4KSAmIExPR19CVUZfTUFTS10pCiAKQEAgLTk5LDcgKzk1LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvZ19zdGFydDsJLyogSW5kZXggaW50byBsb2dfYnVmOiBuZXh0IGNoYXIgdG8gYmUgcmVhZCBieSBzeXNsb2coKSAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY29uX3N0YXJ0OwkvKiBJbmRleCBpbnRvIGxvZ19idWY6IG5leHQgY2hhciB0byBiZSBzZW50IHRvIGNvbnNvbGVzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2dfZW5kOwkvKiBJbmRleCBpbnRvIGxvZ19idWY6IG1vc3QtcmVjZW50bHktd3JpdHRlbi1jaGFyICsgMSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9nZ2VkX2NoYXJzOyAvKiBOdW1iZXIgb2YgY2hhcnMgcHJvZHVjZWQgc2luY2UgbGFzdCByZWFkK2NsZWFyIG9wZXJhdGlvbiAqLwogCiAvKgogICoJQXJyYXkgb2YgY29uc29sZXMgYnVpbHQgZnJvbSBjb21tYW5kIGxpbmUgb3B0aW9ucyAoY29uc29sZT0pCkBAIC0xMjAsNiArMTE1LDEzIEBACiAvKiBGbGFnOiBjb25zb2xlIGNvZGUgbWF5IGNhbGwgc2NoZWR1bGUoKSAqLwogc3RhdGljIGludCBjb25zb2xlX21heV9zY2hlZHVsZTsKIAorI2lmZGVmIENPTkZJR19QUklOVEsKKworc3RhdGljIGNoYXIgX19sb2dfYnVmW19fTE9HX0JVRl9MRU5dOworc3RhdGljIGNoYXIgKmxvZ19idWYgPSBfX2xvZ19idWY7CitzdGF0aWMgaW50IGxvZ19idWZfbGVuID0gX19MT0dfQlVGX0xFTjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvZ2dlZF9jaGFyczsgLyogTnVtYmVyIG9mIGNoYXJzIHByb2R1Y2VkIHNpbmNlIGxhc3QgcmVhZCtjbGVhciBvcGVyYXRpb24gKi8KKwogLyoKICAqCVNldHVwIGEgbGlzdCBvZiBjb25zb2xlcy4gQ2FsbGVkIGZyb20gaW5pdC9tYWluLmMKICAqLwpAQCAtNTM1LDYgKzUzNyw3IEBACiAgKiB0aGVuIGNoYW5nZXMgY29uc29sZV9sb2dsZXZlbCBtYXkgYnJlYWsuIFRoaXMgaXMgYmVjYXVzZSBjb25zb2xlX2xvZ2xldmVsCiAgKiBpcyBpbnNwZWN0ZWQgd2hlbiB0aGUgYWN0dWFsIHByaW50aW5nIG9jY3Vycy4KICAqLworCiBhc21saW5rYWdlIGludCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwpAQCAtNjU1LDYgKzY1OCwxOCBAQAogRVhQT1JUX1NZTUJPTChwcmludGspOwogRVhQT1JUX1NZTUJPTCh2cHJpbnRrKTsKIAorI2Vsc2UKKworYXNtbGlua2FnZSBsb25nIHN5c19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICogYnVmLCBpbnQgbGVuKQoreworCXJldHVybiAwOworfQorCitpbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqIGJ1ZiwgaW50IGxlbikgeyByZXR1cm4gMDsgfQorc3RhdGljIHZvaWQgY2FsbF9jb25zb2xlX2RyaXZlcnModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHt9CisKKyNlbmRpZgorCiAvKioKICAqIGFjcXVpcmVfY29uc29sZV9zZW0gLSBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KICAqCkBAIC05MzEsNyArOTQ2LDcgQEAKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2NvbnNvbGUpOwotCQorCiAvKioKICAqIHR0eV93cml0ZV9tZXNzYWdlIC0gd3JpdGUgYSBtZXNzYWdlIHRvIGEgY2VydGFpbiB0dHksIG5vdCBqdXN0IHRoZSBjb25zb2xlLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcm9maWxlLmMgYi9rZXJuZWwvcHJvZmlsZS5jCmluZGV4IGEzOGZhNzAuLjAyMjFhNTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcm9maWxlLmMKKysrIGIva2VybmVsL3Byb2ZpbGUuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJV0FSTl9PTihob29rICE9IHRpbWVyX2hvb2spOwogCXRpbWVyX2hvb2sgPSBOVUxMOwogCS8qIG1ha2Ugc3VyZSBhbGwgQ1BVcyBzZWUgdGhlIE5VTEwgaG9vayAqLwotCXN5bmNocm9uaXplX2tlcm5lbCgpOworCXN5bmNocm9uaXplX3NjaGVkKCk7ICAvKiBBbGxvdyBvbmdvaW5nIGludGVycnVwdHMgdG8gY29tcGxldGUuICovCiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX3RpbWVyX2hvb2spOwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJcmV0dXJuIDA7CiBvdXRfY2xlYW51cDoKIAlwcm9mX29uID0gMDsKLQltYigpOworCXNtcF9tYigpOwogCW9uX2VhY2hfY3B1KHByb2ZpbGVfbm9wLCBOVUxMLCAwLCAxKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4OGIzMDZjLi44ZGNiOGY2IDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTM1LDcgKzEzNiw3IEBACiAgCSAgICAoY3VycmVudC0+Z2lkICE9IHRhc2stPnNnaWQpIHx8CiAgCSAgICAoY3VycmVudC0+Z2lkICE9IHRhc2stPmdpZCkpICYmICFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKIAkJZ290byBiYWQ7Ci0Jcm1iKCk7CisJc21wX3JtYigpOwogCWlmICghdGFzay0+bW0tPmR1bXBhYmxlICYmICFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKIAkJZ290byBiYWQ7CiAJLyogdGhlIHNhbWUgcHJvY2VzcyBjYW5ub3QgYmUgYXR0YWNoZWQgbWFueSB0aW1lcyAqLwpAQCAtMTY2LDcgKzE2Nyw3IEBACiAKIGludCBwdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBkYXRhKQogewotCWlmICgodW5zaWduZWQgbG9uZykgZGF0YSA+IF9OU0lHKQorCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQlyZXR1cm4JLUVJTzsKIAogCS8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYXJkd2FyZSBkaXNhYmxlIC4uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IGQwMGVkZWQuLmY0MzY5OTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC00NDQsMTUgKzQ0NCwxOCBAQAogfQogCiAvKioKLSAqIHN5bmNocm9uaXplX2tlcm5lbCAtIHdhaXQgdW50aWwgYSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuCisgKiBzeW5jaHJvbml6ZV9yY3UgLSB3YWl0IHVudGlsIGEgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogICoKICAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIGdyYWNlCiAgKiBwZXJpb2QgaGFzIGVsYXBzZWQsIGluIG90aGVyIHdvcmRzIGFmdGVyIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIFJDVQogICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGhhdmUgY29tcGxldGVkLiAgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAogICogc2VjdGlvbnMgYXJlIGRlbGltaXRlZCBieSByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpLAogICogYW5kIG1heSBiZSBuZXN0ZWQuCisgKgorICogSWYgeW91ciByZWFkLXNpZGUgY29kZSBpcyBub3QgcHJvdGVjdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSwgZG8gLW5vdC0KKyAqIHVzZSBzeW5jaHJvbml6ZV9yY3UoKS4KICAqLwotdm9pZCBzeW5jaHJvbml6ZV9rZXJuZWwodm9pZCkKK3ZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpCiB7CiAJc3RydWN0IHJjdV9zeW5jaHJvbml6ZSByY3U7CiAKQEAgLTQ2NCw3ICs0NjcsMTYgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3UuY29tcGxldGlvbik7CiB9CiAKKy8qCisgKiBEZXByZWNhdGVkLCB1c2Ugc3luY2hyb25pemVfcmN1KCkgb3Igc3luY2hyb25pemVfc2NoZWQoKSBpbnN0ZWFkLgorICovCit2b2lkIHN5bmNocm9uaXplX2tlcm5lbCh2b2lkKQoreworCXN5bmNocm9uaXplX3JjdSgpOworfQorCiBtb2R1bGVfcGFyYW0obWF4YmF0Y2gsIGludCwgMCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV9iaCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9rZXJuZWwpOworRVhQT1JUX1NZTUJPTChjYWxsX3JjdSk7ICAvKiBXQVJOSU5HOiBHUEwtb25seSBpbiBBcHJpbCAyMDA2LiAqLworRVhQT1JUX1NZTUJPTChjYWxsX3JjdV9iaCk7ICAvKiBXQVJOSU5HOiBHUEwtb25seSBpbiBBcHJpbCAyMDA2LiAqLworRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTsKK0VYUE9SVF9TWU1CT0woc3luY2hyb25pemVfa2VybmVsKTsgIC8qIFdBUk5JTkc6IEdQTC1vbmx5IGluIEFwcmlsIDIwMDYuICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDliYjc0ODkuLjBkYzMxNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yOTA2LDYgKzI5MDYsNyBAQAogICogQHE6IHRoZSB3YWl0cXVldWUKICAqIEBtb2RlOiB3aGljaCB0aHJlYWRzCiAgKiBAbnJfZXhjbHVzaXZlOiBob3cgbWFueSB3YWtlLW9uZSBvciB3YWtlLW1hbnkgdGhyZWFkcyB0byB3YWtlIHVwCisgKiBAa2V5OiBpcyBkaXJlY3RseSBwYXNzZWQgdG8gdGhlIHdha2V1cCBmdW5jdGlvbgogICovCiB2b2lkIGZhc3RjYWxsIF9fd2FrZV91cCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsCiAJCQkJaW50IG5yX2V4Y2x1c2l2ZSwgdm9pZCAqa2V5KQpAQCAtMjkyOCw3ICsyOTI5LDcgQEAKIH0KIAogLyoqCi0gKiBfX3dha2VfdXAgLSBzeW5jLSB3YWtlIHVwIHRocmVhZHMgYmxvY2tlZCBvbiBhIHdhaXRxdWV1ZS4KKyAqIF9fd2FrZV91cF9zeW5jIC0gd2FrZSB1cCB0aHJlYWRzIGJsb2NrZWQgb24gYSB3YWl0cXVldWUuCiAgKiBAcTogdGhlIHdhaXRxdWV1ZQogICogQG1vZGU6IHdoaWNoIHRocmVhZHMKICAqIEBucl9leGNsdXNpdmU6IGhvdyBtYW55IHdha2Utb25lIG9yIHdha2UtbWFueSB0aHJlYWRzIHRvIHdha2UgdXAKQEAgLTMyMjMsNiArMzIyNCwxOSBAQAogCiBFWFBPUlRfU1lNQk9MKHNldF91c2VyX25pY2UpOwogCisvKgorICogY2FuX25pY2UgLSBjaGVjayBpZiBhIHRhc2sgY2FuIHJlZHVjZSBpdHMgbmljZSB2YWx1ZQorICogQHA6IHRhc2sKKyAqIEBuaWNlOiBuaWNlIHZhbHVlCisgKi8KK2ludCBjYW5fbmljZShjb25zdCB0YXNrX3QgKnAsIGNvbnN0IGludCBuaWNlKQoreworCS8qIGNvbnZlcnQgbmljZSB2YWx1ZSBbMTksLTIwXSB0byBybGltaXQgc3R5bGUgdmFsdWUgWzAsMzldICovCisJaW50IG5pY2VfcmxpbSA9IDE5IC0gbmljZTsKKwlyZXR1cm4gKG5pY2VfcmxpbSA8PSBwLT5zaWduYWwtPnJsaW1bUkxJTUlUX05JQ0VdLnJsaW1fY3VyIHx8CisJCWNhcGFibGUoQ0FQX1NZU19OSUNFKSk7Cit9CisKICNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNfTklDRQogCiAvKgpAQCAtMzI0MiwxMiArMzI1Niw4IEBACiAJICogV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeS4gQ29uY2VwdHVhbGx5IG9uZSBjYWxsIG9jY3VycyBmaXJzdAogCSAqIGFuZCB3ZSBoYXZlIGEgc2luZ2xlIHdpbm5lci4KIAkgKi8KLQlpZiAoaW5jcmVtZW50IDwgMCkgewotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWlmIChpbmNyZW1lbnQgPCAtNDApCi0JCQlpbmNyZW1lbnQgPSAtNDA7Ci0JfQorCWlmIChpbmNyZW1lbnQgPCAtNDApCisJCWluY3JlbWVudCA9IC00MDsKIAlpZiAoaW5jcmVtZW50ID4gNDApCiAJCWluY3JlbWVudCA9IDQwOwogCkBAIC0zMjU3LDYgKzMyNjcsOSBAQAogCWlmIChuaWNlID4gMTkpCiAJCW5pY2UgPSAxOTsKIAorCWlmIChpbmNyZW1lbnQgPCAwICYmICFjYW5fbmljZShjdXJyZW50LCBuaWNlKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwogCXJldHZhbCA9IHNlY3VyaXR5X3Rhc2tfc2V0bmljZShjdXJyZW50LCBuaWNlKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMzM3Miw2ICszMzg1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKHBvbGljeSA9PSBTQ0hFRF9GSUZPIHx8IHBvbGljeSA9PSBTQ0hFRF9SUikgJiYKKwkgICAgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID4gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9SVFBSSU9dLnJsaW1fY3VyICYmCiAJICAgICFjYXBhYmxlKENBUF9TWVNfTklDRSkpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKChjdXJyZW50LT5ldWlkICE9IHAtPmV1aWQpICYmIChjdXJyZW50LT5ldWlkICE9IHAtPnVpZCkgJiYKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCBlNjU2N2Q3Li44ZjNkZWJjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeC10aW1lcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTY0Niw3ICs2NDcsNyBAQAogCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKLQlpZiAoc2lnIDwgMCB8fCBzaWcgPiBfTlNJRykKKwlpZiAoIXZhbGlkX3NpZ25hbChzaWcpKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSAtRVBFUk07CiAJaWYgKCghaW5mbyB8fCAoKHVuc2lnbmVkIGxvbmcpaW5mbyAhPSAxICYmCkBAIC0xMjQ1LDcgKzEyNDYsNyBAQAogCSAqIE1ha2Ugc3VyZSBsZWdhY3kga2VybmVsIHVzZXJzIGRvbid0IHNlbmQgaW4gYmFkIHZhbHVlcwogCSAqIChub3JtYWwgcGF0aHMgY2hlY2sgdGhpcyBpbiBjaGVja19raWxsX3Blcm1pc3Npb24pLgogCSAqLwotCWlmIChzaWcgPCAwIHx8IHNpZyA+IF9OU0lHKQorCWlmICghdmFsaWRfc2lnbmFsKHNpZykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTE1MjAsNyArMTUyMSw3IEBACiAJCWlmIChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19JR04pCiAJCQlzaWcgPSAwOwogCX0KLQlpZiAoc2lnID4gMCAmJiBzaWcgPD0gX05TSUcpCisJaWYgKHZhbGlkX3NpZ25hbChzaWcpICYmIHNpZyA+IDApCiAJCV9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsICZpbmZvLCB0c2stPnBhcmVudCk7CiAJX193YWtlX3VwX3BhcmVudCh0c2ssIHRzay0+cGFyZW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwc2lnLT5zaWdsb2NrLCBmbGFncyk7CkBAIC0yMzY0LDcgKzIzNjUsNyBAQAogewogCXN0cnVjdCBrX3NpZ2FjdGlvbiAqazsKIAotCWlmIChzaWcgPCAxIHx8IHNpZyA+IF9OU0lHIHx8IChhY3QgJiYgc2lnX2tlcm5lbF9vbmx5KHNpZykpKQorCWlmICghdmFsaWRfc2lnbmFsKHNpZykgfHwgc2lnIDwgMSB8fCAoYWN0ICYmIHNpZ19rZXJuZWxfb25seShzaWcpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrID0gJmN1cnJlbnQtPnNpZ2hhbmQtPmFjdGlvbltzaWctMV07CmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggYzM5ZWQ3MC4uNjExNmIyNSAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtMzMsNyArMzMsNyBAQAogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoKGludCkobG9uZyljcHUpKTsKIAogCS8qIEFjazogd2UgYXJlIGFsaXZlICovCi0JbWIoKTsgLyogVGhlb3JldGljYWxseSB0aGUgYWNrID0gMCBtaWdodCBub3QgYmUgb24gdGhpcyBDUFUgeWV0LiAqLworCXNtcF9tYigpOyAvKiBUaGVvcmV0aWNhbGx5IHRoZSBhY2sgPSAwIG1pZ2h0IG5vdCBiZSBvbiB0aGlzIENQVSB5ZXQuICovCiAJYXRvbWljX2luYygmc3RvcG1hY2hpbmVfdGhyZWFkX2Fjayk7CiAKIAkvKiBTaW1wbGUgc3RhdGUgbWFjaGluZSAqLwpAQCAtNDMsMTQgKzQzLDE0IEBACiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkJaXJxc19kaXNhYmxlZCA9IDE7CiAJCQkvKiBBY2s6IGlycXMgZGlzYWJsZWQuICovCi0JCQltYigpOyAvKiBNdXN0IHJlYWQgc3RhdGUgZmlyc3QuICovCisJCQlzbXBfbWIoKTsgLyogTXVzdCByZWFkIHN0YXRlIGZpcnN0LiAqLwogCQkJYXRvbWljX2luYygmc3RvcG1hY2hpbmVfdGhyZWFkX2Fjayk7CiAJCX0gZWxzZSBpZiAoc3RvcG1hY2hpbmVfc3RhdGUgPT0gU1RPUE1BQ0hJTkVfUFJFUEFSRQogCQkJICAgJiYgIXByZXBhcmVkKSB7CiAJCQkvKiBFdmVyeW9uZSBpcyBpbiBwbGFjZSwgaG9sZCBDUFUuICovCiAJCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJCXByZXBhcmVkID0gMTsKLQkJCW1iKCk7IC8qIE11c3QgcmVhZCBzdGF0ZSBmaXJzdC4gKi8KKwkJCXNtcF9tYigpOyAvKiBNdXN0IHJlYWQgc3RhdGUgZmlyc3QuICovCiAJCQlhdG9taWNfaW5jKCZzdG9wbWFjaGluZV90aHJlYWRfYWNrKTsKIAkJfQogCQkvKiBZaWVsZCBpbiBmaXJzdCBzdGFnZTogbWlncmF0aW9uIHRocmVhZHMgbmVlZCB0bwpAQCAtNjIsNyArNjIsNyBAQAogCX0KIAogCS8qIEFjazogd2UgYXJlIGV4aXRpbmcuICovCi0JbWIoKTsgLyogTXVzdCByZWFkIHN0YXRlIGZpcnN0LiAqLworCXNtcF9tYigpOyAvKiBNdXN0IHJlYWQgc3RhdGUgZmlyc3QuICovCiAJYXRvbWljX2luYygmc3RvcG1hY2hpbmVfdGhyZWFkX2Fjayk7CiAKIAlpZiAoaXJxc19kaXNhYmxlZCkKQEAgLTc3LDcgKzc3LDcgQEAKIHN0YXRpYyB2b2lkIHN0b3BtYWNoaW5lX3NldF9zdGF0ZShlbnVtIHN0b3BtYWNoaW5lX3N0YXRlIHN0YXRlKQogewogCWF0b21pY19zZXQoJnN0b3BtYWNoaW5lX3RocmVhZF9hY2ssIDApOwotCXdtYigpOworCXNtcF93bWIoKTsKIAlzdG9wbWFjaGluZV9zdGF0ZSA9IHN0YXRlOwogCXdoaWxlIChhdG9taWNfcmVhZCgmc3RvcG1hY2hpbmVfdGhyZWFkX2FjaykgIT0gc3RvcG1hY2hpbmVfbnVtX3RocmVhZHMpCiAJCWNwdV9yZWxheCgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDQ2MmQ3OGQ1Li5mNjRlOTdjIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGNvb2tpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMjI3LDcgKzIyOCw3IEBACiAJCWVycm9yID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKG5pY2V2YWwgPCB0YXNrX25pY2UocCkgJiYgIWNhcGFibGUoQ0FQX1NZU19OSUNFKSkgeworCWlmIChuaWNldmFsIDwgdGFza19uaWNlKHApICYmICFjYW5fbmljZShwLCBuaWNldmFsKSkgewogCQllcnJvciA9IC1FQUNDRVM7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTUyNSw3ICs1MjYsNyBAQAogCWlmIChuZXdfZWdpZCAhPSBvbGRfZWdpZCkKIAl7CiAJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCXdtYigpOworCQlzbXBfd21iKCk7CiAJfQogCWlmIChyZ2lkICE9IChnaWRfdCkgLTEgfHwKIAkgICAgKGVnaWQgIT0gKGdpZF90KSAtMSAmJiBlZ2lkICE9IG9sZF9yZ2lkKSkKQEAgLTU1Niw3ICs1NTcsNyBAQAogCQlpZihvbGRfZWdpZCAhPSBnaWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZT0wOwotCQkJd21iKCk7CisJCQlzbXBfd21iKCk7CiAJCX0KIAkJY3VycmVudC0+Z2lkID0gY3VycmVudC0+ZWdpZCA9IGN1cnJlbnQtPnNnaWQgPSBjdXJyZW50LT5mc2dpZCA9IGdpZDsKIAl9CkBAIC01NjUsNyArNTY2LDcgQEAKIAkJaWYob2xkX2VnaWQgIT0gZ2lkKQogCQl7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGU9MDsKLQkJCXdtYigpOworCQkJc21wX3dtYigpOwogCQl9CiAJCWN1cnJlbnQtPmVnaWQgPSBjdXJyZW50LT5mc2dpZCA9IGdpZDsKIAl9CkBAIC01OTYsNyArNTk3LDcgQEAKIAlpZihkdW1wY2xlYXIpCiAJewogCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSAwOwotCQl3bWIoKTsKKwkJc21wX3dtYigpOwogCX0KIAljdXJyZW50LT51aWQgPSBuZXdfcnVpZDsKIAlyZXR1cm4gMDsKQEAgLTY1Myw3ICs2NTQsNyBAQAogCWlmIChuZXdfZXVpZCAhPSBvbGRfZXVpZCkKIAl7CiAJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZT0wOwotCQl3bWIoKTsKKwkJc21wX3dtYigpOwogCX0KIAljdXJyZW50LT5mc3VpZCA9IGN1cnJlbnQtPmV1aWQgPSBuZXdfZXVpZDsKIAlpZiAocnVpZCAhPSAodWlkX3QpIC0xIHx8CkBAIC03MDMsNyArNzA0LDcgQEAKIAlpZiAob2xkX2V1aWQgIT0gdWlkKQogCXsKIAkJY3VycmVudC0+bW0tPmR1bXBhYmxlID0gMDsKLQkJd21iKCk7CisJCXNtcF93bWIoKTsKIAl9CiAJY3VycmVudC0+ZnN1aWQgPSBjdXJyZW50LT5ldWlkID0gdWlkOwogCWN1cnJlbnQtPnN1aWQgPSBuZXdfc3VpZDsKQEAgLTc0OCw3ICs3NDksNyBAQAogCQlpZiAoZXVpZCAhPSBjdXJyZW50LT5ldWlkKQogCQl7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSAwOwotCQkJd21iKCk7CisJCQlzbXBfd21iKCk7CiAJCX0KIAkJY3VycmVudC0+ZXVpZCA9IGV1aWQ7CiAJfQpAQCAtNzk4LDcgKzc5OSw3IEBACiAJCWlmIChlZ2lkICE9IGN1cnJlbnQtPmVnaWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCQl3bWIoKTsKKwkJCXNtcF93bWIoKTsKIAkJfQogCQljdXJyZW50LT5lZ2lkID0gZWdpZDsKIAl9CkBAIC04NDUsNyArODQ2LDcgQEAKIAkJaWYgKHVpZCAhPSBvbGRfZnN1aWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCQl3bWIoKTsKKwkJCXNtcF93bWIoKTsKIAkJfQogCQljdXJyZW50LT5mc3VpZCA9IHVpZDsKIAl9CkBAIC04NzUsNyArODc2LDcgQEAKIAkJaWYgKGdpZCAhPSBvbGRfZnNnaWQpCiAJCXsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IDA7Ci0JCQl3bWIoKTsKKwkJCXNtcF93bWIoKTsKIAkJfQogCQljdXJyZW50LT5mc2dpZCA9IGdpZDsKIAkJa2V5X2ZzZ2lkX2NoYW5nZWQoY3VycmVudCk7CkBAIC0xNjM3LDcgKzE2MzgsNyBAQAogCXN3aXRjaCAob3B0aW9uKSB7CiAJCWNhc2UgUFJfU0VUX1BERUFUSFNJRzoKIAkJCXNpZyA9IGFyZzI7Ci0JCQlpZiAoc2lnIDwgMCB8fCBzaWcgPiBfTlNJRykgeworCQkJaWYgKCF2YWxpZF9zaWduYWwoc2lnKSkgewogCQkJCWVycm9yID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCAxODAyYTMxLi4wZGRhNzBlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC01Miw2ICs1Miw3IEBACiBjb25kX3N5c2NhbGwoc3lzX21zZ3Jjdik7CiBjb25kX3N5c2NhbGwoc3lzX21zZ2N0bCk7CiBjb25kX3N5c2NhbGwoc3lzX3NobWdldCk7Citjb25kX3N5c2NhbGwoc3lzX3NobWF0KTsKIGNvbmRfc3lzY2FsbChzeXNfc2htZHQpOwogY29uZF9zeXNjYWxsKHN5c19zaG1jdGwpOwogY29uZF9zeXNjYWxsKHN5c19tcV9vcGVuKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCA3OWRiZDkzLi43MDFkMTJjIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xOTkxLDYgKzE5OTEsOCBAQAogICogQGZpbHA6IHRoZSBmaWxlIHN0cnVjdHVyZQogICogQGJ1ZmZlcjogdGhlIHVzZXIgYnVmZmVyCiAgKiBAbGVucDogdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyCisgKiBAcHBvczogZmlsZSBwb3NpdGlvbgorICogQHBwb3M6IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlCiAgKgogICogUmVhZHMvd3JpdGVzIHVwIHRvIHRhYmxlLT5tYXhsZW4vc2l6ZW9mKHVuc2lnbmVkIGludCkgaW50ZWdlcgogICogdmFsdWVzIGZyb20vdG8gdGhlIHVzZXIgYnVmZmVyLCB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZy4gCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IGVjYjNkNjcuLjIwN2FhNGYwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkJICogTWFrZSBzdXJlIHdlIHJlYWQgdGhlIHBpZCBiZWZvcmUgcmUtcmVhZGluZyB0aGUKIAkJICogcGFyZW50IHBvaW50ZXI6CiAJCSAqLwotCQlybWIoKTsKKwkJc21wX3JtYigpOwogCQlwYXJlbnQgPSBtZS0+Z3JvdXBfbGVhZGVyLT5yZWFsX3BhcmVudDsKIAkJaWYgKG9sZCAhPSBwYXJlbnQpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggNDI2YTBjZi4uYWMyMzg0NyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTEwOCw2ICsxMDgsNyBAQAogCiBjb25maWcgREVCVUdfQlVHVkVSQk9TRQogCWJvb2wgIlZlcmJvc2UgQlVHKCkgcmVwb3J0aW5nIChhZGRzIDcwSykiIGlmIERFQlVHX0tFUk5FTCAmJiBFTUJFRERFRAorCWRlcGVuZHMgb24gQlVHCiAJZGVwZW5kcyBvbiBBUk0gfHwgQVJNMjYgfHwgTTMyUiB8fCBNNjhLIHx8IFNQQVJDMzIgfHwgU1BBUkM2NCB8fCAoWDg2ICYmICFYODZfNjQpIHx8IEZSVgogCWRlZmF1bHQgIUVNQkVEREVECiAJaGVscApkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3QuYyBiL2xpYi9rb2JqZWN0LmMKaW5kZXggNWRmODQ0MS4uOTQwNDg4MiAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3QuYworKysgYi9saWIva29iamVjdC5jCkBAIC0yMTYsMTMgKzIxNiwxMiBAQAogLyoqCiAgKglrb2JqZWN0X3NldF9uYW1lIC0gU2V0IHRoZSBuYW1lIG9mIGFuIG9iamVjdAogICoJQGtvYmo6CW9iamVjdC4KLSAqCUBuYW1lOgluYW1lLiAKKyAqCUBmbXQ6CWZvcm1hdCBzdHJpbmcgdXNlZCB0byBidWlsZCB0aGUgbmFtZQogICoKICAqCUlmIHN0cmxlbihuYW1lKSA+PSBLT0JKX05BTUVfTEVOLCB0aGVuIHVzZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAogICoJc3RyaW5nIHRoYXQgQGtvYmotPmtfbmFtZSBwb2ludHMgdG8uIE90aGVyd2lzZSwgdXNlIHRoZSBzdGF0aWMgCiAgKglAa29iai0+bmFtZSBhcnJheS4KICAqLwotCiBpbnQga29iamVjdF9zZXRfbmFtZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKIHsKIAlpbnQgZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvbGliL3J3c2VtLXNwaW5sb2NrLmMgYi9saWIvcndzZW0tc3BpbmxvY2suYwppbmRleCAyMWYwZGIyLi40MGZmZGU5IDEwMDY0NAotLS0gYS9saWIvcndzZW0tc3BpbmxvY2suYworKysgYi9saWIvcndzZW0tc3BpbmxvY2suYwpAQCAtNzYsNyArNzYsNyBAQAogCQlsaXN0X2RlbCgmd2FpdGVyLT5saXN0KTsKIAkJdHNrID0gd2FpdGVyLT50YXNrOwogCQkvKiBEb24ndCB0b3VjaCB3YWl0ZXIgYWZ0ZXIgLT50YXNrIGhhcyBiZWVuIE5VTExlZCAqLwotCQltYigpOworCQlzbXBfbWIoKTsKIAkJd2FpdGVyLT50YXNrID0gTlVMTDsKIAkJd2FrZV91cF9wcm9jZXNzKHRzayk7CiAJCXB1dF90YXNrX3N0cnVjdCh0c2spOwpAQCAtOTEsNyArOTEsNyBAQAogCiAJCWxpc3RfZGVsKCZ3YWl0ZXItPmxpc3QpOwogCQl0c2sgPSB3YWl0ZXItPnRhc2s7Ci0JCW1iKCk7CisJCXNtcF9tYigpOwogCQl3YWl0ZXItPnRhc2sgPSBOVUxMOwogCQl3YWtlX3VwX3Byb2Nlc3ModHNrKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlsaXN0X2RlbCgmd2FpdGVyLT5saXN0KTsKIAogCXRzayA9IHdhaXRlci0+dGFzazsKLQltYigpOworCXNtcF9tYigpOwogCXdhaXRlci0+dGFzayA9IE5VTEw7CiAJd2FrZV91cF9wcm9jZXNzKHRzayk7CiAJcHV0X3Rhc2tfc3RydWN0KHRzayk7CmRpZmYgLS1naXQgYS9saWIvcndzZW0uYyBiL2xpYi9yd3NlbS5jCmluZGV4IDc2NDQwODkuLjYyZmE0ZWIgMTAwNjQ0Ci0tLSBhL2xpYi9yd3NlbS5jCisrKyBiL2xpYi9yd3NlbS5jCkBAIC03NCw3ICs3NCw3IEBACiAJICovCiAJbGlzdF9kZWwoJndhaXRlci0+bGlzdCk7CiAJdHNrID0gd2FpdGVyLT50YXNrOwotCW1iKCk7CisJc21wX21iKCk7CiAJd2FpdGVyLT50YXNrID0gTlVMTDsKIAl3YWtlX3VwX3Byb2Nlc3ModHNrKTsKIAlwdXRfdGFza19zdHJ1Y3QodHNrKTsKQEAgLTExNyw3ICsxMTcsNyBAQAogCQl3YWl0ZXIgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCByd3NlbV93YWl0ZXIsIGxpc3QpOwogCQluZXh0ID0gd2FpdGVyLT5saXN0Lm5leHQ7CiAJCXRzayA9IHdhaXRlci0+dGFzazsKLQkJbWIoKTsKKwkJc21wX21iKCk7CiAJCXdhaXRlci0+dGFzayA9IE5VTEw7CiAJCXdha2VfdXBfcHJvY2Vzcyh0c2spOwogCQlwdXRfdGFza19zdHJ1Y3QodHNrKTsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA5MzU5NWMzLi5kNWZkYWUyIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0xMjMsOCArMTIzLDcgQEAKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAKLQlpZiAodW5saWtlbHkoIVBhZ2VMb2NrZWQocGFnZSkpKQotCQlQQUdFX0JVRyhwYWdlKTsKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCiAJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwpAQCAtMTM5LDcgKzEzOCwyNSBAQAogCXBhZ2UgPSBjb250YWluZXJfb2YoKHBhZ2VfZmxhZ3NfdCAqKXdvcmQsIHN0cnVjdCBwYWdlLCBmbGFncyk7CiAKIAkvKgotCSAqIEZJWE1FLCBmZXJjcmlzc2FrZS4gIFdoYXQgaXMgdGhpcyBiYXJyaWVyIGhlcmUgZm9yPworCSAqIHBhZ2VfbWFwcGluZygpIGlzIGJlaW5nIGNhbGxlZCB3aXRob3V0IFBHX2xvY2tlZCBoZWxkLgorCSAqIFNvbWUga25vd2xlZGdlIG9mIHRoZSBzdGF0ZSBhbmQgdXNlIG9mIHRoZSBwYWdlIGlzIHVzZWQgdG8KKwkgKiByZWR1Y2UgdGhlIHJlcXVpcmVtZW50cyBkb3duIHRvIGEgbWVtb3J5IGJhcnJpZXIuCisJICogVGhlIGRhbmdlciBoZXJlIGlzIG9mIGEgc3RhbGUgcGFnZV9tYXBwaW5nKCkgcmV0dXJuIHZhbHVlCisJICogaW5kaWNhdGluZyBhIHN0cnVjdCBhZGRyZXNzX3NwYWNlIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgaXQncworCSAqIGFzc29jaWF0ZWQgd2l0aCB3aGVuIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBvbmUuCisJICogQWZ0ZXIgc21wX21iKCksIGl0J3MgZWl0aGVyIHRoZSBjb3JyZWN0IHBhZ2VfbWFwcGluZygpIGZvcgorCSAqIHRoZSBwYWdlLCBvciBhbiBvbGQgcGFnZV9tYXBwaW5nKCkgYW5kIHRoZSBwYWdlJ3Mgb3duCisJICogcGFnZV9tYXBwaW5nKCkgaGFzIGdvbmUgTlVMTC4KKwkgKiBUaGUgLT5zeW5jX3BhZ2UoKSBhZGRyZXNzX3NwYWNlIG9wZXJhdGlvbiBtdXN0IHRvbGVyYXRlCisJICogcGFnZV9tYXBwaW5nKCkgZ29pbmcgTlVMTC4gQnkgYW4gYW1hemluZyBjb2luY2lkZW5jZSwKKwkgKiB0aGlzIGNvbWVzIGFib3V0IGJlY2F1c2Ugbm9uZSBvZiB0aGUgdXNlcnMgb2YgdGhlIHBhZ2UKKwkgKiBpbiB0aGUgLT5zeW5jX3BhZ2UoKSBtZXRob2RzIG1ha2UgZXNzZW50aWFsIHVzZSBvZiB0aGUKKwkgKiBwYWdlX21hcHBpbmcoKSwgbWVyZWx5IHBhc3NpbmcgdGhlIHBhZ2UgZG93biB0byB0aGUgYmFja2luZworCSAqIGRldmljZSdzIHVucGx1ZyBmdW5jdGlvbnMgd2hlbiBpdCdzIG5vbi1OVUxMLCB3aGljaCBpbiB0dXJuCisJICogaWdub3JlIGl0IGZvciBhbGwgY2FzZXMgYnV0IHN3YXAsIHdoZXJlIG9ubHkgcGFnZS0+cHJpdmF0ZSBpcworCSAqIG9mIGludGVyZXN0LiBXaGVuIHBhZ2VfbWFwcGluZygpIGRvZXMgZ28gTlVMTCwgdGhlIGVudGlyZQorCSAqIGNhbGwgc3RhY2sgZ3JhY2VmdWxseSBpZ25vcmVzIHRoZSBwYWdlIGFuZCByZXR1cm5zLgorCSAqIC0tIHdsaQogCSAqLwogCXNtcF9tYigpOwogCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CkBAIC0xNTIsOSArMTY5LDEwIEBACiAvKioKICAqIGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZSAtIHN0YXJ0IHdyaXRlYmFjayBhZ2FpbnN0IGFsbCBvZiBhIG1hcHBpbmcncwogICogZGlydHkgcGFnZXMgdGhhdCBsaWUgd2l0aGluIHRoZSBieXRlIG9mZnNldHMgPHN0YXJ0LCBlbmQ+Ci0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKLSAqIEBzdGFydDogb2Zmc2V0IGluIGJ5dGVzIHdoZXJlIHRoZSByYW5nZSBzdGFydHMKLSAqIEBlbmQgOiBvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIGVuZHMKKyAqIEBtYXBwaW5nOglhZGRyZXNzIHNwYWNlIHN0cnVjdHVyZSB0byB3cml0ZQorICogQHN0YXJ0OglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIHN0YXJ0cworICogQGVuZDoJb2Zmc2V0IGluIGJ5dGVzIHdoZXJlIHRoZSByYW5nZSBlbmRzCisgKiBAc3luY19tb2RlOgllbmFibGUgc3luY2hyb25vdXMgb3BlcmF0aW9uCiAgKgogICogSWYgc3luY19tb2RlIGlzIFdCX1NZTkNfQUxMIHRoZW4gdGhpcyBpcyBhICJkYXRhIGludGVncml0eSIgb3BlcmF0aW9uLCBhcwogICogb3Bwb3NlZCB0byBhIHJlZ3VsYXIgbWVtb3J5ICogY2xlYW5zaW5nIHdyaXRlYmFjay4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KQEAgLTUxOCw4ICs1MzYsOCBAQAogLyoqCiAgKiBmaW5kX2xvY2tfcGFnZSAtIGxvY2F0ZSwgcGluIGFuZCBsb2NrIGEgcGFnZWNhY2hlIHBhZ2UKICAqCi0gKiBAbWFwcGluZyAtIHRoZSBhZGRyZXNzX3NwYWNlIHRvIHNlYXJjaAotICogQG9mZnNldCAtIHRoZSBwYWdlIGluZGV4CisgKiBAbWFwcGluZzogdGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoCisgKiBAb2Zmc2V0OiB0aGUgcGFnZSBpbmRleAogICoKICAqIExvY2F0ZXMgdGhlIGRlc2lyZWQgcGFnZWNhY2hlIHBhZ2UsIGxvY2tzIGl0LCBpbmNyZW1lbnRzIGl0cyByZWZlcmVuY2UKICAqIGNvdW50IGFuZCByZXR1cm5zIGl0cyBhZGRyZXNzLgpAQCAtNTU4LDkgKzU3Niw5IEBACiAvKioKICAqIGZpbmRfb3JfY3JlYXRlX3BhZ2UgLSBsb2NhdGUgb3IgYWRkIGEgcGFnZWNhY2hlIHBhZ2UKICAqCi0gKiBAbWFwcGluZyAtIHRoZSBwYWdlJ3MgYWRkcmVzc19zcGFjZQotICogQGluZGV4IC0gdGhlIHBhZ2UncyBpbmRleCBpbnRvIHRoZSBtYXBwaW5nCi0gKiBAZ2ZwX21hc2sgLSBwYWdlIGFsbG9jYXRpb24gbW9kZQorICogQG1hcHBpbmc6IHRoZSBwYWdlJ3MgYWRkcmVzc19zcGFjZQorICogQGluZGV4OiB0aGUgcGFnZSdzIGluZGV4IGludG8gdGhlIG1hcHBpbmcKKyAqIEBnZnBfbWFzazogcGFnZSBhbGxvY2F0aW9uIG1vZGUKICAqCiAgKiBMb2NhdGVzIGEgcGFnZSBpbiB0aGUgcGFnZWNhY2hlLiAgSWYgdGhlIHBhZ2UgaXMgbm90IHByZXNlbnQsIGEgbmV3IHBhZ2UKICAqIGlzIGFsbG9jYXRlZCB1c2luZyBAZ2ZwX21hc2sgYW5kIGlzIGFkZGVkIHRvIHRoZSBwYWdlY2FjaGUgYW5kIHRvIHRoZSBWTSdzCkBAIC0xOTQ5LDcgKzE5NjcsNyBAQAogCQlidWYgPSBpb3YtPmlvdl9iYXNlICsgd3JpdHRlbjsKIAllbHNlIHsKIAkJZmlsZW1hcF9zZXRfbmV4dF9pb3ZlYygmY3VyX2lvdiwgJmlvdl9iYXNlLCB3cml0dGVuKTsKLQkJYnVmID0gaW92LT5pb3ZfYmFzZSArIGlvdl9iYXNlOworCQlidWYgPSBjdXJfaW92LT5pb3ZfYmFzZSArIGlvdl9iYXNlOwogCX0KIAogCWRvIHsKQEAgLTIwMDcsOSArMjAyNSwxMSBAQAogCQkJCWNvdW50IC09IHN0YXR1czsKIAkJCQlwb3MgKz0gc3RhdHVzOwogCQkJCWJ1ZiArPSBzdGF0dXM7Ci0JCQkJaWYgKHVubGlrZWx5KG5yX3NlZ3MgPiAxKSkKKwkJCQlpZiAodW5saWtlbHkobnJfc2VncyA+IDEpKSB7CiAJCQkJCWZpbGVtYXBfc2V0X25leHRfaW92ZWMoJmN1cl9pb3YsCiAJCQkJCQkJJmlvdl9iYXNlLCBzdGF0dXMpOworCQkJCQlidWYgPSBjdXJfaW92LT5pb3ZfYmFzZSArIGlvdl9iYXNlOworCQkJCX0KIAkJCX0KIAkJfQogCQlpZiAodW5saWtlbHkoY29waWVkICE9IGJ5dGVzKSkKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCBkMDEyNzY1Li40MDA5MTE1IDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC0zMjUsNiArMzI1LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCW1lbXBvb2xfZnJlZShidmVjLT5idl9wYWdlLCBwb29sKTsJCisJCWRlY19wYWdlX3N0YXRlKG5yX2JvdW5jZSk7CiAJfQogCiAJYmlvX2VuZGlvKGJpb19vcmlnLCBiaW9fb3JpZy0+Ymlfc2l6ZSwgZXJyKTsKQEAgLTQwNSw2ICs0MDYsNyBAQAogCQl0by0+YnZfcGFnZSA9IG1lbXBvb2xfYWxsb2MocG9vbCwgcS0+Ym91bmNlX2dmcCk7CiAJCXRvLT5idl9sZW4gPSBmcm9tLT5idl9sZW47CiAJCXRvLT5idl9vZmZzZXQgPSBmcm9tLT5idl9vZmZzZXQ7CisJCWluY19wYWdlX3N0YXRlKG5yX2JvdW5jZSk7CiAKIAkJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCQljaGFyICp2dG8sICp2ZnJvbTsKZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuYwppbmRleCBiMDE0ZmZlLi5jOWYzZDQ2IDEwMDY0NAotLS0gYS9tbS9tZW1wb29sLmMKKysrIGIvbW0vbWVtcG9vbC5jCkBAIC0xOTgsMzEgKzE5OCwyMiBAQAogCXZvaWQgKmVsZW1lbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQlpbnQgZ2ZwX25vd2FpdCA9IGdmcF9tYXNrICYgfihfX0dGUF9XQUlUIHwgX19HRlBfSU8pOworCWludCBnZnBfdGVtcDsKIAogCW1pZ2h0X3NsZWVwX2lmKGdmcF9tYXNrICYgX19HRlBfV0FJVCk7CisKKwlnZnBfbWFzayB8PSBfX0dGUF9OT01FTUFMTE9DOwkvKiBkb24ndCBhbGxvY2F0ZSBlbWVyZ2VuY3kgcmVzZXJ2ZXMgKi8KKwlnZnBfbWFzayB8PSBfX0dGUF9OT1JFVFJZOwkvKiBkb24ndCBsb29wIGluIF9fYWxsb2NfcGFnZXMgKi8KKwlnZnBfbWFzayB8PSBfX0dGUF9OT1dBUk47CS8qIGZhaWx1cmVzIGFyZSBPSyAqLworCisJZ2ZwX3RlbXAgPSBnZnBfbWFzayAmIH4oX19HRlBfV0FJVHxfX0dGUF9JTyk7CisKIHJlcGVhdF9hbGxvYzoKLQllbGVtZW50ID0gcG9vbC0+YWxsb2MoZ2ZwX25vd2FpdHxfX0dGUF9OT1dBUk4sIHBvb2wtPnBvb2xfZGF0YSk7CisKKwllbGVtZW50ID0gcG9vbC0+YWxsb2MoZ2ZwX3RlbXAsIHBvb2wtPnBvb2xfZGF0YSk7CiAJaWYgKGxpa2VseShlbGVtZW50ICE9IE5VTEwpKQogCQlyZXR1cm4gZWxlbWVudDsKIAotCS8qCi0JICogSWYgdGhlIHBvb2wgaXMgbGVzcyB0aGFuIDUwJSBmdWxsIGFuZCB3ZSBjYW4gcGVyZm9ybSBlZmZlY3RpdmUKLQkgKiBwYWdlIHJlY2xhaW0gdGhlbiB0cnkgaGFyZGVyIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQuCi0JICovCi0JbWIoKTsKLQlpZiAoKGdmcF9tYXNrICYgX19HRlBfRlMpICYmIChnZnBfbWFzayAhPSBnZnBfbm93YWl0KSAmJgotCQkJCShwb29sLT5jdXJyX25yIDw9IHBvb2wtPm1pbl9uci8yKSkgewotCQllbGVtZW50ID0gcG9vbC0+YWxsb2MoZ2ZwX21hc2ssIHBvb2wtPnBvb2xfZGF0YSk7Ci0JCWlmIChsaWtlbHkoZWxlbWVudCAhPSBOVUxMKSkKLQkJCXJldHVybiBlbGVtZW50OwotCX0KLQotCS8qCi0JICogS2ljayB0aGUgVk0gYXQgdGhpcyBwb2ludC4KLQkgKi8KLQl3YWtldXBfYmRmbHVzaCgwKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5sb2NrLCBmbGFncyk7CiAJaWYgKGxpa2VseShwb29sLT5jdXJyX25yKSkgewogCQllbGVtZW50ID0gcmVtb3ZlX2VsZW1lbnQocG9vbCk7CkBAIC0yMzUsOCArMjI2LDEwIEBACiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKIAkJcmV0dXJuIE5VTEw7CiAKKwkvKiBOb3cgc3RhcnQgcGVyZm9ybWluZyBwYWdlIHJlY2xhaW0gKi8KKwlnZnBfdGVtcCA9IGdmcF9tYXNrOwogCXByZXBhcmVfdG9fd2FpdCgmcG9vbC0+d2FpdCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQltYigpOworCXNtcF9tYigpOwogCWlmICghcG9vbC0+Y3Vycl9ucikKIAkJaW9fc2NoZWR1bGUoKTsKIAlmaW5pc2hfd2FpdCgmcG9vbC0+d2FpdCwgJndhaXQpOwpAQCAtMjU3LDcgKzI1MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW1iKCk7CisJc21wX21iKCk7CiAJaWYgKHBvb2wtPmN1cnJfbnIgPCBwb29sLT5taW5fbnIpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHBvb2wtPmN1cnJfbnIgPCBwb29sLT5taW5fbnIpIHsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA2ZWEyMDRjLi4wMWY5NzkzIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC05MzcsOSArOTM3LDEwIEBACiAJLyogbWxvY2sgTUNMX0ZVVFVSRT8gKi8KIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7Ci0JCWxvY2tlZCA9IG1tLT5sb2NrZWRfdm0gPDwgUEFHRV9TSElGVDsKKwkJbG9ja2VkID0gbGVuID4+IFBBR0VfU0hJRlQ7CisJCWxvY2tlZCArPSBtbS0+bG9ja2VkX3ZtOwogCQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKLQkJbG9ja2VkICs9IGxlbjsKKwkJbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKIAkJaWYgKGxvY2tlZCA+IGxvY2tfbGltaXQgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTEwMDksOCArMTAxMCw3IEBACiAJfQogCiAJLyogQ2hlY2sgYWdhaW5zdCBhZGRyZXNzIHNwYWNlIGxpbWl0LiAqLwotCWlmICgobW0tPnRvdGFsX3ZtIDw8IFBBR0VfU0hJRlQpICsgbGVuCi0JICAgID4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9BU10ucmxpbV9jdXIpCisJaWYgKCFtYXlfZXhwYW5kX3ZtKG1tLCBsZW4gPj4gUEFHRV9TSElGVCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGFjY291bnRhYmxlICYmICghKGZsYWdzICYgTUFQX05PUkVTRVJWRSkgfHwKQEAgLTE0MjEsNyArMTQyMSw3IEBACiAJc3RydWN0IHJsaW1pdCAqcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbTsKIAogCS8qIGFkZHJlc3Mgc3BhY2UgbGltaXQgdGVzdHMgKi8KLQlpZiAobW0tPnRvdGFsX3ZtICsgZ3JvdyA+IHJsaW1bUkxJTUlUX0FTXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUKQorCWlmICghbWF5X2V4cGFuZF92bShtbSwgZ3JvdykpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogU3RhY2sgbGltaXQgdGVzdCAqLwpAQCAtMTgyMyw5ICsxODIzLDEwIEBACiAJICovCiAJaWYgKG1tLT5kZWZfZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7Ci0JCWxvY2tlZCA9IG1tLT5sb2NrZWRfdm0gPDwgUEFHRV9TSElGVDsKKwkJbG9ja2VkID0gbGVuID4+IFBBR0VfU0hJRlQ7CisJCWxvY2tlZCArPSBtbS0+bG9ja2VkX3ZtOwogCQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKLQkJbG9ja2VkICs9IGxlbjsKKwkJbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKIAkJaWYgKGxvY2tlZCA+IGxvY2tfbGltaXQgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTE4NDgsOCArMTg0OSw3IEBACiAJfQogCiAJLyogQ2hlY2sgYWdhaW5zdCBhZGRyZXNzIHNwYWNlIGxpbWl0cyAqYWZ0ZXIqIGNsZWFyaW5nIG9sZCBtYXBzLi4uICovCi0JaWYgKChtbS0+dG90YWxfdm0gPDwgUEFHRV9TSElGVCkgKyBsZW4KLQkgICAgPiBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0FTXS5ybGltX2N1cikKKwlpZiAoIW1heV9leHBhbmRfdm0obW0sIGxlbiA+PiBQQUdFX1NISUZUKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAobW0tPm1hcF9jb3VudCA+IHN5c2N0bF9tYXhfbWFwX2NvdW50KQpAQCAtMjAxOSwzICsyMDE5LDE5IEBACiAJfQogCXJldHVybiBuZXdfdm1hOwogfQorCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBtYXkgZXhwYW5kIGl0cyB2bSBzcGFjZSBieSB0aGUgcGFzc2VkCisgKiBudW1iZXIgb2YgcGFnZXMKKyAqLworaW50IG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQoreworCXVuc2lnbmVkIGxvbmcgY3VyID0gbW0tPnRvdGFsX3ZtOwkvKiBwYWdlcyAqLworCXVuc2lnbmVkIGxvbmcgbGltOworCisJbGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9BU10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKworCWlmIChjdXIgKyBucGFnZXMgPiBsaW0pCisJCXJldHVybiAwOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCAwZDFjMWI5Li4wZGQ3YWNlIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMzQ3LDEwICszNDcsMTAgQEAKIAkJaWYgKGxvY2tlZCA+IGxvY2tfbGltaXQgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKIAkJCWdvdG8gb3V0OwogCX0KLQlyZXQgPSAtRU5PTUVNOwotCWlmICgoY3VycmVudC0+bW0tPnRvdGFsX3ZtIDw8IFBBR0VfU0hJRlQpICsgKG5ld19sZW4gLSBvbGRfbGVuKQotCSAgICA+IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQVNdLnJsaW1fY3VyKQorCWlmICghbWF5X2V4cGFuZF92bShjdXJyZW50LT5tbSwgKG5ld19sZW4gLSBvbGRfbGVuKSA+PiBQQUdFX1NISUZUKSkgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0FDQ09VTlQpIHsKIAkJY2hhcmdlZCA9IChuZXdfbGVuIC0gb2xkX2xlbikgPj4gUEFHRV9TSElGVDsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDZkZGQ2YTIuLjYxM2I5OWEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAKIC8qKgogICogYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZCAtIGJhbGFuY2UgZGlydHkgbWVtb3J5IHN0YXRlCi0gKiBAbWFwcGluZyAtIGFkZHJlc3Nfc3BhY2Ugd2hpY2ggd2FzIGRpcnRpZWQKKyAqIEBtYXBwaW5nOiBhZGRyZXNzX3NwYWNlIHdoaWNoIHdhcyBkaXJ0aWVkCiAgKgogICogUHJvY2Vzc2VzIHdoaWNoIGFyZSBkaXJ0eWluZyBtZW1vcnkgc2hvdWxkIGNhbGwgaW4gaGVyZSBvbmNlIGZvciBlYWNoIHBhZ2UKICAqIHdoaWNoIHdhcyBuZXdseSBkaXJ0aWVkLiAgVGhlIGZ1bmN0aW9uIHdpbGwgcGVyaW9kaWNhbGx5IGNoZWNrIHRoZSBzeXN0ZW0ncwpAQCAtNTYyLDggKzU2Miw4IEBACiAvKioKICAqIHdyaXRlX29uZV9wYWdlIC0gd3JpdGUgb3V0IGEgc2luZ2xlIHBhZ2UgYW5kIG9wdGlvbmFsbHkgd2FpdCBvbiBJL08KICAqCi0gKiBAcGFnZSAtIHRoZSBwYWdlIHRvIHdyaXRlCi0gKiBAd2FpdCAtIGlmIHRydWUsIHdhaXQgb24gd3JpdGVvdXQKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB3cml0ZQorICogQHdhaXQ6IGlmIHRydWUsIHdhaXQgb24gd3JpdGVvdXQKICAqCiAgKiBUaGUgcGFnZSBtdXN0IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIGJlIHVubG9ja2VkIHVwb24gcmV0dXJuLgogICoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBjNzNkYmJjLi5mYzFiMTA2IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC03OTksMTQgKzc5OSwxOCBAQAogCX0KIAogCS8qIFRoaXMgYWxsb2NhdGlvbiBzaG91bGQgYWxsb3cgZnV0dXJlIG1lbW9yeSBmcmVlaW5nLiAqLwotCWlmICgoKHAtPmZsYWdzICYgUEZfTUVNQUxMT0MpIHx8IHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpKSAmJiAhaW5faW50ZXJydXB0KCkpIHsKLQkJLyogZ28gdGhyb3VnaCB0aGUgem9uZWxpc3QgeWV0IGFnYWluLCBpZ25vcmluZyBtaW5zICovCi0JCWZvciAoaSA9IDA7ICh6ID0gem9uZXNbaV0pICE9IE5VTEw7IGkrKykgewotCQkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHopKQotCQkJCWNvbnRpbnVlOwotCQkJcGFnZSA9IGJ1ZmZlcmVkX3JtcXVldWUoeiwgb3JkZXIsIGdmcF9tYXNrKTsKLQkJCWlmIChwYWdlKQotCQkJCWdvdG8gZ290X3BnOworCisJaWYgKCgocC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykgfHwgdW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkpCisJCQkmJiAhaW5faW50ZXJydXB0KCkpIHsKKwkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT01FTUFMTE9DKSkgeworCQkJLyogZ28gdGhyb3VnaCB0aGUgem9uZWxpc3QgeWV0IGFnYWluLCBpZ25vcmluZyBtaW5zICovCisJCQlmb3IgKGkgPSAwOyAoeiA9IHpvbmVzW2ldKSAhPSBOVUxMOyBpKyspIHsKKwkJCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWQoeikpCisJCQkJCWNvbnRpbnVlOworCQkJCXBhZ2UgPSBidWZmZXJlZF9ybXF1ZXVlKHosIG9yZGVyLCBnZnBfbWFzayk7CisJCQkJaWYgKHBhZ2UpCisJCQkJCWdvdG8gZ290X3BnOworCQkJfQogCQl9CiAJCWdvdG8gbm9wYWdlOwogCX0KQEAgLTEzNTEsOCArMTM1NSw3IEBACiAjZGVmaW5lIE1BWF9OT0RFX0xPQUQgKG51bV9vbmxpbmVfbm9kZXMoKSkKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBub2RlX2xvYWRbTUFYX05VTU5PREVTXTsKIC8qKgotICogZmluZF9uZXh0X2Jlc3Rfbm9kZSAtIGZpbmQgdGhlIG5leHQgbm9kZSB0aGF0IHNob3VsZCBhcHBlYXIgaW4gYSBnaXZlbgotICogICAgbm9kZSdzIGZhbGxiYWNrIGxpc3QKKyAqIGZpbmRfbmV4dF9iZXN0X25vZGUgLSBmaW5kIHRoZSBuZXh0IG5vZGUgdGhhdCBzaG91bGQgYXBwZWFyIGluIGEgZ2l2ZW4gbm9kZSdzIGZhbGxiYWNrIGxpc3QKICAqIEBub2RlOiBub2RlIHdob3NlIGZhbGxiYWNrIGxpc3Qgd2UncmUgYXBwZW5kaW5nCiAgKiBAdXNlZF9ub2RlX21hc2s6IG5vZGVtYXNrX3Qgb2YgYWxyZWFkeSB1c2VkIG5vZGVzCiAgKgpAQCAtMTY3MSw2ICsxNjc0LDE4IEBACiAJCWlmIChiYXRjaCA8IDEpCiAJCQliYXRjaCA9IDE7CiAKKwkJLyoKKwkJICogQ2xhbXAgdGhlIGJhdGNoIHRvIGEgMl5uIC0gMSB2YWx1ZS4gSGF2aW5nIGEgcG93ZXIKKwkJICogb2YgMiB2YWx1ZSB3YXMgZm91bmQgdG8gYmUgbW9yZSBsaWtlbHkgdG8gaGF2ZQorCQkgKiBzdWJvcHRpbWFsIGNhY2hlIGFsaWFzaW5nIHByb3BlcnRpZXMgaW4gc29tZSBjYXNlcy4KKwkJICoKKwkJICogRm9yIGV4YW1wbGUgaWYgMiB0YXNrcyBhcmUgYWx0ZXJuYXRlbHkgYWxsb2NhdGluZworCQkgKiBiYXRjaGVzIG9mIHBhZ2VzLCBvbmUgdGFzayBjYW4gZW5kIHVwIHdpdGggYSBsb3QKKwkJICogb2YgcGFnZXMgb2Ygb25lIGhhbGYgb2YgdGhlIHBvc3NpYmxlIHBhZ2UgY29sb3JzCisJCSAqIGFuZCB0aGUgb3RoZXIgd2l0aCBwYWdlcyBvZiB0aGUgb3RoZXIgY29sb3JzLgorCQkgKi8KKwkJYmF0Y2ggPSAoMSA8PCBmbHMoYmF0Y2ggKyBiYXRjaC8yKSkgLSAxOworCiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CiAKQEAgLTE4ODEsNiArMTg5Niw3IEBACiAJImFsbG9jc3RhbGwiLAogCiAJInBncm90YXRlZCIsCisJIm5yX2JvdW5jZSIsCiB9OwogCiBzdGF0aWMgdm9pZCAqdm1zdGF0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggODg0ZDZkMS4uMzc4ZGUyMyAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtMjQzLDYgKzI0Myw0MiBAQAogfQogCiAvKgorICogQ2hlY2sgdGhhdCBAcGFnZSBpcyBtYXBwZWQgYXQgQGFkZHJlc3MgaW50byBAbW0uCisgKgorICogT24gc3VjY2VzcyByZXR1cm5zIHdpdGggbWFwcGVkIHB0ZSBhbmQgbG9ja2VkIG1tLT5wYWdlX3RhYmxlX2xvY2suCisgKi8KK3N0YXRpYyBwdGVfdCAqcGFnZV9jaGVja19hZGRyZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisKKwkvKgorCSAqIFdlIG5lZWQgdGhlIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IHVzIGZyb20gcGFnZSBmYXVsdHMsCisJICogbXVubWFwLCBmb3JrLCBldGMuLi4KKwkgKi8KKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOworCWlmIChsaWtlbHkocGdkX3ByZXNlbnQoKnBnZCkpKSB7CisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwkJaWYgKGxpa2VseShwdWRfcHJlc2VudCgqcHVkKSkpIHsKKwkJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwkJCWlmIChsaWtlbHkocG1kX3ByZXNlbnQoKnBtZCkpKSB7CisJCQkJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKTsKKwkJCQlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KCpwdGUpICYmCisJCQkJCSAgIHBhZ2VfdG9fcGZuKHBhZ2UpID09IHB0ZV9wZm4oKnB0ZSkpKQorCQkJCQlyZXR1cm4gcHRlOworCQkJCXB0ZV91bm1hcChwdGUpOworCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKK30KKworLyoKICAqIFN1YmZ1bmN0aW9ucyBvZiBwYWdlX3JlZmVyZW5jZWQ6IHBhZ2VfcmVmZXJlbmNlZF9vbmUgY2FsbGVkCiAgKiByZXBlYXRlZGx5IGZyb20gZWl0aGVyIHBhZ2VfcmVmZXJlbmNlZF9hbm9uIG9yIHBhZ2VfcmVmZXJlbmNlZF9maWxlLgogICovCkBAIC0yNTEsOSArMjg3LDYgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXBnZF90ICpwZ2Q7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGU7CiAJaW50IHJlZmVyZW5jZWQgPSAwOwogCkBAIC0yNjMsMzkgKzI5NiwxOCBAQAogCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCiAJCWdvdG8gb3V0OwogCi0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlwdGUgPSBwYWdlX2NoZWNrX2FkZHJlc3MocGFnZSwgbW0sIGFkZHJlc3MpOworCWlmICghSVNfRVJSKHB0ZSkpIHsKKwkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcodm1hLCBhZGRyZXNzLCBwdGUpKQorCQkJcmVmZXJlbmNlZCsrOwogCi0JcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7Ci0JaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlpZiAobW0gIT0gY3VycmVudC0+bW0gJiYgIWlnbm9yZV90b2tlbiAmJiBoYXNfc3dhcF90b2tlbihtbSkpCisJCQlyZWZlcmVuY2VkKys7CiAKLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwotCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdGVfcHJlc2VudCgqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7Ci0KLQlpZiAocGFnZV90b19wZm4ocGFnZSkgIT0gcHRlX3BmbigqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7Ci0KLQlpZiAocHRlcF9jbGVhcl9mbHVzaF95b3VuZyh2bWEsIGFkZHJlc3MsIHB0ZSkpCi0JCXJlZmVyZW5jZWQrKzsKLQotCWlmIChtbSAhPSBjdXJyZW50LT5tbSAmJiAhaWdub3JlX3Rva2VuICYmIGhhc19zd2FwX3Rva2VuKG1tKSkKLQkJcmVmZXJlbmNlZCsrOwotCi0JKCptYXBjb3VudCktLTsKLQotb3V0X3VubWFwOgotCXB0ZV91bm1hcChwdGUpOwotb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCSgqbWFwY291bnQpLS07CisJCXB0ZV91bm1hcChwdGUpOworCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJfQogb3V0OgogCXJldHVybiByZWZlcmVuY2VkOwogfQpAQCAtNTAyLDkgKzUxNCw2IEBACiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQlwZ2RfdCAqcGdkOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCXB0ZV90IHB0ZXZhbDsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKQEAgLTUxNSwzMCArNTI0LDkgQEAKIAlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQogCQlnb3RvIG91dDsKIAotCS8qCi0JICogV2UgbmVlZCB0aGUgcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgdXMgZnJvbSBwYWdlIGZhdWx0cywKLQkgKiBtdW5tYXAsIGZvcmssIGV0Yy4uLgotCSAqLwotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKLQlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwotCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7Ci0JaWYgKCFwdGVfcHJlc2VudCgqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7Ci0KLQlpZiAocGFnZV90b19wZm4ocGFnZSkgIT0gcHRlX3BmbigqcHRlKSkKLQkJZ290byBvdXRfdW5tYXA7CisJcHRlID0gcGFnZV9jaGVja19hZGRyZXNzKHBhZ2UsIG1tLCBhZGRyZXNzKTsKKwlpZiAoSVNfRVJSKHB0ZSkpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBJZiB0aGUgcGFnZSBpcyBtbG9jaygpZCwgd2UgY2Fubm90IHN3YXAgaXQgb3V0LgpAQCAtNjA0LDcgKzU5Miw2IEBACiAKIG91dF91bm1hcDoKIAlwdGVfdW5tYXAocHRlKTsKLW91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC03MDgsNyArNjk1LDYgQEAKIAl9CiAKIAlwdGVfdW5tYXAocHRlKTsKLQogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiB9CkBAIC04NjAsMyArODQ2LDQgQEAKIAkJcmV0ID0gU1dBUF9TVUNDRVNTOwogCXJldHVybiByZXQ7CiB9CisKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBlYzY2MGQ4Li44NDA3NDI2IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAlyZXR1cm4gY2FjaGVwLT5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldOwogfQogCi1zdGF0aWMgaW5saW5lIGttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCitzdGF0aWMgaW5saW5lIGttZW1fY2FjaGVfdCAqX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCiB7CiAJc3RydWN0IGNhY2hlX3NpemVzICpjc2l6ZXAgPSBtYWxsb2Nfc2l6ZXM7CiAKQEAgLTYwNyw2ICs2MDcsMTIgQEAKIAlyZXR1cm4gY3NpemVwLT5jc19jYWNoZXA7CiB9CiAKK2ttZW1fY2FjaGVfdCAqa21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemVfdCBzaXplLCBpbnQgZ2ZwZmxhZ3MpCit7CisJcmV0dXJuIF9fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplLCBnZnBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fZmluZF9nZW5lcmFsX2NhY2hlcCk7CisKIC8qIENhbCB0aGUgbnVtIG9ianMsIHdhc3RhZ2UsIGFuZCBieXRlcyBsZWZ0IG92ZXIgZm9yIGEgZ2l2ZW4gc2xhYiBzaXplLiAqLwogc3RhdGljIHZvaWQgY2FjaGVfZXN0aW1hdGUodW5zaWduZWQgbG9uZyBnZnBvcmRlciwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwKIAkJIGludCBmbGFncywgc2l6ZV90ICpsZWZ0X292ZXIsIHVuc2lnbmVkIGludCAqbnVtKQpAQCAtNjcyLDE0ICs2NzgsMTEgQEAKIAlpbnQgbWVtc2l6ZSA9IHNpemVvZih2b2lkKikqZW50cmllcytzaXplb2Yoc3RydWN0IGFycmF5X2NhY2hlKTsKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKm5jID0gTlVMTDsKIAotCWlmIChjcHUgIT0gLTEpIHsKLQkJa21lbV9jYWNoZV90ICpjYWNoZXA7Ci0JCWNhY2hlcCA9IGttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChtZW1zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGNhY2hlcCkKLQkJCW5jID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlcCwgY3B1X3RvX25vZGUoY3B1KSk7Ci0JfQotCWlmICghbmMpCisJaWYgKGNwdSA9PSAtMSkKIAkJbmMgPSBrbWFsbG9jKG1lbXNpemUsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJbmMgPSBrbWFsbG9jX25vZGUobWVtc2l6ZSwgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CisKIAlpZiAobmMpIHsKIAkJbmMtPmF2YWlsID0gMDsKIAkJbmMtPmxpbWl0ID0gZW50cmllczsKQEAgLTE2NjMsNyArMTY2Niw3IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX0RFU1RST1lfQllfUkNVKSkKLQkJc3luY2hyb25pemVfa2VybmVsKCk7CisJCXN5bmNocm9uaXplX3JjdSgpOwogCiAJLyogbm8gY3B1X29ubGluZSBjaGVjayByZXF1aXJlZCBoZXJlIHNpbmNlIHdlIGNsZWFyIHRoZSBwZXJjcHUKIAkgKiBhcnJheSBvbiBjcHUgb2ZmbGluZSBhbmQgc2V0IHRoaXMgdG8gTlVMTC4KQEAgLTIzNjEsNyArMjM2NCw3IEBACiAgKiBhbmQgY2FuIHNsZWVwLiBBbmQgaXQgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIGdpdmVuIG5vZGUsIHdoaWNoCiAgKiBjYW4gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UgZm9yIGNwdSBib3VuZCBzdHJ1Y3R1cmVzLgogICovCi12b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGludCBub2RlaWQpCit2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbV9jYWNoZV90ICpjYWNoZXAsIGludCBmbGFncywgaW50IG5vZGVpZCkKIHsKIAlpbnQgbG9vcDsKIAl2b2lkICpvYmpwOwpAQCAtMjM5Myw3ICsyMzk2LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjYWNoZXAtPnNwaW5sb2NrKTsKIAogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlpZiAoIWNhY2hlX2dyb3coY2FjaGVwLCBHRlBfS0VSTkVMLCBub2RlaWQpKSB7CisJCWlmICghY2FjaGVfZ3JvdyhjYWNoZXAsIGZsYWdzLCBub2RlaWQpKSB7CiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMjQzNSw2ICsyNDM4LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZSk7CiAKK3ZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBpbnQgbm9kZSkKK3sKKwlrbWVtX2NhY2hlX3QgKmNhY2hlcDsKKworCWNhY2hlcCA9IGttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KGNhY2hlcCA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBub2RlKTsKK30KK0VYUE9SVF9TWU1CT0woa21hbGxvY19ub2RlKTsKICNlbmRpZgogCiAvKioKQEAgLTI0NjIsNyArMjQ3NSwxMiBAQAogewogCWttZW1fY2FjaGVfdCAqY2FjaGVwOwogCi0JY2FjaGVwID0ga21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKKwkvKiBJZiB5b3Ugd2FudCB0byBzYXZlIGEgZmV3IGJ5dGVzIC50ZXh0IHNwYWNlOiByZXBsYWNlCisJICogX18gd2l0aCBrbWVtXy4KKwkgKiBUaGVuIGttYWxsb2MgdXNlcyB0aGUgdW5pbmxpbmVkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBpbmxpbmUKKwkgKiBmdW5jdGlvbnMuCisJICovCisJY2FjaGVwID0gX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoY2FjaGVwID09IE5VTEwpKQogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzKTsKQEAgLTI0ODksOSArMjUwNyw4IEBACiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewogCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKIAkJCWNvbnRpbnVlOwotCQlwZGF0YS0+cHRyc1tpXSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZSgKLQkJCQlrbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZSwgR0ZQX0tFUk5FTCksCi0JCQkJY3B1X3RvX25vZGUoaSkpOworCQlwZGF0YS0+cHRyc1tpXSA9IGttYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkJY3B1X3RvX25vZGUoaSkpOwogCiAJCWlmICghcGRhdGEtPnB0cnNbaV0pCiAJCQlnb3RvIHVud2luZF9vb207CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYTA2M2E5MDIuLjRmMjUxNzcgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogaW50IGFkZF90b19zd2FwKHN0cnVjdCBwYWdlICogcGFnZSkKIHsKIAlzd3BfZW50cnlfdCBlbnRyeTsKLQlpbnQgcGZfZmxhZ3M7CiAJaW50IGVycjsKIAogCWlmICghUGFnZUxvY2tlZChwYWdlKSkKQEAgLTE1NCwyOSArMTUzLDE5IEBACiAJCWlmICghZW50cnkudmFsKQogCQkJcmV0dXJuIDA7CiAKLQkJLyogUmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtaW5nCi0JCSAqIEdGUF9BVE9NSUMgYWxsb2NhdGlvbnMgdW5kZXIgUEZfTUVNQUxMT0MuICAKLQkJICogVGhleSBjYW4gY29tcGxldGVseSBleGhhdXN0IHRoZSBwYWdlIGFsbG9jYXRvci4gIAorCQkvKgorCQkgKiBSYWRpeC10cmVlIG5vZGUgYWxsb2NhdGlvbnMgZnJvbSBQRl9NRU1BTExPQyBjb250ZXh0cyBjb3VsZAorCQkgKiBjb21wbGV0ZWx5IGV4aGF1c3QgdGhlIHBhZ2UgYWxsb2NhdG9yLiBfX0dGUF9OT01FTUFMTE9DCisJCSAqIHN0b3BzIGVtZXJnZW5jeSByZXNlcnZlcyBmcm9tIGJlaW5nIGFsbG9jYXRlZC4KIAkJICoKLQkJICogU28gUEZfTUVNQUxMT0MgaXMgZHJvcHBlZCBoZXJlLiAgVGhpcyBjYXVzZXMgdGhlIHNsYWIgCi0JCSAqIGFsbG9jYXRpb25zIHRvIGZhaWwgZWFybGllciwgc28gcmFkaXgtdHJlZSBub2RlcyB3aWxsIAotCQkgKiB0aGVuIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBtZW1wb29sIHJlc2VydmVzLgotCQkgKgotCQkgKiBXZSdyZSBzdGlsbCB1c2luZyBfX0dGUF9ISUdIIGZvciByYWRpeC10cmVlIG5vZGUKLQkJICogYWxsb2NhdGlvbnMsIHNvIHNvbWUgb2YgdGhlIGVtZXJnZW5jeSBwb29scyBhcmUgYXZhaWxhYmxlLAotCQkgKiBqdXN0IG5vdCBhbGwgb2YgdGhlbS4KKwkJICogVE9ETzogdGhpcyBjb3VsZCBjYXVzZSBhIHRoZW9yZXRpY2FsIG1lbW9yeSByZWNsYWltCisJCSAqIGRlYWRsb2NrIGluIHRoZSBzd2FwIG91dCBwYXRoLgogCQkgKi8KLQotCQlwZl9mbGFncyA9IGN1cnJlbnQtPmZsYWdzOwotCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUVNQUxMT0M7Ci0KIAkJLyoKIAkJICogQWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGFuZCBtYXJrIGl0IGRpcnR5CiAJCSAqLwotCQllcnIgPSBfX2FkZF90b19zd2FwX2NhY2hlKHBhZ2UsIGVudHJ5LCBHRlBfQVRPTUlDfF9fR0ZQX05PV0FSTik7Ci0KLQkJaWYgKHBmX2ZsYWdzICYgUEZfTUVNQUxMT0MpCi0JCQljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKKwkJZXJyID0gX19hZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBlbnRyeSwKKwkJCQlHRlBfQVRPTUlDfF9fR0ZQX05PTUVNQUxMT0N8X19HRlBfTk9XQVJOKTsKIAogCQlzd2l0Y2ggKGVycikgewogCQljYXNlIDA6CQkJCS8qIFN1Y2Nlc3MgKi8KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IGM5YTYzZjAuLjYwYzg3NjQgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIC8qKgogICogaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UgLSByZW1vdmUgcmFuZ2Ugb2YgcGFnZXMgZnJvbSBhbiBhZGRyZXNzX3NwYWNlCi0gKiBAbWFwcGluZyAtIHRoZSBhZGRyZXNzX3NwYWNlCisgKiBAbWFwcGluZzogdGhlIGFkZHJlc3Nfc3BhY2UKICAqIEBzdGFydDogdGhlIHBhZ2Ugb2Zmc2V0ICdmcm9tJyB3aGljaCB0byBpbnZhbGlkYXRlCiAgKiBAZW5kOiB0aGUgcGFnZSBvZmZzZXQgJ3RvJyB3aGljaCB0byBpbnZhbGlkYXRlIChpbmNsdXNpdmUpCiAgKgpAQCAtMzIyLDcgKzMyMiw3IEBACiAKIC8qKgogICogaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIgLSByZW1vdmUgYWxsIHBhZ2VzIGZyb20gYW4gYWRkcmVzc19zcGFjZQotICogQG1hcHBpbmcgLSB0aGUgYWRkcmVzc19zcGFjZQorICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlCiAgKgogICogQW55IHBhZ2VzIHdoaWNoIGFyZSBmb3VuZCB0byBiZSBtYXBwZWQgaW50byBwYWdldGFibGVzIGFyZSB1bm1hcHBlZCBwcmlvciB0bwogICogaW52YWxpZGF0aW9uLgpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGM2MTgyZjYuLjJiZDgzZTUgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTQ3NSw2ICs0NzUsMTAgQEAKIAogRVhQT1JUX1NZTUJPTCh2bWFsbG9jKTsKIAorI2lmbmRlZiBQQUdFX0tFUk5FTF9FWEVDCisjIGRlZmluZSBQQUdFX0tFUk5FTF9FWEVDIFBBR0VfS0VSTkVMCisjZW5kaWYKKwogLyoqCiAgKgl2bWFsbG9jX2V4ZWMgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzLCBleGVjdXRhYmxlIG1lbW9yeQogICoKQEAgLTQ4OCwxMCArNDkyLDYgQEAKICAqCXVzZSBfX3ZtYWxsb2MoKSBpbnN0ZWFkLgogICovCiAKLSNpZm5kZWYgUEFHRV9LRVJORUxfRVhFQwotIyBkZWZpbmUgUEFHRV9LRVJORUxfRVhFQyBQQUdFX0tFUk5FTAotI2VuZGlmCi0KIHZvaWQgKnZtYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuIF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUxfRVhFQyk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbnByb2MuYyBiL25ldC84MDIxcS92bGFucHJvYy5jCmluZGV4IGMzMmQyN2EuLjdiMjE0Y2YgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFucHJvYy5jCisrKyBiL25ldC84MDIxcS92bGFucHJvYy5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4JLyogcmV0dXJuIGNvZGVzICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIHZlcmlmeV9hcmVhKCksIGV0Yy4gKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtKiwgc3RyKiBmdW5jdGlvbnMgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBfX2luaXRmdW5jIGV0IGFsLiAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogaHRvbnMoKSwgZXRjLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmMKaW5kZXggNmQxNmJlMy4uZTkzZTgzOCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jb21tb24uYworKysgYi9uZXQvYXRtL2NvbW1vbi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CS8qIFNPTF9TT0NLRVQgKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBlcnJvciBjb2RlcyAqLwogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogdmVyaWZ5X2FyZWEgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgkJLyogc3RydWN0IHRpbWV2YWwgKi8KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTU0MCw3ICs1NDAsNyBAQAogCQllcnJvciA9IC1FTVNHU0laRTsKIAkJZ290byBvdXQ7CiAJfQotCS8qIHZlcmlmeV9hcmVhIGlzIGRvbmUgYnkgbmV0L3NvY2tldC5jICovCisKIAllZmYgPSAoc2l6ZSszKSAmIH4zOyAvKiBhbGlnbiB0byB3b3JkIGJvdW5kYXJ5ICovCiAJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggZDFiZmQyNy4uZmNlZTA1NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0xMTUsMTAgKzExNSwxMCBAQAogCiAvKioKICAqCXNrYl9yZWN2X2RhdGFncmFtIC0gUmVjZWl2ZSBhIGRhdGFncmFtIHNrYnVmZgotICoJQHNrIC0gc29ja2V0Ci0gKglAZmxhZ3MgLSBNU0dfIGZsYWdzCi0gKglAbm9ibG9jayAtIGJsb2NraW5nIG9wZXJhdGlvbj8KLSAqCUBlcnIgLSBlcnJvciBjb2RlIHJldHVybmVkCisgKglAc2s6IHNvY2tldAorICoJQGZsYWdzOiBNU0dfIGZsYWdzCisgKglAbm9ibG9jazogYmxvY2tpbmcgb3BlcmF0aW9uPworICoJQGVycjogZXJyb3IgY29kZSByZXR1cm5lZAogICoKICAqCUdldCBhIGRhdGFncmFtIHNrYnVmZiwgdW5kZXJzdGFuZHMgdGhlIHBlZWtpbmcsIG5vbmJsb2NraW5nIHdha2V1cHMKICAqCWFuZCBwb3NzaWJsZSByYWNlcy4gVGhpcyByZXBsYWNlcyBpZGVudGljYWwgY29kZSBpbiBwYWNrZXQsIHJhdyBhbmQKQEAgLTIwMSwxMCArMjAxLDEwIEBACiAKIC8qKgogICoJc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMgLSBDb3B5IGEgZGF0YWdyYW0gdG8gYW4gaW92ZWMuCi0gKglAc2tiIC0gYnVmZmVyIHRvIGNvcHkKLSAqCUBvZmZzZXQgLSBvZmZzZXQgaW4gdGhlIGJ1ZmZlciB0byBzdGFydCBjb3B5aW5nIGZyb20KLSAqCUBpb3ZlYyAtIGlvIHZlY3RvciB0byBjb3B5IHRvCi0gKglAbGVuIC0gYW1vdW50IG9mIGRhdGEgdG8gY29weSBmcm9tIGJ1ZmZlciB0byBpb3ZlYworICoJQHNrYjogYnVmZmVyIHRvIGNvcHkKKyAqCUBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgYnVmZmVyIHRvIHN0YXJ0IGNvcHlpbmcgZnJvbQorICoJQHRvOiBpbyB2ZWN0b3IgdG8gY29weSB0bworICoJQGxlbjogYW1vdW50IG9mIGRhdGEgdG8gY29weSBmcm9tIGJ1ZmZlciB0byBpb3ZlYwogICoKICAqCU5vdGU6IHRoZSBpb3ZlYyBpcyBtb2RpZmllZCBkdXJpbmcgdGhlIGNvcHkuCiAgKi8KQEAgLTM3Nyw5ICszNzcsOSBAQAogCiAvKioKICAqCXNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjIC0gQ29weSBhbmQgY2hlY2t1bSBza2IgdG8gdXNlciBpb3ZlYy4KLSAqCUBza2IgLSBza2J1ZmYKLSAqCUBobGVuIC0gaGFyZHdhcmUgbGVuZ3RoCi0gKglAaW92ZWMgLSBpbyB2ZWN0b3IKKyAqCUBza2I6IHNrYnVmZgorICoJQGhsZW46IGhhcmR3YXJlIGxlbmd0aAorICoJQGlvdjogaW8gdmVjdG9yCiAgKiAKICAqCUNhbGxlciBfbXVzdF8gY2hlY2sgdGhhdCBza2Igd2lsbCBmaXQgdG8gdGhpcyBpb3ZlYy4KICAqCkBAIC00MjUsOSArNDI1LDkgQEAKIAogLyoqCiAgKiAJZGF0YWdyYW1fcG9sbCAtIGdlbmVyaWMgZGF0YWdyYW0gcG9sbAotICoJQGZpbGUgLSBmaWxlIHN0cnVjdAotICoJQHNvY2sgLSBzb2NrZXQKLSAqCUB3YWl0IC0gcG9sbCB0YWJsZQorICoJQGZpbGU6IGZpbGUgc3RydWN0CisgKglAc29jazogc29ja2V0CisgKglAd2FpdDogcG9sbCB0YWJsZQogICoKICAqCURhdGFncmFtIHBvbGw6IEFnYWluIHRvdGFsbHkgZ2VuZXJpYy4gVGhpcyBhbHNvIGhhbmRsZXMKICAqCXNlcXVlbmNlZCBwYWNrZXQgc29ja2V0cyBwcm92aWRpbmcgdGhlIHNvY2tldCByZWNlaXZlIHF1ZXVlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDdiZDRjZDQuLmY1ZjAwNTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0zMDkxLDcgKzMwOTEsNyBAQAogdm9pZCBzeW5jaHJvbml6ZV9uZXQodm9pZCkgCiB7CiAJbWlnaHRfc2xlZXAoKTsKLQlzeW5jaHJvbml6ZV9rZXJuZWwoKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvY29yZS9pb3ZlYy5jIGIvbmV0L2NvcmUvaW92ZWMuYwppbmRleCBkNTdhY2U5Li42NWU0YjU2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9pb3ZlYy5jCisrKyBiL25ldC9jb3JlL2lvdmVjLmMKQEAgLTMzLDcgKzMzLDcgQEAKICAqCVZlcmlmeSBpb3ZlYy4gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBpb3ZlYyBpcyBiaWcgZW5vdWdoCiAgKgl0byBob2xkIHRoZSBtZXNzYWdlIGlvdmVjLgogICoKLSAqCVNhdmUgdGltZSBub3QgZG9pbmcgdmVyaWZ5X2FyZWEuIGNvcHlfKl91c2VyIHdpbGwgbWFrZSB0aGlzIHdvcmsKKyAqCVNhdmUgdGltZSBub3QgZG9pbmcgYWNjZXNzX29rLiBjb3B5XypfdXNlciB3aWxsIG1ha2UgdGhpcyB3b3JrCiAgKglpbiBhbnkgY2FzZS4KICAqLwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggNWMyZjcyZi4uOTgxNzFkZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtNjE2LDEwICs2MTYsMTAgQEAKIAogLyoqCiAgKglza19hbGxvYyAtIEFsbCBzb2NrZXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIGhlcmUKLSAqCUBmYW1pbHkgLSBwcm90b2NvbCBmYW1pbHkKLSAqCUBwcmlvcml0eSAtIGZvciBhbGxvY2F0aW9uICglR0ZQX0tFUk5FTCwgJUdGUF9BVE9NSUMsIGV0YykKLSAqCUBwcm90IC0gc3RydWN0IHByb3RvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBzb2NrIGluc3RhbmNlCi0gKglAemVyb19pdCAtIGlmIHdlIHNob3VsZCB6ZXJvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc29jaworICoJQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CisgKglAcHJpb3JpdHk6IGZvciBhbGxvY2F0aW9uICglR0ZQX0tFUk5FTCwgJUdGUF9BVE9NSUMsIGV0YykKKyAqCUBwcm90OiBzdHJ1Y3QgcHJvdG8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmV3IHNvY2sgaW5zdGFuY2UKKyAqCUB6ZXJvX2l0OiBpZiB3ZSBzaG91bGQgemVybyB0aGUgbmV3bHkgYWxsb2NhdGVkIHNvY2sKICAqLwogc3RydWN0IHNvY2sgKnNrX2FsbG9jKGludCBmYW1pbHksIGludCBwcmlvcml0eSwgc3RydWN0IHByb3RvICpwcm90LCBpbnQgemVyb19pdCkKIHsKQEAgLTk3MCw4ICs5NzAsOCBAQAogCiAvKioKICAqIHNrX3dhaXRfZGF0YSAtIHdhaXQgZm9yIGRhdGEgdG8gYXJyaXZlIGF0IHNrX3JlY2VpdmVfcXVldWUKLSAqIHNrIC0gc29jayB0byB3YWl0IG9uCi0gKiB0aW1lbyAtIGZvciBob3cgbG9uZworICogQHNrOiAgICBzb2NrIHRvIHdhaXQgb24KKyAqIEB0aW1lbzogZm9yIGhvdyBsb25nCiAgKgogICogTm93IHNvY2tldCBzdGF0ZSBpbmNsdWRpbmcgc2stPnNrX2VyciBpcyBjaGFuZ2VkIG9ubHkgdW5kZXIgbG9jaywKICAqIGhlbmNlIHdlIG1heSBvbWl0IGNoZWNrcyBhZnRlciBqb2luaW5nIHdhaXQgcXVldWUuCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jCmluZGV4IDFlMjdhNTcuLmFjOWVkZmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N0cmVhbS5jCisrKyBiL25ldC9jb3JlL3N0cmVhbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIC8qKgogICogc2tfc3RyZWFtX3dyaXRlX3NwYWNlIC0gc3RyZWFtIHNvY2tldCB3cml0ZV9zcGFjZSBjYWxsYmFjay4KLSAqIHNrIC0gc29ja2V0CisgKiBAc2s6IHNvY2tldAogICoKICAqIEZJWE1FOiB3cml0ZSBwcm9wZXIgZGVzY3JpcHRpb24KICAqLwpAQCAtNDMsOCArNDMsOCBAQAogCiAvKioKICAqIHNrX3N0cmVhbV93YWl0X2Nvbm5lY3QgLSBXYWl0IGZvciBhIHNvY2tldCB0byBnZXQgaW50byB0aGUgY29ubmVjdGVkIHN0YXRlCi0gKiBAc2sgLSBzb2NrIHRvIHdhaXQgb24KLSAqIEB0aW1lb19wIC0gZm9yIGhvdyBsb25nIHRvIHdhaXQKKyAqIEBzazogc29jayB0byB3YWl0IG9uCisgKiBAdGltZW9fcDogZm9yIGhvdyBsb25nIHRvIHdhaXQKICAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzb2NrZXQgbG9ja2VkLgogICovCkBAIC03OSw3ICs3OSw3IEBACiAKIC8qKgogICogc2tfc3RyZWFtX2Nsb3NpbmcgLSBSZXR1cm4gMSBpZiB3ZSBzdGlsbCBoYXZlIHRoaW5ncyB0byBzZW5kIGluIG91ciBidWZmZXJzLgotICogQHNrIC0gc29ja2V0IHRvIHZlcmlmeQorICogQHNrOiBzb2NrZXQgdG8gdmVyaWZ5CiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNrX3N0cmVhbV9jbG9zaW5nKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTEwNyw4ICsxMDcsOCBAQAogCiAvKioKICAqIHNrX3N0cmVhbV93YWl0X21lbW9yeSAtIFdhaXQgZm9yIG1vcmUgbWVtb3J5IGZvciBhIHNvY2tldAotICogQHNrIC0gc29ja2V0IHRvIHdhaXQgZm9yIG1lbW9yeQotICogQHRpbWVvX3AgLSBmb3IgaG93IGxvbmcKKyAqIEBzazogc29ja2V0IHRvIHdhaXQgZm9yIG1lbW9yeQorICogQHRpbWVvX3A6IGZvciBob3cgbG9uZwogICovCiBpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcCkKIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveGRyLmMgYi9uZXQvc3VucnBjL3hkci5jCmluZGV4IDQ0ODQ5MzEuLjY3YjlmMDM1IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hkci5jCisrKyBiL25ldC9zdW5ycGMveGRyLmMKQEAgLTQ2LDkgKzQ2LDkgQEAKIAogLyoqCiAgKiB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZCAtIEVuY29kZSBmaXhlZCBsZW5ndGggb3BhcXVlIGRhdGEKLSAqIEBwIC0gcG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIFhEUiBidWZmZXIuCi0gKiBAcHRyIC0gcG9pbnRlciB0byBkYXRhIHRvIGVuY29kZSAob3IgTlVMTCkKLSAqIEBuYnl0ZXMgLSBzaXplIG9mIGRhdGEuCisgKiBAcDogcG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIFhEUiBidWZmZXIuCisgKiBAcHRyOiBwb2ludGVyIHRvIGRhdGEgdG8gZW5jb2RlIChvciBOVUxMKQorICogQG5ieXRlczogc2l6ZSBvZiBkYXRhLgogICoKICAqIENvcHkgdGhlIGFycmF5IG9mIGRhdGEgb2YgbGVuZ3RoIG5ieXRlcyBhdCBwdHIgdG8gdGhlIFhEUiBidWZmZXIKICAqIGF0IHBvc2l0aW9uIHAsIHRoZW4gYWxpZ24gdG8gdGhlIG5leHQgMzItYml0IGJvdW5kYXJ5IGJ5IHBhZGRpbmcKQEAgLTc2LDkgKzc2LDkgQEAKIAogLyoqCiAgKiB4ZHJfZW5jb2RlX29wYXF1ZSAtIEVuY29kZSB2YXJpYWJsZSBsZW5ndGggb3BhcXVlIGRhdGEKLSAqIEBwIC0gcG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIFhEUiBidWZmZXIuCi0gKiBAcHRyIC0gcG9pbnRlciB0byBkYXRhIHRvIGVuY29kZSAob3IgTlVMTCkKLSAqIEBuYnl0ZXMgLSBzaXplIG9mIGRhdGEuCisgKiBAcDogcG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIFhEUiBidWZmZXIuCisgKiBAcHRyOiBwb2ludGVyIHRvIGRhdGEgdG8gZW5jb2RlIChvciBOVUxMKQorICogQG5ieXRlczogc2l6ZSBvZiBkYXRhLgogICoKICAqIFJldHVybnMgdGhlIHVwZGF0ZWQgY3VycmVudCBYRFIgYnVmZmVyIHBvc2l0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKaW5kZXggOTU2YzE3Zi4uZDY4NDRhYyAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKQEAgLTQ4LDggKzQ4LDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIHN1cHBvcnQgZm9yIGxvYWRhYmxlIG1vZHVsZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiB2ZXJpZnlfYXJlYSgpLCBldGMuICovCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgkJLyoga21hbGxvYygpLCBrZnJlZSgpICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbSosIHN0ciogZnVuY3Rpb25zICovCiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CS8qIGh0b25zKCksIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2FsbHN5bXMuYyBiL3NjcmlwdHMva2FsbHN5bXMuYwppbmRleCAwOTBmZmRhLi5mZTExZGY4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2thbGxzeW1zLmMKKysrIGIvc2NyaXB0cy9rYWxsc3ltcy5jCkBAIC02OSw2ICs2OSw3IEBACiBzdGF0aWMgaW50IHNpemUsIGNudDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgX3N0ZXh0LCBfZXRleHQsIF9zaW5pdHRleHQsIF9laW5pdHRleHQ7CiBzdGF0aWMgaW50IGFsbF9zeW1ib2xzID0gMDsKK3N0YXRpYyBjaGFyIHN5bWJvbF9wcmVmaXhfY2hhciA9ICdcMCc7CiAKIHN0cnVjdCB0b2tlbiB7CiAJdW5zaWduZWQgY2hhciBkYXRhW01BWF9UT0tfU0laRV07CkBAIC05Myw3ICs5NCw3IEBACiBzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsKLQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBrYWxsc3ltcyBbLS1hbGwtc3ltYm9sc10gPCBpbi5tYXAgPiBvdXQuU1xuIik7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZToga2FsbHN5bXMgWy0tYWxsLXN5bWJvbHNdIFstLXN5bWJvbC1wcmVmaXg9PHByZWZpeCBjaGFyPl0gPCBpbi5tYXAgPiBvdXQuU1xuIik7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTEyLDYgKzExMyw3IEBACiByZWFkX3N5bWJvbChGSUxFICppbiwgc3RydWN0IHN5bV9lbnRyeSAqcykKIHsKIAljaGFyIHN0cls1MDBdOworCWNoYXIgKnN5bTsKIAlpbnQgcmM7CiAKIAlyYyA9IGZzY2FuZihpbiwgIiVsbHggJWMgJTQ5OXNcbiIsICZzLT5hZGRyLCAmcy0+dHlwZSwgc3RyKTsKQEAgLTEyMywyNyArMTI1LDMyIEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlzeW0gPSBzdHI7CisJLyogc2tpcCBwcmVmaXggY2hhciAqLworCWlmIChzeW1ib2xfcHJlZml4X2NoYXIgJiYgc3RyWzBdID09IHN5bWJvbF9wcmVmaXhfY2hhcikKKwkJc3ltKys7CisKIAkvKiBJZ25vcmUgbW9zdCBhYnNvbHV0ZS91bmRlZmluZWQgKD8pIHN5bWJvbHMuICovCi0JaWYgKHN0cmNtcChzdHIsICJfc3RleHQiKSA9PSAwKQorCWlmIChzdHJjbXAoc3ltLCAiX3N0ZXh0IikgPT0gMCkKIAkJX3N0ZXh0ID0gcy0+YWRkcjsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAiX2V0ZXh0IikgPT0gMCkKKwllbHNlIGlmIChzdHJjbXAoc3ltLCAiX2V0ZXh0IikgPT0gMCkKIAkJX2V0ZXh0ID0gcy0+YWRkcjsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAiX3Npbml0dGV4dCIpID09IDApCisJZWxzZSBpZiAoc3RyY21wKHN5bSwgIl9zaW5pdHRleHQiKSA9PSAwKQogCQlfc2luaXR0ZXh0ID0gcy0+YWRkcjsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAiX2Vpbml0dGV4dCIpID09IDApCisJZWxzZSBpZiAoc3RyY21wKHN5bSwgIl9laW5pdHRleHQiKSA9PSAwKQogCQlfZWluaXR0ZXh0ID0gcy0+YWRkcjsKIAllbHNlIGlmICh0b3VwcGVyKHMtPnR5cGUpID09ICdBJykKIAl7CiAJCS8qIEtlZXAgdGhlc2UgdXNlZnVsIGFic29sdXRlIHN5bWJvbHMgKi8KLQkJaWYgKHN0cmNtcChzdHIsICJfX2tlcm5lbF9zeXNjYWxsX3ZpYV9icmVhayIpICYmCi0JCSAgICBzdHJjbXAoc3RyLCAiX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjIikgJiYKLQkJICAgIHN0cmNtcChzdHIsICJfX2tlcm5lbF9zaWd0cmFtcCIpICYmCi0JCSAgICBzdHJjbXAoc3RyLCAiX19ncCIpKQorCQlpZiAoc3RyY21wKHN5bSwgIl9fa2VybmVsX3N5c2NhbGxfdmlhX2JyZWFrIikgJiYKKwkJICAgIHN0cmNtcChzeW0sICJfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMiKSAmJgorCQkgICAgc3RyY21wKHN5bSwgIl9fa2VybmVsX3NpZ3RyYW1wIikgJiYKKwkJICAgIHN0cmNtcChzeW0sICJfX2dwIikpCiAJCQlyZXR1cm4gLTE7CiAKIAl9CiAJZWxzZSBpZiAodG91cHBlcihzLT50eXBlKSA9PSAnVScgfHwKLQkJIGlzX2FybV9tYXBwaW5nX3N5bWJvbChzdHIpKQorCQkgaXNfYXJtX21hcHBpbmdfc3ltYm9sKHN5bSkpCiAJCXJldHVybiAtMTsKIAogCS8qIGluY2x1ZGUgdGhlIHR5cGUgZmllbGQgaW4gdGhlIHN5bWJvbCBuYW1lLCBzbyB0aGF0IGl0IGdldHMKQEAgLTE3Nyw2ICsxODQsMTEgQEAKIAkJIl9TREEyX0JBU0VfIiwJCS8qIHBwYyAqLwogCQlOVUxMIH07CiAJaW50IGk7CisJaW50IG9mZnNldCA9IDE7CisKKwkvKiBza2lwIHByZWZpeCBjaGFyICovCisJaWYgKHN5bWJvbF9wcmVmaXhfY2hhciAmJiAqKHMtPnN5bSArIDEpID09IHN5bWJvbF9wcmVmaXhfY2hhcikKKwkJb2Zmc2V0Kys7CiAKIAkvKiBpZiAtLWFsbC1zeW1ib2xzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gc3ltYm9scyBvdXRzaWRlIHRoZSB0ZXh0CiAJICogYW5kIGluaXR0ZXh0IHNlY3Rpb25zIGFyZSBkaXNjYXJkZWQgKi8KQEAgLTE5MCwxNyArMjAyLDE3IEBACiAJCSAqIHRoZXkgbWF5IGdldCBkcm9wcGVkIGluIHBhc3MgMiwgd2hpY2ggYnJlYWtzIHRoZSBrYWxsc3ltcwogCQkgKiBydWxlcy4KIAkJICovCi0JCWlmICgocy0+YWRkciA9PSBfZXRleHQgJiYgc3RyY21wKHMtPnN5bSArIDEsICJfZXRleHQiKSkgfHwKLQkJICAgIChzLT5hZGRyID09IF9laW5pdHRleHQgJiYgc3RyY21wKHMtPnN5bSArIDEsICJfZWluaXR0ZXh0IikpKQorCQlpZiAoKHMtPmFkZHIgPT0gX2V0ZXh0ICYmIHN0cmNtcChzLT5zeW0gKyBvZmZzZXQsICJfZXRleHQiKSkgfHwKKwkJICAgIChzLT5hZGRyID09IF9laW5pdHRleHQgJiYgc3RyY21wKHMtPnN5bSArIG9mZnNldCwgIl9laW5pdHRleHQiKSkpCiAJCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBFeGNsdWRlIHN5bWJvbHMgd2hpY2ggdmFyeSBiZXR3ZWVuIHBhc3Nlcy4gKi8KLQlpZiAoc3Ryc3RyKHMtPnN5bSArIDEsICJfY29tcGlsZWQuIikpCisJaWYgKHN0cnN0cihzLT5zeW0gKyBvZmZzZXQsICJfY29tcGlsZWQuIikpCiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgc3BlY2lhbF9zeW1ib2xzW2ldOyBpKyspCi0JCWlmKCBzdHJjbXAocy0+c3ltICsgMSwgc3BlY2lhbF9zeW1ib2xzW2ldKSA9PSAwICkKKwkJaWYoIHN0cmNtcChzLT5zeW0gKyBvZmZzZXQsIHNwZWNpYWxfc3ltYm9sc1tpXSkgPT0gMCApCiAJCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtMjI1LDkgKzIzNywxNSBAQAogCiBzdGF0aWMgdm9pZCBvdXRwdXRfbGFiZWwoY2hhciAqbGFiZWwpCiB7Ci0JcHJpbnRmKCIuZ2xvYmwgJXNcbiIsbGFiZWwpOworCWlmIChzeW1ib2xfcHJlZml4X2NoYXIpCisJCXByaW50ZigiLmdsb2JsICVjJXNcbiIsIHN5bWJvbF9wcmVmaXhfY2hhciwgbGFiZWwpOworCWVsc2UKKwkJcHJpbnRmKCIuZ2xvYmwgJXNcbiIsIGxhYmVsKTsKIAlwcmludGYoIlx0QUxHTlxuIik7Ci0JcHJpbnRmKCIlczpcbiIsbGFiZWwpOworCWlmIChzeW1ib2xfcHJlZml4X2NoYXIpCisJCXByaW50ZigiJWMlczpcbiIsIHN5bWJvbF9wcmVmaXhfY2hhciwgbGFiZWwpOworCWVsc2UKKwkJcHJpbnRmKCIlczpcbiIsIGxhYmVsKTsKIH0KIAogLyogdW5jb21wcmVzcyBhIGNvbXByZXNzZWQgc3ltYm9sLiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgYmVzdCB0YWJsZQpAQCAtNjY1LDYgKzY4MywxMyBAQAogCiAJaW5zZXJ0X3JlYWxfc3ltYm9sc19pbl90YWJsZSgpOwogCisJLyogV2hlbiB2YWxpZCBzeW1ib2wgaXMgbm90IHJlZ2lzdGVyZWQsIGV4aXQgdG8gZXJyb3IgKi8KKwlpZiAoZ29vZF9oZWFkLmxlZnQgPT0gZ29vZF9oZWFkLnJpZ2h0ICYmCisJICAgIGJhZF9oZWFkLmxlZnQgPT0gYmFkX2hlYWQucmlnaHQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyB2YWxpZCBzeW1ib2wuXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKIAlvcHRpbWl6ZV9yZXN1bHQoKTsKIH0KIApAQCAtNjcyLDkgKzY5NywyMSBAQAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlpZiAoYXJnYyA9PSAyICYmIHN0cmNtcChhcmd2WzFdLCAiLS1hbGwtc3ltYm9scyIpID09IDApCi0JCWFsbF9zeW1ib2xzID0gMTsKLQllbHNlIGlmIChhcmdjICE9IDEpCisJaWYgKGFyZ2MgPj0gMikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQkJaWYoc3RyY21wKGFyZ3ZbaV0sICItLWFsbC1zeW1ib2xzIikgPT0gMCkKKwkJCQlhbGxfc3ltYm9scyA9IDE7CisJCQllbHNlIGlmIChzdHJuY21wKGFyZ3ZbaV0sICItLXN5bWJvbC1wcmVmaXg9IiwgMTYpID09IDApIHsKKwkJCQljaGFyICpwID0gJmFyZ3ZbaV1bMTZdOworCQkJCS8qIHNraXAgcXVvdGUgKi8KKwkJCQlpZiAoKCpwID09ICciJyAmJiAqKHArMikgPT0gJyInKSB8fCAoKnAgPT0gJ1wnJyAmJiAqKHArMikgPT0gJ1wnJykpCisJCQkJCXArKzsKKwkJCQlzeW1ib2xfcHJlZml4X2NoYXIgPSAqcDsKKwkJCX0gZWxzZQorCQkJCXVzYWdlKCk7CisJCX0KKwl9IGVsc2UgaWYgKGFyZ2MgIT0gMSkKIAkJdXNhZ2UoKTsKIAogCXJlYWRfbWFwKHN0ZGluKTsKQEAgLTY4Myw0ICs3MjAsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2VybmVsLWRvYyBiL3NjcmlwdHMva2VybmVsLWRvYwppbmRleCA4YjFkYWI2Li4wODM1ZGMyIDEwMDc1NQotLS0gYS9zY3JpcHRzL2tlcm5lbC1kb2MKKysrIGIvc2NyaXB0cy9rZXJuZWwtZG9jCkBAIC01NTMsMTUgKzU1MywyMCBAQAogICAgICMgcHJpbnQgb3V0IGVhY2ggc2VjdGlvbgogICAgICRsaW5lcHJlZml4PSIgICAiOwogICAgIGZvcmVhY2ggJHNlY3Rpb24gKEB7JGFyZ3N7J3NlY3Rpb25saXN0J319KSB7Ci0JcHJpbnQgIjxyZWZzZWN0MT5cbiA8dGl0bGU+JHNlY3Rpb248L3RpdGxlPlxuIDxwYXJhPlxuIjsKKwlwcmludCAiPHJlZnNlY3QxPlxuIjsKKwlwcmludCAiPHRpdGxlPiRzZWN0aW9uPC90aXRsZT5cbiI7CiAJaWYgKCRzZWN0aW9uID1+IG0vRVhBTVBMRS9pKSB7Ci0JICAgIHByaW50ICI8ZXhhbXBsZT48cGFyYT5cbiI7CisJICAgIHByaW50ICI8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZz5cbiI7CisJfSBlbHNlIHsKKwkgICAgcHJpbnQgIjxwYXJhPlxuIjsKIAl9CiAJb3V0cHV0X2hpZ2hsaWdodCgkYXJnc3snc2VjdGlvbnMnfXskc2VjdGlvbn0pOwogCWlmICgkc2VjdGlvbiA9fiBtL0VYQU1QTEUvaSkgewotCSAgICBwcmludCAiPC9wYXJhPjwvZXhhbXBsZT5cbiI7CisJICAgIHByaW50ICI8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPlxuIjsKKwl9IGVsc2UgeworCSAgICBwcmludCAiPC9wYXJhPlxuIjsKIAl9Ci0JcHJpbnQgIiA8L3BhcmE+XG48L3JlZnNlY3QxPlxuIjsKKwlwcmludCAiPC9yZWZzZWN0MT5cbiI7CiAgICAgfQogfQogCkBAIC01NzYsOCArNTgxLDE0IEBACiAgICAgJGlkID1+IHMvW15BLVphLXowLTldLy0vZzsKIAogICAgIHByaW50ICI8cmVmZW50cnk+XG4iOworICAgIHByaW50ICI8cmVmZW50cnlpbmZvPlxuIjsKKyAgICBwcmludCAiIDx0aXRsZT5MSU5VWDwvdGl0bGU+XG4iOworICAgIHByaW50ICIgPHByb2R1Y3RuYW1lPktlcm5lbCBIYWNrZXJzIE1hbnVhbDwvcHJvZHVjdG5hbWU+XG4iOworICAgIHByaW50ICIgPGRhdGU+JG1hbl9kYXRlPC9kYXRlPlxuIjsKKyAgICBwcmludCAiPC9yZWZlbnRyeWluZm8+XG4iOwogICAgIHByaW50ICI8cmVmbWV0YT5cbiI7Ci0gICAgcHJpbnQgIjxyZWZlbnRyeXRpdGxlPjxwaHJhc2UgaWQ9XCIkaWRcIj4iLiRhcmdzeydmdW5jdGlvbid9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPiIuJGFyZ3N7J2Z1bmN0aW9uJ30uIjwvcGhyYXNlPjwvcmVmZW50cnl0aXRsZT5cbiI7CisgICAgcHJpbnQgIiA8bWFudm9sbnVtPjk8L21hbnZvbG51bT5cbiI7CiAgICAgcHJpbnQgIjwvcmVmbWV0YT5cbiI7CiAgICAgcHJpbnQgIjxyZWZuYW1lZGl2PlxuIjsKICAgICBwcmludCAiIDxyZWZuYW1lPiIuJGFyZ3N7J2Z1bmN0aW9uJ30uIjwvcmVmbmFtZT5cbiI7CkBAIC02MDcsNyArNjE4LDcgQEAKIAkgICAgfQogCX0KICAgICB9IGVsc2UgewotCXByaW50ICIgIDx2b2lkPlxuIjsKKwlwcmludCAiICA8dm9pZC8+XG4iOwogICAgIH0KICAgICBwcmludCAiICA8L2Z1bmNwcm90b3R5cGU+PC9mdW5jc3lub3BzaXM+XG4iOwogICAgIHByaW50ICI8L3JlZnN5bm9wc2lzZGl2PlxuIjsKQEAgLTY0Niw4ICs2NTcsMTQgQEAKICAgICAkaWQgPX4gcy9bXkEtWmEtejAtOV0vLS9nOwogCiAgICAgcHJpbnQgIjxyZWZlbnRyeT5cbiI7CisgICAgcHJpbnQgIjxyZWZlbnRyeWluZm8+XG4iOworICAgIHByaW50ICIgPHRpdGxlPkxJTlVYPC90aXRsZT5cbiI7CisgICAgcHJpbnQgIiA8cHJvZHVjdG5hbWU+S2VybmVsIEhhY2tlcnMgTWFudWFsPC9wcm9kdWN0bmFtZT5cbiI7CisgICAgcHJpbnQgIiA8ZGF0ZT4kbWFuX2RhdGU8L2RhdGU+XG4iOworICAgIHByaW50ICI8L3JlZmVudHJ5aW5mbz5cbiI7CiAgICAgcHJpbnQgIjxyZWZtZXRhPlxuIjsKLSAgICBwcmludCAiPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPiIuJGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0cnVjdCd9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPiIuJGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0cnVjdCd9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPG1hbnZvbG51bT45PC9tYW52b2xudW0+XG4iOwogICAgIHByaW50ICI8L3JlZm1ldGE+XG4iOwogICAgIHByaW50ICI8cmVmbmFtZWRpdj5cbiI7CiAgICAgcHJpbnQgIiA8cmVmbmFtZT4iLiRhcmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iPC9yZWZuYW1lPlxuIjsKQEAgLTcyNCw4ICs3NDEsMTQgQEAKICAgICAkaWQgPX4gcy9bXkEtWmEtejAtOV0vLS9nOwogCiAgICAgcHJpbnQgIjxyZWZlbnRyeT5cbiI7CisgICAgcHJpbnQgIjxyZWZlbnRyeWluZm8+XG4iOworICAgIHByaW50ICIgPHRpdGxlPkxJTlVYPC90aXRsZT5cbiI7CisgICAgcHJpbnQgIiA8cHJvZHVjdG5hbWU+S2VybmVsIEhhY2tlcnMgTWFudWFsPC9wcm9kdWN0bmFtZT5cbiI7CisgICAgcHJpbnQgIiA8ZGF0ZT4kbWFuX2RhdGU8L2RhdGU+XG4iOworICAgIHByaW50ICI8L3JlZmVudHJ5aW5mbz5cbiI7CiAgICAgcHJpbnQgIjxyZWZtZXRhPlxuIjsKLSAgICBwcmludCAiPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPmVudW0gIi4kYXJnc3snZW51bSd9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPmVudW0gIi4kYXJnc3snZW51bSd9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPG1hbnZvbG51bT45PC9tYW52b2xudW0+XG4iOwogICAgIHByaW50ICI8L3JlZm1ldGE+XG4iOwogICAgIHByaW50ICI8cmVmbmFtZWRpdj5cbiI7CiAgICAgcHJpbnQgIiA8cmVmbmFtZT5lbnVtICIuJGFyZ3N7J2VudW0nfS4iPC9yZWZuYW1lPlxuIjsKQEAgLTc4NCw4ICs4MDcsMTQgQEAKICAgICAkaWQgPX4gcy9bXkEtWmEtejAtOV0vLS9nOwogCiAgICAgcHJpbnQgIjxyZWZlbnRyeT5cbiI7CisgICAgcHJpbnQgIjxyZWZlbnRyeWluZm8+XG4iOworICAgIHByaW50ICIgPHRpdGxlPkxJTlVYPC90aXRsZT5cbiI7CisgICAgcHJpbnQgIiA8cHJvZHVjdG5hbWU+S2VybmVsIEhhY2tlcnMgTWFudWFsPC9wcm9kdWN0bmFtZT5cbiI7CisgICAgcHJpbnQgIiA8ZGF0ZT4kbWFuX2RhdGU8L2RhdGU+XG4iOworICAgIHByaW50ICI8L3JlZmVudHJ5aW5mbz5cbiI7CiAgICAgcHJpbnQgIjxyZWZtZXRhPlxuIjsKLSAgICBwcmludCAiPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPnR5cGVkZWYgIi4kYXJnc3sndHlwZWRlZid9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1cIiRpZFwiPnR5cGVkZWYgIi4kYXJnc3sndHlwZWRlZid9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOworICAgIHByaW50ICIgPG1hbnZvbG51bT45PC9tYW52b2xudW0+XG4iOwogICAgIHByaW50ICI8L3JlZm1ldGE+XG4iOwogICAgIHByaW50ICI8cmVmbmFtZWRpdj5cbiI7CiAgICAgcHJpbnQgIiA8cmVmbmFtZT50eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iPC9yZWZuYW1lPlxuIjsKQEAgLTE0NjUsNiArMTQ5NCw4IEBACiAKICAgICAkcHJvdG90eXBlID1+IHMvXnN0YXRpYyArLy87CiAgICAgJHByb3RvdHlwZSA9fiBzL15leHRlcm4gKy8vOworICAgICRwcm90b3R5cGUgPX4gcy9eZmFzdGNhbGwgKy8vOworICAgICRwcm90b3R5cGUgPX4gcy9eYXNtbGlua2FnZSArLy87CiAgICAgJHByb3RvdHlwZSA9fiBzL15pbmxpbmUgKy8vOwogICAgICRwcm90b3R5cGUgPX4gcy9eX19pbmxpbmVfXyArLy87CiAgICAgJHByb3RvdHlwZSA9fiBzL14jZGVmaW5lICsvLzsgI2FrIGFkZGVkCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VtYW4gYi9zY3JpcHRzL21ha2VtYW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRiM2FmNjQuLjAwMDAwMDAKLS0tIGEvc2NyaXB0cy9tYWtlbWFuCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotCi11c2Ugc3RyaWN0OwotCi0jIyBDb3B5cmlnaHQgKEMpIE1pY2hhZWwgU3RpbGwgKG1pa2FsQHN0aWxsaHEuY29tKQotIyMgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMCi0jIwotIyMgQSBzY3JpcHQgdG8gbWFrZSBvciBpbnN0YWxsIHRoZSBtYW5wYWdlcyBleHRyYWN0ZWQgYnkgc3BsaXQtbWFuCi0jIwotIyMgQXJndWVtZW50czogJDEgLS0gdGhlIHdvcmQgImNvbnZlcnQiIG9yICJpbnN0YWxsIgotIyMgICAgICAgICAgICAgJDIgLS0gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBTR01MIGZpbGVzIGZvciB0aGUgbWFucGFnZXMKLSMjICAgICAgICAgICAgICQzIC0tIHRoZSBmaWxlbmFtZSB3aGljaCBjb250YWluZWQgdGhlIHNnbWxkb2Mgb3V0cHV0Ci0jIyAgICAgICAgICAgICAgICAgICAgIChJIG5lZWQgdGhpcyBzbyBJIGtub3cgd2hpY2ggbWFucGFnZXMgdG8gY29udmVydCkKLQotbXkoJExJU1RJTkcsICRHRU5FUkFURUQsICRJTlBVVCwgJE9VVFBVVCwgJGZyb250LCAkbW9kZSwgJGZpbGVuYW1lLCAkdG1wZGlyKTsKLQotaWYoJEFSR1ZbMF0gZXEgIiIpewotICBkaWUgIlVzYWdlOiBtYWtlbWFuIFtjb252ZXJ0IHwgaW5zdGFsbF0gPGRpcj4gPGZpbGU+XG4iOwotfQotCi1pZiggISAtZCAiJEFSR1ZbMV0iICl7Ci0gIGRpZSAiT3V0cHV0IGRpcmVjdG9yeSBcIiRBUkdWWzFdXCIgZG9lcyBub3QgZXhpc3RcbiI7Ci19Ci0KLWlmKCRFTlZ7IlRNUERJUiJ9IG5lICIiKXsKLSAgJHRtcGRpciA9ICRFTlZ7IlRNUERJUiJ9OwotfQotZWxzZXsKLSAgJHRtcGRpciA9ICIvdG1wIjsKLX0KLQotaWYoJEFSR1ZbMF0gZXEgImNvbnZlcnQiKXsKLSAgb3BlbiBMSVNUSU5HLCAiZ3JlcCBcIjxyZWZlbnRyeXRpdGxlPlwiICRBUkdWWzJdIHwiOwotICB3aGlsZSg8TElTVElORz4pewotICAgIHMvPFwvLiokLy87Ci0gICAgcy9eLio+Ly87Ci0gICAgcy9cLnNnbWwvLzsKLSAgICBzL3N0cnVjdCAvLzsKLSAgICBzL3R5cGVkZWYgLy87Ci0KLSAgICBjaG9tcDsKLSAgICAkZmlsZW5hbWUgPSAkXzsKLSAgICBwcmludCAiUHJvY2Vzc2luZyAkZmlsZW5hbWVcbiI7Ci0KLSAgICAjIE9wZW4gdGhlIGlucHV0IGZpbGUgdG8gZXh0cmFjdCB0aGUgZnJvbnQgbWF0dGVyLCBnZW5lcmF0ZSB0aGUgbWFuIHBhZ2UsCi0gICAgIyBhbmQgb3BlbiBpdCwgYW5kIHRoZSByZWFycmFuZ2UgZXZlcnl0aGluZyB1bnRpbCBpdCBpcyBoYXBweQotICAgIG9wZW4gSU5QVVQsICI8ICRBUkdWWzFdLyRmaWxlbmFtZS5zZ21sIjsKLSAgICAkZnJvbnQgPSAiIjsKLSAgICAkbW9kZSA9IDA7Ci0KLSAgICAjIFRoZSBtb2RlcyB1c2VkIGhlcmUgYXJlOgotICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMAotICAgICMgPCEtLSBCRUdJTkZST05UVEFHIC0tPgotICAgICMgPCEtLSA8Ym9va2luZm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMQotICAgICMgPCEtLSAgIDxsZWdhbG5vdGljZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gMgotICAgICMgPCEtLSAgICAgLi4uR1BMIG9yIHdoYXRldmVyLi4uCi0gICAgIyA8IS0tICAgPC9sZWdhbG5vdGljZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSA0Ci0gICAgIyA8IS0tIDwvYm9va2luZm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAzCi0gICAgIyA8IS0tIEVOREZST05UVEFHIC0tPgotICAgICMKLSAgICAjIC4uLmRvY28uLi4KLQotICAgICMgSSBrbm93IHRoYXQgc29tZSBvZiB0aGUgaWYgc3RhdGVtZW50cyBpbiB0aGlzIHdoaWxlIGxvb3AgYXJlIGluIGEgZnVubnkKLSAgICAjIG9yZGVyLCBidXQgdGhhdCBpcyBkZWxpYmVyYXRlLi4uCi0gICAgd2hpbGUoPElOUFVUPil7Ci0gICAgICBpZigkbW9kZSA+IDApewotCXMvPCEtLSAvLzsKLQlzLyAtLT4vLzsKLQlzLzxkb2NpbmZvPi8vaTsKLQlzPFwvZG9jaW5mbz4vL2k7Ci0Jcy9eWyBcdF0qLy9pOwotICAgICAgfQotCi0gICAgICBpZigkbW9kZSA9PSAyKXsKLQlpZigvPHBhcmE+L2kpewotCX0KLQllbHNpZigvPFwvcGFyYT4vaSl7Ci0JICAkZnJvbnQgPSAiJGZyb250LlxcXCIgXG4iOwotCX0KLQllbHNpZigvPFwvbGVnYWxub3RpY2U+L2kpewotCSAgJG1vZGUgPSA0OwotCX0KLQllbHNpZigvXlsgXHRdKiQvKXsKLQl9Ci0JZWxzZXsKLQkgICRmcm9udCA9ICIkZnJvbnQuXFxcIiAgICAgJF8iOwotCX0KLSAgICAgIH0KLQotICAgICAgaWYoJG1vZGUgPT0gMSl7Ci0JaWYoLzx0aXRsZT4oLiopPFwvdGl0bGU+L2kpewotCSAgJGZyb250ID0gIiRmcm9udC5cXFwiIFRoaXMgZG9jdW1lbnRhdGlvbiB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIGJvb2sgdGl0bGVkIFwiJDFcIiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsIHNvdXJjZS5cbi5cXFwiIFxuIjsKLQl9Ci0JZWxzaWYoLzxsZWdhbG5vdGljZT4vaSl7Ci0JICAkZnJvbnQgPSAiJGZyb250LlxcXCIgVGhpcyBkb2N1bWVudGF0aW9uIGNvbWVzIHdpdGggdGhlIGZvbGxvd2luZyBsZWdhbCBub3RpY2U6XG4uXFxcIiBcbiI7Ci0JICAkbW9kZSA9IDI7Ci0JfQotCi0JZWxzaWYoLzxhdXRob3I+L2kpewotCSAgJGZyb250ID0gIiRmcm9udC5cXFwiIERvY3VtZW50YXRpb24gYnk6ICI7Ci0JfQotCWVsc2lmKC88Zmlyc3RuYW1lPiguKik8XC9maXJzdG5hbWU+L2kpewotCSAgJGZyb250ID0gIiRmcm9udCQxICI7Ci0JfQotCWVsc2lmKC88c3VybmFtZT4oLiopPFwvc3VybmFtZT4vaSl7Ci0JICAkZnJvbnQgPSAiJGZyb250JDEgIjsKLQl9Ci0JZWxzaWYoLzxlbWFpbD4oLiopPFwvZW1haWw+L2kpewotCSAgJGZyb250ID0gIiRmcm9udCgkMSkiOwotCX0KLQllbHNpZigvXC9hdXRob3I+L2kpewotCSAgJGZyb250ID0gIiRmcm9udFxuIjsKLQl9Ci0KLQllbHNpZigvPGNvcHlyaWdodD4vaSl7Ci0JICAkZnJvbnQgPSAiJGZyb250LlxcXCIgRG9jdW1lbnRhdGlvbiBjb3B5cmlnaHQ6ICI7Ci0JfQotCWVsc2lmKC88aG9sZGVyPiguKik8XC9ob2xkZXI+L2kpewotCSAgJGZyb250ID0gIiRmcm9udCQxICI7Ci0JfQotCWVsc2lmKC88eWVhcj4oLiopPFwveWVhcj4vaSl7Ci0JICAkZnJvbnQgPSAiJGZyb250JDEgIjsKLQl9Ci0JZWxzaWYoL1wvY29weXJpZ2h0Pi9pKXsKLQkgICRmcm9udCA9ICIkZnJvbnRcbiI7Ci0JfQotCi0JZWxzaWYoL15bIFx0XSokLwotCSAgICAgIHx8IC88YWZmaWxpYXRpb24+L2kKLQkgICAgICB8fCAvPFwvYWZmaWxpYXRpb24+L2kKLQkgICAgICB8fCAvPGFkZHJlc3M+L2kKLQkgICAgICB8fCAvPFwvYWRkcmVzcz4vaQotCSAgICAgIHx8IC88YXV0aG9yZ3JvdXA+L2kKLQkgICAgICB8fCAvPFwvYXV0aG9yZ3JvdXA+L2kKLQkgICAgICB8fCAvPFwvbGVnYWxub3RpY2U+L2kKLSAgICAgICAgICAgICAgfHwgLzxkYXRlPi9pCi0gICAgICAgICAgICAgIHx8IC88XC9kYXRlPi9pCi0gICAgICAgICAgICAgIHx8IC88ZWRpdGlvbj4vaQotICAgICAgICAgICAgICB8fCAvPFwvZWRpdGlvbj4vaQotCSAgICAgIHx8IC88cHViZGF0ZT4vaQotCSAgICAgIHx8IC88XC9wdWJkYXRlPi9pKXsKLQl9Ci0JZWxzZXsKLQkgIHByaW50ICJVbmtub3duIHRhZyBpbiBtYW5wYWdlIGNvbnZlcnNpb246ICRfIjsKLQkgIH0KLSAgICAgIH0KLQotICAgICAgaWYoJG1vZGUgPT0gMCl7Ci0JaWYoLzxib29raW5mbz4vaSl7Ci0JICAkbW9kZSA9IDE7Ci0JfQotICAgICAgfQotCi0gICAgICBpZigkbW9kZSA9PSA0KXsKLQlpZigvPFwvYm9va2luZm8+L2kpewotCSAgJG1vZGUgPSAzOwotCX0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2xvc2UgSU5QVVQ7Ci0KLSAgICBzeXN0ZW0oImNkICRBUkdWWzFdOyBkb2Nib29rMm1hbiAkZmlsZW5hbWUuc2dtbDsgbXYgJGZpbGVuYW1lLjkgJHRtcGRpci8kJC45XG4iKTsKLSAgICBvcGVuIEdFTkVSQVRFRCwgIjwgJHRtcGRpci8kJC45IjsKLSAgICBvcGVuIE9VVFBVVCwgIj4gJEFSR1ZbMV0vJGZpbGVuYW1lLjkiOwotCi0gICAgcHJpbnQgT1VUUFVUICIkZnJvbnQiOwotICAgIHByaW50IE9VVFBVVCAiLlxcXCIgRm9yIGNvbW1lbnRzIG9uIHRoZSBmb3JtYXR0aW5nIG9mIHRoaXMgbWFucGFnZSwgcGxlYXNlIGNvbnRhY3QgTWljaGFlbCBTdGlsbCA8bWlrYWxcQHN0aWxsaHEuY29tPlxuXG4iOwotICAgIHdoaWxlKDxHRU5FUkFURUQ+KXsKLSAgICAgIHByaW50IE9VVFBVVCAiJF8iOwotICAgIH0KLSAgICBjbG9zZSBPVVRQVVQ7Ci0gICAgY2xvc2UgR0VORVJBVEVEOwotCi0gICAgc3lzdGVtKCJnemlwIC1mICRBUkdWWzFdLyRmaWxlbmFtZS45XG4iKTsKLSAgICB1bmxpbmsoIiR0bXBkaXIvJCQuOSIpOwotICB9Ci19Ci1lbHNpZigkQVJHVlswXSBlcSAiaW5zdGFsbCIpewotICBzeXN0ZW0oIm1rZGlyIC1wIC91c3IvbG9jYWwvbWFuL21hbjkvOyBpbnN0YWxsICRBUkdWWzFdLyouOS5neiAvdXNyL2xvY2FsL21hbi9tYW45LyIpOwotfQotZWxzZXsKLSAgZGllICJVc2FnZTogbWFrZW1hbiBbY29udmVydCB8IGluc3RhbGxdIDxkaXI+IDxmaWxlPlxuIjsKLX0KLQotcHJpbnQgIkRvbmVcbiI7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3NwbGl0LW1hbiBiL3NjcmlwdHMvc3BsaXQtbWFuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMzg5N2ZlLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvc3BsaXQtbWFuCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotCi11c2Ugc3RyaWN0OwotCi0jIyBDb3B5cmlnaHQgKEMpIE1pY2hhZWwgU3RpbGwgKG1pa2FsQHN0aWxsaHEuY29tKQotIyMgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMCi0jIwotIyMgSG9vbiB0aHJvdWdoIHRoZSBzcGVjaWZpZWQgRG9jQm9vayBTR01MIGZpbGUsIGFuZCBzcGxpdCBvdXQgdGhlCi0jIyBtYW4gcGFnZXMuIFRoZXNlIGNhbiB0aGVuIGJlIHByb2Nlc3NlZCBpbnRvIGdyb2ZmIGZvcm1hdCwgYW5kCi0jIyBpbnN0YWxsZWQgaWYgZGVzaXJlZC4uLgotIyMKLSMjIEFyZ3VlbWVudHM6ICQxIC0tIHRoZSBuYW1lIG9mIHRoZSBzZ21sIGZpbGUKLSMjICAgICAgICAgICAgICQyIC0tIHRoZSBkaXJlY3RvcnkgdG8gcHV0IHRoZSBnZW5lcmF0ZWQgU0dNTCBmaWxlcyBpbgotIyMgICAgICAgICAgICAgJDMgLS0ga2VybmVsIHZlcnNpb24KLQotbXkoJFNHTUwsICRSRUYsICRmcm9udCwgJHJlZmRhdGEsICRtb2RlLCAkZmlsZW5hbWUpOwotCi1pZigoJEFSR1ZbMF0gZXEgIiIpIHx8ICgkQVJHVlsxXSBlcSAiIikgfHwgKCRBUkdWWzJdIGVxICIiKSl7Ci0gIGRpZSAiVXNhZ2U6IHNwbGl0LW1hbiA8c2dtbCBmaWxlPiA8b3V0cHV0IGRpcj4gPGtlcm5lbCB2ZXJzaW9uPlxuIjsKLX0KLQotb3BlbiBTR01MLCAiPCAkQVJHVlswXSIgb3IgZGllICJDb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwiJEFSR1ZbMF1cIlxuIjsKLWlmKCAhIC1kICIkQVJHVlsxXSIgKXsKLSAgZGllICJPdXRwdXQgZGlyZWN0b3J5IFwiJEFSR1ZbMV1cIiBkb2VzIG5vdCBleGlzdFxuIjsKLX0KLQotIyBQb3NzaWJsZSBtb2RlczoKLSMgICAwOiBMb29raW5nIGZvciBpbnB1dCBJIGNhcmUgYWJvdXQKLSMgICAxOiBJbnNpZGUgYm9vayBmcm9udCBtYXR0ZXIKLSMgICAyOiBJbnNpZGUgYSByZWZlbnRyeQotIyAgIDM6IEluc2lkZSBhIHJlZmVudHJ5LCBhbmQgd2Uga25vdyB0aGUgZmlsZW5hbWUKLQotJG1vZGUgPSAwOwotJHJlZmRhdGEgPSAiIjsKLSRmcm9udCA9ICIiOwotd2hpbGUoPFNHTUw+KXsKLSAgIyBTdGFydGluZyBtb2RlcwotICBpZigvPGJvb2tpbmZvPi8gfHwgLzxkb2NpbmZvPi8pewotICAgICRtb2RlID0gMTsKLSAgfQotICBlbHNpZigvPHJlZmVudHJ5Pi8pewotICAgICRtb2RlID0gMjsKLSAgfQotICBlbHNpZigvPHJlZmVudHJ5dGl0bGU+PHBocmFzZVtePl0qPihbXjxdKik8LiokLyl7Ci0gICAgJG1vZGUgPSAzOwotICAgICRmaWxlbmFtZSA9ICQxOwotCi0gICAgJGZpbGVuYW1lID1+IHMvc3RydWN0IC8vOwotICAgICRmaWxlbmFtZSA9fiBzL3R5cGVkZWYgLy87Ci0KLSAgICBwcmludCAiRm91bmQgbWFucGFnZSBmb3IgJGZpbGVuYW1lXG4iOwotICAgIG9wZW4gUkVGLCAiPiAkQVJHVlsxXS8kZmlsZW5hbWUuc2dtbCIgb3IKLSAgICAgIGRpZSAiQ291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiRBUkdWWzFdLyRmaWxlbmFtZS5zZ21sXCI6ICQhXG4iOwotICAgIHByaW50IFJFRiA8PEVPRjsKLTwhRE9DVFlQRSByZWZlbnRyeSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+Ci0KLTwhLS0gQkVHSU5GUk9OVFRBRzogVGhlIGZvbGxvd2luZyBpcyBmcm9udCBtYXR0ZXIgZm9yIHRoZSBwYXJlbnQgYm9vayAtLT4KLSRmcm9udAotPCEtLSBFTkRGUk9OVFRBRzogRW5kIGZyb250IG1hdHRlciAtLT4KLQotJHJlZmRhdGEKLUVPRgotICAgICRyZWZkYXRhID0gIiI7Ci0gIH0KLQotICAjIEV4dHJhY3Rpb24KLSAgaWYoJG1vZGUgPT0gMSl7Ci0gICAgY2hvbXAgJF87Ci0gICAgJGZyb250ID0gIiRmcm9udDwhLS0gJF8gLS0+XG4iOwotICB9Ci0gIGVsc2lmKCRtb2RlID09IDIpewotICAgICRyZWZkYXRhID0gIiRyZWZkYXRhJF8iOwotICB9Ci0gIGVsc2lmKCRtb2RlID09IDMpewotICAgICMgVGhlcmUgYXJlIHNvbWUgZml4dXBzIHdoaWNoIG5lZWQgdG8gYmUgYXBwbGllZAotICAgIGlmKC88XC9yZWZtZXRhPi8pewotICAgICAgcHJpbnQgUkVGICI8bWFudm9sbnVtPjk8L21hbnZvbG51bT5cbiI7Ci0gICAgfQotICAgIGlmKC88XC9yZWZlbnRyeT4vKXsKLSAgICAgIHByaW50IFJFRiA8PEVPRjsKLTxyZWZzZWN0MT48dGl0bGU+QWJvdXQgdGhpcyBkb2N1bWVudDwvdGl0bGU+Ci08cGFyYT4KLVRoaXMgZG9jdW1lbnRhdGlvbiB3YXMgZ2VuZXJhdGVkIHdpdGgga2VybmVsIHZlcnNpb24gJEFSR1ZbMl0uCi08L3BhcmE+Ci08L3JlZnNlY3QxPgotRU9GCi0gICAgfQotCi0gICAgIyBGb3Igc29tZSByZWFzb24sIHdlIHRpdGxlIHRoZSBzeW5vcHNpcyB0d2ljZSBpbiB0aGUgbWFpbiBEb2NCb29rCi0gICAgaWYoISAvPHRpdGxlPlN5bm9wc2lzPFwvdGl0bGU+Lyl7Ci0gICAgICBpZigvPHJlZmVudHJ5dGl0bGU+Lyl7Ci0Jcy9zdHJ1Y3QgLy87Ci0Jcy90eXBlZGVmIC8vOwotICAgICAgfQotCi0gICAgICBwcmludCBSRUYgIiRfIjsKLSAgICB9Ci0gIH0KLQotICAjIEVuZGluZyBtb2RlcwotICBpZigvPFwvYm9va2luZm8+LyB8fCAvPFwvZG9jaW5mbz4vKXsKLSAgICAkbW9kZSA9IDA7Ci0gIH0KLSAgZWxzaWYoLzxcL3JlZmVudHJ5Pi8pewotICAgICRtb2RlID0gMDsKLSAgICBjbG9zZSBSRUY7Ci0gIH0KLX0KLQotIyBBbmQgbWFrZSBzdXJlIHdlIGRvbid0IHByb2Nlc3MgdGhpcyB1bm5lc3Nlc2FyaWx5Ci0kQVJHVlswXSA9fiBzL1wuc2dtbC8uOS87Ci1gdG91Y2ggJEFSR1ZbMF1gOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDBkMzc4MTQuLmFhZTFlNzkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTM2NjcsNyArMzY2Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaXBjX2hhc19wZXJtKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfcGVybXMsCi0JCQl1MTYgc2NsYXNzLCB1MzIgcGVybXMpCisJCQl1MzIgcGVybXMpCiB7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjOwogCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjOwpAQCAtMzY3OSw3ICszNjc5LDcgQEAKIAlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgSVBDKTsKIAlhZC51LmlwY19pZCA9IGlwY19wZXJtcy0+a2V5OwogCi0JcmV0dXJuIGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGlzZWMtPnNpZCwgc2NsYXNzLCBwZXJtcywgJmFkKTsKKwlyZXR1cm4gYXZjX2hhc19wZXJtKHRzZWMtPnNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsIHBlcm1zLCAmYWQpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfbXNnX21zZ19hbGxvY19zZWN1cml0eShzdHJ1Y3QgbXNnX21zZyAqbXNnKQpAQCAtMzc2NCw3ICszNzY0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZXJyID0gaXBjX2hhc19wZXJtKCZtc3EtPnFfcGVybSwgU0VDQ0xBU1NfTVNHUSwgcGVybXMpOworCWVyciA9IGlwY19oYXNfcGVybSgmbXNxLT5xX3Blcm0sIHBlcm1zKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zOTE2LDcgKzM5MTYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQllcnIgPSBpcGNfaGFzX3Blcm0oJnNocC0+c2htX3Blcm0sIFNFQ0NMQVNTX1NITSwgcGVybXMpOworCWVyciA9IGlwY19oYXNfcGVybSgmc2hwLT5zaG1fcGVybSwgcGVybXMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM5MzUsNyArMzkzNSw3IEBACiAJZWxzZQogCQlwZXJtcyA9IFNITV9fUkVBRCB8IFNITV9fV1JJVEU7CiAKLQlyZXR1cm4gaXBjX2hhc19wZXJtKCZzaHAtPnNobV9wZXJtLCBTRUNDTEFTU19TSE0sIHBlcm1zKTsKKwlyZXR1cm4gaXBjX2hhc19wZXJtKCZzaHAtPnNobV9wZXJtLCBwZXJtcyk7CiB9CiAKIC8qIFNlbWFwaG9yZSBzZWN1cml0eSBvcGVyYXRpb25zICovCkBAIC00MDI0LDcgKzQwMjQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQllcnIgPSBpcGNfaGFzX3Blcm0oJnNtYS0+c2VtX3Blcm0sIFNFQ0NMQVNTX1NFTSwgcGVybXMpOworCWVyciA9IGlwY19oYXNfcGVybSgmc21hLT5zZW1fcGVybSwgcGVybXMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQwMzgsMTggKzQwMzgsMTMgQEAKIAllbHNlCiAJCXBlcm1zID0gU0VNX19SRUFEOwogCi0JcmV0dXJuIGlwY19oYXNfcGVybSgmc21hLT5zZW1fcGVybSwgU0VDQ0xBU1NfU0VNLCBwZXJtcyk7CisJcmV0dXJuIGlwY19oYXNfcGVybSgmc21hLT5zZW1fcGVybSwgcGVybXMpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaXBjX3Blcm1pc3Npb24oc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIHNob3J0IGZsYWcpCiB7Ci0Jc3RydWN0IGlwY19zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpcGNwLT5zZWN1cml0eTsKLQl1MTYgc2NsYXNzID0gU0VDQ0xBU1NfSVBDOwogCXUzMiBhdiA9IDA7CiAKLQlpZiAoaXNlYyAmJiBpc2VjLT5tYWdpYyA9PSBTRUxJTlVYX01BR0lDKQotCQlzY2xhc3MgPSBpc2VjLT5zY2xhc3M7Ci0KIAlhdiA9IDA7CiAJaWYgKGZsYWcgJiBTX0lSVUdPKQogCQlhdiB8PSBJUENfX1VOSVhfUkVBRDsKQEAgLTQwNTksNyArNDA1NCw3IEBACiAJaWYgKGF2ID09IDApCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGlwY19oYXNfcGVybShpcGNwLCBzY2xhc3MsIGF2KTsKKwlyZXR1cm4gaXBjX2hhc19wZXJtKGlwY3AsIGF2KTsKIH0KIAogLyogbW9kdWxlIHN0YWNraW5nIG9wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggZWIzNDBiNC4uODkyOGJiNGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oCkBAIC0yMjAsNiArMjIwLDggQEAKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfWEZSTV9TT0NLRVQsIE5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQorICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSwgIm5sbXNnX3JlbGF5IikKKyAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYsICJubG1zZ19yZWFkcHJpdiIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfSVA2RldfU09DS0VULCBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCiAgICBTXyhTRUNDTEFTU19EQlVTLCBEQlVTX19BQ1FVSVJFX1NWQywgImFjcXVpcmVfc3ZjIikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKaW5kZXggZjlkZTBmOS4uYmRmY2U0YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKQEAgLTg0MCw2ICs4NDAsOCBAQAogCiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICAgICAgIDB4MDA0MDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgICAgICAweDAwODAwMDAwVUwKKyNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFTEFZICAgICAgICAgMHgwMTAwMDAwMFVMCisjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEUFJJViAgICAgIDB4MDIwMDAwMDBVTAogCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwppbmRleCBmNzk0MDgyLi5iM2FkYjQ4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCkBAIC05MSwxMyArOTEsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBubG1zZ19wZXJtIG5sbXNnX2F1ZGl0X3Blcm1zW10gPQogewotCXsgQVVESVRfR0VULAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgIH0sCi0JeyBBVURJVF9TRVQsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgfSwKLQl7IEFVRElUX0xJU1QsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCAgfSwKLQl7IEFVRElUX0FERCwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSB9LAotCXsgQVVESVRfREVMLAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCi0JeyBBVURJVF9VU0VSLAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCi0JeyBBVURJVF9MT0dJTiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSB9LAorCXsgQVVESVRfR0VULAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgICAgIH0sCisJeyBBVURJVF9TRVQsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgfSwKKwl7IEFVRElUX0xJU1QsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYgfSwKKwl7IEFVRElUX0FERCwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICB9LAorCXsgQVVESVRfREVMLAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgIH0sCisJeyBBVURJVF9VU0VSLAkJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFTEFZICAgIH0sCiB9OwogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb25pY3ZpYmVzLmMgYi9zb3VuZC9vc3Mvc29uaWN2aWJlcy5jCmluZGV4IGUxZDY5NjEuLjA2MDQ3ZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvb3NzL3NvbmljdmliZXMuYwpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAkJCWlmIChtaXh0YWJsZVtpXS5yZWMpCiAJCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCFtaXh0YWJsZVtpXS5yZWMpCisJCWlmIChpID09IFNPVU5EX01JWEVSX05SREVWSUNFUykKIAkJCXJldHVybiAwOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQlmcm9iaW5kaXIocywgU1ZfQ0lNSVhfQURDSU5MLCAweDFmLCBtaXh0YWJsZVtpXS5yZWMgPDwgNSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBkODk2NDdhLi45NTk5NTNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTY0LDcgKzY0LDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0ludGVsLCBJQ0g2fSwiCiAJCQkgIntJbnRlbCwgSUNINk19LCIKLQkJCSAie0ludGVsLCBJQ0g3fX0iKTsKKwkJCSAie0ludGVsLCBJQ0g3fSwiCisJCQkgIntJbnRlbCwgRVNCMn19Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIEhEQSBkcml2ZXIiKTsKIAogI2RlZmluZSBTRlgJImhkYS1pbnRlbDogIgpAQCAtMTQyMiw2ICsxNDIzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhenhfaWRzW10gPSB7CiAJeyAweDgwODYsIDB4MjY2OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBJQ0g2ICovCiAJeyAweDgwODYsIDB4MjdkOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBJQ0g3ICovCisJeyAweDgwODYsIDB4MjY5YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAvKiBFU0IyICovCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF6eF9pZHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL01ha2VmaWxlIGIvc291bmQvcHBjL01ha2VmaWxlCmluZGV4IDRkOTVjNjUuLmQ2YmE5OTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9NYWtlZmlsZQorKysgYi9zb3VuZC9wcGMvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoYykgMjAwMSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+CiAjCiAKLXNuZC1wb3dlcm1hYy1vYmpzIDo9IHBvd2VybWFjLm8gcG1hYy5vIGF3YWNzLm8gYnVyZ3VuZHkubyBkYWNhLm8gdHVtYmxlci5vIGtleXdlc3QubyBiZWVwLm8KK3NuZC1wb3dlcm1hYy1vYmpzIDo9IHBvd2VybWFjLm8gcG1hYy5vIGF3YWNzLm8gYnVyZ3VuZHkubyBkYWNhLm8gdHVtYmxlci5vIHRvb25pZS5vIGtleXdlc3QubyBiZWVwLm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9QT1dFUk1BQykgKz0gc25kLXBvd2VybWFjLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmMgYi9zb3VuZC9wcGMvcG1hYy5jCmluZGV4IDNiZjVmMDYuLjMyZDk0NzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmMKKysrIGIvc291bmQvcHBjL3BtYWMuYwpAQCAtOTg2LDcgKzk4NiwxMyBAQAogCQkJY2hpcC0+bnVtX2ZyZXFzID0gQVJSQVlfU0laRSh0dW1ibGVyX2ZyZXFzKTsKIAkJCWNoaXAtPm1vZGVsID0gUE1BQ19TTkFQUEVSOwogCQkJY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCi0JCQljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCAweDExOyAvKiBkaXNhYmxlIElFRSAqLworCQkJY2hpcC0+Y29udHJvbF9tYXNrID0gTUFTS19JRVBDIHwgMHgxMTsvKiBkaXNhYmxlIElFRSAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgzYToKKwkJCWNoaXAtPm51bV9mcmVxcyA9IEFSUkFZX1NJWkUodHVtYmxlcl9mcmVxcyk7CisJCQljaGlwLT5tb2RlbCA9IFBNQUNfVE9PTklFOworCQkJY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCisJCQljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCAweDExOy8qIGRpc2FibGUgSUVFICovCiAJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmggYi9zb3VuZC9wcGMvcG1hYy5oCmluZGV4IGRjNmM5OWQuLjBhODRjMDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmgKKysrIGIvc291bmQvcHBjL3BtYWMuaApAQCAtOTQsNyArOTQsOCBAQAogICovCiAKIGVudW0gc25kX3BtYWNfbW9kZWwgewotCVBNQUNfQVdBQ1MsIFBNQUNfU0NSRUFNRVIsIFBNQUNfQlVSR1VORFksIFBNQUNfREFDQSwgUE1BQ19UVU1CTEVSLCBQTUFDX1NOQVBQRVIKKwlQTUFDX0FXQUNTLCBQTUFDX1NDUkVBTUVSLCBQTUFDX0JVUkdVTkRZLCBQTUFDX0RBQ0EsIFBNQUNfVFVNQkxFUiwKKwlQTUFDX1NOQVBQRVIsIFBNQUNfVE9PTklFCiB9OwogCiBzdHJ1Y3Qgc25kX3BtYWMgewpAQCAtMTkxLDYgKzE5Miw3IEBACiBpbnQgc25kX3BtYWNfZGFjYV9pbml0KHBtYWNfdCAqY2hpcCk7CiBpbnQgc25kX3BtYWNfdHVtYmxlcl9pbml0KHBtYWNfdCAqY2hpcCk7CiBpbnQgc25kX3BtYWNfdHVtYmxlcl9wb3N0X2luaXQodm9pZCk7CitpbnQgc25kX3BtYWNfdG9vbmllX2luaXQocG1hY190ICpjaGlwKTsKIAogLyogaTJjIGZ1bmN0aW9ucyAqLwogdHlwZWRlZiBzdHJ1Y3Qgc25kX3BtYWNfa2V5d2VzdCB7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvcG93ZXJtYWMuYyBiL3NvdW5kL3BwYy9wb3dlcm1hYy5jCmluZGV4IDhmMTk1M2EuLjIzMWY2NDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wb3dlcm1hYy5jCisrKyBiL3NvdW5kL3BwYy9wb3dlcm1hYy5jCkBAIC05NSw2ICs5NSwxMyBAQAogCQlpZiAoIHNuZF9wbWFjX3R1bWJsZXJfaW5pdChjaGlwKSA8IDAgfHwgc25kX3BtYWNfdHVtYmxlcl9wb3N0X2luaXQoKSA8IDApCiAJCQlnb3RvIF9fZXJyb3I7CiAJCWJyZWFrOworCWNhc2UgUE1BQ19UT09OSUU6CisJCXN0cmNweShjYXJkLT5kcml2ZXIsICJQTWFjIFRvb25pZSIpOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiUG93ZXJNYWMgVG9vbmllIik7CisJCXN0cmNweShjYXJkLT5sb25nbmFtZSwgY2FyZC0+c2hvcnRuYW1lKTsKKwkJaWYgKChlcnIgPSBzbmRfcG1hY190b29uaWVfaW5pdChjaGlwKSkgPCAwKQorCQkJZ290byBfX2Vycm9yOworCQlicmVhazsKIAljYXNlIFBNQUNfQVdBQ1M6CiAJY2FzZSBQTUFDX1NDUkVBTUVSOgogCQluYW1lX2V4dCA9IGNoaXAtPm1vZGVsID09IFBNQUNfU0NSRUFNRVIgPyAiU2NyZWFtZXIiIDogIkFXQUNTIjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy90b29uaWUuYyBiL3NvdW5kL3BwYy90b29uaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODJiYzRiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcHBjL3Rvb25pZS5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogTWFjIE1pbmkgInRvb25pZSIgbWl4ZXIgY29udHJvbAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBieSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgorI2luY2x1ZGUgInBtYWMuaCIKKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikKKyNlbmRpZgorCitzdHJ1Y3QgcG1hY19ncGlvIHsKKwl1bnNpZ25lZCBpbnQgYWRkcjsKKwl1OCBhY3RpdmVfdmFsOworCXU4IGluYWN0aXZlX3ZhbDsKKwl1OCBhY3RpdmVfc3RhdGU7Cit9OworCitzdHJ1Y3QgcG1hY190b29uaWUKK3sKKwlzdHJ1Y3QgcG1hY19ncGlvCWhwX2RldGVjdF9ncGlvOworCXN0cnVjdCBwbWFjX2dwaW8JaHBfbXV0ZV9ncGlvOworCXN0cnVjdCBwbWFjX2dwaW8JYW1wX211dGVfZ3BpbzsKKwlpbnQJCQlocF9kZXRlY3RfaXJxOworCWludAkJCWF1dG9fbXV0ZV9ub3RpZnk7CisJc3RydWN0IHdvcmtfc3RydWN0CWRldGVjdF93b3JrOworfTsKKworCisvKgorICogZ3BpbyBhY2Nlc3MKKyAqLworI2RlZmluZSBkb19ncGlvX3dyaXRlKGdwLCB2YWwpIFwKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9XUklURV9HUElPLCBOVUxMLCAoZ3ApLT5hZGRyLCB2YWwpCisjZGVmaW5lIGRvX2dwaW9fcmVhZChncCkgXAorCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1JFQURfR1BJTywgTlVMTCwgKGdwKS0+YWRkciwgMCkKKyNkZWZpbmUgdHVtYmxlcl9ncGlvX2ZyZWUoZ3ApIC8qIE5PUCAqLworCitzdGF0aWMgdm9pZCB3cml0ZV9hdWRpb19ncGlvKHN0cnVjdCBwbWFjX2dwaW8gKmdwLCBpbnQgYWN0aXZlKQoreworCWlmICghIGdwLT5hZGRyKQorCQlyZXR1cm47CisJYWN0aXZlID0gYWN0aXZlID8gZ3AtPmFjdGl2ZV92YWwgOiBncC0+aW5hY3RpdmVfdmFsOworCWRvX2dwaW9fd3JpdGUoZ3AsIGFjdGl2ZSk7CisJREJHKCIoSSkgZ3BpbyAleCB3cml0ZSAlZFxuIiwgZ3AtPmFkZHIsIGFjdGl2ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYXVkaW9fZ3BpbyhzdHJ1Y3QgcG1hY19ncGlvICpncCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEgZ3AtPmFkZHIpCisJCXJldHVybiAwOworCisJcmV0ID0gZG9fZ3Bpb19yZWFkKGdwKTsKKworCXJldHVybiAocmV0ICYgMHhkKSA9PSAoZ3AtPmFjdGl2ZV92YWwgJiAweGQpOworfQorCitzdGF0aWMgaW50IHJlYWRfYXVkaW9fZ3BpbyhzdHJ1Y3QgcG1hY19ncGlvICpncCkKK3sKKwlpbnQgcmV0OworCWlmICghIGdwLT5hZGRyKQorCQlyZXR1cm4gMDsKKwlyZXQgPSAoKGRvX2dwaW9fcmVhZChncCkgJiAweDAyKSAhPTApOworCXJldHVybiByZXQgPT0gZ3AtPmFjdGl2ZV9zdGF0ZTsKK30KKworCitlbnVtIHsgVE9PTklFX01VVEVfSFAsIFRPT05JRV9NVVRFX0FNUCB9OworCitzdGF0aWMgaW50IHRvb25pZV9nZXRfbXV0ZV9zd2l0Y2goc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorCQkJCSAgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnVjb250cm9sKQoreworCXBtYWNfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgcG1hY190b29uaWUgKm1peCA9IGNoaXAtPm1peGVyX2RhdGE7CisJc3RydWN0IHBtYWNfZ3BpbyAqZ3A7CisKKwlpZiAobWl4ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXN3aXRjaChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSkgeworCWNhc2UgVE9PTklFX01VVEVfSFA6CisJCWdwID0gJm1peC0+aHBfbXV0ZV9ncGlvOworCQlicmVhazsKKwljYXNlIFRPT05JRV9NVVRFX0FNUDoKKwkJZ3AgPSAmbWl4LT5hbXBfbXV0ZV9ncGlvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDs7CisJfQorCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gIWNoZWNrX2F1ZGlvX2dwaW8oZ3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvb25pZV9wdXRfbXV0ZV9zd2l0Y2goc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorCQkJCSAgIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp1Y29udHJvbCkKK3sKKwlwbWFjX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHBtYWNfdG9vbmllICptaXggPSBjaGlwLT5taXhlcl9kYXRhOworCXN0cnVjdCBwbWFjX2dwaW8gKmdwOworCWludCB2YWw7CisKKwlpZiAoY2hpcC0+dXBkYXRlX2F1dG9tdXRlICYmIGNoaXAtPmF1dG9fbXV0ZSkKKwkJcmV0dXJuIDA7IC8qIGRvbid0IHRvdWNoIGluIHRoZSBhdXRvLW11dGUgbW9kZSAqLworCisJaWYgKG1peCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSkgeworCWNhc2UgVE9PTklFX01VVEVfSFA6CisJCWdwID0gJm1peC0+aHBfbXV0ZV9ncGlvOworCQlicmVhazsKKwljYXNlIFRPT05JRV9NVVRFX0FNUDoKKwkJZ3AgPSAmbWl4LT5hbXBfbXV0ZV9ncGlvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDs7CisJfQorCXZhbCA9ICEgY2hlY2tfYXVkaW9fZ3BpbyhncCk7CisJaWYgKHZhbCAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQl3cml0ZV9hdWRpb19ncGlvKGdwLCAhIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX2tjb250cm9sX25ld190IHRvb25pZV9ocF9zdyBfX2luaXRkYXRhID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCS5pbmZvID0gc25kX3BtYWNfYm9vbGVhbl9tb25vX2luZm8sCisJLmdldCA9IHRvb25pZV9nZXRfbXV0ZV9zd2l0Y2gsCisJLnB1dCA9IHRvb25pZV9wdXRfbXV0ZV9zd2l0Y2gsCisJLnByaXZhdGVfdmFsdWUgPSBUT09OSUVfTVVURV9IUCwKK307CitzdGF0aWMgc25kX2tjb250cm9sX25ld190IHRvb25pZV9zcGVha2VyX3N3IF9faW5pdGRhdGEgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAorCS5pbmZvID0gc25kX3BtYWNfYm9vbGVhbl9tb25vX2luZm8sCisJLmdldCA9IHRvb25pZV9nZXRfbXV0ZV9zd2l0Y2gsCisJLnB1dCA9IHRvb25pZV9wdXRfbXV0ZV9zd2l0Y2gsCisJLnByaXZhdGVfdmFsdWUgPSBUT09OSUVfTVVURV9BTVAsCit9OworCisvKgorICogYXV0by1tdXRlIHN0dWZmcworICovCitzdGF0aWMgaW50IHRvb25pZV9kZXRlY3RfaGVhZHBob25lKHBtYWNfdCAqY2hpcCkKK3sKKwlzdHJ1Y3QgcG1hY190b29uaWUgKm1peCA9IGNoaXAtPm1peGVyX2RhdGE7CisJaW50IGRldGVjdCA9IDA7CisKKwlpZiAobWl4LT5ocF9kZXRlY3RfZ3Bpby5hZGRyKQorCQlkZXRlY3QgfD0gcmVhZF9hdWRpb19ncGlvKCZtaXgtPmhwX2RldGVjdF9ncGlvKTsKKwlyZXR1cm4gZGV0ZWN0OworfQorCitzdGF0aWMgdm9pZCB0b29uaWVfY2hlY2tfbXV0ZShwbWFjX3QgKmNoaXAsIHN0cnVjdCBwbWFjX2dwaW8gKmdwLCBpbnQgdmFsLAorCQkJICAgICAgaW50IGRvX25vdGlmeSwgc25kX2tjb250cm9sX3QgKnN3KQoreworCWlmIChjaGVja19hdWRpb19ncGlvKGdwKSAhPSB2YWwpIHsKKwkJd3JpdGVfYXVkaW9fZ3BpbyhncCwgdmFsKTsKKwkJaWYgKGRvX25vdGlmeSkKKwkJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCSAgICAgICAmc3ctPmlkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRvb25pZV9kZXRlY3RfaGFuZGxlcih2b2lkICpzZWxmKQoreworCXBtYWNfdCAqY2hpcCA9IChwbWFjX3QqKSBzZWxmOworCXN0cnVjdCBwbWFjX3Rvb25pZSAqbWl4OworCWludCBoZWFkcGhvbmU7CisKKwlpZiAoIWNoaXApCisJCXJldHVybjsKKworCW1peCA9IGNoaXAtPm1peGVyX2RhdGE7CisJc25kX2Fzc2VydChtaXgsIHJldHVybik7CisKKwloZWFkcGhvbmUgPSB0b29uaWVfZGV0ZWN0X2hlYWRwaG9uZShjaGlwKTsKKworCURCRygiaGVhZHBob25lOiAlZCwgbGluZW91dDogJWRcbiIsIGhlYWRwaG9uZSwgbGluZW91dCk7CisKKwlpZiAoaGVhZHBob25lKSB7CisJCS8qIHVubXV0ZSBoZWFkcGhvbmUvbGluZW91dCAmIG11dGUgc3BlYWtlciAqLworCQl0b29uaWVfY2hlY2tfbXV0ZShjaGlwLCAmbWl4LT5ocF9tdXRlX2dwaW8sIDAsCisJCQkJICBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksIGNoaXAtPm1hc3Rlcl9zd19jdGwpOworCQl0b29uaWVfY2hlY2tfbXV0ZShjaGlwLCAmbWl4LT5hbXBfbXV0ZV9ncGlvLCAxLAorCQkJCSAgbWl4LT5hdXRvX211dGVfbm90aWZ5LCBjaGlwLT5zcGVha2VyX3N3X2N0bCk7CisJfSBlbHNlIHsKKwkJLyogdW5tdXRlIHNwZWFrZXIsIG11dGUgb3RoZXJzICovCisJCXRvb25pZV9jaGVja19tdXRlKGNoaXAsICZtaXgtPmFtcF9tdXRlX2dwaW8sIDAsCisJCQkJICBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksIGNoaXAtPnNwZWFrZXJfc3dfY3RsKTsKKwkJdG9vbmllX2NoZWNrX211dGUoY2hpcCwgJm1peC0+aHBfbXV0ZV9ncGlvLCAxLAorCQkJCSAgbWl4LT5hdXRvX211dGVfbm90aWZ5LCBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKKwl9CisJaWYgKG1peC0+YXV0b19tdXRlX25vdGlmeSkgeworCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCQkgICAgICAgJmNoaXAtPmhwX2RldGVjdF9jdGwtPmlkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRvb25pZV91cGRhdGVfYXV0b211dGUocG1hY190ICpjaGlwLCBpbnQgZG9fbm90aWZ5KQoreworCWlmIChjaGlwLT5hdXRvX211dGUpIHsKKwkJc3RydWN0IHBtYWNfdG9vbmllICptaXg7CisJCW1peCA9IGNoaXAtPm1peGVyX2RhdGE7CisJCXNuZF9hc3NlcnQobWl4LCByZXR1cm4pOworCQltaXgtPmF1dG9fbXV0ZV9ub3RpZnkgPSBkb19ub3RpZnk7CisJCXNjaGVkdWxlX3dvcmsoJm1peC0+ZGV0ZWN0X3dvcmspOworCX0KK30KKworLyogaW50ZXJydXB0IC0gaGVhZHBob25lIHBsdWcgY2hhbmdlZCAqLworc3RhdGljIGlycXJldHVybl90IHRvb25pZV9ocF9pbnRyKGludCBpcnEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwbWFjX3QgKmNoaXAgPSBkZXZpZDsKKworCWlmIChjaGlwLT51cGRhdGVfYXV0b211dGUgJiYgY2hpcC0+aW5pdGlhbGl6ZWQpIHsKKwkJY2hpcC0+dXBkYXRlX2F1dG9tdXRlKGNoaXAsIDEpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCXJldHVybiBJUlFfTk9ORTsKK30KKworLyogbG9vayBmb3IgYXVkaW8gZ3BpbyBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgZmluZF9hdWRpb19ncGlvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBsYXRmb3JtLAorCQkJICAgc3RydWN0IHBtYWNfZ3BpbyAqZ3ApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyAgCXUzMiAqYmFzZSwgYWRkcjsKKworCWlmICghIChucCA9IGZpbmRfZGV2aWNlcygiZ3BpbyIpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKG5wID0gbnAtPmNoaWxkOyBucDsgbnAgPSBucC0+c2libGluZykgeworCQljaGFyICpwcm9wZXJ0eSA9IGdldF9wcm9wZXJ0eShucCwgImF1ZGlvLWdwaW8iLCBOVUxMKTsKKwkJaWYgKHByb3BlcnR5ICYmIHN0cmNtcChwcm9wZXJ0eSwgbmFtZSkgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsIG5hbWUpKQorCQkJYnJlYWs7CisJfQorCWlmIChucCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWJhc2UgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxhZGRyZXNzIiwgTlVMTCk7CisJaWYgKCEgYmFzZSkgeworCQliYXNlID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCQlpZiAoIWJhc2UpIHsKKwkJCURCRygiKEUpIGNhbm5vdCBmaW5kIGFkZHJlc3MgZm9yIGRldmljZSAlcyAhXG4iLCBuYW1lKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWFkZHIgPSAqYmFzZTsKKwkJaWYgKGFkZHIgPCAweDUwKQorCQkJYWRkciArPSAweDUwOworCX0gZWxzZQorCQlhZGRyID0gKmJhc2U7CisKKwlncC0+YWRkciA9IGFkZHIgJiAweDAwMDBmZmZmOworCisJLyogVHJ5IHRvIGZpbmQgdGhlIGFjdGl2ZSBzdGF0ZSwgZGVmYXVsdCB0byAwICEgKi8KKwliYXNlID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImF1ZGlvLWdwaW8tYWN0aXZlLXN0YXRlIiwgTlVMTCk7CisJaWYgKGJhc2UpIHsKKwkJZ3AtPmFjdGl2ZV9zdGF0ZSA9ICpiYXNlOworCQlncC0+YWN0aXZlX3ZhbCA9ICgqYmFzZSkgPyAweDUgOiAweDQ7CisJCWdwLT5pbmFjdGl2ZV92YWwgPSAoKmJhc2UpID8gMHg0IDogMHg1OworCX0gZWxzZSB7CisJCXUzMiAqcHJvcCA9IE5VTEw7CisJCWdwLT5hY3RpdmVfc3RhdGUgPSAwOworCQlncC0+YWN0aXZlX3ZhbCA9IDB4NDsKKwkJZ3AtPmluYWN0aXZlX3ZhbCA9IDB4NTsKKwkJLyogSGVyZSBhcmUgc29tZSBjcnVkZSBoYWNrcyB0byBleHRyYWN0IHRoZSBHUElPIHBvbGFyaXR5IGFuZAorCQkgKiBvcGVuIGNvbGxlY3RvciBpbmZvcm1hdGlvbnMgb3V0IG9mIHRoZSBkby1wbGF0Zm9ybSBzY3JpcHQKKwkJICogYXMgd2UgZG9uJ3QgeWV0IGhhdmUgYW4gaW50ZXJwcmV0ZXIgZm9yIHRoZXNlIHRoaW5ncworCQkgKi8KKwkJaWYgKHBsYXRmb3JtKQorCQkJcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsIHBsYXRmb3JtLCBOVUxMKTsKKwkJaWYgKHByb3ApIHsKKwkJCWlmIChwcm9wWzNdID09IDB4OSAmJiBwcm9wWzRdID09IDB4OSkgeworCQkJCWdwLT5hY3RpdmVfdmFsID0gMHhkOworCQkJCWdwLT5pbmFjdGl2ZV92YWwgPSAweGM7CisJCQl9CisJCQlpZiAocHJvcFszXSA9PSAweDEgJiYgcHJvcFs0XSA9PSAweDEpIHsKKwkJCQlncC0+YWN0aXZlX3ZhbCA9IDB4NTsKKwkJCQlncC0+aW5hY3RpdmVfdmFsID0gMHg0OworCQkJfQorCQl9CisJfQorCisJREJHKCIoSSkgR1BJTyBkZXZpY2UgJXMgZm91bmQsIG9mZnNldDogJXgsIGFjdGl2ZSBzdGF0ZTogJWQgIVxuIiwKKwkgICAgbmFtZSwgZ3AtPmFkZHIsIGdwLT5hY3RpdmVfc3RhdGUpOworCisJcmV0dXJuIChucC0+bl9pbnRycyA+IDApID8gbnAtPmludHJzWzBdLmxpbmUgOiAwOworfQorCitzdGF0aWMgdm9pZCB0b29uaWVfY2xlYW51cChwbWFjX3QgKmNoaXApCit7CisJc3RydWN0IHBtYWNfdG9vbmllICptaXggPSBjaGlwLT5taXhlcl9kYXRhOworCWlmICghIG1peCkKKwkJcmV0dXJuOworCWlmIChtaXgtPmhwX2RldGVjdF9pcnEgPj0gMCkKKwkJZnJlZV9pcnEobWl4LT5ocF9kZXRlY3RfaXJxLCBjaGlwKTsKKwlrZnJlZShtaXgpOworCWNoaXAtPm1peGVyX2RhdGEgPSBOVUxMOworfQorCitpbnQgc25kX3BtYWNfdG9vbmllX2luaXQocG1hY190ICpjaGlwKQoreworCXN0cnVjdCBwbWFjX3Rvb25pZSAqbWl4OworCisJbWl4ID0ga21hbGxvYyhzaXplb2YoKm1peCksIEdGUF9LRVJORUwpOworCWlmICghIG1peCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwLT5taXhlcl9kYXRhID0gbWl4OworCWNoaXAtPm1peGVyX2ZyZWUgPSB0b29uaWVfY2xlYW51cDsKKworCWZpbmRfYXVkaW9fZ3BpbygiaGVhZHBob25lLW11dGUiLCBOVUxMLCAmbWl4LT5ocF9tdXRlX2dwaW8pOworCWZpbmRfYXVkaW9fZ3BpbygiYW1wLW11dGUiLCBOVUxMLCAmbWl4LT5hbXBfbXV0ZV9ncGlvKTsKKwltaXgtPmhwX2RldGVjdF9pcnEgPSBmaW5kX2F1ZGlvX2dwaW8oImhlYWRwaG9uZS1kZXRlY3QiLAorCQkJCQkgICAgIE5VTEwsICZtaXgtPmhwX2RldGVjdF9ncGlvKTsKKworCXN0cmNweShjaGlwLT5jYXJkLT5taXhlcm5hbWUsICJQb3dlck1hYyBUb29uaWUiKTsKKworCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoJnRvb25pZV9ocF9zdywgY2hpcCk7CisJc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY2hpcC0+bWFzdGVyX3N3X2N0bCk7CisKKwljaGlwLT5zcGVha2VyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MSgmdG9vbmllX3NwZWFrZXJfc3csIGNoaXApOworCXNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGNoaXAtPnNwZWFrZXJfc3dfY3RsKTsKKworCUlOSVRfV09SSygmbWl4LT5kZXRlY3Rfd29yaywgdG9vbmllX2RldGVjdF9oYW5kbGVyLCAodm9pZCAqKWNoaXApOworCisJaWYgKG1peC0+aHBfZGV0ZWN0X2lycSA+PSAwKSB7CisJCXNuZF9wbWFjX2FkZF9hdXRvbXV0ZShjaGlwKTsKKworCQljaGlwLT5kZXRlY3RfaGVhZHBob25lID0gdG9vbmllX2RldGVjdF9oZWFkcGhvbmU7CisJCWNoaXAtPnVwZGF0ZV9hdXRvbXV0ZSA9IHRvb25pZV91cGRhdGVfYXV0b211dGU7CisJCXRvb25pZV91cGRhdGVfYXV0b211dGUoY2hpcCwgMCk7CisKKwkJaWYgKHJlcXVlc3RfaXJxKG1peC0+aHBfZGV0ZWN0X2lycSwgdG9vbmllX2hwX2ludHIsIDAsCisJCQkJIlNvdW5kIEhlYWRwaG9uZSBEZXRlY3Rpb24iLCBjaGlwKSA8IDApCisJCQltaXgtPmhwX2RldGVjdF9pcnEgPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggYzcxODA3ZS4uOTMzMjIzNyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC05OSw2ICs5OSw3IEBACiAJcG1hY19ncGlvX3QgaHBfZGV0ZWN0OwogCWludCBoZWFkcGhvbmVfaXJxOwogCWludCBsaW5lb3V0X2lycTsKKwl1bnNpZ25lZCBpbnQgc2F2ZV9tYXN0ZXJfdm9sWzJdOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfdm9sWzJdOwogCXVuc2lnbmVkIGludCBzYXZlX21hc3Rlcl9zd2l0Y2hbMl07CiAJdW5zaWduZWQgaW50IG1hc3Rlcl9zd2l0Y2hbMl07CkBAIC0xNzcsMTEgKzE3OCwyMiBAQAogCWlmICghIGdwLT5hZGRyKQogCQlyZXR1cm47CiAJYWN0aXZlID0gYWN0aXZlID8gZ3AtPmFjdGl2ZV92YWwgOiBncC0+aW5hY3RpdmVfdmFsOwotCiAJZG9fZ3Bpb193cml0ZShncCwgYWN0aXZlKTsKIAlEQkcoIihJKSBncGlvICV4IHdyaXRlICVkXG4iLCBncC0+YWRkciwgYWN0aXZlKTsKIH0KIAorc3RhdGljIGludCBjaGVja19hdWRpb19ncGlvKHBtYWNfZ3Bpb190ICpncCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEgZ3AtPmFkZHIpCisJCXJldHVybiAwOworCisJcmV0ID0gZG9fZ3Bpb19yZWFkKGdwKTsKKworCXJldHVybiAocmV0ICYgMHhkKSA9PSAoZ3AtPmFjdGl2ZV92YWwgJiAweGQpOworfQorCiBzdGF0aWMgaW50IHJlYWRfYXVkaW9fZ3BpbyhwbWFjX2dwaW9fdCAqZ3ApCiB7CiAJaW50IHJldDsKQEAgLTY4Myw3ICs2OTUsNyBAQAogCX0KIAlpZiAoZ3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAhIHJlYWRfYXVkaW9fZ3BpbyhncCk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAhY2hlY2tfYXVkaW9fZ3BpbyhncCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxMSw3ICs3MjMsNyBAQAogCX0KIAlpZiAoZ3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JdmFsID0gISByZWFkX2F1ZGlvX2dwaW8oZ3ApOworCXZhbCA9ICEgY2hlY2tfYXVkaW9fZ3BpbyhncCk7CiAJaWYgKHZhbCAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgewogCQl3cml0ZV9hdWRpb19ncGlvKGdwLCAhIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIAkJcmV0dXJuIDE7CkBAIC04OTcsMTEgKzkwOSwxMSBAQAogCiBzdGF0aWMgdm9pZCBjaGVja19tdXRlKHBtYWNfdCAqY2hpcCwgcG1hY19ncGlvX3QgKmdwLCBpbnQgdmFsLCBpbnQgZG9fbm90aWZ5LCBzbmRfa2NvbnRyb2xfdCAqc3cpCiB7Ci0JLy9wbWFjX3R1bWJsZXJfdCAqbWl4ID0gY2hpcC0+bWl4ZXJfZGF0YTsKLQlpZiAodmFsICE9IHJlYWRfYXVkaW9fZ3BpbyhncCkpIHsKKwlpZiAoY2hlY2tfYXVkaW9fZ3BpbyhncCkgIT0gdmFsKSB7CiAJCXdyaXRlX2F1ZGlvX2dwaW8oZ3AsIHZhbCk7CiAJCWlmIChkb19ub3RpZnkpCi0JCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgJnN3LT5pZCk7CisJCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCQkgICAgICAgJnN3LT5pZCk7CiAJfQogfQogCkBAIC0xMTI4LDYgKzExNDAsOCBAQAogCQlkaXNhYmxlX2lycShtaXgtPmxpbmVvdXRfaXJxKTsKIAltaXgtPnNhdmVfbWFzdGVyX3N3aXRjaFswXSA9IG1peC0+bWFzdGVyX3N3aXRjaFswXTsKIAltaXgtPnNhdmVfbWFzdGVyX3N3aXRjaFsxXSA9IG1peC0+bWFzdGVyX3N3aXRjaFsxXTsKKwltaXgtPnNhdmVfbWFzdGVyX3ZvbFswXSA9IG1peC0+bWFzdGVyX3ZvbFswXTsKKwltaXgtPnNhdmVfbWFzdGVyX3ZvbFsxXSA9IG1peC0+bWFzdGVyX3ZvbFsxXTsKIAltaXgtPm1hc3Rlcl9zd2l0Y2hbMF0gPSBtaXgtPm1hc3Rlcl9zd2l0Y2hbMV0gPSAwOwogCXR1bWJsZXJfc2V0X21hc3Rlcl92b2x1bWUobWl4KTsKIAlpZiAoIW1peC0+YW5kZWRfcmVzZXQpIHsKQEAgLTExNTUsNiArMTE2OSw4IEBACiAJbWl4LT5hY3MgJj0gfjE7CiAJbWl4LT5tYXN0ZXJfc3dpdGNoWzBdID0gbWl4LT5zYXZlX21hc3Rlcl9zd2l0Y2hbMF07CiAJbWl4LT5tYXN0ZXJfc3dpdGNoWzFdID0gbWl4LT5zYXZlX21hc3Rlcl9zd2l0Y2hbMV07CisJbWl4LT5tYXN0ZXJfdm9sWzBdID0gbWl4LT5zYXZlX21hc3Rlcl92b2xbMF07CisJbWl4LT5tYXN0ZXJfdm9sWzFdID0gbWl4LT5zYXZlX21hc3Rlcl92b2xbMV07CiAJdHVtYmxlcl9yZXNldF9hdWRpbyhjaGlwKTsKIAlpZiAobWl4LT5pMmMuY2xpZW50ICYmIG1peC0+aTJjLmluaXRfY2xpZW50KSB7CiAJCWlmIChtaXgtPmkyYy5pbml0X2NsaWVudCgmbWl4LT5pMmMpIDwgMCkK