ZGlmZiAtLWdpdCBhL2FwcHMvQnVnUmVwb3J0U2VuZGVyL0FuZHJvaWQubWsgYi9hcHBzL0J1Z1JlcG9ydFNlbmRlci9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGY4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1Z1JlcG9ydFNlbmRlci9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9DRVJUSUZJQ0FURSA6PSBwbGF0Zm9ybQorTE9DQUxfTU9EVUxFX1RBR1MgOj0gZW5nCitMT0NBTF9QQUNLQUdFX05BTUUgOj0gQnVnUmVwb3J0U2VuZGVyCitMT0NBTF9TREtfVkVSU0lPTiA6PSBjdXJyZW50CitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvYXBwcy9CdWdSZXBvcnRTZW5kZXIvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlODlmMQotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuYnVncmVwb3J0c2VuZGVyIiA+CisKKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UiIC8+CisKKyAgICA8YXBwbGljYXRpb24KKyAgICAgICAgICAgIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljb24iCisgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJCdWcgUmVwb3J0IFNlbmRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiID4KKworICAgICAgICA8dXNlcy1zZGsgYW5kcm9pZDptaW5TZGtWZXJzaW9uPSI0IiAvPgorCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkJ1Z1JlcG9ydExpc3RBY3Rpdml0eSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQnVnUmVwb3J0UHJldmlld0FjdGl2aXR5Ij4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5ERUZBVUxUIiAvPgorICAgICAgICAgICAgICAgIDxkYXRhIGFuZHJvaWQ6bWltZVR5cGU9InZuZC5hbmRyb2lkL2J1Z3JlcG9ydCIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworICAgIDwvYXBwbGljYXRpb24+CisKKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9hcHBzL0J1Z1JlcG9ydFNlbmRlci9yZXMvZHJhd2FibGUtaGRwaS9pY29uLnBuZyBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL3Jlcy9kcmF3YWJsZS1oZHBpL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwZmJkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1Z1JlcG9ydFNlbmRlci9yZXMvZHJhd2FibGUtaGRwaS9pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHBzL0J1Z1JlcG9ydFNlbmRlci9yZXMvZHJhd2FibGUtbWRwaS9pY29uLnBuZyBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL3Jlcy9kcmF3YWJsZS1tZHBpL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDBhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1Z1JlcG9ydFNlbmRlci9yZXMvZHJhd2FibGUtbWRwaS9pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHBzL0J1Z1JlcG9ydFNlbmRlci9yZXMvbGF5b3V0L2J1Z3JlcG9ydF9wcmV2aWV3LnhtbCBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL3Jlcy9sYXlvdXQvYnVncmVwb3J0X3ByZXZpZXcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODVjMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1Z1JlcG9ydFNlbmRlci9yZXMvbGF5b3V0L2J1Z3JlcG9ydF9wcmV2aWV3LnhtbApAQCAtMCwwICsxLDEyIEBACis8U2Nyb2xsVmlldworICAgICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CisgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3ByZXZpZXciCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9Imhvcml6b250YWx8dmVydGljYWwiCisgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhckFsd2F5c0RyYXdWZXJ0aWNhbFRyYWNrPSJ0cnVlIi8+Cis8L1Njcm9sbFZpZXc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwcy9CdWdSZXBvcnRTZW5kZXIvc3JjL2NvbS9hbmRyb2lkL2J1Z3JlcG9ydHNlbmRlci9CdWdSZXBvcnRMaXN0QWN0aXZpdHkuamF2YSBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL3NyYy9jb20vYW5kcm9pZC9idWdyZXBvcnRzZW5kZXIvQnVnUmVwb3J0TGlzdEFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2ZGU4OAotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvQnVnUmVwb3J0U2VuZGVyL3NyYy9jb20vYW5kcm9pZC9idWdyZXBvcnRzZW5kZXIvQnVnUmVwb3J0TGlzdEFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1Z3JlcG9ydHNlbmRlcjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuRmlsZU9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQXJyYXlBZGFwdGVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CisKKy8qKgorICogU2hvd3MgYSBsaXN0IG9mIGJ1ZyByZXBvcnRzIGN1cnJlbnRseSBpbiAvc2RjYXJkL2J1Z3JlcG9ydHMKKyAqLworcHVibGljIGNsYXNzIEJ1Z1JlcG9ydExpc3RBY3Rpdml0eSBleHRlbmRzIExpc3RBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJCdWdSZXBvcnRMaXN0QWN0aXZpdHkiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGUgUkVQT1JUX0RJUiA9IG5ldyBGaWxlKCIvc2RjYXJkL2J1Z3JlcG9ydHMiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1lTVEVNX0xPR19JRCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FTU9SWV9JRCA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENQVV9JRCA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST0NSQU5LX0lEID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNoTWFwPEludGVnZXIsIFN0cmluZz4gSURfTUFQID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgU3RyaW5nPigpOworCisgICAgc3RhdGljIHsKKyAgICAgICAgSURfTUFQLnB1dChTWVNURU1fTE9HX0lELCAiU1lTVEVNIExPRyIpOworICAgICAgICBJRF9NQVAucHV0KE1FTU9SWV9JRCwgIk1FTU9SWSBJTkZPIik7CisgICAgICAgIElEX01BUC5wdXQoQ1BVX0lELCAiQ1BVIElORk8iKTsKKyAgICAgICAgSURfTUFQLnB1dChQUk9DUkFOS19JRCwgIlBST0NSQU5LIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBBcnJheUFkYXB0ZXI8U3RyaW5nPiBtQWRhcHRlciA9IG51bGw7CisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8RmlsZT4gbUZpbGVzID0gbnVsbDsKKyAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXIgPSBudWxsOworICAgIHByaXZhdGUgRmlsZU9ic2VydmVyIG1PYnNlcnZlciA9IG51bGw7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIG1BZGFwdGVyID0gbmV3IEFycmF5QWRhcHRlcjxTdHJpbmc+KHRoaXMsIGFuZHJvaWQuUi5sYXlvdXQuc2ltcGxlX2xpc3RfaXRlbV8xKTsKKyAgICAgICAgbUZpbGVzID0gbmV3IEFycmF5TGlzdDxGaWxlPigpOworICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7CisKKyAgICAgICAgaW50IGZsYWdzID0gRmlsZU9ic2VydmVyLkNSRUFURSB8IEZpbGVPYnNlcnZlci5NT1ZFRF9UTzsKKyAgICAgICAgbU9ic2VydmVyID0gbmV3IEZpbGVPYnNlcnZlcihSRVBPUlRfRElSLmdldFBhdGgoKSwgZmxhZ3MpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXZlbnQoaW50IGV2ZW50LCBTdHJpbmcgcGF0aCkgeworICAgICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgeyBwdWJsaWMgdm9pZCBydW4oKSB7IHNjYW5EaXJlY3RvcnkoKTsgfSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzZXRMaXN0QWRhcHRlcihtQWRhcHRlcik7CisgICAgICAgIHJlZ2lzdGVyRm9yQ29udGV4dE1lbnUoZ2V0TGlzdFZpZXcoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51LCBWaWV3IHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudS5Db250ZXh0TWVudUluZm8gbWVudUluZm8pIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVDb250ZXh0TWVudShtZW51LCB2LCBtZW51SW5mbyk7CisgICAgICAgIG1lbnUuYWRkKDAsIFNZU1RFTV9MT0dfSUQsIDAsICJTeXN0ZW0gTG9nIik7CisgICAgICAgIG1lbnUuYWRkKDAsIENQVV9JRCwgMCwgIkNQVSBJbmZvIik7CisgICAgICAgIG1lbnUuYWRkKDAsIE1FTU9SWV9JRCwgMCwgIk1lbW9yeSBJbmZvIik7CisgICAgICAgIG1lbnUuYWRkKDAsIFBST0NSQU5LX0lELCAwLCAiUHJvY3JhbmsiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0YXJ0KCkgeworICAgICAgICBzdXBlci5vblN0YXJ0KCk7CisgICAgICAgIG1PYnNlcnZlci5zdGFydFdhdGNoaW5nKCk7CisgICAgICAgIHNjYW5EaXJlY3RvcnkoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0b3AoKSB7CisgICAgICAgIHN1cGVyLm9uU3RvcCgpOworICAgICAgICBtT2JzZXJ2ZXIuc3RvcFdhdGNoaW5nKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25MaXN0SXRlbUNsaWNrKExpc3RWaWV3IGwsIFZpZXcgdiwgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgIHN1cGVyLm9uTGlzdEl0ZW1DbGljayhsLCB2LCBwb3NpdGlvbiwgaWQpOworICAgICAgICBpZiAocG9zaXRpb24gPCBtRmlsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBGaWxlIGZpbGUgPSBtRmlsZXMuZ2V0KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fU0VORCk7CisgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoInN1YmplY3QiLCBmaWxlLmdldE5hbWUoKSk7CisgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoImJvZHkiLCAiQnVpbGQ6ICIgKyBCdWlsZC5ESVNQTEFZICsgIlxuKFNlbnQgYnkgQnVnUmVwb3J0U2VuZGVyKSIpOworICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9TVFJFQU0sIFVyaS5mcm9tRmlsZShmaWxlKSk7CisgICAgICAgICAgICBpZiAoZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIi5neiIpKSB7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldFR5cGUoImFwcGxpY2F0aW9uL3gtZ3ppcCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnR4dCIpKSB7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldFR5cGUoInRleHQvcGxhaW4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldFR5cGUoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbkNvbnRleHRJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgeworICAgICAgQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbyBpbmZvID0KKyAgICAgICAgICAgICAgKEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm8pIGl0ZW0uZ2V0TWVudUluZm8oKTsKKyAgICAgIGlmIChpbmZvLnBvc2l0aW9uID49IG1GaWxlcy5zaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICBpbnQgaWQgPSBpdGVtLmdldEl0ZW1JZCgpOworICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICAgIGNhc2UgU1lTVEVNX0xPR19JRDogLy8gZHJvcCBkb3duCisgICAgICAgICAgY2FzZSBNRU1PUllfSUQ6ICAgICAvLyBkcm9wIGRvd24KKyAgICAgICAgICBjYXNlIENQVV9JRDogICAgICAgIC8vIGRyb3AgZG93bgorICAgICAgICAgIGNhc2UgUFJPQ1JBTktfSUQ6CisgICAgICAgICAgRmlsZSBmaWxlID0gbUZpbGVzLmdldChpbmZvLnBvc2l0aW9uKTsKKyAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1ZJRVcpOworICAgICAgICAgIGludGVudC5zZXREYXRhQW5kVHlwZShVcmkuZnJvbUZpbGUoZmlsZSksICJ2bmQuYW5kcm9pZC9idWdyZXBvcnQiKTsKKyAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoInNlY3Rpb24iLCBJRF9NQVAuZ2V0KGlkKSk7CisgICAgICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uQ29udGV4dEl0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2NhbkRpcmVjdG9yeSgpIHsKKyAgICAgICAgbUFkYXB0ZXIuY2xlYXIoKTsKKyAgICAgICAgbUZpbGVzLmNsZWFyKCk7CisKKyAgICAgICAgRmlsZVtdIGZpbGVzID0gUkVQT1JUX0RJUi5saXN0RmlsZXMoKTsKKyAgICAgICAgaWYgKGZpbGVzID09IG51bGwpIHJldHVybjsKKworICAgICAgICAvLyBTb3J0IGluIHJldmVyc2Ugb3JkZXI6IG5ld2VzdCBidWcgcmVwb3J0cyBmaXJzdAorICAgICAgICBBcnJheXMuc29ydChmaWxlcywgQ29sbGVjdGlvbnMucmV2ZXJzZU9yZGVyKCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGZpbGVzW2ldLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCIuZ3oiKSkgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCJidWdyZXBvcnQtIikgfHwgIW5hbWUuZW5kc1dpdGgoIi50eHQiKSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIklnbm9yaW5nIG5vbi1idWdyZXBvcnQ6ICIgKyBmaWxlc1tpXSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBrZWVwIHRoZSBwYXJhbGxlbCBhcnJheXMgaW4gc3luYworICAgICAgICAgICAgbUFkYXB0ZXIuYWRkKG5hbWUuc3Vic3RyaW5nKDEwLCBuYW1lLmxlbmd0aCgpIC0gNCkpOworICAgICAgICAgICAgbUZpbGVzLmFkZChmaWxlc1tpXSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzL0J1Z1JlcG9ydFNlbmRlci9zcmMvY29tL2FuZHJvaWQvYnVncmVwb3J0c2VuZGVyL0J1Z1JlcG9ydFBhcnNlci5qYXZhIGIvYXBwcy9CdWdSZXBvcnRTZW5kZXIvc3JjL2NvbS9hbmRyb2lkL2J1Z3JlcG9ydHNlbmRlci9CdWdSZXBvcnRQYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc1Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9CdWdSZXBvcnRTZW5kZXIvc3JjL2NvbS9hbmRyb2lkL2J1Z3JlcG9ydHNlbmRlci9CdWdSZXBvcnRQYXJzZXIuamF2YQpAQCAtMCwwICsxLDQ5IEBACitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1Z3JlcG9ydHNlbmRlcjsKKworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgZm9yIHBhcnNpbmcgYSBidWdyZXBvcnQgaW50byBpdHMgc2VjdGlvbnMuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBCdWdSZXBvcnRQYXJzZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJfU0laRSA9IDgqMTAyNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDVElPTl9IRUFERVIgPSAiLS0tLS0tIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVTID0gMTAwMDsgLy8ganVzdCBpbiBjYXNlIHdlIG1pc3MgdGhlIGVuZCBvZiB0aGUgc2VjdGlvbi4KKworICAgIC8vIHV0aWxpdHkgY2xhc3MKKyAgICBwcml2YXRlIEJ1Z1JlcG9ydFBhcnNlcigpIHt9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBleHRyYWN0U3lzdGVtTG9ncyhJbnB1dFN0cmVhbSBpbiwgU3RyaW5nIHNlY3Rpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyBzZWN0aW9uV2l0aEhlYWRlciA9IFNFQ1RJT05fSEVBREVSICsgIiAiICsgc2VjdGlvbjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIC8vIG9wZW4gYSByZWFkZXIgYXJvdW5kIHRoZSBwcm92aWRlZCBpbnB1dHN0cmVhbS4KKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbiwgIlVURi04IiksIEJVRkZFUl9TSVpFKTsKKyAgICAgICAgYm9vbGVhbiBpblNlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgaW50IG51bUxpbmVzID0gMDsKKyAgICAgICAgLy8gcmVhZCBmaWxlIGNvbnRlbnRzLiAgbG9vcCB1bnRpbCB3ZSBnZXQgdG8gdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gaGVhZGVyLgorICAgICAgICAvLyBvbmNlIHdlIHJlYWNoIHRoYXQgaGVhZGVyLCBhY2N1bXVsYXRlIGFsbCBsaW5lcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSAoKGxpbmUgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGluU2VjdGlvbikgeworICAgICAgICAgICAgICAgIC8vIGZpbmlzaCB3aGVuIHdlIGdldCB0bzoKKyAgICAgICAgICAgICAgICAvLyAtLS0tLQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoU0VDVElPTl9IRUFERVIpIHx8IChudW1MaW5lcyA+IE1BWF9MSU5FUykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNiLmFwcGVuZChsaW5lKTsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgICAgICAgICAgICAgKytudW1MaW5lczsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKHNlY3Rpb25XaXRoSGVhZGVyKSkgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChsaW5lKTsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgICAgICAgICAgICAgaW5TZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzL0J1Z1JlcG9ydFNlbmRlci9zcmMvY29tL2FuZHJvaWQvYnVncmVwb3J0c2VuZGVyL0J1Z1JlcG9ydFByZXZpZXdBY3Rpdml0eS5qYXZhIGIvYXBwcy9CdWdSZXBvcnRTZW5kZXIvc3JjL2NvbS9hbmRyb2lkL2J1Z3JlcG9ydHNlbmRlci9CdWdSZXBvcnRQcmV2aWV3QWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDIzOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9CdWdSZXBvcnRTZW5kZXIvc3JjL2NvbS9hbmRyb2lkL2J1Z3JlcG9ydHNlbmRlci9CdWdSZXBvcnRQcmV2aWV3QWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1Z3JlcG9ydHNlbmRlcjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Db25maWc7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworLyoqCisgKiBQcm92aWRlcyBhIHNjcm9sbGluZyB0ZXh0IHZpZXcgcHJldmlld2luZyBhIG5hbWVkIHNlY3Rpb24gb2YgYQorICogYnVncmVwb3J0LgorICovCitwdWJsaWMgY2xhc3MgQnVnUmVwb3J0UHJldmlld0FjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJCdWdSZXBvcnRQcmV2aWV3IjsKKworICAgIHByaXZhdGUgVGV4dFZpZXcgbVRleHQ7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgaWNpY2xlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKGljaWNsZSk7CisKKyAgICAgICAgc2V0Q29udGVudFZpZXcoY29tLmFuZHJvaWQuYnVncmVwb3J0c2VuZGVyLlIubGF5b3V0LmJ1Z3JlcG9ydF9wcmV2aWV3KTsKKyAgICAgICAgbVRleHQgPSAoVGV4dFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLnByZXZpZXcpOworCisgICAgICAgIGlmIChpY2ljbGUgIT0gbnVsbCAmJiBpY2ljbGUuZ2V0U3RyaW5nKCJ0ZXh0IikgIT0gbnVsbCkgeworICAgICAgICAgICAgbVRleHQuc2V0VGV4dChpY2ljbGUuZ2V0U3RyaW5nKCJ0ZXh0IikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGdldEludGVudCgpOworICAgICAgICAgICAgaWYgKGludGVudCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiTm8gaW50ZW50IHByb3ZpZGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVyaSB1cmkgPSBpbnRlbnQuZ2V0RGF0YSgpOworICAgICAgICAgICAgU3RyaW5nIHNlY3Rpb24gPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoInNlY3Rpb24iKTsKKyAgICAgICAgICAgIGlmIChzZWN0aW9uID09IG51bGwgfHwgc2VjdGlvbi5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbiA9ICJTWVNURU0gTE9HIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExvZy5kKFRBRywgIkxvYWRpbmcgIiArIHVyaSk7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworCQkvLyBUT0RPOiBkbyB0aGlzIGluIGEgYmFja2dyb3VuZCB0aHJlYWQsIHVzaW5nIGhhbmRsZXJzIGFuZCBhbGwgdGhhdCBub25zZW5zZS4KKyAgICAgICAgICAgICAgICBpbiA9IGdldENvbnRlbnRSZXNvbHZlcigpLm9wZW5JbnB1dFN0cmVhbSh1cmkpOworICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQnVnUmVwb3J0UGFyc2VyLmV4dHJhY3RTeXN0ZW1Mb2dzKGluLCBzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBtVGV4dC5zZXRUZXh0KHRleHQpOworICAgICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGZuZmUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gb3BlbiBmaWxlOiAiICsgdXJpLCBmbmZlKTsKKwkJbVRleHQuc2V0VGV4dCgiVW5hYmxlIHRvIG9wZW4gZmlsZTogIiArIHVyaSArICI6ICIgKyBmbmZlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gcHJvY2VzcyBsb2cuIiwgaW9lKTsKKwkJbVRleHQuc2V0VGV4dCgiVW5hYmxlIHRvIHByb2Nlc3MgbG9nOiAiICsgaW9lKTsKKwkJcmV0dXJuOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW4gIT0gbnVsbCkgeworCQkJaW4uY2xvc2UoKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25TYXZlSW5zdGFuY2VTdGF0ZShCdW5kbGUgaWNpY2xlKSB7CisgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gbVRleHQuZ2V0VGV4dCgpOworICAgICAgICBpZiAodGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBpY2ljbGUucHV0U3RyaW5nKCJ0ZXh0IiwgbVRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwcy9CdWlsZFdpZGdldC9BbmRyb2lkLm1rIGIvYXBwcy9CdWlsZFdpZGdldC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZGU0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1aWxkV2lkZ2V0L0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNiBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfTU9EVUxFX1RBR1MgOj0gc2FtcGxlcyB0ZXN0cworCisjIE9ubHkgY29tcGlsZSBzb3VyY2UgamF2YSBmaWxlcyBpbiB0aGlzIGFway4KK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IEJ1aWxkV2lkZ2V0CisKK0xPQ0FMX1NES19WRVJTSU9OIDo9IGN1cnJlbnQKKworaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgaW5jbHVkZSB0byBtYWtlIG91ciB0ZXN0IGFway4KK2luY2x1ZGUgJChjYWxsIGFsbC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL2FwcHMvQnVpbGRXaWRnZXQvQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzY4NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9CdWlsZFdpZGdldC9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmJ1aWxkd2lkZ2V0IgorICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiCisgICAgYW5kcm9pZDp2ZXJzaW9uTmFtZT0iMS4wIj4KKworICAgIDx1c2VzLXNkayBhbmRyb2lkOm1pblNka1ZlcnNpb249IjMiIC8+CisgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljb24iIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiPgorICAgICAgICA8cmVjZWl2ZXIgYW5kcm9pZDpuYW1lPSIuQnVpbGRXaWRnZXQiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvd2lkZ2V0X25hbWUiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYXBwd2lkZ2V0LmFjdGlvbi5BUFBXSURHRVRfVVBEQVRFIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgPG1ldGEtZGF0YSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYXBwd2lkZ2V0LnByb3ZpZGVyIiBhbmRyb2lkOnJlc291cmNlPSJAeG1sL3dpZGdldF9idWlsZCIgLz4KKyAgICAgICAgPC9yZWNlaXZlcj4KKyAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSIuQnVpbGRXaWRnZXQkVXBkYXRlU2VydmljZSIgLz4KKyAgICA8L2FwcGxpY2F0aW9uPgorICAgIAorPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvcmVzL2RyYXdhYmxlLWhkcGkvaWNvbi5wbmcgYi9hcHBzL0J1aWxkV2lkZ2V0L3Jlcy9kcmF3YWJsZS1oZHBpL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZmJkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1aWxkV2lkZ2V0L3Jlcy9kcmF3YWJsZS1oZHBpL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvcmVzL2RyYXdhYmxlLW1kcGkvaWNvbi5wbmcgYi9hcHBzL0J1aWxkV2lkZ2V0L3Jlcy9kcmF3YWJsZS1tZHBpL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDBhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0J1aWxkV2lkZ2V0L3Jlcy9kcmF3YWJsZS1tZHBpL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvcmVzL2xheW91dC93aWRnZXQueG1sIGIvYXBwcy9CdWlsZFdpZGdldC9yZXMvbGF5b3V0L3dpZGdldC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiM2FlNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvQnVpbGRXaWRnZXQvcmVzL2xheW91dC93aWRnZXQueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6aWQ9IkAraWQvd2lkZ2V0IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgICBhbmRyb2lkOnBhZGRpbmc9IjZkaXAiCisgICAgPgorCisgICAgPFRleHRWaWV3CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYnVpbGRfaW5mbyIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJsZWZ0IgorICAgICAgICBzdHlsZT0iQHN0eWxlL1RleHQuQnVpbGRJbmZvLkZhbmN5IgorICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxOGRpcCIKKyAgICAgICAgLz4KKworICAgIDxUZXh0VmlldworICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2J1aWxkX2NoYW5nZWxpc3QiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0ibGVmdCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSI0ZGlwIgorICAgICAgICBzdHlsZT0iQHN0eWxlL1RleHQuQnVpbGRJbmZvLkZhbmN5IgorICAgICAgICBhbmRyb2lkOnRleHRTaXplPSI5ZGlwIgorICAgICAgICAvPgorCis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvcmVzL3ZhbHVlcy9jb2xvcnMueG1sIGIvYXBwcy9CdWlsZFdpZGdldC9yZXMvdmFsdWVzL2NvbG9ycy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkMDNjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvQnVpbGRXaWRnZXQvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXNvdXJjZXM+CisgICAgPGNvbG9yIG5hbWU9ImRyb2lkZ3JlZW4iPiNGRkE0QzYzOTwvY29sb3I+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL2FwcHMvQnVpbGRXaWRnZXQvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGY3YmIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9CdWlsZFdpZGdldC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxyZXNvdXJjZXM+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+QnVpbGQgTnVtYmVyPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWRnZXRfbmFtZSI+QnVpbGQgTnVtYmVyPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHMvQnVpbGRXaWRnZXQvcmVzL3ZhbHVlcy9zdHlsZXMueG1sIGIvYXBwcy9CdWlsZFdpZGdldC9yZXMvdmFsdWVzL3N0eWxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2NzUzNgotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvQnVpbGRXaWRnZXQvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8cmVzb3VyY2VzPgorICAgIDxzdHlsZSBuYW1lPSJUZXh0IiAvPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHQuQnVpbGRJbmZvIj4KKzwhLS0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dHlwZWZhY2UiPm1vbm9zcGFjZTwvaXRlbT4tLT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTJzcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U3R5bGUiPmJvbGQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AY29sb3IvZHJvaWRncmVlbjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzaGFkb3dDb2xvciI+QGFuZHJvaWQ6Y29sb3IvYmxhY2s8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2hhZG93RHgiPjA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2hhZG93RHkiPjA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6c2hhZG93UmFkaXVzIj4zLjA8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0LkJ1aWxkSW5mby5GYW5jeSI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6dGV4dENvbG9yIj5AYW5kcm9pZDpjb2xvci93aGl0ZTwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpzaGFkb3dDb2xvciI+QGNvbG9yL2Ryb2lkZ3JlZW48L2l0ZW0+CisgICAgPC9zdHlsZT4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwcy9CdWlsZFdpZGdldC9yZXMveG1sL3dpZGdldF9idWlsZC54bWwgYi9hcHBzL0J1aWxkV2lkZ2V0L3Jlcy94bWwvd2lkZ2V0X2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2M0NDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9CdWlsZFdpZGdldC9yZXMveG1sL3dpZGdldF9idWlsZC54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPGFwcHdpZGdldC1wcm92aWRlciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDptaW5XaWR0aD0iMTUwZGlwIgorICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI3MmRpcCIKKyAgICBhbmRyb2lkOnVwZGF0ZVBlcmlvZE1pbGxpcz0iMCIKKyAgICBhbmRyb2lkOmluaXRpYWxMYXlvdXQ9IkBsYXlvdXQvd2lkZ2V0IiAvPgpkaWZmIC0tZ2l0IGEvYXBwcy9CdWlsZFdpZGdldC9zcmMvY29tL2FuZHJvaWQvYnVpbGR3aWRnZXQvQnVpbGRXaWRnZXQuamF2YSBiL2FwcHMvQnVpbGRXaWRnZXQvc3JjL2NvbS9hbmRyb2lkL2J1aWxkd2lkZ2V0L0J1aWxkV2lkZ2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3YTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvQnVpbGRXaWRnZXQvc3JjL2NvbS9hbmRyb2lkL2J1aWxkd2lkZ2V0L0J1aWxkV2lkZ2V0LmphdmEKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGR3aWRnZXQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OworaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5hcHB3aWRnZXQuQXBwV2lkZ2V0TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcHdpZGdldC5BcHBXaWRnZXRQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5UaW1lOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuUmVtb3RlVmlld3M7CisKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKKworLyoqCisgKiBEZWZpbmUgYSBzaW1wbGUgd2lkZ2V0IHRoYXQgc2hvd3MgdGhlIFdpa3Rpb25hcnkgIldvcmQgb2YgdGhlIGRheS4iIFRvIGJ1aWxkCisgKiBhbiB1cGRhdGUgd2Ugc3Bhd24gYSBiYWNrZ3JvdW5kIHtAbGluayBTZXJ2aWNlfSB0byBwZXJmb3JtIHRoZSBBUEkgcXVlcmllcy4KKyAqLworcHVibGljIGNsYXNzIEJ1aWxkV2lkZ2V0IGV4dGVuZHMgQXBwV2lkZ2V0UHJvdmlkZXIgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVXBkYXRlKENvbnRleHQgY29udGV4dCwgQXBwV2lkZ2V0TWFuYWdlciBhcHBXaWRnZXRNYW5hZ2VyLAorICAgICAgICAgICAgaW50W10gYXBwV2lkZ2V0SWRzKSB7CisgICAgICAgIC8vIFRvIHByZXZlbnQgYW55IEFOUiB0aW1lb3V0cywgd2UgcGVyZm9ybSB0aGUgdXBkYXRlIGluIGEgc2VydmljZQorICAgICAgICBjb250ZXh0LnN0YXJ0U2VydmljZShuZXcgSW50ZW50KGNvbnRleHQsIFVwZGF0ZVNlcnZpY2UuY2xhc3MpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFVwZGF0ZVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3RhcnQoSW50ZW50IGludGVudCwgaW50IHN0YXJ0SWQpIHsKKyAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSB3aWRnZXQgdXBkYXRlCisgICAgICAgICAgICBSZW1vdGVWaWV3cyB1cGRhdGVWaWV3cyA9IGJ1aWxkVXBkYXRlKHRoaXMpOworCisgICAgICAgICAgICAvLyBQdXNoIHVwZGF0ZSBmb3IgdGhpcyB3aWRnZXQgdG8gdGhlIGhvbWUgc2NyZWVuCisgICAgICAgICAgICBDb21wb25lbnROYW1lIHRoaXNXaWRnZXQgPSBuZXcgQ29tcG9uZW50TmFtZSh0aGlzLCBCdWlsZFdpZGdldC5jbGFzcyk7CisgICAgICAgICAgICBBcHBXaWRnZXRNYW5hZ2VyIG1hbmFnZXIgPSBBcHBXaWRnZXRNYW5hZ2VyLmdldEluc3RhbmNlKHRoaXMpOworICAgICAgICAgICAgbWFuYWdlci51cGRhdGVBcHBXaWRnZXQodGhpc1dpZGdldCwgdXBkYXRlVmlld3MpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlbW90ZVZpZXdzIGJ1aWxkVXBkYXRlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgLy8gUGljayBvdXQgbW9udGggbmFtZXMgZnJvbSByZXNvdXJjZXMKKyAgICAgICAgICAgIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOworICAgICAgICAgICAgUmVtb3RlVmlld3MgdXBkYXRlVmlld3MgPSBuZXcgUmVtb3RlVmlld3MoCisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRQYWNrYWdlTmFtZSgpLCBSLmxheW91dC53aWRnZXQpOworCisgICAgICAgICAgICBQZW5kaW5nSW50ZW50IHBlbmRpbmdJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDAgLyogbm8gcmVxdWVzdENvZGUgKi8sIAorICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50KGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuQUNUSU9OX0RFVklDRV9JTkZPX1NFVFRJTkdTKSwKKyAgICAgICAgICAgICAgICAgICAgMCAvKiBubyBmbGFncyAqLyk7CisgICAgICAgICAgICB1cGRhdGVWaWV3cy5zZXRPbkNsaWNrUGVuZGluZ0ludGVudChSLmlkLndpZGdldCwgcGVuZGluZ0ludGVudCk7CisKKyAgICAgICAgICAgIHVwZGF0ZVZpZXdzLnNldFRleHRWaWV3VGV4dChSLmlkLmJ1aWxkX2luZm8sIAorICAgICAgICAgICAgICAgIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTi5DT0RFTkFNRSArICIgIiArCisgICAgICAgICAgICAgICAgYW5kcm9pZC5vcy5CdWlsZC5JRCk7CisgICAgICAgICAgICB1cGRhdGVWaWV3cy5zZXRUZXh0Vmlld1RleHQoUi5pZC5idWlsZF9jaGFuZ2VsaXN0LAorICAgICAgICAgICAgICAgIGFuZHJvaWQub3MuQnVpbGQuRklOR0VSUFJJTlQKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVZpZXdzOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJpbmQgdG8gdGhpcyBzZXJ2aWNlCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwcHMvQ3VzdG9tTG9jYWxlL0FuZHJvaWQubWsgYi9hcHBzL0N1c3RvbUxvY2FsZS9BbmRyb2lkLm1rCmluZGV4IDI3NTIwN2YuLjRiOGJhZGMgMTAwNjQ0Ci0tLSBhL2FwcHMvQ3VzdG9tTG9jYWxlL0FuZHJvaWQubWsKKysrIGIvYXBwcy9DdXN0b21Mb2NhbGUvQW5kcm9pZC5tawpAQCAtMSw3ICsxLDcgQEAKIExPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHVzZXIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLXN1YmRpci1qYXZhLWZpbGVzKQogCmRpZmYgLS1naXQgYS9hcHBzL0N1c3RvbUxvY2FsZS9yZXMvbGF5b3V0L2xpc3RfaXRlbS54bWwgYi9hcHBzL0N1c3RvbUxvY2FsZS9yZXMvbGF5b3V0L2xpc3RfaXRlbS54bWwKaW5kZXggOGM1OWY5Mi4uMGZmYjhiMCAxMDA2NDQKLS0tIGEvYXBwcy9DdXN0b21Mb2NhbGUvcmVzL2xheW91dC9saXN0X2l0ZW0ueG1sCisrKyBiL2FwcHMvQ3VzdG9tTG9jYWxlL3Jlcy9sYXlvdXQvbGlzdF9pdGVtLnhtbApAQCAtMTUsMTIgKzE1LDEyIEBACiAtLT4KIDxMaW5lYXJMYXlvdXQKICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI1ZGlwIj4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sb2NhbGVfY29kZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6dGV4dEFwcGVhcmFuY2VMYXJnZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgpAQCAtMjgsNyArMjgsNyBAQAogICAgIDxUZXh0VmlldwogICAgICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbG9jYWxlX25hbWUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOnRleHRBcHBlYXJhbmNlIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CmRpZmYgLS1naXQgYS9hcHBzL0N1c3RvbUxvY2FsZS9yZXMvbGF5b3V0L21haW4ueG1sIGIvYXBwcy9DdXN0b21Mb2NhbGUvcmVzL2xheW91dC9tYWluLnhtbAppbmRleCBiMWVhYTUxLi41NWJkOTBjIDEwMDY0NAotLS0gYS9hcHBzL0N1c3RvbUxvY2FsZS9yZXMvbGF5b3V0L21haW4ueG1sCisrKyBiL2FwcHMvQ3VzdG9tTG9jYWxlL3Jlcy9sYXlvdXQvbWFpbi54bWwKQEAgLTE2LDEwICsxNiwxMCBAQAogPExpbmVhckxheW91dAogICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2hlYWRlcl9jdXJyZW50X2xvY2FsZSIKQEAgLTI4LDEyICsyOCwxMiBAQAogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9oZWFkZXJfYmFja2dyb3VuZCIgLz4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jdXJyZW50X2xvY2FsZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjVkaXAiIC8+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2hlYWRlcl9sb2NhbGVfbGlzdCIKQEAgLTQyLDE4ICs0MiwxOCBAQAogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9oZWFkZXJfYmFja2dyb3VuZCIgLz4KICAgICA8TGlzdFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQGlkL2FuZHJvaWQ6bGlzdCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjhkaXAiIC8+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkBpZC9hbmRyb2lkOmVtcHR5IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fZGF0YV9sYWJlbCIgLz4KICAgICA8QnV0dG9uCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbmV3X2xvY2FsZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI4ZGlwIgpkaWZmIC0tZ2l0IGEvYXBwcy9DdXN0b21Mb2NhbGUvcmVzL2xheW91dC9uZXdfbG9jYWxlLnhtbCBiL2FwcHMvQ3VzdG9tTG9jYWxlL3Jlcy9sYXlvdXQvbmV3X2xvY2FsZS54bWwKaW5kZXggZmFmYjE2ZS4uZTViZTQwOCAxMDA2NDQKLS0tIGEvYXBwcy9DdXN0b21Mb2NhbGUvcmVzL2xheW91dC9uZXdfbG9jYWxlLnhtbAorKysgYi9hcHBzL0N1c3RvbUxvY2FsZS9yZXMvbGF5b3V0L25ld19sb2NhbGUueG1sCkBAIC0xNiwzMiArMTYsMzIgQEAKIDxMaW5lYXJMYXlvdXQKICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iOGRpcCIKICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iOGRpcCI+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9uZXdfbG9jYWxlX2xhYmVsIiAvPgogICAgIDxFZGl0VGV4dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3ZhbHVlIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmhpbnQ9IkBzdHJpbmcvbG9jYWxlX2RlZmF1bHQiIGFuZHJvaWQ6aW5wdXRUeXBlPSJ0ZXh0Ii8+CiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgPEJ1dHRvbgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hZGQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWRkX2J1dHRvbiIgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIi8+CiAgICAgICAgIDxCdXR0b24KICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWRkX2FuZF9zZWxlY3QiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWRkX3NlbGVjdF9idXR0b24iIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIvPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9BbmRyb2lkLm1rIGIvYXBwcy9EZXZlbG9wbWVudC9BbmRyb2lkLm1rCmluZGV4IGE2NjZkN2YuLmZhOTI5YjYgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvQW5kcm9pZC5taworKysgYi9hcHBzL0RldmVsb3BtZW50L0FuZHJvaWQubWsKQEAgLTMsOCArMyw4IEBACiAKIExPQ0FMX01PRFVMRV9UQUdTIDo9IGVuZwogCitMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gYW5kcm9pZC1jb21tb24KIExPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQudGVzdC5ydW5uZXIKLUxPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBnb29nbGVsb2dpbi1jbGllbnQKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtc3ViZGlyLWphdmEtZmlsZXMpIFwKICAgICAgICAgICAgICAgICBzcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvSVJlbW90ZVNlcnZpY2UuYWlkbCBcCmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L0FuZHJvaWRNYW5pZmVzdC54bWwgYi9hcHBzL0RldmVsb3BtZW50L0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggN2YwZjU5NC4uM2M3NWE2MyAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMTcsMjMgKzE3LDI5IEBACiA8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5kZXZlbG9wbWVudCIKICAgICAgICAgYW5kcm9pZDp2ZXJzaW9uQ29kZT0iMSIgYW5kcm9pZDp2ZXJzaW9uTmFtZT0iMS4wIj4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX1NFVFRJTkdTIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1dJRklfU1RBVEUiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfTkVUV09SS19TVEFURSIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkNIQU5HRV9XSUZJX1NUQVRFIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uREVWSUNFX1BPV0VSIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uRFVNUCIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9QUkVGRVJSRURfQVBQTElDQVRJT05TIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUkVTVEFSVF9QQUNLQUdFUyIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTklNQVRJT05fU0NBTEUiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5TRVRfUFJPQ0VTU19MSU1JVCIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTFdBWVNfRklOSVNIIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0RFQlVHX0FQUCIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkdFVF9BQ0NPVU5UUyIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkhBUkRXQVJFX1RFU1QiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk1BTkFHRV9BQ0NPVU5UUyIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFQk9PVCIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLktJTExfQkFDS0dST1VORF9QUk9DRVNTRVMiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5TRVRfQUxXQVlTX0ZJTklTSCIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTklNQVRJT05fU0NBTEUiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5TRVRfREVCVUdfQVBQIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX1BSRUZFUlJFRF9BUFBMSUNBVElPTlMiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5TRVRfUFJPQ0VTU19MSU1JVCIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlVTRV9DUkVERU5USUFMUyIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldBS0VfTE9DSyIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX1NFVFRJTkdTIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJjb20uZ29vZ2xlLmFuZHJvaWQuZ29vZ2xlYXBwcy5wZXJtaXNzaW9uLkFDQ0VTU19HT09HTEVfUEFTU1dPUkQiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLnBlcm1pc3Npb24uR09PR0xFX0FVVEgiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLnBlcm1pc3Npb24uR09PR0xFX0FVVEguQUxMX1NFUlZJQ0VTIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJjb20uZ29vZ2xlLmFuZHJvaWQuZ29vZ2xlYXBwcy5wZXJtaXNzaW9uLkdPT0dMRV9BVVRILllvdVR1YmVVc2VyIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJjb20uZ29vZ2xlLmFuZHJvaWQuZ29vZ2xlYXBwcy5wZXJtaXNzaW9uLkFDQ0VTU19HT09HTEVfUEFTU1dPUkQiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQUNDT1VOVFMiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5VU0VfQ1JFREVOVElBTFMiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5NQU5BR0VfQUNDT1VOVFMiIC8+CiAKICAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpsYWJlbD0iRGV2IFRvb2xzIgogICAgICAgICAgICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNfbGF1bmNoZXJfZGV2dG9vbHMiPgpAQCAtNTMsMTMgKzU5LDYgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5URVNUIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJFeGNlcHRpb25Ccm93c2VyIiBhbmRyb2lkOmxhYmVsPSJFeGNlcHRpb24gQnJvd3NlciI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuVEVTVCIgLz4KLSAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iU3RhY2t0cmFjZVZpZXdlciIgYW5kcm9pZDpsYWJlbD0iU3RhY2t0cmFjZSBWaWV3ZXIiLz4KICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUGFja2FnZVN1bW1hcnkiIGFuZHJvaWQ6bGFiZWw9IlBhY2thZ2UgU3VtbWFyeSI+CiAgICAgICAgIDwvYWN0aXZpdHk+CiAgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNob3dBY3Rpdml0eSIgYW5kcm9pZDpsYWJlbD0iQWN0aXZpdHkiPgpAQCAtOTYsNiArOTUsMTIgQEAKICAgICAgICAgPC9hY3Rpdml0eT4KICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iRGV0YWlscyI+CiAgICAgICAgIDwvYWN0aXZpdHk+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkNvbm5lY3Rpdml0eSIgYW5kcm9pZDpsYWJlbD0iQ29ubmVjdGl2aXR5IiA+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuVEVTVCIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iRGV2ZWxvcG1lbnRTZXR0aW5ncyIgYW5kcm9pZDpsYWJlbD0iRGV2ZWxvcG1lbnQgU2V0dGluZ3MiID4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KQEAgLTExNyw0NCArMTIyLDU3IEBACiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+CiAKLSAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJHTFNUZXN0ZXIiIGFuZHJvaWQ6bGFiZWw9Ikdvb2dsZSBMb2dpbiBTZXJ2aWNlIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iR0xTVGVzdGVyIiBhbmRyb2lkOmxhYmVsPSJHb29nbGUgTG9naW4gU2VydmljZSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuVEVTVCIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAotICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlJ1bm5pbmdQcm9jZXNzZXMiIGFuZHJvaWQ6bGFiZWw9IlJ1bm5pbmcgcHJvY2Vzc2VzIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUnVubmluZ1Byb2Nlc3NlcyIgYW5kcm9pZDpsYWJlbD0iUnVubmluZyBwcm9jZXNzZXMiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlRFU1QiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUHJvY2Vzc0luZm8iIGFuZHJvaWQ6bGFiZWw9IlByb2Nlc3MgSW5mb3JtYXRpb24iPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJQcm9jZXNzSW5mbyIgYW5kcm9pZDpsYWJlbD0iUHJvY2VzcyBJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVciIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuREVGQVVMVCIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICA8L2FjdGl2aXR5PgorICAgICAgICA8L2FjdGl2aXR5PgogICAgIDwhLS0KLSAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJBcHBId0NvbmZpZ0xpc3QiIGFuZHJvaWQ6bGFiZWw9IkFwcGxpY2F0aW9ucyBIdyBDb25maWd1cmF0aW9uIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQXBwSHdDb25maWdMaXN0IiBhbmRyb2lkOmxhYmVsPSJBcHBsaWNhdGlvbnMgSHcgQ29uZmlndXJhdGlvbiI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuVEVTVCIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICA8L2FjdGl2aXR5PgorICAgICAgICA8L2FjdGl2aXR5PgogICAgIC0tPgotICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkFwcEh3UHJlZiIgYW5kcm9pZDpsYWJlbD0iQXBwbGljYXRpb25zIEhhcmR3YXJlIFByZWZlcmVuY2VzIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQXBwSHdQcmVmIiBhbmRyb2lkOmxhYmVsPSJBcHBsaWNhdGlvbnMgSGFyZHdhcmUgUHJlZmVyZW5jZXMiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkRFRkFVTFQiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgPC9hY3Rpdml0eT4KLSAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJQZXJtaXNzaW9uRGV0YWlscyIgYW5kcm9pZDpsYWJlbD0iUGVybWlzc2lvbiBJbmZvIj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUGVybWlzc2lvbkRldGFpbHMiIGFuZHJvaWQ6bGFiZWw9IlBlcm1pc3Npb24gSW5mbyI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQuVklFV19QRVJNSVNTSU9OIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkRFRkFVTFQiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJCYWRCZWhhdmlvckFjdGl2aXR5IiBhbmRyb2lkOmxhYmVsPSJCYWQgQmVoYXZpb3IiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlRFU1QiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisgICAgICAgIDxyZWNlaXZlciBhbmRyb2lkOm5hbWU9IkJhZEJlaGF2aW9yQWN0aXZpdHkkQmFkUmVjZWl2ZXIiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLmRldmVsb3BtZW50LkJBRF9CRUhBVklPUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9yZWNlaXZlcj4KKyAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSJCYWRCZWhhdmlvckFjdGl2aXR5JEJhZFNlcnZpY2UiIC8+CiAgICAgPC9hcHBsaWNhdGlvbj4KIDwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudF9saXN0X2NvbnRleHRfbWVudS54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudF9saXN0X2NvbnRleHRfbWVudS54bWwKaW5kZXggNTBlN2NhMS4uODlmODI0MSAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRfbGlzdF9jb250ZXh0X21lbnUueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50X2xpc3RfY29udGV4dF9tZW51LnhtbApAQCAtMjIsNiArMjIsOSBAQAogICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2dldF9hdXRoX3Rva2VuIgogICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2FjY291bnRzX3Rlc3Rlcl9nZXRfYXV0aF90b2tlbiIgLz4KIAorICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX3Rlc3RfaGFzX2ZlYXR1cmVzIgorICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2FjY291bnRzX3Rlc3Rlcl90ZXN0X2hhc19mZWF0dXJlcyIgLz4KKwogICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2ludmFsaWRhdGVfYXV0aF90b2tlbiIKICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9hY2NvdW50c190ZXN0ZXJfaW52YWxpZGF0ZV9hdXRoX3Rva2VuIiAvPgogCmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudF9saXN0X3ZpZXcueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRfbGlzdF92aWV3LnhtbAppbmRleCBkMjU1NjcyLi40NzQ4NGVkIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudF9saXN0X3ZpZXcueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50X2xpc3Rfdmlldy54bWwKQEAgLTE2LDUgKzE2LDUgQEAKIAogPExpc3RWaWV3CiAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ii8+CisgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50c190ZXN0ZXIueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRzX3Rlc3Rlci54bWwKaW5kZXggZTY5ZjUwNS4uZTNkZWU1MyAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRzX3Rlc3Rlci54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRzX3Rlc3Rlci54bWwKQEAgLTE3LDIwICsxNywyMCBAQAogPExpbmVhckxheW91dAogICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRzX3Rlc3Rlcl9hdXRoZW50aWNhdG9yc19saXN0IgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiLz4KKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiLz4KIAogICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfYWNjb3VudF90eXBlc19zcGlubmVyX2xhYmVsIgpAQCAtNDUsMTEgKzQ1LDExIEBACiAKICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgICA8QnV0dG9uCiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRzX3Rlc3Rlcl9nZXRfYWNjb3VudHNfYnlfdHlwZSIKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2Rlc2lyZWRGZWF0dXJlcyIKICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICA8L0xpbmVhckxheW91dD4KICAgICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRzX3Rlc3Rlcl9kZXNpcmVkRmVhdHVyZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCkBAIC0xMDYsMTEgKzEwNiwxMSBAQAogCiAgICAgPExpbmVhckxheW91dAogICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2FjY291bnRzX2xpc3QiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIvPgorICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIvPgogCiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hcHBsaWNhdGlvbl9od19wcmVmLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hcHBsaWNhdGlvbl9od19wcmVmLnhtbAppbmRleCBjMzhhMGNiLi5jMDAxMWU1IDEwMDc1NQotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYXBwbGljYXRpb25faHdfcHJlZi54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FwcGxpY2F0aW9uX2h3X3ByZWYueG1sCkBAIC0xNSw3NSArMTUsNzUgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIiA+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfcGFja2FnZV9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wYWNrYWdlX2xhYmVsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfcGFja2FnZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfdG91Y2hzY3JlZW5fbGFiZWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdG91Y2hzY3JlZW5fbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgLz4KICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl90b3VjaHNjcmVlbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfaW5wdXRfbWV0aG9kX2xhYmVsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2lucHV0X21ldGhvZF9sYWJlbCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiAvPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hdHRyX2lucHV0X21ldGhvZCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfaGFyZF9rZXlib2FyZF9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9oYXJkX2tleWJvYXJkX2xhYmVsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfaGFyZF9rZXlib2FyZCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfbmF2aWdhdGlvbl9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9uYXZpZ2F0aW9uX2xhYmVsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfbmF2aWdhdGlvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfZml2ZV93YXlfbmF2X2xhYmVsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2ZpdmVfd2F5X25hdl9sYWJlbCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiAvPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hdHRyX2ZpdmVfd2F5X25hdiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hdHRyX2dsZXNfdmVyc2lvbl9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9nbGVzX3ZlcnNpb25fbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgLz4KICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9nbGVzX3ZlcnNpb24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KICAgICA8L0xpbmVhckxheW91dD4KIDwvU2Nyb2xsVmlldz4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hdXRoZW50aWNhdG9yc19saXN0X2l0ZW0ueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2F1dGhlbnRpY2F0b3JzX2xpc3RfaXRlbS54bWwKaW5kZXggMzA5YTgxOC4uMjVlMWRhZSAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2F1dGhlbnRpY2F0b3JzX2xpc3RfaXRlbS54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2F1dGhlbnRpY2F0b3JzX2xpc3RfaXRlbS54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOm1pbkhlaWdodD0iP2FuZHJvaWQ6YXR0ci9saXN0UHJlZmVycmVkSXRlbUhlaWdodCIKICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjFkaXAiCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfYXV0aGVudGljYXRvcl9sYWJlbCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgogICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTGFyZ2UiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsfGNlbnRlcl92ZXJ0aWNhbCIgLz4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9iYWRfYmVoYXZpb3IueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2JhZF9iZWhhdmlvci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODYzZgotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9iYWRfYmVoYXZpb3IueG1sCkBAIC0wLDAgKzEsNjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl9jcmFzaF9zeXN0ZW0iCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmFkX2JlaGF2aW9yX2NyYXNoX3N5c3RlbV9sYWJlbCIgLz4KKworICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9iYWRfYmVoYXZpb3JfY3Jhc2hfbWFpbiIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYWRfYmVoYXZpb3JfY3Jhc2hfbWFpbl9sYWJlbCIgLz4KKworICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9iYWRfYmVoYXZpb3JfY3Jhc2hfdGhyZWFkIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9jcmFzaF90aHJlYWRfbGFiZWwiIC8+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmFkX2JlaGF2aW9yX2NyYXNoX25hdGl2ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYWRfYmVoYXZpb3JfY3Jhc2hfbmF0aXZlX2xhYmVsIiAvPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl93dGYiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmFkX2JlaGF2aW9yX3d0Zl9sYWJlbCIgLz4KKworICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9iYWRfYmVoYXZpb3JfYW5yIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9hbnJfbGFiZWwiIC8+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmFkX2JlaGF2aW9yX2Fucl9hY3Rpdml0eSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYWRfYmVoYXZpb3JfYW5yX2FjdGl2aXR5X2xhYmVsIiAvPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl9hbnJfYnJvYWRjYXN0IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9hbnJfYnJvYWRjYXN0X2xhYmVsIiAvPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl9hbnJfc2VydmljZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYWRfYmVoYXZpb3JfYW5yX3NlcnZpY2VfbGFiZWwiIC8+CisKKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2Nvbm5lY3Rpdml0eS54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvY29ubmVjdGl2aXR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIzMDRmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2Nvbm5lY3Rpdml0eS54bWwKQEAgLTAsMCArMSwyMDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisvKiAvL2RldmljZS9hcHBzL1NldHRpbmdzL2Fzc2V0cy9yZXMvYW55L2xheW91dC9rZXlib2FyZF92ZXJzaW9uLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworLS0+Cis8TGluZWFyTGF5b3V0CisgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZW5hYmxlV2lmaSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9lbmFibGVfd2lmaSIgLz4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2Rpc2FibGVXaWZpIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2Rpc2FibGVfd2lmaSIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDwhLS0gZGl2aWRlciBsaW5lIC0tPgorICAgIDxWaWV3IGFuZHJvaWQ6YmFja2dyb3VuZD0iI0ZGRkZGRkZGIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iM2RpcCIgLz4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjRkaXAiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc3RhcnREZWxheWVkQ3ljbGUiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RhcnRfdG9nZ2xpbmciIC8+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdG9wRGVsYXllZEN5Y2xlIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0b3BfdG9nZ2xpbmciIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvd2lmaV9vbl9kdXJhdGlvbiIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvZGNfd2lmaV9vbl9kdXJhdGlvbiIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bWluRW1zPSIxNSIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy93aWZpX29mZl9kdXJhdGlvbiIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvZGNfd2lmaV9vZmZfZHVyYXRpb24iCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOm1pbkVtcz0iMTUiLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy93aWZpX2N5Y2xlc19kb25lIiAvPgorICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9kY193aWZpX2N5Y2xlc19kb25lIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDptaW5FbXM9IjE1Ii8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8IS0tIGRpdmlkZXIgbGluZSAtLT4KKyAgICA8VmlldyBhbmRyb2lkOmJhY2tncm91bmQ9IiNGRkZGRkZGRiIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjNkaXAiIC8+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI0ZGlwIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3N0YXJ0U2NyZWVuQ3ljbGUiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RhcnRfc2NyZWVuX3RvZ2dsaW5nIiAvPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc3RvcFNjcmVlbkN5Y2xlIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0b3Bfc2NyZWVuX3RvZ2dsaW5nIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3dpZmlfb25fZHVyYXRpb24iIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3NjX3dpZmlfb25fZHVyYXRpb24iCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOm1pbkVtcz0iMTUiIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvd2lmaV9vZmZfZHVyYXRpb24iIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3NjX3dpZmlfb2ZmX2R1cmF0aW9uIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDptaW5FbXM9IjE1Ii8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvd2lmaV9jeWNsZXNfZG9uZSIgLz4KKyAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvc2Nfd2lmaV9jeWNsZXNfZG9uZSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bWluRW1zPSIxNSIvPgorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPCEtLSBkaXZpZGVyIGxpbmUgLS0+CisgICAgPFZpZXcgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjRkZGRkZGRkYiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzZGlwIiAvPgorCisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdGFydF9tbXMiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RhcnRfbW1zIiAvPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc3RvcF9tbXMiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RvcF9tbXMiIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdGFydF9oaXByaSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdGFydF9oaXByaSIgLz4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3N0b3BfaGlwcmkiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RvcF9oaXByaSIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NyYXNoIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NyYXNoIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorPC9MaW5lYXJMYXlvdXQ+CisKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9kZXZlbG9wbWVudF9zZXR0aW5ncy54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZGV2ZWxvcG1lbnRfc2V0dGluZ3MueG1sCmluZGV4IDdiYWQzYmIuLjE2YzJjZGYgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9kZXZlbG9wbWVudF9zZXR0aW5ncy54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2RldmVsb3BtZW50X3NldHRpbmdzLnhtbApAQCAtMTgsMTIgKzE4LDEyIEBACiAqLwogLS0+CiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFJlbGF0aXZlTGF5b3V0IAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZGVidWdfYXBwX2xhYmVsIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTU0LDEwICs1NCwxNiBAQAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC93YWl0X2Zvcl9kZWJ1Z2dlciIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIgLz4KIAorICAgICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3BvaW50ZXJfbG9jYXRpb24iCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIgLz4KKwogICAgICAgICA8Q2hlY2tCb3ggYW5kcm9pZDppZD0iQCtpZC9zaG93X2xvYWQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3NlcGFyYXRvciIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvcG9pbnRlcl9sb2NhdGlvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9kZXZlbG9wbWVudF9zZXR0aW5nc19zaG93X2xvYWRfdGV4dCIgLz4KIApAQCAtNzYsNyArODIsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RldmVsb3BtZW50X3NldHRpbmdzX2NvbXBhdGliaWxpdHlfbW9kZV90ZXh0IiAvPgogCiAgICAgICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvbWF4X3Byb2NzIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC9jb21wYXRpYmlsaXR5X21vZGUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiIC8+CkBAIC0xMjMsMjEgKzEyOSwyMSBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RldmVsb3BtZW50X3NldHRpbmdzX3Nob3dfc2xlZXBfdGV4dCIgLz4KICAgICAgICAgICAgIAogICAgICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3dpbmRvd19hbmltYXRpb25fc2NhbGUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3Nob3dfc2xlZXAiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiPgogICAgICAgICA8L1NwaW5uZXI+CiAKICAgICAgICAgPFNwaW5uZXIgYW5kcm9pZDppZD0iQCtpZC90cmFuc2l0aW9uX2FuaW1hdGlvbl9zY2FsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvd2luZG93X2FuaW1hdGlvbl9zY2FsZSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSI+CiAgICAgICAgIDwvU3Bpbm5lcj4KIAogICAgICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL2ZvbnRfaGludGluZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvdHJhbnNpdGlvbl9hbmltYXRpb25fc2NhbGUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2VudGVyX3VybC54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZW50ZXJfdXJsLnhtbAppbmRleCAwNjJjNjdlLi41ODY4MDA2IDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZW50ZXJfdXJsLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZW50ZXJfdXJsLnhtbApAQCAtMTUsMTkgKzE1LDE5IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+ICAgICAgICAgIAkKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+ICAgICAgICAgIAkKICAgICA8Y29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQuVXJsRWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC91cmxfZWRpdF90ZXh0IgogICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxM3NwIgogICAgICAgICBhbmRyb2lkOmF1dG9UZXh0PSJmYWxzZSIKICAgICAgICAgYW5kcm9pZDpjYXBpdGFsaXplPSJub25lIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAgICAgPGNvbS5hbmRyb2lkLmRldmVsb3BtZW50LkRpc3BsYXlFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2Rpc3BsYXlfZWRpdF90ZXh0IgogICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxM3NwIgogICAgICAgICBhbmRyb2lkOmF1dG9UZXh0PSJmYWxzZSIKICAgICAgICAgYW5kcm9pZDpjYXBpdGFsaXplPSJub25lIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2xpc3QiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIvPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIvPgogPC9MaW5lYXJMYXlvdXQ+CiAKIApkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2dldF9hdXRoX3Rva2VuX3ZpZXcueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2dldF9hdXRoX3Rva2VuX3ZpZXcueG1sCmluZGV4IGYzNzE1MjMuLmMwMTRjYWQgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9nZXRfYXV0aF90b2tlbl92aWV3LnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZ2V0X2F1dGhfdG9rZW5fdmlldy54bWwKQEAgLTE3LDE2ICsxNywxNiBAQAogPExpbmVhckxheW91dAogICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfZ2V0X2F1dGhfdG9rZW5fZGlhbG9nX21lc3NhZ2UiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWNjb3VudHNfdGVzdGVyX2VudGVyX2F1dGhfdG9rZW5fdHlwZSIgLz4KIAogICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRzX3Rlc3Rlcl9hdXRoX3Rva2VuX3R5cGUiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgYW5kcm9pZDptaW5XaWR0aD0iMjUwZGlwIgogICAgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbEhvcml6b250YWxseT0idHJ1ZSIKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9nbHNfdGVzdGVyLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9nbHNfdGVzdGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJkNDU0OS4uMDAwMDAwMAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZ2xzX3Rlc3Rlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPExpbmVhckxheW91dAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+Ci0KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgotCi0gICAgICA8QnV0dG9uCi0gICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3ByZWZlcl9ob3N0ZWQiCi0gICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZ2xzX3Rlc3Rlcl9wcmVmZXJfaG9zdGVkIi8+Ci0KLSAgICAgIDxCdXR0b24KLSAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcmVxdWlyZV9nb29nbGUiCi0gICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZ2xzX3Rlc3Rlcl9yZXF1aXJlX2dvb2dsZSIvPgotCi0gICAgICA8QnV0dG9uCi0gICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2dldF9hY2NvdW50cyIKLSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9nbHNfdGVzdGVyX2dldF9hY2NvdW50cyIvPgotCi0gICAgICA8QnV0dG9uCi0gICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2NsZWFyIgotICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2dsc190ZXN0ZXJfY2xlYXIiLz4KLQotICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2dvIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2dsc190ZXN0ZXJfZ28iLz4KLQotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdXNlcm5hbWVfZWRpdCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOm1pbldpZHRoPSIyNTBkaXAiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6c2Nyb2xsSG9yaXpvbnRhbGx5PSJ0cnVlIgotICAgICAgICAgICAgICBhbmRyb2lkOmNhcGl0YWxpemU9Im5vbmUiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6YXV0b1RleHQ9ImZhbHNlIi8+Ci0KLSAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+Ci0KLSAgICAgIDxDaGVja0JveCBhbmRyb2lkOmlkPSJAK2lkL2RvX25vdGlmaWNhdGlvbiIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9nbHNfdGVzdGVyX2RvX25vdGlmaWNhdGlvbiIvPgotCi0gICAgICA8Q2hlY2tCb3ggYW5kcm9pZDppZD0iQCtpZC9ydW5faW50ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2dsc190ZXN0ZXJfcnVuX2ludGVudCIvPgotCi0gICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgotCi0gICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3NlcnZpY2Vfc3Bpbm5lciIKLSAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L2dsc3Rlc3Rlcl9zZXJ2aWNlcyIvPgotCi0gICAgICA8QnV0dG9uCi0gICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3dpcGVfcGFzc3dvcmRzIgotICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2dsc190ZXN0ZXJfd2lwZV9wYXNzd29yZHMiLz4KLSAgICA8L0xpbmVhckxheW91dD4KLQotICAgIDxjb20uYW5kcm9pZC5kZXZlbG9wbWVudC5Mb2dUZXh0Qm94Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxMGRpcCIKLSAgICAgICAvPgotCi08L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9sb2dfdmlld2VyLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9sb2dfdmlld2VyLnhtbAppbmRleCA5OGZlMTRlLi43MDc1ZDVmIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvbG9nX3ZpZXdlci54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2xvZ192aWV3ZXIueG1sCkBAIC0xNSw2ICsxNSw2IEBACiAtLT4KIAogPGNvbS5hbmRyb2lkLmRldmVsb3BtZW50LkxvZ1RleHRCb3ggeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAvPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L21lZGlhX3NjYW5uZXJfYWN0aXZpdHkueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L21lZGlhX3NjYW5uZXJfYWN0aXZpdHkueG1sCmluZGV4IDUzZjJiMTUuLjk3NGY2ODMgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9tZWRpYV9zY2FubmVyX2FjdGl2aXR5LnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvbWVkaWFfc2Nhbm5lcl9hY3Rpdml0eS54bWwKQEAgLTE1LDExICsxNSwxMSBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAJIAkKLQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAJYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90aXRsZSIgYW5kcm9pZDp0ZXh0U2l6ZT0iMTZzcCIgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9tb25rZXlfc2NyZWVuLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9tb25rZXlfc2NyZWVuLnhtbAppbmRleCBjNTA4MzM4Li5mYzRhOWQwIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvbW9ua2V5X3NjcmVlbi54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L21vbmtleV9zY3JlZW4ueG1sCkBAIC0xNiwxMiArMTYsMTIgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjEwZGlwIiA+CiAKQEAgLTMyLDE0ICszMiwxNCBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL21vbmtleV9zY3JlZW5faW5pdGlhbF9hY3Rpdml0eV9sYWJlbCIgLz4KIAogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvaW5pdGlhbEFjdGl2aXR5IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL21vbmtleV9zY3JlZW5faW5pdGlhbEFjdGl2aXR5X3RleHQiIC8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNWRpcCIgPgogCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvbnVtYmVyT2ZFdmVudHMiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIyZGlwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9lZGl0Ym94X2JhY2tncm91bmQiCiAgICAgICAgICAgICBhbmRyb2lkOm51bWVyaWM9ImludGVnZXIiCmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGFja2FnZV9pdGVtLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX2l0ZW0ueG1sCmluZGV4IDc4NjBmOWIuLjVhMjY0OTYgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX2l0ZW0ueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX2l0ZW0ueG1sCkBAIC0xNSw2ICsxNSw2IEBACiAtLT4KIAogPEJ1dHRvbiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0JYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAgICAgPCEtLWFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvbGlzdF9oaWdobGlnaHQiLS0+CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGFja2FnZV9saXN0X2l0ZW0ueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L3BhY2thZ2VfbGlzdF9pdGVtLnhtbAppbmRleCA2YTBmYWVlLi4zMDQxYmNjIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGFja2FnZV9saXN0X2l0ZW0ueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX2xpc3RfaXRlbS54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iZmlsbCIgPgogCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCkBAIC00Myw3ICs0Myw3IEBACiAgICAgCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiA+CiAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9uYW1lIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGFja2FnZV9zdW1tYXJ5LnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX3N1bW1hcnkueG1sCmluZGV4IDk5NzE3ZTYuLmUwMmFiM2MgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX3N1bW1hcnkueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wYWNrYWdlX3N1bW1hcnkueG1sCkBAIC0xNSwyMSArMTUsMjEgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIiA+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3BhY2thZ2VWaWV3IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAKICAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNmRpcCIKQEAgLTQ0LDI5ICs0NCwyOSBAQAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2NsYXNzVmlldyIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9sYWJlbCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9kaXNhYmxlZCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9kaXNhYmxlZCIgLz4KIAogICAgICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3N5c3RlbSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zeXN0ZW0iIC8+CiAKICAgICAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9kZWJ1Z2dhYmxlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RlYnVnZ2FibGUiIC8+CiAKICAgICAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9ub2NvZGUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9jb2RlIiAvPgogCiAgICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcGVyc2lzdGVudCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wZXJzaXN0ZW50IiAvPgogCiAgICAgICAgICAgICA8L0xpbmVhckxheW91dD4KQEAgLTgwLDQ2ICs4MCw0NiBAQAogICAgICAgICA8L0xpbmVhckxheW91dD4KIAogICAgICAgICA8VGV4dFZpZXcgc3R5bGU9IkBzdHlsZS9TdW1tYXJ5Q2F0ZWdvcnlMYXlvdXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3BhY2thZ2Vfc3VtbWFyeV9wcm9jZXNzX2xhYmVsIiAvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Byb2Nlc3MiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgPFRleHRWaWV3IHN0eWxlPSJAc3R5bGUvU3VtbWFyeUNhdGVnb3J5TGF5b3V0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wYWNrYWdlX3N1bW1hcnlfdWlkX2xhYmVsIiAvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3VpZCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KIAogICAgICAgICA8VGV4dFZpZXcgc3R5bGU9IkBzdHlsZS9TdW1tYXJ5Q2F0ZWdvcnlMYXlvdXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3BhY2thZ2Vfc3VtbWFyeV90YXNrX2xhYmVsIiAvPgogCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Rhc2siCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgPFRleHRWaWV3IHN0eWxlPSJAc3R5bGUvU3VtbWFyeUNhdGVnb3J5TGF5b3V0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wYWNrYWdlX3N1bW1hcnlfdmVyc2lvbl9sYWJlbCIgLz4KIAogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC92ZXJzaW9uIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCiAgICAgICAgIDxUZXh0VmlldyBzdHlsZT0iQHN0eWxlL1N1bW1hcnlDYXRlZ29yeUxheW91dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcGFja2FnZV9zdW1tYXJ5X3NvdXJjZV9sYWJlbCIgLz4KIAogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9zb3VyY2UiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgPFRleHRWaWV3IHN0eWxlPSJAc3R5bGUvU3VtbWFyeUNhdGVnb3J5TGF5b3V0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wYWNrYWdlX3N1bW1hcnlfZGF0YV9sYWJlbCIgLz4KIAogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9kYXRhIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDppZD0iQCtpZC9hY3Rpdml0aWVzIiBzdHlsZT0iQHN0eWxlL1N1bW1hcnlDYXRlZ29yeUxheW91dCI+CiAgICAgICAgICAgICA8VGV4dFZpZXcgc3R5bGU9IkBzdHlsZS9TdW1tYXJ5Q2F0ZWdvcnlIZWFkZXIiCmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGVybWlzc2lvbl9kZXRhaWxzLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wZXJtaXNzaW9uX2RldGFpbHMueG1sCmluZGV4IGQ2NjM1ZjguLmIxOWVlMGIgMTAwNzU1Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wZXJtaXNzaW9uX2RldGFpbHMueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wZXJtaXNzaW9uX2RldGFpbHMueG1sCkBAIC0xNiwxNiArMTYsMTYgQEAKIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6ZmlsbFZpZXdwb3J0PSJ0cnVlIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIgPgogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIgPgogICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcGVybV9uYW1lX2xhYmVsIgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICA8L0xpbmVhckxheW91dD4KIAogICAgICAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiID4KICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Blcm1fZGVzY19sYWJlbCIKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKICAgICAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIiA+CiAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9wZXJtX2dyb3VwX2xhYmVsIgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICA8L0xpbmVhckxheW91dD4KIAogICAgICAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiID4KICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Blcm1fcHJvdGVjdGlvbl9sYWJlbCIKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKICAgICAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIiA+CiAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9wZXJtX3NvdXJjZV9sYWJlbCIKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKICAgICAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIiA+CiAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9zb3VyY2VfdWlkX2xhYmVsIgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIDwvTGluZWFyTGF5b3V0PgogICAgICAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6aWQ9IkAraWQvc2hhcmVkX3BrZ3NfcGFuZWwiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIgPgogICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvc2hhcmVkX3BrZ3NfbGFiZWwiCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wZXJtX2xpc3RfaGVhZGVyX3RleHQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgLz4KICAgICAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2xpc3QiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CiA8L1Njcm9sbFZpZXc+CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGtnX2xpc3RfaXRlbS54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcGtnX2xpc3RfaXRlbS54bWwKaW5kZXggMjlkZTQyMy4uNTg1ZTJmMSAxMDA3NTUKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L3BrZ19saXN0X2l0ZW0ueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wa2dfbGlzdF9pdGVtLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvcHJvY2Vzc19pbmZvLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wcm9jZXNzX2luZm8ueG1sCmluZGV4IGIyNWYyMjMuLjMxMWU4MWIgMTAwNzU1Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wcm9jZXNzX2luZm8ueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9wcm9jZXNzX2luZm8ueG1sCkBAIC0xNSwzMSArMTUsMzEgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIiA+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Byb2Nlc3NfbmFtZV9oZWFkZXIiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9wcm9jZXNzX25hbWVfaGVhZGVyIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Byb2Nlc3NfbmFtZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9wYWNrYWdlX2xpc3RfaGVhZGVyIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcGFja2FnZV9saXN0X2hlYWRlciIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiAvPgogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDppZD0iQCtpZC9wYWNrYWdlX2xpc3QiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9zaG93X2FjdGl2aXR5LnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9zaG93X2FjdGl2aXR5LnhtbAppbmRleCA2YTc2MTdjLi5jMDlhYzQ1IDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvc2hvd19hY3Rpdml0eS54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L3Nob3dfYWN0aXZpdHkueG1sCkBAIC0xOSwyMCArMTksMjAgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI4ZGlwIiBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyZGlwIiBhbmRyb2lkOnBhZGRpbmdSaWdodD0iMmRpcCIgPgogICAgIAogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9wYWNrYWdlVmlldyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiAvPgogICAgIAogICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI0ZGlwIgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI2ZGlwIiA+CkBAIC00Miw2MyArNDIsNjMgQEAKICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iOGRpcCIgLz4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgCiAgICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY2xhc3NWaWV3IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KICAgICAKICAgICAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9sYWJlbCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAgICAgCiAgICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbGF1bmNoIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KIAogICAgICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CiAgICAgCiAgICAgICAgIDwvTGluZWFyTGF5b3V0PgogICAgIAogICAgICAgICA8VGV4dFZpZXcgc3R5bGU9IkBzdHlsZS9TdW1tYXJ5Q2F0ZWdvcnlMYXlvdXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Nob3dfYWN0aXZpdHlfcHJvY2Vzc19sYWJlbCIgLz4KICAgICAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcHJvY2VzcyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KICAgICAKICAgICAgICAgPFRleHRWaWV3IHN0eWxlPSJAc3R5bGUvU3VtbWFyeUNhdGVnb3J5TGF5b3V0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zaG93X2FjdGl2aXR5X3Rhc2tfYWZmaW5pdHlfbGFiZWwiIC8+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Rhc2tBZmZpbml0eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KICAgICAKICAgICAgICAgPFRleHRWaWV3IHN0eWxlPSJAc3R5bGUvU3VtbWFyeUNhdGVnb3J5TGF5b3V0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zaG93X2FjdGl2aXR5X3JlcXVpcmVkX3Blcm1pc3Npb25fbGFiZWwiIC8+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Blcm1pc3Npb24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBzdHlsZT0iQHN0eWxlL1N1bW1hcnlDYXRlZ29yeUxheW91dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2hvd19hY3Rpdml0eV9tdWx0aXByb2Nlc3NfbGFiZWwiIC8+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL211bHRpcHJvY2VzcyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KICAgICAKICAgICAgICAgPFRleHRWaWV3IHN0eWxlPSJAc3R5bGUvU3VtbWFyeUNhdGVnb3J5TGF5b3V0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zaG93X2FjdGl2aXR5X2NsZWFyX29uX2JhY2tncm91bmRfbGFiZWwiIC8+CiAgICAgCiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2NsZWFyT25CYWNrZ3JvdW5kIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogICAgIAogICAgICAgICA8VGV4dFZpZXcgc3R5bGU9IkBzdHlsZS9TdW1tYXJ5Q2F0ZWdvcnlMYXlvdXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Nob3dfYWN0aXZpdHlfc3RhdGVfbm90X25lZWRlZF9sYWJlbCIgLz4KICAgICAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvc3RhdGVOb3ROZWVkZWQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAgICAgCiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9zeW5jX2FkYXB0ZXJfZHJpdmVyLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9zeW5jX2FkYXB0ZXJfZHJpdmVyLnhtbAppbmRleCA1OGMwZWJiLi45ZTk5ZTk5IDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvc3luY19hZGFwdGVyX2RyaXZlci54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L3N5bmNfYWRhcHRlcl9kcml2ZXIueG1sCkBAIC0xNywxMSArMTcsMTEgQEAKIDxMaW5lYXJMYXlvdXQKICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLQkJICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCSAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3N5bmNfYWRhcHRlcnNfc3Bpbm5lcl9sYWJlbCIKIAkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KICAgICAgICAgPExpbmVhckxheW91dAogCSAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI1MmRpcCI+CiAgICAgICAgICAgICA8QnV0dG9uCiAJICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYmluZF9idXR0b24iCkBAIC02MCw3ICs2MCw3IEBACiAKICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNTJkaXAiPgogICAgICAgICAgICAgPEJ1dHRvbgogICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zdGFydF9zeW5jX2J1dHRvbiIKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9zeW5jX2FkYXB0ZXJfaXRlbS54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvc3luY19hZGFwdGVyX2l0ZW0ueG1sCmluZGV4IGQ4MThjNzguLjE1YTI1ZTAgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9zeW5jX2FkYXB0ZXJfaXRlbS54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L3N5bmNfYWRhcHRlcl9pdGVtLnhtbApAQCAtMjEsNiArMjEsNiBAQAogICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RleHQxIgogCXN0eWxlPSI/YW5kcm9pZDphdHRyL3NwaW5uZXJJdGVtU3R5bGUiCiAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNTJkaXAiCiAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1hcnF1ZWUiIC8+CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvdXJsX2xpc3QueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L3VybF9saXN0LnhtbAppbmRleCBmMDA0ZWZmLi41MzY0ZDYxIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvdXJsX2xpc3QueG1sCisrKyBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC91cmxfbGlzdC54bWwKQEAgLTE1LDcgKzE1LDcgQEAKIC0tPgogCiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC90ZXh0MSIgCi0JYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAJYW5kcm9pZDp0ZXh0Q29sb3I9IiNGRjAwMDAwMCIKIAlhbmRyb2lkOnRleHRTaXplPSIxM3NwIgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IGM4YTNmOGIuLmIxMzEwZjQgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTIxLDYgKzIxLDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJtZW51X3VwbG9hZF9leGNlcHRpb25zIj5VcGxvYWQgRXhjZXB0aW9uczwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jbGVhcl9leGNlcHRpb25zIj5DbGVhciBFeGNlcHRpb25zPC9zdHJpbmc+CiAKKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV93aWZpIj5FbmFibGUgV2lmaTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzYWJsZV93aWZpIj5EaXNhYmxlIFdpZmk8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfb25fZHVyYXRpb24iPldpZmkgb24gKG1zKTogPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX29mZl9kdXJhdGlvbiI+V2lmaSBvZmYgKG1zKTogPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2N5Y2xlc19kb25lIj5DeWNsZXMgZG9uZTogPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF90b2dnbGluZyI+U3RhcnQgV2lmaSBUb2dnbGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3BfdG9nZ2xpbmciPlN0b3AgV2lmaSBUb2dnbGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXJ0X3NjcmVlbl90b2dnbGluZyI+U3RhcnQgU2NyZWVuIFRvZ2dsZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcF9zY3JlZW5fdG9nZ2xpbmciPlN0b3AgU2NyZWVuIFRvZ2dsZTwvc3RyaW5nPgorCisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9tbXMiPlN0YXJ0IE1NUzwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcF9tbXMiPlN0b3AgTU1TPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGFydF9oaXByaSI+U3RhcnQgSGlQcmk8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3BfaGlwcmkiPlN0b3AgSGlQcmk8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyYXNoIj5DUkFTSDwvc3RyaW5nPgorCisKICAgICAgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfaW5mb19kZWZhdWx0Ij51bmtub3duPC9zdHJpbmc+CiAgICAgICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2luZm9fdXB0aW1lIj5VcHRpbWU8L3N0cmluZz4KICAgICAgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfaW5mb19hd2FrZXRpbWUiPkF3YWtlIFRpbWU8L3N0cmluZz4KQEAgLTE0NSw3ICsxNjIsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjb3VudHNfdGVzdGVyX3NlbGVjdF9hY2NvdW50X3R5cGUiPlNlbGVjdCBBY2NvdW50IFR5cGU8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY291bnRzX3Rlc3Rlcl9wcm9jZXNzX25hbWVfaGVhZGVyIj5Qcm9jZXNzIE5hbWU6PC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2NvdW50c190ZXN0ZXJfcmVtb3ZlX2FjY291bnQiPnJlbW92ZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjb3VudHNfdGVzdGVyX2dldF9hdXRoX3Rva2VuIj5hdXRoZW50aWNhdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY291bnRzX3Rlc3Rlcl9nZXRfYXV0aF90b2tlbiI+Z2V0IGF1dGh0b2tlbjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjb3VudHNfdGVzdGVyX3Rlc3RfaGFzX2ZlYXR1cmVzIj50ZXN0IGhhcyBmZWF0dXJlczwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjb3VudHNfdGVzdGVyX2ludmFsaWRhdGVfYXV0aF90b2tlbiI+aW52YWxpZGF0ZSB0b2tlbjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjb3VudHNfdGVzdGVyX2FjY291bnRfY29udGV4dF9tZW51X3RpdGxlIj5hY2NvdW50IG9wZXJhdGlvbnM8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY291bnRzX3Rlc3Rlcl9kb19nZXRfYXV0aF90b2tlbiI+T2s8L3N0cmluZz4KQEAgLTE3Niw0ICsxOTQsMTUgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJpbmRpbmdfYmluZF9mYWlsZWQiPkJpbmQgZmFpbGVkPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiaW5kaW5nX3dhaXRpbmdfZm9yX2Nvbm5lY3Rpb24iPldhaXRpbmcgZm9yIHNlcnZpY2UgdG8gYmUgY29ubmVjdGVkLi4uPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfYWNjb3VudF90b19zeW5jIj5TZWxlY3QgYWNjb3VudCB0byBzeW5jPC9zdHJpbmc+CisKKyAgICA8IS0tIEJhZEJlaGF2aW9yQWN0aXZpdHkgLS0+CisgICAgPHN0cmluZyBuYW1lPSJiYWRfYmVoYXZpb3JfY3Jhc2hfc3lzdGVtX2xhYmVsIj5DcmFzaCB0aGUgc3lzdGVtIHNlcnZlcjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkX2JlaGF2aW9yX2NyYXNoX21haW5fbGFiZWwiPkNyYXNoIHRoZSBtYWluIGFwcCB0aHJlYWQ8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZF9iZWhhdmlvcl9jcmFzaF90aHJlYWRfbGFiZWwiPkNyYXNoIGFuIGF1eGlsaWFyeSBhcHAgdGhyZWFkPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRfYmVoYXZpb3JfY3Jhc2hfbmF0aXZlX2xhYmVsIj5DcmFzaCB0aGUgbmF0aXZlIHByb2Nlc3M8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZF9iZWhhdmlvcl93dGZfbGFiZWwiPlJlcG9ydCBhIFdURiBjb25kaXRpb248L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhZF9iZWhhdmlvcl9hbnJfbGFiZWwiPkFOUiAoU3RvcCByZXNwb25kaW5nIGZvciAyMCBzZWNvbmRzKTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkX2JlaGF2aW9yX2Fucl9hY3Rpdml0eV9sYWJlbCI+QU5SIGxhdW5jaGluZyBhIG5ldyBBY3Rpdml0eTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkX2JlaGF2aW9yX2Fucl9icm9hZGNhc3RfbGFiZWwiPkFOUiByZWNlaXZpbmcgYSBicm9hZGNhc3QgSW50ZW50PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRfYmVoYXZpb3JfYW5yX3NlcnZpY2VfbGFiZWwiPkFOUiBzdGFydGluZyBhIFNlcnZpY2U8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy92YWx1ZXMvc3R5bGVzLnhtbAppbmRleCA1OTFlZWQ4Li4wYWY4ODJjIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy92YWx1ZXMvc3R5bGVzLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy92YWx1ZXMvc3R5bGVzLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8cmVzb3VyY2VzPgogICAgIDxzdHlsZSBuYW1lPSJTdW1tYXJ5Q2F0ZWdvcnlMYXlvdXQiPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+ZmlsbF9wYXJlbnQ8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5tYXRjaF9wYXJlbnQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+d3JhcF9jb250ZW50PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOm9yaWVudGF0aW9uIj52ZXJ0aWNhbDwvaXRlbT4KICAgICA8L3N0eWxlPgpAQCAtMzQsOCArMzQsOCBAQAogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdUb3AiPjEwZGlwPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnBhZGRpbmdSaWdodCI+MTBkaXA8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6cGFkZGluZ0JvdHRvbSI+MTBkaXA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj5maWxsX3BhcmVudDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5maWxsX3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2lkdGgiPm1hdGNoX3BhcmVudDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5tYXRjaF9wYXJlbnQ8L2l0ZW0+CiAgICAgPC9zdHlsZT4KICAgICA8c3R5bGUgbmFtZT0iZW50cnlfbGF5b3V0Ij4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpvcmllbnRhdGlvbiI+aG9yaXpvbnRhbDwvaXRlbT4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0FjY291bnRzVGVzdGVyLmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9BY2NvdW50c1Rlc3Rlci5qYXZhCmluZGV4IDhlMDljM2QuLjhlMDg3ZTMgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0FjY291bnRzVGVzdGVyLmphdmEKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQWNjb3VudHNUZXN0ZXIuamF2YQpAQCAtNDYsOCArNDYsMTEgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0FVVEhfVE9LRU5fRElBTE9HX0lEID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVVBEQVRFX0NSRURFTlRJQUxTX0RJQUxPR19JRCA9IDI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOVkFMSURBVEVfQVVUSF9UT0tFTl9ESUFMT0dfSUQgPSAzOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVNUX0hBU19GRUFUVVJFU19ESUFMT0dfSUQgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX0RJQUxPR19JRCA9IDU7CiAgICAgcHJpdmF0ZSBFZGl0VGV4dCBtRGVzaXJlZEF1dGhUb2tlblR5cGVFZGl0VGV4dDsKICAgICBwcml2YXRlIEVkaXRUZXh0IG1EZXNpcmVkRmVhdHVyZXNFZGl0VGV4dDsKKyAgICBwcml2YXRlIHZvbGF0aWxlIENoYXJTZXF1ZW5jZSBtRGlhbG9nTWVzc2FnZTsKIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKQEAgLTI2OCw2ICsyNzEsOCBAQAogICAgICAgICAgICAgfSwgbnVsbCAvKiBoYW5kbGVyICovKTsKICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmdldEl0ZW1JZCgpID09IFIuaWQuYWNjb3VudHNfdGVzdGVyX2dldF9hdXRoX3Rva2VuKSB7CiAgICAgICAgICAgICBzaG93RGlhbG9nKEdFVF9BVVRIX1RPS0VOX0RJQUxPR19JRCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5nZXRJdGVtSWQoKSA9PSBSLmlkLmFjY291bnRzX3Rlc3Rlcl90ZXN0X2hhc19mZWF0dXJlcykgeworICAgICAgICAgICAgc2hvd0RpYWxvZyhURVNUX0hBU19GRUFUVVJFU19ESUFMT0dfSUQpOwogICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0gUi5pZC5hY2NvdW50c190ZXN0ZXJfaW52YWxpZGF0ZV9hdXRoX3Rva2VuKSB7CiAgICAgICAgICAgICBzaG93RGlhbG9nKElOVkFMSURBVEVfQVVUSF9UT0tFTl9ESUFMT0dfSUQpOwogICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0gUi5pZC5hY2NvdW50c190ZXN0ZXJfdXBkYXRlX2NyZWRlbnRpYWxzKSB7CkBAIC0yODIsNyArMjg3LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgRGlhbG9nIG9uQ3JlYXRlRGlhbG9nKGZpbmFsIGludCBpZCkgewogICAgICAgICBpZiAoaWQgPT0gR0VUX0FVVEhfVE9LRU5fRElBTE9HX0lEIHx8IGlkID09IElOVkFMSURBVEVfQVVUSF9UT0tFTl9ESUFMT0dfSUQKLSAgICAgICAgICAgICAgICB8fCBpZCA9PSBVUERBVEVfQ1JFREVOVElBTFNfRElBTE9HX0lEKSB7CisgICAgICAgICAgICAgICAgfHwgaWQgPT0gVVBEQVRFX0NSRURFTlRJQUxTX0RJQUxPR19JRCB8fCBpZCA9PSBURVNUX0hBU19GRUFUVVJFU19ESUFMT0dfSUQpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgdmlldyA9IExheW91dEluZmxhdGVyLmZyb20odGhpcykuaW5mbGF0ZShSLmxheW91dC5nZXRfYXV0aF90b2tlbl92aWV3LCBudWxsKTsKICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKHRoaXMpOwogICAgICAgICAgICAgYnVpbGRlci5zZXRQb3NpdGl2ZUJ1dHRvbihSLnN0cmluZy5hY2NvdW50c190ZXN0ZXJfZG9fZ2V0X2F1dGhfdG9rZW4sCkBAIC0zMTYsNiArMzIxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpZCA9PSBJTlZBTElEQVRFX0FVVEhfVE9LRU5fRElBTE9HX0lEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BY2NvdW50TWFuYWdlci5nZXRBdXRoVG9rZW4oYWNjb3VudCwgYXV0aFRva2VuVHlwZSwgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEdldEFuZEludmFsaWRhdGVBdXRoVG9rZW5DYWxsYmFjaygpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlkID09IFRFU1RfSEFTX0ZFQVRVUkVTX0RJQUxPR19JRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBmZWF0dXJlcyA9IFRleHRVdGlscy5zcGxpdChhdXRoVG9rZW5UeXBlLCAiLCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQWNjb3VudE1hbmFnZXIuaGFzRmVhdHVyZXMoYWNjb3VudCwgZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRlc3RIYXNGZWF0dXJlc0NhbGxiYWNrKCksIG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BY2NvdW50TWFuYWdlci51cGRhdGVDcmVkZW50aWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LApAQCAtMzI3LDYgKzMzNiwxMSBAQAogICAgICAgICAgICAgYnVpbGRlci5zZXRWaWV3KHZpZXcpOwogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlKCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGlkID09IE1FU1NBR0VfRElBTE9HX0lEKSB7CisgICAgICAgICAgICBBbGVydERpYWxvZy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcih0aGlzKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0TWVzc2FnZShtRGlhbG9nTWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlci5jcmVhdGUoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gc3VwZXIub25DcmVhdGVEaWFsb2coaWQpOwogICAgIH0KIApAQCAtNDEzLDYgKzQyNywzMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHNob3dNZXNzYWdlRGlhbG9nKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIG1EaWFsb2dNZXNzYWdlID0gbWVzc2FnZTsKKyAgICAgICAgcmVtb3ZlRGlhbG9nKE1FU1NBR0VfRElBTE9HX0lEKTsKKyAgICAgICAgc2hvd0RpYWxvZyhNRVNTQUdFX0RJQUxPR19JRCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBUZXN0SGFzRmVhdHVyZXNDYWxsYmFjayBpbXBsZW1lbnRzIEFjY291bnRNYW5hZ2VyQ2FsbGJhY2s8Qm9vbGVhbj4geworICAgICAgICBwdWJsaWMgdm9pZCBydW4oQWNjb3VudE1hbmFnZXJGdXR1cmU8Qm9vbGVhbj4gZnV0dXJlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIEJvb2xlYW4gaGFzRmVhdHVyZXMgPSBmdXR1cmUuZ2V0UmVzdWx0KCk7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiaGFzRmVhdHVyZXM6ICIgKyBoYXNGZWF0dXJlcyk7CisgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2VEaWFsb2coImhhc0ZlYXR1cmVzOiAiICsgaGFzRmVhdHVyZXMpOworICAgICAgICAgICAgfSBjYXRjaCAoT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImludGVycnVwdGVkIik7CisgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2VEaWFsb2coIm9wZXJhdGlvbiB3YXMgY2FuY2VsZWQiKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJlcnJvciIsIGUpOworICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlRGlhbG9nKCJvcGVyYXRpb24gZ290IGFuIElPRXhjZXB0aW9uIik7CisgICAgICAgICAgICB9IGNhdGNoIChBdXRoZW50aWNhdG9yRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJlcnJvciIsIGUpOworICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlRGlhbG9nKCJvcGVyYXRpb24gZ290IGFuIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb25maXJtQ3JlZGVudGlhbHNDYWxsYmFjayBpbXBsZW1lbnRzIEFjY291bnRNYW5hZ2VyQ2FsbGJhY2s8QnVuZGxlPiB7CiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihBY2NvdW50TWFuYWdlckZ1dHVyZTxCdW5kbGU+IGZ1dHVyZSkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0JhZEJlaGF2aW9yQWN0aXZpdHkuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0JhZEJlaGF2aW9yQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTU5ZmJjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQmFkQmVoYXZpb3JBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZXZlbG9wbWVudDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JUG93ZXJNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworCitwdWJsaWMgY2xhc3MgQmFkQmVoYXZpb3JBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkJhZEJlaGF2aW9yQWN0aXZpdHkiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQmFkQmVoYXZpb3JFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgQmFkQmVoYXZpb3JFeGNlcHRpb24oKSB7CisgICAgICAgICAgICBzdXBlcigiV2hhdGNoYSBnb25uYSBkbywgd2hhdGNoYSBnb25uYSBkbyIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldoZW4gdGhleSBjb21lIGZvciB5b3UiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJhZFJlY2VpdmVyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgTG9nLmkoVEFHLCAiaW4gQmFkUmVjZWl2ZXIub25SZWNlaXZlKCkgLS0gYWJvdXQgdG8gaGFuZyIpOworICAgICAgICAgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDIwMDAwKTsgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeyBMb2cud3RmKFRBRywgZSk7IH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJhZFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IG9uU3RhcnRDb21tYW5kKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IGlkKSB7CisgICAgICAgICAgICBMb2cuaShUQUcsICJpbiBCYWRTZXJ2aWNlLm9uU3RhcnRDb21tYW5kKCkgLS0gYWJvdXQgdG8gaGFuZyIpOworICAgICAgICAgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDMwMDAwKTsgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeyBMb2cud3RmKFRBRywgZSk7IH0KKyAgICAgICAgICAgIHN0b3BTZWxmKCk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfTk9UX1NUSUNLWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKKworICAgICAgICBpZiAoZ2V0SW50ZW50KCkuZ2V0Qm9vbGVhbkV4dHJhKCJhbnIiLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgImluIEFOUiBhY3Rpdml0eSAtLSBhYm91dCB0byBoYW5nIik7CisgICAgICAgICAgICB0cnkgeyBUaHJlYWQuc2xlZXAoMjAwMDApOyB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7IExvZy53dGYoVEFHLCBlKTsgfQorICAgICAgICAgICAgZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5iYWRfYmVoYXZpb3IpOworCisgICAgICAgIEJ1dHRvbiBjcmFzaF9zeXN0ZW0gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfY3Jhc2hfc3lzdGVtKTsKKyAgICAgICAgY3Jhc2hfc3lzdGVtLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIElCaW5kZXIgYiA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoUE9XRVJfU0VSVklDRSk7CisgICAgICAgICAgICAgICAgICAgIElQb3dlck1hbmFnZXIgcG0gPSBJUG93ZXJNYW5hZ2VyLlN0dWIuYXNJbnRlcmZhY2UoYik7CisgICAgICAgICAgICAgICAgICAgIHBtLmNyYXNoKCJDcmFzaGVkIGJ5IEJhZEJlaGF2aW9yQWN0aXZpdHkiKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDYW4ndCBjYWxsIElQb3dlck1hbmFnZXIuY3Jhc2goKSIsIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQnV0dG9uIGNyYXNoX21haW4gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfY3Jhc2hfbWFpbik7CisgICAgICAgIGNyYXNoX21haW4uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7IHRocm93IG5ldyBCYWRCZWhhdmlvckV4Y2VwdGlvbigpOyB9CisgICAgICAgIH0pOworCisgICAgICAgIEJ1dHRvbiBjcmFzaF90aHJlYWQgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfY3Jhc2hfdGhyZWFkKTsKKyAgICAgICAgY3Jhc2hfdGhyZWFkLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIG5ldyBUaHJlYWQoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7IHRocm93IG5ldyBCYWRCZWhhdmlvckV4Y2VwdGlvbigpOyB9CisgICAgICAgICAgICAgICAgfS5zdGFydCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBCdXR0b24gY3Jhc2hfbmF0aXZlID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuYmFkX2JlaGF2aW9yX2NyYXNoX25hdGl2ZSk7CisgICAgICAgIGNyYXNoX25hdGl2ZS5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBGb3Igc29tZSByZWFzb24sIHRoZSBKVk0gbmVlZHMgdHdvIG9mIHRoZXNlIHRvIGdldCB0aGUgaGludAorICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIk5hdGl2ZSBjcmFzaCBwcmVzc2VkIC0tIGFib3V0IHRvIGtpbGwgLTExIHNlbGYiKTsKKyAgICAgICAgICAgICAgICBQcm9jZXNzLnNlbmRTaWduYWwoUHJvY2Vzcy5teVBpZCgpLCAxMSk7CisgICAgICAgICAgICAgICAgUHJvY2Vzcy5zZW5kU2lnbmFsKFByb2Nlc3MubXlQaWQoKSwgMTEpOworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkZpbmlzaGVkIGtpbGwgLTExLCBzaG91bGQgYmUgZGVhZCBvciBkeWluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBCdXR0b24gd3RmID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuYmFkX2JlaGF2aW9yX3d0Zik7CisgICAgICAgIHd0Zi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsgTG9nLnd0ZihUQUcsICJBcHBzIEJlaGF2aW5nIEJhZGx5Iik7IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQnV0dG9uIGFuciA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmJhZF9iZWhhdmlvcl9hbnIpOworICAgICAgICBhbnIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQU5SIHByZXNzZWQgLS0gYWJvdXQgdG8gaGFuZyIpOworICAgICAgICAgICAgICAgIHRyeSB7IFRocmVhZC5zbGVlcCgyMDAwMCk7IH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsgTG9nLnd0ZihUQUcsIGUpOyB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEJ1dHRvbiBhbnJfYWN0aXZpdHkgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfYW5yX2FjdGl2aXR5KTsKKyAgICAgICAgYW5yX2FjdGl2aXR5LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEJhZEJlaGF2aW9yQWN0aXZpdHkudGhpcywgQmFkQmVoYXZpb3JBY3Rpdml0eS5jbGFzcyk7CisgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQU5SIGFjdGl2aXR5IHByZXNzZWQgLS0gYWJvdXQgdG8gbGF1bmNoIik7CisgICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQucHV0RXh0cmEoImFuciIsIHRydWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQnV0dG9uIGFucl9icm9hZGNhc3QgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfYW5yX2Jyb2FkY2FzdCk7CisgICAgICAgIGFucl9icm9hZGNhc3Quc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQU5SIGJyb2FkY2FzdCBwcmVzc2VkIC0tIGFib3V0IHRvIHNlbmQiKTsKKyAgICAgICAgICAgICAgICBzZW5kT3JkZXJlZEJyb2FkY2FzdChuZXcgSW50ZW50KCJjb20uYW5kcm9pZC5kZXZlbG9wbWVudC5CQURfQkVIQVZJT1IiKSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEJ1dHRvbiBhbnJfc2VydmljZSA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmJhZF9iZWhhdmlvcl9hbnJfc2VydmljZSk7CisgICAgICAgIGFucl9zZXJ2aWNlLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkFOUiBzZXJ2aWNlIHByZXNzZWQgLS0gYWJvdXQgdG8gc3RhcnQiKTsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChCYWRCZWhhdmlvckFjdGl2aXR5LnRoaXMsIEJhZFNlcnZpY2UuY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQ29ubmVjdGl2aXR5LmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9Db25uZWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTE1N2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQ29ubmVjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwzNTEgQEAKKy8qIC8vZGV2aWNlL2FwcHMvU2V0dGluZ3Mvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzL0tleWd1YXJkLmphdmEKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZXZlbG9wbWVudDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlci5XYWtlTG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXJOYXRpdmU7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQ2hlY2tCb3g7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQ29tcG91bmRCdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlBob25lOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBDb25uZWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb25uZWN0aXZpdHkiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1RPR0dMRV9XSUZJID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfVE9HR0xFX1NDUkVFTiA9IDI7CisKKyAgICBwcml2YXRlIEJ1dHRvbiBtRW5hYmxlV2lmaUJ1dHRvbjsKKyAgICBwcml2YXRlIEJ1dHRvbiBtRGlzYWJsZVdpZmlCdXR0b247CisKKyAgICBwcml2YXRlIEJ1dHRvbiBtU3RhcnREZWxheWVkQ3ljbGVCdXR0b247CisgICAgcHJpdmF0ZSBCdXR0b24gbVN0b3BEZWxheWVkQ3ljbGVCdXR0b247CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtRENPbkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1EQ09mZkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIFRleHRWaWV3IG1EQ0N5Y2xlQ291bnRWaWV3OworICAgIHByaXZhdGUgbG9uZyBtRENPbkR1cmF0aW9uID0gMTIwMDAwOworICAgIHByaXZhdGUgbG9uZyBtRENPZmZEdXJhdGlvbiA9IDEyMDAwMDsKKyAgICBwcml2YXRlIGludCBtRENDeWNsZUNvdW50ID0gMDsKKworICAgIHByaXZhdGUgQnV0dG9uIG1TdGFydFNjcmVlbkN5Y2xlQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wU2NyZWVuQ3ljbGVCdXR0b247CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtU0NPbkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1TQ09mZkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIFRleHRWaWV3IG1TQ0N5Y2xlQ291bnRWaWV3OworICAgIHByaXZhdGUgbG9uZyBtU0NPbkR1cmF0aW9uID0gMTIwMDAwOworICAgIHByaXZhdGUgbG9uZyBtU0NPZmZEdXJhdGlvbiA9IDEyMDAwOworICAgIHByaXZhdGUgaW50IG1TQ0N5Y2xlQ291bnQgPSAwOworCisgICAgcHJpdmF0ZSBCdXR0b24gbVN0YXJ0TW1zQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wTW1zQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdGFydEhpUHJpQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wSGlQcmlCdXR0b247CisgICAgcHJpdmF0ZSBCdXR0b24gbUNyYXNoQnV0dG9uOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1EZWxheWVkQ3ljbGVTdGFydGVkID0gZmFsc2U7CisKKyAgICBwcml2YXRlIFdpZmlNYW5hZ2VyIG1XbTsKKyAgICBwcml2YXRlIFBvd2VyTWFuYWdlciBtUG07CisgICAgcHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyIG1DbTsKKworICAgIHByaXZhdGUgV2FrZUxvY2sgbVdha2VMb2NrID0gbnVsbDsKKyAgICBwcml2YXRlIFdha2VMb2NrIG1TY3JlZW5vbldha2VMb2NrID0gbnVsbDsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtU2NyZWVuT2ZmVG9nZ2xlUnVubmluZyA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2NyZWVuT2ZmID0gZmFsc2U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVElWSVRZX1RFU1RfQUxBUk0gPQorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmRldmVsb3BtZW50LkNPTk5FQ1RJVklUWV9URVNUX0FMQVJNIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9BTEFSTV9FWFRSQSA9ICJDT05ORUNUSVZJVFlfVEVTVF9FWFRSQSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfQUxBUk1fT05fRVhUUkEgPSAiQ09OTkVDVElWSVRZX1RFU1RfT05fRVhUUkEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0FMQVJNX09GRl9FWFRSQSA9ICJDT05ORUNUSVZJVFlfVEVTVF9PRkZfRVhUUkEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0FMQVJNX0NZQ0xFX0VYVFJBID0gIkNPTk5FQ1RJVklUWV9URVNUX0NZQ0xFX0VYVFJBIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NSRUVOX09OID0gIlNDUkVFTl9PTiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDUkVFTl9PRkYgPSAiU0NSRUVOX09GRiI7CisgICAgcHVibGljIEJyb2FkY2FzdFJlY2VpdmVyIG1SZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgaWYgKGludGVudC5nZXRBY3Rpb24oKS5lcXVhbHMoQ09OTkVDVElWSVRZX1RFU1RfQUxBUk0pKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4dHJhID0gKFN0cmluZylpbnRlbnQuZ2V0RXh0cmEoVEVTVF9BTEFSTV9FWFRSQSk7CisgICAgICAgICAgICAgICAgUG93ZXJNYW5hZ2VyIHBtID0gKFBvd2VyTWFuYWdlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5QT1dFUl9TRVJWSUNFKTsKKyAgICAgICAgICAgICAgICBMb25nIG9uID0gbmV3IExvbmcoMTIwMDAwKTsKKyAgICAgICAgICAgICAgICBMb25nIG9mZiA9IG5ldyBMb25nKDEyMDAwMCk7CisgICAgICAgICAgICAgICAgaW50IGN5Y2xlID0gMDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBvbiA9IExvbmcucGFyc2VMb25nKChTdHJpbmcpaW50ZW50LmdldEV4dHJhKFRFU1RfQUxBUk1fT05fRVhUUkEpKTsKKyAgICAgICAgICAgICAgICAgICAgb2ZmID0gTG9uZy5wYXJzZUxvbmcoKFN0cmluZylpbnRlbnQuZ2V0RXh0cmEoVEVTVF9BTEFSTV9PRkZfRVhUUkEpKTsKKyAgICAgICAgICAgICAgICAgICAgY3ljbGUgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpaW50ZW50LmdldEV4dHJhKFRFU1RfQUxBUk1fQ1lDTEVfRVhUUkEpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKworICAgICAgICAgICAgICAgIGlmIChleHRyYS5lcXVhbHMoU0NSRUVOX09OKSkgeworICAgICAgICAgICAgICAgICAgICBtU2NyZWVub25XYWtlTG9jayA9IG1QbS5uZXdXYWtlTG9jayhQb3dlck1hbmFnZXIuRlVMTF9XQUtFX0xPQ0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyTWFuYWdlci5BQ1FVSVJFX0NBVVNFU19XQUtFVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpdml0eVRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgbVNjcmVlbm9uV2FrZUxvY2suYWNxdWlyZSgpOworCisgICAgICAgICAgICAgICAgICAgIG1TQ0N5Y2xlQ291bnQgPSBjeWNsZSsxOworICAgICAgICAgICAgICAgICAgICBtU0NPbkR1cmF0aW9uID0gb247CisgICAgICAgICAgICAgICAgICAgIG1TQ09mZkR1cmF0aW9uID0gb2ZmOworICAgICAgICAgICAgICAgICAgICBtU0NDeWNsZUNvdW50Vmlldy5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcobVNDQ3ljbGVDb3VudCkpOworCisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlQWxhcm0obVNDT25EdXJhdGlvbiwgU0NSRUVOX09GRik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5lcXVhbHMoU0NSRUVOX09GRikpIHsKKworICAgICAgICAgICAgICAgICAgICBtU0NDeWNsZUNvdW50ID0gY3ljbGU7CisgICAgICAgICAgICAgICAgICAgIG1TQ09uRHVyYXRpb24gPSBvbjsKKyAgICAgICAgICAgICAgICAgICAgbVNDT2ZmRHVyYXRpb24gPSBvZmY7CisKKyAgICAgICAgICAgICAgICAgICAgbVNjcmVlbm9uV2FrZUxvY2sucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBtU2NyZWVub25XYWtlTG9jayA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlQWxhcm0obVNDT2ZmRHVyYXRpb24sIFNDUkVFTl9PTik7CisgICAgICAgICAgICAgICAgICAgIHBtLmdvVG9TbGVlcChTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBIYW5kbGVyIG1IYW5kbGVyMiA9IG5ldyBIYW5kbGVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2gobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1RPR0dMRV9XSUZJOgorICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJFVkVOVF9UT0dHTEVfV0lGSSIpOworICAgICAgICAgICAgICAgICAgICBpZiAobURlbGF5ZWRDeWNsZVN0YXJ0ZWQgJiYgbVdtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVsYXk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1XbS5nZXRXaWZpU3RhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9FTkFCTEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9FTkFCTElORzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdtLnNldFdpZmlFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBtRENPZmZEdXJhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdtLnNldFdpZmlFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheSA9IG1EQ09uRHVyYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EQ0N5Y2xlQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURDQ3ljbGVDb3VudFZpZXcuc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKG1EQ0N5Y2xlQ291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKEVWRU5UX1RPR0dMRV9XSUZJKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKKworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5jb25uZWN0aXZpdHkpOworCisgICAgICAgIG1XbSA9IChXaWZpTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9TRVJWSUNFKTsKKyAgICAgICAgbVBtID0gKFBvd2VyTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuUE9XRVJfU0VSVklDRSk7CisgICAgICAgIG1DbSA9IChDb25uZWN0aXZpdHlNYW5hZ2VyKSBnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOworCisgICAgICAgIG1FbmFibGVXaWZpQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5lbmFibGVXaWZpKTsKKyAgICAgICAgbUVuYWJsZVdpZmlCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1FbmFibGVXaWZpQ2xpY2tlZCk7CisgICAgICAgIG1EaXNhYmxlV2lmaUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZGlzYWJsZVdpZmkpOworICAgICAgICBtRGlzYWJsZVdpZmlCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1EaXNhYmxlV2lmaUNsaWNrZWQpOworCisgICAgICAgIG1TdGFydERlbGF5ZWRDeWNsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnREZWxheWVkQ3ljbGUpOworICAgICAgICBtU3RhcnREZWxheWVkQ3ljbGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydERlbGF5ZWRDeWNsZUNsaWNrZWQpOworICAgICAgICBtU3RvcERlbGF5ZWRDeWNsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RvcERlbGF5ZWRDeWNsZSk7CisgICAgICAgIG1TdG9wRGVsYXllZEN5Y2xlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RvcERlbGF5ZWRDeWNsZUNsaWNrZWQpOworICAgICAgICBtRENPbkR1cmF0aW9uRWRpdCA9IChFZGl0VGV4dClmaW5kVmlld0J5SWQoUi5pZC5kY193aWZpX29uX2R1cmF0aW9uKTsKKyAgICAgICAgbURDT25EdXJhdGlvbkVkaXQuc2V0VGV4dChMb25nLnRvU3RyaW5nKG1EQ09uRHVyYXRpb24pKTsKKyAgICAgICAgbURDT2ZmRHVyYXRpb25FZGl0ID0gKEVkaXRUZXh0KWZpbmRWaWV3QnlJZChSLmlkLmRjX3dpZmlfb2ZmX2R1cmF0aW9uKTsKKyAgICAgICAgbURDT2ZmRHVyYXRpb25FZGl0LnNldFRleHQoTG9uZy50b1N0cmluZyhtRENPZmZEdXJhdGlvbikpOworICAgICAgICBtRENDeWNsZUNvdW50VmlldyA9IChUZXh0VmlldylmaW5kVmlld0J5SWQoUi5pZC5kY193aWZpX2N5Y2xlc19kb25lKTsKKyAgICAgICAgbURDQ3ljbGVDb3VudFZpZXcuc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKG1EQ0N5Y2xlQ291bnQpKTsKKworICAgICAgICBtU3RhcnRTY3JlZW5DeWNsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRTY3JlZW5DeWNsZSk7CisgICAgICAgIG1TdGFydFNjcmVlbkN5Y2xlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRTY3JlZW5DeWNsZUNsaWNrZWQpOworICAgICAgICBtU3RvcFNjcmVlbkN5Y2xlQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wU2NyZWVuQ3ljbGUpOworICAgICAgICBtU3RvcFNjcmVlbkN5Y2xlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RvcFNjcmVlbkN5Y2xlQ2xpY2tlZCk7CisgICAgICAgIG1TQ09uRHVyYXRpb25FZGl0ID0gKEVkaXRUZXh0KWZpbmRWaWV3QnlJZChSLmlkLnNjX3dpZmlfb25fZHVyYXRpb24pOworICAgICAgICBtU0NPbkR1cmF0aW9uRWRpdC5zZXRUZXh0KExvbmcudG9TdHJpbmcobVNDT25EdXJhdGlvbikpOworICAgICAgICBtU0NPZmZEdXJhdGlvbkVkaXQgPSAoRWRpdFRleHQpZmluZFZpZXdCeUlkKFIuaWQuc2Nfd2lmaV9vZmZfZHVyYXRpb24pOworICAgICAgICBtU0NPZmZEdXJhdGlvbkVkaXQuc2V0VGV4dChMb25nLnRvU3RyaW5nKG1TQ09mZkR1cmF0aW9uKSk7CisgICAgICAgIG1TQ0N5Y2xlQ291bnRWaWV3ID0gKFRleHRWaWV3KWZpbmRWaWV3QnlJZChSLmlkLnNjX3dpZmlfY3ljbGVzX2RvbmUpOworICAgICAgICBtU0NDeWNsZUNvdW50Vmlldy5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcobVNDQ3ljbGVDb3VudCkpOworCisgICAgICAgIG1TdGFydE1tc0J1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRfbW1zKTsKKyAgICAgICAgbVN0YXJ0TW1zQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRNbXNDbGlja2VkKTsKKyAgICAgICAgbVN0b3BNbXNCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3BfbW1zKTsKKyAgICAgICAgbVN0b3BNbXNCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdG9wTW1zQ2xpY2tlZCk7CisgICAgICAgIG1TdGFydEhpUHJpQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydF9oaXByaSk7CisgICAgICAgIG1TdGFydEhpUHJpQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRIaVByaUNsaWNrZWQpOworICAgICAgICBtU3RvcEhpUHJpQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wX2hpcHJpKTsKKyAgICAgICAgbVN0b3BIaVByaUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BIaVByaUNsaWNrZWQpOworICAgICAgICBtQ3Jhc2hCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmNyYXNoKTsKKyAgICAgICAgbUNyYXNoQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtQ3Jhc2hDbGlja2VkKTsKKworICAgICAgICByZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlciwgbmV3IEludGVudEZpbHRlcihDT05ORUNUSVZJVFlfVEVTVF9BTEFSTSkpOworICAgIH0KKworCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblJlc3VtZSgpIHsKKyAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdGFydERlbGF5ZWRDeWNsZUNsaWNrZWQgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICBpZiAoIW1EZWxheWVkQ3ljbGVTdGFydGVkKSB7CisgICAgICAgICAgICAgICAgbURlbGF5ZWRDeWNsZVN0YXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1EQ09uRHVyYXRpb24gPSBMb25nLnBhcnNlTG9uZyhtRENPbkR1cmF0aW9uRWRpdC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIG1EQ09mZkR1cmF0aW9uID0gTG9uZy5wYXJzZUxvbmcobURDT2ZmRHVyYXRpb25FZGl0LmdldFRleHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9OworICAgICAgICAgICAgICAgIG1EQ0N5Y2xlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgbVdha2VMb2NrID0gbVBtLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5GVUxMX1dBS0VfTE9DSywgIkNvbm5lY3Rpdml0eVRlc3QiKTsKKyAgICAgICAgICAgICAgICBtV2FrZUxvY2suYWNxdWlyZSgpOworICAgICAgICAgICAgICAgIG1IYW5kbGVyMi5zZW5kTWVzc2FnZShtSGFuZGxlcjIub2J0YWluTWVzc2FnZShFVkVOVF9UT0dHTEVfV0lGSSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdG9wRGVsYXllZEN5Y2xlQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIGlmIChtRGVsYXllZEN5Y2xlU3RhcnRlZCkgeworICAgICAgICAgICAgICAgIG1EZWxheWVkQ3ljbGVTdGFydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbVdha2VMb2NrLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtV2FrZUxvY2sgPSBudWxsOworICAgICAgICAgICAgICAgIGlmKG1IYW5kbGVyMi5oYXNNZXNzYWdlcyhFVkVOVF9UT0dHTEVfV0lGSSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIyLnJlbW92ZU1lc3NhZ2VzKEVWRU5UX1RPR0dMRV9XSUZJKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtRW5hYmxlV2lmaUNsaWNrZWQgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICBtV20uc2V0V2lmaUVuYWJsZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHByaXZhdGUgVmlldy5PbkNsaWNrTGlzdGVuZXIgbURpc2FibGVXaWZpQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1XbS5zZXRXaWZpRW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtU3RhcnRTY3JlZW5DeWNsZUNsaWNrZWQgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNDT25EdXJhdGlvbiA9IExvbmcucGFyc2VMb25nKG1TQ09uRHVyYXRpb25FZGl0LmdldFRleHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBtU0NPZmZEdXJhdGlvbiA9IExvbmcucGFyc2VMb25nKG1TQ09mZkR1cmF0aW9uRWRpdC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9OworICAgICAgICAgICAgbVNDQ3ljbGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgIG1TY3JlZW5vbldha2VMb2NrID0gbVBtLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5GVUxMX1dBS0VfTE9DSywKKyAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpdml0eVRlc3QiKTsKKyAgICAgICAgICAgIG1TY3JlZW5vbldha2VMb2NrLmFjcXVpcmUoKTsKKworICAgICAgICAgICAgc2NoZWR1bGVBbGFybSgxMCwgU0NSRUVOX09GRik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSB2b2lkIHNjaGVkdWxlQWxhcm0obG9uZyBkZWxheU1zLCBTdHJpbmcgZXZlbnRUeXBlKSB7CisgICAgICAgIEFsYXJtTWFuYWdlciBhbSA9IChBbGFybU1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFMQVJNX1NFUlZJQ0UpOworICAgICAgICBJbnRlbnQgaSA9IG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX1RFU1RfQUxBUk0pOworCisgICAgICAgIGkucHV0RXh0cmEoVEVTVF9BTEFSTV9FWFRSQSwgZXZlbnRUeXBlKTsKKyAgICAgICAgaS5wdXRFeHRyYShURVNUX0FMQVJNX09OX0VYVFJBLCBMb25nLnRvU3RyaW5nKG1TQ09uRHVyYXRpb24pKTsKKyAgICAgICAgaS5wdXRFeHRyYShURVNUX0FMQVJNX09GRl9FWFRSQSwgTG9uZy50b1N0cmluZyhtU0NPZmZEdXJhdGlvbikpOworICAgICAgICBpLnB1dEV4dHJhKFRFU1RfQUxBUk1fQ1lDTEVfRVhUUkEsIEludGVnZXIudG9TdHJpbmcobVNDQ3ljbGVDb3VudCkpOworCisgICAgICAgIFBlbmRpbmdJbnRlbnQgcCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KHRoaXMsIDAsIGksIFBlbmRpbmdJbnRlbnQuRkxBR19VUERBVEVfQ1VSUkVOVCk7CisKKyAgICAgICAgYW0uc2V0KEFsYXJtTWFuYWdlci5FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUCwgU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgKyBkZWxheU1zLCBwKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdG9wU2NyZWVuQ3ljbGVDbGlja2VkID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgVmlldy5PbkNsaWNrTGlzdGVuZXIgbVN0YXJ0TW1zQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1DbS5zdGFydFVzaW5nTmV0d29ya0ZlYXR1cmUoQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX01PQklMRSwgUGhvbmUuRkVBVFVSRV9FTkFCTEVfTU1TKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdG9wTW1zQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1DbS5zdG9wVXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLCBQaG9uZS5GRUFUVVJFX0VOQUJMRV9NTVMpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgVmlldy5PbkNsaWNrTGlzdGVuZXIgbVN0YXJ0SGlQcmlDbGlja2VkID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgbUNtLnN0YXJ0VXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLAorICAgICAgICAgICAgICAgICAgICBQaG9uZS5GRUFUVVJFX0VOQUJMRV9ISVBSSSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtU3RvcEhpUHJpQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1DbS5zdG9wVXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLAorICAgICAgICAgICAgICAgICAgICBQaG9uZS5GRUFUVVJFX0VOQUJMRV9ISVBSSSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtQ3Jhc2hDbGlja2VkID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgQ29ubmVjdGl2aXR5TWFuYWdlciBmb28gPSBudWxsOworICAgICAgICAgICAgZm9vLnN0YXJ0VXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLAorICAgICAgICAgICAgICAgICAgICBQaG9uZS5GRUFUVVJFX0VOQUJMRV9NTVMpOworICAgICAgICB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0RldGFpbHMuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0RldGFpbHMuamF2YQppbmRleCAxNjcyMmEzLi5lMGRhOTYxIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9EZXRhaWxzLmphdmEKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvRGV0YWlscy5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKQEAgLTc1LDggKzc0LDggQEAKICAgICAgICAgfQogICAgICAgICBtTGluZWFyTGF5b3V0ID0gbmV3IExpbmVhckxheW91dCh0aGlzKTsKICAgICAgICAgbVNjcm9sbFZpZXcuYWRkVmlldyhtTGluZWFyTGF5b3V0LCBuZXcgVmlld0dyb3VwLkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkpOwogICAgICAgICBtTGluZWFyTGF5b3V0LnNldE9yaWVudGF0aW9uKExpbmVhckxheW91dC5WRVJUSUNBTCk7CiAKICAgICAgICAgLy8gSGVyZSBpbiBvblN0YXJ0LCB3ZSdyZSBnaXZlbiBkYXRhLiAgV2UgdXNlIHRoYXQgYmVjYXVzZSBzb21lCkBAIC0xMDksNyArMTA4LDcgQEAKICAgICAKICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxhenkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgIHJldHVybiBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULCAwKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0RldmVsb3BtZW50U2V0dGluZ3MuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0RldmVsb3BtZW50U2V0dGluZ3MuamF2YQppbmRleCA5Y2I2ZmM2Li5jMDFlYTU5IDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9EZXZlbG9wbWVudFNldHRpbmdzLmphdmEKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvRGV2ZWxvcG1lbnRTZXR0aW5ncy5qYXZhCkBAIC01Miw2ICs1Miw3IEBACiAgICAgcHJpdmF0ZSBCdXR0b24gbURlYnVnQXBwQnV0dG9uOwogICAgIHByaXZhdGUgQ2hlY2tCb3ggbVdhaXRGb3JEZWJ1Z2dlckNCOwogICAgIHByaXZhdGUgQ2hlY2tCb3ggbUFsd2F5c0ZpbmlzaENCOworICAgIHByaXZhdGUgU3Bpbm5lciBtUG9pbnRlckxvY2F0aW9uU3Bpbm5lcjsKICAgICBwcml2YXRlIENoZWNrQm94IG1TaG93TG9hZENCOwogICAgIHByaXZhdGUgQ2hlY2tCb3ggbVNob3dDcHVDQjsKICAgICBwcml2YXRlIENoZWNrQm94IG1FbmFibGVHTENCOwpAQCAtNjgsNiArNjksNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1EZWJ1Z0FwcDsKICAgICBwcml2YXRlIGJvb2xlYW4gbVdhaXRGb3JEZWJ1Z2dlcjsKICAgICBwcml2YXRlIGJvb2xlYW4gbUFsd2F5c0ZpbmlzaDsKKyAgICBwcml2YXRlIGludCBtUG9pbnRlckxvY2F0aW9uOwogICAgIHByaXZhdGUgaW50IG1Qcm9jZXNzTGltaXQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93U2xlZXA7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93WG1wcDsKQEAgLTk0LDYgKzk2LDE2IEBACiAgICAgICAgIG1XYWl0Rm9yRGVidWdnZXJDQi5zZXRPbkNsaWNrTGlzdGVuZXIobVdhaXRGb3JEZWJ1Z2dlckNsaWNrZWQpOwogICAgICAgICBtQWx3YXlzRmluaXNoQ0IgPSAoQ2hlY2tCb3gpZmluZFZpZXdCeUlkKFIuaWQuYWx3YXlzX2ZpbmlzaCk7CiAgICAgICAgIG1BbHdheXNGaW5pc2hDQi5zZXRPbkNsaWNrTGlzdGVuZXIobUFsd2F5c0ZpbmlzaENsaWNrZWQpOworICAgICAgICBtUG9pbnRlckxvY2F0aW9uU3Bpbm5lciA9IChTcGlubmVyKWZpbmRWaWV3QnlJZChSLmlkLnBvaW50ZXJfbG9jYXRpb24pOworICAgICAgICBtUG9pbnRlckxvY2F0aW9uU3Bpbm5lci5zZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKG1Qb2ludGVyTG9jYXRpb25DaGFuZ2VkKTsKKyAgICAgICAgQXJyYXlBZGFwdGVyPFN0cmluZz4gYWRhcHRlciA9IG5ldyBBcnJheUFkYXB0ZXI8U3RyaW5nPigKKyAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5sYXlvdXQuc2ltcGxlX3NwaW5uZXJfaXRlbSwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgICAgICAgICAgIk5vIFBvaW50ZXIgTG9jYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgIlBvaW50ZXIgTG9jYXRpb24iIH0pOworICAgICAgICBhZGFwdGVyLnNldERyb3BEb3duVmlld1Jlc291cmNlKGFuZHJvaWQuUi5sYXlvdXQuc2ltcGxlX3NwaW5uZXJfZHJvcGRvd25faXRlbSk7CisgICAgICAgIG1Qb2ludGVyTG9jYXRpb25TcGlubmVyLnNldEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgICAgIG1TaG93TG9hZENCID0gKENoZWNrQm94KWZpbmRWaWV3QnlJZChSLmlkLnNob3dfbG9hZCk7CiAgICAgICAgIG1TaG93TG9hZENCLnNldE9uQ2xpY2tMaXN0ZW5lcihtU2hvd0xvYWRDbGlja2VkKTsKICAgICAgICAgbVNob3dDcHVDQiA9IChDaGVja0JveClmaW5kVmlld0J5SWQoUi5pZC5zaG93X2NwdSk7CkBAIC0xMTMsNyArMTI1LDcgQEAKICAgICAgICAgbUNvbXBhdGliaWxpdHlNb2RlQ0Iuc2V0T25DbGlja0xpc3RlbmVyKG1Db21wYXRpYmlsaXR5TW9kZUNsaWNrZWQpOwogICAgICAgICBtTWF4UHJvY3NTcGlubmVyID0gKFNwaW5uZXIpZmluZFZpZXdCeUlkKFIuaWQubWF4X3Byb2NzKTsKICAgICAgICAgbU1heFByb2NzU3Bpbm5lci5zZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKG1NYXhQcm9jc0NoYW5nZWQpOwotICAgICAgICBBcnJheUFkYXB0ZXI8U3RyaW5nPiBhZGFwdGVyID0gbmV3IEFycmF5QWRhcHRlcjxTdHJpbmc+KAorICAgICAgICBhZGFwdGVyID0gbmV3IEFycmF5QWRhcHRlcjxTdHJpbmc+KAogICAgICAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfc3Bpbm5lcl9pdGVtLAogICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7CkBAIC0xNjksNiArMTgxLDcgQEAKICAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKICAgICAgICAgdXBkYXRlRGVidWdPcHRpb25zKCk7CiAgICAgICAgIHVwZGF0ZUZpbmlzaE9wdGlvbnMoKTsKKyAgICAgICAgdXBkYXRlUG9pbnRlckxvY2F0aW9uT3B0aW9ucygpOwogICAgICAgICB1cGRhdGVQcm9jZXNzTGltaXRPcHRpb25zKCk7CiAgICAgICAgIHVwZGF0ZVNoYXJlZE9wdGlvbnMoKTsKICAgICAgICAgdXBkYXRlRmxpbmdlck9wdGlvbnMoKTsKQEAgLTIyMSw2ICsyMzQsMTcgQEAKICAgICAgICAgbUFsd2F5c0ZpbmlzaENCLnNldENoZWNrZWQobUFsd2F5c0ZpbmlzaCk7CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlUG9pbnRlckxvY2F0aW9uT3B0aW9ucygpIHsKKyAgICAgICAgU2V0dGluZ3MuU3lzdGVtLnB1dEludChnZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TeXN0ZW0uUE9JTlRFUl9MT0NBVElPTiwgbVBvaW50ZXJMb2NhdGlvbik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBvaW50ZXJMb2NhdGlvbk9wdGlvbnMoKSB7CisgICAgICAgIG1Qb2ludGVyTG9jYXRpb24gPSBTZXR0aW5ncy5TeXN0ZW0uZ2V0SW50KGdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5QT0lOVEVSX0xPQ0FUSU9OLCAwKTsKKyAgICAgICAgbVBvaW50ZXJMb2NhdGlvblNwaW5uZXIuc2V0U2VsZWN0aW9uKG1Qb2ludGVyTG9jYXRpb24pOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB3cml0ZVByb2Nlc3NMaW1pdE9wdGlvbnMoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnNldFByb2Nlc3NMaW1pdChtUHJvY2Vzc0xpbWl0KTsKQEAgLTQyMCw2ICs0NDQsMTggQEAKICAgICAgICAgfQogICAgIH07CiAKKyAgICBwcml2YXRlIFNwaW5uZXIuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lciBtUG9pbnRlckxvY2F0aW9uQ2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgU3Bpbm5lci5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TZWxlY3RlZChhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldyBhdiwgVmlldyB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgICAgICBtUG9pbnRlckxvY2F0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICB3cml0ZVBvaW50ZXJMb2NhdGlvbk9wdGlvbnMoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aGluZ1NlbGVjdGVkKGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3IGF2KSB7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgcHJpdmF0ZSBTcGlubmVyLk9uSXRlbVNlbGVjdGVkTGlzdGVuZXIgbU1heFByb2NzQ2hhbmdlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgU3Bpbm5lci5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyKCkgewogICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TZWxlY3RlZChhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldyBhdiwgVmlldyB2LApkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvRXhjZXB0aW9uQnJvd3Nlci5qYXZhIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvRXhjZXB0aW9uQnJvd3Nlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzI3MGFhLi4wMDAwMDAwCi0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0V4Y2VwdGlvbkJyb3dzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotKiogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCi0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAotKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKLSoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKLSoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5kZXZlbG9wbWVudDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YVNldE9ic2VydmVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNoZWNraW47Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5DcmFzaERhdGE7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5UaHJvd2FibGVEYXRhOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lio7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuYmluYXJ5LkJhc2U2NDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIEV4Y2VwdGlvbkJyb3dzZXIgZXh0ZW5kcyBMaXN0QWN0aXZpdHkgewotICAgIC8qKiBMb2dnaW5nIGlkZW50aWZpZXIuICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJFeGNlcHRpb25Ccm93c2VyIjsKLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLQotICAgICAgICBDdXJzb3IgY3Vyc29yID0gZ2V0Q29udGVudFJlc29sdmVyKCkucXVlcnkoCi0gICAgICAgICAgICAgICAgQ2hlY2tpbi5DcmFzaGVzLkNPTlRFTlRfVVJJLAotICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IENoZWNraW4uQ3Jhc2hlcy5fSUQsIENoZWNraW4uQ3Jhc2hlcy5EQVRBIH0sCi0gICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCk7Ci0KLSAgICAgICAgaWYgKGN1cnNvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzdGFydE1hbmFnaW5nQ3Vyc29yKGN1cnNvcik7Ci0KLSAgICAgICAgICAgIHNldExpc3RBZGFwdGVyKG5ldyBDdXJzb3JBZGFwdGVyKHRoaXMsIGN1cnNvciwgdHJ1ZSkgewotICAgICAgICAgICAgICAgIHB1YmxpYyBWaWV3IG5ld1ZpZXcoQ29udGV4dCBjb250ZXh0LCBDdXJzb3IgYywgVmlld0dyb3VwIHYpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDcmFzaExpc3RJdGVtKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJpbmRWaWV3KFZpZXcgdmlldywgQ29udGV4dCBjLCBDdXJzb3IgY3Vyc29yKSB7Ci0gICAgICAgICAgICAgICAgICAgIENyYXNoTGlzdEl0ZW0gaXRlbSA9IChDcmFzaExpc3RJdGVtKSB2aWV3OwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGEgPSBjdXJzb3IuZ2V0U3RyaW5nKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ3Jhc2hEYXRhIGNyYXNoID0gbmV3IENyYXNoRGF0YSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0YUlucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlNjQuZGVjb2RlQmFzZTY0KGRhdGEuZ2V0Qnl0ZXMoKSkpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFRocm93YWJsZURhdGEgZXhjID0gY3Jhc2guZ2V0VGhyb3dhYmxlRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRUZXh0KGV4Yy5nZXRUeXBlKCkgKyAiOiAiICsgZXhjLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldENyYXNoRGF0YShjcmFzaCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGV4dCgiSW52YWxpZCBjcmFzaDogIiArIGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBjcmFzaCIsIGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyBkYXRhYmFzZSwgbm8gZXhjZXB0aW9ucywgZW1wdHkgbGlzdC4KLSAgICAgICAgICAgIHNldExpc3RBZGFwdGVyKG5ldyBCYXNlQWRhcHRlcigpIHsKLSAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IGdldEl0ZW0oaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBsb25nIGdldEl0ZW1JZChpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHVibGljIFZpZXcgZ2V0VmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAgcGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFVQTE9BRF9JRCA9IE1lbnUuRklSU1Q7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENMRUFSX0lEID0gTWVudS5GSVJTVCArIDE7Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlvbnNNZW51KE1lbnUgbWVudSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZU9wdGlvbnNNZW51KG1lbnUpOwotCi0gICAgICAgIG1lbnUuYWRkKDAsIFVQTE9BRF9JRCwgMCwgUi5zdHJpbmcubWVudV91cGxvYWRfZXhjZXB0aW9ucyk7Ci0gICAgICAgIG1lbnUuYWRkKDAsIENMRUFSX0lELCAwLCBSLnN0cmluZy5tZW51X2NsZWFyX2V4Y2VwdGlvbnMpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25PcHRpb25zSXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICAgICAgLy8gSGFuZGxlIGFsbCBvZiB0aGUgcG9zc2libGUgbWVudSBhY3Rpb25zLgotICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0SXRlbUlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVVBMT0FEX0lEOgotICAgICAgICAgICAgICAgIHNlbmRCcm9hZGNhc3QobmV3IEludGVudChDaGVja2luLlRyaWdnZXJJbnRlbnQuQUNUSU9OKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENMRUFSX0lEOgotICAgICAgICAgICAgICAgIGdldENvbnRlbnRSZXNvbHZlcigpLmRlbGV0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIENoZWNraW4uQ3Jhc2hlcy5DT05URU5UX1VSSSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN1cGVyLm9uT3B0aW9uc0l0ZW1TZWxlY3RlZChpdGVtKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgQ3Jhc2hMaXN0SXRlbSBleHRlbmRzIFRleHRWaWV3IHsKLSAgICAgICAgQ3Jhc2hEYXRhIGNyYXNoRGF0YSA9IG51bGw7Ci0KLSAgICAgICAgcHVibGljIENyYXNoTGlzdEl0ZW0oQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgICAgIHNldFRleHRTaXplKDEwKTsKLSAgICAgICAgICAgIHNldFR5cGVmYWNlKFR5cGVmYWNlLk1PTk9TUEFDRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQ3Jhc2hEYXRhIGdldENyYXNoRGF0YSgpIHsKLSAgICAgICAgICAgIHJldHVybiBjcmFzaERhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDcmFzaERhdGEoQ3Jhc2hEYXRhIGNyYXNoRGF0YSkgewotICAgICAgICAgICAgdGhpcy5jcmFzaERhdGEgPSBjcmFzaERhdGE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkxpc3RJdGVtQ2xpY2soTGlzdFZpZXcgbCwgVmlldyB2aWV3LCBpbnQgcG9zLCBsb25nIGlkKSB7Ci0gICAgICAgIC8vIFRPRE86IFVzZSBhIGdlbmVyaWMgVklFVyBhY3Rpb24gb24gdGhlIGNyYXNoJ3MgY29udGVudCBVUkkuCi0gICAgICAgIENyYXNoRGF0YSBjcmFzaCA9ICgoQ3Jhc2hMaXN0SXRlbSkgdmlldykuZ2V0Q3Jhc2hEYXRhKCk7Ci0gICAgICAgIGlmIChjcmFzaCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCgpOwotICAgICAgICAgICAgaW50ZW50LnNldENsYXNzKHRoaXMsIFN0YWNrdHJhY2VWaWV3ZXIuY2xhc3MpOwotICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKAotICAgICAgICAgICAgICAgICAgICBDcmFzaERhdGEuY2xhc3MuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBjcmFzaC5nZXRUaHJvd2FibGVEYXRhKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBzdGFydEFjdGl2aXR5KGludGVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9HTFNUZXN0ZXIuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0dMU1Rlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTk1YjRkLi4wMDAwMDAwCi0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0dMU1Rlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmRldmVsb3BtZW50OwotCi1pbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmdvb2dsZWFwcHMuR29vZ2xlTG9naW5DcmVkZW50aWFsc1Jlc3VsdDsKLWltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuZ29vZ2xlbG9naW4uR29vZ2xlTG9naW5TZXJ2aWNlQ29uc3RhbnRzOwotaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLklHb29nbGVMb2dpblNlcnZpY2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmdvb2dsZWFwcHMuTG9naW5EYXRhOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkNoZWNrQm94OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNwaW5uZXI7Ci0KLS8qKgotICogVXNpbmcgYSBMb2dUZXh0Qm94IHRvIGRpc3BsYXkgYSBzY3JvbGxhYmxlIHRleHQgYXJlYQotICogdG8gd2hpY2ggdGV4dCBpcyBhcHBlbmRlZC4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBHTFNUZXN0ZXIgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkdMU1Rlc3RlciI7Ci0KLSAgICBwcml2YXRlIExvZ1RleHRCb3ggbVRleHQ7Ci0KLSAgICBwcml2YXRlIElHb29nbGVMb2dpblNlcnZpY2UgbUdscyA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTZXJ2aWNlQ29ubmVjdGlvbiBtQ29ubmVjdGlvbiA9IG51bGw7Ci0KLSAgICBDaGVja0JveCBtRG9Ob3RpZnkgPSBudWxsOwotICAgIENoZWNrQm94IG1SdW5JbnRlbnQgPSBudWxsOwotICAgIFNwaW5uZXIgbVNlcnZpY2UgPSBudWxsOwotICAgIEVkaXRUZXh0IG1Vc2VybmFtZUVkaXQgPSBudWxsOwotCi0gICAgcHJpdmF0ZSBjbGFzcyBMaXN0ZW5lciBpbXBsZW1lbnRzIFZpZXcuT25DbGlja0xpc3RlbmVyIHsKLSAgICAgICAgcHVibGljIExpc3RlbmVyKCkgewotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIGlmIChtR2xzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoIm1HbHMgaXMgbnVsbFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2VydmljZSA9IChTdHJpbmcpIG1TZXJ2aWNlLmdldFNlbGVjdGVkSXRlbSgpOwotICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgic2VydmljZTogIiArIHNlcnZpY2UgKyAiXG4iKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBhY2NvdW50ID0gbVVzZXJuYW1lRWRpdC5nZXRUZXh0KCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAoYWNjb3VudC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY291bnQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImFjY291bnQ6ICIgKyBhY2NvdW50ICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgR29vZ2xlTG9naW5DcmVkZW50aWFsc1Jlc3VsdCByZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICBtR2xzLmJsb2NraW5nR2V0Q3JlZGVudGlhbHMoYWNjb3VudCwgc2VydmljZSwgbURvTm90aWZ5LmlzQ2hlY2tlZCgpKTsKLSAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoInJlc3VsdCBhY2NvdW50OiAiICsgcmVzdWx0LmdldEFjY291bnQoKSArICJcbiIpOwotICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgicmVzdWx0IHN0cmluZzogIiArIHJlc3VsdC5nZXRDcmVkZW50aWFsc1N0cmluZygpICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IHJlc3VsdC5nZXRDcmVkZW50aWFsc0ludGVudCgpOwotICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgicmVzdWx0IGludGVudDogIiArIGludGVudCArICJcbiIpOwotCi0gICAgICAgICAgICAgICAgaWYgKGludGVudCAhPSBudWxsICYmIG1SdW5JbnRlbnQuaXNDaGVja2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJjYXVnaHQgZXhjZXB0aW9uICIgKyBlICsgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBkYXRhKSB7Ci0gICAgICAgIG1UZXh0LmFwcGVuZCgicmVzdWx0Q29kZTogIiArIHJlc3VsdENvZGUgKyAiXG4iKTsKLSAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJhY2NvdW50OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdldFN0cmluZ0V4dHJhKEdvb2dsZUxvZ2luU2VydmljZUNvbnN0YW50cy5BVVRIX0FDQ09VTlRfS0VZKSArICJcbiIpOwotICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJhdXRodG9rZW46ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ2V0U3RyaW5nRXh0cmEoR29vZ2xlTG9naW5TZXJ2aWNlQ29uc3RhbnRzLkFVVEhUT0tFTl9LRVkpICsgIlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVGV4dC5hcHBlbmQoImludGVudCBpcyBudWxsIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0KLSAgICAgICAgLy8gT3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIEdvb2dsZSBMb2dpbiBTZXJ2aWNlLiAgUmV0dXJuIHRoZSBhY2NvdW50LgotICAgICAgICBtQ29ubmVjdGlvbiA9IG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsIElCaW5kZXIgc2VydmljZSkgewotICAgICAgICAgICAgICAgICAgICBtR2xzID0gSUdvb2dsZUxvZ2luU2VydmljZS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbUdscyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICBiaW5kU2VydmljZShHb29nbGVMb2dpblNlcnZpY2VDb25zdGFudHMuU0VSVklDRV9JTlRFTlQsCi0gICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lmdsc190ZXN0ZXIpOwotCi0gICAgICAgIG1UZXh0ID0gKExvZ1RleHRCb3gpIGZpbmRWaWV3QnlJZChSLmlkLnRleHQpOwotICAgICAgICBtVGV4dC5hcHBlbmQoIkhlbGxvLCB3b3JsZCFcbiIpOwotICAgICAgICBMb2cudihUQUcsICJoZWxsbywgd29ybGQhIik7Ci0KLSAgICAgICAgbURvTm90aWZ5ID0gKENoZWNrQm94KSBmaW5kVmlld0J5SWQoUi5pZC5kb19ub3RpZmljYXRpb24pOwotICAgICAgICBtUnVuSW50ZW50ID0gKENoZWNrQm94KSBmaW5kVmlld0J5SWQoUi5pZC5ydW5faW50ZW50KTsKLSAgICAgICAgbVJ1bkludGVudC5zZXRDaGVja2VkKHRydWUpOwotCi0gICAgICAgIG1TZXJ2aWNlID0gKFNwaW5uZXIpIGZpbmRWaWV3QnlJZChSLmlkLnNlcnZpY2Vfc3Bpbm5lcik7Ci0KLSAgICAgICAgbVVzZXJuYW1lRWRpdCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQudXNlcm5hbWVfZWRpdCk7Ci0KLSAgICAgICAgQnV0dG9uIGI7Ci0gICAgICAgIGIgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5yZXF1aXJlX2dvb2dsZSk7Ci0gICAgICAgIGIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFjY291bnQgPSBtR2xzLmdldEFjY291bnQoR29vZ2xlTG9naW5TZXJ2aWNlQ29uc3RhbnRzLlJFUVVJUkVfR09PR0xFKTsKLSAgICAgICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJSRVFVSVJFX0dPT0dMRSBnYXZlOiAiICsgYWNjb3VudCArICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBtVXNlcm5hbWVFZGl0LnNldFRleHQoYWNjb3VudCA9PSBudWxsID8gIiIgOiBhY2NvdW50KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImV4Y2VwdGlvbjogIiArIGUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IH0pOwotCi0gICAgICAgIGIgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5wcmVmZXJfaG9zdGVkKTsKLSAgICAgICAgYi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYWNjb3VudCA9IG1HbHMuZ2V0QWNjb3VudChHb29nbGVMb2dpblNlcnZpY2VDb25zdGFudHMuUFJFRkVSX0hPU1RFRCk7Ci0gICAgICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiUFJFRkVSX0hPU1RFRCBnYXZlOiAiICsgYWNjb3VudCArICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBtVXNlcm5hbWVFZGl0LnNldFRleHQoYWNjb3VudCA9PSBudWxsID8gIiIgOiBhY2NvdW50KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImV4Y2VwdGlvbjogIiArIGUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IH0pOwotCi0KLSAgICAgICAgYiA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmdldF9hY2NvdW50cyk7Ci0gICAgICAgIGIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gYWNjb3VudHMgPSBtR2xzLmdldEFjY291bnRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiYWNjb3VudCBsaXN0OiAoIiArIGFjY291bnRzLmxlbmd0aCArICIgZW50cmllcylcbiIpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyB1c2VybmFtZTogYWNjb3VudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiICAiICsgdXNlcm5hbWUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiZXhjZXB0aW9uOiAiICsgZSArICJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gfSk7Ci0KLSAgICAgICAgYiA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmNsZWFyKTsKLSAgICAgICAgYi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgICAgICBtVGV4dC5zZXRUZXh0KCIiKTsKLSAgICAgICAgICAgIH0gfSk7Ci0KLSAgICAgICAgYiA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmdvKTsKLSAgICAgICAgYi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IExpc3RlbmVyKCkpOwotCi0gICAgICAgIGIgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC53aXBlX3Bhc3N3b3Jkcyk7Ci0gICAgICAgIGIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgbVRleHQuc2V0VGV4dCgid2lwaW5nIHBhc3N3b3JkczpcbiIpOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGFjY291bnRzID0gbUdscy5nZXRBY2NvdW50cygpOwotICAgICAgICAgICAgICAgICAgICBMb2dpbkRhdGEgbGQgPSBuZXcgTG9naW5EYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHVzZXJuYW1lOiBhY2NvdW50cykgewotICAgICAgICAgICAgICAgICAgICAgICAgbGQubVVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtR2xzLnVwZGF0ZVBhc3N3b3JkKGxkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiICAiICsgdXNlcm5hbWUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImRvbmUuXG4iKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImNhdWdodCBleGNlcHRpb24gIiArIGUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IH0pOwotCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25EZXN0cm95KCkgewotICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTsKLSAgICAgICAgdW5iaW5kU2VydmljZShtQ29ubmVjdGlvbik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvUGFja2FnZVN1bW1hcnkuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L1BhY2thZ2VTdW1tYXJ5LmphdmEKaW5kZXggNTYxMDU1OS4uNThhYjBmNyAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvUGFja2FnZVN1bW1hcnkuamF2YQorKysgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9QYWNrYWdlU3VtbWFyeS5qYXZhCkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgICAgIG1SZXN0YXJ0LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CiAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkucmVzdGFydFBhY2thZ2UobVBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkua2lsbEJhY2tncm91bmRQcm9jZXNzZXMobVBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L1BvaW50ZXJMb2NhdGlvbi5qYXZhIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvUG9pbnRlckxvY2F0aW9uLmphdmEKaW5kZXggMzhiNGFmMi4uODg4MjhiMCAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvUG9pbnRlckxvY2F0aW9uLmphdmEKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvUG9pbnRlckxvY2F0aW9uLmphdmEKQEAgLTE2LDIwICsxNiwxMSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmRldmVsb3BtZW50OwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50LkZvbnRNZXRyaWNzSW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmVsb2NpdHlUcmFja2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGNvbS5hbmRyb2lkLmNvbW1vbi51aS5Qb2ludGVyTG9jYXRpb25WaWV3OwogCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIAogLyoqCiAgKiBEZW1vbnN0cmF0ZXMgd3JhcHBpbmcgYSBsYXlvdXQgaW4gYSBTY3JvbGxWaWV3LgpAQCAtMzksMzA0ICszMCwxMSBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKICAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLSAgICAgICAgc2V0Q29udGVudFZpZXcobmV3IE15Vmlldyh0aGlzKSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KG5ldyBQb2ludGVyTG9jYXRpb25WaWV3KHRoaXMpKTsKICAgICAgICAgCiAgICAgICAgIC8vIE1ha2UgdGhlIHNjcmVlbiBmdWxsIGJyaWdodCBmb3IgdGhpcyBhY3Rpdml0eS4KICAgICAgICAgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgbHAgPSBnZXRXaW5kb3coKS5nZXRBdHRyaWJ1dGVzKCk7CiAgICAgICAgIGxwLnNjcmVlbkJyaWdodG5lc3MgPSAxLjBmOwogICAgICAgICBnZXRXaW5kb3coKS5zZXRBdHRyaWJ1dGVzKGxwKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBQb2ludGVyU3RhdGUgewotICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxGbG9hdD4gbVhzID0gbmV3IEFycmF5TGlzdDxGbG9hdD4oKTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8RmxvYXQ+IG1ZcyA9IG5ldyBBcnJheUxpc3Q8RmxvYXQ+KCk7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQ3VyRG93bjsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUN1clg7Ci0gICAgICAgIHByaXZhdGUgaW50IG1DdXJZOwotICAgICAgICBwcml2YXRlIGZsb2F0IG1DdXJQcmVzc3VyZTsKLSAgICAgICAgcHJpdmF0ZSBmbG9hdCBtQ3VyU2l6ZTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUN1cldpZHRoOwotICAgICAgICBwcml2YXRlIFZlbG9jaXR5VHJhY2tlciBtVmVsb2NpdHk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBjbGFzcyBNeVZpZXcgZXh0ZW5kcyBWaWV3IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBWaWV3Q29uZmlndXJhdGlvbiBtVkM7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVRleHRQYWludDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtVGV4dEJhY2tncm91bmRQYWludDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtVGV4dExldmVsUGFpbnQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50OwotICAgICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1UYXJnZXRQYWludDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtUGF0aFBhaW50OwotICAgICAgICBwcml2YXRlIGZpbmFsIEZvbnRNZXRyaWNzSW50IG1UZXh0TWV0cmljcyA9IG5ldyBGb250TWV0cmljc0ludCgpOwotICAgICAgICBwcml2YXRlIGludCBtSGVhZGVyQm90dG9tOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUN1ckRvd247Ci0gICAgICAgIHByaXZhdGUgaW50IG1DdXJOdW1Qb2ludGVyczsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbU1heE51bVBvaW50ZXJzOwotICAgICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxQb2ludGVyU3RhdGU+IG1Qb2ludGVycwotICAgICAgICAgICAgICAgICA9IG5ldyBBcnJheUxpc3Q8UG9pbnRlclN0YXRlPigpOwotICAgICAgICAKLSAgICAgICAgcHVibGljIE15VmlldyhDb250ZXh0IGMpIHsKLSAgICAgICAgICAgIHN1cGVyKGMpOwotICAgICAgICAgICAgbVZDID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KGMpOwotICAgICAgICAgICAgbVRleHRQYWludCA9IG5ldyBQYWludCgpOwotICAgICAgICAgICAgbVRleHRQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICBtVGV4dFBhaW50LnNldFRleHRTaXplKDEwCi0gICAgICAgICAgICAgICAgICAgICogZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKS5kZW5zaXR5KTsKLSAgICAgICAgICAgIG1UZXh0UGFpbnQuc2V0QVJHQigyNTUsIDAsIDAsIDApOwotICAgICAgICAgICAgbVRleHRCYWNrZ3JvdW5kUGFpbnQgPSBuZXcgUGFpbnQoKTsKLSAgICAgICAgICAgIG1UZXh0QmFja2dyb3VuZFBhaW50LnNldEFudGlBbGlhcyhmYWxzZSk7Ci0gICAgICAgICAgICBtVGV4dEJhY2tncm91bmRQYWludC5zZXRBUkdCKDEyOCwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgICAgICAgICBtVGV4dExldmVsUGFpbnQgPSBuZXcgUGFpbnQoKTsKLSAgICAgICAgICAgIG1UZXh0TGV2ZWxQYWludC5zZXRBbnRpQWxpYXMoZmFsc2UpOwotICAgICAgICAgICAgbVRleHRMZXZlbFBhaW50LnNldEFSR0IoMTkyLCAyNTUsIDAsIDApOwotICAgICAgICAgICAgbVBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICBtUGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwotICAgICAgICAgICAgbVBhaW50LnNldEFSR0IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKLSAgICAgICAgICAgIG1QYWludC5zZXRTdHlsZShQYWludC5TdHlsZS5TVFJPS0UpOwotICAgICAgICAgICAgbVBhaW50LnNldFN0cm9rZVdpZHRoKDIpOwotICAgICAgICAgICAgbVRhcmdldFBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICBtVGFyZ2V0UGFpbnQuc2V0QW50aUFsaWFzKGZhbHNlKTsKLSAgICAgICAgICAgIG1UYXJnZXRQYWludC5zZXRBUkdCKDI1NSwgMCwgMCwgMTkyKTsKLSAgICAgICAgICAgIG1QYXRoUGFpbnQgPSBuZXcgUGFpbnQoKTsKLSAgICAgICAgICAgIG1QYXRoUGFpbnQuc2V0QW50aUFsaWFzKGZhbHNlKTsKLSAgICAgICAgICAgIG1QYXRoUGFpbnQuc2V0QVJHQigyNTUsIDAsIDk2LCAyNTUpOwotICAgICAgICAgICAgbVBhaW50LnNldFN0eWxlKFBhaW50LlN0eWxlLlNUUk9LRSk7Ci0gICAgICAgICAgICBtUGFpbnQuc2V0U3Ryb2tlV2lkdGgoMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFBvaW50ZXJTdGF0ZSBwcyA9IG5ldyBQb2ludGVyU3RhdGUoKTsKLSAgICAgICAgICAgIHBzLm1WZWxvY2l0eSA9IFZlbG9jaXR5VHJhY2tlci5vYnRhaW4oKTsKLSAgICAgICAgICAgIG1Qb2ludGVycy5hZGQocHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIG9uTWVhc3VyZShpbnQgd2lkdGhNZWFzdXJlU3BlYywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0gICAgICAgICAgICBzdXBlci5vbk1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICAgICAgbVRleHRQYWludC5nZXRGb250TWV0cmljc0ludChtVGV4dE1ldHJpY3MpOwotICAgICAgICAgICAgbUhlYWRlckJvdHRvbSA9IC1tVGV4dE1ldHJpY3MuYXNjZW50K21UZXh0TWV0cmljcy5kZXNjZW50KzI7Ci0gICAgICAgICAgICBMb2cuaSgiZm9vIiwgIk1ldHJpY3M6IGFzY2VudD0iICsgbVRleHRNZXRyaWNzLmFzY2VudAotICAgICAgICAgICAgICAgICAgICArICIgZGVzY2VudD0iICsgbVRleHRNZXRyaWNzLmRlc2NlbnQKLSAgICAgICAgICAgICAgICAgICAgKyAiIGxlYWRpbmc9IiArIG1UZXh0TWV0cmljcy5sZWFkaW5nCi0gICAgICAgICAgICAgICAgICAgICsgIiB0b3A9IiArIG1UZXh0TWV0cmljcy50b3AKLSAgICAgICAgICAgICAgICAgICAgKyAiIGJvdHRvbT0iICsgbVRleHRNZXRyaWNzLmJvdHRvbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCB3ID0gZ2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBpdGVtVyA9IHcvNzsKLSAgICAgICAgICAgIGZpbmFsIGludCBiYXNlID0gLW1UZXh0TWV0cmljcy5hc2NlbnQrMTsKLSAgICAgICAgICAgIGZpbmFsIGludCBib3R0b20gPSBtSGVhZGVyQm90dG9tOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmaW5hbCBpbnQgTlAgPSBtUG9pbnRlcnMuc2l6ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoTlAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgUG9pbnRlclN0YXRlIHBzID0gbVBvaW50ZXJzLmdldCgwKTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoMCwgMCwgaXRlbVctMSwgYm90dG9tLG1UZXh0QmFja2dyb3VuZFBhaW50KTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoIlA6ICIgKyBtQ3VyTnVtUG9pbnRlcnMgKyAiIC8gIiArIG1NYXhOdW1Qb2ludGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgIDEsIGJhc2UsIG1UZXh0UGFpbnQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZpbmFsIGludCBOID0gcHMubVhzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoKG1DdXJEb3duICYmIHBzLm1DdXJEb3duKSB8fCBOID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KGl0ZW1XLCAwLCAoaXRlbVcgKiAyKSAtIDEsIGJvdHRvbSwgbVRleHRCYWNrZ3JvdW5kUGFpbnQpOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoIlg6ICIgKyBwcy5tQ3VyWCwgMSArIGl0ZW1XLCBiYXNlLCBtVGV4dFBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KGl0ZW1XICogMiwgMCwgKGl0ZW1XICogMykgLSAxLCBib3R0b20sIG1UZXh0QmFja2dyb3VuZFBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KCJZOiAiICsgcHMubUN1clksIDEgKyBpdGVtVyAqIDIsIGJhc2UsIG1UZXh0UGFpbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGR4ID0gcHMubVhzLmdldChOLTEpIC0gcHMubVhzLmdldCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHkgPSBwcy5tWXMuZ2V0KE4tMSkgLSBwcy5tWXMuZ2V0KDApOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoaXRlbVcsIDAsIChpdGVtVyAqIDIpIC0gMSwgYm90dG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGR4KSA8IG1WQy5nZXRTY2FsZWRUb3VjaFNsb3AoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbVRleHRCYWNrZ3JvdW5kUGFpbnQgOiBtVGV4dExldmVsUGFpbnQpOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1RleHQoImRYOiAiICsgU3RyaW5nLmZvcm1hdCgiJS4xZiIsIGR4KSwgMSArIGl0ZW1XLCBiYXNlLCBtVGV4dFBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KGl0ZW1XICogMiwgMCwgKGl0ZW1XICogMykgLSAxLCBib3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnMoZHkpIDwgbVZDLmdldFNjYWxlZFRvdWNoU2xvcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtVGV4dEJhY2tncm91bmRQYWludCA6IG1UZXh0TGV2ZWxQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dCgiZFk6ICIgKyBTdHJpbmcuZm9ybWF0KCIlLjFmIiwgZHkpLCAxICsgaXRlbVcgKiAyLCBiYXNlLCBtVGV4dFBhaW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KGl0ZW1XICogMywgMCwgKGl0ZW1XICogNCkgLSAxLCBib3R0b20sIG1UZXh0QmFja2dyb3VuZFBhaW50KTsKLSAgICAgICAgICAgICAgICBpbnQgdmVsb2NpdHkgPSBwcy5tVmVsb2NpdHkgPT0gbnVsbCA/IDAgOiAoaW50KSAocHMubVZlbG9jaXR5LmdldFhWZWxvY2l0eSgpICogMTAwMCk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KCJYdjogIiArIHZlbG9jaXR5LCAxICsgaXRlbVcgKiAzLCBiYXNlLCBtVGV4dFBhaW50KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoaXRlbVcgKiA0LCAwLCAoaXRlbVcgKiA1KSAtIDEsIGJvdHRvbSwgbVRleHRCYWNrZ3JvdW5kUGFpbnQpOwotICAgICAgICAgICAgICAgIHZlbG9jaXR5ID0gcHMubVZlbG9jaXR5ID09IG51bGwgPyAwIDogKGludCkgKHBzLm1WZWxvY2l0eS5nZXRZVmVsb2NpdHkoKSAqIDEwMDApOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dCgiWXY6ICIgKyB2ZWxvY2l0eSwgMSArIGl0ZW1XICogNCwgYmFzZSwgbVRleHRQYWludCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSZWN0KGl0ZW1XICogNSwgMCwgKGl0ZW1XICogNikgLSAxLCBib3R0b20sIG1UZXh0QmFja2dyb3VuZFBhaW50KTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoaXRlbVcgKiA1LCAwLCAoaXRlbVcgKiA1KSArIChwcy5tQ3VyUHJlc3N1cmUgKiBpdGVtVykgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tLCBtVGV4dExldmVsUGFpbnQpOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3VGV4dCgiUHJzOiAiICsgU3RyaW5nLmZvcm1hdCgiJS4yZiIsIHBzLm1DdXJQcmVzc3VyZSksIDEgKyBpdGVtVyAqIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBtVGV4dFBhaW50KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoaXRlbVcgKiA2LCAwLCB3LCBib3R0b20sIG1UZXh0QmFja2dyb3VuZFBhaW50KTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoaXRlbVcgKiA2LCAwLCAoaXRlbVcgKiA2KSArIChwcy5tQ3VyU2l6ZSAqIGl0ZW1XKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICBib3R0b20sIG1UZXh0TGV2ZWxQYWludCk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRyYXdUZXh0KCJTaXplOiAiICsgU3RyaW5nLmZvcm1hdCgiJS4yZiIsIHBzLm1DdXJTaXplKSwgMSArIGl0ZW1XICogNiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIG1UZXh0UGFpbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGludCBwPTA7IHA8TlA7IHArKykgewotICAgICAgICAgICAgICAgIGZpbmFsIFBvaW50ZXJTdGF0ZSBwcyA9IG1Qb2ludGVycy5nZXQocCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1DdXJEb3duICYmIHBzLm1DdXJEb3duKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3TGluZSgwLCAoaW50KXBzLm1DdXJZLCBnZXRXaWR0aCgpLCAoaW50KXBzLm1DdXJZLCBtVGFyZ2V0UGFpbnQpOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0xpbmUoKGludClwcy5tQ3VyWCwgMCwgKGludClwcy5tQ3VyWCwgZ2V0SGVpZ2h0KCksIG1UYXJnZXRQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBwcmVzc3VyZUxldmVsID0gKGludCkocHMubUN1clByZXNzdXJlKjI1NSk7Ci0gICAgICAgICAgICAgICAgICAgIG1QYWludC5zZXRBUkdCKDI1NSwgcHJlc3N1cmVMZXZlbCwgMTI4LCAyNTUtcHJlc3N1cmVMZXZlbCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UG9pbnQocHMubUN1clgsIHBzLm1DdXJZLCBtUGFpbnQpOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShwcy5tQ3VyWCwgcHMubUN1clksIHBzLm1DdXJXaWR0aCwgbVBhaW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoaW50IHA9MDsgcDxOUDsgcCsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgUG9pbnRlclN0YXRlIHBzID0gbVBvaW50ZXJzLmdldChwKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IHBzLm1Ycy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgbGFzdFg9MCwgbGFzdFk9MDsKLSAgICAgICAgICAgICAgICBib29sZWFuIGhhdmVMYXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBkcmF3biA9IGZhbHNlOwotICAgICAgICAgICAgICAgIG1QYWludC5zZXRBUkdCKDI1NSwgMTI4LCAyNTUsIDI1NSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCB4ID0gcHMubVhzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSA9IHBzLm1Zcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChGbG9hdC5pc05hTih4KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZUxhc3QgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXZlTGFzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdMaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgbVBhdGhQYWludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1BvaW50KGxhc3RYLCBsYXN0WSwgbVBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRyYXduID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsYXN0WCA9IHg7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RZID0geTsKLSAgICAgICAgICAgICAgICAgICAgaGF2ZUxhc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZHJhd24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBzLm1WZWxvY2l0eSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUGFpbnQuc2V0QVJHQigyNTUsIDI1NSwgNjQsIDEyOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB4VmVsID0gcHMubVZlbG9jaXR5LmdldFhWZWxvY2l0eSgpICogKDEwMDAvNjApOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeVZlbCA9IHBzLm1WZWxvY2l0eS5nZXRZVmVsb2NpdHkoKSAqICgxMDAwLzYwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3TGluZShsYXN0WCwgbGFzdFksIGxhc3RYK3hWZWwsIGxhc3RZK3lWZWwsIG1QYWludCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1BvaW50KGxhc3RYLCBsYXN0WSwgbVBhaW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy9Mb2cuaSgiUG9pbnRlciIsICJNb3Rpb246IGFjdGlvbj0weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGFjdGlvbikKLSAgICAgICAgICAgIC8vICAgICAgICArICIgcG9pbnRlcnM9IiArIGV2ZW50LmdldFBvaW50ZXJDb3VudCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IE5QID0gbVBvaW50ZXJzLnNpemUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy9tUmVjdC5zZXQoMCwgMCwgZ2V0V2lkdGgoKSwgbUhlYWRlckJvdHRvbSsxKTsKLSAgICAgICAgICAgIC8vaW52YWxpZGF0ZShtUmVjdCk7Ci0gICAgICAgICAgICAvL2lmIChtQ3VyRG93bikgewotICAgICAgICAgICAgLy8gICAgbVJlY3Quc2V0KG1DdXJYLW1DdXJXaWR0aC0zLCBtQ3VyWS1tQ3VyV2lkdGgtMywKLSAgICAgICAgICAgIC8vICAgICAgICAgICAgbUN1clgrbUN1cldpZHRoKzMsIG1DdXJZK21DdXJXaWR0aCszKTsKLSAgICAgICAgICAgIC8vfSBlbHNlIHsKLSAgICAgICAgICAgIC8vICAgIG1SZWN0LnNldEVtcHR5KCk7Ci0gICAgICAgICAgICAvL30KLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBwPTA7IHA8TlA7IHArKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBQb2ludGVyU3RhdGUgcHMgPSBtUG9pbnRlcnMuZ2V0KHApOwotICAgICAgICAgICAgICAgICAgICBwcy5tWHMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgcHMubVlzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBzLm1WZWxvY2l0eSA9IFZlbG9jaXR5VHJhY2tlci5vYnRhaW4oKTsKLSAgICAgICAgICAgICAgICAgICAgcHMubUN1ckRvd24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVBvaW50ZXJzLmdldCgwKS5tQ3VyRG93biA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbU1heE51bVBvaW50ZXJzID0gMDsKLSAgICAgICAgICAgICAgICBMb2cuaSgiUG9pbnRlciIsICJQb2ludGVyIDE6IERPV04iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKChhY3Rpb24mTW90aW9uRXZlbnQuQUNUSU9OX01BU0spID09IE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0RPV04pIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaWQgPSAoYWN0aW9uJk1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0lEX01BU0spCi0gICAgICAgICAgICAgICAgICAgICAgICA+PiBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9JRF9TSElGVDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoTlAgPD0gaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgUG9pbnRlclN0YXRlIHBzID0gbmV3IFBvaW50ZXJTdGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBwcy5tVmVsb2NpdHkgPSBWZWxvY2l0eVRyYWNrZXIub2J0YWluKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Qb2ludGVycy5hZGQocHMpOwotICAgICAgICAgICAgICAgICAgICBOUCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbCBQb2ludGVyU3RhdGUgcHMgPSBtUG9pbnRlcnMuZ2V0KGlkKTsKLSAgICAgICAgICAgICAgICBwcy5tVmVsb2NpdHkgPSBWZWxvY2l0eVRyYWNrZXIub2J0YWluKCk7Ci0gICAgICAgICAgICAgICAgcHMubUN1ckRvd24gPSB0cnVlOwotICAgICAgICAgICAgICAgIExvZy5pKCJQb2ludGVyIiwgIlBvaW50ZXIgIiArIChpZCsxKSArICI6IERPV04iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmluYWwgaW50IE5JID0gZXZlbnQuZ2V0UG9pbnRlckNvdW50KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1DdXJEb3duID0gYWN0aW9uICE9IE1vdGlvbkV2ZW50LkFDVElPTl9VUAotICAgICAgICAgICAgICAgICAgICAmJiBhY3Rpb24gIT0gTW90aW9uRXZlbnQuQUNUSU9OX0NBTkNFTDsKLSAgICAgICAgICAgIG1DdXJOdW1Qb2ludGVycyA9IG1DdXJEb3duID8gTkkgOiAwOwotICAgICAgICAgICAgaWYgKG1NYXhOdW1Qb2ludGVycyA8IG1DdXJOdW1Qb2ludGVycykgewotICAgICAgICAgICAgICAgIG1NYXhOdW1Qb2ludGVycyA9IG1DdXJOdW1Qb2ludGVyczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE5JOyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBQb2ludGVyU3RhdGUgcHMgPSBtUG9pbnRlcnMuZ2V0KGV2ZW50LmdldFBvaW50ZXJJZChpKSk7Ci0gICAgICAgICAgICAgICAgcHMubVZlbG9jaXR5LmFkZE1vdmVtZW50KGV2ZW50KTsKLSAgICAgICAgICAgICAgICBwcy5tVmVsb2NpdHkuY29tcHV0ZUN1cnJlbnRWZWxvY2l0eSgxKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IGV2ZW50LmdldEhpc3RvcnlTaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPE47IGorKykgewotICAgICAgICAgICAgICAgICAgICBMb2cuaSgiUG9pbnRlciIsICJQb2ludGVyICIgKyAoaSsxKSArICI6ICgiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBldmVudC5nZXRIaXN0b3JpY2FsWChpLCBqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgIiArIGV2ZW50LmdldEhpc3RvcmljYWxZKGksIGopICsgIikiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIFBycz0iICsgZXZlbnQuZ2V0SGlzdG9yaWNhbFByZXNzdXJlKGksIGopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIFNpemU9IiArIGV2ZW50LmdldEhpc3RvcmljYWxTaXplKGksIGopKTsKLSAgICAgICAgICAgICAgICAgICAgcHMubVhzLmFkZChldmVudC5nZXRIaXN0b3JpY2FsWChpLCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBzLm1Zcy5hZGQoZXZlbnQuZ2V0SGlzdG9yaWNhbFkoaSwgaikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBMb2cuaSgiUG9pbnRlciIsICJQb2ludGVyICIgKyAoaSsxKSArICI6ICgiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGV2ZW50LmdldFgoaSkgKyAiLCAiICsgZXZlbnQuZ2V0WShpKSArICIpIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIFBycz0iICsgZXZlbnQuZ2V0UHJlc3N1cmUoaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBTaXplPSIgKyBldmVudC5nZXRTaXplKGkpKTsKLSAgICAgICAgICAgICAgICBwcy5tWHMuYWRkKGV2ZW50LmdldFgoaSkpOwotICAgICAgICAgICAgICAgIHBzLm1Zcy5hZGQoZXZlbnQuZ2V0WShpKSk7Ci0gICAgICAgICAgICAgICAgcHMubUN1clggPSAoaW50KWV2ZW50LmdldFgoaSk7Ci0gICAgICAgICAgICAgICAgcHMubUN1clkgPSAoaW50KWV2ZW50LmdldFkoaSk7Ci0gICAgICAgICAgICAgICAgLy9Mb2cuaSgiUG9pbnRlciIsICJQb2ludGVyICMiICsgcCArICI6ICgiICsgcHMubUN1clgKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgKyAiLCIgKyBwcy5tQ3VyWSArICIpIik7Ci0gICAgICAgICAgICAgICAgcHMubUN1clByZXNzdXJlID0gZXZlbnQuZ2V0UHJlc3N1cmUoaSk7Ci0gICAgICAgICAgICAgICAgcHMubUN1clNpemUgPSBldmVudC5nZXRTaXplKGkpOwotICAgICAgICAgICAgICAgIHBzLm1DdXJXaWR0aCA9IChpbnQpKHBzLm1DdXJTaXplKihnZXRXaWR0aCgpLzMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKChhY3Rpb24mTW90aW9uRXZlbnQuQUNUSU9OX01BU0spID09IE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX1VQKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGlkID0gKGFjdGlvbiZNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9JRF9NQVNLKQotICAgICAgICAgICAgICAgICAgICAgICAgPj4gTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSURfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgZmluYWwgUG9pbnRlclN0YXRlIHBzID0gbVBvaW50ZXJzLmdldChpZCk7Ci0gICAgICAgICAgICAgICAgcHMubVhzLmFkZChGbG9hdC5OYU4pOwotICAgICAgICAgICAgICAgIHBzLm1Zcy5hZGQoRmxvYXQuTmFOKTsKLSAgICAgICAgICAgICAgICBwcy5tQ3VyRG93biA9IGZhbHNlOwotICAgICAgICAgICAgICAgIExvZy5pKCJQb2ludGVyIiwgIlBvaW50ZXIgIiArIChpZCsxKSArICI6IFVQIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX1VQKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE5JOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgUG9pbnRlclN0YXRlIHBzID0gbVBvaW50ZXJzLmdldChldmVudC5nZXRQb2ludGVySWQoaSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHMubUN1ckRvd24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzLm1DdXJEb3duID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuaSgiUG9pbnRlciIsICJQb2ludGVyICIgKyAoaSsxKSArICI6IFVQIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vaWYgKG1DdXJEb3duKSB7Ci0gICAgICAgICAgICAvLyAgICBtUmVjdC51bmlvbihtQ3VyWC1tQ3VyV2lkdGgtMywgbUN1clktbUN1cldpZHRoLTMsCi0gICAgICAgICAgICAvLyAgICAgICAgICAgIG1DdXJYK21DdXJXaWR0aCszLCBtQ3VyWSttQ3VyV2lkdGgrMyk7Ci0gICAgICAgICAgICAvL30KLSAgICAgICAgICAgIC8vaW52YWxpZGF0ZShtUmVjdCk7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9TdGFja3RyYWNlVmlld2VyLmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9TdGFja3RyYWNlVmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YjA1MjEuLjAwMDAwMDAKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvU3RhY2t0cmFjZVZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSoqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQ7Ci0KLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuU2Nyb2xsaW5nTW92ZW1lbnRNZXRob2Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5DcmFzaERhdGE7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5UaHJvd2FibGVEYXRhOwotaW1wb3J0IGFuZHJvaWQuc2VydmVyLmRhdGEuU3RhY2tUcmFjZUVsZW1lbnREYXRhOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7Ci0KLS8qKgotICogVmlld3MgYSBzaW5nbGUgc3RhY2sgdHJhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFja3RyYWNlVmlld2VyIGV4dGVuZHMgQWN0aXZpdHkgewotCi0gICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5sb2dfdmlld2VyKTsKLQotICAgICAgICBUZXh0VmlldyB0ZXh0ID0gKFRleHRWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC50ZXh0KTsKLSAgICAgICAgdGV4dC5zZXRUZXh0U2l6ZSgxMCk7Ci0gICAgICAgIHRleHQuc2V0SG9yaXpvbnRhbGx5U2Nyb2xsaW5nKHRydWUpOwotICAgICAgICB0ZXh0LnNldFR5cGVmYWNlKFR5cGVmYWNlLk1PTk9TUEFDRSk7Ci0gICAgICAgIHRleHQuc2V0TW92ZW1lbnRNZXRob2QoU2Nyb2xsaW5nTW92ZW1lbnRNZXRob2QuZ2V0SW5zdGFuY2UoKSk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc3RhY2t0cmFjZSA9IGdldEludGVudCgpLmdldEV4dHJhcygpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBDcmFzaERhdGEuY2xhc3MuZ2V0TmFtZSgpKTsKLQotICAgICAgICB0ZXh0LnNldFRleHQoc3RhY2t0cmFjZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYXBwcy9GYWxsYmFjay9BbmRyb2lkLm1rIGIvYXBwcy9GYWxsYmFjay9BbmRyb2lkLm1rCmluZGV4IDBhN2Y1Y2YuLmNiNGZmYzQgMTAwNjQ0Ci0tLSBhL2FwcHMvRmFsbGJhY2svQW5kcm9pZC5taworKysgYi9hcHBzL0ZhbGxiYWNrL0FuZHJvaWQubWsKQEAgLTEsNyArMSw3IEBACiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB1c2VyCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKIApkaWZmIC0tZ2l0IGEvYXBwcy9Gb250TGFiL3Jlcy9sYXlvdXQvZm9udF9sYWIueG1sIGIvYXBwcy9Gb250TGFiL3Jlcy9sYXlvdXQvZm9udF9sYWIueG1sCmluZGV4IDFhNzlhZGQuLmZmOWRiMzEgMTAwNjQ0Ci0tLSBhL2FwcHMvRm9udExhYi9yZXMvbGF5b3V0L2ZvbnRfbGFiLnhtbAorKysgYi9hcHBzL0ZvbnRMYWIvcmVzL2xheW91dC9mb250X2xhYi54bWwKQEAgLTE2LDE0ICsxNiwxNCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjRkaXAiIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSI0ZGlwIgogICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIj4KICAgICAgICAgCi0gICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY29sdW1uMSIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9jb2x1bW4xIiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSI4ZGlwIiAvPgotICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2NvbHVtbjIiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIiBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CisgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY29sdW1uMiIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIiBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CiAgICAgICAgIAogPC9MaW5lYXJMYXlvdXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHMvR2VzdHVyZUJ1aWxkZXIvcmVzL2xheW91dC9jcmVhdGVfZ2VzdHVyZS54bWwgYi9hcHBzL0dlc3R1cmVCdWlsZGVyL3Jlcy9sYXlvdXQvY3JlYXRlX2dlc3R1cmUueG1sCmluZGV4IGFkNThhYjMuLjg5ZTY0YzYgMTAwNjQ0Ci0tLSBhL2FwcHMvR2VzdHVyZUJ1aWxkZXIvcmVzL2xheW91dC9jcmVhdGVfZ2VzdHVyZS54bWwKKysrIGIvYXBwcy9HZXN0dXJlQnVpbGRlci9yZXMvbGF5b3V0L2NyZWF0ZV9nZXN0dXJlLnhtbApAQCAtMTcsMTMgKzE3LDEzIEBACiA8TGluZWFyTGF5b3V0CiAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CkBAIC00OSw3ICs0OSw3IEBACiAgICAgCiAgICAgPGFuZHJvaWQuZ2VzdHVyZS5HZXN0dXJlT3ZlcmxheVZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9nZXN0dXJlc19vdmVybGF5IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxLjAiCiAKQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIHN0eWxlPSJAYW5kcm9pZDpzdHlsZS9CdXR0b25CYXIiCiAKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KZGlmZiAtLWdpdCBhL2FwcHMvR2VzdHVyZUJ1aWxkZXIvcmVzL2xheW91dC9kaWFsb2dfcmVuYW1lLnhtbCBiL2FwcHMvR2VzdHVyZUJ1aWxkZXIvcmVzL2xheW91dC9kaWFsb2dfcmVuYW1lLnhtbAppbmRleCA0OTY4OTQ0Li40OWRmODA2IDEwMDY0NAotLS0gYS9hcHBzL0dlc3R1cmVCdWlsZGVyL3Jlcy9sYXlvdXQvZGlhbG9nX3JlbmFtZS54bWwKKysrIGIvYXBwcy9HZXN0dXJlQnVpbGRlci9yZXMvbGF5b3V0L2RpYWxvZ19yZW5hbWUueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIyMGRpcCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CkBAIC0zMSw3ICszMSw3IEBACiAgICAgPEVkaXRUZXh0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbmFtZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpzY3JvbGxIb3Jpem9udGFsbHk9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6YXV0b1RleHQ9ImZhbHNlIgogICAgICAgICBhbmRyb2lkOmNhcGl0YWxpemU9Im5vbmUiCmRpZmYgLS1naXQgYS9hcHBzL0dlc3R1cmVCdWlsZGVyL3Jlcy9sYXlvdXQvZ2VzdHVyZXNfaXRlbS54bWwgYi9hcHBzL0dlc3R1cmVCdWlsZGVyL3Jlcy9sYXlvdXQvZ2VzdHVyZXNfaXRlbS54bWwKaW5kZXggMTU2M2RmZS4uMzZjOTNiOCAxMDA2NDQKLS0tIGEvYXBwcy9HZXN0dXJlQnVpbGRlci9yZXMvbGF5b3V0L2dlc3R1cmVzX2l0ZW0ueG1sCisrKyBiL2FwcHMvR2VzdHVyZUJ1aWxkZXIvcmVzL2xheW91dC9nZXN0dXJlc19pdGVtLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RleHQxIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCmRpZmYgLS1naXQgYS9hcHBzL0dlc3R1cmVCdWlsZGVyL3Jlcy9sYXlvdXQvZ2VzdHVyZXNfbGlzdC54bWwgYi9hcHBzL0dlc3R1cmVCdWlsZGVyL3Jlcy9sYXlvdXQvZ2VzdHVyZXNfbGlzdC54bWwKaW5kZXggN2U1Yjk0YS4uZDBiNWUzZCAxMDA2NDQKLS0tIGEvYXBwcy9HZXN0dXJlQnVpbGRlci9yZXMvbGF5b3V0L2dlc3R1cmVzX2xpc3QueG1sCisrKyBiL2FwcHMvR2VzdHVyZUJ1aWxkZXIvcmVzL2xheW91dC9nZXN0dXJlc19saXN0LnhtbApAQCAtMTYsMjEgKzE2LDIxIEBACiA8TGluZWFyTGF5b3V0CiAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKIAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDxMaXN0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgogCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEuMCIgLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9lbXB0eSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMS4wIgogCkBAIC00Miw3ICs0Miw3IEBACiAgICAgPExpbmVhckxheW91dAogICAgICAgICBzdHlsZT0iQGFuZHJvaWQ6c3R5bGUvQnV0dG9uQmFyIgogCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CmRpZmYgLS1naXQgYS9hcHBzL0dyYXBoaWNzTGFiL0FuZHJvaWQubWsgYi9hcHBzL0dyYXBoaWNzTGFiL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZDExNAotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvR3JhcGhpY3NMYWIvQW5kcm9pZC5tawpAQCAtMCwwICsxLDEwIEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cworCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IEdyYXBoaWNzTGFiCisKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvYXBwcy9HcmFwaGljc0xhYi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvYXBwcy9HcmFwaGljc0xhYi9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MWM0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0dyYXBoaWNzTGFiL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwxMSBAQAorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgcGFja2FnZT0iY29tLmFuZHJvaWQuZ3JhcGhpY3NsYWIiPgorICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcyBMYWIiPgorCQk8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJHcmFwaGljc0xhYiI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuREVGQVVMVCIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5URVNUIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorCQk8L2FjdGl2aXR5PgorICAgIDwvYXBwbGljYXRpb24+Cis8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvYXBwcy9HcmFwaGljc0xhYi9NT0RVTEVfTElDRU5TRV9BUEFDSEUyIGIvYXBwcy9HcmFwaGljc0xhYi9NT0RVTEVfTElDRU5TRV9BUEFDSEUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0dyYXBoaWNzTGFiL01PRFVMRV9MSUNFTlNFX0FQQUNIRTIKZGlmZiAtLWdpdCBhL2FwcHMvR3JhcGhpY3NMYWIvTk9USUNFIGIvYXBwcy9HcmFwaGljc0xhYi9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViMWVmYQotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvR3JhcGhpY3NMYWIvTk9USUNFCkBAIC0wLDAgKzEsMTkwIEBACisKKyAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwpkaWZmIC0tZ2l0IGEvYXBwcy9HcmFwaGljc0xhYi9yZXMvZHJhd2FibGUvYmVhY2guanBnIGIvYXBwcy9HcmFwaGljc0xhYi9yZXMvZHJhd2FibGUvYmVhY2guanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOTc5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0dyYXBoaWNzTGFiL3Jlcy9kcmF3YWJsZS9iZWFjaC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwcy9HcmFwaGljc0xhYi9yZXMvZHJhd2FibGUvbmV3c19pbWcuanBnIGIvYXBwcy9HcmFwaGljc0xhYi9yZXMvZHJhd2FibGUvbmV3c19pbWcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTVlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0dyYXBoaWNzTGFiL3Jlcy9kcmF3YWJsZS9uZXdzX2ltZy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwcy9HcmFwaGljc0xhYi9yZXMvbGF5b3V0L2dyYXBoaWNzX2xhYi54bWwgYi9hcHBzL0dyYXBoaWNzTGFiL3Jlcy9sYXlvdXQvZ3JhcGhpY3NfbGFiLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBlNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9HcmFwaGljc0xhYi9yZXMvbGF5b3V0L2dyYXBoaWNzX2xhYi54bWwKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI0ZGlwIiBhbmRyb2lkOnBhZGRpbmdSaWdodD0iNGRpcCIKKyAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjRkaXAiIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCI+ICAgICAgICAKKzwvTGluZWFyTGF5b3V0PgorCisKZGlmZiAtLWdpdCBhL2FwcHMvR3JhcGhpY3NMYWIvc3JjL2NvbS9hbmRyb2lkL2dyYXBoaWNzbGFiL0dyYXBoaWNzTGFiLmphdmEgYi9hcHBzL0dyYXBoaWNzTGFiL3NyYy9jb20vYW5kcm9pZC9ncmFwaGljc2xhYi9HcmFwaGljc0xhYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWFjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0dyYXBoaWNzTGFiL3NyYy9jb20vYW5kcm9pZC9ncmFwaGljc2xhYi9HcmFwaGljc0xhYi5qYXZhCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5ncmFwaGljc2xhYjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLio7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy51dGlscy4qOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC52aWV3Lio7CisKK3B1YmxpYyBjbGFzcyBHcmFwaGljc0xhYiBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwdWJsaWMgR3JhcGhpY3NMYWIoKSB7fQorCisgICAgcHJpdmF0ZSBpbnQgbUN1cnJWaWV3ID0gMTsKKworICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcobmV3IFNhbXBsZVZpZXcodGhpcykpOworLy8gICAgICAgIHNldFRpdGxlKCJHcmFwaGljcyBMYWIiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbktleURvd24oaW50IGtleUNvZGUsIEtleUV2ZW50IGV2ZW50KSB7CisgICAgICAgIHN3aXRjaChrZXlDb2RlKSB7CisgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfRFBBRF9DRU5URVI6CisgICAgICAgICAgICAgICAgaWYgKG1DdXJyVmlldyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnRlbnRWaWV3KG5ldyBTYW1wbGVWaWV3Mih0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgIG1DdXJyVmlldyA9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q29udGVudFZpZXcobmV3IFNhbXBsZVZpZXcodGhpcykpOworICAgICAgICAgICAgICAgICAgICBtQ3VyclZpZXcgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIub25LZXlEb3duKGtleUNvZGUsIGV2ZW50KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTYW1wbGVWaWV3MiBleHRlbmRzIFZpZXcgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUk9XUyA9IDE2OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09MUyA9IDE2OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5TVFJFVENIX01TRUMgPSAyNTA7CisgICAgICAgIAorICAgICAgICBwcml2YXRlIEludGVycG9sYXRvciBtSW50ZXJwOworICAgICAgICBwcml2YXRlIEJvdW5kYXJ5UGF0Y2ggbVBhdGNoOworICAgICAgICBwcml2YXRlIGZsb2F0W10gbUN1YmljczsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdFtdIG1PcmlnID0gbmV3IGZsb2F0WzI0XTsKKyAgICAgICAgcHJpdmF0ZSBQYWludCBtUGFpbnQwOworICAgICAgICBwcml2YXRlIFBhaW50IG1QYWludDE7CisgICAgICAgIHByaXZhdGUgaW50IG1DdXJySW5kZXggPSAtMTsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtUHJldlg7CisgICAgICAgIHByaXZhdGUgZmxvYXQgbVByZXZZOworICAgICAgICAKKyAgICAgICAgcHVibGljIFNhbXBsZVZpZXcyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgICAgICBzZXRGb2N1c2FibGUodHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJpdG1hcCBibSA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UoZ2V0UmVzb3VyY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuZHJhd2FibGUubmV3c19pbWcpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtUGF0Y2ggPSBuZXcgQm91bmRhcnlQYXRjaCgpOworICAgICAgICAgICAgbVBhdGNoLnNldFRleHR1cmUoYm0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBmbG9hdCB1bml0ID0gOTA7CisgICAgICAgICAgICBtQ3ViaWNzID0gbmV3IGZsb2F0W10geworICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsIDIsIDAsCisgICAgICAgICAgICAgICAgMywgMCwgMywgMSwgMywgMiwKKyAgICAgICAgICAgICAgICAzLCAzLCAyLCAzLCAxLCAzLAorICAgICAgICAgICAgICAgIDAsIDMsIDAsIDIsIDAsIDEKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBtQ3ViaWNzW2ldICo9IDkwOworICAgICAgICAgICAgICAgIG1DdWJpY3NbaV0gKz0gMjA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWJ1aWxkUGF0Y2goKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbVBhaW50MCA9IG5ldyBQYWludCgpOworICAgICAgICAgICAgbVBhaW50MC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgICAgICBtUGFpbnQwLnNldFN0cm9rZVdpZHRoKDEyKTsKKyAgICAgICAgICAgIG1QYWludDAuc2V0U3Ryb2tlQ2FwKFBhaW50LkNhcC5ST1VORCk7CisgICAgICAgICAgICBtUGFpbnQxID0gbmV3IFBhaW50KG1QYWludDApOworICAgICAgICAgICAgbVBhaW50MS5zZXRDb2xvcigweEZGRkZGRkZGKTsKKyAgICAgICAgICAgIG1QYWludDEuc2V0U3Ryb2tlV2lkdGgoMTApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25TaXplQ2hhbmdlZChpbnQgbncsIGludCBuaCwgaW50IG93LCBpbnQgb2gpIHsKKyAgICAgICAgICAgIGZsb2F0W10gcHRzID0gbUN1YmljczsKKyAgICAgICAgICAgIGZsb2F0IHgxID0gbncqMC4zMzMzZjsKKyAgICAgICAgICAgIGZsb2F0IHkxID0gbmgqMC4zMzMzZjsKKyAgICAgICAgICAgIGZsb2F0IHgyID0gbncqMC42NjY3ZjsKKyAgICAgICAgICAgIGZsb2F0IHkyID0gbmgqMC42NjY3ZjsKKyAgICAgICAgICAgIHB0c1swKjIrMF0gPSAwOyAgcHRzWzAqMisxXSA9IDA7CisgICAgICAgICAgICBwdHNbMSoyKzBdID0geDE7IHB0c1sxKjIrMV0gPSAwOworICAgICAgICAgICAgcHRzWzIqMiswXSA9IHgyOyBwdHNbMioyKzFdID0gMDsKKworICAgICAgICAgICAgcHRzWzMqMiswXSA9IG53OyBwdHNbMyoyKzFdID0gMDsKKyAgICAgICAgICAgIHB0c1s0KjIrMF0gPSBudzsgcHRzWzQqMisxXSA9IHkxOworICAgICAgICAgICAgcHRzWzUqMiswXSA9IG53OyBwdHNbNSoyKzFdID0geTI7CisKKyAgICAgICAgICAgIHB0c1s2KjIrMF0gPSBudzsgcHRzWzYqMisxXSA9IG5oOworICAgICAgICAgICAgcHRzWzcqMiswXSA9IHgyOyBwdHNbNyoyKzFdID0gbmg7CisgICAgICAgICAgICBwdHNbOCoyKzBdID0geDE7IHB0c1s4KjIrMV0gPSBuaDsKKworICAgICAgICAgICAgcHRzWzkqMiswXSA9IDA7ICBwdHNbOSoyKzFdID0gbmg7CisgICAgICAgICAgICBwdHNbMTAqMiswXSA9IDA7IHB0c1sxMCoyKzFdID0geTI7CisgICAgICAgICAgICBwdHNbMTEqMiswXSA9IDA7IHB0c1sxMSoyKzFdID0geTE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkocHRzLCAwLCBtT3JpZywgMCwgMjQpOworICAgICAgICAgICAgcmVidWlsZFBhdGNoKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgIGlmIChtSW50ZXJwICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpbnQgbm93ID0gKGludClTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgICAgICBJbnRlcnBvbGF0b3IuUmVzdWx0IHJlc3VsdCA9IG1JbnRlcnAudGltZVRvVmFsdWVzKG5vdywgbUN1Ymljcyk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnRlcnBvbGF0b3IuUmVzdWx0Lk5PUk1BTCkgeworICAgICAgICAgICAgICAgICAgICBtSW50ZXJwID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlYnVpbGRQYXRjaCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVBhdGNoLmRyYXcoY2FudmFzKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCByZWJ1aWxkUGF0Y2goKSB7CisgICAgICAgICAgICBtUGF0Y2guc2V0Q3ViaWNCb3VuZGFyeShtQ3ViaWNzLCAwLCBST1dTLCBDT0xTKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgICAgIGZsb2F0IHggPSBldmVudC5nZXRYKCk7CisgICAgICAgICAgICBmbG9hdCB5ID0gZXZlbnQuZ2V0WSgpOworICAgICAgICAgICAgc3dpdGNoIChldmVudC5nZXRBY3Rpb24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0RPV046CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobU9yaWcsIDAsIG1DdWJpY3MsIDAsIDI0KTsKKyAgICAgICAgICAgICAgICAgICAgbVByZXZYID0geDsKKyAgICAgICAgICAgICAgICAgICAgbVByZXZZID0geTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRTogeworICAgICAgICAgICAgICAgICAgICBmbG9hdCBzY2FsZSA9IDEuNWY7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGR4ID0gKHggLSBtUHJldlgpICogc2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGR5ID0gKHkgLSBtUHJldlkpICogc2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGludCBpbmRleDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZHggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDEwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1DdWJpY3NbaW5kZXgqMiArIDBdID0gbU9yaWdbaW5kZXgqMiArIDBdICsgZHg7CisgICAgICAgICAgICAgICAgICAgIG1DdWJpY3NbaW5kZXgqMiArIDJdID0gbU9yaWdbaW5kZXgqMiArIDJdICsgZHg7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZHkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbUN1Ymljc1tpbmRleCoyICsgMV0gPSBtT3JpZ1tpbmRleCoyICsgMV0gKyBkeTsKKyAgICAgICAgICAgICAgICAgICAgbUN1Ymljc1tpbmRleCoyICsgM10gPSBtT3JpZ1tpbmRleCoyICsgM10gKyBkeTsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlYnVpbGRQYXRjaCgpOworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9DQU5DRUw6IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gKGludClTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgICAgICAgICAgbUludGVycCA9IG5ldyBJbnRlcnBvbGF0b3IoMjQpOworICAgICAgICAgICAgICAgICAgICBtSW50ZXJwLnNldEtleUZyYW1lKDAsIHN0YXJ0LCBtQ3ViaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBmbG9hdFtdIHsgMCwgMC41ZiwgMC41ZiwgMSB9KTsKKyAgICAgICAgICAgICAgICAgICAgbUludGVycC5zZXRLZXlGcmFtZSgxLCBzdGFydCArIFVOU1RSRVRDSF9NU0VDLCBtT3JpZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTYW1wbGVWaWV3IGV4dGVuZHMgVmlldyB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBST1dTID0gMTY7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xTID0gMTY7CisgICAgICAgIAorICAgICAgICBwcml2YXRlIEJvdW5kYXJ5UGF0Y2ggbVBhdGNoOworICAgICAgICBwcml2YXRlIGZsb2F0W10gbUN1YmljczsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdFtdIG1PcmlnID0gbmV3IGZsb2F0WzI0XTsKKyAgICAgICAgcHJpdmF0ZSBQYWludCBtUGFpbnQwOworICAgICAgICBwcml2YXRlIFBhaW50IG1QYWludDE7CisgICAgICAgIHByaXZhdGUgaW50IG1DdXJySW5kZXggPSAtMTsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtUHJldlg7CisgICAgICAgIHByaXZhdGUgZmxvYXQgbVByZXZZOworICAgICAgICAKKyAgICAgICAgcHVibGljIFNhbXBsZVZpZXcoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICBzZXRGb2N1c2FibGUodHJ1ZSk7CisgICAgICAgIAorICAgICAgICBCaXRtYXAgYm0gPSBCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKGdldFJlc291cmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuZHJhd2FibGUuYmVhY2gpOworICAgICAgICAKKyAgICAgICAgbVBhdGNoID0gbmV3IEJvdW5kYXJ5UGF0Y2goKTsKKyAgICAgICAgbVBhdGNoLnNldFRleHR1cmUoYm0pOworICAgICAgICAKKyAgICAgICAgZmxvYXQgdW5pdCA9IDkwOworICAgICAgICBtQ3ViaWNzID0gbmV3IGZsb2F0W10geworICAgICAgICAgICAgMCwgMCwgMSwgMCwgMiwgMCwKKyAgICAgICAgICAgIDMsIDAsIDMsIDEsIDMsIDIsCisgICAgICAgICAgICAzLCAzLCAyLCAzLCAxLCAzLAorICAgICAgICAgICAgMCwgMywgMCwgMiwgMCwgMQorICAgICAgICB9OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI0OyBpKyspIHsKKyAgICAgICAgICAgIG1DdWJpY3NbaV0gKj0gOTA7CisgICAgICAgICAgICBtQ3ViaWNzW2ldICs9IDIwOworICAgICAgICB9CisgICAgICAgIHJlYnVpbGRQYXRjaCgpOworICAgICAgICAKKyAgICAgICAgbVBhaW50MCA9IG5ldyBQYWludCgpOworICAgICAgICBtUGFpbnQwLnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbVBhaW50MC5zZXRTdHJva2VXaWR0aCgxMik7CisgICAgICAgIG1QYWludDAuc2V0U3Ryb2tlQ2FwKFBhaW50LkNhcC5ST1VORCk7CisgICAgICAgIG1QYWludDEgPSBuZXcgUGFpbnQobVBhaW50MCk7CisgICAgICAgIG1QYWludDEuc2V0Q29sb3IoMHhGRkZGRkZGRik7CisgICAgICAgIG1QYWludDEuc2V0U3Ryb2tlV2lkdGgoMTApOworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgY2FudmFzLmRyYXdDb2xvcigweEZGQ0NDQ0NDKTsKKyAgICAgICAgbVBhdGNoLmRyYXcoY2FudmFzKTsKKyAgICAgICAgY2FudmFzLmRyYXdQb2ludHMobUN1YmljcywgbVBhaW50MCk7CisgICAgICAgIGNhbnZhcy5kcmF3UG9pbnRzKG1DdWJpY3MsIG1QYWludDEpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcmVidWlsZFBhdGNoKCkgeworICAgICAgICBtUGF0Y2guc2V0Q3ViaWNCb3VuZGFyeShtQ3ViaWNzLCAwLCBST1dTLCBDT0xTKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBpbnQgZmluZFB0SW5kZXgoZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICBmaW5hbCBmbG9hdCB0b2xlcmFuY2UgPSAyNTsKKyAgICAgICAgZmluYWwgZmxvYXRbXSBwdHMgPSBtQ3ViaWNzOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IChwdHMubGVuZ3RoID4+IDEpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhwdHNbaSoyICsgMF0gLSB4KSA8PSB0b2xlcmFuY2UgJiYKKyAgICAgICAgICAgICAgICBNYXRoLmFicyhwdHNbaSoyICsgMV0gLSB5KSA8PSB0b2xlcmFuY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaSoyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIG9mZnNldFB0cyhmbG9hdCBkeCwgZmxvYXQgZHkpIHsKKyAgICAgICAgZmluYWwgZmxvYXRbXSBwdHMgPSBtQ3ViaWNzOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IChwdHMubGVuZ3RoID4+IDEpOyBpKyspIHsKKyAgICAgICAgICAgIHB0c1tpKjIgKyAwXSArPSBkeDsKKyAgICAgICAgICAgIHB0c1tpKjIgKyAxXSArPSBkeTsKKyAgICAgICAgfQorICAgICAgICByZWJ1aWxkUGF0Y2goKTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlIHB1YmxpYyBib29sZWFuIG9uVG91Y2hFdmVudChNb3Rpb25FdmVudCBldmVudCkgeworICAgICAgICBmbG9hdCB4ID0gZXZlbnQuZ2V0WCgpOworICAgICAgICBmbG9hdCB5ID0gZXZlbnQuZ2V0WSgpOworICAgICAgICBzd2l0Y2ggKGV2ZW50LmdldEFjdGlvbigpKSB7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOOgorICAgICAgICAgICAgICAgIG1DdXJySW5kZXggPSBmaW5kUHRJbmRleCh4LCB5KTsKKyAgICAgICAgICAgICAgICBtUHJldlggPSB4OworICAgICAgICAgICAgICAgIG1QcmV2WSA9IHk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFOgorICAgICAgICAgICAgICAgIGlmIChtQ3VyckluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbUN1Ymljc1ttQ3VyckluZGV4ICsgMF0gPSB4OworICAgICAgICAgICAgICAgICAgICBtQ3ViaWNzW21DdXJySW5kZXggKyAxXSA9IHk7CisgICAgICAgICAgICAgICAgICAgIG1QYXRjaC5zZXRDdWJpY0JvdW5kYXJ5KG1DdWJpY3MsIDAsIFJPV1MsIENPTFMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldFB0cyh4IC0gbVByZXZYLCB5IC0gbVByZXZZKTsKKyAgICAgICAgICAgICAgICAgICAgbVByZXZYID0geDsKKyAgICAgICAgICAgICAgICAgICAgbVByZXZZID0geTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KK30KKwpkaWZmIC0tZ2l0IGEvYXBwcy9TZGtTZXR1cC9BbmRyb2lkLm1rIGIvYXBwcy9TZGtTZXR1cC9BbmRyb2lkLm1rCmluZGV4IDc2NDdmMTUuLmYyZmFjZTEgMTAwNjQ0Ci0tLSBhL2FwcHMvU2RrU2V0dXAvQW5kcm9pZC5taworKysgYi9hcHBzL1Nka1NldHVwL0FuZHJvaWQubWsKQEAgLTEsNiArMSw4IEBACiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCiBMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKIAogTE9DQUxfUEFDS0FHRV9OQU1FIDo9IFNka1NldHVwCmRpZmYgLS1naXQgYS9hcHBzL1NwYXJlUGFydHMvcmVzL2xheW91dC9zcGFyZV9wYXJ0cy54bWwgYi9hcHBzL1NwYXJlUGFydHMvcmVzL2xheW91dC9zcGFyZV9wYXJ0cy54bWwKaW5kZXggZjM5Mjk4Yi4uYzFjZDNjOCAxMDA2NDQKLS0tIGEvYXBwcy9TcGFyZVBhcnRzL3Jlcy9sYXlvdXQvc3BhcmVfcGFydHMueG1sCisrKyBiL2FwcHMvU3BhcmVQYXJ0cy9yZXMvbGF5b3V0L3NwYXJlX3BhcnRzLnhtbApAQCAtMTgsMzMgKzE4LDI2IEBACiAqLwogLS0+CiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFJlbGF0aXZlTGF5b3V0IAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICAgICAgPFNwaW5uZXIgYW5kcm9pZDppZD0iQCtpZC93aW5kb3dfYW5pbWF0aW9uX3NjYWxlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRMZWZ0PSJ0cnVlIj4KICAgICAgICAgPC9TcGlubmVyPgogCiAgICAgICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvdHJhbnNpdGlvbl9hbmltYXRpb25fc2NhbGUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3dpbmRvd19hbmltYXRpb25fc2NhbGUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiPgogICAgICAgICA8L1NwaW5uZXI+CiAKLSAgICAgICAgPENoZWNrQm94IGFuZHJvaWQ6aWQ9IkAraWQvc2hvd19tYXBzX2NvbXBhc3MiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQCtpZC90cmFuc2l0aW9uX2FuaW1hdGlvbl9zY2FsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9kZXZlbG9wbWVudF9zZXR0aW5nc19zaG93X21hcHNfY29tcGFzc190ZXh0IiAvPgotICAgICAgICAgICAgCiAgICAgPC9SZWxhdGl2ZUxheW91dD4KIAogPC9TY3JvbGxWaWV3PgpkaWZmIC0tZ2l0IGEvYXBwcy9TcGFyZVBhcnRzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi9hcHBzL1NwYXJlUGFydHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCBjZDEyZmIzLi5lMTU3NzMwIDEwMDY0NAotLS0gYS9hcHBzL1NwYXJlUGFydHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9hcHBzL1NwYXJlUGFydHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtNTksMTIgKzU5LDYgQEAKICAgICAKICAgICA8c3RyaW5nIG5hbWU9ImFwcGxpY2F0aW9uc190aXRsZSI+QXBwbGljYXRpb25zPC9zdHJpbmc+CiAgICAgCi0gICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9tYXBzX2NvbXBhc3MiPlNob3cgY29tcGFzcyBpbiBNYXBzPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdW1tYXJ5X29uX21hcHNfY29tcGFzcyI+Q29tcGFzcyBpcyBkaXNwbGF5ZWQgaW4gTWFwczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3VtbWFyeV9vZmZfbWFwc19jb21wYXNzIj5Db21wYXNzIGlzIG5vdCBkaXNwbGF5ZWQgaW4gTWFwczwvc3RyaW5nPgotICAgIAotICAgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcG1lbnRfc2V0dGluZ3Nfc2hvd19tYXBzX2NvbXBhc3NfdGV4dCI+U2hvdyBjb21wYXNzIGluIE1hcHM8L3N0cmluZz4KLQogICAgIDwhLS0gU291bmQgJiBkaXNwbGF5IHNldHRpbmdzIHNjcmVlbiwgY29tcGF0aWJpbGl0eSBtb2RlIGNoZWNrIGJveCBsYWJlbCAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdGliaWxpdHlfbW9kZV90aXRsZSI+Q29tcGF0aWJpbGl0eSBNb2RlPC9zdHJpbmc+CiAgICAgPCEtLSBTb3VuZCAmIGRpc3BsYXkgc2V0dGluZ3Mgc2NyZWVuLCBjb21wYXRpYmlsaXR5IG1vZGUgb3B0aW9uIHN1bW1hcnkgdGV4dCB3aGVuIGNoZWNrIGJveCBpcyBzZWxlY3RlZCAtLT4KZGlmZiAtLWdpdCBhL2FwcHMvU3BhcmVQYXJ0cy9yZXMveG1sL3NwYXJlX3BhcnRzLnhtbCBiL2FwcHMvU3BhcmVQYXJ0cy9yZXMveG1sL3NwYXJlX3BhcnRzLnhtbAppbmRleCBjYmMzODY0Li41MjQwOTJlIDEwMDY0NAotLS0gYS9hcHBzL1NwYXJlUGFydHMvcmVzL3htbC9zcGFyZV9wYXJ0cy54bWwKKysrIGIvYXBwcy9TcGFyZVBhcnRzL3Jlcy94bWwvc3BhcmVfcGFydHMueG1sCkBAIC0xMDEsMTYgKzEwMSw1IEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDpzdW1tYXJ5T249IkBzdHJpbmcvY29tcGF0aWJpbGl0eV9tb2RlX3N1bW1hcnlfb24iCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpzdW1tYXJ5T2ZmPSJAc3RyaW5nL2NvbXBhdGliaWxpdHlfbW9kZV9zdW1tYXJ5X29mZiIgLz4KICAgICA8L1ByZWZlcmVuY2VDYXRlZ29yeT4KLSAgICAgICAgICAgIAotICAgIDxQcmVmZXJlbmNlQ2F0ZWdvcnkKLSAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9hcHBsaWNhdGlvbnNfdGl0bGUiPgotICAgICAgICAgICAgICAgIAotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlIAotICAgICAgICAgICAgYW5kcm9pZDprZXk9Im1hcHNfY29tcGFzcyIgCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3RpdGxlX21hcHNfY29tcGFzcyIgCi0gICAgICAgICAgICBhbmRyb2lkOnN1bW1hcnlPbj0iQHN0cmluZy9zdW1tYXJ5X29uX21hcHNfY29tcGFzcyIKLSAgICAgICAgICAgIGFuZHJvaWQ6c3VtbWFyeU9mZj0iQHN0cmluZy9zdW1tYXJ5X29mZl9tYXBzX2NvbXBhc3MiLz4KLSAgICAgICAgCi0gICAgPC9QcmVmZXJlbmNlQ2F0ZWdvcnk+Ci0gICAgICAgIAorCiA8L1ByZWZlcmVuY2VTY3JlZW4+CmRpZmYgLS1naXQgYS9hcHBzL1NwYXJlUGFydHMvc3JjL2NvbS9hbmRyb2lkL3NwYXJlX3BhcnRzL1NwYXJlUGFydHMuamF2YSBiL2FwcHMvU3BhcmVQYXJ0cy9zcmMvY29tL2FuZHJvaWQvc3BhcmVfcGFydHMvU3BhcmVQYXJ0cy5qYXZhCmluZGV4IDc3MDIyYWQuLjA5OWYyN2EgMTAwNjQ0Ci0tLSBhL2FwcHMvU3BhcmVQYXJ0cy9zcmMvY29tL2FuZHJvaWQvc3BhcmVfcGFydHMvU3BhcmVQYXJ0cy5qYXZhCisrKyBiL2FwcHMvU3BhcmVQYXJ0cy9zcmMvY29tL2FuZHJvaWQvc3BhcmVfcGFydHMvU3BhcmVQYXJ0cy5qYXZhCkBAIC01Nyw3ICs1Nyw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhBUFRJQ19GRUVEQkFDS19QUkVGID0gImhhcHRpY19mZWVkYmFjayI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZPTlRfU0laRV9QUkVGID0gImZvbnRfc2l6ZSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVORF9CVVRUT05fUFJFRiA9ICJlbmRfYnV0dG9uIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQU19DT01QQVNTX1BSRUYgPSAibWFwc19jb21wYXNzIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0NPTVBBVElCSUxJVFlfTU9ERSA9ICJjb21wYXRpYmlsaXR5X21vZGUiOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBDb25maWd1cmF0aW9uIG1DdXJDb25maWcgPSBuZXcgQ29uZmlndXJhdGlvbigpOwpAQCAtNjgsNyArNjcsNiBAQAogICAgIHByaXZhdGUgQ2hlY2tCb3hQcmVmZXJlbmNlIG1IYXB0aWNGZWVkYmFja1ByZWY7CiAgICAgcHJpdmF0ZSBMaXN0UHJlZmVyZW5jZSBtRm9udFNpemVQcmVmOwogICAgIHByaXZhdGUgTGlzdFByZWZlcmVuY2UgbUVuZEJ1dHRvblByZWY7Ci0gICAgcHJpdmF0ZSBDaGVja0JveFByZWZlcmVuY2UgbVNob3dNYXBzQ29tcGFzc1ByZWY7CiAgICAgcHJpdmF0ZSBDaGVja0JveFByZWZlcmVuY2UgbUNvbXBhdGliaWxpdHlNb2RlOwogCiAgICAgcHJpdmF0ZSBJV2luZG93TWFuYWdlciBtV2luZG93TWFuYWdlcjsKQEAgLTEyNSw3ICsxMjMsNiBAQAogICAgICAgICBtRm9udFNpemVQcmVmLnNldE9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKHRoaXMpOwogICAgICAgICBtRW5kQnV0dG9uUHJlZiA9IChMaXN0UHJlZmVyZW5jZSkgcHJlZlNldC5maW5kUHJlZmVyZW5jZShFTkRfQlVUVE9OX1BSRUYpOwogICAgICAgICBtRW5kQnV0dG9uUHJlZi5zZXRPblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgbVNob3dNYXBzQ29tcGFzc1ByZWYgPSAoQ2hlY2tCb3hQcmVmZXJlbmNlKSBwcmVmU2V0LmZpbmRQcmVmZXJlbmNlKE1BUFNfQ09NUEFTU19QUkVGKTsKICAgICAgICAgbUNvbXBhdGliaWxpdHlNb2RlID0gKENoZWNrQm94UHJlZmVyZW5jZSkgZmluZFByZWZlcmVuY2UoS0VZX0NPTVBBVElCSUxJVFlfTU9ERSk7CiAgICAgICAgIG1Db21wYXRpYmlsaXR5TW9kZS5zZXRQZXJzaXN0ZW50KGZhbHNlKTsKICAgICAgICAgbUNvbXBhdGliaWxpdHlNb2RlLnNldENoZWNrZWQoU2V0dGluZ3MuU3lzdGVtLmdldEludChnZXRDb250ZW50UmVzb2x2ZXIoKSwKQEAgLTE0NSwyMCArMTQyLDEyIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRvZ2dsZXMoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtRmFuY3lJbWVBbmltYXRpb25zUHJlZi5zZXRDaGVja2VkKFNldHRpbmdzLlN5c3RlbS5nZXRJbnQoCi0gICAgICAgICAgICAgICAgICAgIGdldENvbnRlbnRSZXNvbHZlcigpLCAKLSAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLkZBTkNZX0lNRV9BTklNQVRJT05TLCAwKSAhPSAwKTsKLSAgICAgICAgICAgIG1IYXB0aWNGZWVkYmFja1ByZWYuc2V0Q2hlY2tlZChTZXR0aW5ncy5TeXN0ZW0uZ2V0SW50KAotICAgICAgICAgICAgICAgICAgICBnZXRDb250ZW50UmVzb2x2ZXIoKSwgCi0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5IQVBUSUNfRkVFREJBQ0tfRU5BQkxFRCwgMCkgIT0gMCk7Ci0gICAgICAgICAgICBDb250ZXh0IGMgPSBjcmVhdGVQYWNrYWdlQ29udGV4dCgiY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMubWFwcyIsIDApOwotICAgICAgICAgICAgbVNob3dNYXBzQ29tcGFzc1ByZWYuc2V0Q2hlY2tlZChjLmdldFNoYXJlZFByZWZlcmVuY2VzKCJleHRyYS1mZWF0dXJlcyIsIE1PREVfV09STERfUkVBREFCTEUpCi0gICAgICAgICAgICAgICAgLmdldEJvb2xlYW4oImNvbXBhc3MiLCBmYWxzZSkpOwotICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHJlYWRpbmcgbWFwcyBjb21wYXNzIik7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9CisgICAgICAgIG1GYW5jeUltZUFuaW1hdGlvbnNQcmVmLnNldENoZWNrZWQoU2V0dGluZ3MuU3lzdGVtLmdldEludCgKKyAgICAgICAgICAgICAgICBnZXRDb250ZW50UmVzb2x2ZXIoKSwgCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLkZBTkNZX0lNRV9BTklNQVRJT05TLCAwKSAhPSAwKTsKKyAgICAgICAgbUhhcHRpY0ZlZWRiYWNrUHJlZi5zZXRDaGVja2VkKFNldHRpbmdzLlN5c3RlbS5nZXRJbnQoCisgICAgICAgICAgICAgICAgZ2V0Q29udGVudFJlc29sdmVyKCksIAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5IQVBUSUNfRkVFREJBQ0tfRU5BQkxFRCwgMCkgIT0gMCk7CiAgICAgfQogICAgIAogICAgIHB1YmxpYyBib29sZWFuIG9uUHJlZmVyZW5jZUNoYW5nZShQcmVmZXJlbmNlIHByZWZlcmVuY2UsIE9iamVjdCBvYmpWYWx1ZSkgewpAQCAtMjYxLDE3ICsyNTAsNiBAQAogICAgICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLnB1dEludChnZXRDb250ZW50UmVzb2x2ZXIoKSwKICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLkhBUFRJQ19GRUVEQkFDS19FTkFCTEVELAogICAgICAgICAgICAgICAgICAgICBtSGFwdGljRmVlZGJhY2tQcmVmLmlzQ2hlY2tlZCgpID8gMSA6IDApOwotICAgICAgICB9IGVsc2UgaWYgKE1BUFNfQ09NUEFTU19QUkVGLmVxdWFscyhrZXkpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIENvbnRleHQgYyA9IGNyZWF0ZVBhY2thZ2VDb250ZXh0KCJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzIiwgMCk7Ci0gICAgICAgICAgICAgICAgYy5nZXRTaGFyZWRQcmVmZXJlbmNlcygiZXh0cmEtZmVhdHVyZXMiLCBNT0RFX1dPUkxEX1dSSVRFQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgLmVkaXQoKQotICAgICAgICAgICAgICAgICAgICAucHV0Qm9vbGVhbigiY29tcGFzcyIsIG1TaG93TWFwc0NvbXBhc3NQcmVmLmlzQ2hlY2tlZCgpKQotICAgICAgICAgICAgICAgICAgICAuY29tbWl0KCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCBzZXR0aW5nIG1hcHMgY29tcGFzcyIpOwotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9hcHBzL1Rlcm0vcmVzL2xheW91dC90ZXJtX2FjdGl2aXR5LnhtbCBiL2FwcHMvVGVybS9yZXMvbGF5b3V0L3Rlcm1fYWN0aXZpdHkueG1sCmluZGV4IDdkOTNkMTYuLjZjZTc3MTkgMTAwNjQ0Ci0tLSBhL2FwcHMvVGVybS9yZXMvbGF5b3V0L3Rlcm1fYWN0aXZpdHkueG1sCisrKyBiL2FwcHMvVGVybS9yZXMvbGF5b3V0L3Rlcm1fYWN0aXZpdHkueG1sCkBAIC0xNyw4ICsxNyw4IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDxjb20uYW5kcm9pZC50ZXJtLkVtdWxhdG9yVmlldyBhbmRyb2lkOmlkPSJAK2lkL2VtdWxhdG9yVmlldyIKZGlmZiAtLWdpdCBhL2FwcHMvVGVybS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvYXBwcy9UZXJtL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggZTNmOGZjZi4uYjVkNjIyYiAxMDA2NDQKLS0tIGEvYXBwcy9UZXJtL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvYXBwcy9UZXJtL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgIDxzdHJpbmcgbmFtZT0idGV4dF9wcmVmZXJlbmNlcyI+VGV4dDwvc3RyaW5nPgogCiAgICA8c3RyaW5nIG5hbWU9InRpdGxlX2ZvbnRzaXplX3ByZWZlcmVuY2UiPkZvbnQgc2l6ZTwvc3RyaW5nPgotICAgPHN0cmluZyBuYW1lPSJzdW1tYXJ5X2ZvbnRzaXplX3ByZWZlcmVuY2UiPkNob29zZSBjaGFyYWN0ZXIgaGVpZ2h0IGluIHBpeGVscy48L3N0cmluZz4KKyAgIDxzdHJpbmcgbmFtZT0ic3VtbWFyeV9mb250c2l6ZV9wcmVmZXJlbmNlIj5DaG9vc2UgY2hhcmFjdGVyIGhlaWdodCBpbiBwb2ludHMuPC9zdHJpbmc+CiAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ190aXRsZV9mb250c2l6ZV9wcmVmZXJlbmNlIj5Gb250IHNpemU8L3N0cmluZz4KIAogICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9jb2xvcl9wcmVmZXJlbmNlIj5Db2xvcnM8L3N0cmluZz4KZGlmZiAtLWdpdCBhL2FwcHMvVGVybS9zcmMvY29tL2FuZHJvaWQvdGVybS9UZXJtLmphdmEgYi9hcHBzL1Rlcm0vc3JjL2NvbS9hbmRyb2lkL3Rlcm0vVGVybS5qYXZhCmluZGV4IDYwNDFiYWYuLmNiZjk0Y2YgMTAwNjQ0Ci0tLSBhL2FwcHMvVGVybS9zcmMvY29tL2FuZHJvaWQvdGVybS9UZXJtLmphdmEKKysrIGIvYXBwcy9UZXJtL3NyYy9jb20vYW5kcm9pZC90ZXJtL1Rlcm0uamF2YQpAQCAtNDUsNiArNDUsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR2VzdHVyZURldGVjdG9yOwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKQEAgLTE1OCwxNCArMTU5LDYgQEAKICAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKICAgICAgICAgTG9nLmUoVGVybS5MT0dfVEFHLCAib25DcmVhdGUiKTsKICAgICAgICAgbVByZWZzID0gUHJlZmVyZW5jZU1hbmFnZXIuZ2V0RGVmYXVsdFNoYXJlZFByZWZlcmVuY2VzKHRoaXMpOwotICAgICAgICBtUHJlZnMucmVnaXN0ZXJPblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcigKLSAgICAgICAgICAgICAgICBuZXcgU2hhcmVkUHJlZmVyZW5jZXMuT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIoKXsKLQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkUHJlZnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByZWZzKCk7Ci0gICAgICAgICAgICAgICAgICAgIH19KTsKICAgICAgICAgcmVhZFByZWZzKCk7CiAKICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQudGVybV9hY3Rpdml0eSk7CkBAIC0yMjcsNyArMjIwLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBzZW5kSW5pdGlhbENvbW1hbmQoKSB7CiAgICAgICAgIFN0cmluZyBpbml0aWFsQ29tbWFuZCA9IG1Jbml0aWFsQ29tbWFuZDsKLSAgICAgICAgaWYgKGluaXRpYWxDb21tYW5kID09IG51bGwpIHsKKyAgICAgICAgaWYgKGluaXRpYWxDb21tYW5kID09IG51bGwgfHwgaW5pdGlhbENvbW1hbmQuZXF1YWxzKCIiKSkgewogICAgICAgICAgICAgaW5pdGlhbENvbW1hbmQgPSBERUZBVUxUX0lOSVRJQUxfQ09NTUFORDsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdGlhbENvbW1hbmQubGVuZ3RoKCkgPiAwKSB7CkBAIC0yNTMsNyArMjQ2LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBjcmVhdGVTdWJwcm9jZXNzKGludFtdIHByb2Nlc3NJZCkgewogICAgICAgICBTdHJpbmcgc2hlbGwgPSBtU2hlbGw7Ci0gICAgICAgIGlmIChzaGVsbCA9PSBudWxsKSB7CisgICAgICAgIGlmIChzaGVsbCA9PSBudWxsIHx8IHNoZWxsLmVxdWFscygiIikpIHsKICAgICAgICAgICAgIHNoZWxsID0gREVGQVVMVF9TSEVMTDsKICAgICAgICAgfQogICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBhcmdzID0gcGFyc2Uoc2hlbGwpOwpAQCAtMzQ3LDcgKzM0MCw5IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVByZWZzKCkgewotICAgICAgICBtRW11bGF0b3JWaWV3LnNldFRleHRTaXplKG1Gb250U2l6ZSk7CisgICAgICAgIERpc3BsYXlNZXRyaWNzIG1ldHJpY3MgPSBuZXcgRGlzcGxheU1ldHJpY3MoKTsKKyAgICAgICAgZ2V0V2luZG93TWFuYWdlcigpLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0TWV0cmljcyhtZXRyaWNzKTsKKyAgICAgICAgbUVtdWxhdG9yVmlldy5zZXRUZXh0U2l6ZSgoaW50KSAobUZvbnRTaXplICogbWV0cmljcy5kZW5zaXR5KSk7CiAgICAgICAgIHNldENvbG9ycygpOwogICAgICAgICBtQ29udHJvbEtleUNvZGUgPSBDT05UUk9MX0tFWV9TQ0hFTUVTW21Db250cm9sS2V5SWRdOwogICAgIH0KQEAgLTM2OSwxNyArMzY0LDEwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25QYXVzZSgpIHsKLSAgICAgICAgU2hhcmVkUHJlZmVyZW5jZXMuRWRpdG9yIGUgPSBtUHJlZnMuZWRpdCgpOwotICAgICAgICBlLmNsZWFyKCk7Ci0gICAgICAgIGUucHV0U3RyaW5nKEZPTlRTSVpFX0tFWSwgSW50ZWdlci50b1N0cmluZyhtRm9udFNpemUpKTsKLSAgICAgICAgZS5wdXRTdHJpbmcoQ09MT1JfS0VZLCBJbnRlZ2VyLnRvU3RyaW5nKG1Db2xvcklkKSk7Ci0gICAgICAgIGUucHV0U3RyaW5nKENPTlRST0xLRVlfS0VZLCBJbnRlZ2VyLnRvU3RyaW5nKG1Db250cm9sS2V5SWQpKTsKLSAgICAgICAgZS5wdXRTdHJpbmcoU0hFTExfS0VZLCBtU2hlbGwpOwotICAgICAgICBlLnB1dFN0cmluZyhJTklUSUFMQ09NTUFORF9LRVksIG1Jbml0aWFsQ29tbWFuZCk7Ci0gICAgICAgIGUuY29tbWl0KCk7Ci0KLSAgICAgICAgc3VwZXIub25QYXVzZSgpOworICAgIHB1YmxpYyB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICByZWFkUHJlZnMoKTsKKyAgICAgICAgdXBkYXRlUHJlZnMoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHMvbGF1bmNocGVyZi9yZXMvbGF5b3V0L2NvbXBsZXhfbGF5b3V0LnhtbCBiL2FwcHMvbGF1bmNocGVyZi9yZXMvbGF5b3V0L2NvbXBsZXhfbGF5b3V0LnhtbAppbmRleCA0ZTU4NWI5Li4yOTFiMmZlIDEwMDY0NAotLS0gYS9hcHBzL2xhdW5jaHBlcmYvcmVzL2xheW91dC9jb21wbGV4X2xheW91dC54bWwKKysrIGIvYXBwcy9sYXVuY2hwZXJmL3Jlcy9sYXlvdXQvY29tcGxleF9sYXlvdXQueG1sCkBAIC0yMywzNiArMjMsMzYgQEAKICAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogPCEtLSAgICA8VGFiSG9zdAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjAwZGlwIj4KICAgICA8L1RhYkhvc3Q+CiAKICAgICA8R3JpZFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjIwMGRpcCIKICAgICAgICAgYW5kcm9pZDpudW1Db2x1bW5zPSI1Ij4KICAgICA8L0dyaWRWaWV3PiAtLT4KIAogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjIwMGRpcCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICAgICAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaGVhZGVyX2Fic29sdXRlIi8+CiAKICAgICAgICAgPEFic29sdXRlTGF5b3V0Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF94PSIwZGlwIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3k9IjBkaXAiCkBAIC0xNzUsMTIgKzE3NSwxMiBAQAogICAgICAgICA8L0Fic29sdXRlTGF5b3V0PgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2hlYWRlcl9yZWxhdGl2ZSIvPgogCiAgICAgICAgIDxSZWxhdGl2ZUxheW91dAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3JlbGF0aXZlX2J1dHRvbjEiCkBAIC0yMzgsMTcgKzIzOCwxNyBAQAogICAgICAgICA8L1JlbGF0aXZlTGF5b3V0PgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2hlYWRlcl9saW5lYXIiLz4KIAogICAgICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICAgICAgICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KIApAQCAtMjcyLDExICsyNzIsMTEgQEAKICAgICAgICAgICAgIDwvTGluZWFyTGF5b3V0PgogCiAgICAgICAgICAgICA8RWRpdFRleHQKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9ibHVlIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90ZXN0X2xvbmdfcGFyYWdyYXBoIi8+CmRpZmYgLS1naXQgYS9hcHBzL2xhdW5jaHBlcmYvcmVzL2xheW91dC9zaW1wbGVfbGF5b3V0LnhtbCBiL2FwcHMvbGF1bmNocGVyZi9yZXMvbGF5b3V0L3NpbXBsZV9sYXlvdXQueG1sCmluZGV4IDNhNjE3MjQuLjQ2MjQ0ZmYgMTAwNjQ0Ci0tLSBhL2FwcHMvbGF1bmNocGVyZi9yZXMvbGF5b3V0L3NpbXBsZV9sYXlvdXQueG1sCisrKyBiL2FwcHMvbGF1bmNocGVyZi9yZXMvbGF5b3V0L3NpbXBsZV9sYXlvdXQueG1sCkBAIC0yNiwyOCArMjYsMjggQEAKICAgICAgYSByb3csIGhlcmUgc2V0IHRvIGJlIHZlcnRpY2FsIChzbyB0aGUgZmlyc3QgaXMgYXQgdGhlIHRvcCkgLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIAogICAgIDxSZWxhdGl2ZUxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKIAogICAgICAgICA8UmVsYXRpdmVMYXlvdXQgYW5kcm9pZDppZD0iQCtpZC9yZXBsYXlfcGFuZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJUcnVlIgogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvcmVwbGF5X2JhY2tncm91bmQiPgogCiAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9pbnN0cnVjdGlvbnMiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlc3BvbnNlIiAvPgogCiAgICAgICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9lbnRyeSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDRkaXAiIAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvaW5zdHJ1Y3Rpb25zIi8+CiAgIApAQCAtNjgsMTMgKzY4LDEzIEBACiAgICAgICAgIDwvUmVsYXRpdmVMYXlvdXQ+CiAKICAgICAgICAgPFNjcm9sbFZpZXcgYW5kcm9pZDppZD0iQCtpZC9zY3JvbGxfcGFuZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hYm92ZT0iQGlkL3JlcGxheV9wYW5lIj4KIAogICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dF9maWVsZCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90ZXh0Ii8+CiAgICAgICAgICAgICAKICAgICAgICAgICAgIDxyZXF1ZXN0Rm9jdXMvPgpkaWZmIC0tZ2l0IGEvYnVpbGQvc2RrLmF0cmVlIGIvYnVpbGQvc2RrLmF0cmVlCmluZGV4IGYzYmQwYzYuLmE1NzE5NDkgMTAwNjQ0Ci0tLSBhL2J1aWxkL3Nkay5hdHJlZQorKysgYi9idWlsZC9zZGsuYXRyZWUKQEAgLTY1LDYgKzY1LDcgQEAKIHNkay90ZW1wbGF0ZXMvaWNvbl9oZHBpLnBuZyBwbGF0Zm9ybXMvJHtQTEFURk9STV9OQU1FfS90ZW1wbGF0ZXMvaWNvbl9oZHBpLnBuZwogCiAjIHNkay5naXQgZmlsZXMKK3Nkay9maWxlcy9hbnQucHJvcGVydGllcyBwbGF0Zm9ybXMvJHtQTEFURk9STV9OQU1FfS90ZW1wbGF0ZXMvYW50LnByb3BlcnRpZXMKIHNkay9maWxlcy9hbmRyb2lkX3J1bGVzLnhtbCBwbGF0Zm9ybXMvJHtQTEFURk9STV9OQU1FfS90ZW1wbGF0ZXMvYW5kcm9pZF9ydWxlcy54bWwKIHNkay9maWxlcy9hbmRyb2lkX3Rlc3RfcnVsZXMueG1sIHBsYXRmb3Jtcy8ke1BMQVRGT1JNX05BTUV9L3RlbXBsYXRlcy9hbmRyb2lkX3Rlc3RfcnVsZXMueG1sCiBzZGsvZmlsZXMvZGV2aWNlcy54bWwgdG9vbHMvbGliL2RldmljZXMueG1sCkBAIC03NiwyNCArNzcsMjUgQEAKICMKICMgdGhlIGxpc3QgaGVyZSBzaG91bGQgbWF0Y2ggdGhlIGxpc3Qgb2Ygc2FtcGxlcyB0aGF0IHdlIGdlbmVyYXRlIGRvY3MgZm9yLCAKICMgKHNlZSB3ZWJfZG9jc19zYW1wbGVfY29kZV9mbGFncyBpbiBmcmFtZXdvcmtzL2Jhc2UvQW5kcm9pZC5taykKLWRldmVsb3BtZW50L3NhbXBsZXMvc291cmNlLnByb3BlcnRpZXMgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9zb3VyY2UucHJvcGVydGllcwotZGV2ZWxvcG1lbnQvYXBwcy9HZXN0dXJlQnVpbGRlciAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L0dlc3R1cmVCdWlsZGVyCi1kZXZlbG9wbWVudC9zYW1wbGVzL0JsdWV0b290aENoYXQgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vQmx1ZXRvb3RoQ2hhdAotZGV2ZWxvcG1lbnQvc2FtcGxlcy9Ib21lICAgICAgICAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L0hvbWUKLWRldmVsb3BtZW50L3NhbXBsZXMvTHVuYXJMYW5kZXIgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9MdW5hckxhbmRlcgotZGV2ZWxvcG1lbnQvc2FtcGxlcy9Ob3RlUGFkICAgICAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L05vdGVQYWQKLWRldmVsb3BtZW50L3NhbXBsZXMvQXBpRGVtb3MgICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9BcGlEZW1vcwotZGV2ZWxvcG1lbnQvc2FtcGxlcy9TYW1wbGVTeW5jQWRhcHRlciAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L1NhbXBsZVN5bmNBZGFwdGVyCi1kZXZlbG9wbWVudC9zYW1wbGVzL1NrZWxldG9uQXBwICAgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vU2tlbGV0b25BcHAKLWRldmVsb3BtZW50L3NhbXBsZXMvU25ha2UgICAgICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9TbmFrZQotZGV2ZWxvcG1lbnQvc2FtcGxlcy9Tb2Z0S2V5Ym9hcmQgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L1NvZnRLZXlib2FyZAotZGV2ZWxvcG1lbnQvc2FtcGxlcy9KZXRCb3kgICAgICAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L0pldEJveQotZGV2ZWxvcG1lbnQvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeSAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L1NlYXJjaGFibGVEaWN0aW9uYXJ5Ci1kZXZlbG9wbWVudC9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vQ29udGFjdE1hbmFnZXIKLWRldmVsb3BtZW50L3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9NdWx0aVJlc29sdXRpb24KLWRldmVsb3BtZW50L3NhbXBsZXMvV2lrdGlvbmFyeSAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9XaWt0aW9uYXJ5Ci1kZXZlbG9wbWVudC9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vV2lrdGlvbmFyeVNpbXBsZQotZGV2ZWxvcG1lbnQvc2FtcGxlcy9DdWJlTGl2ZVdhbGxwYXBlciAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L0N1YmVMaXZlV2FsbHBhcGVyCitkZXZlbG9wbWVudC9zYW1wbGVzL3NvdXJjZS5wcm9wZXJ0aWVzICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vc291cmNlLnByb3BlcnRpZXMKK2RldmVsb3BtZW50L2FwcHMvR2VzdHVyZUJ1aWxkZXIgICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9HZXN0dXJlQnVpbGRlcgorZGV2ZWxvcG1lbnQvc2FtcGxlcy9CbHVldG9vdGhDaGF0ICAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L0JsdWV0b290aENoYXQKK2RldmVsb3BtZW50L3NhbXBsZXMvSG9tZSAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9Ib21lCitkZXZlbG9wbWVudC9zYW1wbGVzL0x1bmFyTGFuZGVyICAgICAgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vTHVuYXJMYW5kZXIKK2RldmVsb3BtZW50L3NhbXBsZXMvTm90ZVBhZCAgICAgICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9Ob3RlUGFkCitkZXZlbG9wbWVudC9zYW1wbGVzL0FwaURlbW9zICAgICAgICAgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vQXBpRGVtb3MKK2RldmVsb3BtZW50L3NhbXBsZXMvU2FtcGxlU3luY0FkYXB0ZXIgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9TYW1wbGVTeW5jQWRhcHRlcgorZGV2ZWxvcG1lbnQvc2FtcGxlcy9Ta2VsZXRvbkFwcCAgICAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L1NrZWxldG9uQXBwCitkZXZlbG9wbWVudC9zYW1wbGVzL1NuYWtlICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vU25ha2UKK2RldmVsb3BtZW50L3NhbXBsZXMvU29mdEtleWJvYXJkICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9Tb2Z0S2V5Ym9hcmQKK2RldmVsb3BtZW50L3NhbXBsZXMvSmV0Qm95ICAgICAgICAgICAgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9KZXRCb3kKK2RldmVsb3BtZW50L3NhbXBsZXMvU2VhcmNoYWJsZURpY3Rpb25hcnkgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9TZWFyY2hhYmxlRGljdGlvbmFyeQorZGV2ZWxvcG1lbnQvc2FtcGxlcy9Db250YWN0TWFuYWdlciAgICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L0NvbnRhY3RNYW5hZ2VyCitkZXZlbG9wbWVudC9zYW1wbGVzL011bHRpUmVzb2x1dGlvbiAgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vTXVsdGlSZXNvbHV0aW9uCitkZXZlbG9wbWVudC9zYW1wbGVzL1dpa3Rpb25hcnkgICAgICAgICAgICAgICBzYW1wbGVzLyR7UExBVEZPUk1fTkFNRX0vV2lrdGlvbmFyeQorZGV2ZWxvcG1lbnQvc2FtcGxlcy9XaWt0aW9uYXJ5U2ltcGxlICAgICAgICAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L1dpa3Rpb25hcnlTaW1wbGUKK2RldmVsb3BtZW50L3NhbXBsZXMvQ3ViZUxpdmVXYWxscGFwZXIgICAgICAgIHNhbXBsZXMvJHtQTEFURk9STV9OQU1FfS9DdWJlTGl2ZVdhbGxwYXBlcgorZGV2ZWxvcG1lbnQvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZSAgc2FtcGxlcy8ke1BMQVRGT1JNX05BTUV9L1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlCiAKICMgZHgKIGJpbi9keCBwbGF0Zm9ybXMvJHtQTEFURk9STV9OQU1FfS90b29scy9keApAQCAtMTQzLDcgKzE0NSw3IEBACiBiaW4vbGF5b3V0b3B0IHRvb2xzL2xheW91dG9wdAogZnJhbWV3b3JrL2xheW91dG9wdC5qYXIgdG9vbHMvbGliL2xheW91dG9wdC5qYXIKIGZyYW1ld29yay91aXguamFyIHRvb2xzL2xpYi91aXguamFyCi1mcmFtZXdvcmsvZ3Jvb3Z5LWFsbC0xLjYuNS5qYXIgdG9vbHMvbGliL2dyb292eS1hbGwtMS42LjUuamFyCitmcmFtZXdvcmsvZ3Jvb3Z5LWFsbC0xLjcuMC5qYXIgdG9vbHMvbGliL2dyb292eS1hbGwtMS43LjAuamFyCiAKICMgdHJhY2V2aWV3CiBiaW4vdHJhY2V2aWV3IHRvb2xzL3RyYWNldmlldwpkaWZmIC0tZ2l0IGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXkuamF2YSBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5LmphdmEKaW5kZXggNzk1NDhkNC4uYjFjNzVmMSAxMDA2NDQKLS0tIGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXkuamF2YQorKysgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleS5qYXZhCkBAIC0yMywyNSArMjMsMjggQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5DcmFzaERhdGE7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5zZWN1cml0eS5TZWN1cmVSYW5kb207CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogLyoqCiAgKiBBcHBsaWNhdGlvbiB0aGF0IGluamVjdHMgcmFuZG9tIGtleSBldmVudHMgYW5kIG90aGVyIGFjdGlvbnMgaW50byB0aGUgc3lzdGVtLgpAQCAtMTE4LDkgKzEyMSwxOCBAQAogICAgIC8qKiBHZW5lcmF0ZSBocHJvZiByZXBvcnRzIGJlZm9yZS9hZnRlciBtb25rZXkgcnVucyAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBtR2VuZXJhdGVIcHJvZjsKIAorICAgIC8qKiBQYWNrYWdlIGJsYWNrbGlzdCBmaWxlLiAqLworICAgIHByaXZhdGUgU3RyaW5nIG1Qa2dCbGFja2xpc3RGaWxlOworCisgICAgLyoqIFBhY2thZ2Ugd2hpdGVsaXN0IGZpbGUuICovCisgICAgcHJpdmF0ZSBTdHJpbmcgbVBrZ1doaXRlbGlzdEZpbGU7CisKICAgICAvKiogUGFja2FnZXMgd2UgYXJlIGFsbG93ZWQgdG8gcnVuLCBvciBlbXB0eSBpZiBubyByZXN0cmljdGlvbi4gKi8KICAgICBwcml2YXRlIEhhc2hTZXQ8U3RyaW5nPiBtVmFsaWRQYWNrYWdlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKIAorICAgIC8qKiBQYWNrYWdlcyB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcnVuLiAqLworICAgIHByaXZhdGUgSGFzaFNldDxTdHJpbmc+IG1JbnZhbGlkUGFja2FnZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKICAgICAvKiogQ2F0ZWdvcmllcyB3ZSBhcmUgYWxsb3dlZCB0byBsYXVuY2ggKiovCiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtTWFpbkNhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKIApAQCAtMTMwLDEyICsxNDIsMTggQEAKICAgICAvKiogVGhlIGRlbGF5IGJldHdlZW4gZXZlbnQgaW5wdXRzICoqLwogICAgIGxvbmcgbVRocm90dGxlID0gMDsKIAorICAgIC8qKiBXaGV0aGVyIHRvIHJhbmRvbWl6ZSBlYWNoIHRocm90dGxlICgwLW1UaHJvdHRsZSBtcykgaW5zZXJ0ZWQgYmV0d2VlbiBldmVudHMuICovCisgICAgYm9vbGVhbiBtUmFuZG9taXplVGhyb3R0bGUgPSBmYWxzZTsKKwogICAgIC8qKiBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgKiovCiAgICAgaW50IG1Db3VudCA9IDEwMDA7CiAKICAgICAvKiogVGhlIHJhbmRvbSBudW1iZXIgc2VlZCAqKi8KICAgICBsb25nIG1TZWVkID0gMDsKIAorICAgIC8qKiBUaGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKiovCisgICAgUmFuZG9tIG1SYW5kb20gPSBudWxsOworCiAgICAgLyoqIERyb3BwZWQtZXZlbnQgc3RhdGlzdGljcyAqKi8KICAgICBsb25nIG1Ecm9wcGVkS2V5RXZlbnRzID0gMDsKIApAQCAtMTcwLDYgKzE4OCwyNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGN1cnJlbnRQYWNrYWdlOwogCiAgICAgLyoqCisgICAgICogQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFnYWluc3QgdGhlIGdpdm4gcGFja2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwa2cgVGhlIHBhY2thZ2UgbmFtZS4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgcnVuIGFnYWluc3QgcGtnLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0VudGVyaW5nUGFja2FnZShTdHJpbmcgcGtnKSB7CisgICAgICAgIGlmIChtSW52YWxpZFBhY2thZ2VzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIGlmIChtSW52YWxpZFBhY2thZ2VzLmNvbnRhaW5zKHBrZykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobVZhbGlkUGFja2FnZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgaWYgKCFtVmFsaWRQYWNrYWdlcy5jb250YWlucyhwa2cpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgogICAgICAqIE1vbml0b3Igb3BlcmF0aW9ucyBoYXBwZW5pbmcgaW4gdGhlIHN5c3RlbS4KICAgICAgKi8KICAgICBwcml2YXRlIGNsYXNzIEFjdGl2aXR5Q29udHJvbGxlciBleHRlbmRzIElBY3Rpdml0eUNvbnRyb2xsZXIuU3R1YiB7CkBAIC0xOTcsMzkgKzIzNCwxNiBAQAogICAgICAgICAgICAgcmV0dXJuIGFsbG93OwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrRW50ZXJpbmdQYWNrYWdlKFN0cmluZyBwa2cpIHsKLSAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gcHJlZmxpZ2h0IHRoZSBoYXNoIGxvb2t1cCB0byBhdm9pZCB0aGUgY29zdCBvZiBoYXNoIGtleQotICAgICAgICAgICAgLy8gZ2VuZXJhdGlvbgotICAgICAgICAgICAgaWYgKG1WYWxpZFBhY2thZ2VzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBtVmFsaWRQYWNrYWdlcy5jb250YWlucyhwa2cpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gYXBwQ3Jhc2hlZChTdHJpbmcgcHJvY2Vzc05hbWUsIGludCBwaWQsIFN0cmluZyBzaG9ydE1zZywgU3RyaW5nIGxvbmdNc2csCi0gICAgICAgICAgICAgICAgYnl0ZVtdIGNyYXNoRGF0YSkgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhcHBDcmFzaGVkKFN0cmluZyBwcm9jZXNzTmFtZSwgaW50IHBpZCwKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRNc2csIFN0cmluZyBsb25nTXNnLAorICAgICAgICAgICAgICAgIGxvbmcgdGltZU1pbGxpcywgU3RyaW5nIHN0YWNrVHJhY2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gQ1JBU0g6ICIgKyBwcm9jZXNzTmFtZSArICIgKHBpZCAiICsgcGlkICsgIikiKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gU2hvcnQgTXNnOiAiICsgc2hvcnRNc2cpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBMb25nIE1zZzogIiArIGxvbmdNc2cpOwotICAgICAgICAgICAgaWYgKGNyYXNoRGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgQ3Jhc2hEYXRhIGNkID0gbmV3IENyYXNoRGF0YShuZXcgRGF0YUlucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFzaERhdGEpKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gQnVpbGQgTGFiZWw6ICIgKyBjZC5nZXRCdWlsZERhdGEoKS5nZXRGaW5nZXJwcmludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBCdWlsZCBDaGFuZ2VsaXN0OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjZC5nZXRCdWlsZERhdGEoKS5nZXRJbmNyZW1lbnRhbFZlcnNpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gQnVpbGQgVGltZTogIiArIGNkLmdldEJ1aWxkRGF0YSgpLmdldFRpbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gSUQ6ICIgKyBjZC5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBUYWc6ICIgKyBjZC5nZXRBY3Rpdml0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGNkLmdldFRocm93YWJsZURhdGEoKS50b1N0cmluZygiLy8gIikpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBCQUQgU1RBQ0sgQ1JBV0wiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIi8vIEJ1aWxkIExhYmVsOiAiICsgQnVpbGQuRklOR0VSUFJJTlQpOworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBCdWlsZCBDaGFuZ2VsaXN0OiAiICsgQnVpbGQuVkVSU0lPTi5JTkNSRU1FTlRBTCk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIi8vIEJ1aWxkIFRpbWU6ICIgKyBCdWlsZC5USU1FKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gIiArIHN0YWNrVHJhY2UucmVwbGFjZSgiXG4iLCAiXG4vLyAiKSk7CiAKICAgICAgICAgICAgIGlmICghbUlnbm9yZUNyYXNoZXMpIHsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKE1vbmtleS50aGlzKSB7CkBAIC0zNzEsNiArMzg1LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoIWxvYWRQYWNrYWdlTGlzdHMoKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKICAgICAgICAgLy8gbm93IHNldCB1cCBhZGRpdGlvbmFsIGRhdGEgaW4gcHJlcGFyYXRpb24gZm9yIGxhdW5jaAogICAgICAgICBpZiAobU1haW5DYXRlZ29yaWVzLnNpemUoKSA9PSAwKSB7CiAgICAgICAgICAgICBtTWFpbkNhdGVnb3JpZXMuYWRkKEludGVudC5DQVRFR09SWV9MQVVOQ0hFUik7CkBAIC0zODUsNiArNDAzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiOkFsbG93UGFja2FnZTogIiArIGl0Lm5leHQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1JbnZhbGlkUGFja2FnZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXQgPSBtSW52YWxpZFBhY2thZ2VzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjpEaXNhbGxvd1BhY2thZ2U6ICIgKyBpdC5uZXh0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtTWFpbkNhdGVnb3JpZXMuc2l6ZSgpICE9IDApIHsKICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ID0gbU1haW5DYXRlZ29yaWVzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewpAQCAtNDA1LDE5ICs0MjksMjQgQEAKICAgICAgICAgICAgIHJldHVybiAtNDsKICAgICAgICAgfQogCisgICAgICAgIG1SYW5kb20gPSBuZXcgU2VjdXJlUmFuZG9tKCk7CisgICAgICAgIG1SYW5kb20uc2V0U2VlZCgobVNlZWQgPT0gMCkgPyAtMSA6IG1TZWVkKTsKKwogICAgICAgICBpZiAobVNjcmlwdEZpbGVOYW1lcyAhPSBudWxsICYmIG1TY3JpcHRGaWxlTmFtZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgIC8vIHNjcmlwdCBtb2RlLCBpZ25vcmUgb3RoZXIgb3B0aW9ucwotICAgICAgICAgICAgbUV2ZW50U291cmNlID0gbmV3IE1vbmtleVNvdXJjZVNjcmlwdChtU2NyaXB0RmlsZU5hbWVzLmdldCgwKSwgbVRocm90dGxlKTsKKyAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VTY3JpcHQobVJhbmRvbSwgbVNjcmlwdEZpbGVOYW1lcy5nZXQoMCksIG1UaHJvdHRsZSwKKyAgICAgICAgICAgICAgICAgICAgbVJhbmRvbWl6ZVRocm90dGxlKTsKICAgICAgICAgICAgIG1FdmVudFNvdXJjZS5zZXRWZXJib3NlKG1WZXJib3NlKTsKIAogICAgICAgICAgICAgbUNvdW50RXZlbnRzID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAobVNjcmlwdEZpbGVOYW1lcyAhPSBudWxsICYmIG1TY3JpcHRGaWxlTmFtZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgaWYgKG1TZXR1cEZpbGVOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtRXZlbnRTb3VyY2UgPSBuZXcgTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0KG1TZXR1cEZpbGVOYW1lLCBtU2NyaXB0RmlsZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgbVRocm90dGxlLCBtU2VlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtVGhyb3R0bGUsIG1SYW5kb21pemVUaHJvdHRsZSwgbVJhbmRvbSk7CiAgICAgICAgICAgICAgICAgbUNvdW50Kys7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VSYW5kb21TY3JpcHQobVNjcmlwdEZpbGVOYW1lcywgbVRocm90dGxlLCBtU2VlZCk7CisgICAgICAgICAgICAgICAgbUV2ZW50U291cmNlID0gbmV3IE1vbmtleVNvdXJjZVJhbmRvbVNjcmlwdChtU2NyaXB0RmlsZU5hbWVzLCBtVGhyb3R0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBtUmFuZG9taXplVGhyb3R0bGUsIG1SYW5kb20pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbUV2ZW50U291cmNlLnNldFZlcmJvc2UobVZlcmJvc2UpOwogICAgICAgICAgICAgbUNvdW50RXZlbnRzID0gZmFsc2U7CkBAIC00MzQsNyArNDYzLDcgQEAKICAgICAgICAgICAgIGlmIChtVmVyYm9zZSA+PSAyKSB7IC8vIGNoZWNrIHNlZWRpbmcgcGVyZm9ybWFuY2UKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi8vIFNlZWRlZDogIiArIG1TZWVkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VSYW5kb20obVNlZWQsIG1NYWluQXBwcywgbVRocm90dGxlKTsKKyAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VSYW5kb20obVJhbmRvbSwgbU1haW5BcHBzLCBtVGhyb3R0bGUsIG1SYW5kb21pemVUaHJvdHRsZSk7CiAgICAgICAgICAgICBtRXZlbnRTb3VyY2Uuc2V0VmVyYm9zZShtVmVyYm9zZSk7CiAgICAgICAgICAgICAvLyBzZXQgYW55IG9mIHRoZSBmYWN0b3JzIHRoYXQgaGFzIGJlZW4gc2V0CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1vbmtleVNvdXJjZVJhbmRvbS5GQUNUT1JaX0NPVU5UOyBpKyspIHsKQEAgLTU3Nyw4ICs2MDYsMTQgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHMoIi0tcGN0LWFueWV2ZW50IikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBNb25rZXlTb3VyY2VSYW5kb20uRkFDVE9SX0FOWVRISU5HOwogICAgICAgICAgICAgICAgICAgICBtRmFjdG9yc1tpXSA9IC1uZXh0T3B0aW9uTG9uZygiYW55IGV2ZW50cyBwZXJjZW50YWdlIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLXBrZy1ibGFja2xpc3QtZmlsZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1Qa2dCbGFja2xpc3RGaWxlID0gbmV4dE9wdGlvbkRhdGEoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHMoIi0tcGtnLXdoaXRlbGlzdC1maWxlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbVBrZ1doaXRlbGlzdEZpbGUgPSBuZXh0T3B0aW9uRGF0YSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0LmVxdWFscygiLS10aHJvdHRsZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1UaHJvdHRsZSA9IG5leHRPcHRpb25Mb25nKCJkZWxheSAoaW4gbWlsbGlzZWNvbmRzKSB0byB3YWl0IGJldHdlZW4gZXZlbnRzIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLXJhbmRvbWl6ZS10aHJvdHRsZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1SYW5kb21pemVUaHJvdHRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLXdhaXQtZGJnIikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyAtIGl0J3MgY2F1Z2h0IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHJ1bigpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLWRiZy1uby1ldmVudHMiKSkgewpAQCAtNjI3LDYgKzY2Miw2MiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIExvYWQgYSBsaXN0IG9mIHBhY2thZ2UgbmFtZXMgZnJvbSBhIGZpbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgVGhlIGZpbGUgbmFtZSwgd2l0aCBwYWNrYWdlIG5hbWVzIHNlcGFyYXRlZCBieSBuZXcgbGluZS4KKyAgICAgKiBAcGFyYW0gbGlzdCBUaGUgZGVzdGluYXRpb24gbGlzdC4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgZmFsc2UgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGxvYWRQYWNrYWdlTGlzdEZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSwgSGFzaFNldDxTdHJpbmc+IGxpc3QpIHsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlTmFtZSkpOworICAgICAgICAgICAgU3RyaW5nIHM7CisgICAgICAgICAgICB3aGlsZSAoKHMgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHMgPSBzLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoKHMubGVuZ3RoKCkgPiAwKSAmJiAoIXMuc3RhcnRzV2l0aCgiIyIpKSkgeworICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZChzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWQgcGFja2FnZSBibGFja2xpc3Qgb3Igd2hpdGVsaXN0IChpZiBzcGVjaWZpZWQpLgorICAgICAqCisgICAgICogQHJldHVybiBSZXR1cm5zIGZhbHNlIGlmIGFueSBlcnJvciBvY2N1cnMuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGxvYWRQYWNrYWdlTGlzdHMoKSB7CisgICAgICAgIGlmICgoKG1Qa2dXaGl0ZWxpc3RGaWxlICE9IG51bGwpIHx8IChtVmFsaWRQYWNrYWdlcy5zaXplKCkgPiAwKSkKKyAgICAgICAgICAgICAgICAmJiAobVBrZ0JsYWNrbGlzdEZpbGUgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiKiogRXJyb3I6IHlvdSBjYW4gbm90IHNwZWNpZnkgYSBwYWNrYWdlIGJsYWNrbGlzdCAiCisgICAgICAgICAgICAgICAgICAgICsgInRvZ2V0aGVyIHdpdGggYSB3aGl0ZWxpc3Qgb3IgaW5kaXZpZHVhbCBwYWNrYWdlcyAodmlhIC1wKS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1Qa2dXaGl0ZWxpc3RGaWxlICE9IG51bGwpCisgICAgICAgICAgICAgICAgJiYgKCFsb2FkUGFja2FnZUxpc3RGcm9tRmlsZShtUGtnV2hpdGVsaXN0RmlsZSwgbVZhbGlkUGFja2FnZXMpKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICgobVBrZ0JsYWNrbGlzdEZpbGUgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAmJiAoIWxvYWRQYWNrYWdlTGlzdEZyb21GaWxlKG1Qa2dCbGFja2xpc3RGaWxlLCBtSW52YWxpZFBhY2thZ2VzKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDaGVjayBmb3IgYW55IGludGVybmFsIGNvbmZpZ3VyYXRpb24gKHByaW1hcmlseSBidWlsZC10aW1lKSBlcnJvcnMuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiByZWFkeSB0byByb2NrLgpAQCAtNzEyLDIwICs4MDMsMTcgQEAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTkEgPSBtYWluQXBwcy5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgYSA9IDA7IGEgPCBOQTsgYSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVJbmZvIHIgPSBtYWluQXBwcy5nZXQoYSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtVmFsaWRQYWNrYWdlcy5zaXplKCkgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1WYWxpZFBhY2thZ2VzLmNvbnRhaW5zKHIuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5wYWNrYWdlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gci5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tFbnRlcmluZ1BhY2thZ2UocGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVZlcmJvc2UgPj0gMikgeyAvLyB2ZXJ5IHZlcmJvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi8vICAgKyBVc2luZyBtYWluIGFjdGl2aXR5ICIgKyByLmFjdGl2aXR5SW5mby5uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgKGZyb20gcGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHIuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5wYWNrYWdlTmFtZSArICIpIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgKGZyb20gcGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbU1haW5BcHBzLmFkZChuZXcgQ29tcG9uZW50TmFtZShyLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuYWN0aXZpdHlJbmZvLm5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1NYWluQXBwcy5hZGQobmV3IENvbXBvbmVudE5hbWUocGFja2FnZU5hbWUsIHIuYWN0aXZpdHlJbmZvLm5hbWUpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVmVyYm9zZSA+PSAzKSB7IC8vIHZlcnkgdmVyeSB2ZXJib3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIvLyAgIC0gTk9UIFVTSU5HIG1haW4gYWN0aXZpdHkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByLmFjdGl2aXR5SW5mby5uYW1lICsgIiAoZnJvbSBwYWNrYWdlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgci5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lICsgIikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgci5hY3Rpdml0eUluZm8ubmFtZSArICIgKGZyb20gcGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNzUyLDcgKzg0MCw2IEBACiAgICAgICogICAgICAgICBlcnJvcnMgZGV0ZWN0ZWQuCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgcnVuTW9ua2V5Q3ljbGVzKCkgewotCiAgICAgICAgIGludCBldmVudENvdW50ZXIgPSAwOwogICAgICAgICBpbnQgY3ljbGVDb3VudGVyID0gMDsKIApAQCAtNzk4LDcgKzg4NSw2IEBACiAKICAgICAgICAgICAgIE1vbmtleUV2ZW50IGV2ID0gbUV2ZW50U291cmNlLmdldE5leHRFdmVudCgpOwogICAgICAgICAgICAgaWYgKGV2ICE9IG51bGwpIHsKLQogICAgICAgICAgICAgICAgIGludCBpbmplY3RDb2RlID0gZXYuaW5qZWN0RXZlbnQobVdtLCBtQW0sIG1WZXJib3NlKTsKICAgICAgICAgICAgICAgICBpZiAoaW5qZWN0Q29kZSA9PSBNb25rZXlFdmVudC5JTkpFQ1RfRkFJTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBNb25rZXlLZXlFdmVudCkgewpAQCAtODI5LDEzICs5MTUsMTEgQEAKICAgICAgICAgICAgICAgICBpZiAoIW1Db3VudEV2ZW50cykgewogICAgICAgICAgICAgICAgICAgICBjeWNsZUNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIioqIEVycm9yOiBFdmVudCBzb3VyY2UgZXhoYXVzdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAvLyBFdmVudCBTb3VyY2UgaGFzIHNpZ25hbGVkIHRoYXQgd2UgaGF2ZSBubyBtb3JlIGV2ZW50cyB0byBwcm9jZXNzCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciwgd2Ugc3VjY2VlZGVkIQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV2ZW50cyBpbmplY3RlZDogIiArIGV2ZW50Q291bnRlcik7CiAgICAgICAgIHJldHVybiBldmVudENvdW50ZXI7CiAgICAgfQpAQCAtOTk0LDEwICsxMDc4LDEzIEBACiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wY3QtbmF2IFBFUkNFTlRdIFstLXBjdC1tYWpvcm5hdiBQRVJDRU5UXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wY3QtYXBwc3dpdGNoIFBFUkNFTlRdIFstLXBjdC1mbGlwIFBFUkNFTlRdXG4iKTsKICAgICAgICAgdXNhZ2UuYXBwZW5kKCIgICAgICAgICAgICAgIFstLXBjdC1hbnlldmVudCBQRVJDRU5UXVxuIik7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wa2ctYmxhY2tsaXN0LWZpbGUgUEFDS0FHRV9CTEFDS0xJU1RfRklMRV1cbiIpOworICAgICAgICB1c2FnZS5hcHBlbmQoIiAgICAgICAgICAgICAgWy0tcGtnLXdoaXRlbGlzdC1maWxlIFBBQ0tBR0VfV0hJVEVMSVNUX0ZJTEVdXG4iKTsKICAgICAgICAgdXNhZ2UuYXBwZW5kKCIgICAgICAgICAgICAgIFstLXdhaXQtZGJnXSBbLS1kYmctbm8tZXZlbnRzXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1zZXR1cCBzY3JpcHRmaWxlXSBbLWYgc2NyaXB0ZmlsZSBbLWYgc2NyaXB0ZmlsZV0gLi4uXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wb3J0IHBvcnRdXG4iKTsKLSAgICAgICAgdXNhZ2UuYXBwZW5kKCIgICAgICAgICAgICAgIFstcyBTRUVEXSBbLXYgWy12XSAuLi5dIFstLXRocm90dGxlIE1JTExJU0VDXVxuIik7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLXMgU0VFRF0gWy12IFstdl0gLi4uXVxuIik7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS10aHJvdHRsZSBNSUxMSVNFQ10gWy0tcmFuZG9taXplLXRocm90dGxlXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBDT1VOVCIpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4odXNhZ2UudG9TdHJpbmcoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlFdmVudFF1ZXVlLmphdmEgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleUV2ZW50UXVldWUuamF2YQppbmRleCBkZmUzODlhLi4wMGU0NmI3IDEwMDY0NAotLS0gYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleUV2ZW50UXVldWUuamF2YQorKysgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleUV2ZW50UXVldWUuamF2YQpAQCAtMTcsMjUgKzE3LDM5IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmNvbW1hbmRzLm1vbmtleTsKIAogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CiAKIC8qKgogICogY2xhc3MgZm9yIGtlZXBpbmcgYSBtb25rZXkgZXZlbnQgcXVldWUKICAqLwogQFN1cHByZXNzV2FybmluZ3MoInNlcmlhbCIpCi1wdWJsaWMgY2xhc3MgTW9ua2V5RXZlbnRRdWV1ZSBleHRlbmRzIExpbmtlZExpc3Q8TW9ua2V5RXZlbnQ+IHsgICAKK3B1YmxpYyBjbGFzcyBNb25rZXlFdmVudFF1ZXVlIGV4dGVuZHMgTGlua2VkTGlzdDxNb25rZXlFdmVudD4gewogCisgICAgcHJpdmF0ZSBSYW5kb20gbVJhbmRvbTsKICAgICBwcml2YXRlIGxvbmcgbVRocm90dGxlOwotICAgIAotICAgIHB1YmxpYyBNb25rZXlFdmVudFF1ZXVlKGxvbmcgdGhyb3R0bGUpIHsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVJhbmRvbWl6ZVRocm90dGxlOworCisgICAgcHVibGljIE1vbmtleUV2ZW50UXVldWUoUmFuZG9tIHJhbmRvbSwgbG9uZyB0aHJvdHRsZSwgYm9vbGVhbiByYW5kb21pemVUaHJvdHRsZSkgewogICAgICAgICBzdXBlcigpOworICAgICAgICBtUmFuZG9tID0gcmFuZG9tOwogICAgICAgICBtVGhyb3R0bGUgPSB0aHJvdHRsZTsKKyAgICAgICAgbVJhbmRvbWl6ZVRocm90dGxlID0gcmFuZG9taXplVGhyb3R0bGU7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgYWRkTGFzdChNb25rZXlFdmVudCBlKSB7CiAgICAgICAgIHN1cGVyLmFkZChlKTsKICAgICAgICAgaWYgKGUuaXNUaHJvdHRsYWJsZSgpKSB7Ci0gICAgICAgICAgICBzdXBlci5hZGQobmV3IE1vbmtleVRocm90dGxlRXZlbnQobVRocm90dGxlKSk7CisgICAgICAgICAgICBsb25nIHRocm90dGxlID0gbVRocm90dGxlOworICAgICAgICAgICAgaWYgKG1SYW5kb21pemVUaHJvdHRsZSAmJiAobVRocm90dGxlID4gMCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdHRsZSA9IG1SYW5kb20ubmV4dExvbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhyb3R0bGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm90dGxlID0gLXRocm90dGxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aHJvdHRsZSAlPSBtVGhyb3R0bGU7CisgICAgICAgICAgICAgICAgKyt0aHJvdHRsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLmFkZChuZXcgTW9ua2V5VGhyb3R0bGVFdmVudCh0aHJvdHRsZSkpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VSYW5kb20uamF2YSBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5U291cmNlUmFuZG9tLmphdmEKaW5kZXggNWM3ZmRiYy4uNmZhMDI5ZSAxMDA2NDQKLS0tIGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VSYW5kb20uamF2YQorKysgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVJhbmRvbS5qYXZhCkBAIC0yMyw5ICsyMyw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VySW1wbDsKIAotaW1wb3J0IGphdmEuc2VjdXJpdHkuU2VjdXJlUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogLyoqCkBAIC0yMDIsNyArMjAwLDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHB1YmxpYyBNb25rZXlTb3VyY2VSYW5kb20obG9uZyBzZWVkLCBBcnJheUxpc3Q8Q29tcG9uZW50TmFtZT4gTWFpbkFwcHMsIGxvbmcgdGhyb3R0bGUpIHsKKyAgICBwdWJsaWMgTW9ua2V5U291cmNlUmFuZG9tKFJhbmRvbSByYW5kb20sIEFycmF5TGlzdDxDb21wb25lbnROYW1lPiBNYWluQXBwcywKKyAgICAgICAgICAgIGxvbmcgdGhyb3R0bGUsIGJvb2xlYW4gcmFuZG9taXplVGhyb3R0bGUpIHsKICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIHJhbmRvbSBkaXN0cmlidXRpb25zCiAgICAgICAgIC8vIG5vdGUsIHRoZXNlIGFyZSBzdHJhaWdodCBwZXJjZW50YWdlcywgdG8gbWF0Y2ggdXNlciBpbnB1dCAoY21kIGxpbmUgYXJncykKICAgICAgICAgLy8gYnV0IHRoZXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gMC4uMSB2YWx1ZXMgYmVmb3JlIHRoZSBtYWluIGxvb3AgcnVucy4KQEAgLTIxNiwxMCArMjE1LDkgQEAKICAgICAgICAgbUZhY3RvcnNbRkFDVE9SX0ZMSVBdID0gMS4wZjsKICAgICAgICAgbUZhY3RvcnNbRkFDVE9SX0FOWVRISU5HXSA9IDE1LjBmOwogCi0gICAgICAgIG1SYW5kb20gPSBuZXcgU2VjdXJlUmFuZG9tKCk7Ci0gICAgICAgIG1SYW5kb20uc2V0U2VlZCgoc2VlZCA9PSAwKSA/IC0xIDogc2VlZCk7CisgICAgICAgIG1SYW5kb20gPSByYW5kb207CiAgICAgICAgIG1NYWluQXBwcyA9IE1haW5BcHBzOwotICAgICAgICBtUSA9IG5ldyBNb25rZXlFdmVudFF1ZXVlKHRocm90dGxlKTsKKyAgICAgICAgbVEgPSBuZXcgTW9ua2V5RXZlbnRRdWV1ZShyYW5kb20sIHRocm90dGxlLCByYW5kb21pemVUaHJvdHRsZSk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVJhbmRvbVNjcmlwdC5qYXZhIGIvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VSYW5kb21TY3JpcHQuamF2YQppbmRleCBhOTM3Mzk4Li5mYjYwYzkzIDEwMDY0NAotLS0gYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVJhbmRvbVNjcmlwdC5qYXZhCisrKyBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0LmphdmEKQEAgLTE2LDggKzE2LDggQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5jb21tYW5kcy5tb25rZXk7CiAKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CiAKIC8qKgogICogQ2xhc3MgZm9yIGdlbmVyYXRpbmcgTW9ua2V5RXZlbnRzIGZyb20gbXVsdGlwbGUgc2NyaXB0cy4KQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIE1vbmtleVNvdXJjZVNjcmlwdCBtQ3VycmVudFNvdXJjZSA9IG51bGw7CiAKICAgICAvKiogVGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCi0gICAgcHJpdmF0ZSBTZWN1cmVSYW5kb20gbVJhbmRvbTsKKyAgICBwcml2YXRlIFJhbmRvbSBtUmFuZG9tOwogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIE1vbmtleVNvdXJjZVJhbmRvbVNjcmlwdCBpbnN0YW5jZSB3aXRoIGFuIGFkZGl0aW9uYWwgc2V0dXAgc2NyaXB0LgpAQCAtNDQsMjEgKzQ0LDIzIEBACiAgICAgICogQHBhcmFtIHNldHVwRmlsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNldHVwIHNjcmlwdCBmaWxlIG9uIHRoZSBkZXZpY2UuCiAgICAgICogQHBhcmFtIHNjcmlwdEZpbGVOYW1lcyBBbiBBcnJheUxpc3Qgb2YgdGhlIG5hbWVzIG9mIHRoZSBzY3JpcHQgZmlsZXMgdG8gYmUgcnVuIHJhbmRvbWx5LgogICAgICAqIEBwYXJhbSB0aHJvdHRsZSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gc2xlZXAgaW4gbXMgYmV0d2VlbiBldmVudHMuCi0gICAgICogQHBhcmFtIHNlZWQgVGhlIHNlZWQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAqIEBwYXJhbSByYW5kb21pemVUaHJvdHRsZSBXaGV0aGVyIHRvIHJhbmRvbWl6ZSB0aHJvdHRsZS4KKyAgICAgKiBAcGFyYW0gcmFuZG9tIFRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAgICAgKi8KICAgICBwdWJsaWMgTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0KFN0cmluZyBzZXR1cEZpbGVOYW1lLCBBcnJheUxpc3Q8U3RyaW5nPiBzY3JpcHRGaWxlTmFtZXMsCi0gICAgICAgICAgICBsb25nIHRocm90dGxlLCBsb25nIHNlZWQpIHsKKyAgICAgICAgICAgIGxvbmcgdGhyb3R0bGUsIGJvb2xlYW4gcmFuZG9taXplVGhyb3R0bGUsIFJhbmRvbSByYW5kb20pIHsKICAgICAgICAgaWYgKHNldHVwRmlsZU5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbVNldHVwU291cmNlID0gbmV3IE1vbmtleVNvdXJjZVNjcmlwdChzZXR1cEZpbGVOYW1lLCB0aHJvdHRsZSk7CisgICAgICAgICAgICBtU2V0dXBTb3VyY2UgPSBuZXcgTW9ua2V5U291cmNlU2NyaXB0KHJhbmRvbSwgc2V0dXBGaWxlTmFtZSwgdGhyb3R0bGUsCisgICAgICAgICAgICAgICAgICAgIHJhbmRvbWl6ZVRocm90dGxlKTsKICAgICAgICAgICAgIG1DdXJyZW50U291cmNlID0gbVNldHVwU291cmNlOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChTdHJpbmcgZmlsZU5hbWU6IHNjcmlwdEZpbGVOYW1lcykgewotICAgICAgICAgICAgbVNjcmlwdFNvdXJjZXMuYWRkKG5ldyBNb25rZXlTb3VyY2VTY3JpcHQoZmlsZU5hbWUsIHRocm90dGxlKSk7CisgICAgICAgICAgICBtU2NyaXB0U291cmNlcy5hZGQobmV3IE1vbmtleVNvdXJjZVNjcmlwdChyYW5kb20sIGZpbGVOYW1lLCB0aHJvdHRsZSwKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21pemVUaHJvdHRsZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgbVJhbmRvbSA9IG5ldyBTZWN1cmVSYW5kb20oKTsKLSAgICAgICAgbVJhbmRvbS5zZXRTZWVkKChzZWVkID09IDApID8gLTEgOiBzZWVkKTsKKyAgICAgICAgbVJhbmRvbSA9IHJhbmRvbTsKICAgICB9CiAKICAgICAvKioKQEAgLTY2LDEwICs2OCwxMiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHNjcmlwdEZpbGVOYW1lcyBBbiBBcnJheUxpc3Qgb2YgdGhlIG5hbWVzIG9mIHRoZSBzY3JpcHQgZmlsZXMgdG8gYmUgcnVuIHJhbmRvbWx5LgogICAgICAqIEBwYXJhbSB0aHJvdHRsZSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gc2xlZXAgaW4gbXMgYmV0d2VlbiBldmVudHMuCi0gICAgICogQHBhcmFtIHNlZWQgVGhlIHNlZWQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAqIEBwYXJhbSByYW5kb21pemVUaHJvdHRsZSBXaGV0aGVyIHRvIHJhbmRvbWl6ZSB0aHJvdHRsZS4KKyAgICAgKiBAcGFyYW0gcmFuZG9tIFRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAgICAgKi8KLSAgICBwdWJsaWMgTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0KEFycmF5TGlzdDxTdHJpbmc+IHNjcmlwdEZpbGVOYW1lcywgbG9uZyB0aHJvdHRsZSwgbG9uZyBzZWVkKSB7Ci0gICAgICAgIHRoaXMobnVsbCwgc2NyaXB0RmlsZU5hbWVzLCB0aHJvdHRsZSwgc2VlZCk7CisgICAgcHVibGljIE1vbmtleVNvdXJjZVJhbmRvbVNjcmlwdChBcnJheUxpc3Q8U3RyaW5nPiBzY3JpcHRGaWxlTmFtZXMsIGxvbmcgdGhyb3R0bGUsCisgICAgICAgICAgICBib29sZWFuIHJhbmRvbWl6ZVRocm90dGxlLCBSYW5kb20gcmFuZG9tKSB7CisgICAgICAgIHRoaXMobnVsbCwgc2NyaXB0RmlsZU5hbWVzLCB0aHJvdHRsZSwgcmFuZG9taXplVGhyb3R0bGUsIHJhbmRvbSk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVNjcmlwdC5qYXZhIGIvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VTY3JpcHQuamF2YQppbmRleCBlMzcyMzg1Li43MzEyMzNjIDEwMDY0NAotLS0gYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVNjcmlwdC5qYXZhCisrKyBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5U291cmNlU2NyaXB0LmphdmEKQEAgLTI2LDYgKzI2LDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CiBpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogLyoqCiAgKiBtb25rZXkgZXZlbnQgcXVldWUuIEl0IHRha2VzIGEgc2NyaXB0IHRvIHByb2R1Y2UgZXZlbnRzIHNhbXBsZSBzY3JpcHQgZm9ybWF0OgpAQCAtMTE1LDkgKzExNiwxMCBAQAogICAgICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZW5hbWUgb2YgdGhlIHNjcmlwdCAob24gdGhlIGRldmljZSkuCiAgICAgICogQHBhcmFtIHRocm90dGxlIFRoZSBhbW91bnQgb2YgdGltZSBpbiBtcyB0byBzbGVlcCBiZXR3ZWVuIGV2ZW50cy4KICAgICAgKi8KLSAgICBwdWJsaWMgTW9ua2V5U291cmNlU2NyaXB0KFN0cmluZyBmaWxlbmFtZSwgbG9uZyB0aHJvdHRsZSkgeworICAgIHB1YmxpYyBNb25rZXlTb3VyY2VTY3JpcHQoUmFuZG9tIHJhbmRvbSwgU3RyaW5nIGZpbGVuYW1lLCBsb25nIHRocm90dGxlLAorICAgICAgICAgICAgYm9vbGVhbiByYW5kb21pemVUaHJvdHRsZSkgewogICAgICAgICBtU2NyaXB0RmlsZU5hbWUgPSBmaWxlbmFtZTsKLSAgICAgICAgbVEgPSBuZXcgTW9ua2V5RXZlbnRRdWV1ZSh0aHJvdHRsZSk7CisgICAgICAgIG1RID0gbmV3IE1vbmtleUV2ZW50UXVldWUocmFuZG9tLCB0aHJvdHRsZSwgcmFuZG9taXplVGhyb3R0bGUpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2FzbS50eHQgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYXNtLnR4dAppbmRleCA5NWE5MDIyLi5kYTAzZjQ3IDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYXNtLnR4dAorKysgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYXNtLnR4dApAQCAtMSw0ICsxLDQgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzsgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIDsKIDsgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiA7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9iYXNoLnR4dCBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9iYXNoLnR4dAppbmRleCBlY2Y1MTBlLi43YTBjYmQ0IDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYmFzaC50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2Jhc2gudHh0CkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL2Jhc2gKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9ic2QvYy50eHQgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYnNkL2MudHh0CmluZGV4IGM1NzRiNGEuLjU2ZTUyOTQgMTAwNjQ0Ci0tLSBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9ic2QvYy50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2JzZC9jLnR4dApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYy50eHQgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYy50eHQKaW5kZXggN2NkNzA4My4uZTNkZDVlZSAxMDA2NDQKLS0tIGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2MudHh0CisrKyBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9jLnR4dApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9qYXZhLnR4dCBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9qYXZhLnR4dAppbmRleCA3Y2Q3MDgzLi5lM2RkNWVlIDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvamF2YS50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2phdmEudHh0CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL21ha2UudHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL21ha2UudHh0CmluZGV4IGU0YjM3NmUuLjAxYTBmZjMgMTAwNjQ0Ci0tLSBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9tYWtlLnR4dAorKysgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvbWFrZS50eHQKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvcGxhaW4udHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3BsYWluLnR4dAppbmRleCA0NTQ5ZWNiLi5kYTk3ZDI5IDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvcGxhaW4udHh0CisrKyBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9wbGFpbi50eHQKQEAgLTEsNCArMSw0IEBACi1Db3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvc2gudHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3NoLnR4dAppbmRleCBlNTMxMzdkLi5mYmU5ZDVlIDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvc2gudHh0CisrKyBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9zaC50eHQKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy94bWwudHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3htbC50eHQKaW5kZXggMmE5ZDJiNi4uYjQ3OTY1NCAxMDA2NDQKLS0tIGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3htbC50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3htbC50eHQKQEAgLTEsMTIgKzEsMTIgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAKICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAorCiAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIAorCiAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCmRpZmYgLS1naXQgYS9ob3N0L3dpbmRvd3MvdXNiL2FuZHJvaWRfd2ludXNiLmluZiBiL2hvc3Qvd2luZG93cy91c2IvYW5kcm9pZF93aW51c2IuaW5mCmluZGV4IGMxZWYzZWYuLmIyZGFmODkgMTAwNzU1Ci0tLSBhL2hvc3Qvd2luZG93cy91c2IvYW5kcm9pZF93aW51c2IuaW5mCisrKyBiL2hvc3Qvd2luZG93cy91c2IvYW5kcm9pZF93aW51c2IuaW5mCkBAIC00Miw2ICs0Miw3IEBACiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF8xOEQxJlBJRF8wRDAyJk1JXzAxDQogJVNpbmdsZUFkYkludGVyZmFjZSUgICAgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUxMQogJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUxMiZNSV8wMQorJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUyMiZNSV8wMQ0KIDsKIDsgRGVsbCdzIE1pbmk1CiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF80MTNDJlBJRF9CMDA3Jk1JXzAxCkBAIC02Myw2ICs2NCw3IEBACiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF8xOEQxJlBJRF8wRDAyJk1JXzAxCiAlU2luZ2xlQWRiSW50ZXJmYWNlJSAgICAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF8xOEQxJlBJRF80RTExDQogJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUxMiZNSV8wMQorJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUyMiZNSV8wMQ0KIDsKIDsgRGVsbCdzIE1pbmk1CiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF80MTNDJlBJRF9CMDA3Jk1JXzAxCmRpZmYgLS1naXQgYS9pZGUvZWNsaXBzZS8uY2xhc3NwYXRoIGIvaWRlL2VjbGlwc2UvLmNsYXNzcGF0aAppbmRleCAxNmY1YjQ0Li5iOGJhNmM1IDEwMDY0NAotLS0gYS9pZGUvZWNsaXBzZS8uY2xhc3NwYXRoCisrKyBiL2lkZS9lY2xpcHNlLy5jbGFzc3BhdGgKQEAgLTcsMTcgKzcsMTcgQEAKIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL0NhbWVyYS9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL0NvbnRhY3RzL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvRW1haWwvc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9Hb29nbGVTZWFyY2gvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9IVE1MVmlld2VyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvTGF1bmNoZXIvc3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9MYXVuY2hlcjIvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9NdXNpYy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL01tcy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL1BhY2thZ2VJbnN0YWxsZXIvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9QaG9uZS9zcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL1F1aWNrU2VhcmNoQm94L3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvU2V0dGluZ3Mvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9Tb3VuZFJlY29yZGVyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvU3RrL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvVXBkYXRlci9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL1ZvaWNlRGlhbGVyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9DYWxlbmRhclByb3ZpZGVyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9Db250YWN0c1Byb3ZpZGVyL3NyYyIvPgpAQCAtMzAsMjQgKzMwLDIxIEBACiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NtZHMvaW5wdXQvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NtZHMvcG0vc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NtZHMvc3ZjL3NyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9jb21tb24vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS9jb25maWcvc2RrIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2dyYXBoaWNzL2phdmEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvaW0vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9rZXlzdG9yZS9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2xvY2F0aW9uL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvbWVkaWEvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9vcGVuZ2wvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9wYWNrYWdlcy9TdWJzY3JpYmVkRmVlZHNQcm92aWRlci9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvc2F4L2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvc2VydmljZXMvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90ZWxlcGhvbnkvamF2YSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0LXJ1bm5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90dHMvamF2YSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0LXJ1bm5lci9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdnBuL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvd2lmaS9qYXZhIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Zwbi9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9wb2xpY2llcy9iYXNlL3Bob25lIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZGV2ZWxvcG1lbnQvc2FtcGxlcy9BcGlEZW1vcy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJkZXZlbG9wbWVudC9zYW1wbGVzL0FwaURlbW9zL3Rlc3RzL3NyYyIvPgpAQCAtOTIsMjUgKzg5LDI0IEBACiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZGFsdmlrL2xpYmNvcmUveC1uZXQvc3JjL21haW4vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImRhbHZpay9saWJjb3JlL3htbC9zcmMvbWFpbi9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0FQUFMvQXBpRGVtb3NfaW50ZXJtZWRpYXRlcy9zcmMvc3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0FQUFMvQnJvd3Nlcl9pbnRlcm1lZGlhdGVzL3NyYy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9FbWFpbF9pbnRlcm1lZGlhdGVzL3NyYy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9NdXNpY19pbnRlcm1lZGlhdGVzL3NyYy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9QaG9uZV9pbnRlcm1lZGlhdGVzL3NyYy9zcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvY29tLmFuZHJvaWQuaW0ucGx1Z2luX2ludGVybWVkaWF0ZXMvc3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0FQUFMvUXVpY2tTZWFyY2hCb3hfaW50ZXJtZWRpYXRlcy9zcmMvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzL3NyYy9jb3JlL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvc3JjL2xvY2F0aW9uL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvc3JjL21lZGlhL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvc3JjL3RlbGVwaG9ueS9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzL3NyYy92cG4vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmtfaW50ZXJtZWRpYXRlcy9zcmMvd2lmaS9qYXZhIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzL3NyYy92cG4vamF2YSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9zZXJ2aWNlc19pbnRlcm1lZGlhdGVzL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL1IiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJleHRlcm5hbC90YWdzb3VwL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImV4dGVybmFsL3Byb3RvYnVmL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImV4dGVybmFsL2dkYXRhL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImV4dGVybmFsL2FwYWNoZS1odHRwL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9ImV4dGVybmFsL2dvb2dsZWNsaWVudC9nb29nbGVjbGllbnQtbGliLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9nb29nbGUtZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvamF2YWxpYi5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZ29vZ2xlbG9naW4tY2xpZW50X2ludGVybWVkaWF0ZXMvamF2YWxpYi5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJwYWNrYWdlcy9hcHBzL0NhbGN1bGF0b3IvYXJpdHktMS4zLjMuamFyIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2dvb2dsZS1jb21tb25faW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9nc2YtY2xpZW50X2ludGVybWVkaWF0ZXMvamF2YWxpYi5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvbW1zLWNvbW1vbl9pbnRlcm1lZGlhdGVzL2phdmFsaWIuamFyIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0icGFja2FnZXMvYXBwcy9DYWxjdWxhdG9yL2FyaXR5LTIuMC4yLmphciIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9hbmRyb2lkX3N0dWJzX2N1cnJlbnRfaW50ZXJtZWRpYXRlcy9jbGFzc2VzIi8+CiA8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2lkZS9lbWFjcy9hbmRyb2lkLWNvbW1vbi5lbCBiL2lkZS9lbWFjcy9hbmRyb2lkLWNvbW1vbi5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJkMDg3Ci0tLSAvZGV2L251bGwKKysrIGIvaWRlL2VtYWNzL2FuZHJvaWQtY29tbW9uLmVsCkBAIC0wLDAgKzEsMTgxIEBACis7OzsgYW5kcm9pZC1jb21tb24uZWwgLS0tIENvbW1vbiBmdW5jdGlvbnMvdmFyaWFibGVzIHRvIGRldiBBbmRyb2lkIGluIEVtYWNzLgorOzsKKzs7IENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cis7OworOzsgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7OyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzs7Cis7OyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOzsKKzs7IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzs7IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7OyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzs7IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzs7IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCis7OzsgQ29tbWVudGFyeToKKzs7Cis7OyBWYXJpYWJsZXMgdG8gY3VzdG9taXplIGFuZCBjb21tb24gZnVuY3Rpb25zIGZvciB0aGUgQW5kcm9pZCBidWlsZAorOzsgc3VwcG9ydCBpbiBFbWFjcy4KKzs7IFRoZXJlIHNob3VsZCBiZSBubyBpbnRlcmFjdGl2ZSBmdW5jdGlvbiBpbiB0aGlzIG1vZHVsZS4KKzs7Cis7OyBZb3UgbmVlZCB0byBoYXZlIGEgcHJvcGVyIGJ1aWxkc3BlYy5tayBmaWxlIGluIHlvdXIgcm9vdCBkaXJlY3RvcnkKKzs7IGZvciB0aGlzIG1vZHVsZSB0byB3b3JrIChzZWUgJFRPUC9idWlsZC9idWlsZHNwZWMubWsuZGVmYXVsdCkuCis7OyBJZiB0aGUgcGF0aCB0aGUgcHJvZHVjdCdzIGZpbGVzL2ltYWdlIHVzZXMgYW4gYSBwcm9kdWN0IGFsaWFzLCB5b3UKKzs7IG5lZWQgdG8gYWRkIGEgbWFwcGluZyBpbiBgYW5kcm9pZC1wcm9kdWN0LWFsaWFzLW1hcCcuIEZvciBpbnN0YW5jZQorOzsgaWYgVEFSR0VUX1BST0RVQ1QgaXMgZm9vIGJ1dCB0aGUgYnVpbGQgZGlyZWN0b3J5IGlzIG91dC90YXJnZXQvcHJvZHVjdC9iYXIsCis7OyB5b3UgbmVlZCB0byBhZGQgYSBtYXBwaW5nIFRhcmdldDpmb28gLT4gQWxpYXM6YmFyCis7OworCis7OzsgQ29kZToKKworKGRlZmdyb3VwIGFuZHJvaWQgbmlsCisgICJTdXBwb3J0IGZvciBhbmRyb2lkIGRldmVsb3BtZW50IGluIEVtYWNzLiIKKyAgOnByZWZpeCAiYW5kcm9pZC0iICAgICAgICAgICAgICAgICAgICA7IEN1cnJlbnRseSB1bnVzZWQuCisgIDp0YWcgICAgIkFuZHJvaWQiCisgIDpncm91cCAgJ3Rvb2xzKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZmN1c3RvbSBhbmRyb2lkLWNvbXBpbGF0aW9uLWpvYnMgMgorICAiTnVtYmVyIG9mIGpvYnMgdXNlZCB0byBkbyBhIGNvbXBpbGF0aW9uICgtaiBvcHRpb24gb2YgbWFrZSkuIgorICA6dHlwZSAnaW50ZWdlcgorICA6Z3JvdXAgJ2FuZHJvaWQpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmY3VzdG9tIGFuZHJvaWQtY29tcGlsYXRpb24tbm8tYnVpbGRlbnYtd2FybmluZyB0CisgICJJZiBub3QgbmlsLCBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBidWlsZCBlbnYgKE1ha2VmaWxlLAorYmFzaCkgZnJvbSB0aGUgY29tcGlsYXRpb24gb3V0cHV0IHNpbmNlIHRoZXkgaW50ZXJmZXJlIHdpdGgKK2BuZXh0LWVycm9yJy4iCisgIDp0eXBlICdib29sZWFuCisgIDpncm91cCAnYW5kcm9pZCkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZjdXN0b20gYW5kcm9pZC1wcm9kdWN0LWFsaWFzLW1hcCBuaWwKKyAgIkFsaXN0IGJldHdlZW4gcHJvZHVjdCB0YXJnZXRzIChkZWNsYXJlZCBpbiBidWlsZHNwZWMubWspIGFuZCBhY3R1YWwKKyBwcm9kdWN0IGJ1aWxkIGRpcmVjdG9yeSB1c2VkIGJ5IGBhbmRyb2lkLXByb2R1Y3QnLgorCitGb3IgaW5zdGFuY2UgaWYgVEFSR0VUX1BST0RVQ1QgaXMgJ2ZvbycgYnV0IHRoZSBidWlsZCBkaXJlY3RvcnkKKyBpcyAnb3V0L3RhcmdldC9wcm9kdWN0L2JhcicsIHlvdSBuZWVkIHRvIGFkZCBhIG1hcHBpbmcgVGFyZ2V0OmZvbyAtPiBBbGlhczpiYXIuIgorICA6dHlwZSAnKHJlcGVhdCAobGlzdCAoc3RyaW5nIDp0YWcgIlRhcmdldCIpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAiQWxpYXMiKSkpCisgIDpncm91cCAnYW5kcm9pZCkKKworKGRlZmNvbnN0IGFuZHJvaWQtb3V0cHV0LWJ1ZmZlci1uYW1lICIqQW5kcm9pZCBPdXRwdXQqIgorICAiTmFtZSBvZiB0aGUgZGVmYXVsdCBidWZmZXIgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmRzLgorVGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2Ygc3VjaCBhIGJ1ZmZlci4iKQorCisoZGVmdW4gYW5kcm9pZC1maW5kLWJ1aWxkLXRyZWUtcm9vdCAoKQorICAiQXNjZW5kIHRoZSBjdXJyZW50IHBhdGggdW50aWwgdGhlIHJvb3Qgb2YgdGhlIGFuZHJvaWQgYnVpbGQgdHJlZSBpcyBmb3VuZC4KK1NpbWlsYXJseSB0byB0aGUgc2hlbGwgZnVuY3Rpb25zIGluIGVudnNldHVwLnNoLCBmb3IgdGhlIHJvb3QgYm90aCAuL01ha2VmaWxlCithbmQgLi9idWlsZC9jb3JlL2VudnNldHVwLm1rIGFyZSBleGl0aW5nIGZpbGVzLgorUmV0dXJuIHRoZSByb290IG9mIHRoZSBidWlsZCB0cmVlLiAgU2lnbmFsIGFuIGVycm9yIGlmIG5vdCBmb3VuZC4iCisgIChsZXQgKChkZWZhdWx0LWRpcmVjdG9yeSBkZWZhdWx0LWRpcmVjdG9yeSkpCisgICAgKHdoaWxlIChhbmQgKD4gKGxlbmd0aCBkZWZhdWx0LWRpcmVjdG9yeSkgMikKKyAgICAgICAgICAgICAgICAobm90IChmaWxlLWV4aXN0cy1wIChjb25jYXQgZGVmYXVsdC1kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2VmaWxlIikpKQorICAgICAgICAgICAgICAgIChub3QgKGZpbGUtZXhpc3RzLXAgKGNvbmNhdCBkZWZhdWx0LWRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQvY29yZS9lbnZzZXR1cC5tayIpKSkpCisgICAgICAoc2V0cSBkZWZhdWx0LWRpcmVjdG9yeQorICAgICAgICAgICAgKHN1YnN0cmluZyBkZWZhdWx0LWRpcmVjdG9yeSAwCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggIlteL10rLyQiIGRlZmF1bHQtZGlyZWN0b3J5KSkpKQorICAgIChpZiAoPiAobGVuZ3RoIGRlZmF1bHQtZGlyZWN0b3J5KSAyKQorICAgICAgICBkZWZhdWx0LWRpcmVjdG9yeQorICAgICAgKGVycm9yICJOb3QgaW4gYSB2YWxpZCBhbmRyb2lkIHRyZWUiKSkpKQorCisoZGVmdW4gYW5kcm9pZC1wcm9qZWN0LXAgKCkKKyAgIlJldHVybiBuaWwgaWYgbm90IGluIGFuIGFuZHJvaWQgYnVpbGQgdHJlZS4iCisgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgIChhbmRyb2lkLWZpbmQtYnVpbGQtdHJlZS1yb290KQorICAgIChlcnJvciBuaWwpKSkKKworKGRlZnVuIGFuZHJvaWQtaG9zdCAoKQorICAiUmV0dXJuIHRoZSA8c3lzdGVtPi08YXJjaD4gc3RyaW5nIChlLmcgbGludXgteDg2KS4KK09ubHkgbGludXggYW5kIGRhcndpbiBvbiB4ODYgYXJjaGl0ZWN0dXJlcyBhcmUgc3VwcG9ydGVkLiIKKyAgKG9yIChzdHJpbmctbWF0Y2ggIng4NiIgc3lzdGVtLWNvbmZpZ3VyYXRpb24pCisgICAgICAoc3RyaW5nLW1hdGNoICJpMzg2IiBzeXN0ZW0tY29uZmlndXJhdGlvbikKKyAgICAgIChlcnJvciAiVW5rbm93biBhcmNoIikpCisgIChvciAoYW5kIChzdHJpbmctbWF0Y2ggImRhcndpbiIgc3lzdGVtLWNvbmZpZ3VyYXRpb24pICJkYXJ3aW4teDg2IikKKyAgICAgIChhbmQgKHN0cmluZy1tYXRjaCAibGludXgiIHN5c3RlbS1jb25maWd1cmF0aW9uKSAibGludXgteDg2IikKKyAgICAgIChlcnJvciAiVW5rbm93biBzeXN0ZW0iKSkpCisKKyhkZWZ1biBhbmRyb2lkLXByb2R1Y3QgKCkKKyAgIlJldHVybiB0aGUgcHJvZHVjdCBidWlsdCBhY2NvcmRpbmcgdG8gdGhlIGJ1aWxkc3BlYy5tay4KK1lvdSBtdXN0IGhhdmUgYnVpbGRzcGVjLm1rIGZpbGUgaW4gdGhlIHRvcCBkaXJlY3RvcnkuCisKK0FkZGl0aW9uYWwgcHJvZHVjdCBhbGlhc2VzIGNhbiBiZSBsaXN0ZWQgaW4gYGFuZHJvaWQtcHJvZHVjdC1hbGlhcy1tYXAnCitpZiB0aGUgcHJvZHVjdCBhY3R1YWxseSBidWlsdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGxpc3RlZAoraW4gYnVpbGRzcGVjLm1rIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0KiAoKGJ1aWxkc3BlYyAoY29uY2F0IChhbmRyb2lkLWZpbmQtYnVpbGQtdHJlZS1yb290KSAiYnVpbGRzcGVjLm1rIikpCisgICAgICAgICAgIChwcm9kdWN0ICh3aXRoLWN1cnJlbnQtYnVmZmVyIChmaW5kLWZpbGUtbm9zZWxlY3QgYnVpbGRzcGVjKQorICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaC1mb3J3YXJkICJUQVJHRVRfUFJPRFVDVDo9IikKKyAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY2FuLXNleHBzIChwb2ludCkgMSkpKSkKKyAgICAgICAgICAgKGFsaWFzIChhc3NvYyBwcm9kdWN0IGFuZHJvaWQtcHJvZHVjdC1hbGlhcy1tYXApKSkKKyAgICAgIDsgUG9zdCBwcm9jZXNzaW5nLCBhZGp1c3QgdGhlIG5hbWVzLgorICAgICAgKGlmIChub3QgYWxpYXMpCisgICAgICAgICAgcHJvZHVjdAorICAgICAgICAobnRoIDEgYWxpYXMpKSkpKQorCisoZGVmdW4gYW5kcm9pZC1wcm9kdWN0LXBhdGggKCkKKyAgIlJldHVybiB0aGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9kdWN0IGRpcmVjdG9yeS4KKworQWRkaXRpb25hbCBwcm9kdWN0IGFsaWFzZXMgY2FuIGJlIGFkZGVkIGluIGBhbmRyb2lkLXByb2R1Y3QtYWxpYXMtbWFwJworaWYgdGhlIHByb2R1Y3QgYWN0dWFsbHkgYnVpbHQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBsaXN0ZWQKK2luIGJ1aWxkc3BlYy5tayIKKyAgKGxldCAoKHBhdGggKGNvbmNhdCAoYW5kcm9pZC1maW5kLWJ1aWxkLXRyZWUtcm9vdCkgIm91dC90YXJnZXQvcHJvZHVjdC8iCisgICAgICAgICAgICAgICAgICAgICAgKGFuZHJvaWQtcHJvZHVjdCkpKSkKKyAgICAod2hlbiAobm90IChmaWxlLWV4aXN0cy1wIHBhdGgpKQorICAgICAgKGVycm9yIChmb3JtYXQgIiVzIGRvZXMgbm90IGV4aXN0LiBJZiBwcm9kdWN0ICVzIG1hcHMgdG8gYW5vdGhlciBvbmUsCithZGQgYW4gZW50cnkgdG8gYW5kcm9pZC1wcm9kdWN0LW1hcC4iIHBhdGggKGFuZHJvaWQtcHJvZHVjdCkpKSkKKyAgICBwYXRoKSkKKworKGRlZnVuIGFuZHJvaWQtZmluZC1ob3N0LWJpbiAoYmluYXJ5KQorICAiUmV0dXJuIHRoZSBmdWxsIHBhdGggdG8gdGhlIGhvc3QgQklOQVJZLgorQmluYXJpZXMgZG9uJ3QgZGVwZW5kIG9uIHRoZSBkZXZpY2UsIGp1c3Qgb24gdGhlIGhvc3QgdHlwZS4KK1RyeSBmaXJzdCB0byBsb2NhdGUgQklOQVJZIGluIHRoZSBvdXQvaG9zdCB0cmVlLiAgRmFsbGJhY2sgdXNpbmcKK3RoZSBzaGVsbCBleGVjIFBBVEggc2V0dXAuIgorICAoaWYgKGFuZHJvaWQtcHJvamVjdC1wKQorICAgICAgKGxldCAoKHBhdGggKGNvbmNhdCAoYW5kcm9pZC1maW5kLWJ1aWxkLXRyZWUtcm9vdCkgIm91dC9ob3N0LyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZHJvaWQtaG9zdCkgIi9iaW4vIiBiaW5hcnkpKSkKKyAgICAgICAgKGlmIChmaWxlLWV4aXN0cy1wIHBhdGgpCisgICAgICAgICAgICBwYXRoCisgICAgICAgICAgKGVycm9yIChjb25jYXQgYmluYXJ5ICIgaXMgbWlzc2luZy4iKSkpKQorICAgIChleGVjdXRhYmxlLWZpbmQgYmluYXJ5KSkpCisKKyhkZWZ1biBhbmRyb2lkLWFkYiAoKQorICAiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBhZGIgZXhlY3V0YWJsZS4KK0lmIG5vdCBpbiB0aGUgYnVpbGQgdHJlZSB1c2UgdGhlIFBBVEggZW52IHZhcmlhYmxlLiIKKyAgKGFuZHJvaWQtZmluZC1ob3N0LWJpbiAiYWRiIikpCisKKyhkZWZ1biBhbmRyb2lkLWZhc3Rib290ICgpCisgICJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGZhc3Rib290IGV4ZWN1dGFibGUuCitJZiBub3QgaW4gdGhlIGJ1aWxkIHRyZWUgdXNlIHRoZSBQQVRIIGVudiB2YXJpYWJsZS4iCisgIDsgRm9yIGZhc3Rib290IC1wIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9kdWN0LCAqbm90KiB0aGUgZnVsbCBwYXRoIHRvCisgIDsgaXRzIGRpcmVjdG9yeSBsaWtlIGFkYiByZXF1ZXN0cyBzb21ldGltZXMuCisgIChjb25jYXQgKGFuZHJvaWQtZmluZC1ob3N0LWJpbiAiZmFzdGJvb3QiKSAiIC1wICIgKGFuZHJvaWQtcHJvZHVjdCkpKQorCisoZGVmdW4gYW5kcm9pZC1hZGItY29tbWFuZCAoY29tbWFuZCAmb3B0aW9uYWwgcHJvZHVjdCkKKyAgIkV4ZWN1dGUgJ2FkYiBDT01NQU5EJy4KK0lmIHRoZSBvcHRpb25hbCBQUk9EVUNUIGlzIG5vdCBuaWwsIC1wIChhbmRyb2lkLXByb2R1Y3QtcGF0aCkgaXMgdXNlZAord2hlbiBhZGIgaXMgaW52b2tlZC4iCisgICh3aGVuIChnZXQtYnVmZmVyIGFuZHJvaWQtb3V0cHV0LWJ1ZmZlci1uYW1lKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGFuZHJvaWQtb3V0cHV0LWJ1ZmZlci1uYW1lCisgICAgICAoZXJhc2UtYnVmZmVyKSkpCisgIChpZiBwcm9kdWN0CisgICAgICAoc2hlbGwtY29tbWFuZCAoY29uY2F0IChhbmRyb2lkLWFkYikgIiAtcCAiIChhbmRyb2lkLXByb2R1Y3QtcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiIGNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLW91dHB1dC1idWZmZXItbmFtZSkKKyAgICAoc2hlbGwtY29tbWFuZCAoY29uY2F0IChhbmRyb2lkLWFkYikgIiAiIGNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUpKSkKKworKGRlZnVuIGFuZHJvaWQtYWRiLXNoZWxsLWNvbW1hbmQgKGNvbW1hbmQpCisgICJFeGVjdXRlICdhZGIgc2hlbGwgQ09NTUFORCcuIgorICAoYW5kcm9pZC1hZGItY29tbWFuZCAoY29uY2F0ICIgc2hlbGwgIiBjb21tYW5kKQorICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLW91dHB1dC1idWZmZXItbmFtZSkpCisKKyhwcm92aWRlICdhbmRyb2lkLWNvbW1vbikKKworOzs7IGFuZHJvaWQtY29tbW9uLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvaWRlL2VtYWNzL2FuZHJvaWQtY29tcGlsZS5lbCBiL2lkZS9lbWFjcy9hbmRyb2lkLWNvbXBpbGUuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3YmM4OAotLS0gL2Rldi9udWxsCisrKyBiL2lkZS9lbWFjcy9hbmRyb2lkLWNvbXBpbGUuZWwKQEAgLTAsMCArMSwxNjYgQEAKKzs7OyBhbmRyb2lkLWNvbXBpbGUuZWwgLS0tIENvbXBpbGUgdGhlIEFuZHJvaWQgc291cmNlIHRyZWUuCis7OworOzsgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzs7Cis7OyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzs7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzs7IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOzsKKzs7ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7OworOzsgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOzsgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzs7IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOzsgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOzsgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKzs7OyBDb21tZW50YXJ5OgorOzsKKzs7IEhlbHBlciBmdW5jdGlvbnMgdG8gY29tcGlsZSBBbmRyb2lkIGZpbGUgd2l0aGluIGVtYWNzLgorOzsgVGhpcyBtb2R1bGUgaWdub3JlcyAnYnVpbGQvZW52c2V0dXAuc2gnIGFuZCBhbnkgZW52aXJvbWVudCBzZXQgYnkgdGhlCis7OyAnbHVuY2gnIHNoZWxsIGZ1bmN0aW9uLgorOzsgSW5zdGVhZCBpdCByZWxpZXMgc29sZWx5IG9uICdidWlsZHNwZWMubWsnLCByZW1lbWJlciB0aGF0IHdoZW4geW91Cis7OyBzd2l0Y2ggY29uZmlndXJhdGlvbi4KKzs7Cis7OyBUaGUgb25seSBpbnRlcmFjdGl2ZSBmdW5jdGlvbiBpcyAnYW5kcm9pZC1jb21waWxlJy4KKzs7IEluIHlvdXIgLmVtYWNzIGxvYWQgdGhpcyBmaWxlIChlLmcgKHJlcXVpcmUgJ2FuZHJvaWQtY29tcGlsZSkpIHRoZW46Cis7OworOzsgICAoYWRkLWhvb2sgJ2MrKy1tb2RlLWhvb2sgJ2FuZHJvaWQtY29tcGlsZSkKKzs7ICAgKGFkZC1ob29rICdqYXZhLW1vZGUtaG9vayAnYW5kcm9pZC1jb21waWxlKQorOzsgYW5kL29yCis7OyAgIChnbG9iYWwtc2V0LWtleSBbZjldICdhbmRyb2lkLWNvbXBpbGUpCis7OworOzsKKzs7IFRPRE86IE1heWJlIHdlIGNvdWxkIGNhY2hlIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBpbGUgZnVuY3Rpb24gaW4KKzs7IGJ1ZmZlciBsb2NhbCB2YXJzLgorCis7OzsgQ29kZToKKworKHJlcXVpcmUgJ2NvbXBpbGUpCisocmVxdWlyZSAnYW5kcm9pZC1jb21tb24pCisKKzs7IE5vIG5lZWQgdG8gYmUgY3VzdG9taXplZC4KKyhkZWZ2YXIgYW5kcm9pZC1jb21waWxlLWlnbm9yZS1yZQorICAiXFwoXlxcKFxcc3dcXHxbL19dXFwpK1xcKE1ha2VmaWxlXFx8XFwubWtcXCk6WzAtOV0rOi4qd2FybmluZ1xcKVxcfFxcKF4vYmluL2Jhc2hcXCkiCisgICJSRSB0byBtYXRjaCBsaW5lIHRvIHN1cHByZXNzIGR1cmluZyBhIGNvbXBpbGF0aW9uLgorRHVyaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGxpbmUgbWF0Y2hpbmcgdGhlIGFib3ZlIHdpbGwgYmUKK3N1cHByZXNzZWQgaWYgYGFuZHJvaWQtY29tcGlsYXRpb24tbm8tYnVpbGRlbnYtd2FybmluZycgaXMgbm9uIG5pbC4iKQorCisoZGVmdW4gYW5kcm9pZC1tYWtlZmlsZS1leGlzdHMtcCAoZGlyZWN0b3J5KQorICAiUmV0dXJuIHQgaWYgYW4gQW5kcm9pZCBtYWtlZmlsZSBleGlzdHMgaW4gRElSRUNUT1JZLiIKKyAgOyBUZXN0IGZvciBBbmRyb2lkLm1rIGZpcnN0OiBtb3JlIGxpa2VseS4KKyAgKG9yIChmaWxlLWV4aXN0cy1wIChjb25jYXQgZGlyZWN0b3J5ICJBbmRyb2lkLm1rIikpCisgICAgICAoZmlsZS1leGlzdHMtcCAoY29uY2F0IGRpcmVjdG9yeSAiTWFrZWZpbGUiKSkpKQorCisoZGVmdW4gYW5kcm9pZC1maW5kLW1ha2VmaWxlICh0b3BkaXIpCisgICJBc2NlbmQgdGhlIGN1cnJlbnQgcGF0aCB1bnRpbCBhbiBBbmRyb2lkIG1ha2VmaWxlIGlzIGZvdW5kLgorTWFrZWZpbGVzIGFyZSBuYW1lZCBBbmRyb2lkLm1rIGV4Y2VwdCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUKK3RoZSBmaWxlIGlzIG5hbWVkIE1ha2VmaWxlLgorVE9QRElSIGlzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgYnVpbGQuCitSZXR1cm4gYSBsaXN0IHdpdGggMiBlbGVtZW50cyAoTUFLRUZJTEVfUEFUSCBJU19ST09UX01BS0VGSUxFKS4KK01BS0VGSUxFX1BBVEggaXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIG1ha2VmaWxlIHdydCBUT1BESVIuCitTaWduYWwgYW4gZXJyb3IgaWYgbm8gTWFrZWZpbGUgd2FzIGZvdW5kLiIKKyAgOzsgVE9ETzogQ291bGQgY2hlY2sgdGhhdCB0b3BkaXIgaXMgdGhlIHN0YXJ0IG9mIGRlZmF1bHQtZGlyZWN0b3J5LgorICAodW5sZXNzICg+IChsZW5ndGggdG9wZGlyKSAyKQorICAgIChlcnJvciAiVG9wZGlyIGludmFsaWQgJXMgZm9yIGN1cnJlbnQgZGlyICVzIiB0b3BkaXIgZGVmYXVsdC1kaXJlY3RvcnkpKQorICAobGV0ICgoZGVmYXVsdC1kaXJlY3RvcnkgZGVmYXVsdC1kaXJlY3RvcnkpCisgICAgICAgIGZpbGUpCisgICAgOzsgQXNjZW5kIHRoZSBwYXRoLgorICAgICh3aGlsZSAoYW5kICg+IChsZW5ndGggZGVmYXVsdC1kaXJlY3RvcnkpIChsZW5ndGggdG9wZGlyKSkKKyAgICAgICAgICAgICAgICAobm90IChhbmRyb2lkLW1ha2VmaWxlLWV4aXN0cy1wIGRlZmF1bHQtZGlyZWN0b3J5KSkpCisgICAgICAoc2V0cSBkZWZhdWx0LWRpcmVjdG9yeQorICAgICAgICAgICAgKHN1YnN0cmluZyBkZWZhdWx0LWRpcmVjdG9yeSAwCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggIlteL10rLyQiIGRlZmF1bHQtZGlyZWN0b3J5KSkpKQorCisgICAgKHdoZW4gKG5vdCAoYW5kcm9pZC1tYWtlZmlsZS1leGlzdHMtcCBkZWZhdWx0LWRpcmVjdG9yeSkpCisgICAgICAoZXJyb3IgIk5vdCBpbiBhIHZhbGlkIGFuZHJvaWQgdHJlZSIpKQorCisgICAgKGlmIChzdHJpbmc9IGRlZmF1bHQtZGlyZWN0b3J5IHRvcGRpcikKKyAgICAgICAgKGxpc3QgIk1ha2VmaWxlIiB0KQorICAgICAgOzsgUmVtb3ZlIHRoZSByb290IGRpciBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGVuYW1lCisgICAgICAoc2V0cSBkZWZhdWx0LWRpcmVjdG9yeSAoc3Vic3RyaW5nIGRlZmF1bHQtZGlyZWN0b3J5IChsZW5ndGggdG9wZGlyKSBuaWwpKQorICAgICAgKHNldHEgZmlsZSAoY29uY2F0IGRlZmF1bHQtZGlyZWN0b3J5ICJBbmRyb2lkLm1rIikpCisgICAgICAobGlzdCBmaWxlIG5pbCkpKSkKKworOzsgVGhpcyBmaWx0ZXIgaXMgcmVnaXN0ZXJlZCBhcyBhIGBjb21waWxhdGlvbi1maWx0ZXItaG9vaycgYW5kIGlzCis7OyBjYWxsZWQgd2hlbiBuZXcgZGF0YSBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgY29tcGlsZSBidWZmZXIuIERvbid0Cis7OyBhc3N1bWUgdGhhdCBvbmx5IG9uZSBsaW5lIGhhcyBiZWVuIGluc2VydGVkLCB0eXBpY2FsbHkgbW9yZSB0aGFuCis7OyBvbmUgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCBkdWUgdG8gc3Rkb3V0IGJ1ZmZlcmluZy4KKzs7Cis7OyBXZSBzdG9yZSBpbiBhIGJ1ZmZlciBsb2NhbCB2YXJpYWJsZSBgYW5kcm9pZC1jb21waWxlLWNvbnRleHQnIGEKKzs7IGxpc3Qgd2l0aCAyIGVsZW1lbnRzLCB0aGUgcHJvY2VzcyBhbmQgcG9pbnQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZgorOzsgdGhlIGxhc3QgaW52b2NhdGlvbi4gVGhlIHByb2Nlc3MgaXMgdXNlZCB0byBkZXRlY3QgYSBuZXcKKzs7IGNvbXBpbGF0aW9uLiBUaGUgcG9pbnQgcG9zaXRpb24gaXMgdXNlZCB0byBsaW1pdCBvdXIgc2VhcmNoLgorOzsKKzs7IE9uIGVudHJ5IChwb2ludCkgaXMgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBibG9jayBpbnNlcnRlZC4KKyhkZWZ1biBhbmRyb2lkLWNvbXBpbGUtZmlsdGVyICgpCisgICJGaWx0ZXIgdG8gZGlzY2FyZCB1bndhbnRlZCBsaW5lcyBmcm9tIHRoZSBjb21waWxhdGlvbiBidWZmZXIuCisKK1RoaXMgZmlsdGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBgY29tcGlsYXRpb24tZmlsdGVyLWhvb2snIGFuZCBpcworY2FsbGVkIHdoZW4gbmV3IGRhdGEgaGFzIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGNvbXBpbGUgYnVmZmVyLgorCitIYXMgZWZmZWN0IG9ubHkgaWYgYGFuZHJvaWQtY29tcGlsYXRpb24tbm8tYnVpbGRlbnYtd2FybmluZycgaXMKK25vdCBuaWwuIgorICA7OyBDdXJyZW50bHkgd2UgYXJlIGxvb2tpbmcgb25seSBmb3IgY29tcGlsYXRpb24gd2FybmluZ3MgZnJvbSB0aGUKKyAgOzsgYnVpbGQgZW52LiBNb3ZlIHRoaXMgdGVzdCBsb3dlciwgbmVhciB0aGUgd2hpbGUgbG9vcCBpZiB3ZQorICA7OyBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY2F0ZWdvcnkgb2YgcmVnZXhwLgorICAod2hlbiBhbmRyb2lkLWNvbXBpbGF0aW9uLW5vLWJ1aWxkZW52LXdhcm5pbmcKKworICAgIDs7IENoZWNrIGlmIGFuZHJvaWQtY29tcGlsZS1jb250ZXh0IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZQorICAgIDs7IHByb2Nlc3MgaGFzIGNoYW5nZWQ6IG5ldyBjb21waWxhdGlvbi4KKyAgICAobGV0ICgocHJvYyAoZ2V0LWJ1ZmZlci1wcm9jZXNzIChjdXJyZW50LWJ1ZmZlcikpKSkKKyAgICAgICh1bmxlc3MgKGFuZCAobG9jYWwtdmFyaWFibGUtcCAnYW5kcm9pZC1jb21waWxlLWNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgKGVxIHByb2MgKGNhZHIgYW5kcm9pZC1jb21waWxlLWNvbnRleHQpKSkKKyAgICAgICAgKHNldHEgYW5kcm9pZC1jb21waWxlLWNvbnRleHQgKGxpc3QgKHBvaW50LW1pbikgcHJvYykpCisgICAgICAgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdhbmRyb2lkLWNvbXBpbGUtY29udGV4dCkpKQorCisgICAgKGxldCAoKGJlZyAoY2FyIGFuZHJvaWQtY29tcGlsZS1jb250ZXh0KSkKKyAgICAgICAgICAoZW5kIChwb2ludCkpKQorICAgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAgIChnb3RvLWNoYXIgYmVnKQorICAgICAgICA7OyBOZWVkIHRvIGdvIGJhY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSBiZWZvcmUgd2UKKyAgICAgICAgOzsgc3RhcnQgdGhlIHNlYXJjaDogYmVjYXVzZSBvZiB0aGUgYnVmZmVyaW5nLCB0aGUgcHJldmlvdXMKKyAgICAgICAgOzsgYmxvY2sgaW5zZXJ0ZWQgbWF5IGhhdmUgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgOzsgZXhwcmVzc2lvbiB3ZSBhcmUgdHJ5aW5nIHRvIG1hdGNoLiBBcyByZXN1bHQgd2UgbWlzc2VkIGl0CisgICAgICAgIDs7IGxhc3QgdGltZSBhbmQgd2Ugd291bGQgbWlzcyBpdCBhZ2FpbiBpZiB3ZSBzdGFydGVkIGp1c3QKKyAgICAgICAgOzsgd2hlcmUgd2UgbGVmdCBvZi4gQnkgcHJvY2Vzc2luZyB0aGUgbGluZSBmcm9tIHRoZSBzdGFydCB3ZQorICAgICAgICA7OyBhcmUgY2F0Y2hpbmcgdGhhdCBjYXNlLgorICAgICAgICAoZm9yd2FyZC1saW5lIDApCisgICAgICAgICh3aGlsZSAoc2VhcmNoLWZvcndhcmQtcmVnZXhwIGFuZHJvaWQtY29tcGlsZS1pZ25vcmUtcmUgZW5kIHQpCisgICAgICAgICAgOzsgTnVrZSB0aGUgbGluZQorICAgICAgICAgIChsZXQgKChib2wgKHBvaW50LWF0LWJvbCkpKQorICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKQorICAgICAgICAgICAgKGRlbGV0ZS1yZWdpb24gYm9sIChwb2ludCkpKSkpCisgICAgICA7OyBSZW1lbWJlciB0aGUgbmV3IGVuZCBmb3IgbmV4dCB0aW1lIGFyb3VuZC4KKyAgICAgIChzZXRjYXIgYW5kcm9pZC1jb21waWxlLWNvbnRleHQgKHBvaW50KSkpKSkKKworKGRlZnVuIGFuZHJvaWQtY29tcGlsZSAoKQorICAiRWxpc3AgZXF1aXZhbGVudCBvZiBtbSBzaGVsbCBmdW5jdGlvbi4KK1dhbGsgdXAgdGhlIHBhdGggdW50aWwgYSBtYWtlZmlsZSBpcyBmb3VuZCBhbmQgYnVpbGQgaXQuCitZb3UgbmVlZCB0byBoYXZlIGEgcHJvcGVyIGJ1aWxkc3BlYy5tayBpbiB5b3VyIHRvcCBkaXIuCisKK1VzZSBgYW5kcm9pZC1jb21waWxhdGlvbi1qb2JzJyB0byBjb250cm9sIHRoZSBudW1iZXIgb2Ygam9icyB1c2VkCitpbiBhIGNvbXBpbGF0aW9uLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKGFuZHJvaWQtcHJvamVjdC1wKQorICAgICAgKGxldCogKCh0b3BkaXIgKGFuZHJvaWQtZmluZC1idWlsZC10cmVlLXJvb3QpKQorICAgICAgICAgICAgIChtYWtlZmlsZSAoYW5kcm9pZC1maW5kLW1ha2VmaWxlIHRvcGRpcikpCisgICAgICAgICAgICAgKG9wdGlvbnMKKyAgICAgICAgICAgICAgKGNvbmNhdCAiIC1qICIgKG51bWJlci10by1zdHJpbmcgYW5kcm9pZC1jb21waWxhdGlvbi1qb2JzKSkpKQorICAgICAgICAodW5sZXNzIChmaWxlLWV4aXN0cy1wIChjb25jYXQgdG9wZGlyICJidWlsZHNwZWMubWsiKSkKKyAgICAgICAgICAoZXJyb3IgImJ1aWxkc3BlYy5tayBtaXNzaW5nIGluICVzLiIgdG9wZGlyKSkKKyAgICAgICAgOzsgQWRkLWhvb2sgZG8gbm90IHJlLWFkZCBpZiBhbHJlYWR5IHByZXNlbnQuIFRoZSBjb21waWxlCisgICAgICAgIDs7IGZpbHRlciBob29rcyBydW4gYWZ0ZXIgdGhlIGNvbWludCBjbGVhbnVwICheTSkuCisgICAgICAgIChhZGQtaG9vayAnY29tcGlsYXRpb24tZmlsdGVyLWhvb2sgJ2FuZHJvaWQtY29tcGlsZS1maWx0ZXIpCisgICAgICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbXBpbGUtY29tbWFuZCkKKyAgICAgICAgICAgICAoaWYgKGNhZHIgbWFrZWZpbGUpCisgICAgICAgICAgICAgICAgIDs7IFRoZSByb290IE1ha2VmaWxlIGlzIG5vdCBpbnZva2VkIHVzaW5nIE9ORV9TSE9UX01BS0VGSUxFLgorICAgICAgICAgICAgICAgICAoY29uY2F0ICJtYWtlIC1DICIgdG9wZGlyIG9wdGlvbnMpIDsgQnVpbGQgdGhlIHdob2xlIGltYWdlLgorICAgICAgICAgICAgICAgKGNvbmNhdCAiT05FX1NIT1RfTUFLRUZJTEU9IiAoY2FyIG1ha2VmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAiIG1ha2UgLUMgIiB0b3BkaXIgb3B0aW9ucyAiIGZpbGVzICIpKSkKKyAgICAgICAgKGlmIChpbnRlcmFjdGl2ZS1wKQorICAgICAgICAgICAgKGNhbGwtaW50ZXJhY3RpdmVseSAnY29tcGlsZSkpKSkpCisKKyhwcm92aWRlICdhbmRyb2lkLWNvbXBpbGUpCisKKzs7OyBhbmRyb2lkLWNvbXBpbGUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9pZGUvZW1hY3MvYW5kcm9pZC1ob3N0LmVsIGIvaWRlL2VtYWNzL2FuZHJvaWQtaG9zdC5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIzMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvaWRlL2VtYWNzL2FuZHJvaWQtaG9zdC5lbApAQCAtMCwwICsxLDEyMiBAQAorOzs7IGFuZHJvaWQtaG9zdC5lbCAtLS0gTW9kdWxlIHRvIHVzZSBob3N0IGJpbmFyaWVzIGZyb20gYW4gQW5kcm9pZCBkZXYgdHJlZS4KKzs7Cis7OyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorOzsKKzs7IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOzsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOzsgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7OworOzsgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzs7Cis7OyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7OyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOzsgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7OyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7OyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworOzs7IENvbW1lbnRhcnk6Cis7OworOzsgVGhpcyBtb2R1bGUgZGVmaW5lcyBpbnRlcmFjdGl2ZSBmdW5jdGlvbnMgdG8gc2VuZCB0aGUgbW9zdCBjb21tb24KKzs7IGNvbW1hbmRzIHRvIGEgZGV2aWNlLgorOzsKKzs7IEN1cnJlbnRseSBvbmx5IG9uZSBkZXZpY2UgaXMgc3VwcG9ydGVkLgorOzsKKzs7IEluIHlvdXIgLmVtYWNzIGxvYWQgdGhpcyBmaWxlIChlLmcgKHJlcXVpcmUgJ2FuZHJvaWQtaG9zdCkpIHRoZW4KKzs7IHlvdSBjYW4gZWl0aGVyIGNyZWF0ZSBuZXcgc2hvcnRjdXRzIGUuZzoKKzs7Cis7OyAgIChnbG9iYWwtc2V0LWtleSBbZjhdICdhbmRyb2lkLWFkYi1zeW5jKQorOzsKKzs7IG9yIHJlbHkgb24gYXV0b2NvbXBsZXRpb24gTS14IGFuZC1zeW5jIHdpbGwgZXhwYW5kIHRvCis7OyBNLXggIGFuZHJvaWQtYWRiLXN5bmMKKzs7Cis7OyBCeSBkZWZhdWx0IHRoZSBmb2xsb3dpbmcga2V5IGJpbmRpbmdzIGFyZSBhY3RpdmU6Cis7OyBDLXggYSBhIGFuZHJvaWQtYWRiLXJvb3QKKzs7IEMteCBhIHIgYW5kcm9pZC1hZGItcmVtb3VudAorOzsgQy14IGEgcyBhbmRyb2lkLWFkYi1zeW5jCis7OyBDLXggYSBiIGFuZHJvaWQtYWRiLXNoZWxsLXJlYm9vdC1ib290bG9hZGVyCis7OyBDLXggYSBmIGFuZHJvaWQtZmFzdGJvb3QtZmxhc2hhbGwKKzs7Cis7OyBhbmRyb2lkLWZhc3Rib290LWZsYXNoYWxsIGlzIHN0aWxsIHdvcmsgaW4gcHJvZ3Jlc3MsIGNoZWNrIHRoZQorOzsgYXNzb2NpYXRlZCBidWZmZXIgKCpBbmRyb2lkIE91dHB1dCopIGZvciBlcnJvcnMgd2hlbiB5b3UgdXNlIGl0LgorCis7OzsgQ29kZToKKworKHJlcXVpcmUgJ2FuZHJvaWQtY29tbW9uKQorCisoZGVmdmFyIGFuZHJvaWQtaG9zdC1jb21tYW5kLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKKworKGRlZnVuIGFuZHJvaWQtaG9zdC1rZXktcHJlZml4LXNldCAodmFyIHZhbCkKKyAgIkJpbmQgdGhlIGtleXMgc2hvcnRjdXRzIHRvIHRoZSBmdW5jdGlvbnMuaSIKKyAgOzsgVE9ETzogVGhpcyBzaG91bGQgZ28gaW4gYSBtaW5vciBtb2RlIGtleW1hcCBpbnN0ZWFkIG9mCisgIDs7IG1lc3Npbmcgd2l0aCB0aGUgZ2xvYmFsIG9uZS4KKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCAocmVhZC1rYmQtbWFjcm8gdmFsKSBhbmRyb2lkLWhvc3QtY29tbWFuZC1tYXApCisgIChjdXN0b20tc2V0LWRlZmF1bHQgdmFyIHZhbCkpCisKKyhsZXQgKChtYXAgYW5kcm9pZC1ob3N0LWNvbW1hbmQtbWFwKSkKKyAgKGRlZmluZS1rZXkgbWFwIChrYmQgImEiKSAnYW5kcm9pZC1hZGItcm9vdCkKKyAgKGRlZmluZS1rZXkgbWFwIChrYmQgInIiKSAnYW5kcm9pZC1hZGItcmVtb3VudCkKKyAgKGRlZmluZS1rZXkgbWFwIChrYmQgInMiKSAnYW5kcm9pZC1hZGItc3luYykKKyAgKGRlZmluZS1rZXkgbWFwIChrYmQgImIiKSAnYW5kcm9pZC1hZGItc2hlbGwtcmVib290LWJvb3Rsb2FkZXIpCisgIChkZWZpbmUta2V5IG1hcCAoa2JkICJmIikgJ2FuZHJvaWQtZmFzdGJvb3QtZmxhc2hhbGwpKQorCisoZGVmY3VzdG9tIGFuZHJvaWQtaG9zdC1rZXktcHJlZml4ICJDLXggYSIKKyAgIlByZWZpeCBrZXlzdHJva2VzIGZvciBBbmRyb2lkIGNvbW1hbmRzLiIKKyAgOmdyb3VwICdhbmRyb2lkCisgIDp0eXBlICdzdHJpbmcKKyAgOnNldCAnYW5kcm9pZC1ob3N0LWtleS1wcmVmaXgtc2V0KQorCisoZGVmdW4gYW5kcm9pZC1hZGItcmVtb3VudCAoKQorICAiRXhlY3V0ZSAnYWRiIHJlbW91bnQnLiIKKyAgKGludGVyYWN0aXZlKQorICAoYW5kcm9pZC1hZGItY29tbWFuZCAicmVtb3VudCIpKQorCisoZGVmdW4gYW5kcm9pZC1hZGItcm9vdCAoKQorICAiRXhlY3V0ZSAnYWRiIHJvb3QnLiIKKyAgKGludGVyYWN0aXZlKQorICAoYW5kcm9pZC1hZGItY29tbWFuZCAicm9vdCIpKQorCisoZGVmdW4gYW5kcm9pZC1hZGItc2hlbGwtcmVib290LWJvb3Rsb2FkZXIgKCkKKyAgIkV4ZWN1dGUgJ2FkYiBzaGVsbCByZWJvb3QgYm9vdGxvYWRlcicuIgorICAoaW50ZXJhY3RpdmUpCisgIChhbmRyb2lkLWFkYi1zaGVsbC1jb21tYW5kICJyZWJvb3QgYm9vdGxvYWRlciIpKQorCisoZGVmdW4gYW5kcm9pZC1hZGItc3luYyAoKQorICAiRXhlY3V0ZSAnYWRiIHN5bmMnLiIKKyAgKGludGVyYWN0aXZlKQorICA7OyBBbHdheXMgZm9yY2Ugcm9vdCBhbmQgcmVtb3VudCwgdGhpcyB3YXkgc3luYyBhbHdheXMgd29ya3MgZXZlbiBvbgorICA7OyBhIGRldmljZSB0aGF0IGhhcyBqdXN0IHJlYm9vdGVkIG9yIHRoYXQgcnVucyBhIHVzZXJkZWJ1ZyBidWlsZC4KKyAgKGFuZHJvaWQtYWRiLXJvb3QpCisgIChhbmRyb2lkLWFkYi1yZW1vdW50KQorICAoYW5kcm9pZC1hZGItY29tbWFuZCAic3luYyIgJ3ApKQorCisoZGVmdW4gYW5kcm9pZC1mYXN0Ym9vdC1zZW50aW5lbCAocHJvY2VzcyBldmVudCkKKyAgIkNhbGxlZCB3aGVuIHRoZSBmYXN0Ym9vdCBwcm9jZXNzIGlzIGRvbmUuIgorICA7OyBUT0RPOiBTaG91bGQgYmFyZiBpZiB0aGUgbGFzdCBsaW5lcyBhcmUgbm90OgorICA7OyAgIE9LQVkKKyAgOzsgICByZWJvb3RpbmcuLi4KKyAgKHByaW5jCisgICAoZm9ybWF0ICJQcm9jZXNzOiAlcyBoYWQgdGhlIGV2ZW50IGAlcyciIHByb2Nlc3MgZXZlbnQpKSkKKworKGRlZnVuIGFuZHJvaWQtZmFzdGJvb3QtZmxhc2hhbGwgKGFyZykKKyAgIkV4ZWN1dGUgJ2Zhc3Rib290IC1wIDxwcm9kdWN0PiBmbGFzaGFsbCcuCisKK1dpdGggbm8gQVJHLCBkb24ndCB3aXBlIHRoZSB1c2VyIGRhdGEuCitXaXRoIEFSRywgd2lwZSB0aGUgdXNlciBkYXRhLiIKKyAgKGludGVyYWN0aXZlICJQIikKKyAgKHdoZW4gKGdldC1idWZmZXIgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUKKyAgICAgIChlcmFzZS1idWZmZXIpKSkKKyAgKGxldCAoKHByb2MKKyAgICAgICAgIChpZiBhcmcKKyAgICAgICAgICAgICAoc3RhcnQtcHJvY2Vzcy1zaGVsbC1jb21tYW5kCisgICAgICAgICAgICAgICJmYXN0Ym9vdCIKKyAgICAgICAgICAgICAgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUKKyAgICAgICAgICAgICAgKGNvbmNhdCAoYW5kcm9pZC1mYXN0Ym9vdCkgIiBmbGFzaGFsbCAtdyIpKQorICAgICAgICAgICAoc3RhcnQtcHJvY2Vzcy1zaGVsbC1jb21tYW5kCisgICAgICAgICAgICAiZmFzdGJvb3QiIGFuZHJvaWQtb3V0cHV0LWJ1ZmZlci1uYW1lCisgICAgICAgICAgICAoY29uY2F0IChhbmRyb2lkLWZhc3Rib290KSAiIGZsYXNoYWxsIikpKSkpCisgICAgKHNldC1wcm9jZXNzLXNlbnRpbmVsIHByb2MgJ2FuZHJvaWQtZmFzdGJvb3Qtc2VudGluZWwpKSkKKworCisocHJvdmlkZSAnYW5kcm9pZC1ob3N0KQorOzs7IGFuZHJvaWQtaG9zdC5lbCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL25kay9hcHBzL3Nhbi1hbmdlbGVzL3Byb2plY3QvcmVzL2xheW91dC9tYWluLnhtbCBiL25kay9hcHBzL3Nhbi1hbmdlbGVzL3Byb2plY3QvcmVzL2xheW91dC9tYWluLnhtbAppbmRleCAyNWRiZjZkLi5jYTE5YTE4IDEwMDY0NAotLS0gYS9uZGsvYXBwcy9zYW4tYW5nZWxlcy9wcm9qZWN0L3Jlcy9sYXlvdXQvbWFpbi54bWwKKysrIGIvbmRrL2FwcHMvc2FuLWFuZ2VsZXMvcHJvamVjdC9yZXMvbGF5b3V0L21haW4ueG1sCkBAIC0xLDExICsxLDExIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICA+CiA8VGV4dFZpZXcgIAotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAogICAgIGFuZHJvaWQ6dGV4dD0iSGVsbG8gV29ybGQsIERlbW9BY3Rpdml0eSIKICAgICAvPgpkaWZmIC0tZ2l0IGEvcGRrL1Bkay5tayBiL3Bkay9QZGsubWsKaW5kZXggNTI2ODM4NC4uZDE5YjM0MiAxMDA2NDQKLS0tIGEvcGRrL1Bkay5taworKysgYi9wZGsvUGRrLm1rCkBAIC01NCw3ICs1NCw3IEBACiBwZGtfY2FtZXJhX2RpciA6PSBmcmFtZXdvcmtzL2Jhc2UvaW5jbHVkZS91aQogCiAjIERlc3RpbmF0aW9uIGRpcmVjdG9yeSBmb3IgZG9jcyAodGVtcGxhdGVzICsgZG94eWdlbmF0ZWQgaGVhZGVycykKLXBka19kb2NzX2Rlc3RfZGlyIDo9ICQocGRrX2RvY3NfaW50ZXJtZWRpYXRlcykvZG9jcy9ndWlkZQorcGRrX2RvY3NfZGVzdF9kaXIgOj0gJChwZGtfZG9jc19pbnRlcm1lZGlhdGVzKS9kb2NzL3BvcnRpbmcKIHBka19hcHBfZW5nX3Jvb3QgOj0gJChwZGtfZG9jc19pbnRlcm1lZGlhdGVzKS9kb2NzCiAKICMgV29ya2luZyBkaXJlY3RvcnkgZm9yIHNvdXJjZSB0byBiZSBkb3h5Z2VuYXRlZApAQCAtMTg4LDEyICsxODgsMTIgQEAKIExPQ0FMX01PRFVMRSA6PSBvbmxpbmUtcGRrCiAKIExPQ0FMX0RST0lERE9DX09QVElPTlM6PSBcCi0JCS10b3Jvb3QgL29ubGluZS1wZGsvIFwKKwkJLXRvcm9vdCAvIFwKIAkJLWhkZiBhbmRyb2lkLndoaWNoZG9jIG9ubGluZSBcCiAJCS1oZGYgYW5kcm9pZC53aGljaG1vZHVsZSAkKExPQ0FMX01PRFVMRSkKIAogTE9DQUxfRFJPSURET0NfQ1VTVE9NX1RFTVBMQVRFX0RJUiA6PSBidWlsZC90b29scy9kcm9pZGRvYy90ZW1wbGF0ZXMtcGRrCi1MT0NBTF9EUk9JRERPQ19DVVNUT01fQVNTRVRfRElSIDo9IGFzc2V0cy1wZGsKK0xPQ0FMX0RST0lERE9DX0NVU1RPTV9BU1NFVF9ESVIgOj0gYXNzZXRzCiAKIGluY2x1ZGUgJChCVUlMRF9EUk9JRERPQykKIApAQCAtMjA1LDEwICsyMDUsNiBAQAogCUBlY2hvICJQREs6ICRAIgogCSQoY29weS1maWxlLXRvLXRhcmdldC13aXRoLWNwKQogCi0kKE9VVF9ET0NTKS9wZGsucHk6ICQocGRrX2hvc3RpbmdfZGlyKS9wZGsucHkKLQlAZWNobyAiUERLOiAkQCIKLQkkKGNvcHktZmlsZS10by10YXJnZXQtd2l0aC1jcCkKLQogIyBOYW1lIHRoZSB0YXIgZmlsZXMKIG5hbWUgOj0gYW5kcm9pZF9wZGtfZG9jcy0kKFJFUVVFU1RFRF9QUk9EVUNUKQogaWZlcSAoJChUQVJHRVRfQlVJTERfVFlQRSksZGVidWcpCkBAIC0yMzIsMTEgKzIyOCwxMSBAQAogCSQoaGlkZSkgZ3ppcCAtY2YgJDwgPiAkQAogCiAjIHRhciB1cCBhbGwgdGhlIGZpbGVzIHRvIG1ha2UgdGhlIHBkayBkb2NzLgotJChwZGtfZG9jc190YXJmaWxlKTogJChET0NTX09VVF9ESVIpLXRpbWVzdGFtcCAkKE9VVF9ET0NTKS9hcHAueWFtbCAkKE9VVF9ET0NTKS9wZGsucHkKKyQocGRrX2RvY3NfdGFyZmlsZSk6ICQoRE9DU19PVVRfRElSKS10aW1lc3RhbXAgJChPVVRfRE9DUykvYXBwLnlhbWwKIAlAZWNobyAiUERLIGRvY3M6ICRAIgogCUBta2RpciAtcCAkKGRpciAkQCkKIAlAcm0gLWYgJEAKLQkkKGhpZGUpIHRhciByZiAkQCAtQyAkKE9VVF9ET0NTKSAkKExPQ0FMX01PRFVMRSkgcGRrLnB5ICBhcHAueWFtbAorCSQoaGlkZSkgdGFyIHJmICRAIC1DICQoT1VUX0RPQ1MpICQoTE9DQUxfTU9EVUxFKSBhcHAueWFtbAogCiAjIERlYnVnZ2luZyByZXBvcnRpbmcgY2FuIGdvIGhlcmUsIGFkZCBpdCBhcyBhIHRhcmdldCB0byBnZXQgb3V0cHV0LgogcGRrX2RlYnVnOgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvQ0hBTkdFX0hJU1RPUlkuVFhUIGIvcGRrL2RvY3MvQ0hBTkdFX0hJU1RPUlkuVFhUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzNzlhYWRlLi4wMDAwMDAwCi0tLSBhL3Bkay9kb2NzL0NIQU5HRV9ISVNUT1JZLlRYVAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVYgMC45IE1XUiBBcHIgNiwgMjAwOQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSogTmV3IGZpbGVzIGZvciBuZXcgY3NzIGZpbGVzIHVzaW5nIGRyb2lkZG9jL2NsZWFyc2lsdmVyCi0KLVYgMC4zIC0gSnVuZSA5LCAyMDA4DQotIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi0qIEFyY2hpdGVjdHVyYWwgZGlhZ3JhbXMgbm93IGluY2x1ZGUgYSBsZWdlbmQgdGhhdCBkZXNjcmliZXMgdGhlIGRpZmZlcmVuY2UgDQotICBiZXR3ZWVuIHNvbGlkIGFuZCBkYXNoZWQgZWxlbWVudHMNCi0NCi0qIFJlbW92ZWQgUHVwcGV0bWFzdGVyIGRvY3VtZW50DQotDQotKiBSZW1vdmVkIGV4dGVybmFsIGxpbmsgdG8gQW5kcm9pZCBBcmNoaXRlY3R1cmUgZnJvbSB0aGUgbGVmdCBuYXZpZ2F0aW9uIGJhcg0KLQ0KLSogc21hbGwgY2hhbmdlcyB0byBSYWRpbyBMYXllciBJbnRlcmZhY2UNCi0NCi0qIFVwZGF0ZWQgSG9zdCBTeXN0ZW0gU2V0dXAgKHNvdXJjZV9zZXR1cF9ndWlkZS5odG1sKSB0byBpbmNsdWRlIG1lbnRpb24gb2YgTGludXggOC4wNCBhbmQgQ3lnd2luLg0KLQ0KLSogVXBkYXRlZCBCdWlsZCBTeXN0ZW0gKGJ1aWxkX3N5c3RlbS5odG1sKTogU3dpdGNoZWQgRGV2aWNlIGNvZGUgb3B0aW9ucyAxICYgMiB0byBlbXBoYXNpemUgdGhhdCANCi0gIHRoZSBuZXcgZmlyc3Qgb3B0aW9uIHlpZWxkcyBtb3JlIGNvbnNpc3RlbnQgcmVzdWx0cy4gDQotDQotKiBVcGRhdGVkIEJyaW5nIFVwIChicmluZ191cC5odG1sKTogcmVtb3ZlZCAiaG90cGx1Z2QiIGZyb20gc3RlcCA3LgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvUkVBRE1FIGIvcGRrL2RvY3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4M2Q4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9SRUFETUUKQEAgLTAsMCArMSwxNSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHNvdXJjZSBmb3IgdGhlIHNvdXJjZS5hbmRyb2lkLmNvbSBzaXRlIGNvbnRlbnRzLgorVGhlIFBsYXRmb3JtIERldmVsb3BtZW50IEtpdCAoUERLLCBhIHNldCBvZiB0b29scyBmb3IgdGhlIGNvbnZlbmllbmNlIG9mCitlbmdpbmVlcnMgZG9pbmcgYnVpbGRpbmcgZGV2aWNlcykgaXMgYWxzbyBidWlsdCBhcyBwYXJ0IG9mIHRoZSBzaXRlIGJ1aWxkLgorCitTdWJkaXJlY3RvcmllcyBpbmNsdWRlOgorICBhYm91dCAtLSBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAgY29tbXVuaXR5IC0tIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBT1NQIG1haWxpbmcgbGlzdHMKKyAgY29tcGF0aWJpbGl0eSAtLSBpbmZvcm1hdGlvbiBhYm91dCBidWlsZGluZyBjb21wYXRpYmxlIGRldmljZXMKKyAgZG93bmxvYWRzIC0tIGxpbmtzIHRvIGRvd25sb2FkIGZpbGVzIG9mIGludGVyZXN0CisgIGltYWdlcyAtLSBpbWFnZXMgdXNlZCBpbiBkb2NzOyBub3RlOiB0aGlzIGlzIE5PVCBmb3IgVUkgYXNzZXRzL3NraW5zCisgIHBvcnRpbmcgLS0gdGlwcyAmIGd1aWRlcyBmb3IgcG9ydGluZyB0aGUgQW5kcm9pZCBzb3VyY2UgdG8gaGFyZHdhcmUKKyAgc291cmNlIC0tIGhvdyB0byBhY2Nlc3MgJiB1c2UgdGhlIEFuZHJvaWQgc291cmNlCisKK1RoaXMgZGlyZWN0b3J5IG9yaWdpbmF0ZWQgYXMgdGhlIFBESyBob21lIChoZW5jZSB0aGUgbmFtZSkgYW5kIGdyZXcgdG8KK2VuY29tcGFzcyBzb3VyY2UuYW5kcm9pZC5jb20uCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9hYm91dC9hYm91dF90b2MuY3MgYi9wZGsvZG9jcy9hYm91dC9hYm91dF90b2MuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3NmFjZQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2Fib3V0L2Fib3V0X3RvYy5jcwpAQCAtMCwwICsxLDE4IEBACis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorPCEtLQorZnVuY3Rpb24gbm90aGluZygpIHt9CistLT4KKzwvc2NyaXB0PgorCis8dWw+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PmFib3V0L3BoaWxvc29waHkuaHRtbCI+UHJvamVjdCBQaGlsb3NvcGh5PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9pbmRleC5odG1sIj5HZXR0aW5nIEludm9sdmVkPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PmNvbXBhdGliaWxpdHkvaW5kZXguaHRtbCI+Q29tcGF0aWJpbGl0eTwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvbGljZW5zZXMuaHRtbCI+TGljZW5zaW5nIEluZm9ybWF0aW9uPC9hPjwvbGk+Cis8L3VsPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cis8IS0tCisgICAgYnVpbGRUb2dnbGVMaXN0cygpOworLy8tLT4KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvYWJvdXQvaW5kZXguamQgYi9wZGsvZG9jcy9hYm91dC9pbmRleC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjk4YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvYWJvdXQvaW5kZXguamQKQEAgLTAsMCArMSwyMCBAQAorcGFnZS50aXRsZT1BYm91dCB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Citkb2MudHlwZT1hYm91dAorZG9jLmhpZGVuYXY9dHJ1ZQorQGpkOmJvZHkKKzxwPkFuZHJvaWQgaXMgYW4gb3Blbi1zb3VyY2Ugc29mdHdhcmUgc3RhY2sgY3JlYXRlZCBmb3IgbW9iaWxlIHBob25lcyBhbmQKK290aGVyIGRldmljZXMuICBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IChBT1NQKSBpcyB0YXNrZWQgd2l0aCB0aGUKK21haW50ZW5hbmNlIGFuZCBmdXJ0aGVyIGRldmVsb3BtZW50IG9mIEFuZHJvaWQuIE1hbnkgZGV2aWNlIG1hbnVmYWN0dXJlcnMgaGF2ZQorYnJvdWdodCB0byBtYXJrZXQgZGV2aWNlcyBydW5uaW5nIEFuZHJvaWQsIGFuZCB0aGV5IGFyZSByZWFkaWJseSBhdmFpbGFibGUKK2Fyb3VuZCB0aGUgd29ybGQuPC9wPgorPHA+T3VyIHByaW1hcnkgcHVycG9zZSBpcyB0byBidWlsZCBhbiBleGNlbGxlbnQgc29mdHdhcmUgcGxhdGZvcm0gZm9yIGV2ZXJ5ZGF5Cit1c2Vycy4gQSBudW1iZXIgb2YgY29tcGFuaWVzIGhhdmUgY29tbWl0dGVkIG1hbnkgZW5naW5lZXJzIHRvIGFjaGlldmUgdGhpcworZ29hbCwgYW5kIHRoZSByZXN1bHQgaXMgYSBmdWxsIHByb2R1Y3Rpb24gcXVhbGl0eSBjb25zdW1lciBwcm9kdWN0IHdob3NlCitzb3VyY2UgaXMgb3BlbiBmb3IgY3VzdG9taXphdGlvbiBhbmQgcG9ydGluZy48L3A+Cis8cD5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBBbmRyb2lkIGZyb20gdGhlc2UgcGFnZXM6PC9wPgorPHVsPgorICA8bGk+PGEgaHJlZj0ie0Bkb2NSb290fWFib3V0L3BoaWxvc29waHkuaHRtbCI+T3VyIFByb2plY3QgUGhpbG9zb3BoeSBhbmQgR29hbHM8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvaW5kZXguaHRtbCI+SW50ZXJhY3Rpbmcgd2l0aCB0aGUgUHJvamVjdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0ie0Bkb2NSb290fWNvbXBhdGliaWxpdHkvaW5kZXguaHRtbCI+QW5kcm9pZCBDb21wYXRpYmlsaXR5PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2xpY2Vuc2VzLmh0bWwiPkxpY2Vuc2luZyBJbmZvcm1hdGlvbjwvYT48L2xpPgorPC91bD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2Fib3V0L3BoaWxvc29waHkuamQgYi9wZGsvZG9jcy9hYm91dC9waGlsb3NvcGh5LmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9hYm91dC9waGlsb3NvcGh5LmpkCkBAIC0wLDAgKzEsNzMgQEAKK3BhZ2UudGl0bGU9UGhpbG9zb3BoeSBhbmQgR29hbHMKK2RvYy50eXBlPWFib3V0Citkb2MuaGlkZW5hdj10cnVlCitAamQ6Ym9keQorPHA+QW5kcm9pZCBpcyBhbiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBzdGFjayBmb3IgbW9iaWxlIHBob25lcyBhbmQgc2ltaWxhcgorZGV2aWNlcy48L3A+Cis8aDI+T3JpZ2luIGFuZCBHb2FsPC9oMj4KKzxwPkFuZHJvaWQgd2FzIG9yaWdpbmF0ZWQgYnkgYSBncm91cCBvZiBjb21wYW5pZXMga25vd24gYXMgdGhlIE9wZW4gSGFuZHNldAorQWxsaWFuY2UsIGxlZCBieSBHb29nbGUuIFRvZGF5LCBtYW55IGNvbXBhbmllcyAtLSBib3RoIG9yaWdpbmFsIG1lbWJlcnMgb2YgdGhlCitPSEEgYW5kIG90aGVycyAtLSBoYXZlIGludmVzdGVkIGhlYXZpbHkgaW4gQW5kcm9pZCwgdHlwaWNhbGx5IGluIHRoZSBmb3JtIG9mCithbGxvY2F0aW5nIHNpZ25pZmljYW50IGVuZ2luZWVyaW5nIHJlc291cmNlcyB0byBpbXByb3ZlIEFuZHJvaWQgYW5kIGJyaW5nCitBbmRyb2lkIGRldmljZXMgdG8gTWFya2V0LjwvcD4KKzxwPldlIGNyZWF0ZWQgQW5kcm9pZCBpbiByZXNwb25zZSB0byBvdXIgb3duIGV4cGVyaWVuY2VzIGxhdW5jaGluZyBtb2JpbGUKK2FwcHMuIFdlIHdhbnRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSB3b3VsZCBhbHdheXMgYmUgYW4gb3BlbiBwbGF0Zm9ybQorYXZhaWxhYmxlIGZvciBjYXJyaWVycywgT0VNcywgYW5kIGRldmVsb3BlcnMgdG8gdXNlIHRvIG1ha2UgdGhlaXIgaW5ub3ZhdGl2ZQoraWRlYXMgYSByZWFsaXR5LiBXZSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgd2FzIG5vIGNlbnRyYWwgcG9pbnQgb2YKK2ZhaWx1cmUsIHdoZXJlIG9uZSBpbmR1c3RyeSBwbGF5ZXIgY291bGQgcmVzdHJpY3Qgb3IgY29udHJvbCB0aGUgaW5ub3ZhdGlvbnMKK29mIGFueSBvdGhlci4gVGhlIHNvbHV0aW9uIHdlIGNob3NlIHdhcyBhbiBvcGVuIGFuZCBvcGVuLXNvdXJjZSBwbGF0Zm9ybS48L3A+Cis8cD5CdXQgdGhlIHVsdGltYXRlIGdvYWwsIG9mIGNvdXJzZSwgaXMgdG8gaW1wcm92ZSB0aGUgbW9iaWxlIGV4cGVyaWVuY2UgZm9yCityZWFsIHVzZXJzIGJ5IGZhY2lsaXRhdGluZyBpbm5vdmF0aW9uLiBBY2NvcmRpbmdseSwgdGhlIHByaW1hcnkgZ29hbCBvZiB0aGUKK0FPU1AgaXMgdG8gbWFrZSBzdXJlIEFuZHJvaWQgaXMgYSBzdWNjZXNzIGFzIGFuIGVuZCB1c2VyIHByb2R1Y3QuPC9wPgorPGgyPkdvdmVybmFuY2UgUGhpbG9zb3BoeTwvaDI+Cis8cD5UaGUgY29tcGFuaWVzIHRoYXQgaGF2ZSBpbnZlc3RlZCBpbiBBbmRyb2lkIGhhdmUgZG9uZSBzbyBvbiBpdHMgbWVyaXRzLAorYmVjYXVzZSB3ZSBjb2xsZWN0aXZlbHkgYmVsaWV2ZSB0aGF0IGFuIG9wZW4gcGxhdGZvcm0gaXMgbmVjZXNzYXJ5LiBBbmRyb2lkIGlzCitpbnRlbnRpb25hbGx5IGFuZCBleHBsaWNpdGx5IGFuIG9wZW4tc291cmNlIC0tIGFzIG9wcG9zZWQgdG8gZnJlZSBzb2Z0d2FyZSAtLQorZWZmb3J0OiBhIGdyb3VwIG9mIG9yZ2FuaXphdGlvbnMgd2l0aCBzaGFyZWQgbmVlZHMgaGFzIHBvb2xlZAorcmVzb3VyY2VzIHRvIGNvbGxhYm9yYXRlIG9uIGEgc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIGEgc2hhcmVkIHByb2R1Y3QuIAorVGhlIEFuZHJvaWQgcGhpbG9zb3BoeSBpcyBwcmFnbWF0aWMsIGZpcnN0IGFuZCBmb3JlbW9zdC4gVGhlIG9iamVjdGl2ZSBpcworYSBzaGFyZWQgcHJvZHVjdCB0aGF0IGVhY2ggY29udHJpYnV0b3IgY2FuIHRhaWxvciBhbmQgY3VzdG9taXplLjwvcD4KKzxwPlVuY29udHJvbGxlZCBjdXN0b21pemF0aW9uIGNhbiwgb2YgY291cnNlLCBsZWFkIHRvIGluY29tcGF0aWJsZQoraW1wbGVtZW50YXRpb25zLiBUbyBwcmV2ZW50IHRoaXMsIHRoZSBBT1NQIGFsc28gbWFpbnRhaW5zIHRoZSBBbmRyb2lkCitDb21wYXRpYmlsaXR5IFByb2dyYW0sIHdoaWNoIHNwZWxscyBvdXQgd2hhdCBpdCBtZWFucyB0byBiZSAiQW5kcm9pZAorY29tcGF0aWJsZSIsIGFuZCB3aGF0IGlzIHJlcXVpcmVkIG9mIGRldmljZSBidWlsZGVycyB0byBhY2hpZXZlIHRoYXQgc3RhdHVzLgorQW55b25lIGNhbiAoYW5kIHdpbGwhKSB1c2UgdGhlIEFuZHJvaWQgc291cmNlIGNvZGUgZm9yIGFueSBwdXJwb3NlLCBhbmQgd2UKK3dlbGNvbWUgYWxsIHN1Y2ggdXNlcy4gSG93ZXZlciwgaW4gb3JkZXIgdG8gdGFrZSBwYXJ0IGluIHRoZSBzaGFyZWQKK2Vjb3N5c3RlbSBvZiBhcHBsaWNhdGlvbnMgdGhhdCB3ZSBhcmUgYnVpbGRpbmcgYXJvdW5kIEFuZHJvaWQsIGRldmljZSBidWlsZGVycworY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBDb21wYXRpYmlsaXR5IFByb2dyYW0uPC9wPgorPHA+VGhvdWdoIEFuZHJvaWQgY29uc2lzdHMgb2YgbXVsdGlwbGUgc3ViLXByb2plY3RzLCB0aGlzIGlzIHN0cmljdGx5IGEKK3Byb2plY3QtbWFuYWdlbWVudCB0ZWNobmlxdWUuIFdlIHZpZXcgYW5kIG1hbmFnZSBBbmRyb2lkIGFzIGEgc2luZ2xlLAoraG9saXN0aWMgc29mdHdhcmUgcHJvZHVjdCwgbm90IGEgImRpc3RyaWJ1dGlvbiIsIHNwZWNpZmljYXRpb24sIG9yIGNvbGxlY3Rpb24KK29mIHJlcGxhY2VhYmxlIHBhcnRzLiBDb25jZXB0dWFsbHksIG91ciBub3Rpb24gaXMgdGhhdCBkZXZpY2UgYnVpbGRlcnMgcG9ydAorQW5kcm9pZCB0byBhIGRldmljZTsgdGhleSBkb24ndCBpbXBsZW1lbnQgYSBzcGVjaWZpY2F0aW9uIG9yIGN1cmF0ZSBhCitkaXN0cmlidXRpb24uPC9wPgorPGgyPkhvdyBXZSBXb3JrPC9oMj4KKzxwPldlIGtub3cgdGhhdCBxdWFsaXR5IGRvZXMgbm90IGNvbWUgd2l0aG91dCBoYXJkIHdvcmsuIEFsb25nIHdpdGggbWFueQorcGFydG5lcnMsIEdvb2dsZSBoYXMgY29udHJpYnV0ZWQgZnVsbC10aW1lIGVuZ2luZWVycywgcHJvZHVjdCBtYW5hZ2VycywgVUkKK2Rlc2lnbmVycywgUXVhbGl0eSBBc3N1cmFuY2UsIGFuZCBhbGwgdGhlIG90aGVyIHJvbGVzIHJlcXVpcmVkIHRvIGJyaW5nCittb2Rlcm4gZGV2aWNlcyB0byBtYXJrZXQuICBXZSBpbnRlZ3JhdGUgdGhlIG9wZW4gc291cmNlIGFkbWluaXN0cmF0aW9uIGFuZAorbWFpbnRlbmFuY2UgaW50byB0aGUgbGFyZ2VyIHByb2R1Y3QgZGV2ZWxvcG1lbnQgY3ljbGUuPC9wPgorPHA+SW4gYSBudXRzaGVsbDo8L3A+Cis8dWw+Cis8bGk+QXQgYW55IGdpdmVuIG1vbWVudCwgdGhlcmUgaXMgYSBjdXJyZW50IGxhdGVzdCByZWxlYXNlIG9mIHRoZSBBbmRyb2lkCitwbGF0Zm9ybS4gVGhpcyB0eXBpY2FsbHkgdGFrZXMgdGhlIGZvcm0gb2YgYSBicmFuY2ggaW4gdGhlIHRyZWUuPC9saT4KKzxsaT5EZXZpY2UgYnVpbGRlcnMgYW5kIENvbnRyaWJ1dG9ycyB3b3JrIHdpdGggdGhlIGN1cnJlbnQKK2xhdGVzdCByZWxlYXNlLCBmaXhpbmcgYnVncywgbGF1bmNoaW5nIG5ldyBkZXZpY2VzLCBleHBlcmltZW50aW5nIHdpdGggbmV3CitmZWF0dXJlcywgYW5kIHNvIG9uLjwvbGk+Cis8bGk+SW4gcGFyYWxsZWwsIEdvb2dsZSB3b3JrcyBpbnRlcm5hbGx5IG9uIHRoZSBuZXh0IHZlcnNpb24gb2YgdGhlCitBbmRyb2lkIHBsYXRmb3JtIGFuZCBmcmFtZXdvcmssIHdvcmtpbmcgYWNjb3JkaW5nIHRvIHRoZSBwcm9kdWN0J3MgbmVlZHMgYW5kCitnb2Fscy4gU29tZSBvZiB0aGUgd29yayBmcm9tIHRoZSBjdXJyZW50IGxhdGVzdCB0cmVlIHdpbGwgcHJvbW90ZWQgaW50byB0aGVzZQorcmVsZWFzZXMuPC9saT4KKzxsaT5XaGVuIHRoZSAibisxInRoIHZlcnNpb24gaXMgZGV0ZXJtaW5lZCB0byBiZSBuZWFyaW5nIGNvbXBsZXRpb24sIGl0IHdpbGwKK2JlIHB1Ymxpc2hlZCB0byB0aGUgcHVibGljIHNvdXJjZSB0cmVlLCBhbmQgYmVjb21lIHRoZSBuZXcgbGF0ZXN0CityZWxlYXNlLjwvbGk+Cis8bGk+U2luY2UgQW5kcm9pZCBpcyBvcGVuIHNvdXJjZSwgbm90aGluZyBwcmV2ZW50cyBkZXZpY2UgaW1wbGVtZW50ZXJzIGZyb20KK3NoaXBwaW5nIGRldmljZXMgb24gb2xkZXIgKG9ic29sZXRlKSBBbmRyb2lkIGJ1aWxkcy4gSG93ZXZlciwgYWN0aXZlIHdvcmsgd2lsbAorYmUgZm9jdXNlZCBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSByZWxlYXNlLjwvbGk+Cis8L3VsPgorPHA+VG8gbWVldCBvdXIgZ29hbHMsIEFuZHJvaWQgbmVlZHMgdG8gYWNoaWV2ZSB3aWRlc3ByZWFkLCBjb21wYXRpYmxlCithZG9wdGlvbi4gV2UgYmVsaWV2ZSB0aGF0IHRoZSBiZXN0IHdheSB0byBhY2NvbXBsaXNoIHRoYXQgaXMgdG8gbWFrZSBzdXJlIHRoYXQKK3dlIHNoaXAgaGlnaC1xdWFsaXR5LCBmbGFnc2hpcCBkZXZpY2VzIHdpdGggYW4gaW50ZW5zZSBwcm9kdWN0IGFuZCBlbmQtdXNlcgorZm9jdXMuIFRoZSAibmV4dCByZWxlYXNlIiBvZiBBbmRyb2lkIGlzIGRyaXZlbiBieSB0aGUgcHJvZHVjdCBuZWVkcyBmb3IgdGhlIG5leHQKK2dlbmVyYXRpb24gb2YgbW9iaWxlIGRldmljZXM7IHRoZSByZXN1bHRpbmcgZXhjZWxsZW50IHByb2R1Y3QgaXMgdGhlbiByZWxlYXNlZAordG8gb3BlbiBzb3VyY2UgYW5kIGJlY29tZXMgdGhlIG5ldyBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHBsYXRmb3JtLjwvcD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2NvbW11bml0eS9jb21tdW5pdHlfdG9jLmNzIGIvcGRrL2RvY3MvY29tbXVuaXR5L2NvbW11bml0eV90b2MuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxYWFlMAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2NvbW11bml0eS9jb21tdW5pdHlfdG9jLmNzCkBAIC0wLDAgKzEsMjQgQEAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Cis8IS0tCitmdW5jdGlvbiBub3RoaW5nKCkge30KKy0tPgorPC9zY3JpcHQ+Cis8dWw+CisgIDxsaT48aDI+RGlzY3Vzc2lvbiBHcm91cHM8L2gyPjx1bD4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQtcGxhdGZvcm0iPmFuZHJvaWQtcGxhdGZvcm08L2E+IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDc1JTsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzIj5bb2ZmLXNpdGVdPC9zcGFuPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLXBvcnRpbmciPmFuZHJvaWQtcG9ydGluZzwvYT4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogNzUlOyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHMiPltvZmYtc2l0ZV08L3NwYW4+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQta2VybmVsIj5hbmRyb2lkLWtlcm5lbDwvYT4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogNzUlOyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHMiPltvZmYtc2l0ZV08L3NwYW4+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL3JlcG8tZGlzY3VzcyI+cmVwby1kaXNjdXNzPC9hPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA3NSU7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyI+W29mZi1zaXRlXTwvc3Bhbj48L2xpPgorICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1mcmFtZXdvcmsiPmFuZHJvaWQtZnJhbWV3b3JrPC9hPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA3NSU7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyI+W29mZi1zaXRlXTwvc3Bhbj48L2xpPgorICA8L3VsPjwvbGk+CisgIDxsaT48aDI+T3RoZXIgTGlua3M8L2gyPjx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Y29tbXVuaXR5L2dyb3Vwcy1jaGFydGVyLmh0bWwiPkdyb3VwcyBDaGFydGVyPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vY29tbXVuaXR5L2luZGV4Lmh0bWwiPkFwcCBEZXZlbG9wZXIgR3JvdXBzPC9hPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA3NSU7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyI+W29mZi1zaXRlXTwvc3Bhbj48L2xpPgorICA8L3VsPjwvbGk+Cis8L3VsPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorPCEtLQorICAgIGJ1aWxkVG9nZ2xlTGlzdHMoKTsKKy8vLS0+Cis8L3NjcmlwdD4KKwpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvY29tbXVuaXR5L2dyb3Vwcy1jaGFydGVyLmpkIGIvcGRrL2RvY3MvY29tbXVuaXR5L2dyb3Vwcy1jaGFydGVyLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNWI1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9jb21tdW5pdHkvZ3JvdXBzLWNoYXJ0ZXIuamQKQEAgLTAsMCArMSwzMSBAQAorcGFnZS50aXRsZT1BbmRyb2lkIERpc2N1c3Npb24gR3JvdXBzIENoYXJ0ZXIKK2RvYy50eXBlPWNvbW11bml0eQorQGpkOmJvZHkKKzxoMj4KK0F1ZGllbmNlCis8L2gyPgorPHA+VGhlc2UgZGlzY3Vzc2lvbiBncm91cHMgYXJlIGludGVuZGVkIGZvciBkZXZlbG9wZXJzIHdvcmtpbmcgd2l0aCB0aGUgQW5kcm9pZCBwbGF0Zm9ybS4gRXZlcnlvbmUgaXMgd2VsY29tZSB0byBqb2luIGluLCBwcm92aWRlZCB5b3UgZm9sbG93IG91ciBjb21tdW5pdHkncyBwb2xpY2llcyBkZXNjcmliZWQgYmVsb3cuIE91ciB1c2VycyBoZWxwIGVhY2ggb3RoZXIsIGFuZCBtYW55IGV4cGVydHMgcG9zdCB0byB0aGVzZSBncm91cHMsIGluY2x1ZGluZyBtZW1iZXJzIG9mIHRoZSBPcGVuIEhhbmRzZXQgQWxsaWFuY2UuCis8L3A+Cis8cD5ObyB0b3BpYyBpcyBvZmYtbGltaXRzLCBwcm92aWRlZCBpdCByZWxhdGVzIHRvIEFuZHJvaWQgaW4gc29tZSB3YXkuIEhvd2V2ZXIsIHNpbmNlIHRoZXNlIGFyZSB2ZXJ5IGJ1c3kgbGlzdHMsIHNlYXJjaCB0aGUgYXJjaGl2ZXMgYmVmb3JlIHBvc3RpbmcgeW91ciBxdWVzdGlvbjsgeW91IG1heSBmaW5kIHlvdXIgcXVlc3Rpb24gaGFzIGFscmVhZHkgYmVlbiBhbnN3ZXJlZC4KKzwvcD4KKzxoMj4KK01haWxpbmcgbGlzdCBydWxlcworPC9oMj4KKzxwPldlIGxvdmUgc2ltcGxpY2l0eSBhbmQgaGF0ZSByZXN0cmljdGlvbnMsIHNvIHdlIGtlZXAgb3VyIHBvbGljaWVzIG1pbmltYWwuIFRoZSBydWxlcyBiZWxvdyBkZXNjcmliZSB3aGF0J3MgZXhwZWN0ZWQgb2Ygc3Vic2NyaWJlcnMgdG8gdGhlIEFuZHJvaWQgbWFpbGluZyBsaXN0cy4KKzwvcD4KKzx1bD48bGk+PGI+UGxlYXNlIGJlIGZyaWVuZGx5PC9iPgorPGJyPlNob3dpbmcgY291cnRlc3kgYW5kIHJlc3BlY3QgdG8gb3RoZXJzIGlzIGEgdml0YWwgcGFydCBvZiB0aGUgQW5kcm9pZCBjdWx0dXJlLCBhbmQgd2UgZXhwZWN0IGV2ZXJ5b25lIHBhcnRpY2lwYXRpbmcgaW4gdGhlIEFuZHJvaWQgY29tbXVuaXR5IHRvIGpvaW4gdXMgaW4gYWNjZXB0aW5nIG5vdGhpbmcgbGVzcy4gQmVpbmcgY291cnRlb3VzIGRvZXMgbm90IG1lYW4gd2UgY2FuJ3QgY29uc3RydWN0aXZlbHkgZGlzYWdyZWUgd2l0aCBlYWNoIG90aGVyLCBidXQgaXQgZG9lcyBtZWFuIHRoYXQgd2UgbXVzdCBiZSBwb2xpdGUgd2hlbiB3ZSBkbyBzby4gVGhlcmUncyBuZXZlciBhIHJlYXNvbiB0byBiZSBhbnRhZ29uaXN0aWMgb3IgZGlzbWlzc2l2ZSB0b3dhcmQgYW55b25lOyBpZiB5b3UgdGhpbmsgdGhlcmUgaXMsIHRoaW5rIGFnYWluIGJlZm9yZSB5b3UgcG9zdC48YnI+PGJyPk1vYmlsZSBkZXZlbG9wbWVudCBpcyBzZXJpb3VzIGJ1c2luZXNzLCBidXQgaXQncyBhbHNvIGEgbG90IG9mIGZ1bi4gTGV0J3Mga2VlcCBpdCB0aGF0IHdheS4gTGV0J3Mgc3RyaXZlIHRvIGJlIG9uZSBvZiB0aGUgZnJpZW5kbGllc3QgY29tbXVuaXRpZXMgaW4gYWxsIG9mIG9wZW4gc291cmNlLjxicj48YnI+PC9saT4KKzxsaT48Yj5BbGxvd2VkIGRpc2N1c3Npb24gdG9waWNzPC9iPgorPGJyPk1vc3QgdG9waWNzIGFyZSB0ZWNobmljYWwgZGlzY3Vzc2lvbnMgb2YgQW5kcm9pZCBvciB1c2VycyBoZWxwaW5nIGVhY2ggb3RoZXIsIGJ1dCB0aGlzIGdyb3VwIGlzIGludGVuZGVkIGZvciBkaXNjdXNzaW9ucyBvZjxpPmV2ZXJ5dGhpbmc8L2k+CitpbiB0aGUgd29ybGQgb2YgQW5kcm9pZC4gV2Ugd2VsY29tZSBhbm5vdW5jZW1lbnRzIGFuZCBkaXNjdXNzaW9uIG9mIHByb2R1Y3RzLCBsaWJyYXJpZXMsIHB1YmxpY2F0aW9ucywgYW5kIG90aGVyIGludGVyZXN0aW5nIEFuZHJvaWQtcmVsYXRlZCBuZXdzLiBXZSBldmVuIHdlbGNvbWUgKHBvbGl0ZSEpIGRpc2N1c3Npb24gb2YgYXJ0aWNsZXMgYW5kIGlkZWFzIGNyaXRpY2FsIG9mIEFuZHJvaWQtLWFmdGVyIGFsbCwgd2UgY2FuJ3QgaW1wcm92ZSBpZiB3ZSBkb24ndCBsaXN0ZW4uIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gdGhlIHN1YmplY3QgbWF0dGVyLCBhbmQgd2UgZG9uJ3QgZXhjbHVkZSBkaXNjdXNzaW9ucyBvZiBjb21tZXJjaWFsIHByb2R1Y3RzIGlmIHVzZXJzIGFyZSBpbnRlcmVzdGVkIGluIHRhbGtpbmcgYWJvdXQgdGhlbS48YnI+PGJyPkhvd2V2ZXIsIHdlIGhhdGUgc3BhbSBhbG1vc3QgYXMgcGFzc2lvbmF0ZWx5IGFzIHdlIGxvdmUgY291cnRlc3kgYW5kIHJlc3BlY3QsIHNvIHdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGxpbWl0IGRpc2N1c3Npb25zIHRoYXQgYW1vdW50IHRvIHNwYW0uIE91dHJpZ2h0IHNwYW0gd2lsbCByZXN1bHQgaW4gdGhlIHNwYW1tZXIgYmVpbmcgaW1tZWRpYXRlbHkgYW5kIHBlcm1hbmVudGx5IGJhbm5lZCBmcm9tIHRoZSBsaXN0LgorPC9saT4KKzwvdWw+Cis8cD5UaGUgbW9zdCBpbXBvcnRhbnQgcnVsZSBpcyBmcmllbmRsaW5lc3MuIFJlbWVtYmVyOiBkaXNyZXNwZWN0IGFuZCBydWRlbmVzcyBhcmUgbm90IHdlbGNvbWUgaW4gb3VyIGNvbW11bml0eSB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcy4gV2UgZG9uJ3QgaGF2ZSBhIGZvcm1hbCBwb2xpY3kgb24gZGVhbGluZyB3aXRoIHRyb3VibGVtYWtlcnMsIGFuZCB3ZSBob3BlIHdlIG5ldmVyIG5lZWQgb25lLlRoYXQgc2FpZCwgd2UgZG8gcGxlZGdlIHRvIGRvIG91ciBiZXN0IHRvIGJlIGZhaXIsIGFuZCB3ZSB3aWxsIGFsd2F5cyB0cnkgdG8gd2FybiBzb21lb25lIGJlZm9yZSBiYW5uaW5nIGhpbSBvciBoZXIuCis8L3A+Cis8aDI+CitDb250YWN0aW5nIHRoZSBtb2RlcmF0b3JzCis8L2gyPgorPHA+SWYgeW91IHNlZSBhbnlvbmUgYmVpbmcgcnVkZSwgY2FsbCB0aGVtIG91dCBvbiBpdC4gVGhpcyBpcyB5b3VyIGdyb3VwIHRvbywgYW5kIHlvdSBkb24ndCBoYXZlIHRvIGFjY2VwdCBzb21lb25lIGVsc2UgYmVpbmcgZGlzcmVzcGVjdGZ1bCBqdXN0IGJlY2F1c2UgaXQgd2Fzbid0IGRpcmVjdGVkIGF0IHlvdS4gSnVzdCByZW1lbWJlciB0byBiZSBwb2xpdGUgYW5kIGNvdXJ0ZW91cyB5b3Vyc2VsZiEgRG9uJ3QgYWRkIGZ1ZWwgdG8gdGhlIGZpcmUuCis8L3A+Cis8cD5CdXQgaWYgeW91IHNlZSBhbiBvdXRyYWdlb3VzIHZpb2xhdGlvbiwgd2FudCB0byByZXBvcnQgc3BhbSwgZmVlbCB2ZXJ5IHN0cm9uZ2x5IGFib3V0IHNvbWV0aGluZywgb3IgZXZlbiBpZiB5b3UganVzdCB3YW50IHRvIGNoYXQsIHRoZW4gY29udGFjdCB0aGUgbWFpbGluZyBsaXN0J3Mgb3duZXJzLiBJdCdzIHdoYXQgd2UncmUgaGVyZSBmb3IhCis8L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21tdW5pdHkvaW5kZXguamQgYi9wZGsvZG9jcy9jb21tdW5pdHkvaW5kZXguamQKaW5kZXggYmMwNGVlZS4uNmU2ZjU5ZSAxMDA2NDQKLS0tIGEvcGRrL2RvY3MvY29tbXVuaXR5L2luZGV4LmpkCisrKyBiL3Bkay9kb2NzL2NvbW11bml0eS9pbmRleC5qZApAQCAtMSw2ICsxLDExNCBAQAotaG9tZT10cnVlCitwYWdlLnRpdGxlPUNvbW11bml0eQorZG9jLnR5cGU9Y29tbXVuaXR5CiBAamQ6Ym9keQorPGgxPkFuZHJvaWQgQ29tbXVuaXR5PC9oMT4KKzxwPldlbGNvbWUgdG8gdGhlIEFuZHJvaWQgY29tbXVuaXR5ITwvcD4KKzxwPlRoZSBrZXkgdG8gYW55IGNvbW11bml0eSBpcywgb2J2aW91c2x5LCBjb21tdW5pY2F0aW9uLiBMaWtlIG1vc3QgcHJvamVjdHMsCitBbmRyb2lkIGNvbW11bmljYXRlcyB2aWEgbWFpbGluZyBsaXN0cy4gQmVjYXVzZSBBbmRyb2lkIGlzIGFuIGV4dHJlbWVseSBsYXJnZQorcHJvamVjdCB3aXRoIG1hbnkgY29tcG9uZW50cywgd2UgaGF2ZSBtYW55IGRpc2N1c3Npb24gZm9ydW1zLCBlYWNoIGZvY3VzaW5nIG9uCithIGRpZmZlcmVudCB0b3BpYy48L3A+Cis8cD5QbGVhc2UgY2hlY2sgb3V0IHRoZSBncm91cHMgYmVsb3csIGFuZCBqb2luIGFueSB0aGF0IHNlZW0gaW50ZXJlc3RpbmcgdG8KK3lvdS4gTm90ZSB0aGF0IGlmIHlvdSdyZSBhIHVzZXIgbG9va2luZyBmb3IgaGVscCB3aXRoIHlvdXIgQW5kcm9pZCBkZXZpY2UsCit0aGlzIHBhZ2UgcHJvYmFibHkgaXNuJ3QgZm9yIHlvdTsgeW91IHNob3VsZCBjb250YWN0IHlvdXIgY2FycmllciBvciByZXRhaWxlcgorZm9yIGhlbHAgd2l0aCB5b3VyIHBob25lLjwvcD4KKzxwPlBsZWFzZSBub3RlIHRoYXQgaWYgeW91J3JlIGxvb2tpbmcgZm9yIGluZm9ybWF0aW9uIGFib3V0IGJ1aWxkaW5nCithcHBsaWNhdGlvbnMgZm9yIEFuZHJvaWQsIHlvdSBjYW4gZmluZCBhIHNlcGFyYXRlIHNldCBvZiBncm91cHMgZm9yIHRob3NlIGF0CitvdXIgc2lzdGVyIHNpdGUsIGRldmVsb3Blci5hbmRyb2lkLmNvbTogPGEKK2hyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vY29tbXVuaXR5L2luZGV4Lmh0bWwiPmh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vY29tbXVuaXR5L2luZGV4Lmh0bWw8L2E+PC9wPgogCi08cD4KLSAgU29tZSBjb21tdW5pdHkgaW5mb3JtYXRpb24gaGVyZQotPC9wPgorPGgyPkdldHRpbmcgdGhlIE1vc3QgZnJvbSBPdXIgTGlzdHM8L2gyPgorPHA+UGxlYXNlIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYmVmb3JlIHlvdSBwb3N0IHRvIG91ciBsaXN0cy48L3A+Cis8b2w+CisgIDxsaT48Yj5SZWFkIHRoZSA8YQorICBocmVmPSJ7QGRvY1Jvb3R9Y29tbXVuaXR5L2dyb3Vwcy1jaGFydGVyLmh0bWwiPkNoYXJ0ZXIKKyAgZm9yIG91ciBmb3J1bXMuPC9hPjwvYj4gVGhpcyBleHBsYWlucyB0aGUgKGZldykgcnVsZXMgYW5kIGd1aWRlbGluZXMgZm9yIG91cgorICBjb21tdW5pdHkuPGJyPjwvbGk+CisgIDxsaT48Yj5TZWFyY2ggdGhlIGdyb3VwIGFyY2hpdmVzIHRvIHNlZSB3aGV0aGVyIHlvdXIgcXVlc3Rpb25zIGhhdmUgYWxyZWFkeQorICBiZWVuIGRpc2N1c3NlZC48L2I+PC9saT4gVGhpcyBhdm9pZHMgdGltZS13YXN0aW5nIHJlZHVuZGFudCBkaXNjdXNzaW9ucy4KKyAgPGxpPjxiPlVzZSBhIGNsZWFyLCByZWxldmFudCBtZXNzYWdlIHN1YmplY3QuPC9iPiBUaGlzIGhlbHBzIGV2ZXJ5b25lLAorICBib3RoIHRob3NlIHRyeWluZyB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbiBhcyB3ZWxsIGFzIHRob3NlIHdobyBtYXkgYmUKKyAgbG9va2luZyBmb3IgaW5mb3JtYXRpb24gaW4gdGhlIGZ1dHVyZS48L2xpPgorICA8bGk+PGI+R2l2ZSBwbGVudHkgb2YgZGV0YWlscyBpbiB5b3VyIHBvc3QuPC9iPiBDb2RlIG9yIGxvZyBzbmlwcGV0cywKKyAgcG9pbnRlcnMgdG8gc2NyZWVuc2hvdHMsIGFuZCBzaW1pbGFyIGRldGFpbHMgd2lsbCBnZXQgYmV0dGVyIHJlc3VsdHMgYW5kCisgIG1ha2UgZm9yIGJldHRlciBkaXNjdXNzaW9ucy4gRm9yIGEgZ3JlYXQgZ3VpZGUgdG8gcGhyYXNpbmcgeW91ciBxdWVzdGlvbnMsCisgIHJlYWQgPGEgaHJlZj0iaHR0cDovL3d3dy5jYXRiLm9yZy8lN0Vlc3IvZmFxcy9zbWFydC1xdWVzdGlvbnMuaHRtbCI+SG93IFRvCisgIEFzayBRdWVzdGlvbnMgVGhlIFNtYXJ0IFdheTwvYT4uPC9saT4KKzwvb2w+CisKKzxoMj5PcGVuIFNvdXJjZSBQcm9qZWN0IGRpc2N1c3Npb25zPC9oMj4KKzx1bD4KKzxsaT48Yj5hbmRyb2lkLWJ1aWxkaW5nPC9iPjxici8+CitTdWJzY3JpYmUgdG8gdGhpcyBsaXN0IGZvciBkaXNjdXNzaW9uIGFuZCBoZWxwIG9uIGJ1aWxkaW5nIHRoZSBBbmRyb2lkIHNvdXJjZQorY29kZSwgYW5kIG9uIHRoZSBidWlsZCBzeXN0ZW0uIElmIHlvdSd2ZSBqdXN0IGNoZWNrZWQgb3V0IHRoZSBzb3VyY2UgY29kZSBhbmQKK2hhdmUgcXVlc3Rpb25zIGFib3V0IGhvdyB0byB0dXJuIGl0IGludG8gYmluYXJpZXMsIHN0YXJ0IGhlcmUuPGJyLz48YnIvPgorU3Vic2NyaWJlIHVzaW5nIEdvb2dsZSBHcm91cHM6IDxhCitocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1idWlsZGluZyI+YW5kcm9pZC1idWlsZGluZzwvYT48YnIvPgorU3Vic2NyaWJlIHZpYSBlbWFpbDogPGEgaHJlZj0ibWFpbHRvOmFuZHJvaWQtYnVpbGRpbmcrc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb20iPmFuZHJvaWQtYnVpbGRpbmcrc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb208L2E+Cis8L2xpPgorCis8bGk+PGI+YW5kcm9pZC1wb3J0aW5nPC9iPjxici8+CitUaGlzIGxpc3QgaXMgZm9yIGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gcG9ydCBBbmRyb2lkIHRvIGEgbmV3IGRldmljZS4gSWYKK3lvdSdyZSB3b25kZXJpbmcgaG93IHRvIGNvbWJpbmUgdGhlIEFuZHJvaWQgc291cmNlIGNvZGUgd2l0aCB5b3VyIGhhcmR3YXJlLAordGhpcyBpcyB0aGUgcmlnaHQgZ3JvdXAgZm9yIHlvdS4gRGlzY3VzcyBoZXJlIHRoZSBzcGVjaWZpY3Mgb2YgcG9ydGluZyBBbmRyb2lkCit0byBpbmRpdmlkdWFsIGRldmljZXMsIGZyb20gb2J0YWluaW5nIHRvb2xjaGFpbnMgYW5kIG1lcmdpbmcga2VybmVsIGRyaXZlcnMKK2FsbCB0aGUgd2F5IHRvIGNvbmZpZ3VyaW5nIG9yIG1vZGlmeWluZyBhcHBsaWNhdGlvbnMgZm9yIHlvdXIgc3BlY2lmaWMKK2NvbmZpZ3VyYXRpb24uPGJyLz48YnIvPgorU3Vic2NyaWJlIHVzaW5nIEdvb2dsZSBHcm91cHM6IDxhCitocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1wb3J0aW5nIj5hbmRyb2lkLXBvcnRpbmc8L2E+PGJyLz4KK1N1YnNjcmliZSB2aWEgZW1haWw6IDxhIGhyZWY9Im1haWx0bzphbmRyb2lkLXBvcnRpbmcrc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb20iPmFuZHJvaWQtcG9ydGluZytzdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4KKzwvbGk+CisKKzxsaT48Yj5hbmRyb2lkLXBsYXRmb3JtPC9iPjxici8+CitUaGlzIGxpc3QgaXMgZm9yIGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gY29udHJpYnV0ZSBjb2RlIHRvIHRoZSBBbmRyb2lkCit1c2VyLXNwYWNlIHByb2plY3RzLCBzdWNoIGFzIHRoZSBjb3JlIHN5c3RlbSBsaWJyYXJpZXMsIHRoZSBBbmRyb2lkCitzZXJ2aWNlcywgdGhlIHB1YmxpYyBBUElzLCBvciB0aGUgYnVpbHQtaW4gYXBwbGljYXRpb25zLiBOb3RlOiBjb250cmlidXRvcnMKK3RvIHRoZSBBbmRyb2lkIGtlcm5lbCBzaG91bGQgZ28gdG8gdGhlIGFuZHJvaWQta2VybmVsIGxpc3QsIGJlbG93Ljxici8+PGJyLz4KK1N1YnNjcmliZSB1c2luZyBHb29nbGUgR3JvdXBzOiA8YQoraHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQtcGxhdGZvcm0iPmFuZHJvaWQtcGxhdGZvcm08L2E+PGJyLz4KK1N1YnNjcmliZSB2aWEgZW1haWw6IDxhIGhyZWY9Im1haWx0bzphbmRyb2lkLXBsYXRmb3JtK3N1YnNjcmliZUBnb29nbGVncm91cHMuY29tIj5hbmRyb2lkLXBsYXRmb3JtK3N1YnNjcmliZUBnb29nbGVncm91cHMuY29tPC9hPgorPC9saT4KKworPGxpPjxiPmFuZHJvaWQta2VybmVsPC9iPjxici8+CitUaGlzIGxpc3QgaXMgZm9yIGRldmVvcGVycyB3aG8gd2FudCB0byBjb250cmlidXRlIHRvIHRoZSBMaW51eCBrZXJuZWwgdGhhdAorQW5kcm9pZCBkZXZpY2VzIHVzZS4gSWYgeW91J3ZlIGRvd25sb2FkZWQgdGhlIGtlcm5lbCBjb2RlLCBpZiB5b3Uga25vdyBob3cgdG8KK2NvbXBpbGUgaXQsIGlmIHlvdSB3YW50IHRvIHdyaXRlIGtlcm5lbCBjb2RlIHRvIHNwZWNpZmljYWxseSBzdXBwb3J0IEFuZHJvaWQsCit0aGlzIGlzIHlvdXIgcGxhY2UuIFRoaXMgZ3JvdXAgaXNuJ3QgZm9yIHVzZXItc3BhY2UgdG9waWNzIChzZWUKK2FuZHJvaWQtcGxhdGZvcm0gZm9yIHRoYXQpLCBhbmQgcGVvcGxlIHdpbGwgc2hha2UgdGhlaXIgZmluZ2VycyBhdCB5b3UgYW5kCitjYWxsIHlvdSBuYXVnaHR5IGlmIHlvdSBhc2sgdXNlci1zcGFjZSBxdWVzdGlvbnMgaGVyZS48YnIvPjxici8+CitTdWJzY3JpYmUgdXNpbmcgR29vZ2xlIEdyb3VwczogPGEKK2hyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLWtlcm5lbCI+YW5kcm9pZC1rZXJuZWw8L2E+PGJyLz4KK1N1YnNjcmliZSB2aWEgZW1haWw6IDxhIGhyZWY9Im1haWx0bzphbmRyb2lkLWtlcm5lbCtzdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbSI+YW5kcm9pZC1rZXJuZWwrc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb208L2E+Cis8L2xpPgorPC91bD4KKworPGgyPlVzaW5nIGVtYWlsIHdpdGggR29vZ2xlIEdyb3VwczwvaDI+Cis8cD5JbnN0ZWFkIG9mIHVzaW5nIHRoZSA8YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vIj5Hb29nbGUgR3JvdXBzPC9hPgorc2l0ZSwgeW91IGNhbiB1c2UgeW91ciBlbWFpbCBjbGllbnQgb2YgY2hvaWNlIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBtYWlsaW5nIGxpc3RzLjwvcD4KKzxwPlRvIHN1YnNjcmliZSB0byBhIGdyb3VwIHdpdGhvdXQgdXNpbmcgdGhlIEdvb2dsZSBHcm91cHMgc2l0ZSwgdXNlIHRoZSBsaW5rCit1bmRlciAic3Vic2NyaWJlIHZpYSBlbWFpbCIgaW4gdGhlIGxpc3RzIGFib3ZlLjwvcD4KKzxwPlRvIHNldCB1cCBob3cgeW91IHJlY2VpdmUgbWFpbGluZyBsaXN0IHBvc3RpbmdzIGJ5IGVtYWlsOjwvcD4KKzxvbD4KKzxsaT5TaWduIGludG8gdGhlIGdyb3VwIHZpYSB0aGUgR29vZ2xlIEdyb3VwcyBzaXRlLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSBhbmRyb2lkLWZyYW1ld29yayBncm91cCB5b3Ugd291bGQKK3Zpc2l0IDxhCitocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1mcmFtZXdvcmsiPmh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLWZyYW1ld29yazwvYT4uPC9saT4KKzxsaT5DbGljayAiRWRpdCBteSBtZW1iZXJzaGlwIiBvbiB0aGUgcmlnaHQgc2lkZS48L2xpPgorPGxpPlVuZGVyICJIb3cgZG8geW91IHdhbnQgdG8gcmVhZCB0aGlzIGdyb3VwPyIgc2VsZWN0IG9uZSBvZiB0aGUgZW1haWwgb3B0aW9ucy48L2xpPgorPC9vbD4KKworPGgyPkFuZHJvaWQgb24gSVJDPC9oMj4KKzxwPldlIGFsc28gaGF2ZSBhIHByZXNlbmNlIG9uIElSQyB2aWEgRnJlZW5vZGUuIFdlIG1haW50YWluIHR3byBvZmZpY2lhbCBJUkMKK2NoYW5uZWxzIG9uIGlyYy5mcmVlbm9kZS5uZXQ6PC9wPgorPHVsPgorPGxpPjxiPiNhbmRyb2lkPC9iPiAtIGRlZGljYXRlZCB0byBnZW5lcmFsIEFuZHJvaWQgZGlzY3Vzc2lvbiBhbmQgcG9ydGluZyBjb25jZXJuczwvbGk+Cis8bGk+PGI+I2FuZHJvaWQtZGV2PC9iPiAtIGRlZGljYXRlZCB0byBkaXNjdXNzaW9uIGFib3V0IHdyaXRpbmcgQW5kcm9pZCBhcHBsaWNhdGlvbnM8L2xpPgorPC91bD4KKzxwPlRoZSBjaGFubmVscyBhYm92ZSBhcmUgb2ZmaWNpYWwuIFRoZXJlIGFyZSBhIGZldyBvdGhlciBjaGFubmVscyB0aGUKK2NvbW11bml0eSBpcyB1c2luZywgYnV0IGFyZSBub3Qgb2ZmaWNpYWwuIFRoZXNlIGFyZW4ndCBvZmZpY2lhbCBvciBvZmZpY2lhbGx5Cittb2RlcmF0ZWQvbWFuYWdlZCwgc28geW91IHVzZSB0aGUgY2hhbm5lbHMgYmVsb3cgYXQgeW91ciBvd24gcmlzay4gVGhlIE9wZW4KK0hhbmRzZXQgQWxsaWFuY2UgZG9lc24ndCBlbmRvcnNlIHRoZXNlIGNoYW5uZWxzLCB0aGVyZSdzIG5vIHdhcnJhbnR5IGV4cHJlc3MKK29yIGltcGxpZWQsIGFuZCBzbyBvbi4gVGhlcmUgbWF5IGJlIG1vcmUuPC9wPgorPHVsPgorPGxpPjxiPiNhbmRyb2lkLW9mZnRvcGljPC9iPiAtIGZvciwgd2VsbCwgb2ZmLXRvcGljIGRpc2N1c3Npb25zPC9saT4KKzxsaT48Yj4jYW5kcm9pZC1yb290PC9iPiAtIGZvciBkaXNjdXNzaW9uIHJlbGF0ZWQgdG8gb2ZmLWxhYmVsIHVzZXMgb2YgaGFyZHdhcmU8L2xpPgorPGxpPjxiPiNhbmRyb2lkZnJhPC9iPiAtIHBvdXIgZGlzY3V0ZXIgZCdBbmRyb2lkIGVuIGZyYW7Dp2FpczwvbGk+Cis8L3VsPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9jb21wYXRpYmlsaXR5X3RvYy5jcyBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvY29tcGF0aWJpbGl0eV90b2MuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4OGQxNAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvY29tcGF0aWJpbGl0eV90b2MuY3MKQEAgLTAsMCArMSwyNSBAQAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKzwhLS0KK2Z1bmN0aW9uIG5vdGhpbmcoKSB7fQorLS0+Cis8L3NjcmlwdD4KKworPHVsPgorICA8bGk+PGgyPkdldHRpbmcgU3RhcnRlZDwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5jb21wYXRpYmlsaXR5L292ZXJ2aWV3Lmh0bWwiPkNvbXBhdGliaWxpdHkgT3ZlcnZpZXc8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iIj5DdXJyZW50IENERDwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5jb21wYXRpYmlsaXR5L2N0cy1pbnRyby5odG1sIj5DVFMgSW50cm9kdWN0aW9uPC9hPjwvbGk+CisgIDwvdWw+PC9saT4KKworICA8bGk+PGgyPk1vcmUgSW5mb3JtYXRpb248L2gyPjx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+ZG93bmxvYWRzL2luZGV4Lmh0bWwiPkRvd25sb2FkczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5mYXFzLmh0bWwjY29tcGF0aWJpbGl0eSI+RkFRczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5jb21wYXRpYmlsaXR5L2NvbnRhY3QtdXMuaHRtbCI+Q29udGFjdCBVczwvYT48L2xpPgorICA8L3VsPjwvbGk+Cis8L3VsPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cis8IS0tCisgICAgYnVpbGRUb2dnbGVMaXN0cygpOworLy8tLT4KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9jb250YWN0LXVzLmpkIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9jb250YWN0LXVzLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGU4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2NvbnRhY3QtdXMuamQKQEAgLTAsMCArMSwzMSBAQAorcGFnZS50aXRsZT1Db250YWN0IFVzCitkb2MudHlwZT1jb21wYXRpYmlsaXR5CitAamQ6Ym9keQorPHA+VGhhbmtzIGZvciB5b3VyIGludGVyZXN0IGluIEFuZHJvaWQgY29tcGF0aWJpbGl0eSE8L3A+Cis8cD5JZiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQgQW5kcm9pZCBjb21wYXRpYmlsaXR5IHRoYXQgYXJlbid0IGNvdmVyZWQgaW4KK3RoaXMgc2l0ZSwgeW91IGNhbiByZWFjaCB1cyBpbiBvbmUgb2YgYSBmZXcgZGlmZmVyZW50IHdheXMuIFRvIGdldCB0aGUgbW9zdAorb3V0IG9mIGFueSBvZiB0aGVzZSBvcHRpb25zLCBwbGVhc2UgZmlyc3QgcmVhZCAiR2V0dGluZyB0aGUgTW9zdCBmcm9tIE91cgorTGlzdHMiIG9uIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9Y29tbXVuaXR5L2luZGV4Lmh0bWwiPkNvbW11bml0eSBwYWdlLjwvYT48L3A+CisKKzxoMz5EaXNjdXNzaW9uIEdyb3VwPC9oMz4KKzxwPlRoZSBwcmVmZXJyZWQgd2F5IHRvIHJlYWNoIHVzIGlzIHZpYSB0aGUgPGEKK2hyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLWNvbXBhdGliaWxpdHkiPmFuZHJvaWQtY29tcGF0aWJpbGl0eQorbWFpbGluZyBsaXN0PC9hPi4gVXNlIHRoaXMgbGlzdCBmb3IgYWxsIHlvdXIgY29tcGF0aWJpbGl0eS1yZWxhdGVkIHF1ZXN0aW9ucy4KK1BsZWFzZSBiZSBhd2FyZSB0aGF0IHRoaXMgaXMgYSBwdWJsaWMgZm9ydW0uPC9wPgorCis8aDM+Q1RTIFRlY2huaWNhbCBRdWVzdGlvbnM8L2gzPgorPHA+SWYgeW91IGhhdmUgc3BlY2lmaWMgaXNzdWVzIHdpdGggdGhlIENvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZSB0aGF0IHJlcXVpcmUKK3lvdSB0byBkaXNjbG9zZSBpbmZvcm1hdGlvbiB5b3UnZCBwcmVmZXIgbm90IHRvIGJlIHB1YmxpYywgeW91IGNhbiBjb250YWN0IGFuCitlbWFpbCBhZGRyZXNzIHdlJ3ZlIHNldCB1cCBzcGVjaWZpY2FsbHkgdGhpcyBwdXJwb3NlOiA8YQoraHJlZj0ibWFpbHRvOmN0c0BhbmRyb2lkLmNvbSI+Y3RzQGFuZHJvaWQuY29tPC9hPi4gVGhpcyBlbWFpbCBhZGRyZXNzIGlzIGZvcgorY2FzZXMgdGhhdCByZXF1aXJlIGRpc2Nsb3N1cmUgb2YgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIG9ubHksIHNvIGdlbmVyYWwKK3F1ZXN0aW9ucyB3aWxsIGJlIGRpcmVjdGVkIGJhY2sgdG8gdGhlIHB1YmxpYyBhbmRyb2lkLWNvbXBhdGliaWxpdHkKK2xpc3QuIE5vdGUgYWxzbyB0aGF0IHRoaXMgbGlzdCBpcyBmb3Igc3BlY2lmaWMgdGVjaG5pY2FsIHF1ZXN0aW9uczsgZ2VuZXJhbAoraW5xdWlyaWVzIHdpbGwgYWxzbyBiZSBkaXJlY3RlZCBiYWNrIHRvIHRoZSBhbmRyb2lkLWNvbXBhdGliaWxpdHkgbGlzdC48L3A+CisKKzxoMz5Qcml2YXRlIElucXVpcmllczwvaDM+Cis8cD5GaW5hbGx5LCBidXNpbmVzcyBpbnF1aXJpZXMgYWJvdXQgdGhlIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSwgaW5jbHVkaW5nCityZXF1ZXN0cyB0byB1c2UgYnJhbmRpbmcgZWxlbWVudHMgYW5kIHNvIG9uLCBjYW4gYmUgc2VudCB0byB0aGUgYWRkcmVzcyA8YQoraHJlZj0ibWFpbHRvOmNvbXBhdGliaWxpdHlAYW5kcm9pZC5jb20iPmNvbXBhdGliaWxpdHlAYW5kcm9pZC5jb208L2E+LiBMaWtlCit0aGUgQ1RTIGFkZHJlc3MsIHRoaXMgYWRkcmVzcyBpcyBmb3Igc3BlY2lmaWMsIHByaXZhdGUgaW5xdWlyaWVzOyBnZW5lcmFsCitxdWVzdGlvbnMgd2lsbCBiZSBkaXJlY3RlZCBiYWNrIHRvIHRoZSBhbmRyb2lkLWNvbXBhdGliaWxpdHkgbGlzdC48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2N0cy1pbnRyby5qZCBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvY3RzLWludHJvLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDIzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2N0cy1pbnRyby5qZApAQCAtMCwwICsxLDg5IEBACitwYWdlLnRpdGxlPUNvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZQorZG9jLnR5cGU9Y29tcGF0aWJpbGl0eQorQGpkOmJvZHkKKzxoMz5Ib3cgZG9lcyB0aGUgQ1RTIHdvcms/PC9oMz4KKzxkaXY+PGltZyBzcmM9IntAZG9jUm9vdH1pbWFnZXMvY3RzLTAucG5nIj48L2Rpdj4KKzxkaXY+VGhlIENUUyBpcyBhbiBhdXRvbWF0ZWQgdGVzdGluZyBoYXJuZXNzIHRoYXQgaW5jbHVkZXMgdHdvIG1ham9yIHNvZnR3YXJlIGNvbXBvbmVudHM6PC9kaXY+Cis8dWw+Cis8bGk+VGhlIENUUyB0ZXN0IGhhcm5lc3MgcnVucyBvbiB5b3VyIGRlc2t0b3AgbWFjaGluZSBhbmQgbWFuYWdlcyB0ZXN0IGV4ZWN1dGlvbi48L2xpPgorPGxpPkluZGl2aWR1YWwgdGVzdCBjYXNlcyBhcmUgZXhlY3V0ZWQgb24gYXR0YWNoZWQgbW9iaWxlIGRldmljZXMgb3Igb24gYW4KK2VtdWxhdG9yLiBUaGUgdGVzdCBjYXNlcyBhcmUgd3JpdHRlbiBpbiBKYXZhIGFzIEpVbml0IHRlc3RzIGFuZCBwYWNrYWdlZCBhcworQW5kcm9pZCAuYXBrIGZpbGVzIHRvIHJ1biBvbiB0aGUgYWN0dWFsIGRldmljZSB0YXJnZXQuPC9saT4KKzwvdWw+CisKKzxoMz5Xb3JrZmxvdzwvaDM+Cis8b2w+Cis8bGk+T2J0YWluIHRoZSBDVFMgc291cmNlIGNvZGUuIFRoZSBDVFMgaXMgaW5jbHVkZWQgaW4gdGhlIEFuZHJvaWQgc291cmNlIGNvZGUgYXZhaWxhYmxlIGZyb20gdGhlIEFuZHJvaWQKK09wZW4gU291cmNlIFByb2plY3QuIChUbyBnZXQgYSBjb3B5IG9mIHRoYXQgc291cmNlIGNvZGUsIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2Rvd25sb2FkLmh0bWwiPnJlYWQgdGhpcyBwYWdlLjwvYT48L2xpPgorPGxpPkF0dGFjaCBhdCBsZWFzdCBvbmUgZGV2aWNlIChvciBlbXVsYXRvcikgdG8geW91ciBtYWNoaW5lLjwvbGk+Cis8bGk+TGF1bmNoIHRoZSBDVFMuIFRoZSBDVFMgdGVzdCBoYXJuZXNzIGxvYWRzIHRoZSB0ZXN0IHBsYW4gb250byB0aGUgYXR0YWNoZWQgZGV2aWNlcy4gRm9yIGVhY2ggdGVzdCBpbiB0aGUgdGVzdCBoYXJuZXNzOgorICAgIDx1bD4KKyAgICA8bGk+VGhlIHRlc3QgaGFybmVzcyBwdXNoZXMgYSAuYXBrIGZpbGUgdG8gZWFjaCBkZXZpY2UsIGV4ZWN1dGVzIHRoZSB0ZXN0IHRocm91Z2ggaW5zdHJ1bWVudGF0aW9uLCBhbmQgcmVjb3JkcyB0ZXN0IHJlc3VsdHMuPC9saT4KKyAgICA8bGk+VGhlIHRlc3QgaGFybmVzcyByZW1vdmVzIHRoZSAuYXBrIGZpbGUgZnJvbSBlYWNoIGRldmljZS48L2xpPgorICAgIDwvdWw+Cis8L2xpPgorPGxpPk9uY2UgYWxsIHRoZSB0ZXN0cyBhcmUgZXhlY3V0ZWQsIHlvdSBjYW4gdmlldyB0aGUgdGVzdCByZXN1bHRzIGluIHlvdXIgYnJvd3NlciBhbmQgdXNlIHRoZSByZXN1bHRzIHRvIGFkanVzdCB5b3VyIGRlc2lnbi4gWW91IGNhbiBjb250aW51ZSB0byBydW4gdGhlIENUUyB0aHJvdWdob3V0IHlvdXIgZGV2ZWxvcG1lbnQgcHJvY2Vzcy48L2xpPgorPC9vbD4KKzxkaXY+V2hlbiB5b3UgYXJlIHJlYWR5LCB5b3UgY2FuIHN1Ym1pdCB0aGUgcmVwb3J0IGdlbmVyYXRlZCBieSB0aGUgQ1RTIHRvIGN0c0BhbmRyb2lkLmNvbS4gVGhlIHJlcG9ydCBpcyBhIC56aXAgYXJjaGl2ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIFhNTCByZXN1bHRzIGFuZCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gc3VjaCBhcyBzY3JlZW4gY2FwdHVyZXMuPC9kaXY+CisKKzxoMz5UeXBlcyBvZiB0ZXN0IGNhc2VzPC9oMz4KK1RoZSBDVFMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiB0ZXN0IGNhc2VzOgorPHVsPgorPGxpPjxpPlVuaXQgdGVzdHM8L2k+IHRlc3QgYXRvbWljIHVuaXRzIG9mIGNvZGUgd2l0aGluIHRoZSBBbmRyb2lkIHBsYXRmb3JtOyBlLmcuIGEgc2luZ2xlIGNsYXNzLCBzdWNoIGFzIGphdmEudXRpbC5IYXNoTWFwLjwvbGk+Cis8bGk+PGk+RnVuY3Rpb25hbCB0ZXN0czwvaT4gdGVzdCBhIGNvbWJpbmF0aW9uIG9mIEFQSXMgdG9nZXRoZXIgaW4gYSBoaWdoZXItbGV2ZWwgdXNlLWNhc2UuPC9saT4KKzxsaT48aT5SZWZlcmVuY2UgYXBwbGljYXRpb24gdGVzdHM8L2k+IGluc3RydW1lbnQgYSBjb21wbGV0ZSBzYW1wbGUgYXBwbGljYXRpb24gdG8gZXhlcmNpc2UgYSBmdWxsIHNldCBvZiBBUElzIGFuZCBBbmRyb2lkIHJ1bnRpbWUgc2VydmljZXM8L2xpPgorPC91bD4KKzxkaXY+RnV0dXJlIHZlcnNpb25zIG9mIHRoZSBDVFMgd2lsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgdGVzdCBjYXNlczo8L2Rpdj4KKzx1bD4KKzxsaT48aT5Sb2J1c3RuZXNzIHRlc3RzPC9pPiB0ZXN0IHRoZSBkdXJhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gdW5kZXIgc3RyZXNzLjwvbGk+Cis8bGk+PGk+UGVyZm9ybWFuY2UgdGVzdHM8L2k+IHRlc3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0gYWdhaW5zdCBkZWZpbmVkIGJlbmNobWFya3MsIGZvciBleGFtcGxlIHJlbmRlcmluZyBmcmFtZXMgcGVyIHNlY29uZC48L2xpPgorPC91bD4KKworPGgzPkFyZWFzIENvdmVyZWQ8L2gzPgorVGhlIHVuaXQgdGVzdCBjYXNlcyBjb3ZlciB0aGUgZm9sbG93aW5nIGFyZWFzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IDxicj4KKzx0YWJsZT48dGJvZHk+Cis8dHI+PHRkPkFyZWE8L3RkPjx0ZD5EZXNjcmlwdGlvbiA8YnI+PC90ZD48L3RyPgorPHRyPjx0ZD5TaWduYXR1cmUgdGVzdHM8L3RkPgorPHRkPkZvciBlYWNoIEFuZHJvaWQgcmVsZWFzZSwgdGhlcmUgYXJlIFhNTCBmaWxlcyBkZXNjcmliaW5nIHRoZSBzaWduYXR1cmVzIG9mIGFsbCBwdWJsaWMgQVBJcyBjb250YWluZWQgaW4gdGhlIHJlbGVhc2UuIFRoZSBDVFMgY29udGFpbnMgYSB1dGlsaXR5IHRvIGNoZWNrIHRob3NlIEFQSSBzaWduYXR1cmVzIGFnYWluc3QgdGhlIEFQSXMgYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2UuIFRoZSByZXN1bHRzIGZyb20gc2lnbmF0dXJlIGNoZWNraW5nIGFyZSByZWNvcmRlZCBpbiB0aGUgdGVzdCByZXN1bHQgWE1MIGZpbGUuCis8L3RkPgorPC90cj4KKzx0cj48dGQ+UGxhdGZvcm0gQVBJIFRlc3RzPC90ZD4KKzx0ZD5UZXN0IHRoZSBwbGF0Zm9ybSAoY29yZSBsaWJyYXJpZXMgYW5kIEFuZHJvaWQgQXBwbGljYXRpb24gRnJhbWV3b3JrKSBBUElzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIFNESyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2FuZHJvaWQvcmVmZXJlbmNlL2NsYXNzZXMuaHRtbCI+Q2xhc3MgSW5kZXg8L2E+Cit0byBlbnN1cmUgQVBJIGNvcnJlY3RuZXNzOgorPHVsPgorPGxpPmNvcnJlY3QgY2xhc3MsIGF0dHJpYnV0ZSBhbmQgbWV0aG9kIHNpZ25hdHVyZXM8L2xpPgorPGxpPmNvcnJlY3QgbWV0aG9kIGJlaGF2aW9yPC9saT4KKzxsaT5uZWdhdGl2ZSB0ZXN0cyB0byBlbnN1cmUgZXhwZWN0ZWQgYmVoYXZpb3IgZm9yIGluY29ycmVjdCBwYXJhbWV0ZXIgaGFuZGxpbmc8L2xpPgorPC91bD4KKzwvdGQ+PC90cj4KKzx0cj48dGQ+RGFsdmlrIFZNIFRlc3RzPC90ZD48dGQ+VGhlIHRlc3RzIGZvY3VzIG9uIHRlc3RpbmcgdGhlIERhbHZpayBWTTwvdGQ+PC90cj4KKzx0cj48dGQ+UGxhdGZvcm0gRGF0YSBNb2RlbDwvdGQ+Cis8dGQ+VGhlIENUUyB0ZXN0cyB0aGUgY29yZSBwbGF0Zm9ybSBkYXRhIG1vZGVsIGFzIGV4cG9zZWQgdG8gYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0aHJvdWdoIGNvbnRlbnQgcHJvdmlkZXJzLCBhcyBkb2N1bWVudGVkIGluIHRoZSBTREsgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hbmRyb2lkL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5hbmRyb2lkLnByb3ZpZGVyPC9hPgorcGFja2FnZToKKzx1bD4KKzxsaT5jb250YWN0czwvbGk+Cis8bGk+YnJvd3NlcjwvbGk+Cis8bGk+c2V0dGluZ3M8L2xpPgorPGxpPm1vcmUuLi48L2xpPgorPC91bD4KKzwvdGQ+PC90cj4KKzx0cj48dGQ+UGxhdGZvcm0gSW50ZW50czwvdGQ+Cis8dGQ+VGhlIENUUyB0ZXN0cyB0aGUgY29yZSBwbGF0Zm9ybSBpbnRlbnRzLCBhcyBkb2N1bWVudGVkIGluIHRoZSBTREsgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hbmRyb2lkL3JlZmVyZW5jZS9hdmFpbGFibGUtaW50ZW50cy5odG1sIj5BdmFpbGFibGUgSW50ZW50czwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+PHRkPlBsYXRmb3JtIFBlcm1pc3Npb25zPC90ZD4KKzx0ZD5UaGUgQ1RTIHRlc3RzIHRoZSBjb3JlIHBsYXRmb3JtIHBlcm1pc3Npb25zLCBhcyBkb2N1bWVudGVkIGluIHRoZSBTREsgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hbmRyb2lkL3JlZmVyZW5jZS9hbmRyb2lkL01hbmlmZXN0LnBlcm1pc3Npb24uaHRtbCI+QXZhaWxhYmxlIFBlcm1pc3Npb25zPC9hPi48L3RkPgorPC90cj4KKzx0cj48dGQ+UGxhdGZvcm0gUmVzb3VyY2VzIDxicj48L3RkPgorPHRkPlRoZSBDVFMgdGVzdHMgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIGNvcmUgcGxhdGZvcm0gcmVzb3VyY2UgdHlwZXMsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIFNESyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2FuZHJvaWQvcmVmZXJlbmNlL2F2YWlsYWJsZS1yZXNvdXJjZXMuaHRtbCI+QXZhaWxhYmxlIFJlc291cmNlIFR5cGVzPC9hPgorLiBUaGlzIGluY2x1ZGVzIHRlc3RzIGZvcjoKKzx1bD4KKzxsaT5zaW1wbGUgdmFsdWVzPC9saT4KKzxsaT5kcmF3YWJsZXM8L2xpPgorPGxpPm5pbmUtcGF0Y2g8L2xpPgorPGxpPmFuaW1hdGlvbnM8L2xpPgorPGxpPmxheW91dHM8L2xpPgorPGxpPnN0eWxlcyBhbmQgdGhlbWVzPC9saT4KKzxsaT5sb2FkaW5nIGFsdGVybmF0ZSByZXNvdXJjZXM8L2xpPgorPC91bD48L3RkPjwvdHI+Cis8L3Rib2R5PjwvdGFibGU+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2luZGV4LmpkIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9pbmRleC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzM5YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9pbmRleC5qZApAQCAtMCwwICsxLDY3IEBACitwYWdlLnRpdGxlPUFuZHJvaWQgQ29tcGF0aWJpbGl0eQorZG9jLnR5cGU9Y29tcGF0aWJpbGl0eQorQGpkOmJvZHkKKzxwPkFuZHJvaWQgaXMgYW4gb3BlbiBzb3VyY2UgcHJvZHVjdCwgYW5kIGFueW9uZSBjYW4gdXNlIHRoZSBzb3VyY2UgY29kZSB0byBidWlsZAorZGV2aWNlcy4gVGhlIHB1cnBvc2Ugb2YgdGhlIEFuZHJvaWQgY29tcGF0aWJpbGl0eSBwcm9ncmFtIGlzIHRvIGhlbHAgQW5kcm9pZAorZGV2aWNlIGltcGxlbWVudGF0aW9ucyByZW1haW4gY29tcGF0aWJsZSB3aXRoIGFsbCBhcHBzLjwvcD4KKzxwPkEgZGV2aWNlIGlzIGNvbnNpZGVyZWQgY29tcGF0aWJsZSBpZiBleGlzdGluZyBhbmQgbmV3IHRoaXJkLXBhcnR5CithcHBsaWNhdGlvbnMgcnVuIGNvcnJlY3RseSBvbiBpdC4gUG9vciBkZXZpY2UgaW1wbGVtZW50YXRpb25zIHRoYXQgY2hhbmdlIEFQSXMKK29yIGFsdGVyIGJlaGF2aW9ycyB3aWxsIGJyZWFrIHRoZXNlIGFwcHMgYW5kIHNvIGFyZSBub3QgY29tcGF0aWJsZS4gVGhlCitBbmRyb2lkIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSdzIGFpbSBpcyB0byBlbnN1cmUgdGhhdCB0aGVzZSBBUElzIGFyZQorY29uc2lzdGVudGx5IGltcGxlbWVudGVkIGFjcm9zcyBkZXZpY2VzLjwvcD4KKzxwPlRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBhbmQgY29tcGF0aWJpbGl0eSBwcm9ncmFtIGlzCisxLjYsIHdoaWNoIHJvdWdobHkgY29ycmVzcG9uZGVkIHRvIHRoZSBEb251dCBicmFuY2guICBUaGUgY29tcGF0aWJpbGl0eQorcHJvZ3JhbSBmb3IgQW5kcm9pZCAyLnggKGNvcnJlc3BvbmRpbmcgdG8gRWNsYWlyKSBpcyBjb21pbmcgc29vbi48L3A+Cis8aDI+V2h5IGJ1aWxkIGNvbXBhdGlibGUgQW5kcm9pZCBkZXZpY2VzPzwvaDI+Cis8aDM+VXNlcnMgd2FudCBhIGN1c3RvbWl6YWJsZSBkZXZpY2UuPC9oMz4KKzxwPkEgbW9iaWxlIHBob25lIGlzIGEgaGlnaGx5IHBlcnNvbmFsLCBhbHdheXMtb24sIGFsd2F5cy1wcmVzZW50IGdhdGV3YXkgdG8KK3RoZSBJbnRlcm5ldC4gV2UgaGF2ZW4ndCBtZXQgYSB1c2VyIHlldCB3aG8gZGlkbid0IHdhbnQgdG8gY3VzdG9taXplIGl0IGJ5CitleHRlbmRpbmcgaXRzIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyB3aHkgQW5kcm9pZCB3YXMgZGVzaWduZWQgYXMgYSByb2J1c3QKK3BsYXRmb3JtIGZvciBydW5uaW5nIGFmdGVyLW1hcmtldCBhcHBsaWNhdGlvbnMuPC9wPgorCis8aDM+RGV2ZWxvcGVycyBvdXRudW1iZXIgdXMgYWxsLjwvaDM+Cis8cD5ObyBkZXZpY2UgbWFudWZhY3R1cmVyIGNhbiBob3BlIHRvIHdyaXRlIGFsbCB0aGUgc29mdHdhcmUgdGhhdCBhbnlvbmUgY291bGQKK2NvbmNlaXZhYmx5IG5lZWQuIFdlIG5lZWQgdGhpcmQtcGFydHkgZGV2ZWxvcGVycyB0byB3cml0ZSB0aGUgYXBwcyB1c2VycyB3YW50LAorc28gdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBhaW1zIHRvIG1ha2UgaXQgYXMgZWFzeSBhbmQgb3BlbiBhcworcG9zc2libGUgZm9yIGRldmVsb3BlcnMgdG8gYnVpbGQgYXBwcy48L3A+CisKKzxoMz5FdmVyeW9uZSBuZWVkcyBhIGNvbW1vbiBlY29zeXN0ZW0uPC9oMz4KKzxwPkV2ZXJ5IGxpbmUgb2YgY29kZSBkZXZlbG9wZXJzIHdyaXRlIHRvIHdvcmsgYXJvdW5kIGEgcGFydGljdWxhciBwaG9uZSdzIGJ1ZworaXMgYSBsaW5lIG9mIGNvZGUgdGhhdCBkaWRuJ3QgYWRkIGEgbmV3IGZlYXR1cmUuIFRoZSBtb3JlIGNvbXBhdGlibGUgcGhvbmVzCit0aGVyZSBhcmUsIHRoZSBtb3JlIGFwcHMgdGhlcmUgd2lsbCBiZS4gQnkgYnVpbGRpbmcgYSBmdWxseSBjb21wYXRpYmxlIEFuZHJvaWQKK2RldmljZSwgeW91IGJlbmVmaXQgZnJvbSB0aGUgaHVnZSBwb29sIG9mIGFwcHMgd3JpdHRlbiBmb3IgQW5kcm9pZCwgd2hpbGUKK2luY3JlYXNpbmcgdGhlIGluY2VudGl2ZSBmb3IgZGV2ZWxvcGVycyB0byBidWlsZCBtb3JlIG9mIHRob3NlIGFwcHMuPC9wPgorCisKKzxoMj5BbmRyb2lkIGNvbXBhdGliaWxpdHkgaXMgZnJlZSwgYW5kIGl0J3MgZWFzeS48L2gyPgorPHA+SWYgeW91IGFyZSBidWlsZGluZyBhIG1vYmlsZSBkZXZpY2UsIHlvdSBjYW4gZm9sbG93IHRoZXNlIHN0ZXBzIHRvIG1ha2UKK3N1cmUgeW91ciBkZXZpY2UgaXMgY29tcGF0aWJsZSB3aXRoIEFuZHJvaWQuIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlCitBbmRyb2lkIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSBpbiBnZW5lcmFsLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1jb21wYXRpYmlsaXR5L292ZXJ2aWV3Lmh0bWwiPnRoZSBwcm9ncmFtIG92ZXJ2aWV3PC9hPi48L3A+Cis8cD5CdWlsZGluZyBhIGNvbXBhdGlibGUgZGV2aWNlIGlzIGEgZm91ci1zdGVwIHByb2Nlc3M6PC9wPgorPG9sPgorICA8bGk+PGI+T2J0YWluIHRoZSBBbmRyb2lkIHNvZnR3YXJlIHN0YWNrIHNvdXJjZSBjb2RlPC9iPjxwPlRoaXMgaXMgdGhlCisgIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvaW5kZXguaHRtbCI+c291cmNlIGNvZGUgZm9yIHRoZSBBbmRyb2lkCisgIHBsYXRmb3JtPC9hPiwgdGhhdCB5b3UgcG9ydCB0byB5b3VyIGhhcmR3YXJlLjwvcD48L2xpPgorICA8bGk+PGI+Q29tcGx5IHdpdGggQW5kcm9pZCBDb21wYXRpYmlsaXR5IERlZmluaXRpb24gRG9jdW1lbnQ8L2I+PHA+CisgIFRoaXMgZG9jdW1lbnQgZW51bWVyYXRlcyB0aGUgc29mdHdhcmUgYW5kIHRoZSBoYXJkd2FyZSBmZWF0dXJlcyBvZgorICBhIGNvbXBhdGlibGUgQW5kcm9pZCBkZXZpY2UuPC9wPjwvbGk+CisgIDxsaT48Yj5QYXNzIHRoZSBDb21wYXRpYmlsaXR5IFRlc3QgU3VpdGUgKENUUyk8L2I+PHA+WW91IGNhbiB1c2UgdGhlIENUUworICAoaW5jbHVkZWQgaW4gdGhlIEFuZHJvaWQgc291cmNlIGNvZGUpIGFzIGFuIG9uZ29pbmcgYWlkIHRvIGNvbXBhdGliaWxpdHkKKyAgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLjwvcD48L2xpPgorICA8bGk+PGI+U3VibWl0IENUUyByZXBvcnQ8L2I+PHA+W09wdGlvbmFsXSBZb3UgY2FuIGFsc28gc3VibWl0IHlvdXIgQ1RTIHJlcG9ydCwKKyAgc28gdGhhdCBpdCBjYW4gYmUgdmFsaWRhdGVkIGFuZCByZWNvcmRlZC48L3A+PHA+PGk+Tm90ZToKKyAgdGhlIHN1Ym1pc3Npb24gc3lzdGVtIGlzIGN1cnJlbnRseSB1bmRlciBjb25zdHJ1Y2l0b24sIGFuZCBpcyBub3QgY3VycmVudGx5CisgIGF2YWlsYWJsZS48L2k+PC9wPjwvbGk+Cis8L29sPgorCis8aDI+QmVuZWZpdHMgb2YgY29tcGF0aWJpbGl0eTwvaDI+Cis8cD5CeSBzdWJtaXR0aW5nIGEgdmFsaWRhdGVkIENUUyByZXBvcnQsIHlvdSByZWNlaXZlIHB1YmxpYyByZWNvZ25pdGlvbiBvZgoreW91ciBkZXZpY2UncyBjb21wYXRpYmlsaXR5LiBUaGlzIGFsc28gb3BlbnMgdXAgYWRkaXRpb25hbCBvcHRpb25zIHlvdSBjYW4KK3B1cnN1ZSBzdWNoIGFzIHVzZSBvZiB0aGUgQW5kcm9pZCBicmFuZGluZywgYWNjZXNzIHRvIEFuZHJvaWQgTWFya2V0LCBhbmQKK21vcmUuPC9wPgorPHA+QXMgYSBjb25zZXF1ZW5jZSBvZiBzb21lIGxlZ2FsIHF1aXJrcywgd2UgYXJlbid0IGFibGUgdG8gb2ZmZXIgYXV0b21hdGljCitsaWNlbnNpbmcgb2YgZWl0aGVyIHRoZSBBbmRyb2lkIE1hcmtldCBvciBicmFuZGluZy4gVG8gYWN0dWFsbHkgb2J0YWluIGFjY2VzcwordG8gdGhlc2UgcHJvZ3JhbXMsIHlvdSB3aWxsIG5lZWQgdG8gPGEKK2hyZWY9IntAZG9jUm9vdH1jb21wYXRpYmlsaXR5L2NvbnRhY3QtdXMuaHRtbCI+Y29udGFjdCB1czwvYT4gdG8gb2J0YWluIGEKK2xpY2Vuc2UuPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9vdmVydmlldy5qZCBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvb3ZlcnZpZXcuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5ZTJjMgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvb3ZlcnZpZXcuamQKQEAgLTAsMCArMSw4OCBAQAorcGFnZS50aXRsZT1Db21wYXRpYmlsaXR5IFByb2dyYW0gT3ZlcnZpZXcKK2RvYy50eXBlPWNvbXBhdGliaWxpdHkKK0BqZDpib2R5Cis8cD5UaGUgQW5kcm9pZCBjb21wYXRpYmlsaXR5IHByb2dyYW0gbWFrZXMgaXQgZWFzeSBmb3IgbW9iaWxlIGRldmljZQorbWFudWZhY3R1cmVycyB0byBkZXZlbG9wIGNvbXBhdGlibGUgQW5kcm9pZCBkZXZpY2VzLjwvcD4KKzxoMz5Qcm9ncmFtIGdvYWxzPC9oMz4KKzxwPlRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSB3b3JrcyBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIGVudGlyZQorQW5kcm9pZCBjb21tdW5pdHksIGluY2x1ZGluZyB1c2VycywgZGV2ZWxvcGVycywgYW5kIGRldmljZSBtYW51ZmFjdHVyZXJzLjwvcD4KKzxwPkVhY2ggZ3JvdXAgZGVwZW5kcyBvbiB0aGUgb3RoZXJzLiBVc2VycyB3YW50IGEgd2lkZSBzZWxlY3Rpb24gb2YgZGV2aWNlcworYW5kIGdyZWF0IGFwcHM7IGdyZWF0IGFwcHMgY29tZSBmcm9tIGRldmVsb3BlcnMgbW90aXZhdGVkIGJ5IGEgbGFyZ2UgbWFya2V0Citmb3IgdGhlaXIgYXBwcyB3aXRoIG1hbnkgZGV2aWNlcyBpbiB1c2VycycgaGFuZHM7IGRldmljZSBtYW51ZmFjdHVyZXJzIHJlbHkKK29uIGEgd2lkZSB2YXJpZXR5IG9mIGdyZWF0IGFwcHMgdG8gaW5jcmVhc2UgdGhlaXIgcHJvZHVjdHMnIHZhbHVlIGZvcgorY29uc3VtZXJzLjwvcD4KKzxwPk91ciBnb2FscyB3ZXJlIGRlc2lnbmVkIHRvIGJlbmVmaXQgZWFjaCBvZiB0aGVzZSBncm91cHM6PC9wPgorPHVsPgorPGxpPjxiPlByb3ZpZGUgYSBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIGFuZCBoYXJkd2FyZSBlbnZpcm9ubWVudCB0byBhcHBsaWNhdGlvbgorZGV2ZWxvcGVycy48L2I+PHA+V2l0aG91dCBhIHN0cm9uZyBjb21wYXRpYmlsaXR5IHN0YW5kYXJkLCBkZXZpY2VzIGNhbiB2YXJ5IHNvCitncmVhdGx5IHRoYXQgZGV2ZWxvcGVycyBtdXN0IGRlc2lnbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlaXIgYXBwbGljYXRpb25zCitmb3IgZGlmZmVyZW50IGRldmljZXMuIFRoZSBjb21wYXRpYmlsaXR5IHByb2dyYW0gcHJvdmlkZXMgYSBwcmVjaXNlIGRlZmluaXRpb24KK29mIHdoYXQgZGV2ZWxvcGVycyBjYW4gZXhwZWN0IGZyb20gYSBjb21wYXRpYmxlIGRldmljZSBpbiB0ZXJtcyBvZiBBUElzIGFuZAorY2FwYWJpbGl0aWVzLiBEZXZlbG9wZXJzIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBtYWtlIGdvb2QgZGVzaWduCitkZWNpc2lvbnMsIGFuZCBiZSBjb25maWRlbnQgdGhhdCB0aGVpciBhcHBzIHdpbGwgcnVuIHdlbGwgb24gYW55IGNvbXBhdGlibGUKK2RldmljZS48L3A+PC9saT4KKzxsaT48Yj5FbmFibGUgYSBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIGV4cGVyaWVuY2UgZm9yIGNvbnN1bWVycy48L2I+PHA+SWYgYW4KK2FwcGxpY2F0aW9uIHJ1bnMgd2VsbCBvbiBvbmUgY29tcGF0aWJsZSBBbmRyb2lkIGRldmljZSwgaXQgc2hvdWxkIHJ1biB3ZWxsIG9uCithbnkgb3RoZXIgZGV2aWNlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzYW1lIEFuZHJvaWQgcGxhdGZvcm0gdmVyc2lvbi4KK0FuZHJvaWQgZGV2aWNlcyB3aWxsIGRpZmZlciBpbiBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY2FwYWJpbGl0aWVzLCBzbyB0aGUKK2NvbXBhdGliaWxpdHkgcHJvZ3JhbSBhbHNvIHByb3ZpZGVzIHRoZSB0b29scyBuZWVkZWQgZm9yIGRpc3RyaWJ1dGlvbiBzeXN0ZW1zCitzdWNoIGFzIEFuZHJvaWQgTWFya2V0IHRvIGltcGxlbWVudCBhcHByb3ByaWF0ZSBmaWx0ZXJpbmcuIFRoaXMgbWVhbnMgdGhhdAordXNlcnMgY2FuIG9ubHkgc2VlIGFwcGxpY2F0aW9ucyB3aGljaCB0aGV5IGNhbiBhY3R1YWxseSBydW4uPC9wPjwvbGk+Cis8bGk+PGI+RW5hYmxlIGRldmljZSBtYW51ZmFjdHVyZXJzIHRvIGRpZmZlcmVudGlhdGUgd2hpbGUgYmVpbmcKK2NvbXBhdGlibGUuPC9iPjxwPlRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSBmb2N1c2VzIG9uIHRoZSBhc3BlY3RzIG9mCitBbmRyb2lkIHJlbGV2YW50IHRvIHJ1bm5pbmcgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zLCB3aGljaCBhbGxvd3MgZGV2aWNlCittYW51ZmFjdHVyZXJzIHRoZSBmbGV4aWJpbGl0eSB0byBjcmVhdGUgdW5pcXVlIGRldmljZXMgdGhhdCBhcmUgbm9uZXRoZWxlc3MKK2NvbXBhdGlibGUuPC9wPjwvbGk+Cis8bGk+PGI+TWluaW1pemUgY29zdHMgYW5kIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aAorY29tcGF0aWJpbGl0eS48L2I+PHA+RW5zdXJpbmcgY29tcGF0aWJpbGl0eSBzaG91bGQgYmUgZWFzeSBhbmQgaW5leHBlbnNpdmUgdG8KK2RldmljZSBtYW51ZmFjdHVyZXJzLiBUaGUgdGVzdGluZyB0b29sIChDVFMpIGlzIGZyZWUgYW5kIHdpbGwgc29vbiBiZSBhdmFpbGFibGUKK2luIG9wZW4gc291cmNlLiBDVFMgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBmb3IgY29udGludW91cyBzZWxmLXRlc3RpbmcgZHVyaW5nCit0aGUgZGV2aWNlIGRldmVsb3BtZW50IHByb2Nlc3MgdG8gZWxpbWluYXRlIHRoZSBjb3N0IG9mIGNoYW5naW5nIHlvdXIgd29ya2Zsb3cKK29yIHNlbmRpbmcgeW91ciBkZXZpY2UgdG8gYSB0aGlyZCBwYXJ0eSBmb3IgdGVzdGluZy4gTWVhbndoaWxlLCB0aGVyZSBhcmUgbm8KK3JlcXVpcmVkIGNlcnRpZmljYXRpb25zLCBhbmQgdGh1cyBubyBjb3JyZXNwb25kaW5nIGNvc3RzIGFuZCBmZWVzLjwvcD48L2xpPgorPC91bD4KKzxwPlRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aHJlZSBrZXkgY29tcG9uZW50czo8L3A+Cis8dWw+Cis8bGk+VGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBBbmRyb2lkIHNvZnR3YXJlIHN0YWNrPC9saT4KKzxsaT5UaGUgQ29tcGF0aWxiaWxpdHkgRGVmaW5pdGlvbiBEb2N1bWVudCwgcmVwcmVzZW50aW5nIHRoZSAicG9saWN5IgorYXNwZWN0IG9mIGNvbXBhdGliaWxpdHk8L2xpPgorPGxpPlRoZSBDb21wYXRpbGJpbGl0eSBUZXN0IFN1aXRlLCByZXByZXNlbnRpbmcgdGhlICJtZWNoYW5pc20iIG9mIGNvbXBhdGliaWxpdHk8L2xpPgorPC91bD4KKzxwPkp1c3QgYXMgZWFjaCB2ZXJzaW9uIG9mIHRoZSBBbmRyb2lkIHBsYXRmb3JtIGV4aXN0cyBpbiBhIHNlcGFyYXRlIGJyYW5jaCBpbgordGhlIHNvdXJjZSBjb2RlIHRyZWUsIHRoZXJlIGlzIGEgc2VwYXJhdGUgQ1RTIGFuZCBDREQgZm9yIGVhY2ggdmVyc2lvbiBhcword2VsbC4gVGhlIENERCwgQ1RTLCBhbmQgc291cmNlIGNvZGUgYXJlIC0tIGFsb25nIHdpdGggeW91ciBoYXJkd2FyZSBhbmQgeW91cgorc29mdHdhcmUgY3VzdG9taXphdGlvbnMgLS0gZXZlcnl0aGluZyB5b3UgbmVlZCB0byBjcmVhdGUgYSBjb21wYXRpYmxlIGRldmljZS48L3A+CisKKzxoMz5Db21wYXRpYmlsaXR5IERlZmluaXRpb24gRG9jdW1lbnQgKENERCk8L2gzPgorPHA+Rm9yIGVhY2ggcmVsZWFzZSBvZiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgYSBkZXRhaWxlZCBDb21wYXRpYmlsaXR5CitEZWZpbml0aW9uIERvY3VtZW50IChDREQpIHdpbGwgYmUgcHJvdmlkZWQuIFRoZSBDREQgcmVwcmVzZW50cyB0aGUgInBvbGljeSIKK2FzcGVjdCBvZiBBbmRyb2lkIGNvbXBhdGliaWxpdHkuPC9wPgorPHA+Tm8gdGVzdCBzdWl0ZSwgaW5jbHVkaW5nIENUUywgY2FuIHRydWx5IGJlIGNvbXByZWhlbnNpdmUuIEZvciBpbnN0YW5jZSwgdGhlCitDVFMgaW5jbHVkZXMgYSB0ZXN0IHRoYXQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2UgYW5kIGNvcnJlY3QgYmVoYXZpb3Igb2YKK09wZW5HTCBncmFwaGljcyBBUElzLCBidXQgbm8gc29mdHdhcmUgdGVzdCBjYW4gdmVyaWZ5IHRoYXQgdGhlIGdyYXBoaWNzCithY3R1YWxseSBhcHBlYXIgY29ycmVjdGx5IG9uIHRoZSBzY3JlZW4uIE1vcmUgZ2VuZXJhbGx5LCBpdCdzIGltcG9zc2libGUgdG8KK3Rlc3QgdGhlIHByZXNlbmNlIG9mIGhhcmR3YXJlIGZlYXR1cmVzIHN1Y2ggYXMga2V5Ym9hcmRzLCBkaXNwbGF5IGRlbnNpdHksCitXaUZpLCBhbmQgQmx1ZXRvb3RoLjwvcD4KKzxwPlRoZSBDREQncyByb2xlIGlzIHRvIGNvZGlmeSBhbmQgY2xhcmlmeSBzcGVjaWZpYyByZXF1aXJlbWVudHMsIGFuZAorZWxpbWluYXRlIGFtYmlndWl0eS4gIFRoZSBDREQgZG9lcyBub3QgYXR0ZW1wdCB0byBiZSBjb21wcmVoZW5zaXZlLiBTaW5jZQorQW5kcm9pZCBpcyBhIHNpbmdsZSBjb3JwdXMgb2Ygb3Blbi1zb3VyY2UgY29kZSwgdGhlIGNvZGUgaXRzZWxmIGlzIHRoZQorY29tcHJlaGVuc2l2ZSAic3BlY2lmaWNhdGlvbiIgb2YgdGhlIHBsYXRmb3JtIGFuZCBpdHMgQVBJcy4gVGhlIENERCBhY3RzIGFzIGEKKyJodWIiLCByZWZlcmVuY2luZyBvdGhlciBjb250ZW50IChzdWNoIGFzIFNESyBBUEkgZG9jdW1lbnRhdGlvbikgdGhhdCBwcm92aWRlcworYSBmcmFtZXdvcmsgaW4gd2hpY2ggdGhlIEFuZHJvaWQgc291cmNlIGNvZGUgbWF5IGJlIHVzZWQgc28gdGhhdCB0aGUgZW5kCityZXN1bHQgaXMgYSBjb21wYXRpYmxlIHN5c3RlbS48L3A+Cis8cD5JZiB5b3Ugd2FudCB0byBidWlsZCBhIGRldmljZSBjb21wYXRpYmxlIHdpdGggYSBnaXZlbiBBbmRyb2lkIHZlcnNpb24sCitzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGF0IHZlcnNpb24sIGFuZCB0aGVuIHJlYWQgdGhlCitjb3JyZXNwb25kaW5nIENERCBhbmQgc3RheSB3aXRoaW4gaXRzIGd1aWRlbGluZXMuIEZvciBhZGRpdGlvbmFsIGRldGFpbHMsCitzaW1wbHkgZXhhbWluZSA8YSBocmVmPSIiPnRoZSBsYXRlc3QgQ0REPC9hPi48L3A+CisKKzxoMz5Db21wYXRpYmlsaXR5IFRlc3QgU3VpdGUgKENUUyk8L2gzPgorPHA+VGhlIENUUyBpcyBhIGZyZWUsIGNvbW1lcmNpYWwtZ3JhZGUgdGVzdCBzdWl0ZSwgYXZhaWxhYmxlIGFsb25nIHdpdGggdGhlCitBbmRyb2lkIHNvdXJjZSBjb2RlLiBUaGUgQ1RTIHJlcHJlc2VudHMgdGhlICJtZWNoYW5pc20iIG9mIGNvbXBhdGliaWxpdHkuPC9wPgorPHA+VGhlIENUUyBydW5zIG9uIGEgZGVza3RvcCBtYWNoaW5lIGFuZCBleGVjdXRlcyB0ZXN0IGNhc2VzIGRpcmVjdGx5IG9uCithdHRhY2hlZCBkZXZpY2VzIG9yIGFuIGVtdWxhdG9yLiBUaGUgQ1RTIGlzIGEgc2V0IG9mIHVuaXQgdGVzdHMgZGVzaWduZWQgdG8gYmUKK2ludGVncmF0ZWQgaW50byB0aGUgZGFpbHkgd29ya2Zsb3cgKHN1Y2ggYXMgdmlhIGEgY29udGludW91cyBidWlsZCBzeXN0ZW0pIG9mCit0aGUgZW5naW5lZXJzIGJ1aWxkaW5nIGEgZGV2aWNlLiBJdHMgaW50ZW50IGlzIHRvIHJldmVhbCBpbmNvbXBhdGliaWxpdGllcworZWFybHkgb24sIGFuZCBlbnN1cmUgdGhhdCB0aGUgc29mdHdhcmUgcmVtYWlucyBjb21wYXRpYmxlIHRocm91Z2hvdXQgdGhlCitkZXZlbG9wbWVudCBwcm9jZXNzLjwvcD4KKzxwPkZvciBkZXRhaWxzIG9uIHRoZSBDVFMsIGNvbnN1bHQgdGhlIDxhCitocmVmPSJ7QGRvY1Jvb3R9Y29tcGF0aWJpbGl0eS9jdHMtaW50cm8uaHRtbCI+Q1RTIGludHJvZHVjdGlvbjwvYT4uPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZG93bmxvYWRzL2Rvd25sb2Fkc190b2MuY3MgYi9wZGsvZG9jcy9kb3dubG9hZHMvZG93bmxvYWRzX3RvYy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGY0M2FmCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvZG93bmxvYWRzL2Rvd25sb2Fkc190b2MuY3MKQEAgLTAsMCArMSwyMSBAQAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKzwhLS0KK2Z1bmN0aW9uIG5vdGhpbmcoKSB7fQorLS0+Cis8L3NjcmlwdD4KKworPHVsPgorICA8bGk+PGgyPlBESzwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSIiPlBESyAxLjY8L2E+PC9saT4KKyAgPC91bD48L2xpPgorCisgIDxsaT48aDI+Q29tcGF0aWJpbGl0eTwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSIiPkFuZHJvaWQgMS42PC9hPjwvbGk+CisgIDwvdWw+PC9saT4KKzwvdWw+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKzwhLS0KKyAgICBidWlsZFRvZ2dsZUxpc3RzKCk7CisvLy0tPgorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9kb3dubG9hZHMvaW5kZXguamQgYi9wZGsvZG9jcy9kb3dubG9hZHMvaW5kZXguamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmNWEyZgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2Rvd25sb2Fkcy9pbmRleC5qZApAQCAtMCwwICsxLDQ0IEBACitwYWdlLnRpdGxlPURvd25sb2FkcworZG9jLnR5cGU9ZG93bmxvYWRzCitkb2MuaGlkZW5hdj10cnVlCitAamQ6Ym9keQorPHA+VGhpcyBwYWdlIHByb3ZpZGVzIGFjY2VzcyB0byB2YXJpb3VzIGRvd25sb2Fkcy4gTm90ZSB0aGF0IGlmIHlvdSdyZSBsb29raW5nCitmb3IgdGhlIEFuZHJvaWQgU0RLIChmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyksIHlvdSBzaG91bGQgdmlzaXQgPGEKK2hyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc2RrL2luZGV4Lmh0bWwiPmRldmVsb3Blci5hbmRyb2lkLmNvbTwvYT4uPC9wPgorCis8aDI+Q29tcGF0aWJpbGl0eTwvaDI+Cis8cD5UaGUgQ29tcGF0aWJpbGl0eSBEZWZpbml0aW9uIERvY3VtZW50IGNhbiBiZSBkb3dubG9hZGVkIGJlbG93LiBUaGUKK0NvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZSBpcyBhdmFpbGFibGUgaW4gdGhlIG9wZW4tc291cmNlIHRyZWUuPC9wPgorPHRhYmxlIGNsYXNzPSJkb3dubG9hZCI+IAorICA8dHI+IAorICAgICAgPHRoPkl0ZW08L3RoPiAKKyAgICAgIDx0aD5GaWxlPC90aD4gCisgICAgICA8dGg+U2l6ZTwvdGg+IAorICA8L3RyPiAKKyAgPHRyPiAKKyAgICA8dGQ+QW5kcm9pZCBDREQgMi4xPC90ZD4gCisgICAgPHRkPjxhIGhyZWY9IiI+YW5kcm9pZC1jZGQtMi4xLnBkZjwvYT48L3RkPiAKKyAgICA8dGQ+MjMwNzA4MDUgYnl0ZXM8L3RkPiAKKyAgPC90cj4gCisgIDx0ciBjbGFzcz0iYWx0LWNvbG9yIj4gCisgICAgPHRkPkFuZHJvaWQgQ1RTIDIuMSBNYW51YWw8L3RkPiAKKyAgICA8dGQ+PGEgaHJlZj0iIj5hbmRyb2lkLWN0cy1tYW51YWwtMi4xLjAucGRmPC9hPjwvdGQ+IAorICAgIDx0ZD4yMzA3MDgwNSBieXRlczwvdGQ+IAorICA8L3RyPiAKKyAgPHRyPiAKKyAgICA8dGQ+QW5kcm9pZCBDREQgMS42PC90ZD4gCisgICAgPHRkPjxhIGhyZWY9IiI+YW5kcm9pZC1jZGQtMS42LnBkZjwvYT48L3RkPiAKKyAgICA8dGQ+MjMwNzA4MDUgYnl0ZXM8L3RkPiAKKyAgPC90cj4gCisgIDx0ciBjbGFzcz0iYWx0LWNvbG9yIj4gCisgICAgPHRkPkFuZHJvaWQgQ1RTIDEuNiBNYW51YWw8L3RkPiAKKyAgICA8dGQ+PGEgaHJlZj0iIj5hbmRyb2lkLWN0cy1tYW51YWwtMS42LjQucGRmPC9hPjwvdGQ+IAorICAgIDx0ZD4yMzA3MDgwNSBieXRlczwvdGQ+IAorICA8L3RyPiAKKzwvdGFibGU+IAorPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGJ1aWxkIGFuIEFuZHJvaWQtY29tcGF0aWJsZSBkZXZpY2UsIHNlZSB0aGUKKzxhIGhyZWY9IntAZG9jUm9vdH1jb21wYXRpYmlsaXR5L2luZGV4Lmh0bWwiPkNvbXBhdGliaWxpdHk8L2E+IHBhZ2UuIE5vdGUgdGhhdAordGhlcmUgaXMgbm8gY29tcGF0aWJpbGl0eSBwcm9ncmFtIGZvciBBbmRyb2lkIDEuNSBhbmQgZWFybGllci4gTm90ZSBhbHNvIHRoYXQKK3RoZXJlIGlzIG5vIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSBmb3IgQW5kcm9pZCAyLjAsIHNpbmNlIGl0IHdhcyBzdXBlcmNlZGVkIGJ5CitBbmRyb2lkIDIuMSBhZnRlciBvbmx5IGEgZmV3IHdlZWtzLgorPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZmFxcy5qZCBiL3Bkay9kb2NzL2ZhcXMuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1ZDM4MAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ZhcXMuamQKQEAgLTAsMCArMSwzMjUgQEAKK3BhZ2UudGl0bGU9RnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKK2RvYy5oaWRlbmF2PXRydWUKK0BqZDpib2R5Cis8YSBuYW1lPSJhb3NwIj48L2E+PGgyPk9wZW4gU291cmNlPC9oMj4KKzxoMz5XaGF0IGlzIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Q/PC9oMz4KKzxwPldlIHVzZSB0aGUgcGhyYXNlICJBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiIG9yICJBT1NQIiB0byByZWZlciB0byB0aGUKKyAgcGVvcGxlLCB0aGUgcHJvY2Vzc2VzLCBhbmQgdGhlIHNvdXJjZSBjb2RlIHRoYXQgbWFrZSB1cCBBbmRyb2lkLjwvcD4KKzxwPlRoZSBwZW9wbGUgb3ZlcnNlZSB0aGUgcHJvamVjdCBhbmQgZGV2ZWxvcCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLiBUaGUKKyAgcHJvY2Vzc2VzIHJlZmVyIHRvIHRoZSB0b29scyBhbmQgcHJvY2VkdXJlcyB3ZSB1c2UgdG8gbWFuYWdlIHRoZSBkZXZlbG9wbWVudAorICBvZiB0aGUgc29mdHdhcmUuIFRoZSBuZXQgcmVzdWx0IGlzIHRoZSBzb3VyY2UgY29kZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGJ1aWxkCisgIGNlbGwgcGhvbmUgYW5kIG90aGVyIGRldmljZXMuPC9wPgorCis8aDM+V2h5IGRpZCB3ZSBvcGVuIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlPzwvaDM+Cis8cD5Hb29nbGUgc3RhcnRlZCB0aGUgQW5kcm9pZCBwcm9qZWN0IGluIHJlc3BvbnNlIHRvIG91ciBvd24gZXhwZXJpZW5jZXMKK2xhdW5jaGluZyBtb2JpbGUgYXBwcy4gV2Ugd2FudGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIHdvdWxkIGFsd2F5cyBiZSBhbgorb3BlbiBwbGF0Zm9ybSBhdmFpbGFibGUgZm9yIGNhcnJpZXJzLCBPRU1zLCBhbmQgZGV2ZWxvcGVycyB0byB1c2UgdG8gbWFrZQordGhlaXIgaW5ub3ZhdGl2ZSBpZGVhcyBhIHJlYWxpdHkuIFdlIGFsc28gd2FudGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIHdhcyBubworY2VudHJhbCBwb2ludCBvZiBmYWlsdXJlLCBzbyB0aGF0IG5vIHNpbmdsZSBpbmR1c3RyeSBwbGF5ZXIgY291bGQgcmVzdHJpY3Qgb3IgY29udHJvbAordGhlIGlubm92YXRpb25zIG9mIGFueSBvdGhlci4gIFRoZSBzaW5nbGUgbW9zdCBpbXBvcnRhbnQgZ29hbCBvZiB0aGUgQW5kcm9pZAorT3Blbi1Tb3VyY2UgUHJvamVjdCAoQU9TUCkgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9wZW4tc291cmNlIEFuZHJvaWQKK3NvZnR3YXJlIGlzIGltcGxlbWVudGVkIGFzIHdpZGVseSBhbmQgY29tcGF0aWJseSBhcyBwb3NzaWJsZSwgdG8gZXZlcnlvbmUncworYmVuZWZpdC48L3A+Cis8cD5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljIGF0IG91ciBQcm9qZWN0IFBoaWxvc29waHkgcGFnZS48L3A+CisKKzxoMz5XaGF0IGtpbmQgb2Ygb3Blbi1zb3VyY2UgcHJvamVjdCBpcyBBbmRyb2lkPzwvaDM+Cis8cD5Hb29nbGUgb3ZlcnNlZXMgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBjb3JlIEFuZHJvaWQgb3Blbi1zb3VyY2UgcGxhdGZvcm0sCisgIGFuZCB3b3JrcyB0byBjcmVhdGUgcm9idXN0IGRldmVsb3BlciBhbmQgdXNlciBjb21tdW5pdGllcy4gRm9yIHRoZSBtb3N0IHBhcnQKKyAgdGhlIEFuZHJvaWQgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHBlcm1pc3NpdmUgQXBhY2hlIFNvZnR3YXJlCisgIExpY2Vuc2UgMi4wLCByYXRoZXIgdGhhbiBhICJjb3B5bGVmdCIgbGljZW5zZS4gVGhlIG1haW4gcmVhc29uIGZvciB0aGlzIGlzCisgIGJlY2F1c2Ugb3VyIG1vc3QgaW1wb3J0YW50IGdvYWwgaXMgd2lkZXNwcmVhZCBhZG9wdGlvbiBvZiB0aGUgc29mdHdhcmUsIGFuZAorICB3ZSBiZWxpZXZlIHRoYXQgdGhlIEFTTDIuMCBsaWNlbnNlIGJlc3QgYWNoaWV2ZXMgdGhhdCBnb2FsLjwvcD4KKzxwPllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMgYXQgb3VyIFByb2plY3QgUGhpbG9zb3BoeSBhbmQKKyAgTGljZW5zaW5nIHBhZ2VzLiA8L3A+CisKKzxoMz5XaHkgaXMgR29vZ2xlIGluIGNoYXJnZSBvZiBBbmRyb2lkPzwvaDM+Cis8cD5MYXVuY2hpbmcgYSBzb2Z0d2FyZSBwbGF0Zm9ybSBpcyBjb21wbGV4LiBPcGVubmVzcyBpcyB2aXRhbCB0byB0aGUKKyAgbG9uZy10ZXJtIHN1Y2Nlc3Mgb2YgYSBwbGF0Zm9ybSwgc2luY2Ugb3Blbm5lc3MgaXMgcmVxdWlyZWQgdG8gYXR0cmFjdAorICBpbnZlc3RtZW50IGZyb20gZGV2ZWxvcGVycyBhbmQgZW5zdXJlIGEgbGV2ZWwgcGxheWluZyBmaWVsZC4gSG93ZXZlciwgdGhlCisgIHBsYXRmb3JtIGl0c2VsZiBtdXN0IGFsc28gYmUgYSBjb21wZWxsaW5nIHByb2R1Y3QgdG8gZW5kIHVzZXJzLjwvcD4KKzxwPlRoYXQncyB3aHkgR29vZ2xlIGhhcyBjb21taXR0ZWQgdGhlIHByb2Zlc3Npb25hbCBlbmdpbmVlcmluZyByZXNvdXJjZXMKKyAgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IEFuZHJvaWQgaXMgYSBmdWxseSBjb21wZXRpdGl2ZSBzb2Z0d2FyZSBwbGF0Zm9ybS4KKyAgR29vZ2xlIHRyZWF0cyB0aGUgQW5kcm9pZCBwcm9qZWN0IGFzIGEgZnVsbC1zY2FsZSBwcm9kdWN0IGRldmVsb3BtZW50CisgIG9wZXJhdGlvbiwgYW5kIHN0cmlrZXMgdGhlIGJ1c2luZXNzIGRlYWxzIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgdGhhdCBncmVhdAorICBkZXZpY2VzIHJ1bm5pbmcgQW5kcm9pZCBhY3R1YWxseSBtYWtlIGl0IHRvIG1hcmtldC48L3A+Cis8cD5CeSBtYWtpbmcgc3VyZSB0aGF0IEFuZHJvaWQgaXMgYSBzdWNjZXNzIHdpdGggZW5kIHVzZXJzLCB3ZSBoZWxwIGVuc3VyZSB0aGUKKyAgdml0YWxpdHkgb2YgQW5kcm9pZCBhcyBhIHBsYXRmb3JtLCBhbmQgYXMgYW4gb3Blbi1zb3VyY2UgcHJvamVjdC4gQWZ0ZXIgYWxsLAorICB3aG8gd2FudHMgdGhlIHNvdXJjZSBjb2RlIHRvIGFuIHVuc3VjY2Vzc2Z1bCBwcm9kdWN0PzwvcD4KKzxwPkdvb2dsZSdzIGdvYWwgaXMgdG8gZW5zdXJlIGEgc3VjY2Vzc2Z1bCBlY29zeXN0ZW0gYXJvdW5kIEFuZHJvaWQsIGJ1dCBubworICBvbmUgaXMgcmVxdWlyZWQgdG8gcGFydGljaXBhdGUsIG9mIGNvdXJzZS4gV2Ugb3BlbmVkIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlCisgIHNvIGFueW9uZSBjYW4gbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSB0byBtZWV0IHRoZWlyIG93biBuZWVkcy48L3A+CisKKzxoMz5XaGF0IGlzIEdvb2dsZSdzIG92ZXJhbGwgc3RyYXRlZ3kgZm9yIEFuZHJvaWQgcHJvZHVjdCBkZXZlbG9wbWVudD88L2gzPgorPHA+V2UgZm9jdXMgb24gcmVsZWFzaW5nIGdyZWF0IGRldmljZXMgaW50byBhIGNvbXBldGl0aXZlIG1hcmtldHBsYWNlLCBhbmQKKyAgdGhlbiBpbmNvcnBvcmF0ZSB0aGUgaW5ub3ZhdGlvbnMgYW5kIGVuaGFuY2VtZW50cyB3ZSBtYWRlIGludG8gdGhlIGNvcmUKKyAgcGxhdGZvcm0sIGFzIHRoZSBuZXh0IHZlcnNpb24uPC9wPgorPHA+SW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMgdGhhdCB0aGUgQW5kcm9pZCBlbmdpbmVlcmluZyB0ZWFtIHR5cGljYWxseSBmb2N1c2VzCisgIG9uIGEgc21hbGwgbnVtYmVyIG9mICJmbGFnc2hpcCIgZGV2aWNlcywgYW5kIGRldmVsb3BzIHRoZSBuZXh0IHZlcnNpb24gb2YKKyAgdGhlIEFuZHJvaWQgc29mdHdhcmUgdG8gc3VwcG9ydCB0aG9zZSBwcm9kdWN0IGxhdW5jaGVzLiBUaGVzZSBmbGFnc2hpcAorICBkZXZpY2VzIGFic29yYiBtdWNoIG9mIHRoZSBwcm9kdWN0IHJpc2sgYW5kIGJsYXplIGEgdHJhaWwgZm9yIHRoZSBicm9hZCBPRU0KKyAgY29tbXVuaXR5LCB3aG8gZm9sbG93IHVwIHdpdGggbWFueSBtb3JlIGRldmljZXMgdGhhdCB0YWtlIGFkdmFudGFnZSBvZiB0aGUKKyAgbmV3IGZlYXR1cmVzLiBJbiB0aGlzIHdheSwgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIEFuZHJvaWQgcGxhdGZvcm0gZXZvbHZlcworICBhY2NvcmRpbmcgdG8gdGhlIGFjdHVhbCBuZWVkcyBvZiByZWFsLXdvcmxkIGRldmljZXMuPC9wPgorCis8aDM+SG93IGlzIHRoZSBBbmRyb2lkIHNvZnR3YXJlIGRldmVsb3BlZD88L2gzPgorPHA+RWFjaCBwbGF0Zm9ybSB2ZXJzaW9uIG9mIEFuZHJvaWQgKHN1Y2ggYXMgMS41LCAxLjYsIGFuZCBzbyBvbikgaGFzIGEKKyAgY29ycmVzcG9uZGluZyBicmFuY2ggaW4gdGhlIG9wZW4tc291cmNlIHRyZWUuIEF0IGFueSBnaXZlbiBtb21lbnQsIHRoZSBtb3N0CisgIHJlY2VudCBzdWNoIGJyYW5jaCB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlICJjdXJyZW50IHN0YWJsZSIgYnJhbmNoIHZlcnNpb24uCisgIFRoaXMgY3VycmVudCBzdGFibGUgYnJhbmNoIGlzIHRoZSBvbmUgdGhhdCBtYW51ZmFjdHVyZXJzIHBvcnQgdG8gdGhlaXIKKyAgZGV2aWNlcy4gVGhpcyBicmFuY2ggaXMga2VwdCBzdWl0YWJsZSBmb3IgcmVsZWFzZSBhdCBhbGwgdGltZXMuPC9wPgorPHA+U2ltdWx0YW5lb3VzbHksIHRoZXJlIGlzIGFsc28gYSAiY3VycmVudCBleHBlcmltZW50YWwiIGJyYW5jaCwgd2hpY2ggaXMKKyAgd2hlcmUgc3BlY3VsYXRpdmUgY29udHJpYnV0aW9ucywgc3VjaCBhcyBsYXJnZSBuZXh0LWdlbmVyYXRpb24gZmVhdHVyZXMsIGFyZQorICBkZXZlbG9wZWQuIEJ1ZyBmaXhlcyBhbmQgb3RoZXIgY29udHJpYnV0aW9ucyBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQKKyAgc3RhYmxlIGJyYW5jaCBmcm9tIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIGFzIGFwcHJvcHJpYXRlLjwvcD4KKzxwPkZpbmFsbHksIEdvb2dsZSB3b3JrcyBvbiB0aGUgbmV4dCB2ZXJzaW9uIG9mIHRoZSBBbmRyb2lkIHBsYXRmb3JtIGluIHRhbmRlbQorICB3aXRoIGRldmVsb3BpbmcgYSBmbGFnc2hpcCBkZXZpY2UuIFRoaXMgYnJhbmNoIHB1bGxzIGluIGNoYW5nZXMgZnJvbSB0aGUKKyAgZXhwZXJpbWVudGFsIGFuZCBzdGFibGUgYnJhbmNoZXMgYXMgYXBwcm9wcmlhdGUuPC9wPgorPHA+WW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYyBhdCBvdXIgQnJhbmNoZXMgUmVsZWFzZXMKKyAgcGFnZS48L3A+CisKKzxoMz5XaHkgYXJlIHBhcnRzIG9mIEFuZHJvaWQgZGV2ZWxvcGVkIGluIHByaXZhdGU/PC9oMz4KKzxwPkl0IHR5cGljYWxseSB0YWtlcyBvdmVyIGEgeWVhciB0byBicmluZyBhIGRldmljZSB0byBtYXJrZXQsIGJ1dCBvZiBjb3Vyc2UKKyAgZGV2aWNlIG1hbnVmYWN0dXJlcnMgd2FudCB0byBzaGlwIHRoZSBsYXRlc3Qgc29mdHdhcmUgdGhleSBjYW4uIERldmVsb3BlcnMsCisgIG1lYW53aGlsZSwgZG9uJ3Qgd2FudCB0byBoYXZlIHRvIGNvbnN0YW50bHkgdHJhY2sgbmV3IHZlcnNpb25zIG9mIHRoZQorICBwbGF0Zm9ybSB3aGVuIHdyaXRpbmcgYXBwcy4gQm90aCBncm91cHMgZXhwZXJpZW5jZSBhIHRlbnNpb24gYmV0d2VlbgorICBzaGlwcGluZyBwcm9kdWN0cywgYW5kIG5vdCB3YW50aW5nIHRvIGZhbGwgYmVoaW5kLjwvcD4KKzxwPlRvIGFkZHJlc3MgdGhpcywgc29tZSBwYXJ0cyBvZiB0aGUgbmV4dCB2ZXJzaW9uIG9mIEFuZHJvaWQgaW5jbHVkaW5nIHRoZQorICBjb3JlIHBsYXRmb3JtIEFQSXMgYXJlIGRldmVsb3BlZCBpbiBhIHByaXZhdGUgYnJhbmNoLiBUaGVzZSBBUElzIGNvbnN0aXR1dGUKKyAgdGhlIG5leHQgdmVyc2lvbiBvZiBBbmRyb2lkLiBPdXIgYWltIGlzIHRvIGZvY3VzIGF0dGVudGlvbiBvbiB0aGUgY3VycmVudAorICBzdGFibGUgdmVyc2lvbiBvZiB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSwgd2hpbGUgd2UgcmVmaW5lIHRoZSBuZXh0IHZlcnNpb24KKyAgb2YgdGhlIHBsYXRmb3JtIHVzaW5nIHRoZSBmbGFnc2hpcCBBbmRyb2lkIGRldmljZXMuIFRoaXMgYWxsb3dzIGRldmVsb3BlcnMKKyAgYW5kIE9FTXMgdG8gZm9jdXMgb24gYSBzaW5nbGUgdmVyc2lvbiB3aXRob3V0IGhhdmluZyB0byB0cmFjayB1bmZpbmlzaGVkCisgIGZ1dHVyZSB3b3JrIGp1c3QgdG8ga2VlcCB1cC5PdGhlciBwYXJ0cyBvZiB0aGUgQW5kcm9pZCBzeXN0ZW0gdGhhdCBhcmVuJ3QKKyAgcmVsYXRlZCB0byBhcHBsaWNhdGlvbiBjb21wYXRpYmlsaXR5IGFyZSBkZXZlbG9wZWQgaW4gdGhlIG9wZW4sIGhvd2V2ZXIuCisgIEl0J3Mgb3VyIGludGVudGlvbiB0byBtb3ZlIG1vcmUgb2YgdGhlc2UgcGFydHMgdG8gb3BlbiBkZXZlbG9wbWVudCBvdmVyCisgIHRpbWUuPC9wPgorCis8aDM+V2hlbiBhcmUgc291cmNlIGNvZGUgcmVsZWFzZXMgbWFkZT88L2gzPgorPHA+V2hlbiB0aGV5IGFyZSByZWFkeS4gU29tZSBwYXJ0cyBvZiBBbmRyb2lkIGFyZSBkZXZlbG9wZWQgaW4gdGhlIG9wZW4sIGFuZAorICBzbyB0aGF0IHNvdXJjZSBjb2RlIGlzIGFsd2F5cyBhdmFpbGFibGUuIE90aGVyIHBhcnRzIGFyZSBkZXZlbG9wZWQgZmlyc3QgaW4KKyAgYSBwcml2YXRlIHRyZWUsIGFuZCB0aGF0IHNvdXJjZSBjb2RlIGlzIHJlbGVhc2VkIHdoZW4gdGhlIG5leHQgcGxhdGZvcm0KKyAgdmVyc2lvbiBpcyByZWFkeS48L3A+Cis8cD5JbiBzb21lIHJlbGVhc2VzLCBjb3JlIHBsYXRmb3JtIEFQSXMgd2lsbCBiZSByZWFkeSBmYXIgZW5vdWdoIGluIGFkdmFuY2UKKyAgdGhhdCB3ZSBjYW4gcHVzaCB0aGUgc291cmNlIGNvZGUgb3V0IGZvciBhbiBlYXJseSBsb29rIGluIGFkdmFuY2Ugb2YgdGhlCisgIGRldmljZSdzIHJlbGVhc2U7IGhvd2V2ZXIgaW4gb3RoZXJzLCB0aGlzIGlzbid0IHBvc3NpYmxlLiBJbiBhbGwgY2FzZXMsIHdlCisgIHJlbGVhc2UgdGhlIHBsYXRmb3JtIHNvdXJjZSB3aGVuIHdlIGZlZWwgdGhlIHZlcnNpb24gaGFzIHN0YWJpbGl6ZWQgZW5vdWdoLAorICBhbmQgd2hlbiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBwZXJtaXRzLiBSZWxlYXNpbmcgdGhlIHNvdXJjZSBjb2RlIGlzIGEKKyAgZmFpcmx5IGNvbXBsZXggcHJvY2Vzcy48L3A+CisKKzxoMz5XaGF0IGlzIGludm9sdmVkIGluIHJlbGVhc2luZyB0aGUgc291cmNlIGNvZGUgZm9yIGEgbmV3IEFuZHJvaWQgdmVyc2lvbj88L2gzPgorPHA+UmVsZWFzaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSBpcyBhCisgIHNpZ25pZmljYW50IHByb2Nlc3MuIEZpcnN0LCB0aGUgc29mdHdhcmUgZ2V0cyBidWlsdCBpbnRvIGEgc3lzdGVtIGltYWdlIGZvcgorICBhIGRldmljZSwgYW5kIHB1dCB0aHJvdWdoIHZhcmlvdXMgZm9ybXMgb2YgY2VydGlmaWNhdGlvbiwgaW5jbHVkaW5nCisgIGdvdmVybm1lbnQgcmVndWxhdG9yeSBjZXJ0aWZpY2F0aW9uIGZvciB0aGUgcmVnaW9ucyB0aGUgcGhvbmVzIHdpbGwgYmUKKyAgZGVwbG95ZWQuIEl0IGFsc28gZ29lcyB0aHJvdWdoIG9wZXJhdG9yIHRlc3RpbmcuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBoYXNlCisgIG9mIHRoZSBwcm9jZXNzLCBzaW5jZSBpdCBoZWxwcyBzaGFrZSBvdXQgYSBsb3Qgb2Ygc29mdHdhcmUgYnVncy48L3A+Cis8cD5PbmNlIHRoZSByZWxlYXNlIGlzIGFwcHJvdmVkIGJ5IHRoZSByZWd1bGF0b3JzIGFuZCBvcGVyYXRvcnMsIHRoZQorICBtYW51ZmFjdHVyZXIgYmVnaW5zIG1hc3MgcHJvZHVjaW5nIGRldmljZXMsIGFuZCB3ZSB0dXJuIHRvIHJlbGVhc2luZyB0aGUKKyAgc291cmNlIGNvZGUuPC9wPgorPHA+U2ltdWx0YW5lb3VzIHRvIG1hc3MgcHJvZHVjdGlvbiB0aGUgR29vZ2xlIHRlYW0ga2lja3Mgb2ZmIHNldmVyYWwgZWZmb3J0cworICB0byBwcmVwYXJlIHRoZSBvcGVuIHNvdXJjZSByZWxlYXNlLiBUaGVzZSBlZmZvcnRzIGluY2x1ZGUgZmluYWwgQVBJIGNoYW5nZXMKKyAgYW5kIGRvY3VtZW50YXRpb24gKHRvIHJlZmxlY3QgYW55IGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgZHVyaW5nCisgIHF1YWxpZmljYXRpb24gdGVzdGluZywgZm9yIGV4YW1wbGUpLCBwcmVwYXJpbmcgYW4gU0RLIGZvciB0aGUgbmV3IHZlcnNpb24sCisgIGFuZCBsYXVuY2hpbmcgdGhlIHBsYXRmb3JtIGNvbXBhdGliaWxpdHkgaW5mb3JtYXRpb24uPC9wPgorPHA+QWxzbyBpbmNsdWRlZCBpcyBhIGZpbmFsIGxlZ2FsIHNpZ24tb2ZmIHRvIHJlbGVhc2UgdGhlIGNvZGUgaW50byBvcGVuCisgIHNvdXJjZS4gSnVzdCBhcyBvcGVuIHNvdXJjZSBjb250cmlidXRvcnMgYXJlIHJlcXVpcmVkIHRvIHNpZ24gYSBDb250cmlidXRvcnMKKyAgTGljZW5zZSBBZ3JlZW1lbnQgYXR0ZXN0aW5nIHRvIHRoZWlyIElQIG93bmVyc2hpcCBvZiB0aGVpciBjb250cmlidXRpb24sCisgIEdvb2dsZSB0b28gbXVzdCB2ZXJpZnkgdGhhdCBpdCBpcyBjbGVhciB0byBtYWtlIGNvbnRyaWJ1dGlvbnMuPC9wPgorPHA+U3RhcnRpbmcgYXQgdGhlIHRpbWUgbWFzcyBwcm9kdWN0aW9uIGJlZ2lucywgdGhlIHNvZnR3YXJlIHJlbGVhc2UgcHJvY2VzcworICB1c3VhbGx5IHRha2VzIGFyb3VuZCBhIG1vbnRoLCB3aGljaCBvZnRlbiByb3VnaGx5IHBsYWNlcyBzb3VyY2UgY29kZQorICByZWxlYXNlcyBhcm91bmQgdGhlIHNhbWUgdGltZSB0aGF0IHRoZSBkZXZpY2VzIHJlYWNoIHVzZXJzLjwvcD4KKworPGgzPkhvdyBkb2VzIHRoZSBBT1NQIHJlbGF0ZSB0byB0aGUgQW5kcm9pZCBDb21wYXRpYmlsaXR5IFByb2dyYW0/PC9oMz4KKzxwPlRoZSBBbmRyb2lkIE9wZW4tU291cmNlIFByb2plY3QgbWFpbnRhaW5zIHRoZSBBbmRyb2lkIHNvZnR3YXJlLCBhbmQKKyAgZGV2ZWxvcHMgbmV3IHZlcnNpb25zLiBTaW5jZSBpdCdzIG9wZW4tc291cmNlLCB0aGlzIHNvZnR3YXJlIGNhbiBiZSB1c2VkIGZvcgorICBhbnkgcHVycG9zZSwgaW5jbHVkaW5nIHRvIHNoaXAgZGV2aWNlcyB0aGF0IGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIG90aGVyCisgIGRldmljZXMgYmFzZWQgb24gdGhlIHNhbWUgc291cmNlLjwvcD4KKzxwPlRoZSBmdW5jdGlvbiBvZiB0aGUgQW5kcm9pZCBDb21wYXRpYmlsaXR5IFByb2dyYW0gaXMgdG8gZGVmaW5lIGEgYmFzZWxpbmUKKyAgaW1wbGVtZW50YXRpb24gb2YgQW5kcm9pZCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGlyZC1wYXJ0eSBhcHBzIHdyaXR0ZW4KKyAgYnkgZGV2ZWxvcGVycy4gRGV2aWNlcyB0aGF0IGFyZSAiQW5kcm9pZCBjb21wYXRpYmxlIiBtYXkgcGFydGljaXBhdGUgaW4gdGhlCisgIEFuZHJvaWQgZWNvc3lzdGVtLCBpbmNsdWRpbmcgQW5kcm9pZCBNYXJrZXQ7IGRldmljZXMgdGhhdCBkb24ndCBtZWV0IHRoZQorICBjb21wYXRpYmlsaXR5IHJlcXVpcmVtZW50cyBleGlzdCBvdXRzaWRlIHRoYXQgZWNvc3lzdGVtLjwvcD4KKzxwPkluIG90aGVyIHdvcmRzLCB0aGUgQW5kcm9pZCBDb21wYXRpYmlsaXR5IFByb2dyYW0gaXMgaG93IHdlIHNlcGFyYXRlCisgICJBbmRyb2lkIGNvbXBhdGlibGUgZGV2aWNlcyIgZnJvbSBkZXZpY2VzIHRoYXQgbWVyZWx5IHJ1biBkZXJpdmF0aXZlcyBvZiB0aGUKKyAgc291cmNlIGNvZGUuIFdlIHdlbGNvbWUgYWxsIHVzZXMgb2YgdGhlIEFuZHJvaWQgc291cmNlIGNvZGUsIGJ1dCBvbmx5CisgIEFuZHJvaWQgY29tcGF0aWJsZSBkZXZpY2VzIC0tIGFzIGRlZmluZWQgYW5kIHRlc3RlZCBieSB0aGUgQW5kcm9pZAorICBDb21wYXRpYmlsaXR5IFByb2dyYW0gLS0gbWF5IGNhbGwgdGhlbXNlbHZlcyAiQW5kcm9pZCIgYW5kIHBhcnRpY2lwYXRlIGluCisgIHRoZSBBbmRyb2lkIGVjb3N5c3RlbS48L3A+CisKKzxoMz5Ib3cgY2FuIEkgY29udHJpYnV0ZSB0byBBbmRyb2lkPzwvaDM+Cis8cD5UaGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB5b3UgY2FuIGNvbnRyaWJ1dGUgdG8gQW5kcm9pZC4gWW91IGNhbiByZXBvcnQKKyAgYnVncywgd3JpdGUgYXBwcyBmb3IgQW5kcm9pZCwgb3IgY29udHJpYnV0ZSBzb3VyY2UgY29kZSB0byB0aGUgQW5kcm9pZAorICBPcGVuLVNvdXJjZSBQcm9qZWN0LjwvcD4KKzxwPlRoZXJlIGFyZSBzb21lIGxpbWl0cyBvbiB0aGUga2luZHMgb2YgY29kZSBjb250cmlidXRpb25zIHdlIGFyZSB3aWxsaW5nIG9yCisgIGFibGUgdG8gYWNjZXB0LiBGb3IgaW5zdGFuY2UsIHNvbWVvbmUgbWlnaHQgd2FudCB0byBjb250cmlidXRlIGFuCisgIGFsdGVybmF0aXZlIGFwcGxpY2F0aW9uIEFQSSwgc3VjaCBhcyBhIGZ1bGwgQysrLWJhc2VkIGVudmlyb25tZW50LiBXZSB3b3VsZAorICBkZWNsaW5lIHRoYXQgY29udHJpYnV0aW9uLCBzaW5jZSBBbmRyb2lkIGlzIGZvY3VzZWQgb24gYXBwbGljYXRpb25zIHRoYXQgcnVuCisgIGluIHRoZSBEYWx2aWsgVk0uIEFsdGVybmF0aXZlbHksIHdlIHdvbid0IGFjY2VwdCBjb250cmlidXRpb25zIHN1Y2ggYXMgR1BMCisgIG9yIExHUEwgbGlicmFyaWVzIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoIG91ciBsaWNlbnNpbmcgZ29hbHMuPC9wPgorPHA+V2UgZW5jb3VyYWdlIHRob3NlIGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nIHNvdXJjZSBjb2RlIHRvIGNvbnRhY3QgdXMgdmlhCisgIHRoZSBBT1NQIENvbW11bml0eSBwYWdlIHByaW9yIHRvIGJlZ2lubmluZyBhbnkgd29yay4gWW91IGNhbiBmaW5kIG1vcmUKKyAgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYyBhdCB0aGUgR2V0dGluZyBJbnZvbHZlZCBwYWdlLjwvcD4KKworPGgzPkhvdyBkbyBJIGJlY29tZSBhbiBBbmRyb2lkIGNvbW1pdHRlcj88L2gzPgorPHA+VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBkb2Vzbid0IHJlYWxseSBoYXZlIGEgbm90aW9uIG9mIGEKKyAgImNvbW1pdHRlciIuIEFsbCBjb250cmlidXRpb25zIC0tIGluY2x1ZGluZyB0aG9zZSBhdXRob3JlZCBieSBHb29nbGUKKyAgZW1wbG95ZWVzIC0tIGdvIHRocm91Z2ggYSB3ZWItYmFzZWQgc3lzdGVtIGtub3duIGFzICJnZXJyaXQiIHRoYXQncyBwYXJ0IG9mCisgIHRoZSBBbmRyb2lkIGVuZ2luZWVyaW5nIHByb2Nlc3MuIFRoaXMgc3lzdGVtIHdvcmtzIGluIHRhbmRlbSB3aXRoIHRoZSBnaXQKKyAgc291cmNlIGNvZGUgbWFuYWdlbWVudCBzeXN0ZW0gdG8gY2xlYW5seSBtYW5hZ2Ugc291cmNlIGNvZGUKKyAgY29udHJpYnV0aW9ucy48L3A+Cis8cD5PbmNlIHN1Ym1pdHRlZCwgY2hhbmdlcyBuZWVkIHRvIGJlIGFjY2VwdGVkIGJ5IGEgZGVzaWduYXRlZCBBcHByb3Zlci4KKyAgQXBwcm92ZXJzIGFyZSB0eXBpY2FsbHkgR29vZ2xlIGVtcGxveWVlcywgYnV0IHRoZSBzYW1lIGFwcHJvdmVycyBhcmUKKyAgcmVzcG9uc2libGUgZm9yIGFsbCBzdWJtaXNzaW9ucywgcmVnYXJkbGVzcyBvZiBvcmlnaW4uPC9wPgorPHA+WW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYyBhdCB0aGUgU3VibWl0dGluZyBQYXRjaGVzCisgIHBhZ2UuPC9wPgorCis8YSBuYW1lPSJjb21wYXRpYmlsaXR5Ij48L2E+PGgyPkNvbXBhdGliaWxpdHk8L2gyPgorPGgzPldoYXQgZG9lcyAiY29tcGF0aWJpbGl0eSIgbWVhbj88L2gzPgorPHA+V2UgZGVmaW5lIGFuICJBbmRyb2lkIGNvbXBhdGlibGUiIGRldmljZSBhcyBvbmUgdGhhdCBjYW4gcnVuIGFueQorICBhcHBsaWNhdGlvbiB3cml0dGVuIGJ5IHRoaXJkLXBhcnR5IGRldmVsb3BlcnMgdXNpbmcgdGhlIEFuZHJvaWQgU0RLIGFuZCBOREsuCisgIFdlIHVzZSB0aGlzIGFzIGEgZmlsdGVyIHRvIHNlcGFyYXRlIGRldmljZXMgdGhhdCBjYW4gcGFydGljaXBhdGUgaW4gdGhlCisgIEFuZHJvaWQgYXBwIGVjb3N5c3RlbSwgYW5kIHRob3NlIHRoYXQgY2Fubm90LiBEZXZpY2VzIHRoYXQgYXJlIHByb3Blcmx5CisgIGNvbXBhdGlibGUgY2FuIHNlZWsgYXBwcm92YWwgdG8gdXNlIHRoZSBBbmRyb2lkIHRyYWRlbWFyay4gRGV2aWNlcyB0aGF0IGFyZQorICBub3QgY29tcGF0aWJsZSBhcmUgbWVyZWx5IGRlcml2ZWQgZnJvbSB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBhbmQgbWF5IG5vdAorICB1c2UgdGhlIEFuZHJvaWQgdHJhZGVtYXJrLjwvcD4KKzxwPkluIG90aGVyIHdvcmRzLCBjb21wYXRpYmlsaXR5IGlzIGEgcHJlcmVxdWlzaXRlIHRvIHBhcnRpY2lwYXRlIGluIHRoZQorICBBbmRyb2lkIGFwcHMgZWNvc3lzdGVtLiBBbnlvbmUgaXMgd2VsY29tZSB0byB1c2UgdGhlIEFuZHJvaWQgc291cmNlIGNvZGUsCisgIGJ1dCBpZiB0aGUgZGV2aWNlIGlzbid0IGNvbXBhdGlibGUsIGl0J3Mgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgQW5kcm9pZAorICBlY29zeXN0ZW0sIGFuZCBpcnJlbGV2YW50IHRvIGRldmVsb3BlcnMuPC9wPgorCis8aDM+V2hhdCBpcyB0aGUgcm9sZSBvZiBBbmRyb2lkIE1hcmtldCBpbiBjb21wYXRpYmlsaXR5PzwvaDM+Cis8cD5EZXZpY2VzIHRoYXQgYXJlIEFuZHJvaWQgY29tcGF0aWJsZSBtYXkgc2VlayB0byBsaWNlbnNlIHRoZSBBbmRyb2lkIE1hcmtldAorICBjbGllbnQgc29mdHdhcmUuIFRoaXMgYWxsb3dzIHRoZW0gdG8gYmVjb21lIHBhcnQgb2YgdGhlIEFuZHJvaWQgYXBwCisgIGVjb3N5c3RlbSwgYnkgYWxsb3dpbmcgdXNlcnMgdG8gZG93bmxvYWQgZGV2ZWxvcGVycycgYXBwcyBmcm9tIGEgY2F0YWxvZworICBzaGFyZWQgYnkgYWxsIGNvbXBhdGlibGUgZGV2aWNlcy4gVGhpcyBvcHRpb24gaXNuJ3QgYXZhaWxhYmxlIHRvIGRldmljZXMKKyAgdGhhdCBhcmVuJ3QgY29tcGF0aWJsZS48L3A+CisKKzxoMz5XaGF0IGtpbmRzIG9mIGRldmljZXMgY2FuIGJlIEFuZHJvaWQgY29tcGF0aWJsZT88L2gzPgorPHA+VGhlIEFuZHJvaWQgc29mdHdhcmUgY2FuIGJlIHBvcnRlZCB0byBhIGxvdCBvZiBkaWZmZXJlbnQga2luZHMgb2YgZGV2aWNlcywKKyAgaW5jbHVkaW5nIHNvbWUgb24gd2hpY2ggdGhpcmQtcGFydHkgYXBwcyB3b24ndCBydW4gcHJvcGVybHkuIFRoZSBBbmRyb2lkCisgIENvbXBhdGliaWxpdHkgRGVmaW5pdGlvbiBEb2N1bWVudCAoQ0REKSBzcGVsbHMgb3V0IHRoZSBzcGVjaWZpYyBkZXZpY2UKKyAgY29uZmlndXJhdGlvbnMgdGhhdCB3aWxsIGJlIGNvbnNpZGVyZWQgY29tcGF0aWJsZS48L3A+Cis8cD5Gb3IgZXhhbXBsZSwgdGhvdWdoIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlIGNvdWxkIGJlIHBvcnRlZCB0byBydW4gb24gYQorICBkZXZpY2UgdGhhdCBkb2Vzbid0IGhhdmUgYSBjYW1lcmEsIHRoZSBDREQgcmVxdWlyZXMgdGhhdCBpbiBvcmRlciB0byBiZQorICBjb21wYXRpYmxlLCBhbGwgZGV2aWNlcyBtdXN0IGhhdmUgYSBjYW1lcmEuIFRoaXMgYWxsb3dzIGRldmVsb3BlcnMgdG8gcmVseQorICBvbiBhIGNvbnNpc3RlbnQgc2V0IG9mIGRldmljZSBjYXBhYmlsaXRpZXMgd2hlbiB3cml0aW5nIHRoZWlyIGFwcHMuPC9wPgorPHA+VGhlIENERCB3aWxsIGV2b2x2ZSBvdmVyIHRpbWUgdG8gcmVmbGVjdCBtYXJrZXQgcmVhbGl0aWVzLiBGb3IgaW5zdGFuY2UsCisgIHRoZSAxLjYgQ0REIG9ubHkgYWxsb3dzIGNlbGwgcGhvbmVzLCBidXQgdGhlIDIueCBDREQgYWxsb3dzIGRldmljZXMgdG8gb21pdAorICB0ZWxlcGhvbnkgaGFyZHdhcmUsIGFsbG93aW5nIGZvciBub24tcGhvbmUgZGV2aWNlcyBzdWNoIGFzIHRhYmxldC1zdHlsZQorICBtdXNpYyBwbGF5ZXJzIHRvIGJlIGNvbXBhdGlibGUuIEFzIHdlIG1ha2UgdGhlc2UgY2hhbmdlcywgd2Ugd2lsbCBhbHNvCisgIGF1Z21lbnQgQW5kcm9pZCBNYXJrZXQgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byByZXRhaW4gY29udHJvbCBvdmVyIHdoZXJlCisgIHRoZWlyIGFwcHMgYXJlIGF2YWlsYWJsZS4gVG8gY29udGludWUgdGhlIHRlbGVwaG9ueSBleGFtcGxlLCBhbiBhcHAgdGhhdAorICBtYW5hZ2VzIFNNUyB0ZXh0IG1lc3NhZ2VzIHdvdWxkIG5vdCBiZSB1c2VmdWwgb24gYSBtZWRpYSBwbGF5ZXIsIHNvIEFuZHJvaWQKKyAgTWFya2V0IGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIHJlc3RyaWN0IHRoYXQgYXBwIGV4Y2x1c2l2ZWx5IHRvIHBob25lCisgIGRldmljZXMuPC9wPgorCis8aDM+SWYgbXkgZGV2aWNlIGlzIGNvbXBhdGlibGUsIGRvZXMgaXQgYXV0b21hdGljYWxseSBoYXZlIGFjY2VzcyB0byBBbmRyb2lkIE1hcmtldCBhbmQgYnJhbmRpbmc/PC9oMz4KKzxwPkFuZHJvaWQgTWFya2V0IGlzIGEgc2VydmljZSBvcGVyYXRlZCBieSBHb29nbGUuIEZvciBsZWdhbCBhbmQgYnVzaW5lc3MKKyAgcmVhc29ucywgR29vZ2xlIGlzbid0IGFibGUgdG8gbWFrZSB0aGF0IHNlcnZpY2UgYXZhaWxhYmxlIGluIGFsbCBwYXJ0cyBvZgorICB0aGUgd29ybGQuIFNpbWlsYXJseSwgR29vZ2xlIGlzIHVuYWJsZSB0byBsaWNlbnNlIHRoZSBBbmRyb2lkIHRyYWRlbWFyayBmb3IKKyAgdXNlIGluIGFsbCBjYXNlcy48L3A+Cis8cD5BcyBhIHJlc3VsdCwgYWNoaWV2aW5nIGNvbXBhdGliaWxpdHkgZG9lcyBub3QgYXV0b21hdGljYWxseSBlbnRpdGxlIGEKKyAgZGV2aWNlIHRvIGluY2x1ZGUgQW5kcm9pZCBNYXJrZXQgb3IgdXNlIHRoZSBBbmRyb2lkIG5hbWUuIERldmljZQorICBtYW51ZmFjdHVyZXJzIHNob3VsZCBjb250YWN0IEdvb2dsZSB0byBvYnRhaW4gYWNjZXNzIHRvIHRob3NlIHRvb2xzLjwvcD4KKworPGgzPklmIEkgYW0gbm90IGEgbWFudWZhY3R1cmVyLCBob3cgY2FuIEkgZ2V0IEFuZHJvaWQgTWFya2V0PzwvaDM+Cis8cD5BbmRyb2lkIE1hcmtldCBpcyBvbmx5IGxpY2Vuc2VkIHRvIGhhbmRzZXQgbWFudWZhY3R1cmVycyBzaGlwcGluZyBkZXZpY2VzLgorICBGb3IgcXVlc3Rpb25zIGFib3V0IHNwZWNpZmljIGNhc2VzLCBjb250YWN0CisgIGFuZHJvaWQtcGFydG5lcnNoaXBzQGdvb2dsZS5jb20uPC9wPgorCis8aDM+SG93IGNhbiBJIGdldCBhY2Nlc3MgdG8gdGhlIEdvb2dsZSBhcHBzIGZvciBBbmRyb2lkLCBzdWNoIGFzIE1hcHM/PC9oMz4KKzxwPlRoZSBHb29nbGUgYXBwcyBmb3IgQW5kcm9pZCwgc3VjaCBhcyBZb3VUdWJlLCBHb29nbGUgTWFwcyBhbmQgTmF2aWdhdGlvbiwKKyAgR21haWwsIGFuZCBzbyBvbiBhcmUgbm90IHBhcnQgb2YgQW5kcm9pZCwgYW5kIGFyZSBsaWNlbnNlZCBzZXBhcmF0ZWx5LgorICBDb250YWN0IGFuZHJvaWQtcGFydG5lcnNoaXBzQGdvb2dsZS5jb20gZm9yIGlucXVpcmllcyByZWxhdGVkIHRvIHRob3NlCisgIGFwcHMuPC9wPgorCis8aDM+SXMgY29tcGF0aWJpbGl0eSBtYW5kYXRvcnk/PC9oMz4KKzxwPk5vLiBUaGUgQW5kcm9pZCBDb21wYXRpYmlsaXR5IFByb2dyYW0gaXMgb3B0aW9uYWwuIFNpbmNlIHRoZSBBbmRyb2lkIHNvdXJjZQorICBjb2RlIGlzIG9wZW4sIGFueW9uZSBjYW4gdXNlIGl0IHRvIGJ1aWxkIGFueSBraW5kIG9mIGRldmljZS4gSG93ZXZlciwgaWYgYQorICBtYW51ZmFjdHVyZXIgd2lzaGVzIHRvIHVzZSB0aGUgQW5kcm9pZCBuYW1lIHdpdGggdGhlaXIgcHJvZHVjdCwgb3Igd2FudHMKKyAgYWNjZXNzIHRvIEFuZHJvaWQgTWFya2V0LCB0aGV5IG11c3QgZmlyc3QgZGVtb25zdHJhdGUgdGhhdCB0aGUgZGV2aWNlIGlzCisgIGNvbXBhdGlibGUuPC9wPgorCis8aDM+SG93IG11Y2ggZG9lcyBjb21wYXRpYmlsaXR5IGNlcnRpZmljYXRpb24gY29zdD88L2gzPgorPHA+VGhlcmUgaXMgbm8gY29zdCB0byBvYnRhaW4gQW5kcm9pZCBjb21wYXRpYmlsaXR5IGZvciBhIGRldmljZS4gVGhlCisgIENvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZSBpcyBvcGVuLXNvdXJjZSBhbmQgYXZhaWxhYmxlIHRvIGFueW9uZSB0byB1c2UgdG8KKyAgdGVzdCBhIGRldmljZS48L3A+CisKKzxoMz5Ib3cgbG9uZyBkb2VzIGNvbXBhdGliaWxpdHkgdGFrZT88L2gzPgorPHA+VGhlIHByb2Nlc3MgaXMgYXV0b21hdGljLiBUaGUgQ29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlIGdlbmVyYXRlcyBhIHJlcG9ydAorICB0aGF0IGNhbiBiZSBwcm92aWRlZCB0byBHb29nbGUgdG8gdmVyaWZ5IGNvbXBhdGliaWxpdHkuIEV2ZW50dWFsbHkgd2UgaW50ZW5kCisgIHRvIHByb3ZpZGUgc2VsZi1zZXJ2aWNlIHRvb2xzIHRvIHVwbG9hZCB0aGVzZSByZXBvcnRzIHRvIGEgcHVibGljIGRhdGFiYXNlLjwvcD4KKworPGgzPldobyBkZXRlcm1pbmVzIHdoYXQgd2lsbCBiZSBwYXJ0IG9mIHRoZSBjb21wYXRpYmlsaXR5IGRlZmluaXRpb24/PC9oMz4KKzxwPlNpbmNlIEdvb2dsZSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIG92ZXJhbGwgZGlyZWN0aW9uIG9mIEFuZHJvaWQgYXMgYQorICBwbGF0Zm9ybSBhbmQgcHJvZHVjdCwgR29vZ2xlIG1haW50YWlucyB0aGUgQ29tcGF0aWJpbGl0eSBEZWZpbml0aW9uIERvY3VtZW50CisgIGZvciBlYWNoIHJlbGVhc2UuIFdlIGRyYWZ0IHRoZSBDREQgZm9yIGEgbmV3IEFuZHJvaWQgdmVyc2lvbiBpbiBjb25zdWx0YXRpb24KKyAgd2l0aCBhIG51bWJlciBvZiBPRU1zLCB3aG8gcHJvdmlkZSBpbnB1dCBvbiBpdHMgY29udGVudHMuPC9wPgorCis8aDM+SG93IGxvbmcgd2lsbCBlYWNoIEFuZHJvaWQgdmVyc2lvbiBiZSBzdXBwb3J0ZWQgZm9yIG5ldyBkZXZpY2VzPzwvaDM+Cis8cD5TaW5jZSBBbmRyb2lkJ3MgY29kZSBpcyBvcGVuLXNvdXJjZSwgd2UgY2FuJ3QgcHJldmVudCBzb21lb25lIGZyb20gdXNpbmcgYW4KKyAgb2xkIHZlcnNpb24gdG8gbGF1bmNoIGEgZGV2aWNlLiBJbnN0ZWFkLCBHb29nbGUgY2hvb3NlcyBub3QgdG8gbGljZW5zZSB0aGUKKyAgQW5kcm9pZCBNYXJrZXQgY2xpZW50IHNvZnR3YXJlIGZvciB1c2Ugb24gdmVyc2lvbnMgdGhhdCBhcmUgY29uc2lkZXJlZAorICBvYnNvbGV0ZS4gVGhpcyBhbGxvd3MgYW55b25lIHRvIGNvbnRpbnVlIHRvIHNoaXAgb2xkIHZlcnNpb25zIG9mIEFuZHJvaWQsCisgIGJ1dCB0aG9zZSBkZXZpY2VzIHdvbid0IHVzZSB0aGUgQW5kcm9pZCBuYW1lIGFuZCB3aWxsIGV4aXN0IG91dHNpZGUgdGhlCisgIEFuZHJvaWQgYXBwcyBlY29zeXN0ZW0sIGp1c3QgYXMgaWYgdGhleSB3ZXJlIG5vbi1jb21wYXRpYmxlLjwvcD4KKworPGgzPkNhbiBhIGRldmljZSBoYXZlIGEgZGlmZmVyZW50IHVzZXIgaW50ZXJmYWNlIGFuZCBzdGlsbCBiZSBjb21wYXRpYmxlPzwvaDM+Cis8cD5UaGUgQW5kcm9pZCBDb21wYXRpYmlsaXR5IFByb2dyYW0gZm9jdXNlcyBvbiB3aGV0aGVyIGEgZGV2aWNlIGNhbiBydW4KKyAgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zLiBUaGUgdXNlciBpbnRlcmZhY2UgY29tcG9uZW50cyBzaGlwcGVkIHdpdGggYQorICBkZXZpY2UgKHN1Y2ggYXMgaG9tZSBzY3JlZW4sIGRpYWxlciwgY29sb3Igc2NoZW1lLCBhbmQgc28gb24pIGRvZXMgbm90CisgIGdlbmVyYWxseSBoYXZlIG11Y2ggZWZmZWN0IG9uIHRoaXJkLXBhcnR5IGFwcHMuIEFzIHN1Y2gsIGRldmljZSBidWlsZGVycyBhcmUKKyAgZnJlZSB0byBjdXN0b21pemUgdGhlIHVzZXIgaW50ZXJmYWNlIGFzIG11Y2ggYXMgdGhleSBsaWtlLiBUaGUgQ29tcGF0aWJpbGl0eQorICBEZWZpbml0aW9uIERvY3VtZW50IGRvZXMgcmVzdHJpY3QgdGhlIGRlZ3JlZSB0byB3aGljaCBPRU1zIG1heSBhbHRlciB0aGUKKyAgc3lzdGVtIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUgZmV3IGFyZWFzIHRoYXQgZG8gaW1wYWN0IHRoaXJkLXBhcnR5IGFwcHMuPC9wPgorCis8aDM+V2hlbiBhcmUgY29tcGF0aWJpbGl0eSBkZWZpbml0aW9ucyByZWxlYXNlZCBmb3IgbmV3IEFuZHJvaWQgdmVyc2lvbnM/PC9oMz4KKzxwPk91ciBnb2FsIGlzIHRvIHJlbGVhc2UgbmV3IHZlcnNpb25zIG9mIEFuZHJvaWQgQ29tcGF0aWJpbGl0eSBEZWZpbml0aW9uCisgIERvY3VtZW50cyAoQ0REcykgb25jZSB0aGUgY29ycmVzcG9uZGluZyBBbmRyb2lkIHBsYXRmb3JtIHZlcnNpb24gaGFzCisgIGNvbnZlcmdlZCBlbm91Z2ggdG8gcGVybWl0IGl0LiBTaW5jZSB0aGUgQ0REczwvcD4KKworPGgzPkhvdyBhcmUgZGV2aWNlIG1hbnVmYWN0dXJlcnMnIGNvbXBhdGliaWxpdHkgY2xhaW1zIHZhbGlkYXRlZD88L2gzPgorPHA+VGhlcmUgaXMgbm8gdmFsaWRhdGlvbiBwcm9jZXNzIGZvciBBbmRyb2lkIGRldmljZSBjb21wYXRpYmlsaXR5LiBIb3dldmVyLAorICBpZiB0aGUgZGV2aWNlIGlzIHRvIGluY2x1ZGUgQW5kcm9pZCBNYXJrZXQsIEdvb2dsZSB3aWxsIHR5cGljYWxseSB2YWxpZGF0ZQorICB0aGUgZGV2aWNlIGZvciBjb21wYXRpYmlsaXR5IGJlZm9yZSBhZ3JlZWluZyB0byBsaWNlbnNlIHRoZSBNYXJrZXQgY2xpZW50CisgIHNvZnR3YXJlLjwvcD4KKworPGgzPldoYXQgaGFwcGVucyBpZiBhIGRldmljZSB0aGF0IGNsYWltcyBjb21wYXRpYmlsaXR5IGlzIGxhdGVyIGZvdW5kIHRvIGhhdmUgY29tcGF0aWJpbGl0eSBwcm9ibGVtcz88L2gzPgorPHA+VHlwaWNhbGx5LCBHb29nbGUncyByZWxhdGlvbnNoaXBzIHdpdGggQW5kcm9pZCBNYXJrZXQgbGljZW5zZWVzIGFsbG93IHVzIHRvCisgIGFzayB0aGVtIHRvIHJlbGVhc2UgdXBkYXRlZCBzeXN0ZW0gaW1hZ2VzIHRoYXQgZml4IHRoZSBwcm9ibGVtcy48L3A+CisKKzxhIG5hbWU9ImN0cyI+PC9hPjxoMj5Db21wYXRpYmlsaXR5IFRlc3QgU3VpdGU8L2gyPgorPGgzPldoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdGhlIENUUz88L2gzPgorPHA+VGhlIENvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZSBpcyBhIHRvb2wgdXNlZCBieSBkZXZpY2UgbWFudWZhY3R1cmVycyB0byBoZWxwCisgIGVuc3VyZSB0aGVpciBkZXZpY2VzIGFyZSBjb21wYXRpYmxlLCBhbmQgdG8gcmVwb3J0IHRlc3QgcmVzdWx0cyBmb3IKKyAgdmFsaWRhdGlvbnMuIFRoZSBDVFMgaXMgaW50ZW5kZWQgdG8gYmUgcnVuIGZyZXF1ZW50bHkgYnkgT0VNcyB0aHJvdWdob3V0IHRoZQorICBlbmdpbmVlcmluZyBwcm9jZXNzIHRvIGNhdGNoIGNvbXBhdGliaWxpdHkgaXNzdWVzIGVhcmx5LjwvcD4KKworPGgzPldoYXQga2luZHMgb2YgdGhpbmdzIGRvZXMgdGhlIENUUyB0ZXN0PzwvaDM+Cis8cD5UaGUgQ1RTIGN1cnJlbnRseSB0ZXN0cyB0aGF0IGFsbCBvZiB0aGUgc3VwcG9ydGVkIEFuZHJvaWQgc3Ryb25nLXR5cGVkIEFQSXMKKyAgYXJlIHByZXNlbnQgYW5kIGJlaGF2ZSBjb3JyZWN0bHkuIEl0IGFsc28gdGVzdHMgb3RoZXIgbm9uLUFQSSBzeXN0ZW0KKyAgYmVoYXZpb3JzIHN1Y2ggYXMgYXBwbGljYXRpb24gbGlmZWN5Y2xlIGFuZCBwZXJmb3JtYW5jZS4gV2UgcGxhbiB0byBhZGQKKyAgc3VwcG9ydCBpbiBmdXR1cmUgQ1RTIHZlcnNpb25zIHRvIHRlc3QgInNvZnQiIEFQSXMgc3VjaCBhcyBJbnRlbnRzIGFzCisgIHdlbGwuPC9wPgorCis8aDM+V2lsbCB0aGUgQ1RTIHJlcG9ydHMgYmUgbWFkZSBwdWJsaWM/PC9oMz4KKzxwPlllcy4gV2hpbGUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCwgR29vZ2xlIGludGVuZHMgdG8gcHJvdmlkZSB3ZWItYmFzZWQKKyAgc2VsZi1zZXJ2aWNlIHRvb2xzIGZvciBPRU1zIHRvIHB1Ymxpc2ggQ1RTIHJlcG9ydHMgc28gdGhhdCB0aGV5IGNhbiBiZQorICB2aWV3ZWQgYnkgYW55b25lLiBDVFMgcmVwb3J0cyBjYW4gYmUgc2hhcmVkIGFzIHdpZGVseSBhcyBtYW51ZmFjdHVyZXJzCisgIHByZWZlci48L3A+CisKKzxoMz5Ib3cgaXMgdGhlIENUUyBsaWNlbnNlZD88L2gzPgorPHA+VGhlIENUUyBpcyBsaWNlbnNlZCB1bmRlciB0aGUgc2FtZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgdGhhdCB0aGUKKyAgYnVsayBvZiBBbmRyb2lkIHVzZXMuPC9wPgorCis8aDM+RG9lcyB0aGUgQ1RTIGFjY2VwdCBjb250cmlidXRpb25zPzwvaDM+Cis8cD5ZZXMgcGxlYXNlISBUaGUgQW5kcm9pZCBPcGVuLVNvdXJjZSBQcm9qZWN0IGFjY2VwdHMgY29udHJpYnV0aW9ucyB0bworICBpbXByb3ZlIHRoZSBDVFMgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBhbnkgb3RoZXIgY29tcG9uZW50LiBJbiBmYWN0LAorICBpbXByb3ZpbmcgdGhlIGNvdmVyYWdlIGFuZCBxdWFsaXR5IG9mIHRoZSBDVFMgdGVzdCBjYXNlcyBpcyBvbmUgb2YgdGhlIGJlc3QKKyAgd2F5cyB0byBoZWxwIG91dCBBbmRyb2lkLjwvcD4KKworPGgzPkNhbiBhbnlvbmUgdXNlIHRoZSBDVFMgb24gZXhpc3RpbmcgZGV2aWNlcz88L2gzPgorPHA+VGhlIENvbXBhdGliaWxpdHkgRGVmaW5pdGlvbiBEb2N1bWVudCByZXF1aXJlcyB0aGF0IGNvbXBhdGlibGUgZGV2aWNlcworICBpbXBsZW1lbnQgdGhlICdhZGInIGRlYnVnZ2luZyB1dGlsaXR5LiBUaGlzIG1lYW5zIHRoYXQgYW55IGNvbXBhdGlibGUgZGV2aWNlCisgIC0tIGluY2x1ZGluZyBvbmVzIGF2YWlsYWJsZSBhdCByZXRhaWwgLS0gbXVzdCBiZSBhYmxlIHRvIHJ1biB0aGUgQ1RTCisgIHRlc3RzLjwvcD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL3Bka190b2MuY3MgYi9wZGsvZG9jcy9ndWlkZS9wZGtfdG9jLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTQ5M2U2Li4wMDAwMDAwCi0tLSBhL3Bkay9kb2NzL2d1aWRlL3Bka190b2MuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotPCEtLQotZnVuY3Rpb24gbm90aGluZygpIHt9Ci0tLT4KLTwvc2NyaXB0PgotCi08dWw+Ci0KLTxsaT4gPGgyPlNldHVwIGFuZCBCdWlsZGluZzwvaDI+Ci0gIDx1bD4KLSAgICAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+Ci0gICAgIDxkaXY+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvYnVpbGRfc3lzdGVtLmh0bWwiPkJ1aWxkIFN5c3RlbTwvYT48L2Rpdj4KLSAgICAgPHVsPiAgCi0gICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2J1aWxkX25ld19kZXZpY2UuaHRtbCI+Q29uZmlndXJpbmcgYSBOZXcgUHJvZHVjdDwvYT48L2xpPgotICAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9idWlsZF9jb29rYm9vay5odG1sIj5CdWlsZCBDb29rYm9vazwvYT48L2xpPgotICAgICA8L3VsPgotICAgICA8L2xpPgotICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvcmVsZWFzZV9rZXlzLmh0bWwiPlJlbGVhc2UgS2V5cyBhbmQgU2lnbmluZyBCdWlsZHM8L2E+PC9saT4gCi0gPC91bD4KLTwvbGk+Ci0KLTxsaT4gPGgyPkN1c3RvbWl6YXRpb248L2gyPgotICA8dWw+Ci0gICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2N1c3RvbWl6YXRpb24uaHRtbCI+Q3VzdG9taXphdGlvbjwvYT48L2xpPgotICA8L3VsPgotPC9saT4KLQotPGxpPiA8aDI+U3lzdGVtPC9oMj4KLQotPHVsPgotICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvYnJpbmdfdXAuaHRtbCI+QnJpbmcgdXA8L2E+PC9saT4KLSAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+Ci0gICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+Q29ubmVjdGl2aXR5PC9hPjwvZGl2PgotICAgIDx1bD4gCi0gICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvYmx1ZXRvb3RoLmh0bWwiPkJsdWV0b290aDwvYT48L2xpPgotICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2dwcy5odG1sIj5HUFM8L2E+PC9saT4KLSAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS93aWZpLmh0bWwiPldpLUZpPC9hPjwvbGk+Ci0gICAgPC91bD4KLSAgPC9saT4KLQotICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvZGlzcGxheV9kcml2ZXJzLmh0bWwiPkRpc3BsYXkgRHJpdmVyczwvYT48L2xpPgotICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4gCi0gICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+SW5wdXQgRGV2aWNlczwvYT48L2Rpdj4KLSAgICA8dWw+Ci0gICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUva2V5bWFwc19rZXlib2FyZF9pbnB1dC5odG1sIj5LZXltYXBzIGFuZCBLZXlib2FyZDwvYT48L2xpPgotICAgIDwvdWw+Ci0gIDwvbGk+Ci0gIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9saWdodHMuaHRtbCI+TGlnaHRzPC9hPjwvbGk+Ci0gIDxsaSBjbGFzcz0idG9nZ2xlLWxpc3QiPgotICAgIDxkaXY+PGEgaHJlZj0iamF2YXNjcmlwdDpub3RoaW5nKCkiPk11bHRpbWVkaWE8L2E+PC9kaXY+Ci0gICAgPHVsPgotICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2F1ZGlvLmh0bWwiPkF1ZGlvPC9hPjwvbGk+Ci0gICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvY2FtZXJhLmh0bWwiPkNhbWVyYS9WaWRlbzwvYT48L2xpPgotICAgIDwvdWw+Ci0gIDwvbGk+Ci0gIAotICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvcG93ZXJfbWFuYWdlbWVudC5odG1sIj5Qb3dlciBNYW5hZ2VtZW50PC9hPjwvbGk+Ci0gIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9zZW5zb3JzLmh0bWwiPlNlbnNvcnM8L2E+PC9saT4KLSAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+Ci0gICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+VGVsZXBob255PC9hPjwvZGl2PgotICAgIDx1bD4KLSAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS90ZWxlcGhvbnkuaHRtbCI+UmFkaW8gSW50ZXJmYWNlIExheWVyPC9hPjwvbGk+Ci0gICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvc3RrLmh0bWwiPlNJTSBUb29sa2l0IEFwcGxpY2F0aW9uIChTVEspPC9hPjwvbGk+Ci0gICAgPC91bD4KLSAgPC9saT4KLQotPC91bD4KLTwvbGk+Ci0KLTxsaT4gPGgyPkRhbHZpayBWaXJ0dWFsIE1hY2hpbmU8L2gyPgotICA8dWw+Ci0gICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2RhbHZpay5odG1sIj5Qb3J0aW5nIERhbHZpazwvYT48L2xpPgotICA8L3VsPgotPC9saT4KLTxsaT4gPGgyPlRlc3RpbmcgYW5kIERlYnVnZ2luZzwvaDI+Ci0gIDx1bD4KLSAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuaHRtbCI+SW5zdHJ1bWVudGF0aW9uIFRlc3Rpbmc8L2E+PC9saT4KLSAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvZGVidWdnaW5nX2dkYi5odG1sIj5EZWJ1Z2dpbmcgd2l0aCBHREI8L2E+PC9saT4KLSAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvZGVidWdnaW5nX25hdGl2ZS5odG1sIj5EZWJ1Z2dpbmcgTmF0aXZlIENvZGU8L2E+PC9saT4KLSAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvdGNwZHVtcC5odG1sIj5EZWJ1Z2dpbmcgd2l0aCB0Y3BkdW1wPC9hPjwvbGk+Ci0gIDwvdWw+Ci08L2xpPgotCi0KLQotPC91bD4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotPCEtLQotICAgIGJ1aWxkVG9nZ2xlTGlzdHMoKTsKLS8vLS0+Ci08L3NjcmlwdD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9ibHVldG9vdGgtMC5qcGcgYi9wZGsvZG9jcy9pbWFnZXMvYmx1ZXRvb3RoLTAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmVlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvYmx1ZXRvb3RoLTAuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9jb2RlLWxpbmVzLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9jb2RlLWxpbmVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ZiNzdiCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2NvZGUtbGluZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9jdHMtMC5wbmcgYi9wZGsvZG9jcy9pbWFnZXMvY3RzLTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTM4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvY3RzLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9jdHMtcHJvY2Vzcy0wLmdpZiBiL3Bkay9kb2NzL2ltYWdlcy9jdHMtcHJvY2Vzcy0wLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjVkYTIzCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2N0cy1wcm9jZXNzLTAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9jdHMtcHJvY2Vzcy0xLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9jdHMtcHJvY2Vzcy0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU2NDMzCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2N0cy1wcm9jZXNzLTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9kaXNjdXNzLTAucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2Rpc2N1c3MtMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjZWExMAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ltYWdlcy9kaXNjdXNzLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9kb2N1bWVudGF0aW9uLTAucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2RvY3VtZW50YXRpb24tMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjZWExMAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ltYWdlcy9kb2N1bWVudGF0aW9uLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9kb3dubG9hZC0wLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9kb3dubG9hZC0wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2Rvd25sb2FkLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9naXQtcmVwby0wLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9naXQtcmVwby0wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2dpdC1yZXBvLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9naXQtcmVwby0xLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9naXQtcmVwby0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmM4ZGNiCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2dpdC1yZXBvLTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9ob21lLWJ1Z2Ryb2lkLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9ob21lLWJ1Z2Ryb2lkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBmYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2hvbWUtYnVnZHJvaWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9ob3ctaXQtd29ya3MtMC5wbmcgYi9wZGsvZG9jcy9pbWFnZXMvaG93LWl0LXdvcmtzLTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMWM5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvaG93LWl0LXdvcmtzLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9ob3ctaXQtd29ya3MtMS5wbmcgYi9wZGsvZG9jcy9pbWFnZXMvaG93LWl0LXdvcmtzLTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvaG93LWl0LXdvcmtzLTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9saWwtd3JlbmNoLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9saWwtd3JlbmNoLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGI0OTcyCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2xpbC13cmVuY2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9zdWJtaXQtcGF0Y2hlcy0wLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9zdWJtaXQtcGF0Y2hlcy0wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTdlYWFkCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL3N1Ym1pdC1wYXRjaGVzLTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy9zdWJtaXQtcGF0Y2hlcy0xLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9zdWJtaXQtcGF0Y2hlcy0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdhM2MzCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL3N1Ym1pdC1wYXRjaGVzLTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2ltYWdlcy93b3JrZmxvdy0wLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy93b3JrZmxvdy0wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODQ1NmI1Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL3dvcmtmbG93LTAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2luZGV4LmpkIGIvcGRrL2RvY3MvaW5kZXguamQKaW5kZXggNDE3NWRiNy4uMjE3ODc3ZCAxMDA2NDQKLS0tIGEvcGRrL2RvY3MvaW5kZXguamQKKysrIGIvcGRrL2RvY3MvaW5kZXguamQKQEAgLTEsMTMzICsxLDY0IEBACitwYWdlLnRpdGxlPVdlbGNvbWUgdG8gQW5kcm9pZAogaG9tZT10cnVlCiBAamQ6Ym9keQorPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiA0NSU7IGZvbnQtc2l6ZTogMS4zZW07Ij4KKyAgPHA+SGVyZSB5b3UgY2FuIGZpbmQgdGhlIGluZm9ybWF0aW9uIGFuZCBzb3VyY2UgY29kZSB5b3UgbmVlZCB0byBidWlsZCBhbgorICBBbmRyb2lkLWNvbXBhdGlibGUgZGV2aWNlLjwvcD4KKyAgPHA+QW5kcm9pZCBpcyBhbiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBzdGFjayBmb3IgbW9iaWxlIGRldmljZXMsIGFuZCBhCisgIGNvcnJlc3BvbmRpbmcgb3Blbi1zb3VyY2UgcHJvamVjdCBsZWQgYnkgR29vZ2xlLiBXZSBjcmVhdGVkIEFuZHJvaWQgaW4KKyAgcmVzcG9uc2UgdG8gb3VyIG93biBleHBlcmllbmNlcyBsYXVuY2hpbmcgbW9iaWxlIGFwcHMuIFdlIHdhbnRlZCB0byBtYWtlCisgIHN1cmUgdGhhdCB0aGVyZSB3YXMgbm8gY2VudHJhbCBwb2ludCBvZiBmYWlsdXJlLCBzbyB0aGF0IG5vIGluZHVzdHJ5IHBsYXllcgorICBjYW4gcmVzdHJpY3Qgb3IgY29udHJvbCB0aGUgaW5ub3ZhdGlvbnMgb2YgYW55IG90aGVyLiAgVGhhdCdzIHdoeSB3ZQorICBjcmVhdGVkIEFuZHJvaWQsIGFuZCBtYWRlIGl0cyBzb3VyY2UgY29kZSBvcGVuLjwvcD4KKyAgPHA+PGEgaHJlZj0ie0Bkb2NSb290fWFib3V0L2luZGV4Lmh0bWwiPkxlYXJuIG1vcmUgJnJhcXVvOzwvYT48L3A+Cis8L2Rpdj4KKzxkaXYgc3R5bGU9ImZsb2F0OiByaWdodDsgd2lkdGg6IDM1JTsiPgorPGgzIHN0eWxlPSJwYWRkaW5nLXRvcDogMHB4OyI+TmV3czwvaDM+Cis8cD48Yj5TaXRlIHJlZGVzaWduPC9iPjxici8+CitZb3UncmUgbG9va2luZyBhdCB0aGUgbmV3IGFuZCBpbXByb3ZlZCBzb3VyY2UuYW5kcm9pZC5jb20hIFdlJ3ZlIHVwZGF0ZWQKK3RoZSBsYXlvdXQgYW5kIHNpdGUgZGVzaWduLCBhbmQgYWxzbyBhZGRlZCBuZXcgaW5mb3JtYXRpb24uIFdlIGhvcGUgeW91IGZpbmQKK3RoZXNlIGltcHJvdmVtZW50cyBoZWxwZnVsLjwvcD4KKzxwPjxiPkludHJvZHVjaW5nIHRoZSBDb21wYXRpYmlsaXR5IFByb2dyYW08L2I+PGJyLz4KK1dlJ3JlIHBsZWFzZWQgdG8gaW50cm9kdWNlIHRoZSBBbmRyb2lkIENvbXBhdGliaWxpdHkgUHJvZ3JhbS4gV2UndmUgcmVsZWFzZWQKK3R3byB0b29scyAtLSB0aGUgQ29tcGF0aWJpbGl0eSBEZWZpbml0aW9uIERvY3VtZW50IGFuZCB0aGUgQ29tcGF0aWJpbGl0eSBUZXN0CitTdWl0ZSAtLSB0byBoZWxwIGRldmljZSBtYW51ZmFjdHVyZXJzIGJ1aWxkIGNvbXBhdGlibGUgZGV2aWNlcy4gRnVsbCBkZXRhaWxzCitvZiB0aGUgQ29tcGF0aWJpbGl0eSBQcm9ncmFtIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBxdWFydGVyIG9mIDIwMTAuPC9wPgorPC9kaXY+Cis8aW1nIHN0eWxlPSJmbG9hdDogcmlnaHQ7IHBhZGRpbmctcmlnaHQ6IDEuNWVtOyIgc3JjPSJ7QGRvY1Jvb3R9aW1hZ2VzL2hvbWUtYnVnZHJvaWQucG5nIiBhbHQ9IkFuZHJvaWQgTWFzY290Ii8+CiAKKzxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyIvPgogCi0JPGRpdiBpZD0ibWFpbkJvZHlGaXhlZCIgYWxpZ249InRvcCI+Ci0gICAgICAgICAgICAgIDxkaXYgaWQ9Im1haW5Cb2R5TGVmdCI+CQkJCi0gICAgICAgICAgICAgICAgICAgPGgyPkFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgPCEtLSB0b3RhbCBtYXggd2lkdGggaXMgNTIwcHggLS0+Ci0gICAgICAgICAgICAgICAgICAgPHA+IEFuZHJvaWQgaXMgdGhlIGZpcnN0IGZyZWUsIG9wZW4gc291cmNlLCBhbmQgZnVsbHkgY3VzdG9taXphYmxlIG1vYmlsZSBwbGF0Zm9ybS4gCi0gICAgICAgICAgICAgICAgICAgICAgIEFuZHJvaWQgb2ZmZXJzIGEgZnVsbCBzdGFjazogYW4gb3BlcmF0aW5nIHN5c3RlbSwgbWlkZGxld2FyZSBhbmQga2V5IG1vYmlsZSBhcHBsaWNhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgIEl0IGFsc28gY29udGFpbnMgYSByaWNoIHNldCBvZiBBUElzIHRoYXQgYWxsb3dzIHRoaXJkLXBhcnR5IGRldmVsb3BlcnMgdG8gZGV2ZWxvcCBncmVhdAotICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMuIDwvcD4KLSAgICAgICAgICAgICAgPC9kaXY+PCEtLSBlbmQgbWFpbkJvZHlMZWZ0IC0tPgorPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9ImJvcmRlcjogMHB4OyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyI+PHRyPjx0ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYm9yZGVyOiAwcHg7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7Ij4KKzxkaXYgY2xhc3M9InJlYm94IGxpbCIgc3R5bGU9ImZsb2F0OiBsZWZ0OyB3aWR0aDogMzAlOyBtYXJnaW46IDFlbTsiPiAKKyAgPGgyIHN0eWxlPSJjb2xvcjogd2hpdGU7IGJhY2tncm91bmQtY29sb3I6ICM5NUMwRDA7IGJvcmRlcjogMHB4OyI+R2V0IEludm9sdmVkPC9oMj4gCisgIDxkaXYgY2xhc3M9InAiPiAKKyAgICA8cD48aW1nIHNyYz0iaW1hZ2VzL2xpbC13cmVuY2gucG5nIiBhbHQ9IiIgc3R5bGU9Im1hcmdpbjogMWVtOyIvPgorICAgIElmIHlvdSdyZSBpbnRlcmVzdGVkIGluIGNvbnRyaWJ1dGluZyB0byB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBvciBoZWxwaW5nCisgICAgb3V0IHdpdGggdGhlIHByb2plY3QgaW4gc29tZSBvdGhlciB3YXksIGNsaWNrIGhlcmUuPC9wPiAKKyAgICA8cD48YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2luZGV4Lmh0bWwiPk1vcmUgJnJhcXVvOzwvYT48L3A+IAorICA8L2Rpdj4gCis8L2Rpdj4gCiAKLSAgICAgICAgICAgICAgPGRpdiBpZD0ibWFpbkJvZHlSaWdodCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGlkPSJyaWdodENvbHVtbiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iaW1hZ2VDZWxsIj48YSBocmVmPSJ7QGRvY1Jvb3R9c2RrL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSJ7QGRvY1Jvb3R9YXNzZXRzL2ltYWdlcy9pY29uX2Rvd25sb2FkLmpwZyIgc3R5bGU9InBhZGRpbmc6MCIgLz48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZ3JlZW4iPkRvd25sb2FkPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGUgQW5kcm9pZCBTREsgaGFzIHRoZSB0b29scywgc2FtcGxlIGNvZGUsIGFuZCBkb2NzIHlvdSBuZWVkIHRvIGNyZWF0ZSBncmVhdCBhcHBzLiAgPC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20iPkxlYXJuIG1vcmUgJnJhcXVvOzwvYT48L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+PGRpdiBjbGFzcz0ic2VwZXJhdG9yIj4mbmJzcDs8L2Rpdj48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJpbWFnZUNlbGwiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYW5kcm9pZC5jb20vbWFya2V0Lmh0bWwiPjxpbWcgc3JjPSJ7QGRvY1Jvb3R9YXNzZXRzL2ltYWdlcy9pY29uX21hcmtldC5qcGciIHN0eWxlPSJwYWRkaW5nOjAiIC8+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImdyZWVuIj5QdWJsaXNoPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5BbmRyb2lkIE1hcmtldCBpcyBhbiBvcGVuIHNlcnZpY2UgdGhhdCBsZXRzIHlvdSBkaXN0cmlidXRlIHlvdXIgYXBwcyB0byBoYW5kc2V0cy48L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy5hbmRyb2lkLmNvbS9tYXJrZXQuaHRtbCI+TGVhcm4gbW9yZSAmcmFxdW87PC9hPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48ZGl2IGNsYXNzPSJzZXBlcmF0b3IiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImltYWdlQ2VsbCI+PGEgaHJlZj0iaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbSI+PGltZyBzcmM9IntAZG9jUm9vdH1hc3NldHMvaW1hZ2VzL2ljb25fY29udHJpYnV0ZS5qcGciIHN0eWxlPSJwYWRkaW5nOjAiIC8+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImdyZWVuIj5Db250cmlidXRlPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5BbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgZW50aXJlIHBsYXRmb3JtIHNvdXJjZS48L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbSI+TGVhcm4gbW9yZSAmcmFxdW87PC9hPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48ZGl2IGNsYXNzPSJzZXBlcmF0b3IiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImltYWdlQ2VsbCI+PGEgaHJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS91c2VyL2FuZHJvaWRkZXZlbG9wZXJzIj48aW1nIHNyYz0ie0Bkb2NSb290fWFzc2V0cy9pbWFnZXMvdmlkZW8tZHJvaWQucG5nIiBzdHlsZT0icGFkZGluZzowIiAvPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJncmVlbiI+V2F0Y2g8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvYmplY3Qgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNDAiPjxwYXJhbSBuYW1lPSJtb3ZpZSIgdmFsdWU9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9HQVJNZTdLbV9nayZobD1lbiZmcz0xIj48L3BhcmFtPjxwYXJhbSBuYW1lPSJhbGxvd0Z1bGxTY3JlZW4iIHZhbHVlPSJ0cnVlIj48L3BhcmFtPjxwYXJhbSBuYW1lPSJhbGxvd3NjcmlwdGFjY2VzcyIgdmFsdWU9ImFsd2F5cyI+PC9wYXJhbT48ZW1iZWQgc3JjPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvR0FSTWU3S21fZ2smaGw9ZW4mZnM9MSIgdHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIGFsbG93c2NyaXB0YWNjZXNzPSJhbHdheXMiIGFsbG93ZnVsbHNjcmVlbj0idHJ1ZSIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNDAiPjwvZW1iZWQ+PC9vYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6MWVtIj48YSBocmVmPSJ7QGRvY1Jvb3R9dmlkZW9zL2luZGV4Lmh0bWwiPk1vcmUgQW5kcm9pZCB2aWRlb3MgJnJhcXVvOzwvYT48L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorPGRpdiBjbGFzcz0icmVib3ggbGlsIiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiAzMCU7IG1hcmdpbjogMWVtOyI+IAorICA8aDIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogIzk1QzBEMDsgYm9yZGVyOiAwcHg7Ij5CdWlsZCBhIERldmljZTwvaDI+IAorICA8ZGl2IGNsYXNzPSJwIj4gCisgICAgPHA+PGltZyBzcmM9ImltYWdlcy9saWwtd3JlbmNoLnBuZyIgYWx0PSIiIHN0eWxlPSJtYXJnaW46IDFlbTsiLz4KKyAgICBJZiB5b3UncmUgYW4gZW5naW5lZXIgYnVpbGRpbmcgYSBkZXZpY2UgaW50ZW5kZWQgdG8gcnVuIHRoZSBBbmRyb2lkCisgICAgc29mdHdhcmUgc3RhY2ssIGNsaWNrIGhlcmUgdG8gZmluZCBwb3J0aW5nIGluZm9ybWF0aW9uIGFuZCB0aXBzLjwvcD4gCisgICAgPHA+PGEgaHJlZj0ie0Bkb2NSb290fXBvcnRpbmcvaW5kZXguaHRtbCI+TW9yZSAmcmFxdW87PC9hPjwvcD4gCisgIDwvZGl2PiAKKzwvZGl2PiAKIAotICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgIDwvZGl2PgotCTwvZGl2PgorPGRpdiBjbGFzcz0icmVib3ggbGlsIiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiAzMCU7IG1hcmdpbjogMWVtOyI+IAorICA8aDIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogIzk1QzBEMDsgYm9yZGVyOiAwcHg7Ij5Db21wYXRpYmlsaXR5PC9oMj4gCisgIDxkaXYgY2xhc3M9InAiPiAKKyAgICA8cD48aW1nIHNyYz0iaW1hZ2VzL2xpbC13cmVuY2gucG5nIiBhbHQ9IiIgc3R5bGU9Im1hcmdpbjogMWVtOyIvPgorICAgIElmIHlvdSdyZSBhbiBPRU0gb3Igb3RoZXIgb3JnYW5pemF0aW9uIGJ1aWxkaW5nIGFuIEFuZHJvaWQgZGV2aWNlLCBjbGljaworICAgIGhlcmUgdG8gZmluZCBvdXQgaG93IHRvIGVuc3VyZSB0aGF0IHlvdXIgZGV2aWNlIGlzIGZ1bGx5IGNvbXBhdGlibGUsIGFuZAorICAgIGhvdyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgYmVuZWZpdHMgb2YgY29tcGF0aWJpbGl0eS48L3A+IAorICAgIDxwPjxhIGhyZWY9IntAZG9jUm9vdH1jb21wYXRpYmlsaXR5L2luZGV4Lmh0bWwiPk1vcmUgJnJhcXVvOzwvYT48L3A+IAorICA8L2Rpdj4gCis8L2Rpdj4gCis8L3RkPjwvdHI+PC90YWJsZT4KIAotPCEtLVtpZiBsdGUgSUUgNl0+Ci0gIDxzdHlsZT4KLSAgICAjYXJyb3ctbGVmdCB7Ci0gICAgICBtYXJnaW46MCAwIDAgNXB4OwotICAgIH0KLSAgICAjYXJyb3ctcmlnaHQgewotICAgICAgbWFyZ2luLWxlZnQ6MDsKLSAgICB9Ci0gICAgLmFwcC1saXN0LWNvbnRhaW5lciB7Ci0gICAgICBtYXJnaW46IDM3cHggMCAwIDIzcHg7Ci0gICAgfQotICAgIGRpdiNsaXN0LWNsaXAgeyAKLSAgICAgIHdpZHRoOjQ2OHB4OwotICAgIH0KLSAgPC9zdHlsZT4KLTwhW2VuZGlmXS0tPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0KLS8vICogLS0gY2Fyb3VzZWwgZGljdGlvbmFyeSAtLSAqIC8vCi0gIC8qIGxheW91dDogIGltZ0xlZnQsIGltZ1JpZ2h0LCBpbWdUb3AKLSAgICAgaWNvbjogICAgaW1hZ2UgZm9yIGNhcm91c2VsIGVudHJ5LiBjcm9wcGVkIChoZWlnaHQ6NzBweCwgd2lkdGg6OTBweCkKLSAgICAgbmFtZTogICAgc3RyaW5nIGZvciBjYXJvdXNlbCBlbnRyeQotICAgICBpbWc6ICAgICBpbWFnZSBmb3IgYnVsbGV0aW4gcG9zdC4gY3JvcHBlZCAoaGVpZ2h0OiAxNzAsIHdpZHRoOjIzMHB4KQotICAgICB0aXRsZTogICBoZWFkZXIgZm9yIGJ1bGxldGluIChvcHRpb25hbCwgaW5zZXJ0ICIiIHZhbHVlIHRvIHNraXAKLSAgICAgZGVzYzogICAgdGhlIGJ1bGxldGluIHBvc3QuIG11c3QgaW5jbHVkZSBodG1sIHRhZ3MuIAotICAqLwotCi0gIHZhciBkcm9pZExpc3QgPSB7Ci0gICAgJ3Nkayc6IHsKLSAgICAgICdsYXlvdXQnOiJpbWdMZWZ0IiwKLSAgICAgICdpY29uJzoic2RrLXNtYWxsLnBuZyIsCi0gICAgICAnbmFtZSc6IlNESyAxLjUgcjMiLAotICAgICAgJ2ltZyc6InNkay1sYXJnZS5wbmciLAotICAgICAgJ3RpdGxlJzoiQW5kcm9pZCAxLjUgU0RLIiwKLSAgICAgICdkZXNjJzogIjxwPkFuZHJvaWQgMS41IFNESyBpcyBub3cgYXZhaWxhYmxlLiBJdCBpbmNsdWRlcyBuZXcgQVBJcyBmb3IgQW5kcm9pZCAxLjUsIHVwZGF0ZWQgZGV2ZWxvcGVyIHRvb2xzLCBtdWx0aXBsZSBwbGF0Zm9ybSB2ZXJzaW9ucywgYW5kIGEgR29vZ2xlIEFQSXMgYWRkLW9uLjwvcD48cD48YSBocmVmPSd7QGRvY1Jvb3R9c2RrLzEuNV9yMy9pbmRleC5odG1sJz5Eb3dubG9hZCBBbmRyb2lkIDEuNSBTREsgJnJhcXVvOzwvYT48L3A+IgotICAgIH0sCi0gICAgCi0gICAgJ2lvJzogewotICAgICAgJ2xheW91dCc6ImltZ0xlZnQiLAotICAgICAgJ2ljb24nOiJpby1zbWFsbC5wbmciLAotICAgICAgJ25hbWUnOiJHb29nbGUgSS9PIiwKLSAgICAgICdpbWcnOiJpby1sYXJnZS5wbmciLAotICAgICAgJ3RpdGxlJzoiR29vZ2xlIEkvTyBEZXZlbG9wZXIgQ29uZmVyZW5jZSIsCi0gICAgICAnZGVzYyc6ICI8cD5UaGUgR29vZ2xlIEkvTyBkZXZlbG9wZXIgY29uZmVyZW5jZSB0b29rIHBsYWNlIE1heSAyNy0yOCBpbiBTYW4gRnJhbmNpc2NvLiBJZiB5b3UgbWlzc2VkIHRoZSBjb25mZXJlbmNlLCB5b3UgY2FuIGV4cGVyaWVuY2UgdGhlIEFuZHJvaWQgc2Vzc2lvbnMgYnkgdmlld2luZyBZb3VUdWJlIHZpZGVvcy48L3A+PHA+PGEgaHJlZj0ne0Bkb2NSb290fXZpZGVvcy9pbmRleC5odG1sJz5TZWUgdGhlIHNlc3Npb25zIGZyb20gR29vZ2xlIEkvTyAmcmFxdW87PC9hPjwvcD4iCi0gICAgfSwKLQotICAgICdtYXBza2V5JzogewotICAgICAgJ2xheW91dCc6ImltZ0xlZnQiLAotICAgICAgJ2ljb24nOiJtYXBzLXNtYWxsLnBuZyIsCi0gICAgICAnbmFtZSc6Ik1hcHMgQVBJIEtleSIsCi0gICAgICAnaW1nJzoibWFwcy1sYXJnZS5wbmciLAotICAgICAgJ3RpdGxlJzoiTWFwcyBBUEkgS2V5IiwKLSAgICAgICdkZXNjJzoiPHA+SWYgeW91J3JlIHdyaXRpbmcgYW4gQW5kcm9pZCBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgR29vZ2xlIE1hcHMgKHdpdGggTWFwVmlldyksIHlvdSBtdXN0IHJlZ2lzdGVyIHlvdXIgYXBwbGljYXRpb24gdG8gb2J0YWluIGEgTWFwcyBBUEkgS2V5LiBXaXRob3V0IHRoZSBrZXksIHlvdXIgbWFwcyBhcHBsaWNhdGlvbiB3aWxsIG5vdCB3b3JrIG9uIEFuZHJvaWQgZGV2aWNlcy4gT2J0YWluaW5nIGEga2V5IHJlcXVpcmVzIGp1c3QgYSBjb3VwbGUgb2Ygc3RlcHMuPC9wPjxwPjxhIGhyZWY9J2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYW5kcm9pZC9hZGQtb25zL2dvb2dsZS1hcGlzL21hcHMtb3ZlcnZpZXcuaHRtbCc+TGVhcm4gbW9yZSAmcmFxdW87PC9hPjwvcD4iCi0gICAgfSwKLQotICAgICdkZXZwaG9uZSc6IHsKLSAgICAgICdsYXlvdXQnOiJpbWdMZWZ0IiwKLSAgICAgICdpY29uJzoiZGV2cGhvbmUtc21hbGwucG5nIiwKLSAgICAgICduYW1lJzoiRGV2IFBob25lIDEiLAotICAgICAgJ2ltZyc6ImRldnBob25lLWxhcmdlLnBuZyIsCi0gICAgICAndGl0bGUnOiJBbmRyb2lkIERldiBQaG9uZSAxIiwKLSAgICAgICdkZXNjJzogIjxwPlJ1biBhbmQgZGVidWcgeW91ciBBbmRyb2lkIGFwcGxpY2F0aW9ucyBkaXJlY3RseSBvbiB0aGlzIGRldmljZS4gTW9kaWZ5IGFuZCByZWJ1aWxkIHRoZSBBbmRyb2lkIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBmbGFzaCBpdCBvbnRvIHRoZSBwaG9uZS4gVGhlIEFuZHJvaWQgRGV2IFBob25lIDEgaXMgY2FycmllciBpbmRlcGVuZGVudCwgYW5kIGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UgYnkgYW55IGRldmVsb3BlciByZWdpc3RlcmVkIHdpdGggPGEgaHJlZj0naHR0cDovL21hcmtldC5hbmRyb2lkLmNvbS9wdWJsaXNoJz5BbmRyb2lkIE1hcmtldDwvYT4uPC9wPjxwPjxhIGhyZWY9Jy9ndWlkZS9kZXZlbG9waW5nL2RldmljZS5odG1sI2Rldi1waG9uZS0xJz5MZWFybiBtb3JlIGFib3V0IHRoZSBBbmRyb2lkIERldiBQaG9uZSAxICZyYXF1bzs8L2E+PC9wPiIKLSAgICB9Ci0KLSAgfQotPC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7QGRvY1Jvb3R9YXNzZXRzL2Nhcm91c2VsLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgaW5pdENhcm91c2VsKCJzZGsiKTsKLTwvc2NyaXB0PgorPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ii8+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9saWNlbnNlcy9pbmRleC5qZCBiL3Bkay9kb2NzL2xpY2Vuc2VzL2luZGV4LmpkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGY1MWRjLi4wMDAwMDAwCi0tLSBhL3Bkay9kb2NzL2xpY2Vuc2VzL2luZGV4LmpkCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotaG9tZT10cnVlCi1kb2MudHlwZT1saWNlbnNlcwotQGpkOmJvZHkKLQotPGRpdiBpZD0ibWFpbkJvZHlGaXhlZCI+Ci0KLTxwPgotICAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCB1c2VzIGEgZmV3IG9wZW4gc291cmNlIGluaXRpYXRpdmUgYXBwcm92ZWQgb3BlbiBzb3VyY2UgbGljZW5zZXMgdG8gZW5hYmxlIGF2YWlsYWJpbGl0eQotICAgb2Ygc291cmNlIGNvZGUgYW5kIHRvIGFjY2VwdCBjb250cmlidXRpb25zIGZyb20gaW5kaXZpZHVhbHMgYW5kIGNvcnBvcmF0aW9ucy4KLTwvcD4KLQotPHA+Ci0gICA8Yj5BbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgbGljZW5zZTwvYj4KLTwvcD4KLQotPHA+Ci0gICBUaGUgcHJlZmVycmVkIGxpY2Vuc2UgZm9yIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgaXMgQXBhY2hlIDIuMC4gQXBhY2hlIDIuMCBpcyBhIGNvbW1lcmNpYWwgYW5kIG9wZW4gc291cmNlCi0gICBmcmllbmRseSBvcGVuIHNvdXJjZSBsaWNlbnNlLiBUaGUgbWFqb3JpdHkgb2YgdGhlIEFuZHJvaWQgcGxhdGZvcm0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZS4gV2hpbGUKLSAgIHRoZSBwcm9qZWN0IHdpbGwgc3RyaXZlIHRvIGFkaGVyZSB0byB0aGUgcHJlZmVycmVkIGxpY2Vuc2UsIHRoZXJlIG1heSBiZSBleGNlcHRpb25zIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBvbiBhIGNhc2UtYnktY2FzZQotICAgYmFzaXMuIEZvciBleGFtcGxlLCB0aGUgTGludXgga2VybmVsIHBhdGNoZXMgYXJlIHVuZGVyIHRoZSBHUEx2MiBsaWNlbnNlIHdpdGggc3lzdGVtIGV4Y2VwdGlvbnMsIHdoaWNoIGNhbiBiZSBmb3VuZCBvbiBrZXJuZWwub3JnCi08L3A+Ci0KLTxwPgotICAgPGI+Q29udHJpYnV0b3IgTGljZW5zZSBHcmFudHM8L2I+Ci08L3A+Ci0KLTxwPgotICAgQWxsIGluZGl2aWR1YWwgY29udHJpYnV0b3JzIG9mIGlkZWFzLCBjb2RlLCBvciBkb2N1bWVudGF0aW9uIHRvIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Qgd2lsbCBiZSByZXF1aXJlZCB0bwotICAgY29tcGxldGUsIHNpZ24sIGFuZCBzdWJtaXQgYW4gSW5kaXZpZHVhbCBDb250cmlidXRvciBMaWNlbnNlIEdyYW50LiBUaGUgZ3JhbnQgY2FuIGJlIGV4ZWN1dGVkIG9ubGluZSB0aHJvdWdoIHRoZSBjb2RlCi0gICByZXZpZXcgdG9vbC4gVGhlIGFncmVlbWVudCBjbGVhcmx5IGRlZmluZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBoYXMgYmVlbiBjb250cmlidXRlZCB0byB0aGUKLSAgIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdC4gIFRoaXMgbGljZW5zZSBpcyBmb3IgeW91ciBwcm90ZWN0aW9uIGFzIGEgY29udHJpYnV0b3IgYXMgd2VsbCBhcyB0aGUgcHJvdGVjdGlvbiBvZiB0aGUKLSAgIHByb2plY3Q7IGl0IGRvZXMgbm90IGNoYW5nZSB5b3VyIHJpZ2h0cyB0byB1c2UgeW91ciBvd24gY29udHJpYnV0aW9ucyBmb3IgYW55IG90aGVyIHB1cnBvc2UuCi08L3A+Ci0KLTxwPgotICAgRm9yIGEgY29ycG9yYXRpb24gdGhhdCBoYXMgYXNzaWduZWQgZW1wbG95ZWVzIHRvIHdvcmsgb24gdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCwgYSBDb3Jwb3JhdGUgQ29udHJpYnV0b3IgTGljZW5zZQotICAgR3JhbnQgaXMgYXZhaWxhYmxlLiBUaGlzIHZlcnNpb24gb2YgdGhlIEdyYW50IGFsbG93cyBhIGNvcnBvcmF0aW9uIHRvIGF1dGhvcml6ZSBjb250cmlidXRpb25zIHN1Ym1pdHRlZCBieSBpdHMgZGVzaWduYXRlZAotICAgZW1wbG95ZWVzIGFuZCB0byBncmFudCBjb3B5cmlnaHQgYW5kIHBhdGVudCBsaWNlbnNlcy4gTm90ZSB0aGF0IGEgQ29ycG9yYXRlIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQgZG9lcyBub3QgcmVtb3ZlIHRoZQotICAgbmVlZCBmb3IgYW55IGRldmVsb3BlciB0byBzaWduIHRoZWlyIG93biBJbmRpdmlkdWFsIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQgYXMgYW4gaW5kaXZpZHVhbCwgdG8gY292ZXIgYW55IG9mIHRoZWlyCi0gICBjb250cmlidXRpb25zIHdoaWNoIGFyZSBub3Qgb3duZWQgYnkgdGhlIGNvcnBvcmF0aW9uIHNpZ25pbmcgdGhlIENvcnBvcmF0ZSBDb250cmlidXRvciBMaWNlbnNlIEdyYW50LgotPC9wPgotCi08cD4KLSAgIFBsZWFzZSBub3RlIHRoYXQgd2UgYmFzZWQgb3VyIGdyYW50cyBvbiB0aGUgb25lcyB0aGF0IHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiB1c2VzLCB3aGljaCBjYW4gYmUgZm91bmQgb24gaXRzIHNpdGUuCi08L3A+Ci0KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvbGljZW5zZXMvbGljZW5zZXNfdG9jLmNzIGIvcGRrL2RvY3MvbGljZW5zZXMvbGljZW5zZXNfdG9jLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmZhMTA3Li4wMDAwMDAwCi0tLSBhL3Bkay9kb2NzL2xpY2Vuc2VzL2xpY2Vuc2VzX3RvYy5jcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci08IS0tCi1mdW5jdGlvbiBub3RoaW5nKCkge30KLS0tPgotPC9zY3JpcHQ+Ci0KLTx1bD4KLSAgPGxpPiA8aDI+IFJlZmVyZW5jZWQgTGljZW5zZXMgPC9oMj4KLSAgPHVsPgotICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSAyLjAgbGljZW5zZTwvYT48L2xpPgotICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9DT1BZSU5HIj5HUEwgdjIgbGljZW5zZTwvYT48L2xpPgotICA8L3VsPgotICA8L2xpPgotCi08L3VsPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci08IS0tCi0gICAgYnVpbGRUb2dnbGVMaXN0cygpOwotLy8tLT4KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYXVkaW8uamQgYi9wZGsvZG9jcy9wb3J0aW5nL2F1ZGlvLmpkCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2F1ZGlvLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2F1ZGlvLmpkCmluZGV4IDY2YzA1ZjcuLmU4Mjc4OGYgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2F1ZGlvLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvYXVkaW8uamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUF1ZGlvCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2JsdWV0b290aC5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvYmx1ZXRvb3RoLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2JsdWV0b290aC5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGguamQKaW5kZXggYmNmODhkYi4uY2ViODY4MyAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvYmx1ZXRvb3RoLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvYmx1ZXRvb3RoLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1CbHVldG9vdGgKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpAQCAtMTcwLDcgKzE3MCw3IEBACiAKIDxwPjxzdHJvbmc+RGV2ZWxvcG1lbnQgTm90ZXM8L3N0cm9uZz48L3A+CiA8dWw+Ci0gIDxsaT48c3Ryb25nPkhJRCBTdXBwb3J0PGJyIC8+CisgIDxsaT48c3Ryb25nPkhJRCBTdXBwb3J0IDxiciAvPgogICA8L3N0cm9uZz5DdXBjYWtlIGZlYXR1cmVzIHNvbWUgZWFybHkgd29yayYjMTUxO0JsdWV6IGhhcyBhbiBISUQgcGx1Z2luLCA8Y29kZT5leHRlcm5hbC9ibHVlei91dGlscy9pbnB1dC9BbmRyb2lkLm1rPC9jb2RlPiwgd2hpY2ggZ2V0cyBjb21waWxlZC4gPGJyIC8+CiAgICAgPGJyIC8+CiBZb3UgY2FuIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhpcyBwbHVnaW4gdXNpbmcgPGNvZGU+ZGJ1cy1zZW5kPC9jb2RlPjwvc3Bhbj4gYW5kIDxjb2RlPmRidXMtbW9uaXRvcjwvY29kZT4uIFdoaWxlIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCwgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbm5lY3QgYW5kIHVzZSBhIEhJRCBrZXlib2FyZCBhbmQgbW91c2UgdXNpbmcgdGhlIEJsdWV6IEhJRCBwbHVnaW4gQVBJLiBOZXh0IHN0ZXBzIGluY2x1ZGUgcGx1bWJpbmcgdGhlIHBsdWdpbiBBUEkgaW4gdGhlIEFuZHJvaWQgSmF2YSBmcmFtZXdvcmsgYW5kIG9mZmVyaW5nIGJldHRlciBzdXBwb3J0IGZvciBISUQgaW5wdXQgbWV0aG9kcyAobmV3IGtleW1hcHMgYW5kIG1vdXNlIHN1cHBvcnQpLjxiciAvPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYmx1ZXRvb3RoL2JsdWV0b290aF9wcm9jZXNzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGgvYmx1ZXRvb3RoX3Byb2Nlc3MuamQKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvYmx1ZXRvb3RoL2JsdWV0b290aF9wcm9jZXNzLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2JsdWV0b290aC9ibHVldG9vdGhfcHJvY2Vzcy5qZAppbmRleCBlYTQ2ZjIzLi4wMGVjMGRhIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9ibHVldG9vdGgvYmx1ZXRvb3RoX3Byb2Nlc3MuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGgvYmx1ZXRvb3RoX3Byb2Nlc3MuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUJsdWV0b290aCBQcm9jZXNzIERpYWdyYW0KIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxwPlRoZSBkaWFncmFtIGJlbG93IG9mZmVycyBhIHByb2Nlc3Mtb3JpZW50ZWQgYXJjaGl0ZWN0dXJhbCBvdmVydmlldyBvZiBBbmRyb2lkJ3MgQmx1ZXRvb3RoIHN0YWNrLiBDbGljayA8YSBocmVmPSIuLi9ibHVldG9vdGguaHRtbCI+Qmx1ZXRvb3RoPC9hPiB0byByZXR1cm4gdG8gdGhlIEJsdWV0b290aCBvdmVydmlldyBwYWdlLjwvcD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2JsdWV0b290aC9pbWFnZXMvYW5kcm9pZEJsdWV0b290aFByb2Nlc3NEaWFncmFtLmpwZyBiL3Bkay9kb2NzL3BvcnRpbmcvYmx1ZXRvb3RoL2ltYWdlcy9hbmRyb2lkQmx1ZXRvb3RoUHJvY2Vzc0RpYWdyYW0uanBnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9ibHVldG9vdGgvaW1hZ2VzL2FuZHJvaWRCbHVldG9vdGhQcm9jZXNzRGlhZ3JhbS5qcGcKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvYmx1ZXRvb3RoL2ltYWdlcy9hbmRyb2lkQmx1ZXRvb3RoUHJvY2Vzc0RpYWdyYW0uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2JyaW5nX3VwLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9icmluZ191cC5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9icmluZ191cC5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9icmluZ191cC5qZAppbmRleCBhMTFmZTAwLi4xZDA0Yjg2IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9icmluZ191cC5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2JyaW5nX3VwLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1CcmluZyBVcAogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPHA+T25jZSB5b3VyIGNvZGUgaXMgYnVpbHQgYW5kIHlvdSBoYXZlIHZlcmlmaWVkIHRoYXQgYWxsIG5lY2Vzc2FyeSBkaXJlY3RvcmllcyBleGlzdCwgcG93ZXIgb24gYW5kIHRlc3QgeW91ciBkZXZpY2Ugd2l0aCBiYXNpYyBicmluZyB1cCwgYXMgZGVzY3JpYmVkIGJlbG93LiBCcmluZyB1cCB0ZXN0cyBhcmUgdHlwaWNhbGx5IGRlc2lnbmVkIHRvIHN0cmVzcyBjZXJ0YWluIGFzcGVjdHMgb2YgeW91ciBzeXN0ZW0gYW5kIGFsbG93IHlvdSB0byBjaGFyYWN0ZXJpemUgdGhlIGRldmljZSdzIGJlaGF2aW9yLiA8L3A+CkBAIC0yNjQsNyArMjY0LDcgQEAKICAgICA8L3RyPgogICA8L3RhYmxlPgogICA8cD4gICAgUHJvcGVydGllczwvcD4KLSAgICBJbml0IHVwZGF0ZXMgc29tZSBzeXN0ZW0gcHJvcGVydGllcyB0byBwcm92aWRlIHNvbWUgaW5zaWdodCBpbnRvPGJyIC8+CisgICAgSW5pdCB1cGRhdGVzIHNvbWUgc3lzdGVtIHByb3BlcnRpZXMgdG8gcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byA8YnIgLz4KICAgICB3aGF0IGl0J3MgZG9pbmc6PC9wPgogICA8dGFibGU+CiAgICAgPHRyPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYnVpbGRfY29va2Jvb2suamQgYi9wZGsvZG9jcy9wb3J0aW5nL2J1aWxkX2Nvb2tib29rLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2J1aWxkX2Nvb2tib29rLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2J1aWxkX2Nvb2tib29rLmpkCmluZGV4IDRiZWQ5NDcuLmQ2MTkwODYgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2J1aWxkX2Nvb2tib29rLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvYnVpbGRfY29va2Jvb2suamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUJ1aWxkIENvb2tib29rCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2J1aWxkX25ld19kZXZpY2UuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2J1aWxkX25ld19kZXZpY2UuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvYnVpbGRfbmV3X2RldmljZS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9idWlsZF9uZXdfZGV2aWNlLmpkCmluZGV4IDI4ZTdjMmUuLjI3MWE0M2EgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2J1aWxkX25ld19kZXZpY2UuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9idWlsZF9uZXdfZGV2aWNlLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1Db25maWd1cmluZyBhIE5ldyBQcm9kdWN0CiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiAKQEAgLTYyLDcgKzYyLDYgQEAKICAgIyBUaGVzZSBkZWZpbml0aW9ucyBvdmVycmlkZSB0aGUgZGVmYXVsdHMgaW4gY29uZmlnL2NvbmZpZy5tYWtlIGZvciAmbHQ7Ym9hcmRfbmFtZSZndDsKICAgIwogICAjIFRBUkdFVF9OT19CT09UTE9BREVSIDo9IGZhbHNlCi0gICMgVEFSR0VUX0hBUkRXQVJFXzNEIDo9IGZhbHNlIAogICAjCiAgIFRBUkdFVF9VU0VfR0VORVJJQ19BVURJTyA6PSB0cnVlPC9wcmU+PC9saT4gIAogICA8bGk+SWYgeW91IHdpc2ggdG8gbW9kaWZ5IHN5c3RlbSBwcm9wZXJ0aWVzLCBjcmVhdGUgYSA8Y29kZT5zeXN0ZW0ucHJvcDwvY29kZT4gZmlsZSBpbiB5b3VyIDxjb2RlPiZsdDtib2FyZF9uYW1lJmd0OzwvY29kZT4gZGlyZWN0b3J5KDxjb2RlPnZlbmRvci8mbHQ7Y29tcGFueV9uYW1lJmd0Oy8mbHQ7Ym9hcmRfbmFtZSZndDs8L2NvZGU+KS48QlI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9idWlsZF9zeXN0ZW0uamQgYi9wZGsvZG9jcy9wb3J0aW5nL2J1aWxkX3N5c3RlbS5qZApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9idWlsZF9zeXN0ZW0uamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvYnVpbGRfc3lzdGVtLmpkCmluZGV4IGZkMGZmODAuLjY4NmZiYTAgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2J1aWxkX3N5c3RlbS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2J1aWxkX3N5c3RlbS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9QW5kcm9pZCBCdWlsZCBTeXN0ZW0KIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApAQCAtMjExLDcgKzIxMSw3IEBACiA8dGFibGUgYm9yZGVyPTE+IAogPHRyPiAKICAgICA8dGQ+IAotICAgICAgICA8Y29kZT5lbmc8Y29kZT4gCisgICAgICAgIDxjb2RlPmVuZyA8Y29kZT4gCiAgICAgPC90ZD4gCiAgICAgPHRkPiAKICAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmbGF2b3IuIEEgcGxhaW4gPGNvZGU+bWFrZTwvY29kZT4gaXMgdGhlCkBAIC0yMzAsNyArMjMwLDcgQEAKIDwvdHI+IAogPHRyPiAKICAgICA8dGQ+IAotICAgICAgICA8Y29kZT51c2VyPGNvZGU+IAorICAgICAgICA8Y29kZT51c2VyIDxjb2RlPiAKICAgICA8L3RkPiAKICAgICA8dGQ+IAogICAgICAgICA8Y29kZT5tYWtlIHVzZXI8L2NvZGU+CkBAIC0yNDgsNyArMjQ4LDcgQEAKIDwvdHI+IAogPHRyPiAKICAgICA8dGQ+IAotICAgICAgICA8Y29kZT51c2VyZGVidWc8Y29kZT4gCisgICAgICAgIDxjb2RlPnVzZXJkZWJ1ZyA8Y29kZT4gCiAgICAgPC90ZD4gCiAgICAgPHRkPiAKICAgICAgICAgPGNvZGU+bWFrZSB1c2VyZGVidWc8L2NvZGU+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9jYW1lcmEuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2NhbWVyYS5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9jYW1lcmEuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvY2FtZXJhLmpkCmluZGV4IDk4NjM2ZDguLjA1NzFmYjUgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2NhbWVyYS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2NhbWVyYS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9Q2FtZXJhCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2N1c3RvbWl6YXRpb24uamQgYi9wZGsvZG9jcy9wb3J0aW5nL2N1c3RvbWl6YXRpb24uamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvY3VzdG9taXphdGlvbi5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9jdXN0b21pemF0aW9uLmpkCmluZGV4IDljNTY2ODEuLjdjMTFhOGUgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2N1c3RvbWl6YXRpb24uamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9jdXN0b21pemF0aW9uLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1DdXN0b21pemF0aW9uCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2RhbHZpay5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvZGFsdmlrLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2RhbHZpay5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9kYWx2aWsuamQKaW5kZXggNmZhMzdkYS4uNTBiNzQ5OSAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvZGFsdmlrLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZGFsdmlrLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1EYWx2aWsKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvZGVidWdnaW5nX2dkYi5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvZGVidWdnaW5nX2dkYi5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9kZWJ1Z2dpbmdfZ2RiLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2RlYnVnZ2luZ19nZGIuamQKaW5kZXggZjJhMmRiNS4uMTdmZjQ3MSAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvZGVidWdnaW5nX2dkYi5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2RlYnVnZ2luZ19nZGIuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPURlYnVnZ2luZyB3aXRoIEdEQgogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9kZWJ1Z2dpbmdfbmF0aXZlLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9kZWJ1Z2dpbmdfbmF0aXZlLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2RlYnVnZ2luZ19uYXRpdmUuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvZGVidWdnaW5nX25hdGl2ZS5qZAppbmRleCAwZjhiMzk3Li43YmI2NTVmIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9kZWJ1Z2dpbmdfbmF0aXZlLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZGVidWdnaW5nX25hdGl2ZS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9RGVidWdnaW5nIE5hdGl2ZSBDb2RlCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiAKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2Rpc3BsYXlfZHJpdmVycy5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvZGlzcGxheV9kcml2ZXJzLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2Rpc3BsYXlfZHJpdmVycy5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9kaXNwbGF5X2RyaXZlcnMuamQKaW5kZXggMWVkZGQxNS4uNTcwZjZmNiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvZGlzcGxheV9kcml2ZXJzLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZGlzcGxheV9kcml2ZXJzLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1EaXNwbGF5IERyaXZlcnMKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvZ2V0dGluZ19zb3VyY2VfY29kZS5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvZ2V0dGluZ19zb3VyY2VfY29kZS5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9nZXR0aW5nX3NvdXJjZV9jb2RlLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2dldHRpbmdfc291cmNlX2NvZGUuamQKaW5kZXggZTczNTI3NC4uMzBhMmY5ZiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvZ2V0dGluZ19zb3VyY2VfY29kZS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2dldHRpbmdfc291cmNlX2NvZGUuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUdldHRpbmcgU291cmNlIENvZGUKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxhIG5hbWU9InRvYyIvPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvZ3BzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9ncHMuamQKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvZ3BzLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2dwcy5qZAppbmRleCAyYWNhZDZkLi4xNDQ5NDYwIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9ncHMuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9ncHMuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUdQUwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9ncm91cF9fbWVtb3J5LmpkIGIvcGRrL2RvY3MvcG9ydGluZy9ncm91cF9fbWVtb3J5LmpkCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2dyb3VwX19tZW1vcnkuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvZ3JvdXBfX21lbW9yeS5qZAppbmRleCAwNDIzNTE1Li4yMjRlMGNiIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9ncm91cF9fbWVtb3J5LmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZ3JvdXBfX21lbW9yeS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9UHJvdmlkaW5nIEhlYXAgTWVtb3J5CiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2dyb3VwX19uZXR3b3JraW5nLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9ncm91cF9fbmV0d29ya2luZy5qZApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9ncm91cF9fbmV0d29ya2luZy5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9ncm91cF9fbmV0d29ya2luZy5qZAppbmRleCBlMWU5NDJjLi42N2RhOGE2IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9ncm91cF9fbmV0d29ya2luZy5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2dyb3VwX19uZXR3b3JraW5nLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1OZXR3b3JraW5nIFN1cHBvcnQKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2FuZHJvaWRCbHVldG9vdGguZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvYW5kcm9pZEJsdWV0b290aC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9hbmRyb2lkQmx1ZXRvb3RoLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvYW5kcm9pZEJsdWV0b290aC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2FuZHJvaWRQTUFyY2hpdGVjdHVyZS5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9hbmRyb2lkUE1BcmNoaXRlY3R1cmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvYW5kcm9pZFBNQXJjaGl0ZWN0dXJlLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvYW5kcm9pZFBNQXJjaGl0ZWN0dXJlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvYW5kcm9pZF9hdWRpb19hcmNoaXRlY3R1cmUuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvYW5kcm9pZF9hdWRpb19hcmNoaXRlY3R1cmUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvYW5kcm9pZF9hdWRpb19hcmNoaXRlY3R1cmUuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9hbmRyb2lkX2F1ZGlvX2FyY2hpdGVjdHVyZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2NhbWVyYVByZXZpZXcuanBnIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY2FtZXJhUHJldmlldy5qcGcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9jYW1lcmFQcmV2aWV3LmpwZwpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY2FtZXJhUHJldmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2NhbWVyYVRha2VQaWN0dXJlLmpwZyBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2NhbWVyYVRha2VQaWN0dXJlLmpwZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2NhbWVyYVRha2VQaWN0dXJlLmpwZwpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY2FtZXJhVGFrZVBpY3R1cmUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9jYW1lcmFfdmlkZW8yLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2NhbWVyYV92aWRlbzIuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvY2FtZXJhX3ZpZGVvMi5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2NhbWVyYV92aWRlbzIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9jdXN0b21Mb2dvLmdpZi5wbmcgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9jdXN0b21Mb2dvLmdpZi5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9jdXN0b21Mb2dvLmdpZi5wbmcKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2N1c3RvbUxvZ28uZ2lmLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0ay5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGsuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGsuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfZGlzcGxheV90ZXh0LmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX2Rpc3BsYXlfdGV4dC5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfZGlzcGxheV90ZXh0Mi5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfZGlzcGxheV90ZXh0Mi5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfZGlzcGxheV90ZXh0Mi5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3JlZnJlc2hfaW5pdC5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfcmVmcmVzaF9pbml0LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0a19yZWZyZXNoX2luaXQuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfcmVmcmVzaF9pbml0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3JlZnJlc2hfcmVzZXQuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrX3JlZnJlc2hfcmVzZXQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3JlZnJlc2hfcmVzZXQuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfcmVmcmVzaF9yZXNldC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0a19yZWZyZXNoX3VwZGF0ZS5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfcmVmcmVzaF91cGRhdGUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3JlZnJlc2hfdXBkYXRlLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrX3JlZnJlc2hfdXBkYXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3NlbmRfU01TLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19zZW5kX1NNUy5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfc2VuZF9TTVMuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfc2VuZF9TTVMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy90ZWxlcGhvbnkuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvdGVsZXBob255LmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3RlbGVwaG9ueS5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3RlbGVwaG9ueS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3RlbGVwaG9ueV9zb2xpY3RlZF9leGFtcGxlLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3RlbGVwaG9ueV9zb2xpY3RlZF9leGFtcGxlLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3RlbGVwaG9ueV9zb2xpY3RlZF9leGFtcGxlLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvdGVsZXBob255X3NvbGljdGVkX2V4YW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy90ZWxlcGhvbnlfdW5zb2xpY3RlZF9leGFtcGxlLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3RlbGVwaG9ueV91bnNvbGljdGVkX2V4YW1wbGUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvdGVsZXBob255X3Vuc29saWN0ZWRfZXhhbXBsZS5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3RlbGVwaG9ueV91bnNvbGljdGVkX2V4YW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2luZGV4LmpkIGIvcGRrL2RvY3MvcG9ydGluZy9pbmRleC5qZApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbmRleC5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbmRleC5qZAppbmRleCBkMjJmYWU4Li43NjYwOWQyIDEwMDY0NAotLS0gYS9wZGsvZG9jcy9ndWlkZS9pbmRleC5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2luZGV4LmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1BbmRyb2lkIFBsYXRmb3JtIERldmVsb3BlcidzIEd1aWRlCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiAKQEAgLTIxLDcgKzIxLDcgQEAKIDxwPklmIHlvdSBhcmUgbmV3IHRvIEFuZHJvaWQsIHN0YXJ0IHdpdGggdGhlIHBsYXRmb3JtIGRvY3VtZW50YXRpb24gb24gdGhlIGZvbGxvd2luZyBzaXRlczoKIDx1bD4KIDxsaT48YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tIj5BbmRyb2lkIERldmVsb3BlcnMgc2l0ZTwvYT46ICBUaGlzIHNpdGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGxhdGZvcm0gZG9jdW1lbnRhdGlvbiBhbmQgYXJjaGl0ZWN0dXJlIGNvbmNlcHRzLjwvbGk+Ci08bGk+PGEgaHJlZj0iaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbSI+QW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IHNpdGU8L2E+OiAgVGhpcyBzaXRlIHByb3ZpZGVzIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZSwgZXN0YWJsaXNoIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGFuZCBwZXJmb3JtIGEgc2ltcGxlIGJ1aWxkLjwvbGk+Cis8bGk+PGEgaHJlZj0ie0Bkb2NSb290fSI+QW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IHNpdGU8L2E+OiAgVGhpcyBzaXRlIHByb3ZpZGVzIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZSwgZXN0YWJsaXNoIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGFuZCBwZXJmb3JtIGEgc2ltcGxlIGJ1aWxkLjwvbGk+CiA8L3VsPgogCiA8cD5XaGVuIHlvdSBhcmUgcmVhZHkgdG8gc3RhcnQgY3VzdG9taXppbmcgdGhlIHBsYXRmb3JtIG9yIHBvcnRpbmcgdG8geW91ciB0YXJnZXQgaGFyZHdhcmUsIHN0YXJ0IGluIHRoaXMgZ3VpZGUgd2l0aCB0aGUgPGEgaHJlZj0iYnVpbGRfc3lzdGVtLmh0bWwiPkJ1aWxkIFN5c3RlbSBvdmVydmlldzwvYT4uPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW5zdHJ1bWVudGF0aW9uX2ZyYW1ld29yay5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvaW5zdHJ1bWVudGF0aW9uX2ZyYW1ld29yay5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbnN0cnVtZW50YXRpb25fZnJhbWV3b3JrLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2luc3RydW1lbnRhdGlvbl9mcmFtZXdvcmsuamQKaW5kZXggZjJjNTFlZi4uZmNiMDA2YiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvaW5zdHJ1bWVudGF0aW9uX2ZyYW1ld29yay5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2luc3RydW1lbnRhdGlvbl9mcmFtZXdvcmsuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUluc3RydW1lbnRhdGlvbiBGcmFtZXdvcmsKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxhIG5hbWU9InRvYyIvPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2luc3RydW1lbnRhdGlvbl90ZXN0aW5nLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2luc3RydW1lbnRhdGlvbl90ZXN0aW5nLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2luc3RydW1lbnRhdGlvbl90ZXN0aW5nLmpkCmluZGV4IGU0ZDdjYzUuLmMzNzY1ZjQgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2luc3RydW1lbnRhdGlvbl90ZXN0aW5nLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUluc3RydW1lbnRhdGlvbiBUZXN0aW5nCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ludHJvX3NvdXJjZV9jb2RlLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9pbnRyb19zb3VyY2VfY29kZS5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbnRyb19zb3VyY2VfY29kZS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbnRyb19zb3VyY2VfY29kZS5qZAppbmRleCAyMWIzNGE3Li4yYmE0MTNjIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9pbnRyb19zb3VyY2VfY29kZS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2ludHJvX3NvdXJjZV9jb2RlLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1Tb3VyY2UgQ29kZSBPdmVydmlldwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGEgbmFtZT0idG9jIi8+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9rZXltYXBzX2tleWJvYXJkX2lucHV0LmpkIGIvcGRrL2RvY3MvcG9ydGluZy9rZXltYXBzX2tleWJvYXJkX2lucHV0LmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2tleW1hcHNfa2V5Ym9hcmRfaW5wdXQuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcva2V5bWFwc19rZXlib2FyZF9pbnB1dC5qZAppbmRleCA1ZGIwYTg2Li5mNzEyMDE1IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9rZXltYXBzX2tleWJvYXJkX2lucHV0LmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcva2V5bWFwc19rZXlib2FyZF9pbnB1dC5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9S2V5bWFwcyBhbmQgS2V5Ym9hcmQgSW5wdXQKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvbGlnaHRzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9saWdodHMuamQKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvbGlnaHRzLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2xpZ2h0cy5qZAppbmRleCAxYzQ0NWIyLi42YmJmYjg5IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9saWdodHMuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9saWdodHMuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUxpZ2h0cwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9tb2R1bGVzLmh0bWwgYi9wZGsvZG9jcy9wb3J0aW5nL21vZHVsZXMuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvbW9kdWxlcy5odG1sCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL21vZHVsZXMuaHRtbApkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvcG9ydGluZy9wb3J0aW5nX3RvYy5jcyBiL3Bkay9kb2NzL3BvcnRpbmcvcG9ydGluZ190b2MuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiMThlMwotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvcG9ydGluZ190b2MuY3MKQEAgLTAsMCArMSw5MiBAQAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKzwhLS0KK2Z1bmN0aW9uIG5vdGhpbmcoKSB7fQorLS0+Cis8L3NjcmlwdD4KKworPHVsPgorCis8bGk+IDxoMj5TZXR1cCBhbmQgQnVpbGRpbmc8L2gyPgorICA8dWw+CisgICAgIDxsaSBjbGFzcz0idG9nZ2xlLWxpc3QiPgorICAgICA8ZGl2PjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvYnVpbGRfc3lzdGVtLmh0bWwiPkJ1aWxkIFN5c3RlbTwvYT48L2Rpdj4KKyAgICAgPHVsPiAgCisgICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvYnVpbGRfbmV3X2RldmljZS5odG1sIj5Db25maWd1cmluZyBhIE5ldyBQcm9kdWN0PC9hPjwvbGk+CisgICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvYnVpbGRfY29va2Jvb2suaHRtbCI+QnVpbGQgQ29va2Jvb2s8L2E+PC9saT4KKyAgICAgPC91bD4KKyAgICAgPC9saT4KKyAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvcmVsZWFzZV9rZXlzLmh0bWwiPlJlbGVhc2UgS2V5cyBhbmQgU2lnbmluZyBCdWlsZHM8L2E+PC9saT4gCisgPC91bD4KKzwvbGk+CisKKzxsaT4gPGgyPkN1c3RvbWl6YXRpb248L2gyPgorICA8dWw+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvY3VzdG9taXphdGlvbi5odG1sIj5DdXN0b21pemF0aW9uPC9hPjwvbGk+CisgIDwvdWw+Cis8L2xpPgorCis8bGk+IDxoMj5TeXN0ZW08L2gyPgorCis8dWw+CisgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2JyaW5nX3VwLmh0bWwiPkJyaW5nIHVwPC9hPjwvbGk+CisgIDxsaSBjbGFzcz0idG9nZ2xlLWxpc3QiPgorICAgIDxkaXY+PGEgaHJlZj0iamF2YXNjcmlwdDpub3RoaW5nKCkiPkNvbm5lY3Rpdml0eTwvYT48L2Rpdj4KKyAgICA8dWw+IAorICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvYmx1ZXRvb3RoLmh0bWwiPkJsdWV0b290aDwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvZ3BzLmh0bWwiPkdQUzwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvd2lmaS5odG1sIj5XaS1GaTwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+CisKKyAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvZGlzcGxheV9kcml2ZXJzLmh0bWwiPkRpc3BsYXkgRHJpdmVyczwvYT48L2xpPgorICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4gCisgICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+SW5wdXQgRGV2aWNlczwvYT48L2Rpdj4KKyAgICA8dWw+CisgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9rZXltYXBzX2tleWJvYXJkX2lucHV0Lmh0bWwiPktleW1hcHMgYW5kIEtleWJvYXJkPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKyAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvbGlnaHRzLmh0bWwiPkxpZ2h0czwvYT48L2xpPgorICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4KKyAgICA8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6bm90aGluZygpIj5NdWx0aW1lZGlhPC9hPjwvZGl2PgorICAgIDx1bD4KKyAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2F1ZGlvLmh0bWwiPkF1ZGlvPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9jYW1lcmEuaHRtbCI+Q2FtZXJhL1ZpZGVvPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKyAgCisgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL3Bvd2VyX21hbmFnZW1lbnQuaHRtbCI+UG93ZXIgTWFuYWdlbWVudDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9zZW5zb3JzLmh0bWwiPlNlbnNvcnM8L2E+PC9saT4KKyAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+CisgICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+VGVsZXBob255PC9hPjwvZGl2PgorICAgIDx1bD4KKyAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL3RlbGVwaG9ueS5odG1sIj5SYWRpbyBJbnRlcmZhY2UgTGF5ZXI8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL3N0ay5odG1sIj5TSU0gVG9vbGtpdCBBcHBsaWNhdGlvbiAoU1RLKTwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvbGk+CisKKzwvdWw+Cis8L2xpPgorCis8bGk+IDxoMj5EYWx2aWsgVmlydHVhbCBNYWNoaW5lPC9oMj4KKyAgPHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2RhbHZpay5odG1sIj5Qb3J0aW5nIERhbHZpazwvYT48L2xpPgorICA8L3VsPgorPC9saT4KKzxsaT4gPGgyPlRlc3RpbmcgYW5kIERlYnVnZ2luZzwvaDI+CisgIDx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9pbnN0cnVtZW50YXRpb25fdGVzdGluZy5odG1sIj5JbnN0cnVtZW50YXRpb24gVGVzdGluZzwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2RlYnVnZ2luZ19nZGIuaHRtbCI+RGVidWdnaW5nIHdpdGggR0RCPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvZGVidWdnaW5nX25hdGl2ZS5odG1sIj5EZWJ1Z2dpbmcgTmF0aXZlIENvZGU8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy90Y3BkdW1wLmh0bWwiPkRlYnVnZ2luZyB3aXRoIHRjcGR1bXA8L2E+PC9saT4KKyAgPC91bD4KKzwvbGk+CisKKworCis8L3VsPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cis8IS0tCisgICAgYnVpbGRUb2dnbGVMaXN0cygpOworLy8tLT4KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvcG93ZXJfbWFuYWdlbWVudC5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvcG93ZXJfbWFuYWdlbWVudC5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9wb3dlcl9tYW5hZ2VtZW50LmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3Bvd2VyX21hbmFnZW1lbnQuamQKaW5kZXggZGFmZjZlZC4uMjhmOTUxOSAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvcG93ZXJfbWFuYWdlbWVudC5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL3Bvd2VyX21hbmFnZW1lbnQuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVBvd2VyIE1hbmFnZW1lbnQKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxhIG5hbWU9InRvYyIvPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIDx0aCBzY29wZT0iY29sIj5EZXNjcmlwdGlvbjwvdGg+CiAgICAgPC90cj4KICAgICA8dHI+Ci0gICAgICA8dGQ+QUNRVUlSRV9DQVVTRVNfV0FLRVVQPGJyLz48L3RkPgorICAgICAgPHRkPkFDUVVJUkVfQ0FVU0VTX1dBS0VVUCA8YnIvPjwvdGQ+CiAgICAgICAgIDx0ZD5Ob3JtYWxseSB3YWtlIGxvY2tzIGRvbid0IGFjdHVhbGx5IHdha2UgdGhlIGRldmljZSwgdGhleSBqdXN0IGNhdXNlIGl0IHRvIHJlbWFpbiBvbiBvbmNlIGl0J3MgYWxyZWFkeSBvbi4gVGhpbmsgb2YgdGhlIHZpZGVvIHBsYXllciBhcHAgYXMgdGhlIG5vcm1hbCBiZWhhdmlvci4gTm90aWZpY2F0aW9ucyB0aGF0IHBvcCB1cCBhbmQgd2FudCB0aGUgZGV2aWNlIHRvIGJlIG9uIGFyZSB0aGUgZXhjZXB0aW9uOyB1c2UgdGhpcyBmbGFnIHRvIGJlIGxpa2UgdGhlbS48L3RkPgogICAgIDwvdHI+CiAgICAgPHRyPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvcmVsZWFzZV9rZXlzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9yZWxlYXNlX2tleXMuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvcmVsZWFzZV9rZXlzLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3JlbGVhc2Vfa2V5cy5qZAppbmRleCA3ZTgzODM0Li4xMTZjZGJiIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9yZWxlYXNlX2tleXMuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9yZWxlYXNlX2tleXMuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUNyZWF0aW5nIFJlbGVhc2UgS2V5cyBhbmQgU2lnbmluZyBCdWlsZHMKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvc2Vuc29ycy5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvc2Vuc29ycy5qZApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9zZW5zb3JzLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3NlbnNvcnMuamQKaW5kZXggNjFjYTJkOS4uMWIyNDAyNiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvc2Vuc29ycy5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL3NlbnNvcnMuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVNlbnNvcnMKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvc291cmNlX3NldHVwX2d1aWRlLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9zb3VyY2Vfc2V0dXBfZ3VpZGUuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvc291cmNlX3NldHVwX2d1aWRlLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3NvdXJjZV9zZXR1cF9ndWlkZS5qZAppbmRleCA4M2M0YTAxLi43N2UxZDYwIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9zb3VyY2Vfc2V0dXBfZ3VpZGUuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9zb3VyY2Vfc2V0dXBfZ3VpZGUuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUhvc3QgU3lzdGVtIFNldHVwCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8YSBuYW1lPSJ0b2MiLz4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL3N0ay5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvc3RrLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3N0ay5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9zdGsuamQKaW5kZXggNGY2OGM0OC4uYTczZWQ5MyAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvc3RrLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvc3RrLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1TaW0gVG9vbGtpdCBBcHBsaWNhdGlvbiAoU1RLKQogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9zeXN0ZW1fcmVxdWlyZW1lbnRzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9zeXN0ZW1fcmVxdWlyZW1lbnRzLmpkCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3N5c3RlbV9yZXF1aXJlbWVudHMuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvc3lzdGVtX3JlcXVpcmVtZW50cy5qZAppbmRleCAwMDc3NDQ3Li4wYTBiMzMxIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9zeXN0ZW1fcmVxdWlyZW1lbnRzLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvc3lzdGVtX3JlcXVpcmVtZW50cy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9RGV2aWNlIFJlcXVpcmVtZW50cwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPHA+V2hpbGUgQW5kcm9pZCBpcyBkZXNpZ25lZCB0byBzdXBwb3J0IGEgd2lkZSB2YXJpZXR5IG9mIGhhcmR3YXJlIHBsYXRmb3JtcyBhbmQgY29uZmlndXJhdGlvbnMsIHRoaXMgc2VjdGlvbiBwcm92aWRlcyByZWNvbW1lbmRlZCBtaW5pbXVtIGRldmljZSByZXF1aXJlbWVudHMuPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvdGNwZHVtcC5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvdGNwZHVtcC5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS90Y3BkdW1wLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3RjcGR1bXAuamQKaW5kZXggMDFmNzdiYi4uMTYyN2JjNyAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvdGNwZHVtcC5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL3RjcGR1bXAuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPURlYnVnZ2luZyB3aXRoIHRjcGR1bXAgYW5kIG90aGVyIHRvb2xzCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiAKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL3RlbGVwaG9ueS5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvdGVsZXBob255LmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3RlbGVwaG9ueS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy90ZWxlcGhvbnkuamQKaW5kZXggMjAwNGU2My4uZGNmNTc3MyAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvdGVsZXBob255LmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvdGVsZXBob255LmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1SYWRpbyBMYXllciBJbnRlcmZhY2UKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvd2lmaS5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvd2lmaS5qZApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS93aWZpLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3dpZmkuamQKaW5kZXggMWU5ZjUyNy4uZWVhNDMxYiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvd2lmaS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL3dpZmkuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVdpLUZpCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3JlbGVhc2VzL2luZGV4LmpkIGIvcGRrL2RvY3MvcmVsZWFzZXMvaW5kZXguamQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYjcxNTQuLjAwMDAwMDAKLS0tIGEvcGRrL2RvY3MvcmVsZWFzZXMvaW5kZXguamQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWhvbWU9dHJ1ZQotZG9jLnR5cGU9cmVsZWFzZXMKLUBqZDpib2R5Ci0KLTxwPgotICBTb21lIHJlbGVhc2UgaW5mb3JtYXRpb24gaGVyZQotPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvcmVsZWFzZXMvcmVsZWFzZXNfdG9jLmNzIGIvcGRrL2RvY3MvcmVsZWFzZXMvcmVsZWFzZXNfdG9jLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTg0MmI1Li4wMDAwMDAwCi0tLSBhL3Bkay9kb2NzL3JlbGVhc2VzL3JlbGVhc2VzX3RvYy5jcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci08IS0tCi1mdW5jdGlvbiBub3RoaW5nKCkge30KLS0tPgotPC9zY3JpcHQ+Ci0KLTx1bD4KLSAgPGxpPiA8aDI+IEFuZHJvaWQgUmVsZWFzZXMgPC9oMj4KLSAgPHVsPgotICAgIDxsaT48YSBocmVmPSJ4eHgiPkFuZHJvaWQgMS4wPC9hPjwvbGk+Ci0gICAgPGxpPjxhIGhyZWY9Inh4eCI+QW5kcm9pZCAxLjE8L2E+PC9saT4KLSAgICA8bGk+PGEgaHJlZj0ieHh4Ij5BbmRyb2lkIDEuNTwvYT48L2xpPgotICA8L3VsPgotICA8L2xpPgotCi08L3VsPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci08IS0tCi0gICAgYnVpbGRUb2dnbGVMaXN0cygpOwotLy8tLT4KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2J1aWxkaW5nLWRyZWFtLmpkIGIvcGRrL2RvY3Mvc291cmNlL2J1aWxkaW5nLWRyZWFtLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MzkyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvYnVpbGRpbmctZHJlYW0uamQKQEAgLTAsMCArMSwzOCBAQAorcGFnZS50aXRsZT1CdWlsZGluZyBmb3IgYW4gQW5kcm9pZCBEZXYgUGhvbmUKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxwPjxpPlRoZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHBhZ2UgaXMgYSBiaXQgb3V0IG9mIGRhdGUuIFdlJ2xsIHVwZGF0ZSB0aGlzCitwYWdlIGFzIHNvb24gYXMgd2UgY2FuLjwvaT48L3A+Cis8ZGl2PlRoZSBiYXNpYyBtYW5pZmVzdCBmb3IgY3VwY2FrZSAoYW5kIGFib3ZlKSBkZWZpbmVzIHdoaWNoIHByb2plY3RzIGFyZQorbmVlZGVkIHRvIGRvIGEgZ2VuZXJpYyBidWlsZCBmb3IgdGhlIGVtdWxhdG9yIG9yIGZvciB1bmxvY2tlZCBEcmVhbSBkZXZpY2VzCisoZS5nLiB0aGUgQW5kcm9pZCBEZXYgUGhvbmUgMSkuIFlvdSBuZWVkIHRvIGhhdmUgYW4gYXBwcm9wcmlhdGUgZGV2aWNlIHJ1bm5pbmcKK2EgbWF0Y2hpbmcgb2ZmaWNpYWwgaW1hZ2UuPGJyPjxicj5UbyBidWlsZCBkb251dCBvciBtYXN0ZXIgZm9yIGRyZWFtICh5b3VyCitkZXZpY2UgbmVlZHMgdG8gYmUgYW4gQURQMSBydW5uaW5nIGFuIG9mZmljaWFsIDEuNiBzeXN0ZW0pOjxicj48b2w+PGxpPkZvbGxvdwordGhlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+bm9ybWFsIHN0ZXBzPC9hPgordG8gc2V0dXAgcmVwbyBhbmQgY2hlY2sgb3V0IHRoZSBzb3VyY2VzLgorPC9saT4KKzxsaT5BdCB0aGUgcm9vdCBvZiB5b3VyIHNvdXJjZSB0cmVlLCBydW4gIi4gYnVpbGQvZW52c2V0dXAuc2giIGxpa2UgeW91IG5vcm1hbGx5IHdvdWxkIGZvciBhbiBlbXVsYXRvciBidWlsZC4KKzwvbGk+Cis8bGk+UnVuICJtYWtlIGFkYiIgaWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBhZGIgaW4geW91ciBwYXRoLgorPC9saT4KKzxsaT5ydW4gImFkYiByb290Ii48YnI+PC9saT4KKzxsaT5pbiB2ZW5kb3IvaHRjL2RyZWFtLW9wZW4vIHRoZXJlIGlzIGEgc2NyaXB0IGNhbGxlZCAiZXh0cmFjdC1maWxlcy5zaCIgdGhhdCBtdXN0IGJlIHJ1biAoZnJvbSB0aGF0IGRpcmVjdG9yeSkgdG8gZXh0cmFjdCBzb21lIHByb3ByaWV0YXJ5IGJpbmFyaWVzIGZyb20geW91ciBkZXZpY2UgKCopLiBZb3Ugb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZS48YnI+PC9saT4KKzxsaT5ydW4gImx1bmNoIGFvc3BfZHJlYW1fdXMtZW5nIiB0byBzcGVjaWZpY2FsbHkgY29uZmlndXJlIHRoZSBidWlsZCBzeXN0ZW0gZm9yIGRyZWFtICh0aGUgZGVmYXVsdCBpcyB0aGUgZXF1aXZhbGVudCBvZiAibHVuY2ggZ2VuZXJpYy1lbmciLCB3aGljaCBkb2Vzbid0IGNvbnRhaW4gZHJlYW0tc3BlY2lmaWMgZmlsZXMpLjxicj48L2xpPgorPGxpPnJ1biBtYWtlIGZyb20gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuCis8L2xpPgorPGxpPmZyb20gdGhpcyBwb2ludCwgdGhlIGZhc3Rib290IHRvb2wgKHdoaWNoIGlzIHB1dCBhdXRvbWF0aWNhbGx5IGluIHlvdXIgcGF0aCkgY2FuIGJlIHVzZWQgdG8gZmxhc2ggYSBkZXZpY2U6IGJvb3QgdGhlIGRldmljZSBpbnRvIHRoZSBib290bG9hZGVyIGJ5IGhvbGRpbmcgdGhlIGJhY2sga2V5IHdoaWxlIHByZXNzaW5nIHRoZSBwb3dlciBrZXksIGFuZCBydW4gImZhc3Rib290IC13IGZsYXNoYWxsIi48YnI+PC9saT4KKzwvb2w+CitUbyBidWlsZCBjdXBjYWtlIGZvciBkcmVhbSAoeW91ciBkZXZpY2UgbmVlZHMgdG8gYmUgYW4gQURQMSBydW5uaW5nIGFuIG9mZmljaWFsIDEuNSBzeXN0ZW0pOjxicj48b2w+PGxpPkZvbGxvdyB0aGUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9kb3dubG9hZC5odG1sIj5ub3JtYWwgc3RlcHM8L2E+Cit0byBzZXR1cCByZXBvIGFuZCBjaGVjayBvdXQgdGhlIHNvdXJjZXMuCis8L2xpPgorPGxpPkF0IHRoZSByb290IG9mIHlvdXIgc291cmNlIHRyZWUsIHJ1biAiLiBidWlsZC9lbnZzZXR1cC5zaCIgbGlrZSB5b3Ugbm9ybWFsbHkgd291bGQgZm9yIGFuIGVtdWxhdG9yIGJ1aWxkLgorPC9saT4KKzxsaT5SdW4gIm1ha2UgYWRiIiBpZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFkYiBpbiB5b3VyIHBhdGguPGJyPjwvbGk+Cis8bGk+aW4gdmVuZG9yL2h0Yy9kcmVhbS1vcGVuLyB0aGVyZSBpcyBhIHNjcmlwdCBjYWxsZWQgImV4dHJhY3QtZmlsZXMuc2giIHRoYXQgbXVzdCBiZSBydW4gKGZyb20gdGhhdCBkaXJlY3RvcnkpIHRvIGV4dHJhY3Qgc29tZSBwcm9wcmlldGFyeSBiaW5hcmllcyBmcm9tIHlvdXIgZGV2aWNlICgqKS4gWW91IG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UuPGJyPjwvbGk+Cis8bGk+cnVuICJsdW5jaCBodGNfZHJlYW0tZW5nIiB0byBzcGVjaWZpY2FsbHkgY29uZmlndXJlIHRoZSBidWlsZCBzeXN0ZW0gZm9yIGRyZWFtICh0aGUgZGVmYXVsdCBpcyB0aGUgZXF1aXZhbGVudCBvZiAibHVuY2ggZ2VuZXJpYy1lbmciLCB3aGljaCBkb2Vzbid0IGNvbnRhaW4gZHJlYW0tc3BlY2lmaWMgZmlsZXMpLjxicj48L2xpPgorPGxpPnJ1biBtYWtlIGZyb20gdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUuCis8L2xpPgorPGxpPmZyb20gdGhpcyBwb2ludCwgdGhlIGZhc3Rib290IHRvb2wgKHdoaWNoIGlzIHB1dCBhdXRvbWF0aWNhbGx5IGluIHlvdXIgcGF0aCkgY2FuIGJlIHVzZWQgdG8gZmxhc2ggYSBkZXZpY2U6IGJvb3QgdGhlIGRldmljZSBpbnRvIHRoZSBib290bG9hZGVyIGJ5IGhvbGRpbmcgdGhlIGJhY2sga2V5IHdoaWxlIHByZXNzaW5nIHRoZSBwb3dlciBrZXksIGFuZCBydW4gImZhc3Rib290IC13IGZsYXNoYWxsIi48YnI+PC9saT4KKzwvb2w+CisqIFRoZSBEcmVhbSBkZXZpY2Ugc29mdHdhcmUgY29udGFpbnMgc29tZSBwcm9wcmlldGFyeSBiaW5hcmllcy5Gb3IgY29udHJhY3R1YWwgcmVhc29ucywgdGhlc2UgY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8gYmUgdXNlZCBkaXJlY3RseSB3aXRoIHRoZSBBbmRyb2lkIE9wZW4tU291cmNlIFByb2plY3QsIGJ1dCB0aGUgcHJvdmlkZWQgc2NyaXB0IG1heSBiZSB1c2VkIHRvIGV4dHJhY3QgdGhlc2UgYmluYXJpZXMgZnJvbSB5b3VyIGRldmVsb3BtZW50IGRldmljZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvcnJlY3RseSBpbmNsdWRlZCBpbiB5b3VyIGJ1aWxkLlRoZXNlIGxpYnJhcmllcyBpbmNsdWRlIHRoZSBvcGVuR0x8RVMgbGlicmFyeSwgdGhlIFF1YWxjb21tIGNhbWVyYSBsaWJyYXJ5LCB0aGUgSFRDIFJhZGlvIEludGVyZmFjZSBMaWJyYXJ5LCBldGMuCis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9jbGEtY29ycG9yYXRlLmpkIGIvcGRrL2RvY3Mvc291cmNlL2NsYS1jb3Jwb3JhdGUuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NDUyYgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9jbGEtY29ycG9yYXRlLmpkCkBAIC0wLDAgKzEsNTEgQEAKK3BhZ2UudGl0bGU9Q29ycG9yYXRlIENvbnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50Citkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8ZGl2PjxwPkluIG9yZGVyIHRvIGNsYXJpZnkgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsaWNlbnNlIGdyYW50ZWQgd2l0aCBDb250cmlidXRpb25zIGZyb20gYW55IHBlcnNvbiBvciBlbnRpdHksIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHRoZSAiUHJvamVjdCIpIG11c3QgaGF2ZSBhIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQgKCJHcmFudCIpIG9uIGZpbGUgdGhhdCBoYXMgYmVlbiBzaWduZWQgYnkgZWFjaCBDb250cmlidXRvciwgaW5kaWNhdGluZyBhZ3JlZW1lbnQgdG8gdGhlIGxpY2Vuc2UgdGVybXMgYmVsb3cuIFRoaXMgbGljZW5zZSBpcyBmb3IgeW91ciBwcm90ZWN0aW9uIGFzIGEgQ29udHJpYnV0b3IgYXMgd2VsbCBhcyB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgUHJvamVjdCBhbmQgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBMZWFkcyAodGhlICJQcm9qZWN0IExlYWRzIik7IGl0IGRvZXMgbm90IGNoYW5nZSB5b3VyIHJpZ2h0cyB0byB1c2UgeW91ciBvd24gQ29udHJpYnV0aW9ucyBmb3IgYW55IG90aGVyIHB1cnBvc2UuCis8L3A+Cis8cD5UaGlzIHZlcnNpb24gb2YgdGhlIEdyYW50IGFsbG93cyBhbiBlbnRpdHkgKHRoZSAiQ29ycG9yYXRpb24iKSB0byBzdWJtaXQgQ29udHJpYnV0aW9ucyB0byB0aGUgUHJvamVjdCBMZWFkcywgdG8gYXV0aG9yaXplIENvbnRyaWJ1dGlvbnMgc3VibWl0dGVkIGJ5IGl0cyBkZXNpZ25hdGVkIGVtcGxveWVlcyB0byB0aGUgUHJvamVjdCBMZWFkcywgYW5kIHRvIGdyYW50IGNvcHlyaWdodCBhbmQgcGF0ZW50IGxpY2Vuc2VzIHRoZXJldG8uIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IGRvbmUgc28sIHBsZWFzZSBjb21wbGV0ZSBhbmQgc2VuZCBhbiBvcmlnaW5hbCBzaWduZWQgR3JhbnQgdG8KKzwvcD4KKzxibG9ja3F1b3RlPkdvb2dsZSBJbmMuPGJyPkF0dG46IE9wZW4gU291cmNlIFByb2dyYW0gT2ZmaWNlIDxicj4xNjAwIEFtcGhpdGhlYXRyZSBQa3d5IDxicj5CdWlsZGluZyA0Mzxicj5Nb3VudGFpbiBWaWV3LCBDQSA5NDA0Mzxicj5VLlMuQS48YnI+PC9ibG9ja3F1b3RlPgorPHA+U2Nhbm5lZCBhZ3JlZW1lbnRzIG1heSBhbHNvIGJlIGVtYWlsZWQgaW4gUERGIGZvcm0gdG8gY2xhLXN1Ym1pc3Npb25zQGdvb2dsZS5jb20KKzwvcD4KKzxwPklmIG5lY2Vzc2FyeSwgeW91IG1heSBzZW5kIGl0IGJ5IGZhY3NpbWlsZSB0byAoNjUwKSA4ODctMTYyNS4gUGxlYXNlIHJlYWQgdGhpcyBkb2N1bWVudCBjYXJlZnVsbHkgYmVmb3JlIHNpZ25pbmcgYW5kIGtlZXAgYSBjb3B5IGZvciB5b3VyIHJlY29yZHMuCis8L3A+Cis8cHJlPkNvcnBvcmF0aW9uIG5hbWU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj48YnI+PGJyPjxicj5Db3Jwb3JhdGlvbiBhZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj48YnI+PGJyPjxicj5Qb2ludCBvZiBDb250YWN0OiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+RS1NYWlsOiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPlRlbGVwaG9uZTogX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPkZheDogX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48L3ByZT4KKzxwPllvdSBhY2NlcHQgYW5kIGFncmVlIHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIFlvdXIgcHJlc2VudCBhbmQgZnV0dXJlIENvbnRyaWJ1dGlvbnMgc3VibWl0dGVkIHRvIHRoZSBQcm9qZWN0LiBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluIHRvIHRoZSBQcm9qZWN0IExlYWRzIGFuZCByZWNpcGllbnRzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBQcm9qZWN0IExlYWRzLCBZb3UgcmVzZXJ2ZSBhbGwgcmlnaHQsIHRpdGxlLCBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIFlvdXIgQ29udHJpYnV0aW9ucy4KKzwvcD4KKzxvbD48bGk+PHA+RGVmaW5pdGlvbnMuCis8L3A+Cis8cD4iWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgbGVnYWwgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIG1ha2luZyB0aGlzIEdyYW50IHRvIHRoZSBQcm9qZWN0IExlYWRzLiBGb3IgbGVnYWwgZW50aXRpZXMsIHRoZSBlbnRpdHkgbWFraW5nIGEgQ29udHJpYnV0aW9uIGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgYSBzaW5nbGUgQ29udHJpYnV0b3IuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCis8L3A+Cis8cD4iQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIHRoZSBjb2RlLCBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgZXhwcmVzc2x5IGlkZW50aWZpZWQgaW4gU2NoZWR1bGUgQiwgYXMgd2VsbCBhcyBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIGFuIGV4aXN0aW5nIHdvcmssIHRoYXQgaXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgYnkgWW91IHRvIHRoZSBQcm9qZWN0IExlYWRzIGZvciBpbmNsdXNpb24gaW4sIG9yIGRvY3VtZW50YXRpb24gb2YsIGFueSBvZiB0aGUgcHJvZHVjdHMgbWFuYWdlZCBvciBtYWludGFpbmVkIGJ5IHRoZSBQcm9qZWN0IExlYWRzICh0aGUgIldvcmsiKS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIFByb2plY3QgTGVhZHMgb3IgdGhlaXIgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlIFByb2plY3QgTGVhZHMgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSBZb3UgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCis8L3A+Cis8L2xpPgorPGxpPjxwPkdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEdyYW50LCBZb3UgaGVyZWJ5IGdyYW50IHRvIHRoZSBQcm9qZWN0IExlYWRzIGFuZCB0byByZWNpcGllbnRzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBQcm9qZWN0IExlYWRzIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgWW91ciBDb250cmlidXRpb25zIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MuCis8L3A+Cis8L2xpPgorPGxpPjxwPkdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEdyYW50LCBZb3UgaGVyZWJ5IGdyYW50IHRvIHRoZSBQcm9qZWN0IExlYWRzIGFuZCB0byByZWNpcGllbnRzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBQcm9qZWN0IExlYWRzIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IFlvdSB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgWW91ciBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgWW91ciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBhbnkgZW50aXR5IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBZb3Ugb3IgYW55IG90aGVyIGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB5b3VyIENvbnRyaWJ1dGlvbiwgb3IgdGhlIFdvcmsgdG8gd2hpY2ggeW91IGhhdmUgY29udHJpYnV0ZWQsIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gdGhhdCBlbnRpdHkgdW5kZXIgdGhpcyBHcmFudCBmb3IgdGhhdCBDb250cmlidXRpb24gb3IgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorPC9wPgorPC9saT4KKzxsaT48cD5Zb3UgcmVwcmVzZW50IHRoYXQgWW91IGFyZSBsZWdhbGx5IGVudGl0bGVkIHRvIGdyYW50IHRoZSBhYm92ZSBsaWNlbnNlLiBZb3UgcmVwcmVzZW50IGZ1cnRoZXIgdGhhdCBlYWNoIGVtcGxveWVlIG9mIHRoZSBDb3Jwb3JhdGlvbiBkZXNpZ25hdGVkIG9uIFNjaGVkdWxlIEEgYmVsb3cgKG9yIGluIGEgc3Vic2VxdWVudCB3cml0dGVuIG1vZGlmaWNhdGlvbiB0byB0aGF0IFNjaGVkdWxlKSBpcyBhdXRob3JpemVkIHRvIHN1Ym1pdCBDb250cmlidXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgQ29ycG9yYXRpb24uCis8L3A+Cis8L2xpPgorPGxpPjxwPllvdSByZXByZXNlbnQgdGhhdCBlYWNoIG9mIFlvdXIgQ29udHJpYnV0aW9ucyBpcyBZb3VyIG9yaWdpbmFsIGNyZWF0aW9uIChzZWUgc2VjdGlvbiA3IGZvciBzdWJtaXNzaW9ucyBvbiBiZWhhbGYgb2Ygb3RoZXJzKS4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+WW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBZb3VyIENvbnRyaWJ1dGlvbnMsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IFlvdSBkZXNpcmUgdG8gcHJvdmlkZSBzdXBwb3J0LiBZb3UgbWF5IHByb3ZpZGUgc3VwcG9ydCBmb3IgZnJlZSwgZm9yIGEgZmVlLCBvciBub3QgYXQgYWxsLiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFlvdSBwcm92aWRlIFlvdXIgQ29udHJpYnV0aW9ucyBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCis8L3A+Cis8L2xpPgorPGxpPjxwPlNob3VsZCBZb3Ugd2lzaCB0byBzdWJtaXQgd29yayB0aGF0IGlzIG5vdCBZb3VyIG9yaWdpbmFsIGNyZWF0aW9uLCBZb3UgbWF5IHN1Ym1pdCBpdCB0byB0aGUgUHJvamVjdCBMZWFkcyBzZXBhcmF0ZWx5IGZyb20gYW55IENvbnRyaWJ1dGlvbiwgaWRlbnRpZnlpbmcgdGhlIGNvbXBsZXRlIGRldGFpbHMgb2YgaXRzIHNvdXJjZSBhbmQgb2YgYW55IGxpY2Vuc2Ugb3Igb3RoZXIgcmVzdHJpY3Rpb24gKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCByZWxhdGVkIHBhdGVudHMsIHRyYWRlbWFya3MsIGFuZCBsaWNlbnNlIGFncmVlbWVudHMpIG9mIHdoaWNoIHlvdSBhcmUgcGVyc29uYWxseSBhd2FyZSwgYW5kIGNvbnNwaWN1b3VzbHkgbWFya2luZyB0aGUgd29yayBhcyAiU3VibWl0dGVkIG9uIGJlaGFsZiBvZiBhIHRoaXJkLXBhcnR5OiBbbmFtZWQgaGVyZV0iLjxicj48L3A+Cis8L2xpPgorPGxpPjxwPkl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gbm90aWZ5IHRoZSBQcm9qZWN0IExlYWRzIHdoZW4gYW55IGNoYW5nZSBpcyByZXF1aXJlZCB0byB0aGUgbGlzdCBvZiBkZXNpZ25hdGVkIGVtcGxveWVlcyBhdXRob3JpemVkIHRvIHN1Ym1pdCBDb250cmlidXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgQ29ycG9yYXRpb24sIG9yIHRvIHRoZSBDb3Jwb3JhdGlvbidzIFBvaW50IG9mIENvbnRhY3Qgd2l0aCB0aGUgUHJvamVjdC4KKzwvcD4KKzwvbGk+Cis8L29sPgorPHByZT48YnI+PGJyPjxicj5QbGVhc2Ugc2lnbjogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIERhdGU6IF9fX19fX19fX19fX19fXzxicj48YnI+PGJyPjxicj5UaXRsZTogIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj48YnI+PGJyPjxicj5Db3Jwb3JhdGlvbjogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj48YnI+PC9wcmU+Cis8aDM+CitTY2hlZHVsZSBBPC9oMz4KK1tJbml0aWFsIGxpc3Qgb2YgZGVzaWduYXRlZCBlbXBsb3llZXMuIE5COiBhdXRob3JpemF0aW9uIGlzIG5vdCB0aWVkIHRvIHBhcnRpY3VsYXIgQ29udHJpYnV0aW9ucy5dCis8aDM+CitTY2hlZHVsZSBCPC9oMz4KK1tJZGVudGlmaWNhdGlvbiBvZiBvcHRpb25hbCBjb25jdXJyZW50IHNvZnR3YXJlIGdyYW50LiBXb3VsZCBiZSBsZWZ0IGJsYW5rIG9yIG9taXR0ZWQgaWYgdGhlcmUgaXMgbm8gY29uY3VycmVudCBzb2Z0d2FyZSBncmFudC5dCis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9jbGEtaW5kaXZpZHVhbC5qZCBiL3Bkay9kb2NzL3NvdXJjZS9jbGEtaW5kaXZpZHVhbC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODkwYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2NsYS1pbmRpdmlkdWFsLmpkCkBAIC0wLDAgKzEsNDQgQEAKK3BhZ2UudGl0bGU9Q29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnQgZm9yIEluZGl2aWR1YWxzCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8ZGl2PjxwPjxpPlBsZWFzZSB2aXNpdCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyNzZXR0aW5ncyxuZXctYWdyZWVtZW50Ij5jb2RlIHJldmlldyB0b29sPC9hPgordG8gZXhlY3V0ZSB0aGUgZ3JhbnQgb25saW5lLlRoaXMgcGFnZSBwcm92aWRlcyB0aGUgdGV4dCBvZiB0aGUgSW5kaXZpZHVhbCBDb250cmlidXRvciBMaWNlbnNlIEdyYW50IGZvciB5b3VyIHF1aWNrIHJldmlldy48L2k+Cis8YnI+PC9wPgorPHA+PGJyPjwvcD4KKzxwPkluIG9yZGVyIHRvIGNsYXJpZnkgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsaWNlbnNlIGdyYW50ZWQgd2l0aCBDb250cmlidXRpb25zIGZyb20gYW55IHBlcnNvbiBvciBlbnRpdHksIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHRoZSAiUHJvamVjdCIpIG11c3QgaGF2ZSBhIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQgKCJHcmFudCIpIG9uIGZpbGUgdGhhdCBoYXMgYmVlbiBzaWduZWQgYnkgZWFjaCBDb250cmlidXRvciwgaW5kaWNhdGluZyBhZ3JlZW1lbnQgdG8gdGhlIGxpY2Vuc2UgdGVybXMgYmVsb3cuIFRoaXMgbGljZW5zZSBpcyBmb3IgeW91ciBwcm90ZWN0aW9uIGFzIGEgQ29udHJpYnV0b3IgYXMgd2VsbCBhcyB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgUHJvamVjdCBhbmQgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBMZWFkcyAodGhlICJQcm9qZWN0IExlYWRzIik7IGl0IGRvZXMgbm90IGNoYW5nZSB5b3VyIHJpZ2h0cyB0byB1c2UgeW91ciBvd24gQ29udHJpYnV0aW9ucyBmb3IgYW55IG90aGVyIHB1cnBvc2UuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IGRvbmUgc28sIHBsZWFzZSBjb21wbGV0ZSBhbmQgc2VuZCBhbiBvcmlnaW5hbCBzaWduZWQgR3JhbnQgdG8KKzwvcD4KKzxibG9ja3F1b3RlPkdvb2dsZSBJbmMuPGJyPkF0dG46IE9wZW4gU291cmNlIFByb2dyYW0gT2ZmaWNlIDxicj4xNjAwIEFtcGhpdGhlYXRyZSBQa3d5IDxicj5CdWlsZGluZyA0Mzxicj5Nb3VudGFpbiBWaWV3LCBDQSA5NDA0Mzxicj5VLlMuQS48YnI+PC9ibG9ja3F1b3RlPgorPHA+U2Nhbm5lZCBhZ3JlZW1lbnRzIG1heSBhbHNvIGJlIGVtYWlsZWQgaW4gUERGIGZvcm0gdG8gY2xhLXN1Ym1pc3Npb25zQGdvb2dsZS5jb20sIHNlbnQgYnkgZmFjc2ltaWxlIHRvICg2NTApIDg4Ny0xNjI1LCBvciA8YSBocmVmPSJodHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vI3NldHRpbmdzLG5ldy1hZ3JlZW1lbnQiPnNpZ25lZCBlbGVjdHJvbmljYWxseTwvYT4KKy4KKzwvcD4KKzxwPlBsZWFzZSByZWFkIHRoaXMgZG9jdW1lbnQgY2FyZWZ1bGx5IGJlZm9yZSBzaWduaW5nIGFuZCBrZWVwIGEgY29weSBmb3IgeW91ciByZWNvcmRzLgorPC9wPgorPHByZT48YnI+PGJyPkZ1bGwgbmFtZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgRS1NYWlsOiBfX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPk1haWxpbmcgQWRkcmVzczogX19fX19fX19fX19fX19fX19fX19fXyAgVGVsZXBob25lOiBfX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgRmFjc2ltaWxlOiBfX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgQ291bnRyeTogICBfX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PC9wcmU+Cis8cD5Zb3UgYWNjZXB0IGFuZCBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBZb3VyIHByZXNlbnQgYW5kIGZ1dHVyZSBDb250cmlidXRpb25zIHN1Ym1pdHRlZCB0byB0aGUgUHJvamVjdC4gRXhjZXB0IGZvciB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiB0byB0aGUgUHJvamVjdCBMZWFkcyBhbmQgcmVjaXBpZW50cyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSB0aGUgUHJvamVjdCBMZWFkcywgWW91IHJlc2VydmUgYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IGluIGFuZCB0byBZb3VyIENvbnRyaWJ1dGlvbnMuCis8L3A+Cis8cD48YnI+PC9wPgorPG9sPjxsaT48cD5EZWZpbml0aW9ucy4gIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGxlZ2FsIGVudGl0eSBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBtYWtpbmcgdGhpcyBHcmFudC4gRm9yIGxlZ2FsIGVudGl0aWVzLCB0aGUgZW50aXR5IG1ha2luZyBhIENvbnRyaWJ1dGlvbiBhbmQgYWxsIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgZW50aXR5IGFyZSBjb25zaWRlcmVkIHRvIGJlIGEgc2luZ2xlIENvbnRyaWJ1dG9yLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gYW4gZXhpc3Rpbmcgd29yaywgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBieSBZb3UgdG8gdGhlIFByb2plY3QgTGVhZHMgZm9yIGluY2x1c2lvbiBpbiwgb3IgZG9jdW1lbnRhdGlvbiBvZiwgYW55IG9mIHRoZSBwcm9kdWN0cyBtYW5hZ2VkIG9yIG1haW50YWluZWQgYnkgdGhlIFByb2plY3QgTGVhZHMgKHRoZSAiV29yayIpLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudCB0byB0aGUgUHJvamVjdCBMZWFkcyBvciB0aGVpciByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgUHJvamVjdCBMZWFkcyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IFlvdSBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKzwvcD4KKzwvbGk+Cis8bGk+PHA+R3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgR3JhbnQsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gdGhlIFByb2plY3QgTGVhZHMgYW5kIHRvIHJlY2lwaWVudHMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIFByb2plY3QgTGVhZHMgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBZb3VyIENvbnRyaWJ1dGlvbnMgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3Jrcy4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+R3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgR3JhbnQsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gdGhlIFByb2plY3QgTGVhZHMgYW5kIHRvIHJlY2lwaWVudHMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIFByb2plY3QgTGVhZHMgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgWW91IHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSBZb3VyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiBZb3VyIENvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIGFueSBlbnRpdHkgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IFlvdSBvciBhbnkgb3RoZXIgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHlvdXIgQ29udHJpYnV0aW9uLCBvciB0aGUgV29yayB0byB3aGljaCB5b3UgaGF2ZSBjb250cmlidXRlZCwgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB0byB0aGF0IGVudGl0eSB1bmRlciB0aGlzIEdyYW50IGZvciB0aGF0IENvbnRyaWJ1dGlvbiBvciBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCis8L3A+Cis8L2xpPgorPGxpPjxwPllvdSByZXByZXNlbnQgdGhhdCB5b3UgYXJlIGxlZ2FsbHkgZW50aXRsZWQgdG8gZ3JhbnQgdGhlIGFib3ZlIGxpY2Vuc2UuIElmIHlvdXIgZW1wbG95ZXIocykgaGFzIHJpZ2h0cyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgdGhhdCB5b3UgY3JlYXRlIHRoYXQgaW5jbHVkZXMgeW91ciBDb250cmlidXRpb25zLCB5b3UgcmVwcmVzZW50IHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgcGVybWlzc2lvbiB0byBtYWtlIENvbnRyaWJ1dGlvbnMgb24gYmVoYWxmIG9mIHRoYXQgZW1wbG95ZXIsIHRoYXQgeW91ciBlbXBsb3llciBoYXMgd2FpdmVkIHN1Y2ggcmlnaHRzIGZvciB5b3VyIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2plY3QgTGVhZHMsIG9yIHRoYXQgeW91ciBlbXBsb3llciBoYXMgZXhlY3V0ZWQgYSBzZXBhcmF0ZSBDb3Jwb3JhdGUgQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudCB3aXRoIHRoZSBQcm9qZWN0IExlYWRzLgorPC9wPgorPC9saT4KKzxsaT48cD5Zb3UgcmVwcmVzZW50IHRoYXQgZWFjaCBvZiBZb3VyIENvbnRyaWJ1dGlvbnMgaXMgWW91ciBvcmlnaW5hbCBjcmVhdGlvbiAoc2VlIHNlY3Rpb24gNyBmb3Igc3VibWlzc2lvbnMgb24gYmVoYWxmIG9mIG90aGVycykuIFlvdSByZXByZXNlbnQgdGhhdCBZb3VyIENvbnRyaWJ1dGlvbiBzdWJtaXNzaW9ucyBpbmNsdWRlIGNvbXBsZXRlIGRldGFpbHMgb2YgYW55IHRoaXJkLXBhcnR5IGxpY2Vuc2Ugb3Igb3RoZXIgcmVzdHJpY3Rpb24gKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCByZWxhdGVkIHBhdGVudHMgYW5kIHRyYWRlbWFya3MpIG9mIHdoaWNoIHlvdSBhcmUgcGVyc29uYWxseSBhd2FyZSBhbmQgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFydCBvZiBZb3VyIENvbnRyaWJ1dGlvbnMuCis8L3A+Cis8L2xpPgorPGxpPjxwPllvdSBhcmUgbm90IGV4cGVjdGVkIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgWW91ciBDb250cmlidXRpb25zLCBleGNlcHQgdG8gdGhlIGV4dGVudCBZb3UgZGVzaXJlIHRvIHByb3ZpZGUgc3VwcG9ydC4gWW91IG1heSBwcm92aWRlIHN1cHBvcnQgZm9yIGZyZWUsIGZvciBhIGZlZSwgb3Igbm90IGF0IGFsbC4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBZb3UgcHJvdmlkZSBZb3VyIENvbnRyaWJ1dGlvbnMgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIFRJVExFLCBOT04tIElORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+U2hvdWxkIFlvdSB3aXNoIHRvIHN1Ym1pdCB3b3JrIHRoYXQgaXMgbm90IFlvdXIgb3JpZ2luYWwgY3JlYXRpb24sIFlvdSBtYXkgc3VibWl0IGl0IHRvIHRoZSBQcm9qZWN0IExlYWRzIHNlcGFyYXRlbHkgZnJvbSBhbnkgQ29udHJpYnV0aW9uLCBpZGVudGlmeWluZyB0aGUgY29tcGxldGUgZGV0YWlscyBvZiBpdHMgc291cmNlIGFuZCBvZiBhbnkgbGljZW5zZSBvciBvdGhlciByZXN0cmljdGlvbiAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHJlbGF0ZWQgcGF0ZW50cywgdHJhZGVtYXJrcywgYW5kIGxpY2Vuc2UgYWdyZWVtZW50cykgb2Ygd2hpY2ggeW91IGFyZSBwZXJzb25hbGx5IGF3YXJlLCBhbmQgY29uc3BpY3VvdXNseSBtYXJraW5nIHRoZSB3b3JrIGFzICJTdWJtaXR0ZWQgb24gYmVoYWxmIG9mIGEgdGhpcmQtcGFydHk6IFtuYW1lZCBoZXJlXSIuPGJyPjwvcD4KKzwvbGk+Cis8bGk+PHA+WW91IGFncmVlIHRvIG5vdGlmeSB0aGUgUHJvamVjdCBMZWFkcyBvZiBhbnkgZmFjdHMgb3IgY2lyY3Vtc3RhbmNlcyBvZiB3aGljaCB5b3UgYmVjb21lIGF3YXJlIHRoYXQgd291bGQgbWFrZSB0aGVzZSByZXByZXNlbnRhdGlvbnMgaW5hY2N1cmF0ZSBpbiBhbnkgcmVzcGVjdC4KKzwvcD4KKzwvbGk+Cis8L29sPgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvY29kZS1saW5lcy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9jb2RlLWxpbmVzLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjQwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvY29kZS1saW5lcy5qZApAQCAtMCwwICsxLDc3IEBACitwYWdlLnRpdGxlPUFuZHJvaWQgQ29kZS1MaW5lcworZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPHA+VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBtYWludGFpbnMgYSBjb21wbGV0ZSBzb2Z0d2FyZSBzdGFjayBpbnRlbmRlZAordG8gYmUgcG9ydGVkIGJ5IE9FTXMgYW5kIG90aGVyIGRldmljZSBpbXBsZW1lbnRvcnMgdG8gcnVuIG9uIGFjdHVhbCBoYXJkd2FyZS4KK0FjY29yZGluZ2x5LCB3ZSBtYWludGFpbiBhIG51bWJlciBvZiAiY29kZSBsaW5lcyIgdG8gY2xlYXJseSBzZXBhcmF0ZSB0aGUKK2N1cnJlbnQgc3RhYmxlIHZlcnNpb24gb2YgQW5kcm9pZCBmcm9tIHVuc3RhYmxlIGV4cGVyaW1lbnRhbCB3b3JrLjwvcD4KKzxwPlRoZSBjaGFydCBiZWxvdyBkZXBpY3RzIGF0IGEgY29uY2VwdHVhbCBsZXZlbCBob3cgQU9TUCBtYW5hZ2VzIGNvZGUgYW5kCityZWxlYXNlcy4gV2UncmUgcmVmZXJyaW5nIHRvIHRoZXNlIGFzICJjb2RlIGxpbmVzIiBpbnN0ZWFkIG9mICJicmFuY2hlcyIKK3NpbXBseSBiZWNhdXNlIGF0IGFueSBnaXZlbiBtb21lbnQgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgYnJhbmNoIGV4dGFudAorZm9yIGEgZ2l2ZW4gImNvZGUgbGluZSIuICBGb3IgaW5zdGFuY2UsIHdoZW4gYSByZWxlYXNlIGlzIGN1dCwgc29tZXRpbWVzIHRoYXQKK3dpbGwgYmVjb21lIGEgbmV3IGJyYW5jaCBpbiBnaXQsIGFuZCBzb21ldGltZXMgbm90LCBiYXNlZCBvbiB0aGUgbmVlZHMgb2YgdGhlCittb21lbnQuPC9wPgorPGltZyBzcmM9IntAZG9jUm9vdH1pbWFnZXMvY29kZS1saW5lcy5wbmciLz4KKzxoMz5Ob3RlcyBhbmQgRXhwbGFuYXRpb25zPC9oMz4KKzx1bD4KKzxsaT5BIDxpPnJlbGVhc2U8L2k+IGNvcnJlc3BvbmRzIHRvIGEgZm9ybWFsIHZlcnNpb24gb2YgdGhlIEFuZHJvaWQgcGxhdGZvcm0sIHN1Y2gKK2FzIDEuNSwgMi4wLCBhbmQgc28gb24uIEdlbmVyYWxseSBzcGVha2luZywgYSByZWxlYXNlIG9mIHRoZSBwbGF0Zm9ybQorY29ycmVzcG9uZHMgdG8gYSB2ZXJzaW9uIG9mIHRoZSA8Y29kZT5TZGtWZXJzaW9uPC9jb2RlPiBmaWVsZCB1c2VkIGluCitBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGVzLCBhbmQgZGVmaW5lZCBpbiA8Y29kZT5mcmFtZXdvcmtzL2Jhc2UvYXBpPC9jb2RlPiBpbgordGhlIHNvdXJjZSB0cmVlLjwvbGk+Cis8bGk+QW4gPGk+dXBzdHJlYW08L2k+IHByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgcHJvamVjdCBmcm9tIHdoaWNoIHRoZSBBbmRyb2lkCitzdGFjayBpcyBwdWxsaW5nIGNvZGUuIFRoZXNlIGluY2x1ZGUgb2J2aW91cyBwcm9qZWN0cyBzdWNoIGFzIHRoZSBMaW51eCBrZXJuZWwKK2FuZCBXZWJLaXQsIGJ1dCBvdmVyIHRpbWUgd2UgYXJlIG1pZ3JhdGluZyBzb21lIG9mIHRoZSBzZW1pLWF1dG9ub21vdXMKK0FuZHJvaWQgcHJvamVjdHMgKHN1Y2ggYXMgRGFsdmlrLCB0aGUgQW5kcm9pZCBTREsgdG9vbHMsIEJpb25pYywgYW5kIHNvIG9uKSB0bword29yayBhcyAidXBzdHJlYW0iIHByb2plY3RzLiBUaGVzZSB3aWxsIGJlIGRldmVsb3BlZCBlbnRpcmVseSBpbiB0aGUgcHVibGljCit0cmVlLCBhbmQgc25hcHNob3RzIHdpbGwgYmUgcGVyaW9kaWNhbGx5IHB1bGxlZCBpbnRvIHJlbGVhc2VzLjwvbGk+Cis8bGk+VGhlIGRpYWdyYW0gcmVmZXJzIHRvICJFY2xhaXIiIGFuZCAiRmxhbiI7IGhvd2V2ZXIsIHRoZXkgYXJlIHNpbXBseQorcGxhY2Vob2xkZXJzLCBhbmQgdGhlIGRpYWdyYW0gYWN0dWFsbHkgcmVmbGVjdHMgdGhlIG92ZXJhbGwgcmVsZWFzZSBhbmQKK2JyYW5jaGluZyBzdHJhdGVneS48L2xpPgorPGxpPkF0IGFsbCB0aW1lcywgdGhlIFJlbGVhc2UgY29kZS1saW5lICh3aGljaCBtYXkgYWN0dWFsbHkgY29uc2lzdCBvZgorbW9yZSB0aGFuIG9uZSBhY3R1YWwgYnJhbmNoIGluIGdpdCkgaXMgY29uc2lkZXJlZCB0aGUgc29sZSBjYW5vbmljYWwgc291cmNlCitjb2RlIGZvciBhIGdpdmVuIEFuZHJvaWQgcGxhdGZvcm0uIE9FTXMgYW5kIG90aGVyIGdyb3VwcyBidWlsZGluZyBkZXZpY2VzCitzaG91bGQgcHVsbCBvbmx5IGZyb20gYSBSZWxlYXNlIGJyYW5jaC48L2xpPgorPGxpPldlIHdpbGwgYmUgc2V0dGluZyB1cCBhbiAiRXhwZXJpbWVudGFsIiBjb2RlLWxpbmUgdG8gY2FwdHVyZSBjaGFuZ2VzIGZyb20KK3RoZSBjb21tdW5pdHksIHNvIHRoYXQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb24sIHdpdGggYW4gZXllIHRvd2FyZCBzdGFiaWxpdHkuPC9saT4KKzxsaT5DaGFuZ2VzIHRoYXQgcHJvdmUgc3RhYmxlIHdpbGwgZXZlbnR1YWxseSBiZSBwdWxsZWQgaW50byBhIFJlbGVhc2UKK2JyYW5jaC4gTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IGFwcGx5IHRvIGJ1ZyBmaXhlcywgYXBwIGltcHJvdmVtZW50cywgYW5kCitvdGhlciB0aGluZ3MgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBBUElzIG9mIHRoZSBwbGF0Zm9ybS48L2xpPgorPGxpPkNoYW5nZXMgd2lsbCBiZSBwdWxsZWQgaW50byBSZWxlYXNlIGJyYW5jaGVzIGZyb20gdXBzdHJlYW0gcHJvamVjdHMKKyhpbmNsdWRlIHRoZSBBbmRyb2lkICJ1cHN0cmVhbSIgcHJvamVjdHMpIGFzIG5lY2Vzc2FyeS48L2xpPgorPGxpPlRoZSAibisxInRoIHZlcnNpb24gKHRoYXQgaXMsIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB0aGUgZnJhbWV3b3JrIGFuZAorcGxhdGZvcm0gQVBJcykgd2lsbCBiZSBkZXZlbG9wZWQgYnkgR29vZ2xlIGludGVybmFsbHkuIChTZWUgYmVsb3cgZm9yCitkZXRhaWxzLik8L2xpPgorPGxpPkNoYW5nZXMgd2lsbCBiZSBwdWxsZWQgZnJvbSB1cHN0cmVhbSwgUmVsZWFzZSwgYW5kIEV4cGVyaW1lbnRhbCBicmFuY2hlcworaW50byBHb29nbGUncyBwcml2YXRlIGJyYW5jaCBhcyBuZWNlc3NhcnkuPC9saT4KKzxsaT5XaGVuIHRoZSBwbGF0Zm9ybSBBUElzIGZvciB0aGUgbmV4dCB2ZXJzaW9uIGhhdmUgc3RhYmlsaXplZCBhbmQgYmVlbiBmdWxseQordGVzdGVkLCBHb29nbGUgd2lsbCBjdXQgYSByZWxlYXNlIG9mIHRoZSBuZXh0IHBsYXRmb3JtIHZlcnNpb24uIChUaGlzCitzcGVjaWZpY2FsbHkgcmVmZXJzIHRvIGEgbmV3IDxjb2RlPlNka1ZlcnNpb248L2NvZGU+LikgVGhpcyB3aWxsIGFsc28KK2NvcnJlc3BvbmQgdG8gdGhlIGludGVybmFsIGNvZGUtbGluZSBiZWluZyBtYWRlIGEgcHVibGljIFJlbGVhc2UgYnJhbmNoLCBhbmQgdGhlCituZXcgY3VycmVudCBwbGF0Zm9ybSBjb2RlLWxpbmUuPC9saT4KKzxsaT5XaGVuIGEgbmV3IHBsYXRmb3JtIHZlcnNpb24gaXMgY3V0LCBhIGNvcnJlc3BvbmRpbmcgRXhwZXJpbWVudGFsCitjb2RlLWxpbmUuPC9saT4KKzwvdWw+Cis8aDM+QWJvdXQgUHJpdmF0ZSBDb2RlLUxpbmVzPC9oMz4KKzxwPlRoZSBzb3VyY2UgbWFuYWdlbWVudCBzdHJhdGVneSBhYm92ZSBpbmNsdWRlcyBhIGNvZGUtbGluZSB0aGF0IEdvb2dsZSB3aWxsCitrZWVwIHByaXZhdGUuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdG8gZm9jdXMgYXR0ZW50aW9uIG9uIHRoZSBjdXJyZW50IHB1YmxpYwordmVyc2lvbiBvZiBBbmRyb2lkLjwvcD4KKzxwPk9FTXMgYW5kIG90aGVyIGRldmljZSBidWlsZGVycyBuYXR1cmFsbHkgd2FudCB0byBzaGlwIGRldmljZXMgd2l0aCB0aGUKK2xhdGVzdCB2ZXJzaW9uIG9mIEFuZHJvaWQuIFNpbWlsYXJseSwgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBkb24ndCB3YW50IHRvCitkZWFsIHdpdGggbW9yZSBleHRhbnQgcGxhdGZvcm0gdmVyc2lvbnMgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnkuICBNZWFud2hpbGUsCitHb29nbGUgcmV0YWlucyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHN0cmF0ZWdpYyBkaXJlY3Rpb24gb2YgQW5kcm9pZCBhcyBhCitwbGF0Zm9ybSBhbmQgYSBwcm9kdWN0LiBPdXIgYXBwcm9hY2ggaXMgYmFzZWQgb24gZm9jdXNpbmcgb24gYSBzbWFsbCBudW1iZXIgb2YKK2ZsYWdzaGlwIGRldmljZXMgdG8gZHJpdmUgZmVhdHVyZXMsIGFuZCBzZWN1cmUgcHJvdGVjdGlvbnMgb2YgQW5kcm9pZC1yZWxhdGVkCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgdGhyb3VnaCBwYXRlbnRzIGFuZCB0aGUgbGlrZS48L3A+Cis8cD5BcyBhIHJlc3VsdCwgR29vZ2xlIGZyZXF1ZW50bHkgaGFzIHBvc3Nlc3Npb24gb2YgY29uZmlkZW50aWFsCitpbmZvcm1hdGlvbiBvZiB0aGlyZCBwYXJ0aWVzLCBhbmQgd2UgbXVzdCByZWZyYWluIGZyb20gcmV2ZWFsaW5nIHBhdGVudGFibGUKK2ZlYXR1cmVzIHVudGlsIHdlJ3ZlIHNlY3VyZWQgdGhlIGFwcHJvcHJpYXRlIHByb3RlY3Rpb25zLiBNZWFud2hpbGUsIHRoZXJlIGFyZQorcmVhbCByaXNrcyB0byB0aGUgcGxhdGZvcm0gYXJpc2luZyBmcm9tIGhhdmluZyB0b28gbWFueSBwbGF0Zm9ybSB2ZXJzaW9ucworZXh0YW50IGF0IG9uY2UuIEZvciB0aGVzZSByZWFzb25zLCB3ZSBoYXZlIHN0cnVjdHVyZWQgdGhlIG9wZW4tc291cmNlIHByb2plY3QKKy0tIGluY2x1ZGluZyB0aGlyZC1wYXJ0eSBjb250cmlidXRpb25zIC0tIHRvIGZvY3VzIG9uIHRoZSBjdXJyZW50bHktcHVibGljCitzdGFibGUgdmVyc2lvbiBvZiBBbmRyb2lkLiAiRGVlcCBkZXZlbG9wbWVudCIgb24gdGhlIG5leHQgdmVyc2lvbiBvZiB0aGUKK3BsYXRmb3JtIHdpbGwgaGFwcGVuIGluIHByaXZhdGUsIHVudGlsIGl0J3MgcmVhZHkgdG8gYmVjb21lIGFuIG9mZmljaWFsCityZWxlYXNlLjwvcD4KKzxwPldlIHJlY29nbml6ZSB0aGF0IG1hbnkgY29udHJpYnV0b3JzIHdpbGwgZGlzYWdyZWUgd2l0aCB0aGlzIGFwcHJvYWNoLiBXZQorcmVzcGVjdCB0aGF0IG90aGVycyBtYXkgaGF2ZSBhIGRpZmZlcmVudCBwb2ludCBvZiB2aWV3OyBob3dldmVyLCB0aGlzIGlzIHRoZQorYXBwcm9hY2ggdGhhdCB3ZSBmZWVsIGlzIGJlc3QsIGFuZCB0aGUgb25lIHdlJ3ZlIGNob3NlbiB0byBpbXBsZW1lbnQuPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2NvZGUtc3R5bGUuamQgYi9wZGsvZG9jcy9zb3VyY2UvY29kZS1zdHlsZS5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU5NDZlCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2NvZGUtc3R5bGUuamQKQEAgLTAsMCArMSw0MzUgQEAKK3BhZ2UudGl0bGU9Q29kZSBTdHlsZSBHdWlkZWxpbmVzIGZvciBDb250cmlidXRvcnMKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+Cis8cD5UaGUgcnVsZXMgYmVsb3cgYXJlIG5vdCBndWlkZWxpbmVzIG9yIHJlY29tbWVuZGF0aW9ucywgYnV0IHN0cmljdCBydWxlcy4KK0NvbnRyaWJ1dGlvbnMgdG8gQW5kcm9pZCBnZW5lcmFsbHkgPGI+d2lsbCBub3QgYmUgYWNjZXB0ZWQgaWYgdGhleSBkbyBub3QKK2FkaGVyZSB0byB0aGVzZSBydWxlcy48L2I+Cis8L3A+Cis8cD5Ob3QgYWxsIGV4aXN0aW5nIGNvZGUgZm9sbG93cyB0aGVzZSBydWxlcywgYnV0IGFsbCBuZXcgY29kZSBpcyBleHBlY3RlZCB0by48L3A+Cis8aDE+PGE+SmF2YSBMYW5ndWFnZSBSdWxlczwvYT4KKzwvaDE+Cis8cD5XZSBmb2xsb3cgc3RhbmRhcmQgSmF2YSBjb2RpbmcgY29udmVudGlvbnMuIFdlIGFkZCBhIGZldyBydWxlczoKKzwvcD4KKzxvbD48bGk+PGEgaHJlZj0iI2V4Y2VwdGlvbnNJZ25vcmUiPkV4Y2VwdGlvbnM8L2E+Cis6IE5ldmVyIGNhdGNoIGFuZCBpZ25vcmUgdGhlbSB3aXRob3V0IGV4cGxhbmF0aW9uLgorPC9saT4KKzxsaT48YSBocmVmPSIjZXhjZXB0aW9uc0FsbCI+RXhjZXB0aW9uczwvYT4KKzogZG8gbm90IGNhdGNoIGdlbmVyaWMgRXhjZXB0aW9uLCBleGNlcHQgaW4gbGlicmFyeSBjb2RlIGF0IHRoZSByb290IG9mIHRoZSBzdGFjay4KKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpbmFsaXplcnMiPkZpbmFsaXplcnM8L2E+Cis6IGdlbmVyYWxseSBkb24ndCB1c2UgdGhlbS4KKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ltcG9ydHMiPkltcG9ydHM8L2E+Cis6IEZ1bGx5IHF1YWxpZnkgaW1wb3J0cworPC9saT4KKzwvb2w+Cis8aDE+PGE+SmF2YSBMaWJyYXJ5IFJ1bGVzPC9hPgorPC9oMT4KKzxwPlRoZXJlIGFyZSBjb252ZW50aW9ucyBmb3IgdXNpbmcgQW5kcm9pZCdzIEphdmEgbGlicmFyaWVzIGFuZCB0b29scy4gSW4gc29tZSBjYXNlcywgdGhlIGNvbnZlbnRpb24gaGFzIGNoYW5nZWQgaW4gaW1wb3J0YW50IHdheXMgYW5kIG9sZGVyIGNvZGUgbWlnaHQgdXNlIGEgZGVwcmVjYXRlZCBwYXR0ZXJuIG9yIGxpYnJhcnkuIFdoZW4gd29ya2luZyB3aXRoIHN1Y2ggY29kZSwgaXQncyBva2F5IHRvIGNvbnRpbnVlIHRoZSBleGlzdGluZyBzdHlsZSAoc2VlIDxhIGhyZWY9IiNjb25zaXN0ZW5jeSI+Q29uc2lzdGVuY3k8L2E+CispLiBXaGVuIGNyZWF0aW5nIG5ldyBjb21wb25lbnRzIG5ldmVyIHVzZSBkZXByZWNhdGVkIGxpYnJhcmllcy4KKzwvcD4KKzxoMT48YT5KYXZhIFN0eWxlIFJ1bGVzPC9hPgorPC9oMT4KKzxwPlByb2dyYW1zIGFyZSBtdWNoIGVhc2llciB0byBtYWludGFpbiB3aGVuIGFsbCBmaWxlcyBoYXZlIGEgY29uc2lzdGVudCBzdHlsZS4gV2UgZm9sbG93IHRoZSBzdGFuZGFyZCBKYXZhIGNvZGluZyBzdHlsZSwgYXMgZGVmaW5lZCBieSBTdW4gaW4gdGhlaXIgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2NvZGVjb252L2h0bWwvQ29kZUNvbnZUT0MuZG9jLmh0bWwiPkNvZGUgQ29udmVudGlvbnMgZm9yIHRoZSBKYXZhIFByb2dyYW1taW5nIExhbmd1YWdlPC9hPgorLCB3aXRoIGEgZmV3IGV4Y2VwdGlvbnMgYW5kIGFkZGl0aW9ucy4gVGhpcyBzdHlsZSBndWlkZSBpcyBjb21wcmVoZW5zaXZlIGFuZCBkZXRhaWxlZCBhbmQgaXMgaW4gY29tbW9uIHVzYWdlIGluIHRoZSBKYXZhIGNvbW11bml0eS4KKzwvcD4KKzxwPkluIGFkZGl0aW9uLCB3ZSBlbmZvcmNlIHRoZSBmb2xsb3dpbmcgc3R5bGUgcnVsZXM6Cis8L3A+Cis8b2w+PGxpPjxhIGhyZWY9IiNqYXZhZG9jIj5Db21tZW50cy9KYXZhZG9jPC9hPgorOiB3cml0ZSBpdDsgdXNlIHN0YW5kYXJkIHN0eWxlCis8L2xpPgorPGxpPjxhIGhyZWY9IiNzaG9ydG1ldGhvZHMiPlNob3J0IG1ldGhvZHM8L2E+Cis6IGRvbid0IHdyaXRlIGdpYW50IG1ldGhvZHMKKzwvbGk+Cis8bGk+RmllbGRzOiBzaG91bGQgZWl0aGVyIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIG9yIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgbWV0aG9kcyB0aGF0IHVzZSB0aGVtCis8L2xpPgorPGxpPjxhIGhyZWY9IiNsb2NhbHZhcmlhYmxlcyI+TG9jYWwgdmFyaWFibGVzPC9hPgorOiBsaW1pdCB0aGUgc2NvcGUKKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ltcG9ydF9zdHlsZSI+SW1wb3J0czwvYT4KKzogYW5kcm9pZDsgdGhpcmQgcGFydHkgYWxwaGFiZXRpY2FsOyBqYXZhKHgpCis8L2xpPgorPGxpPjxhIGhyZWY9IiNpbmRlbnRhdGlvbiI+SW5kZW50YXRpb248L2E+Cis6IDQgc3BhY2VzLCBubyB0YWJzLgorPC9saT4KKzxsaT48YSBocmVmPSIjbGluZWxlbiI+TGluZSBsZW5ndGg8L2E+Cis6IDEwMCBjb2x1bW5zCis8L2xpPgorPGxpPjxhIGhyZWY9IiNmaWVsZF9uYW1lcyI+RmllbGQgbmFtZXM8L2E+Cis6IE5vbi1wdWJsaWMsIG5vbi1zdGF0aWMgZmllbGRzIHN0YXJ0IHdpdGggbS4gU3RhdGljIGZpZWxkcyBzdGFydCBzLgorPC9saT4KKzxsaT48YSBocmVmPSIjYnJhY2VzIj5CcmFjZXM8L2E+Cis6IE9wZW5pbmcgYnJhY2VzIGRvbid0IGdvIG9uIHRoZWlyIG93biBsaW5lLgorPC9saT4KKzxsaT48YSBocmVmPSIjYW5ub3RhdGlvbnMiPkFubm90YXRpb25zPC9hPgorOiBVc2UgdGhlIHN0YW5kYXJkIGFubm90YXRpb25zLgorPC9saT4KKzxsaT48YSBocmVmPSIjYWNyb255bXMiPkFjcm9ueW1zIGFyZSB3b3JkczwvYT4KKzogVHJlYXQgYWNyb255bXMgYXMgd29yZHMgaW4gbmFtZXMsIHlpZWxkaW5nIFhtbEh0dHBSZXF1ZXN0LCBnZXRVcmwoKSwgZXRjLgorPC9saT4KKzxsaT48YSBocmVmPSIjdG9kbyI+VE9ETyBzdHlsZTwvYT4KKzogIlRPRE86IHdyaXRlIHRoaXMgZGVzY3JpcHRpb24iCis8L2xpPgorPGxpPjxhIGhyZWY9IiNjb25zaXN0ZW5jeSI+Q29uc2lzdGVuY3k8L2E+Cis6IExvb2sgYXQgd2hhdCdzIGFyb3VuZCB5b3UhCis8L2xpPgorPGxpPjxhIGhyZWY9IiNsb2dnaW5nIj5Mb2dnaW5nPC9hPgorOiBCZSBjYXJlZnVsIHdpdGggbG9nZ2luZy4gSXQncyBleHBlbnNpdmUuCis8L2xpPgorPC9vbD4KKzxoMT48YT5KYXZhdGVzdHMgU3R5bGUgUnVsZXM8L2E+Cis8L2gxPgorPG9sPjxsaT48YSBocmVmPSIjdGVzdG1ldGhvZG5hbWVzIj5OYW1pbmcgdGVzdCBtZXRob2RzPC9hPgorOiB0ZXN0TWV0aG9kX3NwZWNpZmljQ2FzZSBpcyBvaworPC9saT4KKzwvb2w+Cis8aHI+PGgyPgorSmF2YSBMYW5ndWFnZSBSdWxlcworPC9oMj4KKzxoMj48YT5FeGNlcHRpb25zOiBkbyBub3QgaWdub3JlPC9hPgorPC9oMj4KK1NvbWV0aW1lcyBpdCBpcyB0ZW1wdGluZyB0byB3cml0ZSBjb2RlIHRoYXQgY29tcGxldGVseSBpZ25vcmVzIGFuIGV4Y2VwdGlvbiBsaWtlIHRoaXM6Cis8cHJlPnZvaWQgc2V0U2VydmVyUG9ydChTdHJpbmcgdmFsdWUpIHs8YnI+dHJ5IHs8YnI+c2VydmVyUG9ydCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOzxicj59IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgezxicj59PGJyPn08YnI+PGJyPjwvcHJlPgorPHA+WW91IG11c3QgbmV2ZXIgZG8gdGhpcy4gV2hpbGUgeW91IG1heSB0aGluayB0aGF0IHlvdXIgY29kZSB3aWxsIG5ldmVyIGVuY291bnRlciB0aGlzIGVycm9yIGNvbmRpdGlvbiBvciB0aGF0IGl0IGlzIG5vdCBpbXBvcnRhbnQgdG8gaGFuZGxlIGl0LCBpZ25vcmluZyBleGNlcHRpb25zIGxpa2UgYWJvdmUgY3JlYXRlcyBtaW5lcyBpbiB5b3VyIGNvZGUgZm9yIHNvbWVvbmUgZWxzZSB0byB0cmlwIG92ZXIgc29tZSBkYXkuIFlvdSBtdXN0IGhhbmRsZSBldmVyeSBFeGNlcHRpb24gaW4geW91ciBjb2RlIGluIHNvbWUgcHJpbmNpcGxlZCB3YXkuIFRoZSBzcGVjaWZpYyBoYW5kbGluZyB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBjYXNlLgorPC9wPgorPGJsb2NrcXVvdGU+QW55dGltZSBzb21lYm9keSBoYXMgYW4gZW1wdHkgY2F0Y2ggY2xhdXNlIHRoZXkgc2hvdWxkIGhhdmUgYSBjcmVlcHkgZmVlbGluZy4gVGhlcmUgYXJlIGRlZmluaXRlbHkgdGltZXMgd2hlbiBpdCBpcyBhY3R1YWxseSB0aGUgY29ycmVjdCB0aGluZyB0byBkbywgYnV0IGF0IGxlYXN0IHlvdSBoYXZlIHRvIHRoaW5rIGFib3V0IGl0LiBJbiBKYXZhIHlvdSBjYW4ndCBlc2NhcGUgdGhlIGNyZWVweSBmZWVsaW5nLjxicj48ZGl2Pi08YSBocmVmPSJodHRwOi8vd3d3LmFydGltYS5jb20vaW50di9zb2xpZDQuaHRtbCI+SmFtZXMgR29zbGluZzwvYT4KKzwvZGl2PgorPC9ibG9ja3F1b3RlPgorPHA+QWNjZXB0YWJsZSBhbHRlcm5hdGl2ZXMgKGluIG9yZGVyIG9mIHByZWZlcmVuY2UpIGFyZToKKzwvcD4KKzx1bD48bGk+VGhyb3cgdGhlIGV4Y2VwdGlvbiB1cCB0byB0aGUgY2FsbGVyIG9mIHlvdXIgbWV0aG9kLgorPHByZT52b2lkIHNldFNlcnZlclBvcnQoU3RyaW5nIHZhbHVlKSB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIHs8YnI+c2VydmVyUG9ydCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOzxicj59PGJyPjxicj48L3ByZT4KKzwvbGk+Cis8bGk+VGhyb3cgYSBuZXcgZXhjZXB0aW9uIHRoYXQncyBhcHByb3ByaWF0ZSB0byB5b3VyIGxldmVsIG9mIGFic3RyYWN0aW9uLgorPHByZT52b2lkIHNldFNlcnZlclBvcnQoU3RyaW5nIHZhbHVlKSB0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7PGJyPnRyeSB7PGJyPnNlcnZlclBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTs8YnI+fSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHs8YnI+dGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oIlBvcnQgIiArIHZhbHVlICsgIiBpcyBub3QgdmFsaWQuIik7PGJyPn08YnI+PGJyPjwvcHJlPgorPC9saT4KKzxsaT5IYW5kbGUgdGhlIGVycm9yIGdyYWNlZnVsbHkgYW5kIHN1YnN0aXR1dGUgYW4gYXBwcm9wcmlhdGUgdmFsdWUgaW4gdGhlIGNhdGNoIHt9IGJsb2NrLgorPHByZT4vKiogU2V0IHBvcnQuIElmIHZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgODAgaXMgc3Vic3RpdHV0ZWQuICovPGJyPnZvaWQgc2V0U2VydmVyUG9ydChTdHJpbmcgdmFsdWUpIHs8YnI+dHJ5IHs8YnI+c2VydmVyUG9ydCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOzxicj59IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgezxicj5zZXJ2ZXJQb3J0ID0gODA7ICAvLyBkZWZhdWx0IHBvcnQgZm9yIHNlcnZlciA8YnI+fTxicj48L3ByZT4KKzwvbGk+Cis8bGk+Q2F0Y2ggdGhlIEV4Y2VwdGlvbiBhbmQgdGhyb3cgYSBuZXcgUnVudGltZUV4Y2VwdGlvbi4gVGhpcyBpcyBkYW5nZXJvdXM6IG9ubHkgZG8gaXQgaWYgeW91IGFyZSBwb3NpdGl2ZSB0aGF0IGlmIHRoaXMgZXJyb3Igb2NjdXJzLCB0aGUgYXBwcm9wcmlhdGUgdGhpbmcgdG8gZG8gaXMgY3Jhc2guCis8cHJlPi8qKiBTZXQgcG9ydC4gSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLCBkaWUuICovPGJyPnZvaWQgc2V0U2VydmVyUG9ydChTdHJpbmcgdmFsdWUpIHs8YnI+dHJ5IHs8YnI+c2VydmVyUG9ydCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOzxicj59IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgezxicj50aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigicG9ydCAiICsgdmFsdWUgIiBpcyBpbnZhbGlkLCAiLCBlKTs8YnI+fTxicj48L3ByZT4KK05vdGUgdGhhdCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGlzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IgZm9yIFJ1bnRpbWVFeGNlcHRpb24uIFRoaXMgd3JhcHBlZCBleGNlcHRpb24gcGFyYWRpZ20gaXMgdmVyeSB1c2VmdWwgYnV0IG9ubHkgd29ya3MgaW4gSmF2YSAxLjQuIElmIHlvdXIgY29kZSBtdXN0IGNvbXBpbGUgdW5kZXIgSmF2YSAxLjMsIHlvdSB3aWxsIG5lZWQgdG8gb21pdCB0aGUgZXhjZXB0aW9uIHRoYXQgaXMgdGhlIGNhdXNlLjxicj48YnI+PC9saT4KKzxsaT5MYXN0IHJlc29ydDogaWYgeW91IGFyZSBjb25maWRlbnQgdGhhdCBhY3R1YWxseSBpZ25vcmluZyB0aGUgZXhjZXB0aW9uIGlzIGFwcHJvcHJpYXRlIHRoZW4geW91IG1heSBpZ25vcmUgaXQsIGJ1dCB5b3UgbXVzdCBhbHNvIGNvbW1lbnQgd2h5IHdpdGggYSBnb29kIHJlYXNvbjoKKzxwcmU+LyoqIElmIHZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlciwgb3JpZ2luYWwgcG9ydCBudW1iZXIgaXMgdXNlZC4gKi88YnI+dm9pZCBzZXRTZXJ2ZXJQb3J0KFN0cmluZyB2YWx1ZSkgezxicj50cnkgezxicj5zZXJ2ZXJQb3J0ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7PGJyPn0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7PGJyPi8vIE1ldGhvZCBpcyBkb2N1bWVudGVkIHRvIGp1c3QgaWdub3JlIGludmFsaWQgdXNlciBpbnB1dC48YnI+Ly8gc2VydmVyUG9ydCB3aWxsIGp1c3QgYmUgdW5jaGFuZ2VkLjxicj59PGJyPn08YnI+PC9wcmU+Cis8L2xpPgorPC91bD4KKzxoMj48YT5FeGNlcHRpb25zOiBkbyBub3QgY2F0Y2ggZ2VuZXJpYyBFeGNlcHRpb248L2E+Cis8L2gyPgorU29tZXRpbWVzIGl0IGlzIHRlbXB0aW5nIHRvIGJlIGxhenkgd2hlbiBjYXRjaGluZyBleGNlcHRpb25zIGFuZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorPHByZT50cnkgezxicj5zb21lQ29tcGxpY2F0ZWRJT0Z1bmN0aW9uKCk7ICAgICAgICAvLyBtYXkgdGhyb3cgSU9FeGNlcHRpb24gPGJyPnNvbWVDb21wbGljYXRlZFBhcnNpbmdGdW5jdGlvbigpOyAgIC8vIG1heSB0aHJvdyBQYXJzaW5nRXhjZXB0aW9uIDxicj5zb21lQ29tcGxpY2F0ZWRTZWN1cml0eUZ1bmN0aW9uKCk7ICAvLyBtYXkgdGhyb3cgU2VjdXJpdHlFeGNlcHRpb24gPGJyPi8vIHBoZXcsIG1hZGUgaXQgYWxsIHRoZSB3YXkgPGJyPn0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICAgICAgICAgICAgICAgLy8gSSdsbCBqdXN0IGNhdGNoIGFsbCBleGNlcHRpb25zIDxicj5oYW5kbGVFcnJvcigpOyAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIG9uZSBnZW5lcmljIGhhbmRsZXIhPGJyPn08YnI+PGJyPjwvcHJlPgorWW91IHNob3VsZCBub3QgZG8gdGhpcy4gSW4gYWxtb3N0IGFsbCBjYXNlcyBpdCBpcyBpbmFwcHJvcHJpYXRlIHRvIGNhdGNoIGdlbmVyaWMgRXhjZXB0aW9uIG9yIFRocm93YWJsZSwgcHJlZmVyYWJseSBub3QgVGhyb3dhYmxlLCBiZWNhdXNlIGl0IGluY2x1ZGVzIEVycm9yIGV4Y2VwdGlvbnMgYXMgd2VsbC4gSXQgaXMgdmVyeSBkYW5nZXJvdXMuIEl0IG1lYW5zIHRoYXQgRXhjZXB0aW9ucyB5b3UgbmV2ZXIgZXhwZWN0ZWQgKGluY2x1ZGluZyBSdW50aW1lRXhjZXB0aW9ucyBsaWtlIENsYXNzQ2FzdEV4Y2VwdGlvbikgZW5kIHVwIGdldHRpbmcgY2F1Z2h0IGluIGFwcGxpY2F0aW9uLWxldmVsIGVycm9yIGhhbmRsaW5nLiBJdCBvYnNjdXJlcyB0aGUgZmFpbHVyZSBoYW5kbGluZyBwcm9wZXJ0aWVzIG9mIHlvdXIgY29kZS4gSXQgbWVhbnMgaWYgc29tZW9uZSBhZGRzIGEgbmV3IHR5cGUgb2YgRXhjZXB0aW9uIGluIHRoZSBjb2RlIHlvdSdyZSBjYWxsaW5nLCB0aGUgY29tcGlsZXIgd29uJ3QgaGVscCB5b3UgcmVhbGl6ZSB5b3UgbmVlZCB0byBoYW5kbGUgdGhhdCBlcnJvciBkaWZmZXJlbnRseS4gQW5kIGluIG1vc3QgY2FzZXMgeW91IHNob3VsZG4ndCBiZSBoYW5kbGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgZXhjZXB0aW9uIHRoZSBzYW1lIHdheSwgYW55d2F5LgorPHA+VGhlcmUgYXJlIHJhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IGNlcnRhaW4gdGVzdCBjb2RlIGFuZCB0b3AtbGV2ZWwgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBjYXRjaCBhbGwga2luZHMgb2YgZXJyb3JzICh0byBwcmV2ZW50IHRoZW0gZnJvbSBzaG93aW5nIHVwIGluIGEgVUksIG9yIHRvIGtlZXAgYSBiYXRjaCBqb2IgcnVubmluZykuIEluIHRoYXQgY2FzZSB5b3UgbWF5IGNhdGNoIGdlbmVyaWMgRXhjZXB0aW9uIChvciBUaHJvd2FibGUpIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkuIFlvdSBzaG91bGQgdGhpbmsgdmVyeSBjYXJlZnVsbHkgYmVmb3JlIGRvaW5nIHRoaXMsIHRob3VnaCwgYW5kIHB1dCBpbiBjb21tZW50cyBleHBsYWluaW5nIHdoeSBpdCBpcyBzYWZlIGluIHRoaXMgcGxhY2UuCis8L3A+Cis8cD5BbHRlcm5hdGl2ZXMgdG8gY2F0Y2hpbmcgZ2VuZXJpYyBFeGNlcHRpb246Cis8L3A+Cis8dWw+PGxpPkNhdGNoIGVhY2ggZXhjZXB0aW9uIHNlcGFyYXRlbHkgYXMgc2VwYXJhdGUgY2F0Y2ggYmxvY2tzIGFmdGVyIGEgc2luZ2xlIHRyeS4gVGhpcyBjYW4gYmUgYXdrd2FyZCBidXQgaXMgc3RpbGwgcHJlZmVyYWJsZSB0byBjYXRjaGluZyBhbGwgRXhjZXB0aW9ucy4gQmV3YXJlIHJlcGVhdGluZyB0b28gbXVjaCBjb2RlIGluIHRoZSBjYXRjaCBibG9ja3MuCis8L2xpPgorPGxpPlJlZmFjdG9yIHlvdXIgY29kZSB0byBoYXZlIG1vcmUgZmluZS1ncmFpbmVkIGVycm9yIGhhbmRsaW5nLCB3aXRoIG11bHRpcGxlIHRyeSBibG9ja3MuIFNwbGl0IHVwIHRoZSBJTyBmcm9tIHRoZSBwYXJzaW5nLCBoYW5kbGUgZXJyb3JzIHNlcGFyYXRlbHkgaW4gZWFjaCBjYXNlLgorPC9saT4KKzxsaT5SZXRocm93IHRoZSBleGNlcHRpb24uIE1hbnkgdGltZXMgeW91IGRvbid0IG5lZWQgdG8gY2F0Y2ggdGhlIGV4Y2VwdGlvbiBhdCB0aGlzIGxldmVsIGFueXdheSwganVzdCBsZXQgdGhlIG1ldGhvZCB0aHJvdyBpdC4KKzwvbGk+Cis8L3VsPgorUmVtZW1iZXI6IGV4Y2VwdGlvbnMgYXJlIHlvdXIgZnJpZW5kISBXaGVuIHRoZSBjb21waWxlciBjb21wbGFpbnMgeW91J3JlIG5vdCBjYXRjaGluZyBhbiBleGNlcHRpb24sIGRvbid0IHNjb3dsLiBTbWlsZTogdGhlIGNvbXBpbGVyIGp1c3QgbWFkZSBpdCBlYXNpZXIgZm9yIHlvdSB0byBjYXRjaCBydW50aW1lIHByb2JsZW1zIGluIHlvdXIgY29kZS4KKzxoMj48YT5GaW5hbGl6ZXJzPC9hPgorPC9oMj4KKzxwPjxiPldoYXQgaXQgaXM8L2I+Cis6IEZpbmFsaXplcnMgYXJlIGEgd2F5IHRvIGhhdmUgYSBjaHVuayBvZiBjb2RlIGV4ZWN1dGVkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorPC9wPgorPHA+PGI+UHJvczwvYj4KKzogY2FuIGJlIGhhbmR5IGZvciBkb2luZyBjbGVhbnVwLCBwYXJ0aWN1bGFybHkgb2YgZXh0ZXJuYWwgcmVzb3VyY2VzLgorPC9wPgorPHA+PGI+Q29uczwvYj4KKzogdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgYXMgdG8gd2hlbiBhIGZpbmFsaXplciB3aWxsIGJlIGNhbGxlZCwgb3IgZXZlbiB0aGF0IGl0IHdpbGwgYmUgY2FsbGVkIGF0IGFsbC4KKzwvcD4KKzxwPjxiPkRlY2lzaW9uPC9iPgorOiB3ZSBkb24ndCB1c2UgZmluYWxpemVycy4gSW4gbW9zdCBjYXNlcywgeW91IGNhbiBkbyB3aGF0IHlvdSBuZWVkIGZyb20gYSBmaW5hbGl6ZXIgd2l0aCBnb29kIGV4Y2VwdGlvbiBoYW5kbGluZy4gSWYgeW91IGFic29sdXRlbHkgbmVlZCBpdCwgZGVmaW5lIGEgY2xvc2UoKSBtZXRob2QgKG9yIHRoZSBsaWtlKSBhbmQgZG9jdW1lbnQgZXhhY3RseSB3aGVuIHRoYXQgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZC4gU2VlIElucHV0U3RyZWFtIGZvciBhbiBleGFtcGxlLiBJbiB0aGlzIGNhc2UgaXQgaXMgYXBwcm9wcmlhdGUgYnV0IG5vdCByZXF1aXJlZCB0byBwcmludCBhIHNob3J0IGxvZyBtZXNzYWdlIGZyb20gdGhlIGZpbmFsaXplciwgYXMgbG9uZyBhcyBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gZmxvb2QgdGhlIGxvZ3MuCis8L3A+Cis8cD5UaGUgb25lIGV4Y2VwdGlvbiBpcyBpdCBpcyBPSyB0byB3cml0ZSBhIGZpbmFsaXplciBpZiBhbGwgaXQgZG9lcyBpcyBtYWtlIGNhbGxzIHRvIFguYXNzZXJ0VHJ1ZSgpLgorPC9wPgorPGgyPjxhPkltcG9ydHM8L2E+Cis8L2gyPgorPGgzPgorV2lsZGNhcmRzIGluIGltcG9ydHMKKzwvaDM+Cis8cD48Yj5XaGF0IGl0IGlzPC9iPgorOiBXaGVuIHlvdSB3YW50IHRvIHVzZSBjbGFzcyBCYXIgZnJvbSBwYWNrYWdlIGZvbyx0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHdheXMgdG8gaW1wb3J0IGl0OgorPC9wPgorPG9sPjxsaT5pbXBvcnQgZm9vLio7Cis8L2xpPgorPGxpPmltcG9ydCBmb28uQmFyOworPC9saT4KKzwvb2w+Cis8cD48Yj5Qcm9zIG9mICMxPC9iPgorOiBQb3RlbnRpYWxseSByZWR1Y2VzIHRoZSBudW1iZXIgb2YgaW1wb3J0IHN0YXRlbWVudHMuCis8L3A+Cis8cD48Yj5Qcm9zIG9mICMyPC9iPgorOiBNYWtlcyBpdCBvYnZpb3VzIHdoYXQgY2xhc3NlcyBhcmUgYWN0dWFsbHkgdXNlZC4gTWFrZXMgY29kZSBtb3JlIHJlYWRhYmxlIGZvciBtYWludGFpbmVycy4KKzwvcD4KKzxwPjxiPkRlY2lzaW9uPC9iPgorOlVzZSBzdHlsZSAjMiBmb3IgaW1wb3J0aW5nIGFsbCBBbmRyb2lkIGNvZGUuIEFuIGV4cGxpY2l0IGV4Y2VwdGlvbiBpcyBtYWRlIGZvciBqYXZhIHN0YW5kYXJkIGxpYnJhcmllcyAoamF2YS51dGlsLiosIGphdmEuaW8uKiwgZXRjLikgYW5kIHVuaXQgdGVzdCBjb2RlIChqdW5pdC5mcmFtZXdvcmsuKikuCis8L3A+Cis8aDI+PGE+Q29tbWVudHMvSmF2YWRvYzwvYT4KKzwvaDI+Cis8cD5FdmVyeSBmaWxlIHNob3VsZCBoYXZlIGEgY29weXJpZ2h0IHN0YXRlbWVudCBhdCB0aGUgdG9wLiBUaGVuIGEgcGFja2FnZSBzdGF0ZW1lbnQgYW5kIGltcG9ydCBzdGF0ZW1lbnRzIHNob3VsZCBmb2xsb3csIGVhY2ggYmxvY2sgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZS4gQW5kIHRoZW4gdGhlcmUgaXMgdGhlIGNsYXNzIG9yIGludGVyZmFjZSBkZWNsYXJhdGlvbi4gSW4gdGhlIEphdmFkb2MgY29tbWVudHMsIGRlc2NyaWJlIHdoYXQgdGhlIGNsYXNzIG9yIGludGVyZmFjZSBkb2VzLgorPC9wPgorPHByZT4vKjxicj4qIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IDxicj4qPGJyPiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7PGJyPiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLjxicj4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCA8YnI+Kjxicj4qICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPGJyPio8YnI+KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIDxicj4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsPGJyPiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuPGJyPiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCA8YnI+KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS48YnI+Ki88YnI+PGJyPnBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuZm9vOzxicj48YnI+aW1wb3J0IGFuZHJvaWQub3MuQmxhaDs8YnI+aW1wb3J0IGFuZHJvaWQudmlldy5ZYWRhOzxicj48YnI+aW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDs8YnI+aW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjs8YnI+PGJyPi8qKjxicj4qIERvZXMgWCBhbmQgWSBhbmQgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gZm9yIFouPGJyPiovPGJyPnB1YmxpYyBjbGFzcyBGb28gezxicj4uLi48YnI+fTxicj48L3ByZT4KKzxwPkV2ZXJ5IGNsYXNzIGFuZCBub250cml2aWFsIHB1YmxpYyBtZXRob2QgeW91IHdyaXRlIDxiPm11c3Q8L2I+Citjb250YWluIGEgSmF2YWRvYyBjb21tZW50IHdpdGggYXQgbGVhc3Qgb25lIHNlbnRlbmNlIGRlc2NyaWJpbmcgd2hhdCB0aGUgY2xhc3Mgb3IgbWV0aG9kIGRvZXMuIFRoaXMgc2VudGVuY2Ugc2hvdWxkIHN0YXJ0IHdpdGggYSAzcmQgcGVyc29uIGRlc2NyaXB0aXZlIHZlcmIuIEV4YW1wbGVzOgorPC9wPgorPHByZT4vKiogUmV0dXJucyB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcG9zaXRpdmUgc3F1YXJlIHJvb3Qgb2YgYSBkb3VibGUgdmFsdWUuICovPGJyPnN0YXRpYyBkb3VibGUgc3FydChkb3VibGUgYSkgezxicj59PGJyPjxicj4vKio8YnI+KiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBieSBjb252ZXJ0aW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgPGJyPiogYnl0ZXMgdXNpbmcgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjaGFyYWN0ZXIgZW5jb2RpbmcuPGJyPiovPGJyPnB1YmxpYyBTdHJpbmcoYnl0ZVtdIGJ5dGVzKSB7PGJyPn08YnI+PC9wcmU+Cis8cD5Zb3UgZG8gbm90IG5lZWQgdG8gd3JpdGUgSmF2YWRvYyBmb3IgdHJpdmlhbCBnZXQgYW5kIHNldCBtZXRob2RzIHN1Y2ggYXMgc2V0Rm9vKCkgaWYgYWxsIHlvdXIgSmF2YWRvYyB3b3VsZCBzYXkgaXMgInNldHMgRm9vIi4gSWYgdGhlIG1ldGhvZCBkb2VzIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggKHN1Y2ggYXMgZW5mb3JjaW5nIGEgY29uc3RyYWludCBvciBoYXZpbmcgYW4gaW1wb3J0YW50IHNpZGUgZWZmZWN0KSwgdGhlbiB5b3UgbXVzdCBkb2N1bWVudCBpdC4gQW5kIGlmIGl0J3Mgbm90IG9idmlvdXMgd2hhdCB0aGUgcHJvcGVydHkgIkZvbyIgbWVhbnMsIHlvdSBzaG91bGQgZG9jdW1lbnQgaXQuCis8L3A+Cis8cD5FdmVyeSBtZXRob2QgeW91IHdyaXRlLCB3aGV0aGVyIHB1YmxpYyBvciBvdGhlcndpc2UsIHdvdWxkIGJlbmVmaXQgZnJvbSBKYXZhZG9jLiBQdWJsaWMgbWV0aG9kcyBhcmUgcGFydCBvZiBhbiBBUEkgYW5kIHRoZXJlZm9yZSByZXF1aXJlIEphdmFkb2MuCis8L3A+CitBbmRyb2lkIGRvZXMgbm90IGN1cnJlbnRseSBlbmZvcmNlIGEgc3BlY2lmaWMgc3R5bGUgZm9yIHdyaXRpbmcgSmF2YWRvYyBjb21tZW50cywgYnV0IHlvdSA8Yj5zaG91bGQ8L2I+Citmb2xsb3cgdGhlIDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS9qYXZhZG9jL3dyaXRpbmdkb2Njb21tZW50cy8iPlN1biBKYXZhZG9jIGNvbnZlbnRpb25zPC9hPgorLgorPGgyPjxhPlNob3J0IG1ldGhvZHM8L2E+Cis8L2gyPgorVG8gdGhlIGV4dGVudCB0aGF0IGl0IGlzIGZlYXNpYmxlLCBtZXRob2RzIHNob3VsZCBiZSBrZXB0IHNtYWxsIGFuZCBmb2N1c2VkLiBJdCBpcywgaG93ZXZlciwgcmVjb2duaXplZCB0aGF0IGxvbmcgbWV0aG9kcyBhcmUgc29tZXRpbWVzIGFwcHJvcHJpYXRlLCBzbyBubyBoYXJkIGxpbWl0IGlzIHBsYWNlZCBvbiBtZXRob2QgbGVuZ3RoLiBJZiBhIG1ldGhvZCBleGNlZWRzIDQwIGxpbmVzIG9yIHNvLCB0aGluayBhYm91dCB3aGV0aGVyIGl0IGNhbiBiZSBicm9rZW4gdXAgd2l0aG91dCBoYXJtaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHByb2dyYW0uCis8aDI+PGE+TG9jYWwgdmFyaWFibGVzPC9hPgorPC9oMj4KK1RoZSBzY29wZSBvZiBsb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIGtlcHQgdG8gYSBtaW5pbXVtICg8aT5FZmZlY3RpdmUgSmF2YTwvaT4KK0l0ZW0gMjkpLiBCeSBkb2luZyBzbywgeW91IGluY3JlYXNlIHRoZSByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHlvdXIgY29kZSBhbmQgcmVkdWNlIHRoZSBsaWtlbGlob29kIG9mIGVycm9yLiBFYWNoIHZhcmlhYmxlIHNob3VsZCBiZSBkZWNsYXJlZCBpbiB0aGUgaW5uZXJtb3N0IGJsb2NrIHRoYXQgZW5jbG9zZXMgYWxsIHVzZXMgb2YgdGhlIHZhcmlhYmxlLgorPHA+TG9jYWwgdmFyaWFibGVzIHNob3VsZCBiZSBkZWNsYXJlZCBhdCB0aGUgcG9pbnQgdGhleSBhcmUgZmlyc3QgdXNlZC4gTmVhcmx5IGV2ZXJ5IGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHNob3VsZCBjb250YWluIGFuIGluaXRpYWxpemVyLiBJZiB5b3UgZG9uJ3QgeWV0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSBzZW5zaWJseSwgeW91IHNob3VsZCBwb3N0cG9uZSB0aGUgZGVjbGFyYXRpb24gdW50aWwgeW91IGRvLgorPC9wPgorPHA+T25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgY29uY2VybnMgdHJ5LWNhdGNoIHN0YXRlbWVudHMuIElmIGEgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgbWV0aG9kIHRoYXQgdGhyb3dzIGEgY2hlY2tlZCBleGNlcHRpb24sIGl0IG11c3QgYmUgaW5pdGlhbGl6ZWQgaW5zaWRlIGEgdHJ5IGJsb2NrLiBJZiB0aGUgdmFsdWUgbXVzdCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIHRyeSBibG9jaywgdGhlbiBpdCBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSB0aGUgdHJ5IGJsb2NrLCB3aGVyZSBpdCBjYW5ub3QgeWV0IGJlIHNlbnNpYmx5IGluaXRpYWxpemVkOgorPC9wPgorPHByZT4vLyBJbnN0YW50aWF0ZSBjbGFzcyBjbCwgd2hpY2ggcmVwcmVzZW50cyBzb21lIHNvcnQgb2YgU2V0IDxicj5TZXQgcyA9IG51bGw7PGJyPnRyeSB7PGJyPnMgPSAoU2V0KSBjbC5uZXdJbnN0YW5jZSgpOzxicj59IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgezxicj50aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGNsICsgIiBub3QgYWNjZXNzaWJsZSIpOzxicj59IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgezxicj50aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGNsICsgIiBub3QgaW5zdGFudGlhYmxlIik7PGJyPn08YnI+PGJyPi8vIEV4ZXJjaXNlIHRoZSBzZXQgPGJyPnMuYWRkQWxsKEFycmF5cy5hc0xpc3QoYXJncykpOzxicj48L3ByZT4KKzxwPkJ1dCBldmVuIHRoaXMgY2FzZSBjYW4gYmUgYXZvaWRlZCBieSBlbmNhcHN1bGF0aW5nIHRoZSB0cnktY2F0Y2ggYmxvY2sgaW4gYSBtZXRob2Q6Cis8L3A+Cis8cHJlPlNldCBjcmVhdGVTZXQoQ2xhc3MgY2wpIHs8YnI+Ly8gSW5zdGFudGlhdGUgY2xhc3MgY2wsIHdoaWNoIHJlcHJlc2VudHMgc29tZSBzb3J0IG9mIFNldCA8YnI+dHJ5IHs8YnI+cmV0dXJuIChTZXQpIGNsLm5ld0luc3RhbmNlKCk7PGJyPn0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7PGJyPnRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oY2wgKyAiIG5vdCBhY2Nlc3NpYmxlIik7PGJyPn0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7PGJyPnRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oY2wgKyAiIG5vdCBpbnN0YW50aWFibGUiKTs8YnI+fTxicj59PGJyPi4uLjxicj4vLyBFeGVyY2lzZSB0aGUgc2V0IDxicj5TZXQgcyA9IGNyZWF0ZVNldChjbCk7PGJyPnMuYWRkQWxsKEFycmF5cy5hc0xpc3QoYXJncykpOzxicj48L3ByZT4KK0xvb3AgdmFyaWFibGVzIHNob3VsZCBiZSBkZWNsYXJlZCBpbiB0aGUgZm9yIHN0YXRlbWVudCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgY29tcGVsbGluZyByZWFzb24gdG8gZG8gb3RoZXJ3aXNlOgorPHByZT5mb3IgKGludCBpID0gMDsgaSBuOyBpKyspIHs8YnI+ZG9Tb21ldGhpbmcoaSk7PGJyPn08YnI+PGJyPmZvciAoSXRlcmF0b3IgaSA9IGMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgezxicj5kb1NvbWV0aGluZ0Vsc2UoaS5uZXh0KCkpOzxicj59PGJyPjxicj48YnI+PC9wcmU+Cis8aDI+PGE+SW1wb3J0czwvYT4KKzwvaDI+CitUaGUgb3JkZXJpbmcgb2YgaW1wb3J0IHN0YXRlbWVudHMgaXM6QW5kcm9pZCBpbXBvcnRzSW1wb3J0cyBmcm9tIHRoaXJkIHBhcnRpZXMgKGNvbSwganVuaXQsIG5ldCwgb3JnKTxicj5qYXZhIGFuZCBqYXZheAorPHA+VG8gZXhhY3RseSBtYXRjaCB0aGUgSURFIHNldHRpbmdzLCB0aGUgaW1wb3J0cyBzaG91bGQgYmU6Cis8L3A+CitBbHBoYWJldGljYWwgd2l0aGluIGVhY2ggZ3JvdXBpbmcuPGJyPkNhcGl0YWwgbGV0dGVycyBhcmUgY29uc2lkZXJlZCB0byBjb21lIGJlZm9yZSBsb3dlciBjYXNlIGxldHRlciAoZS5nLiBaIGJlZm9yZSBhKS5UaGVyZSBzaG91bGQgYmUgYSBibGFuayBsaW5lIGJldHdlZW4gZWFjaCBtYWpvciBncm91cGluZyAoYW5kcm9pZCwgY29tLCBqdW5pdCwgbmV0LCBvcmcsIGphdmEsIGphdmF4KS4KKzxoND4KK1doeT8KKzwvaDQ+Cis8cD5PcmlnaW5hbGx5IHRoZXJlIHdhcyBubyBzdHlsZSByZXF1aXJlbWVudCBvbiB0aGUgb3JkZXJpbmcuIFRoaXMgbWVhbnQgdGhhdCB0aGUgSURFJ3Mgd2VyZSBlaXRoZXIgYWx3YXlzIGNoYW5naW5nIHRoZSBvcmRlcmluZywgb3IgSURFIGRldmVsb3BlcnMgaGFkIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyBpbXBvcnQgbWFuYWdlbWVudCBmZWF0dXJlcyBhbmQgbWFpbnRhaW4gdGhlIGltcG9ydHMgYnkgaGFuZC4gVGhpcyB3YXMgZGVlbWVkIGJhZC4gV2hlbiBqYXZhLXN0eWxlIHdhcyBhc2tlZCwgdGhlIHByZWZlcnJlZCBzdHlsZXMgd2VyZSBhbGwgb3ZlciB0aGUgbWFwLiBJdCBwcmV0dHkgbXVjaCBjYW1lIGRvd24gdG8gb3VyIG5lZWRpbmcgdG8gInBpY2sgYW4gb3JkZXJpbmcgYW5kIGJlIGNvbnNpc3RlbnQuIiBTbyB3ZSBjaG9zZSBhIHN0eWxlLCB1cGRhdGVkIHRoZSBqYXZhZ3VpZGUgYW5kIG1hZGUgdGhlIElERSdzIG9iZXkgaXQuIFdlIGV4cGVjdCB0aGF0IGFzIElERSB1c2VycyB3b3JrIG9uIHRoZSBjb2RlLCB0aGUgaW1wb3J0cyBpbiBhbGwgb2YgdGhlIHBhY2thZ2VzIHdpbGwgZW5kIHVwIG1hdGNoaW5nIHRoaXMgcGF0dGVybiB3aXRob3V0IGFueSBleHRyYSBlbmdpbmVlcmluZyBlZmZvcnQuCis8L3A+Cis8cD5UaGUgc3R5bGUgY2hvc2VuIHN1Y2ggdGhhdDoKKzwvcD4KK1RoZSBpbXBvcnRzIHBlb3BsZSB3YW50IHRvIGxvb2sgYXQgZmlyc3QgdGVuZCB0byBiZSBhdCB0aGUgdG9wIChhbmRyb2lkKVRoZSBpbXBvcnRzIHBlb3BsZSB3YW50IHRvIGxvb2sgYXQgbGVhc3QgdGVuZCB0byBiZSBhdCB0aGUgYm90dG9tIChqYXZhKUh1bWFucyBjYW4gZWFzaWx5IGZvbGxvdyB0aGUgc3R5bGVUaGUgSURFJ3MgY2FuIGZvbGxvdyB0aGUgc3R5bGUKKzxoMz4KK1doYXQgYWJvdXQgc3RhdGljIGltcG9ydHM/Cis8L2gzPgorVGhlIHVzZSBhbmQgbG9jYXRpb24gb2Ygc3RhdGljIGltcG9ydHMgaGF2ZSBiZWVuIG1pbGRseSBjb250cm92ZXJzaWFsIGlzc3Vlcy4gU29tZSBwZW9wbGUgd291bGQgcHJlZmVyIHN0YXRpYyBpbXBvcnRzIHRvIGJlIGludGVyc3BlcnNlZCB3aXRoIHRoZSByZW1haW5pbmcgaW1wb3J0cywgc29tZSB3b3VsZCBwcmVmZXIgdGhlbSByZXNpZGUgYWJvdmUgb3IgYmVsb3cgYWxsIG90aGVyIGltcG9ydHMuIEFkZGl0aW5hbGx5LCB3ZSBoYXZlIG5vdCB5ZXQgY29tZSB1cCB3aXRoIGEgd2F5IHRvIG1ha2UgYWxsIElERXMgdXNlIHRoZSBzYW1lIG9yZGVyaW5nLgorPHA+U2luY2UgbW9zdCBwZW9wbGUgY29uc2lkZXIgdGhpcyBhIGxvdyBwcmlvcml0eSBpc3N1ZSwganVzdCB1c2UgeW91ciBqdWRnZW1lbnQgYW5kIHBsZWFzZSBiZSBjb25zaXN0ZW50LgorPC9wPgorCis8aDI+PGE+SW5kZW50YXRpb248L2E+Cis8L2gyPgorPHA+V2UgdXNlIDQgc3BhY2UgaW5kZW50cyBmb3IgYmxvY2tzLiBXZSBuZXZlciB1c2UgdGFicy4gV2hlbiBpbiBkb3VidCwgYmUgY29uc2lzdGVudCB3aXRoIGNvZGUgYXJvdW5kIHlvdS4KKzwvcD4KKzxwPldlIHVzZSA4IHNwYWNlIGluZGVudHMgZm9yIGxpbmUgd3JhcHMsIGluY2x1ZGluZyBmdW5jdGlvbiBjYWxscyBhbmQgYXNzaWdubWVudHMuIEZvciBleGFtcGxlLCB0aGlzIGlzIGNvcnJlY3Q6Cis8L3A+Cis8cHJlPkluc3RydW1lbnQgaSA8YnI+PSBzb21lTG9uZ0V4cHJlc3Npb24odGhhdCwgd291bGROb3RGaXQsIG9uLCBvbmUsIGxpbmUpOzwvcHJlPgorYW5kIHRoaXMgaXMgbm90IGNvcnJlY3Q6Cis8cHJlPkluc3RydW1lbnQgaSA8YnI+PSBzb21lTG9uZ0V4cHJlc3Npb24odGhhdCwgd291bGROb3RGaXQsIG9uLCBvbmUsIGxpbmUpOzwvcHJlPgorPGgyPjxhPkZpZWxkIE5hbWVzPC9hPgorPC9oMj4KKzx1bD48bGk+Tm9uLXB1YmxpYywgbm9uLXN0YXRpYyBmaWVsZCBuYW1lcyBzdGFydCB3aXRoIG0uCis8L2xpPgorPGxpPlN0YXRpYyBmaWVsZCBuYW1lcyBzdGFydCB3aXRoIHMuCis8L2xpPgorPGxpPk90aGVyIGZpZWxkcyBzdGFydCB3aXRoIGEgbG93ZXIgY2FzZSBsZXR0ZXIuCis8L2xpPgorPGxpPlB1YmxpYyBzdGF0aWMgZmluYWwgZmllbGRzIChjb25zdGFudHMpIGFyZSBBTExfQ0FQU19XSVRIX1VOREVSU0NPUkVTLgorPC9saT4KKzwvdWw+Cis8cD5Gb3IgZXhhbXBsZToKKzwvcD4KKzxwcmU+cHVibGljIGNsYXNzIE15Q2xhc3Mgezxicj5wdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT01FX0NPTlNUQU5UID0gNDI7PGJyPnB1YmxpYyBpbnQgcHVibGljRmllbGQ7PGJyPnByaXZhdGUgc3RhdGljIE15Q2xhc3Mgc1NpbmdsZXRvbjs8YnI+aW50IG1QYWNrYWdlUHJpdmF0ZTs8YnI+cHJpdmF0ZSBpbnQgbVByaXZhdGU7PGJyPnByb3RlY3RlZCBpbnQgbVByb3RlY3RlZDs8YnI+fTwvcHJlPgorPGgyPjxhPkJyYWNlczwvYT4KKzwvaDI+Cis8cD5CcmFjZXMgZG8gbm90IGdvIG9uIHRoZWlyIG93biBsaW5lOyB0aGV5IGdvIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGNvZGUgYmVmb3JlIHRoZW0uIFNvOgorPC9wPgorPHByZT5jbGFzcyBNeUNsYXNzIHs8YnI+aW50IGZ1bmMoKSB7PGJyPmlmIChzb21ldGhpbmcpIHs8YnI+Ly8gLi4uPGJyPn0gZWxzZSBpZiAoc29tZXRoaW5nRWxzZSkgezxicj4vLyAuLi48YnI+fSBlbHNlIHs8YnI+Ly8gLi4uPGJyPn08YnI+fTxicj59PGJyPjwvcHJlPgorPHA+V2UgcmVxdWlyZSBicmFjZXMgYXJvdW5kIHRoZSBzdGF0ZW1lbnRzIGZvciBhIGNvbmRpdGlvbmFsLiBFeGNlcHQsIGlmIHRoZSBlbnRpcmUgY29uZGl0aW9uYWwgKHRoZSBjb25kaXRpb24gYW5kIHRoZSBib2R5KSBmaXQgb24gb25lIGxpbmUsIHlvdSBtYXkgKGJ1dCBhcmUgbm90IG9ibGlnYXRlZCB0bykgcHV0IGl0IGFsbCBvbiBvbmUgbGluZS4gVGhhdCBpcywgdGhpcyBpcyBsZWdhbDoKKzwvcD4KKzxwcmU+aWYgKGNvbmRpdGlvbikgezxicj5ib2R5OyAvLyBvayA8YnI+fTxicj5pZiAoY29uZGl0aW9uKSBib2R5OyAvLyBvazwvcHJlPgorPHA+YnV0IHRoaXMgaXMgc3RpbGwgaWxsZWdhbDoKKzwvcD4KKzxwcmU+aWYgKGNvbmRpdGlvbik8YnI+Ym9keTsgLy8gYmFkIDxicj48L3ByZT4KKzxoMj48YT5MaW5lIGxlbmd0aDwvYT4KKzwvaDI+Cis8cD5FYWNoIGxpbmUgb2YgdGV4dCBpbiB5b3VyIGNvZGUgc2hvdWxkIGJlIGF0IG1vc3QgMTAwIGNoYXJhY3RlcnMgbG9uZy4KKzwvcD4KKzxwPlRoZXJlIGhhcyBiZWVuIGxvdHMgb2YgZGlzY3Vzc2lvbiBhYm91dCB0aGlzIHJ1bGUgYW5kIHRoZSBkZWNpc2lvbiByZW1haW5zIHRoYXQgMTAwIGNoYXJhY3RlcnMgaXMgdGhlIG1heGltdW0uCis8L3A+Cis8cD5FeGNlcHRpb246IGlmIGEgY29tbWVudCBsaW5lIGNvbnRhaW5zIGFuIGV4YW1wbGUgY29tbWFuZCBvciBhIGxpdGVyYWwgVVJMIGxvbmdlciB0aGFuIDEwMCBjaGFyYWN0ZXJzLCB0aGF0IGxpbmUgbWF5IGJlIGxvbmdlciB0aGFuIDEwMCBjaGFyYWN0ZXJzIGZvciBlYXNlIG9mIGN1dCBhbmQgcGFzdGUuCis8L3A+Cis8cD5FeGNlcHRpb246IGltcG9ydCBsaW5lcyBjYW4gZ28gb3ZlciB0aGUgbGltaXQgYmVjYXVzZSBodW1hbnMgcmFyZWx5IHNlZSB0aGVtLiBUaGlzIGFsc28gc2ltcGxpZmllcyB0b29sIHdyaXRpbmcuCis8L3A+Cis8aDI+CitKYXZhIDEuNSBBbm5vdGF0aW9ucworPC9oMj4KKzxwPkFubm90YXRpb25zIHNob3VsZCBwcmVjZWRlIG90aGVyIG1vZGlmaWVycyBmb3IgdGhlIHNhbWUgbGFuZ3VhZ2UgZWxlbWVudC4gU2ltcGxlIG1hcmtlciBhbm5vdGF0aW9ucyAoZS5nLiBAT3ZlcnJpZGUpIGNhbiBiZSBsaXN0ZWQgb24gdGhlIHNhbWUgbGluZSB3aXRoIHRoZSBsYW5ndWFnZSBlbGVtZW50LiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYW5ub3RhdGlvbnMsIG9yIHBhcmFtZXRlcml6ZWQgYW5ub3RhdGlvbnMsIHRoZXkgc2hvdWxkIGVhY2ggYmUgbGlzdGVkIG9uZS1wZXItbGluZSBpbiBhbHBoYWJldGljYWwgb3JkZXIuCis8L3A+Cis8cD5BbmRyb2lkIC1zdGFuZGFyZCBwcmFjdGljZXMgZm9yIHRoZSB0aHJlZSBwcmVkZWZpbmVkIGFubm90YXRpb25zIGluIEphdmEgMS41J3MgYXJlOgorPC9wPgorQERlcHJlY2F0ZWRUaGUgQERlcHJlY2F0ZWQgYW5ub3RhdGlvbiBtdXN0IGJlIHVzZWQgd2hlbmV2ZXIgdGhlIHVzZSBvZiB0aGUgYW5ub3RhdGVkIGVsZW1lbnQgaXMgZGlzY291cmFnZWQuIElmIHlvdSB1c2UgdGhlIEBEZXByZWNhdGVkIGFubm90YXRpb24sIHlvdSBtdXN0IGFsc28gaGF2ZSBhIEBkZXByZWNhdGVkIEphdmFkb2MgdGFnIGFuZCBpdCBzaG91bGQgbmFtZSBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24uIEluIGFkZGl0aW9uLCByZW1lbWJlciB0aGF0IGEgQERlcHJlY2F0ZWQgbWV0aG9kIGlzIDxiPnN0aWxsPC9iPgorc3VwcG9zZWQgdG8gd29yay4KKzxwPklmIHlvdSBzZWUgb2xkIGNvZGUgdGhhdCBoYXMgYSBAZGVwcmVjYXRlZCBKYXZhZG9jIHRhZywgcGxlYXNlIGFkZCB0aGUgQERlcHJlY2F0ZWQgYW5ub3RhdGlvbi4KKzwvcD4KK0BPdmVycmlkZVRoZSBAT3ZlcnJpZGUgYW5ub3RhdGlvbiBtdXN0IGJlIHVzZWQgd2hlbmV2ZXIgYSBtZXRob2Qgb3ZlcnJpZGVzIHRoZSBkZWNsYXJhdGlvbiBvciBpbXBsZW1lbnRhdGlvbiBmcm9tIGEgc3VwZXItY2xhc3MuCis8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IHVzZSB0aGUge0Bpbmhlcml0ZG9jc30gSmF2YWRvYyB0YWcsIGFuZCBkZXJpdmUgZnJvbSBhIGNsYXNzIChub3QgYW4gaW50ZXJmYWNlKSwgeW91IG11c3QgYWxzbyBhbm5vdGF0ZSB0aGF0IHRoZSBtZXRob2QgQE92ZXJyaWRlcyB0aGUgcGFyZW50IGNsYXNzJ3MgbWV0aG9kLgorPC9wPgorQFN1cHByZXNzV2FybmluZ3NUaGUgQFN1cHByZXNzV2FybmluZ3MgYW5ub3RhdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHVuZGVyIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQgaXMgaW1wb3NzaWJsZSB0byBlbGltaW5hdGUgYSB3YXJuaW5nLiBJZiBhIHdhcm5pbmcgcGFzc2VzIHRoaXMgImltcG9zc2libGUgdG8gZWxpbWluYXRlIiB0ZXN0LCB0aGVAU3VwcHJlc3NXYXJuaW5ncyBhbm5vdGF0aW9uIDxiPm11c3Q8L2I+CitiZSB1c2VkLCBzbyBhcyB0byBlbnN1cmUgdGhhdCBhbGwgd2FybmluZ3MgcmVmbGVjdCBhY3R1YWwgcHJvYmxlbXMgaW4gdGhlIGNvZGUuCis8cD5XaGVuIGEgQFN1cHByZXNzV2FybmluZ3MgYW5ub3RhdGlvbiBpcyBuZWNlc3NhcnksIGl0IG11c3QgYmUgcHJlZml4ZWQgd2l0aCBhIFRPRE8gY29tbWVudCB0aGF0IGV4cGxhaW5zIHRoZSAiaW1wb3NzaWJsZSB0byBlbGltaW5hdGUiIGNvbmRpdGlvbi4gVGhpcyB3aWxsIG5vcm1hbGx5IGlkZW50aWZ5IGFuIG9mZmVuZGluZyBjbGFzcyB0aGF0IGhhcyBhbiBhd2t3YXJkIGludGVyZmFjZS4gRm9yIGV4YW1wbGU6Cis8L3A+Cis8cHJlPi8vIFRPRE86IFRoZSB0aGlyZC1wYXJ0eSBjbGFzcyBjb20udGhpcmQudXNlZnVsLlV0aWxpdHkucm90YXRlKCkgbmVlZHMgZ2VuZXJpY3MgPGJyPkBTdXBwcmVzc1dhcm5pbmdzKHsiZ2VuZXJpYy1jYXN0In0pPGJyPkxpc3RTdHJpbmdibGl4ID0gVXRpbGl0eS5yb3RhdGUoYmxheCk7PGJyPjwvcHJlPgorV2hlbiBhIEBTdXBwcmVzc1dhcm5pbmdzIGFubm90YXRpb24gaXMgcmVxdWlyZWQsIHRoZSBjb2RlIHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIGlzb2xhdGUgdGhlIHNvZnR3YXJlIGVsZW1lbnRzIHdoZXJlIHRoZSBhbm5vdGF0aW9uIGFwcGxpZXMuCis8aDI+PGE+QWNyb255bXMgaW4gbmFtZXM8L2E+Cis8L2gyPgorPHA+VHJlYXQgYWNyb255bXMgYW5kIGFiYnJldmlhdGlvbnMgYXMgd29yZHMuIFRoZSBuYW1lcyBhcmUgbXVjaCBtb3JlIHJlYWRhYmxlOgorPC9wPgorCis8dGFibGU+PHRib2R5Pjx0cj48dGQ+R29vZAorPC90ZD4KKzx0ZD5CYWQKKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5YbWxIdHRwUmVxdWVzdDwvdGQ+Cis8dGQ+WE1MSFRUUFJlcXVlc3QKKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5nZXRDdXN0b21lcklkPC90ZD4KKzx0ZD5nZXRDdXN0b21lcklECis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorCis8cD5UaGlzIHN0eWxlIHJ1bGUgYWxzbyBhcHBsaWVzIHdoZW4gYW4gYWNyb255bSBvciBhYmJyZXZpYXRpb24gaXMgdGhlIGVudGlyZSBuYW1lOgorPC9wPgorCis8dGFibGU+PHRib2R5Pjx0cj48dGQ+R29vZAorPC90ZD4KKzx0ZD5CYWQKKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5jbGFzcyBIdG1sPC90ZD4KKzx0ZD5jbGFzcyBIVE1MCis8L3RkPgorPC90cj4KKzx0cj48dGQ+U3RyaW5nIHVybDs8L3RkPgorPHRkPlN0cmluZyBVUkw7Cis8L3RkPgorPC90cj4KKzx0cj48dGQ+bG9uZyBpZDs8L3RkPgorPHRkPmxvbmcgSUQ7Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorCis8cD5Cb3RoIHRoZSBKREsgYW5kIHRoZSBBbmRyb2lkIGNvZGUgYmFzZXMgYXJlIHZlcnkgaW5jb25zaXN0ZW50IHdpdGggcmVnYXJkcyB0byBhY3JvbnltcywgdGhlcmVmb3JlLCBpdCBpcyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGUgYXJvdW5kIHlvdS4gQml0ZSB0aGUgYnVsbGV0LCBhbmQgdHJlYXQgYWNyb255bXMgYXMgd29yZHMuCis8L3A+Cis8cD5Gb3IgZnVydGhlciBqdXN0aWZpY2F0aW9ucyBvZiB0aGlzIHN0eWxlIHJ1bGUsIHNlZSA8aT5FZmZlY3RpdmUgSmF2YTwvaT4KK0l0ZW0gMzggYW5kIDxpPkphdmEgUHV6emxlcnM8L2k+CitOdW1iZXIgNjguCis8L3A+Cis8aDI+PGE+VE9ETyBzdHlsZTwvYT4KKzwvaDI+Cis8cD5Vc2UgVE9ETyBjb21tZW50cyBmb3IgY29kZSB0aGF0IGlzIHRlbXBvcmFyeSwgYSBzaG9ydC10ZXJtIHNvbHV0aW9uLCBvciBnb29kLWVub3VnaCBidXQgbm90IHBlcmZlY3QuCis8L3A+Cis8cD5UT0RPcyBzaG91bGQgaW5jbHVkZSB0aGUgc3RyaW5nIFRPRE8gaW4gYWxsIGNhcHMsIGZvbGxvd2VkIGJ5IGEgY29sb246Cis8L3A+Cis8cHJlPi8vIFRPRE86IFJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXIgdGhlIFVybFRhYmxlMiBoYXMgYmVlbiBjaGVja2VkIGluLjxicj48YnI+Ly8gVE9ETzogQ2hhbmdlIHRoaXMgdG8gdXNlIGEgZmxhZyBpbnN0ZWFkIG9mIGEgY29uc3RhbnQuPC9wcmU+Cis8cD5JZiB5b3VyIFRPRE8gaXMgb2YgdGhlIGZvcm0gIkF0IGEgZnV0dXJlIGRhdGUgZG8gc29tZXRoaW5nIiBtYWtlIHN1cmUgdGhhdCB5b3UgZWl0aGVyIGluY2x1ZGUgYSB2ZXJ5IHNwZWNpZmljIGRhdGUgKCJGaXggYnkgTm92ZW1iZXIgMjAwNSIpIG9yIGEgdmVyeSBzcGVjaWZpYyBldmVudCAoIlJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXIgYWxsIHByb2R1Y3Rpb24gbWl4ZXJzIHVuZGVyc3RhbmQgcHJvdG9jb2wgVjcuIikuCis8L3A+Cis8aDI+CitDb25zaXN0ZW5jeQorPC9oMj4KKzxwPk91ciBwYXJ0aW5nIHRob3VnaHQ6IEJFIENPTlNJU1RFTlQuIElmIHlvdSdyZSBlZGl0aW5nIGNvZGUsIHRha2UgYSBmZXcgbWludXRlcyB0byBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCB5b3UgYW5kIGRldGVybWluZSBpdHMgc3R5bGUuIElmIHRoZXkgdXNlIHNwYWNlcyBhcm91bmQgdGhlaXIgaWYgY2xhdXNlcywgeW91IHNob3VsZCB0b28uIElmIHRoZWlyIGNvbW1lbnRzIGhhdmUgbGl0dGxlIGJveGVzIG9mIHN0YXJzIGFyb3VuZCB0aGVtLCBtYWtlIHlvdXIgY29tbWVudHMgaGF2ZSBsaXR0bGUgYm94ZXMgb2Ygc3RhcnMgYXJvdW5kIHRoZW0gdG9vLgorPC9wPgorPHA+VGhlIHBvaW50IG9mIGhhdmluZyBzdHlsZSBndWlkZWxpbmVzIGlzIHRvIGhhdmUgYSBjb21tb24gdm9jYWJ1bGFyeSBvZiBjb2RpbmcsIHNvIHBlb3BsZSBjYW4gY29uY2VudHJhdGUgb24gd2hhdCB5b3UncmUgc2F5aW5nLCByYXRoZXIgdGhhbiBvbiBob3cgeW91J3JlIHNheWluZyBpdC4gV2UgcHJlc2VudCBnbG9iYWwgc3R5bGUgcnVsZXMgaGVyZSBzbyBwZW9wbGUga25vdyB0aGUgdm9jYWJ1bGFyeS4gQnV0IGxvY2FsIHN0eWxlIGlzIGFsc28gaW1wb3J0YW50LiBJZiBjb2RlIHlvdSBhZGQgdG8gYSBhIGZpbGUgbG9va3MgZHJhc3RpY2FsbHkgZGlmZmVyZW50IGZyb20gdGhlIGV4aXN0aW5nIGNvZGUgYXJvdW5kIGl0LCBpdCB0aHJvd3MgcmVhZGVycyBvdXQgb2YgdGhlaXIgcmh5dGhtIHdoZW4gdGhleSBnbyB0byByZWFkIGl0LiBUcnkgdG8gYXZvaWQgdGhpcy4KKzwvcD4KKzxoMj48YT5Mb2dnaW5nPC9hPgorPC9oMj4KKzxwPldoaWxlIGxvZ2dpbmcgaXMgbmVjZXNzYXJ5IGl0IGhhcyBhIHNpZ25pZmljYW50bHkgbmVnYXRpdmUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBxdWlja2x5IGxvc2VzIGl0cyB1c2VmdWxuZXNzIGlmIGl0J3Mgbm90IGtlcHQgcmVhc29uYWJseSB0ZXJzZS4gVGhlIGxvZ2dpbmcgZmFjaWxpdGllcyBwcm92aWRlcyBmaXZlIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZy4gQmVsb3cgYXJlIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIGFuZCB3aGVuIGFuZCBob3cgdGhleSBzaG91bGQgYmUgdXNlZC4KKzwvcD4KKworPHVsPjxsaT48Yj5FUlJPUjo8L2I+CitUaGlzIGxldmVsIG9mIGxvZ2dpbmcgc2hvdWxkIGJlIHVzZWQgd2hlbiBzb21ldGhpbmcgZmF0YWwgaGFzIGhhcHBlbmVkLCBpLmUuIHNvbWV0aGluZyB0aGF0IHdpbGwgaGF2ZSB1c2VyLXZpc2libGUgY29uc2VxdWVuY2VzIGFuZCB3b24ndCBiZSByZWNvdmVyYWJsZSB3aXRob3V0IGV4cGxpY2l0bHkgZGVsZXRpbmcgc29tZSBkYXRhLCB1bmluc3RhbGxpbmcgYXBwbGljYXRpb25zLCB3aXBpbmcgdGhlIGRhdGEgcGFydGl0aW9ucyBvciByZWZsYXNoaW5nIHRoZSBlbnRpcmUgcGhvbmUgKG9yIHdvcnNlKS4gVGhpcyBsZXZlbCBpcyBhbHdheXMgbG9nZ2VkLiBJc3N1ZXMgdGhhdCBqdXN0aWZ5IHNvbWUgbG9nZ2luZyBhdCB0aGUgRVJST1IgbGV2ZWwgYXJlIHR5cGljYWxseSBnb29kIGNhbmRpZGF0ZXMgdG8gYmUgcmVwb3J0ZWQgdG8gYSBzdGF0aXN0aWNzLWdhdGhlcmluZyBzZXJ2ZXIuCis8L2xpPgorPGxpPjxiPldBUk5JTkc6PC9iPgorVGhpcyBsZXZlbCBvZiBsb2dnaW5nIHNob3VsZCB1c2VkIHdoZW4gc29tZXRoaW5nIHNlcmlvdXMgYW5kIHVuZXhwZWN0ZWQgaGFwcGVuZWQsIGkuZS4gc29tZXRoaW5nIHRoYXQgd2lsbCBoYXZlIHVzZXItdmlzaWJsZSBjb25zZXF1ZW5jZXMgYnV0IGlzIGxpa2VseSB0byBiZSByZWNvdmVyYWJsZSB3aXRob3V0IGRhdGEgbG9zcyBieSBwZXJmb3JtaW5nIHNvbWUgZXhwbGljaXQgYWN0aW9uLCByYW5naW5nIGZyb20gd2FpdGluZyBvciByZXN0YXJ0aW5nIGFuIGFwcCBhbGwgdGhlIHdheSB0byByZS1kb3dubG9hZGluZyBhIG5ldyB2ZXJzaW9uIG9mIGFuIGFwcGxpY2F0aW9uIG9yIHJlYm9vdGluZyB0aGUgZGV2aWNlLiBUaGlzIGxldmVsIGlzIGFsd2F5cyBsb2dnZWQuIElzc3VlcyB0aGF0IGp1c3RpZnkgc29tZSBsb2dnaW5nIGF0IHRoZSBXQVJOSU5HIGxldmVsIG1pZ2h0IGFsc28gYmUgY29uc2lkZXJlZCBmb3IgcmVwb3J0aW5nIHRvIGEgc3RhdGlzdGljcy1nYXRoZXJpbmcgc2VydmVyLgorPC9saT4KKzxsaT48Yj5JTkZPUk1BVElWRTo8L2I+CitUaGlzIGxldmVsIG9mIGxvZ2dpbmcgc2hvdWxkIHVzZWQgYmUgdG8gbm90ZSB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBtb3N0IHBlb3BsZSBoYXBwZW5lZCwgaS5lLiB3aGVuIGEgc2l0dWF0aW9uIGlzIGRldGVjdGVkIHRoYXQgaXMgbGlrZWx5IHRvIGhhdmUgd2lkZXNwcmVhZCBpbXBhY3QsIHRob3VnaCBpc24ndCBuZWNlc3NhcmlseSBhbiBlcnJvci4gU3VjaCBhIGNvbmRpdGlvbiBzaG91bGQgb25seSBiZSBsb2dnZWQgYnkgYSBtb2R1bGUgdGhhdCByZWFzb25hYmx5IGJlbGlldmVzIHRoYXQgaXQgaXMgdGhlIG1vc3QgYXV0aG9yaXRhdGl2ZSBpbiB0aGF0IGRvbWFpbiAodG8gYXZvaWQgZHVwbGljYXRlIGxvZ2dpbmcgYnkgbm9uLWF1dGhvcml0YXRpdmUgY29tcG9uZW50cykuIFRoaXMgbGV2ZWwgaXMgYWx3YXlzIGxvZ2dlZC4KKzwvbGk+Cis8bGk+PGI+REVCVUc6PC9iPgorVGhpcyBsZXZlbCBvZiBsb2dnaW5nIHNob3VsZCBiZSB1c2VkIHRvIGZ1cnRoZXIgbm90ZSB3aGF0IGlzIGhhcHBlbmluZyBvbiB0aGUgZGV2aWNlIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gaW52ZXN0aWdhdGUgYW5kIGRlYnVnIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBZb3Ugc2hvdWxkIGxvZyBvbmx5IHdoYXQgaXMgbmVlZGVkIHRvIGdhdGhlciBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpcyBnb2luZyBvbiBhYm91dCB5b3VyIGNvbXBvbmVudC4gSWYgeW91ciBkZWJ1ZyBsb2dzIGFyZSBkb21pbmF0aW5nIHRoZSBsb2cgdGhlbiB5b3UgcHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIHZlcmJvc2UgbG9nZ2luZy4gVGhpcyBsZXZlbCB3aWxsIGJlIGxvZ2dlZCwgZXZlbiBvbiByZWxlYXNlIGJ1aWxkcywgYW5kIGlzIHJlcXVpcmVkIHRvIGJlIHN1cnJvdW5kZWQgYnkgYW4gaWYgKExPQ0FMX0xPRykgb3IgaWYgKExPQ0FMX0xPR0QpIGJsb2NrLCB3aGVyZSBMT0NBTF9MT0dbRF0gaXMgZGVmaW5lZCBpbiB5b3VyIGNsYXNzIG9yIHN1YmNvbXBvbmVudCwgc28gdGhhdCB0aGVyZSBjYW4gZXhpc3QgYSBwb3NzaWJpbGl0eSB0byBkaXNhYmxlIGFsbCBzdWNoIGxvZ2dpbmcuIFRoZXJlIG11c3QgdGhlcmVmb3JlIGJlIG5vIGFjdGl2ZSBsb2dpYyBpbiBhbiBpZiAoTE9DQUxfTE9HKSBibG9jay4gQWxsIHRoZSBzdHJpbmcgYnVpbGRpbmcgZm9yIHRoZSBsb2cgYWxzbyBuZWVkcyB0byBiZSBwbGFjZWQgaW5zaWRlIHRoZSBpZiAoTE9DQUxfTE9HKSBibG9jay4gVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgbm90IGJlIHJlLWZhY3RvcmVkIG91dCBpbnRvIGEgbWV0aG9kIGNhbGwgaWYgaXQgaXMgZ29pbmcgdG8gY2F1c2UgdGhlIHN0cmluZyBidWlsZGluZyB0byB0YWtlIHBsYWNlIG91dHNpZGUgb2YgdGhlIGlmIChMT0NBTF9MT0cpIGJsb2NrLiBUaGVyZSBpcyBzb21lIGNvZGUgdGhhdCBzdGlsbCBzYXlzIGlmIChsb2NhbExPR1YpLiBUaGlzIGlzIGNvbnNpZGVyZWQgYWNjZXB0YWJsZSBhcyB3ZWxsLCBhbHRob3VnaCB0aGUgbmFtZSBpcyBub25zdGFuZGFyZC4KKzwvbGk+Cis8bGk+PGI+VkVSQk9TRTo8L2I+CitUaGlzIGxldmVsIG9mIGxvZ2dpbmcgc2hvdWxkIGJlIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gVGhpcyBsZXZlbCB3aWxsIG9ubHkgYmUgbG9nZ2VkIG9uIGRlYnVnIGJ1aWxkcyBhbmQgc2hvdWxkIGJlIHN1cnJvdW5kZWQgYnkgaWYgKExPQ0FMX0xPR1YpIGJsb2NrIChvciBlcXVpdmFsZW50KSBzbyB0aGF0IGl0IGNhbiBiZSBjb21waWxlZCBvdXQgYnkgZGVmYXVsdC4gQW55IHN0cmluZyBidWlsZGluZyB3aWxsIGJlIHN0cmlwcGVkIG91dCBvZiByZWxlYXNlIGJ1aWxkcyBhbmQgbmVlZHMgdG8gYXBwZWFyIGluc2lkZSB0aGUgaWYgKExPQ0FMX0xPR1YpIGJsb2NrLgorPC9saT4KKzwvdWw+Cis8cD48aT5Ob3RlOjwvaT4KK1dpdGhpbiBhIGdpdmVuIG1vZHVsZSwgb3RoZXIgdGhhbiBhdCB0aGUgVkVSQk9TRSBsZXZlbCwgYW4gZXJyb3Igc2hvdWxkIG9ubHkgYmUgcmVwb3J0ZWQgb25jZSBpZiBwb3NzaWJsZTogd2l0aGluIGEgc2luZ2xlIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiBhIG1vZHVsZSwgb25seSB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIGVycm9yLCBhbmQgY2FsbGVycyBpbiB0aGUgc2FtZSBtb2R1bGUgc2hvdWxkIG9ubHkgYWRkIHNvbWUgbG9nZ2luZyBpZiB0aGF0IHNpZ25pZmljYW50bHkgaGVscHMgdG8gaXNvbGF0ZSB0aGUgaXNzdWUuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK0luIGEgY2hhaW4gb2YgbW9kdWxlcywgb3RoZXIgdGhhbiBhdCB0aGUgVkVSQk9TRSBsZXZlbCwgd2hlbiBhIGxvd2VyLWxldmVsIG1vZHVsZSBkZXRlY3RzIGludmFsaWQgZGF0YSBjb21pbmcgZnJvbSBhIGhpZ2hlci1sZXZlbCBtb2R1bGUsIHRoZSBsb3dlci1sZXZlbCBtb2R1bGUgc2hvdWxkIG9ubHkgbG9nIHRoaXMgc2l0dWF0aW9uIHRvIHRoZSBERUJVRyBsb2csIGFuZCBvbmx5IGlmIGxvZ2dpbmcgcHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiBTcGVjaWZpY2FsbHksIHRoZXJlIGlzIG5vIG5lZWQgdG8gbG9nIHNpdHVhdGlvbnMgd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biAodGhlIGV4Y2VwdGlvbiBzaG91bGQgY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uKSwgb3Igd2hlcmUgdGhlIG9ubHkgaW5mb3JtYXRpb24gYmVpbmcgbG9nZ2VkIGlzIGNvbnRhaW5lZCBpbiBhbiBlcnJvciBjb2RlLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmcmFtZXdvcmsgYW5kIGFwcGxpY2F0aW9ucywgYW5kIGNvbmRpdGlvbnMgY2F1c2VkIGJ5IHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IHRoZSBmcmFtZXdvcmsgc2hvdWxkIG5vdCB0cmlnZ2VyIGxvZ2dpbmcgaGlnaGVyIHRoYW4gdGhlIERFQlVHIGxldmVsLiBUaGUgb25seSBzaXR1YXRpb25zIHRoYXQgc2hvdWxkIHRyaWdnZXIgbG9nZ2luZyBhdCB0aGUgSU5GT1JNQVRJVkUgbGV2ZWwgb3IgaGlnaGVyIGlzIHdoZW4gYSBtb2R1bGUgb3IgYXBwbGljYXRpb24gZGV0ZWN0cyBhbiBlcnJvciBhdCBpdHMgb3duIGxldmVsIG9yIGNvbWluZyBmcm9tIGEgbG93ZXIgbGV2ZWwuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK1doZW4gYSBjb25kaXRpb24gdGhhdCB3b3VsZCBub3JtYWxseSBqdXN0aWZ5IHNvbWUgbG9nZ2luZyBpcyBsaWtlbHkgdG8gb2NjdXIgbWFueSB0aW1lcywgaXQgY2FuIGJlIGEgZ29vZCBpZGVhIHRvIGltcGxlbWVudCBzb21lIHJhdGUtbGltaXRpbmcgbWVjaGFuaXNtIHRvIHByZXZlbnQgb3ZlcmZsb3dpbmcgdGhlIGxvZ3Mgd2l0aCBtYW55IGR1cGxpY2F0ZSBjb3BpZXMgb2YgdGhlIHNhbWUgKG9yIHZlcnkgc2ltaWxhcikgaW5mb3JtYXRpb24uCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK0xvc3NlcyBvZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBhcmUgY29uc2lkZXJlZCBjb21tb24gYW5kIGZ1bGx5IGV4cGVjdGVkIGFuZCBzaG91bGQgbm90IGJlIGxvZ2dlZCBncmF0dWl0b3VzbHkuIEEgbG9zcyBvZiBuZXR3b3JrIGNvbm5lY3Rpdml0eSB0aGF0IGhhcyBjb25zZXF1ZW5jZXMgd2l0aGluIGFuIGFwcCBzaG91bGQgYmUgbG9nZ2VkIGF0IHRoZSBERUJVRyBvciBWRVJCT1NFIGxldmVsIChkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29uc2VxdWVuY2VzIGFyZSBzZXJpb3VzIGVub3VnaCBhbmQgdW5leHBlY3RlZCBlbm91Z2ggdG8gYmUgbG9nZ2VkIGluIGEgcmVsZWFzZSBidWlsZCkuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK0EgZnVsbCBmaWxlc3lzdGVtIG9uIGEgZmlsZXN5c3RlbSB0aGF0IGlzIGFjY2Vlc3NpYmxlIHRvIG9yIG9uIGJlaGFsZiBvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBiZSBsb2dnZWQgYXQgYSBsZXZlbCBoaWdoZXIgdGhhbiBJTkZPUk1BVElWRS4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorSW52YWxpZCBkYXRhIGNvbWluZyBmcm9tIGFueSB1bnRydXN0ZWQgc291cmNlIChpbmNsdWRpbmcgYW55IGZpbGUgb24gc2hhcmVkIHN0b3JhZ2UsIG9yIGRhdGEgY29taW5nIHRocm91Z2gganVzdCBhYm91dCBhbnkgbmV0d29yayBjb25uZWN0aW9ucykgaXMgY29uc2lkZXJlZCBleHBlY3RlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGFueSBsb2dnaW5nIGF0IGEgbGV2ZWwgaGlnaGVyIHRoZW4gREVCVUcgd2hlbiBpdCdzIGRldGVjdGVkIHRvIGJlIGludmFsaWQgKGFuZCBldmVuIHRoZW4gbG9nZ2luZyBzaG91bGQgYmUgYXMgbGltaXRlZCBhcyBwb3NzaWJsZSkuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK0tlZXAgaW4gbWluZCB0aGF0IHRoZSAnKycgb3BlcmF0b3IsIHdoZW4gdXNlZCBvbiBTdHJpbmdzLCBpbXBsaWNpdGx5IGNyZWF0ZXMgYSBTdHJpbmdCdWlsZGVyIHdpdGggdGhlIGRlZmF1bHQgYnVmZmVyIHNpemUgKDE2IGNoYXJhY3RlcnMpIGFuZCBwb3RlbnRpYWxseSBxdWl0ZSBhIGZldyBvdGhlciB0ZW1wb3JhcnkgU3RyaW5nIG9iamVjdHMsIGkuZS4gdGhhdCBleHBsaWNpdGx5IGNyZWF0aW5nIFN0cmluZ0J1aWxkZXJzIGlzbid0IG1vcmUgZXhwZW5zaXZlIHRoYW4gcmVseWluZyBvbiB0aGUgZGVmYXVsdCAnKycgb3BlcmF0b3IgKGFuZCBjYW4gYmUgYSBsb3QgbW9yZSBlZmZpY2llbnQgaW4gZmFjdCkuIEFsc28ga2VlcCBpbiBtaW5kIHRoYXQgY29kZSB0aGF0IGNhbGxzIExvZy52KCkgaXMgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIHJlbGVhc2UgYnVpbGRzLCBpbmNsdWRpbmcgYnVpbGRpbmcgdGhlIHN0cmluZ3MsIGV2ZW4gaWYgdGhlIGxvZ3MgYXJlbid0IGJlaW5nIHJlYWQuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK0FueSBsb2dnaW5nIHRoYXQgaXMgbWVhbnQgdG8gYmUgcmVhZCBieSBvdGhlciBwZW9wbGUgYW5kIHRvIGJlIGF2YWlsYWJsZSBpbiByZWxlYXNlIGJ1aWxkcyBzaG91bGQgYmUgdGVyc2Ugd2l0aG91dCBiZWluZyBjcnlwdGljLCBhbmQgc2hvdWxkIGJlIHJlYXNvbmFibHkgdW5kZXJzdGFuZGFibGUuIFRoaXMgaW5jbHVkZXMgYWxsIGxvZ2dpbmcgdXAgdG8gdGhlIERFQlVHIGxldmVsLgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+CitXaGVuIHBvc3NpYmxlLCBsb2dnaW5nIHNob3VsZCBiZSBrZXB0IG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgbWFrZXMgc2Vuc2UuIExpbmUgbGVuZ3RocyB1cCB0byA4MCBvciAxMDAgY2hhcmFjdGVycyBhcmUgcGVyZmVjdGx5IGFjY2VwdGFibGUsIHdoaWxlIGxlbmd0aHMgbG9uZ2VyIHRoYW4gYWJvdXQgMTMwIG9yIDE2MCBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgdGhlIGxlbmd0aCBvZiB0aGUgdGFnKSBzaG91bGQgYmUgYXZvaWRlZCBpZiBwb3NzaWJsZS4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorTG9nZ2luZyB0aGF0IHJlcG9ydHMgc3VjY2Vzc2VzIHNob3VsZCBuZXZlciBiZSB1c2VkIGF0IGxldmVscyBoaWdoZXIgdGhhbiBWRVJCT1NFLgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+CitUZW1wb3JhcnkgbG9nZ2luZyB0aGF0IGlzIHVzZWQgdG8gZGlhZ25vc2UgYW4gaXNzdWUgdGhhdCdzIGhhcmQgdG8gcmVwcm9kdWNlIHNob3VsZCBiZSBrZXB0IGF0IHRoZSBERUJVRyBvciBWRVJCT1NFIGxldmVsLCBhbmQgc2hvdWxkIGJlIGVuY2xvc2VkIGJ5IGlmIGJsb2NrcyB0aGF0IGFsbG93IHRvIGRpc2FibGUgaXQgZW50aXJlbHkgYXQgY29tcGlsZS10aW1lLgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+CitCZSBjYXJlZnVsIGFib3V0IHNlY3VyaXR5IGxlYWtzIHRocm91Z2ggdGhlIGxvZy4gUHJpdmF0ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgYXZvaWRlZC4gSW5mb3JtYXRpb24gYWJvdXQgcHJvdGVjdGVkIGNvbnRlbnQgbXVzdCBkZWZpbml0ZWx5IGJlIGF2b2lkZWQuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgd2hlbiB3cml0aW5nIGZyYW1ld29yayBjb2RlIGFzIGl0J3Mgbm90IGVhc3kgdG8ga25vdyBpbiBhZHZhbmNlIHdoYXQgd2lsbCBhbmQgd2lsbCBub3QgYmUgcHJpdmF0ZSBpbmZvcm1hdGlvbiBvciBwcm90ZWN0ZWQgY29udGVudC4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorU3lzdGVtLm91dC5wcmludGxuKCkgKG9yIHByaW50ZigpIGZvciBuYXRpdmUgY29kZSkgc2hvdWxkIG5ldmVyIGJlIHVzZWQuIFN5c3RlbS5vdXQgYW5kIFN5c3RlbS5lcnIgZ2V0IHJlZGlyZWN0ZWQgdG8gL2Rldi9udWxsLCBzbyB5b3VyIHByaW50IHN0YXRlbWVudHMgd2lsbCBoYXZlIG5vIHZpc2libGUgZWZmZWN0cy4gSG93ZXZlciwgYWxsIHRoZSBzdHJpbmcgYnVpbGRpbmcgdGhhdCBoYXBwZW5zIGZvciB0aGVzZSBjYWxscyBzdGlsbCBnZXRzIGV4ZWN1dGVkLgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+Cis8Yj5UaGUgZ29sZGVuIHJ1bGUgb2YgbG9nZ2luZyBpcyB0aGF0IHlvdXIgbG9ncyBtYXkgbm90IHVubmVjZXNzYXJpbHkgcHVzaCBvdGhlciBsb2dzIG91dCBvZiB0aGUgYnVmZmVyLCBqdXN0IGFzIG90aGVycyBtYXkgbm90IHB1c2ggb3V0IHlvdXJzLjwvYj4KKzwvcD4KKzxoMj4KK0phdmF0ZXN0cyBTdHlsZSBSdWxlcworPC9oMj4KKworPGgyPjxhPk5hbWluZyB0ZXN0IG1ldGhvZHM8L2E+Cis8L2gyPgorPGE+V2hlbiBuYW1pbmcgdGVzdCBtZXRob2RzLCB5b3UgY2FuIHVzZSBhbiB1bmRlcnNjb3JlIHRvIHNlcGVyYXRlIHdoYXQgaXMgYmVpbmcgdGVzdGVkIGZyb20gdGhlIHNwZWNpZmljIGNhc2UgYmVpbmcgdGVzdGVkLiBUaGlzIHN0eWxlIG1ha2VzIGl0IGVhc2llciB0byBzZWUgZXhhY3RseSB3aGF0IGNhc2VzIGFyZSBiZWluZyB0ZXN0ZWQuPC9hPgorPHA+PGE+RXhhbXBsZTo8L2E+Cis8L3A+Cis8cHJlPjxhPnRlc3RNZXRob2Rfc3BlY2lmaWNDYXNlMSA8YnI+dGVzdE1ldGhvZF9zcGVjaWZpY0Nhc2UyPC9hPgorPC9wcmU+CisKKzxwcmU+PGE+dm9pZCB0ZXN0SXNEaXN0aW5ndWlzaGFibGVfcHJvdGFub3BpYSgpIHs8YnI+Q29sb3JNYXRjaGVyIGNvbG9yTWF0Y2hlciA9IG5ldyBDb2xvck1hdGNoZXIoUFJPVEFOT1BJQSk8YnI+YXNzZXJ0RmFsc2UoY29sb3JNYXRjaGVyLmlzRGlzdGluZ3Vpc2hhYmxlKENvbG9yLlJFRCwgQ29sb3IuQkxBQ0spKTxicj5hc3NlcnRUcnVlKGNvbG9yTWF0Y2hlci5pc0Rpc3Rpbmd1aXNoYWJsZShDb2xvci5YLCBDb2xvci5ZKSk8YnI+fTwvYT4KKzwvcHJlPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2Rvd25sb2FkLmpkIGIvcGRrL2RvY3Mvc291cmNlL2Rvd25sb2FkLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NWE3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvZG93bmxvYWQuamQKQEAgLTAsMCArMSwzMDMgQEAKK3BhZ2UudGl0bGU9R2V0IEFuZHJvaWQgU291cmNlIENvZGUKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+PGJyPlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgeW91ciBsb2NhbCB3b3JrIGVudmlyb25tZW50LCBob3cgdG8gdXNlIFJlcG8gdG8gZ2V0IHRoZSBBbmRyb2lkIGZpbGVzLCBhbmQgaG93IHRvIGJ1aWxkIHRoZSBmaWxlcyBvbiB5b3VyIG1hY2hpbmUuPGJyPjxicj5SZWxhdGVkIHJlYWRpbmc6PGJyPjwvZGl2PgorPHVsPjxsaT5Gb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGVudGlyZSBjb2RlLXJldmlldyBhbmQgY29kZS11cGRhdGUgcHJvY2Vzcywgc2VlCis8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2xpZmUtb2YtYS1wYXRjaC5odG1sIj5MaWZlIG9mIGEgUGF0Y2g8L2E+CisuPC9saT4KKzxsaT5Gb3IgcmVmZXJlbmNlIGRldGFpbHMgYWJvdXQgUmVwbywgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPgorLjxicj48L2xpPgorPC91bD4KKzxoMj4KK1doYXQncyBpbiB0aGUgc291cmNlPzwvaDI+Cis8ZGl2PlRvIHNlZSBzbmFwc2hvdHMgYW5kIGhpc3RvcmllcyBvZiB0aGUgZmlsZXMgYXZhaWxhYmxlIGluIHRoZSBwdWJsaWMgQW5kcm9pZCByZXBvc2l0b3JpZXMsIHZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy8iPkdpdFdlYjwvYT4KK3dlYiBpbnRlcmZhY2UuPC9kaXY+Cis8ZGl2PjwvZGl2PgorPGRpdj5UaGUgc291cmNlIGlzIGFwcHJveGltZW50ZWx5IDIuMUdCIGluIHNpemUuWW91IHdpbGwgbmVlZCA2R0IgZnJlZSB0byBjb21wbGV0ZSB0aGUgYnVpbGQuPGJyPjxicj48L2Rpdj4KKzxoMj4KK1NldHRpbmcgdXAgeW91ciBtYWNoaW5lPC9oMj4KKzxkaXY+VG8gYnVpbGQgdGhlIEFuZHJvaWQgc291cmNlIGZpbGVzLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSBMaW51eCBvciBNYWMgT1MuIEJ1aWxkaW5nIHVuZGVyIFdpbmRvd3MgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuPC9kaXY+Cis8ZGl2Pjxicj48L2Rpdj4KKzxoMz4KK0xpbnV4PC9oMz4KK1RoZSBBbmRyb2lkIGJ1aWxkIGlzIHJvdXRpbmVseSB0ZXN0ZWQgb24gcmVjZW50IHZlcnNpb25zIG9mIFVidW50dSAoNi4wNiBhbmQgbGF0ZXIpLCBidXQgcmVwb3J0cyBvZiBzdWNjZXNzZXMgb3IgZmFpbHVyZXMgb24gb3RoZXIgZGlzdHJpYnV0aW9ucyBhcmUgd2VsY29tZS48YnI+PGg0PgorVWJ1bnR1IExpbnV4ICgzMi1iaXQgeDg2KTwvaDQ+Cis8ZGl2PlRvIHNldCB1cCB5b3VyIExpbnV4IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGZvbGxvd2luZzo8L2Rpdj4KKzxkaXY+PGRpdj48ZGl2Pjx1bD48bGk+UmVxdWlyZWQgUGFja2FnZXM6PC9saT4KKzx1bD48bGk+R2l0IDEuNS40IG9yIG5ld2VyIDxzcGFuPmFuZCB0aGUgR05VIFByaXZhY3kgR3VhcmQuPGJyPjwvc3Bhbj4KKzwvbGk+Cis8L3VsPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdj48ZGl2PjxkaXY+PGRpdj48dWw+PHVsPjxsaT5KREsgNS4wLCB1cGRhdGUgMTIgb3IgaGlnaGVyLkphdmEgNiBpcyBub3Qgc3VwcG9ydGVkLCBiZWNhdXNlIG9mIGluY29tcGF0aWJpbGl0aWVzIHdpdGggQE92ZXJyaWRlLjxicj48L2xpPgorPC91bD4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXY+PGRpdj48ZGl2PjxkaXY+PHVsPjx1bD48bGk+PHNwYW4+ZmxleCwgYmlzb24sIGdwZXJmLCBsaWJzZGwtZGV2LCBsaWJlc2QwLWRldiwgbGlid3hndGsyLjYtZGV2IChvcHRpb25hbCksIGJ1aWxkLWVzc2VudGlhbCwgemlwLCBjdXJsLjwvc3Bhbj4KKzwvbGk+Cis8L3VsPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGJsb2NrcXVvdGU+PHNwYW4+JCBzdWRvIGFwdC1nZXQgaW5zdGFsbDwvc3Bhbj4KKzxzcGFuPmdpdC1jb3JlIGdudXBnPC9zcGFuPgorPHNwYW4+c3VuLWphdmE1LWpkazwvc3Bhbj4KKzxzcGFuPmZsZXggYmlzb24gZ3BlcmYgPHNwYW4+bGlic2RsLWRldiBsaWJlc2QwLWRldjwvc3Bhbj4KK2xpYnd4Z3RrMi42LWRldiBidWlsZC1lc3NlbnRpYWwgemlwIDxzcGFuPmN1cmwgbGlibmN1cnNlczUtZGV2IHpsaWIxZy1kZXYgPGJyPjwvc3Bhbj4KKzwvc3Bhbj4KKzwvYmxvY2txdW90ZT4KKzxkaXY+PGRpdj48ZGl2PjxkaXY+PHVsPjxsaT48c3Bhbj48c3Bhbj5Zb3UgbWlnaHQgYWxzbyB3YW50IFZhbGdyaW5kLCBhIHRvb2wgdGhhdCB3aWxsIGhlbHAgeW91IGZpbmQgbWVtb3J5IGxlYWtzLCBzdGFjayBjb3JydXB0aW9uLCBhcnJheSBib3VuZHMgb3ZlcmZsb3dzLCBldGMuPC9zcGFuPgorPC9zcGFuPgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxibG9ja3F1b3RlPjxkaXY+PHNwYW4+JCBzdWRvIGFwdC1nZXQgaW5zdGFsbCB2YWxncmluZCA8YnI+PC9zcGFuPgorPC9kaXY+Cis8L2Jsb2NrcXVvdGU+Cis8dWw+PGxpPjxzcGFuPjxzcGFuPkludHJlcGlkICg8L3NwYW4+Cis8L3NwYW4+Cis4LjEwKSB1c2VycyBtYXkgbmVlZCBhIG5ld2VyIHZlcnNpb24gb2YgbGlicmVhZGxpbmU6PC9saT4KKzwvdWw+Cis8ZGl2PiQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbGliMzJyZWFkbGluZTUtZGV2IDxicj48L2Rpdj4KKzwvZGl2PgorPGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGg0PgorVWJ1bnR1IExpbnV4ICg2NC1iaXQgeDg2KTwvaDQ+CitUaGlzIGhhcyBub3QgYmVlbiBhcyB3ZWxsIHRlc3RlZC4gUGxlYXNlIHNlbmQgc3VjY2VzcyBvciBmYWlsdXJlIHJlcG9ydHMgdG8gPGEgaHJlZj0ibWFpbHRvOmFuZHJvaWQtcG9ydGluZ0Bnb29nbGVncm91cHMuY29tIj5hbmRyb2lkLXBvcnRpbmdAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4KKy48L2Rpdj4KKzxkaXY+PGJyPjwvZGl2PgorPGRpdj5UaGUgQW5kcm9pZCBidWlsZCByZXF1aXJlcyBhIDMyLWJpdCBidWlsZCBlbnZpcm9ubWVudCBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgdG9vbHM6PGJyPjwvZGl2PgorPGRpdj48dWw+PGxpPlJlcXVpcmVkIFBhY2thZ2VzOjwvbGk+Cis8dWw+PGxpPkdpdCwgSkRLLCBmbGV4LCBhbmQgdGhlIG90aGVyIHBhY2thZ2VzIGFzIGxpc3RlZCBhYm92ZSBpbiB0aGUgaTM4NiBpbnN0cnVjdGlvbnM6PHNwYW4+PGJyPjwvc3Bhbj4KKzwvbGk+Cis8bGk+SkRLIDUuMCwgdXBkYXRlIDEyIG9yIGhpZ2hlci5KYXZhIDYgaXMgbm90IHN1cHBvcnRlZCwgYmVjYXVzZSBvZiBpbmNvbXBhdGliaWxpdGllcyB3aXRoIEBPdmVycmlkZS48L2xpPgorPGxpPlBpZWNlcyBmcm9tIHRoZSAzMi1iaXQgY3Jvc3MtYnVpbGRpbmcgZW52aXJvbm1lbnQ8L2xpPgorPGxpPlgxMSBkZXZlbG9wbWVudCA8YnI+PC9saT4KKzwvdWw+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8YmxvY2txdW90ZT48c3Bhbj48c3Bhbj4kPC9zcGFuPgorc3VkbyBhcHQtZ2V0IGluc3RhbGwgZ2l0LWNvcmUgZ251cGcgZmxleCBiaXNvbiBncGVyZiBidWlsZC1lc3NlbnRpYWwgemlwIGN1cmw8L3NwYW4+CitzdW4tamF2YTUtamRrIDxzcGFuPjxzcGFuPnpsaWIxZy1kZXY8L3NwYW4+Cis8L3NwYW4+CitnY2MtbXVsdGlsaWIgZysrLW11bHRpbGliIGxpYmM2LWRldi1pMzg2IGxpYjMybmN1cnNlczUtZGV2IGlhMzItbGlicyB4MTFwcm90by1jb3JlLWRldiBsaWJ4MTEtZGV2IGxpYjMycmVhZGxpbmU1LWRldiBsaWIzMnotZGV2PC9ibG9ja3F1b3RlPgorPHVsPjxsaT5TZXQgdGhlIHN5c3RlbSB0byB1c2UgdGhlIHJpZ2h0IHZlcnNpb24gb2YgamF2YSBieSBkZWZhdWx0Ojxicj48YnI+JHN1ZG8gdXBkYXRlLWphdmEtYWx0ZXJuYXRpdmVzIC1zamF2YS0xLjUuMC1zdW4gPGJyPjwvbGk+Cis8L3VsPgorPHVsPjxsaT5YMTE6IFVidW50dSBkb2Vzbid0IGhhdmUgcGFja2FnZXMgZm9yIHRoZSBYMTEgbGlicmFyaWVzLCBidXQgdGhhdCBjYW4gYmUgd29ya2VkIGFyb3VuZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDo8YnI+PGJyPiQgc3VkbyBsbiAtcyAvdXNyL2xpYjMyL2xpYlgxMS5zby42IC91c3IvbGliMzIvbGliWDExLnNvIDxicj48YnI+PC9saT4KKzwvdWw+Cis8ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGg0PgorUnVubmluZyBMaW51eCBpbiBhIHZpcnR1YWwgbWFjaGluZTwvaDQ+CitJZiB5b3UgYXJlIHJ1bm5pbmcgTGludXggaW4gYSB2aXJ0dWFsIG1hY2hpbmUsIHlvdSB3aWxsIG5lZWQgYXQgbGVhc3QgMS41R0Igb2YgUkFNIGFuZCAxMEdCIG9yIG1vcmUgb2YgZGlzayBzcGFjZSBpbiBvcmRlciB0byBidWlsZCB0aGUgQW5kcm9pZCB0cmVlLjxicj48aDQ+CitPdGhlciBMaW51eDwvaDQ+Cis8cD5UaGVyZSdzIG5vIHJlYXNvbiB3aHkgQW5kcm9pZCBjYW5ub3QgYmUgYnVpbHQgb24gbm9uLVVidW50dSBzeXN0ZW1zLiBQbGVhc2Ugc2VuZCBhbnkgc3VjY2VzcyBvciBmYWlsdXJlIHJlcG9ydHMgdG8gPGEgaHJlZj0ibWFpbHRvOmFuZHJvaWQtcG9ydGluZ0Bnb29nbGVncm91cHMuY29tIj5hbmRyb2lkLXBvcnRpbmdAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4KKzxzcGFuPi4gSW4gZ2VuZXJhbCB5b3Ugd2lsbCBuZWVkOjwvc3Bhbj4KKzwvcD4KKzx1bD48bGk+UHl0aG9uIDIuNCwgd2hpY2ggeW91IGNhbiA8YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvIj5kb3dubG9hZCBmcm9tIHB5dGhvbi5vcmc8L2E+LjwvbGk+Cis8bGk+SkRLIDUuMCwgdXBkYXRlIDEyIG9yIGhpZ2hlciwgd2hpY2ggeW91IGNhbiA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2phdmFzZS9kb3dubG9hZHMvIj5kb3dubG9hZCBmcm9tIGphdmEuc3VuLmNvbTwvYT4uIEphdmEgNiBpcyBub3Qgc3VwcG9ydGVkLCBiZWNhdXNlIG9mIGluY29tcGF0aWJpbGl0aWVzIHdpdGggQE92ZXJyaWRlLjwvbGk+Cis8bGk+R2l0IDEuNS40IG9yIG5ld2VyLiBZb3UgY2FuIGZpbmQgaXQgYXQgPGEgaHJlZj0iaHR0cDovL2dpdC5vci5jei8iPmh0dHA6Ly9naXQub3IuY3ovPC9hPi48L2xpPgorPC91bD4KKzxwPkFueXRoaW5nIG1pc3NpbmcgZnJvbSB0aGlzIGxpc3Q/IFBsZWFzZSBsZXQgdXMga25vdyE8L3A+Cis8aDQ+Cis8c3Bhbj48YnI+PC9zcGFuPgorPC9oND4KKzwvZGl2PgorPGRpdj48aDM+CitNYWMgT1MgPGJyPjwvaDM+Cis8L2Rpdj4KKzxkaXY+PHA+PHNwYW4+UmVxdWlyZW1lbnRzOjwvc3Bhbj4KKzwvcD4KKzx1bD48bGk+PHNwYW4+VG8gYnVpbGQgdGhlIEFuZHJvaWQgZmlsZXMgaW4gYSBNYWMgT1MgZW52aXJvbm1lbnQsIHlvdSBuZWVkIGFuIEludGVsL3g4NiBtYWNoaW5lIHJ1bm5pbmcgTWFjT1MgMTAuNCAoIlRpZ2VyIikgb3IgMTAuNSAoIkxlb3BhcmQiKS4gQXQgdGhlIG1vbWVudCBNYWNPUyAxMC42ICgiU25vdyBMZW9wYXJkIikgaXMgbm90IHN1cHBvcnRlZC4gVGhlIEFuZHJvaWQgYnVpbGQgc3lzdGVtIGFuZCB0b29scyBkbyBub3Qgc3VwcG9ydCB0aGUgb2Jzb2xldGUgUG93ZXJQQyBhcmNoaXRlY3R1cmUuPC9zcGFuPgorPC9saT4KKzxsaT48c3Bhbj5BbmRyb2lkIG11c3QgYmUgYnVpbHQgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbS48YnI+PC9zcGFuPgorPC9saT4KKzx1bD48bGk+V2UgcmVjb21tZW5kIHRoYXQgeW91IGJ1aWxkIEFuZHJvaWQgb24gYSBwYXJ0aXRpb24gdGhhdCBoYXMgYmVlbiBmb3JtYXR0ZWQgd2l0aCB0aGUgIkNhc2Utc2Vuc2l0aXZlIEpvdXJuYWxlZCBIRlMrIiBmaWxlIHN5c3RlbTo8L2xpPgorPHVsPjxsaT5BIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIHNvdXJjZXMgY29udGFpbiBmaWxlcyB0aGF0IGRpZmZlciBvbmx5IGluIGNhc2UuPC9saT4KKzxsaT5Kb3VybmFsZWQgc3lzdGVtcyBhcmUgbW9yZSByb2J1c3QuIChUaGlzIGlzIG9wdGlvbmFsLCBidXQgcmVjb21tZW5kZWQuKTwvbGk+Cis8bGk+SEZTKyBpcyByZXF1aXJlZCB0byBzdWNjZXNzZnVsbHkgYnVpbGQgTWFjIE9TIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHRoZSBBbmRyb2lkIEVtdWxhdG9yIGZvciBPUyBYLjwvbGk+Cis8L3VsPgorPGxpPklmIHlvdSB3YW50IHRvIGF2b2lkIHBhcnRpdGlvbmluZy9mb3JtYXR0aW5nIHlvdXIgaGFyZCBkcml2ZSwgeW91IGNhbiB1c2UgYSBjYXNlLXNlbnNpdGl2ZSBkaXNrIGltYWdlIGluc3RlYWQuPC9saT4KKzx1bD48bGk+VG8gY3JlYXRlIHRoZSBpbWFnZTo8YnI+PHVsPjxsaT5sYXVuY2ggL0FwcGxpY2F0aW9ucy9VdGlsaXRpZXMvRGlzayBVdGlsaXR5PC9saT4KKzxsaT5zZWxlY3QgIk5ldyBJbWFnZSI8L2xpPgorPGxpPnNpemU6IDggR0IgKHRoaXMgd2lsbCB3b3JrLCBidXQgeW91IGNhbiBjaG9vc2UgbW9yZSBpZiB5b3Ugd2FudCB0byk8L2xpPgorPGxpPnZvbHVtZSBmb3JtYXQ6IGNhc2Ugc2Vuc2l0aXZlLCBqb3VybmFsZWQ8L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+VGhpcyB3aWxsIGNyZWF0ZSBhIC5kbWcgZmlsZSB3aGljaCwgb25jZSBtb3VudGVkLCBhY3RzIGFzIGEgZHJpdmUgd2l0aCB0aGUgcmVxdWlyZWQgZm9ybWF0dGluZyBmb3IgQW5kcm9pZCBkZXZlbG9wbWVudC4gRm9yIGEgZGlzayBpbWFnZSBuYW1lZCAiYW5kcm9pZC5kbWciIHN0b3JlZCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LCB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgfi8uYmFzaF9wcm9maWxlIHRvIG1vdW50IHRoZSBpbWFnZSB3aGVuIHlvdSBleGVjdXRlICJtb3VudEFuZHJvaWQiOjxicj48YnI+PGRpdj4jIGNvbW1hbmQgdG8gbW91bnQgdGhlIGFuZHJvaWQgZmlsZSBpbWFnZSA8YnI+ZnVuY3Rpb24gbW91bnRBbmRyb2lkeyBoZGl1dGlsIGF0dGFjaCB+L2FuZHJvaWQuZG1nLW1vdW50cG9pbnQgL1ZvbHVtZXMvYW5kcm9pZDsgfTxicj48L2Rpdj4KKzxicj5PbmNlIG1vdW50ZWQsIHlvdSdsbCBkbyBhbGwgeW91ciB3b3JrIGluIHRoZSAiYW5kcm9pZCIgdm9sdW1lLiBZb3UgY2FuIGVqZWN0IGl0ICh1bm1vdW50IGl0KSBqdXN0IGxpa2UgeW91IHdvdWxkIHdpdGggYW4gZXh0ZXJuYWwgZHJpdmUuPC9saT4KKzwvdWw+Cis8L3VsPgorPC91bD4KKzx1bD48L3VsPgorVG8gc2V0IHVwIHlvdXIgTWFjIE9TIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBmb2xsb3cgdGhlc2Ugc3RlcHM6PGJyPjxvbD48bGk+SW5zdGFsbCB0aGUgWENvZGUgdmVyc2lvbiAyLjQgb3IgbGF0ZXIgZnJvbSA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS8iPmh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tPC9hPi4gV2UgcmVjb21tZW5kIHZlcnNpb24gMy4wIG9yIG5ld2VyLjxicj48L2xpPgorPGxpPkluc3RhbGwgTWFjUG9ydHMuIFRvIGRvIHRoaXM6PC9saT4KKzxvbD48bGk+RG93bmxvYWQgdGhlIHRhciBmaWxlIGZyb20gPGEgaHJlZj0iaHR0cDovL3d3dy5tYWNwb3J0cy5vcmcvIj5odHRwOi8vd3d3Lm1hY3BvcnRzLm9yZy88L2E+IGFuZCB1bnRhciB0aGUgZmlsZXMuPC9saT4KKzxsaT5SdW4gdGhlIGZvbGxvd2luZzo8c3Bhbj48YnI+JCAuL2NvbmZpZ3VyZSA8YnI+PC9zcGFuPgorPHNwYW4+JDwvc3Bhbj4KKzxzcGFuPm1ha2UgPGJyPjwvc3Bhbj4KKzxzcGFuPiQ8L3NwYW4+Cis8c3Bhbj5zdWRvIG1ha2UgaW5zdGFsbDwvc3Bhbj4KKzwvbGk+Cis8bGk+TWFrZSBzdXJlIHRoYXQgL29wdC9sb2NhbC9iaW4gaXMgaW4geW91ciBwYXRoIGJlZm9yZSAvdXNyL2Jpbi4gYnkgcnVubmluZyA8YnI+JCBlY2hvICRQQVRIIDxicj5JZiB5b3UgZG9uJ3Qgc2VlIC9vcHQvbG9jYWwvYmluLCBlZGl0ICRIT01FLy5iYXNoX3Byb2ZpbGUgYW5kIGFkZCB0aGUgbGluZSA8YnI+ZXhwb3J0IFBBVEg9L29wdC9sb2NhbC9iaW46JFBBVEggPGJyPihvciB0aGUgZXF1aXZhbGVudCBmb3Igb3RoZXIgc2hlbGxzKSBhZnRlciBhbnkgb3RoZXIgUEFUSC1yZWxhdGVkIGxpbmVzLjxzcGFuPlRvIHZlcmlmeSB0aGF0IHlvdXIgcGF0aCBpcyBub3cgY29ycmVjdCwgbzwvc3Bhbj4KK3BlbiBhIG5ldyB0ZXJtaW5hbCBhbmQgPHNwYW4+cnVuPC9zcGFuPgorZWNobyAkUEFUSCA8c3Bhbj5hZ2Fpbjwvc3Bhbj4KKy48L2xpPgorPGxpPkFzayBNYWNQb3J0cyB0byB1cGRhdGUgaXRzZWxmOjxicj48c3Bhbj48L3NwYW4+Cis8c3Bhbj4kPC9zcGFuPgorPHNwYW4+c3VkbyBwb3J0IHNlbGZ1cGRhdGU8L3NwYW4+Cis8YnI+PC9saT4KKzwvb2w+Cis8bGk+R2V0IHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgZnJvbSBwb3J0Ojxicj4kPHNwYW4+UE9TSVhMWV9DT1JSRUNUPTE8L3NwYW4+CitzdWRvIHBvcnQgaW5zdGFsbCBnbWFrZSBsaWJzZGwgZ2l0LWNvcmUgZ251cGcgPGJyPjxzcGFuPklmIHVzaW5nIE1hYyBPUyAxMC40LCBhbHNvIGluc3RhbGw6PGJyPiQ8c3Bhbj5QT1NJWExZX0NPUlJFQ1Q9MTwvc3Bhbj4KK3N1ZG8gcG9ydCBpbnN0YWxsIGJpc29uIDxicj48L3NwYW4+Cis8L2xpPgorPGxpPlVwZ3JhZGUgR05VIG1ha2UgdG8gMy44MSBvciBsYXRlciBieSBydW5uaW5nLk1hYyBPUyBkb2Vzbid0IGNvbWUgd2l0aCBhIHJlY2VudCBlbm91Z2ggdmVyc2lvbi48YnI+JCBzdWRvIGxuIC1zIGdtYWtlIC9vcHQvbG9jYWwvYmluL21ha2UgPGJyPjwvbGk+Cis8bGk+U2V0IGFuIGFwcHJvcHJpYXRlIHBlci1wcm9jZXNzIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4gVG8gZG8gdGhpcywgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciA8aT48c3Bhbj4uYmFzaF9wcm9maWxlPC9zcGFuPgorPC9pPgorZmlsZTo8YnI+IyBzZXQgdGhlIG51bWJlciBvZiBvcGVuIGZpbGVzIHRvIGJlIDEwMjQ8YnI+dWxpbWl0IC1TIC1uIDEwMjQ8L2xpPgorPC9vbD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXY+PGJyPjwvZGl2PgorPGgyPgorSW5zdGFsbGluZyBSZXBvIDxicj48L2gyPgorPGRpdj48cD5SZXBvIGlzIGEgdG9vbCB0aGF0IG1ha2VzIGl0IGVhc2llciB0byB3b3JrIHdpdGggR2l0IGluIHRoZSBjb250ZXh0IG9mCitBbmRyb2lkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBSZXBvLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPgorLjxicj48L3A+CitUbyBpbnN0YWxsLCBpbml0aWFsaXplLCBhbmQgY29uZmlndXJlIFJlcG8sIGZvbGxvdyB0aGVzZSBzdGVwczo8YnI+PGJyPjwvZGl2PgorPG9sPjxsaT48c3Bhbj5NYWtlIHN1cmUgeW91IGhhdmUgYX4vYmluZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXJlY3RvcnksIGFuZCBjaGVjayB0byBiZSBzdXJlIHRoYXQgdGhpcyBiaW4gZGlyZWN0b3J5IGlzIGluIHlvdXIgcGF0aDo8L3NwYW4+Cis8YnI+JCBjZH48YnI+PHNwYW4+PHNwYW4+JCBta2RpciBiaW4gPGJyPiQgZWNobyAkUEFUSCA8YnI+PC9zcGFuPgorPC9zcGFuPgorPC9saT4KKzxsaT48c3Bhbj5Eb3dubG9hZCB0aGVyZXBvc2NyaXB0IGFuZCBtYWtlIHN1cmUgaXQgaXMgZXhlY3V0YWJsZTo8L3NwYW4+Cis8YnI+JCBjdXJsIGh0dHA6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnL3JlcG9+L2Jpbi9yZXBvIDxkaXY+JCBjaG1vZCBhK3ggfi9iaW4vcmVwbzwvZGl2PgorPC9saT4KKzwvb2w+Cis8L2Rpdj4KKzxkaXY+PHA+PGJyPjwvcD4KKzxoMj4KK0luaXRpYWxpemluZyBhIFJlcG8gY2xpZW50IDxicj48L2gyPgorPC9kaXY+Cis8ZGl2PjxvbD48bGk+PHNwYW4+Q3JlYXRlIGFuIGVtcHR5IGRpcmVjdG9yeSB0byBob2xkIHlvdXIgd29ya2luZyBmaWxlczo8L3NwYW4+Cis8c3Bhbj48YnI+PC9zcGFuPgorPHNwYW4+JCBta2RpciBteWRyb2lkPC9zcGFuPgorPGJyPjxzcGFuPiQgY2QgbXlkcm9pZDwvc3Bhbj4KKzxicj48L2xpPgorPGxpPjxzcGFuPlJ1bnJlcG8gaW5pdHRvIGJyaW5nIGRvd24gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFJlcG8gd2l0aCBhbGwgaXRzIG1vc3QgcmVjZW50IGJ1ZyBmaXhlcy4gWW91IG11c3Qgc3BlY2lmeSBhIFVSTCBmb3IgdGhlIG1hbmlmZXN0Ojwvc3Bhbj4KKzxicj48c3Bhbj4kIHJlcG8gaW5pdDwvc3Bhbj4KKy11IGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3QuZ2l0PC9saT4KKzx1bD48bGk+PHNwYW4+SWYgeW91IHdvdWxkIGxpa2UgdG8gY2hlY2sgb3V0IGEgYnJhbmNoIG90aGVyIHRoYW4gIm1hc3RlciIsIHNwZWNpZnkgaXQgd2l0aCAtYiwgbGlrZTo8L3NwYW4+Cis8YnI+PHNwYW4+JCByZXBvIGluaXQ8L3NwYW4+CistdSBnaXQ6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnL3BsYXRmb3JtL21hbmlmZXN0LmdpdCAtYiBjdXBjYWtlIDxicj48L2xpPgorPC91bD4KKzxsaT48c3Bhbj5XaGVuIHByb21wdGVkLCBjb25maWd1cmUgUmVwbyB3aXRoIHlvdXIgcmVhbCBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzLiBJZiB5b3UgcGxhbiB0byBzdWJtaXQgY29kZSwgdXNlIGFuIGVtYWlsIGFkZHJlc3MgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSA8YSBocmVmPSJodHRwczovL3d3dy5nb29nbGUuY29tL2FjY291bnRzIj5Hb29nbGUgYWNjb3VudDwvYT4KKy48L3NwYW4+Cis8YnI+PC9saT4KKzwvb2w+Cis8c3Bhbj48c3Bhbj5BIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gd2lsbCBlbmQgd2l0aCBhIG1lc3NhZ2Ugc3VjaCBhczwvc3Bhbj4KKzxicj48c3Bhbj5yZXBvPC9zcGFuPgoraW5pdGlhbGl6ZWQgaW4gL215ZHJvaWQ8L3NwYW4+Cis8YnI+PHNwYW4+PHNwYW4+PGJyPllvdXIgY2xpZW50IGRpcmVjdG9yeSBzaG91bGQgbm93IGNvbnRhaW4gYS5yZXBvZGlyZWN0b3J5IHdoZXJlIGZpbGVzIHN1Y2ggYXMgdGhlIG1hbmlmZXN0IHdpbGwgYmUga2VwdC48L3NwYW4+Cis8YnI+PGJyPjwvc3Bhbj4KKzxzcGFuPjxzcGFuPjxiPldoYXQgd2lsbCBteSBuYW1lIGFuZCBlbWFpbCBiZSB1c2VkIGZvcj88L2I+Cis8YnI+PC9zcGFuPgorPHNwYW4+PGJyPlRvIHVzZSB0aGUgR2Vycml0IGNvZGUtcmV2aWV3IHRvb2wsPC9zcGFuPgorPHNwYW4+eW91IHdpbGwgbmVlZCBhbiBlbWFpbCBhZGRyZXNzIHRoYXQgaXMgY29ubmVjdGVkIHdpdGggYSA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vYWNjb3VudHMiPnJlZ2lzdGVyZWQgR29vZ2xlIGFjY291bnQ8L2E+Cisod2hpY2ggZG9lcyBub3QgaGF2ZSB0byBiZSBhIEdtYWlsIGFkZHJlc3MpLiBNYWtlIHN1cmUgdGhpcyBpczwvc3Bhbj4KKzxzcGFuPmEgbGl2ZSBhZGRyZXNzPC9zcGFuPgorPHNwYW4+YXQgd2hpY2ggeW91IGNhbiByZWNlaXZlIG1lc3NhZ2VzPC9zcGFuPgorPHNwYW4+Ljwvc3Bhbj4KKzxzcGFuPlRoZSByZWFsIG5hbWUgdGhhdCB5b3UgcHJvdmlkZSBoZXJlIHdpbGwgc2hvdyB1cCBpbiBhdHRyaWJ1dGlvbnMgZm9yIHlvdXIgY29kZSBzdWJtaXNzaW9ucy48L3NwYW4+Cis8L3NwYW4+Cis8YnI+PC9kaXY+Cis8c3Bhbj48cD48Yj5XaGF0IGlzIGEgbWFuaWZlc3QgZmlsZT88L2I+Cis8L3A+Cis8cD48c3Bhbj5UaGUgQW5kcm9pZCBzb3VyY2UgZmlsZXMgYXJlIGRpdmlkZWQgYW1vbmcgYSBudW1iZXIgb2YgZGlmZmVyZW50IHJlcG9zaXRvcmllcy48L3NwYW4+Cis8c3Bhbj5BIG1hbmlmZXN0PC9zcGFuPgorPHNwYW4+ZmlsZSBjb250YWlucyBhIG1hcHBpbmcgb2Ygd2hlcmUgdGhlIGZpbGVzIGZyb20gdGhlc2UgcmVwb3NpdG9yaWVzIHdpbGwgYmUgcGxhY2VkIHdpdGhpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHc8L3NwYW4+Cis8c3Bhbj5oZW4geW91IHN5bmNocm9uaXplIHlvdXIgZmlsZXMuPGJyPjwvc3Bhbj4KKzwvcD4KKzxwPjxzcGFuPjxicj48L3NwYW4+Cis8L3A+Cis8L3NwYW4+Cis8aDI+CitHZXR0aW5nIHRoZSBmaWxlczwvaDI+Cis8ZGl2PjxzcGFuPjxzcGFuPlRvIHB1bGwgZG93biBmaWxlcyB0byB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGZyb20gdGhlIHJlcG9zaXRvcmllcyBhcyBzcGVjaWZpZWQgaW4gdGhlIGRlZmF1bHQgbWFuaWZlc3QsIHJ1bjwvc3Bhbj4KKzxicj48YnI+JCByZXBvIHN5bmMgPGk+PGJyPjwvaT4KKzxicj48c3Bhbj5Gb3IgbW9yZSBhYm91dHJlcG8gc3luY2FuZCBvdGhlciBSZXBvIGNvbW1hbmRzLCBzZWU8L3NwYW4+Cis8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2dpdC1yZXBvLmh0bWwiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4KKzxzcGFuPi48L3NwYW4+Cis8YnI+PGJyPjxzcGFuPlRoZSBBbmRyb2lkIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGxvY2F0ZWQgaW4geW91ciB3b3JraW5nCitkaXJlY3RvcnkgdW5kZXIgdGhlaXIgcHJvamVjdCBuYW1lcy48L3NwYW4+Cis8L3NwYW4+Cis8YnI+PC9kaXY+Cis8c3Bhbj48aDI+Cis8YnI+PC9oMj4KKzxoMj4KK1ZlcmlmeWluZyBHaXQgVGFnczwvaDI+Cis8c3Bhbj5Mb2FkIHRoZSBmb2xsb3dpbmcgcHVibGljIGtleSBpbnRvIHlvdXIgR251UEcga2V5IGRhdGFiYXNlLlRoZSBrZXkgaXMgdXNlZCB0byBzaWduIGFubm90YXRlZCB0YWdzIHRoYXQgcmVwcmVzZW50IHJlbGVhc2VzLjwvc3Bhbj4KKzxicj48YnI+PC9zcGFuPgorPHNwYW4+JCBncGcgLS1pbXBvcnQgPGJyPjxicj48L3NwYW4+Cis8c3Bhbj48c3Bhbj50aGVuIHBhc3RlIHRoZSBrZXkocykgYmVsb3csIGFuZCBwcmVzcyBDb250cm9sLUQgdG8gZW5kIHRoZSBpbnB1dCBhbmQgcHJvY2VzcyB0aGUga2V5cy48L3NwYW4+CitBZnRlciBpbXBvcnRpbmcgdGhlIGtleXMsIHlvdSBjYW4gdmVyaWZ5IGFueSB0YWcgd2l0aCA8YnI+PGJyPjwvc3Bhbj4KKzxzcGFuPiQgZ2l0IHRhZyAtdiA8aT50YWduYW1lPC9pPgorPC9zcGFuPgorPHNwYW4+PGJyPjxicj48Yj48dT5rZXkgOUFCMTBFNzg6ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0aW5pdGlhbC1jb250cmlidXRpb25AYW5kcm9pZC5jb20iPC91PgorPC9iPgorPGJyPjwvc3Bhbj4KKzxwcmU+LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tPGJyPlZlcnNpb246IEdudVBHIHYxLjQuMi4yIChHTlUvTGludXgpPGJyPjxicj5tUUdpQkVubldENFJCQUN0OS9oNHY5eG5uR0RvdTEzeTNkdk94Ni90NDNMUFBJeGVKOGVYOVdCKzhMTHVST1NWIDxicj5sRmhwSGF3c1ZBY0ZsbWk3ZjdqZFNSRitPdnRaTDlTaFBLZExmd0JKTU5rVTY2L1RabVBld1M0bTc4Mm5kdHc3PGJyPjh0UjFjWGIxOTdPYjhrT2ZRQjNBOXlrMlhaNGVpNFpDM2k2d1ZkcUhMUnhBQmRuY3d1NWhPRjlLWHdDZ2t4TUQgPGJyPnU0UFZnQ2hhQUp6VFlKMUVHK1VZQklVRUFKbWZlYXJiMHFSQU43ZEVvZmYwRmVYc0VhVUE2VTkwc0VvVmtzMFogPGJyPndOajk2U0E4QkwrYTFPb0VVVWZwTWhpSHlMdVFTZnR4aXNKeFRoKzJRY2x6RHZpRHlhVHJrQU5qZFlZN3AyY3EgPGJyPi9ITWRPWTdMSmxIYXF0WG1aeFhqanR3NVVjMlFHOFVZOGF6aVUzSUU5blRqU3dDWGVKbnV5dm9pemw5L0kxUzU8YnI+alU1U0EvOVd3SXBzNFNDODRpZWxJWGlHV0VxcTZpNi9zazRJOXExWWVtWkYyWFZWS25tSTFGNGlDTXROS3NSNDxicj5NR1NhMWdBOHM0aVFic0tOV1BncDdNM2E1MUpDVkN1NmwvOHpUcEErdVVHYXB3NHRXQ3A0bzBkcEl2RFBCRWE5PGJyPmIvYUYveWdjUjhtaDVoZ1VmcEY5SXBYZGtuT3NiS0N2TTlsU1NmUmNpRVR5a1pjNHdyUkNWR2hsSUVGdVpISnYgPGJyPmFXUWdUM0JsYmlCVGIzVnlZMlVnVUhKdmFtVmpkQ0E4YVc1cGRHbGhiQzFqYjI1MGNtbGlkWFJwYjI1QVlXNWsgPGJyPmNtOXBaQzVqYjIwK2lHQUVFeEVDQUNBRkFrbm5XRDRDR3dNR0N3a0lCd01DQkJVQ0NBTUVGZ0lEQVFJZUFRSVggPGJyPmdBQUtDUkRvclQrQm1yRU9lTnIrQUo0Mlh5NnRFVzdyM0t6ckp4blJYOG1pajl6OHRnQ2RGZlFZaUhwWW5na0kgPGJyPjJ0MDlFZCs5Qm00Z21FTzVBZzBFU2VkWVJCQUlBS1ZXMUpjTUJXdlYvMEJvOVdpQnlKOVdKNXN3TU4zNi92QWwgPGJyPlFONG1XUmhmekRPay9Sb3NkYjBjc0FPL2w4S3owZ0tRUE9mT2J0eVlqdkk4Sk1DM3JtaStMSXZTVVQ5ODA2VXAgPGJyPmhpc3lFbW1IdjZVOGdVYi94SExJYW5YR3h3aFl6amdldUFYVkNzditFdm9QSUhiWTRML0t2UDV4K29DSklEYmsgPGJyPkMyYjFUdlZrOVByeXptRTRCUElRTC9OdGdSMW9MV20vdVdSOXpSVUZ0Qm5FNDExYU1BTjNxbkFIQkJNWnpLTVggPGJyPkxXQkdXRTB6bmZScm5jekk1cDQ5aTJZWkpBanlYMVAyV3ptU2NLNDlDVjgyZHpMbzcxTW5yRjZmaitVZHRiNSs8YnI+T2dUZzdDb3crOFBSYVRrSkVXNVkySklacG5SVXEwQ1l4QW1IWVg3OUVNS0hEU1RoZi84QUF3VUlBSlBXc0IvTSA8YnI+cEsrS01zL3MzcjZuSnJuWUxUZmRaaHRtUVhpbXBvRE1KZzF6eG1MOFVmTlVLaVFaNmVzb0FXdERncHF0N1k3cyA8YnI+S1o4bGFIUkFSb250ZTM5NGhpZFp6TTVuYjZoUXZwUGp0Mk9sUFJzeXFWeHc0Yy9Lc2pBRHRBdUtXOS9kOHBoYiA8YnI+TjhiVHlPSm84NTZxZzRvT0V6S0c5ZWVGN29hWlRZQnkzM0JUTDA0MDhzRUJ4aU1pb3I2YjhMclpyQWhrcURqQSA8YnI+dlVYUndtL2ZGS2dwc095c3hDNnhpNTUzQ3hCVUNIMm9tTlY2S2ExTE5Nd3pTcDlJTHo4akVHcW1VdGtCc3p3byA8YnI+RzFTOGZYZ0UwTHEzY2RETS9HSjRRWFAvcDZMaXdORjk5ZmFETVRWMysyU0FPR3Z5dE9YNktqS1Z6S09Tc2ZKUSA8YnI+aE4wRGxzSXc4aHFKYzBXSVNRUVlFUUlBQ1FVQ1NlZFlSQUliREFBS0NSRG9yVCtCbXJFT2VDVU9BSjlxbVIwbCA8YnI+RVh6ZW94Y2RvYWZ4cWY2Z1psSlpsQUNna1dGN3dpMllMVzNPYStqdjJRU1Rscng0S0xNPTxicj49V2k1RCA8YnI+LS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLTxicj48L3ByZT4KKzxzcGFuPjxicj48aDI+CitCdWlsZGluZyB0aGUgY29kZTwvaDI+Cis8c3Bhbj5UbyBidWlsZCB0aGUgZmlsZXMsIHJ1bm1ha2Vmcm9tIHdpdGhpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5Ojwvc3Bhbj4KKzxicj48c3Bhbj4kIGNkIH4vbXlkcm9pZDwvc3Bhbj4KKzxzcGFuPjxicj4kIG1ha2U8L3NwYW4+Cis8YnI+PC9zcGFuPgorPHA+SWYgeW91ciBidWlsZCBmYWlscywgY29tcGxhaW5pbmcgYWJvdXQgYSBtaXNzaW5nICJydW4tamF2YS10b29sIiwgdHJ5IHNldHRpbmcgdGhlIEFORFJPSURfSkFWQV9IT01FIGVudiB2YXIgdG8gJEpBVkFfSE9NRSBiZWZvcmUgbWFraW5nLkUuZy4sPC9wPgorPHA+JCBleHBvcnQgQU5EUk9JRF9KQVZBX0hPTUU9JEpBVkFfSE9NRTwvcD4KKzxoMj4KK1VzaW5nIGFuIElERTwvaDI+Cis8dWw+PGxpPjxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvdXNpbmctZWNsaXBzZS5odG1sIj5Vc2luZyBFY2xpcHNlPC9hPgorZm9yIEFuZHJvaWQgcGxhdGZvcm0gZGV2ZWxvcG1lbnQgPGJyPjwvbGk+Cis8L3VsPgorPGgyPgorVHJvdWJsZXNob290aW5nPC9oMj4KKzxwPjxzcGFuPjxiPkltcG9ydEVycm9yOiBObyBtb2R1bGUgbmE8L2I+Cis8c3Bhbj48Yj5tZWQ8L2I+Cis8L3NwYW4+Cis8c3Bhbj48Yj5yZWFkbGluZTwvYj4KKzwvc3Bhbj4KKzxiPjxicj48L2I+Cis8L3NwYW4+Cis8L3A+Cis8cD48c3Bhbj5NYWMgdXNlcnMgZ2V0dGluZyB0aGlzIHNob3VsZCBpbnN0YWxsIFB5dGhvbiAyLjUuMi48L3NwYW4+Cis8L3A+Cis8cD48c3Bhbj5MaW51eCB1c2VycyB0aGF0IGluc3RhbGxlZCBQeXRob24gZnJvbSBzb3VyY2UsIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBsaWJyZWFkbGluZSBhcmUgaW5zdGFsbGVkLCBhbmQgcmVidWlsZCBQeXRob24uPC9zcGFuPgorPC9wPgorPHNwYW4+PGgyPgorV2hhdCdzIG5leHQ/PC9oMj4KKzwvc3Bhbj4KKzxzcGFuPlRvIGxlYXJuIGFib3V0IHJlcG9ydGluZyBhbiBpc3N1ZSBhbmQgc2VhcmNoaW5nIHByZXZpb3VzbHkgcmVwb3J0ZWQgaXNzdWVzLDwvc3Bhbj4KKzxzcGFuPnNlZTwvc3Bhbj4KKzxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvcmVwb3J0LWJ1Z3MuaHRtbCI+UmVwb3J0IGJ1Z3M8L2E+Cis8c3Bhbj4uPC9zcGFuPgorPHNwYW4+Rm9yIGluZm9ybWF0aW9uIGFib3V0IGVkaXRpbmcgdGhlIGZpbGVzIGFuZCB1cGxvYWRpbmcgY2hhbmdlcyB0byB0aGUKK2NvZGUtcmV2aWV3IHNlcnZlciwgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2Uvc3VibWl0LXBhdGNoZXMuaHRtbCI+Q29udHJpYnV0ZTwvYT4KKy48L3NwYW4+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9naXQtcmVwby5qZCBiL3Bkay9kb2NzL3NvdXJjZS9naXQtcmVwby5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzdmZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2dpdC1yZXBvLmpkCkBAIC0wLDAgKzEsMzIwIEBACitwYWdlLnRpdGxlPVVzaW5nIFJlcG8gYW5kIEdpdAorZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPHA+VG8gd29yayB3aXRoIHRoZSBBbmRyb2lkIGNvZGUsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIGJvdGggR2l0IGFuZCBSZXBvLjxicj48L3A+Cis8dWw+PGxpPjxpPkdpdDwvaT4KK2lzIGFuIG9wZW4tc291cmNlIHZlcnNpb24tY29udHJvbCBzeXN0ZW0gZGVzaWduZWQgdG8gaGFuZGxlIHZlcnkgbGFyZ2UgcHJvamVjdHMgdGhhdCBhcmUgZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSByZXBvc2l0b3JpZXMuIEluIHRoZSBjb250ZXh0IG9mIEFuZHJvaWQsIHdlIHVzZSBHaXQgZm9yIGxvY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBsb2NhbCBicmFuY2hpbmcsIGNvbW1pdHMsIGRpZmZzLCBhbmQgZWRpdHMuPGJyPjxicj48L2xpPgorPGxpPjxpPlJlcG88L2k+CitpcyBhIHRvb2wgdGhhdCB3ZSBidWlsdCBvbiB0b3Agb2YgR2l0LiBSZXBvIGhlbHBzIHVzIG1hbmFnZSB0aGUgbWFueSBHaXQgcmVwb3NpdG9yaWVzLCBkb2VzIHRoZSB1cGxvYWRzIHRvIG91ciA8YSBocmVmPSJodHRwOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8iPnJldmlzaW9uIGNvbnRyb2wgc3lzdGVtPC9hPgorLCBhbmQgYXV0b21hdGVzIHBhcnRzIG9mIHRoZSBBbmRyb2lkIGRldmVsb3BtZW50IHdvcmtmbG93LiBSZXBvIGlzIG5vdCBtZWFudCB0byByZXBsYWNlIEdpdCwgb25seSB0byBtYWtlIGl0IGVhc2llciB0byB3b3JrIHdpdGggR2l0IGluIHRoZSBjb250ZXh0IG9mIEFuZHJvaWQuIFRoZSByZXBvY29tbWFuZCBpcyBhbiBleGVjdXRhYmxlIFB5dGhvbiBzY3JpcHQgdGhhdCB5b3UgY2FuIHB1dCBhbnl3aGVyZSBpbiB5b3VyIHBhdGguPGk+PGJyPjxicj48L2k+CitJbiB3b3JraW5nIHdpdGggdGhlIEFuZHJvaWQgc291cmNlIGZpbGVzLCB5b3Ugd2lsbCB1c2UgUmVwbyBmb3IgYWNyb3NzLW5ldHdvcmsgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIHdpdGggYSBzaW5nbGUgUmVwbyBjb21tYW5kIHlvdSBjYW4gZG93bmxvYWQgZmlsZXMgZnJvbSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgaW50byB5b3VyIGxvY2FsIHdvcmtpbmcgZGlyZWN0b3J5LgorPC9saT4KKzwvdWw+Cis8aDI+CitBYm91dCBHaXQKKzwvaDI+Cis8aDM+CitXaHkgR2l0PworPC9oMz4KK09uZSBvZiB0aGUgY2hhbGxlbmdlcyBpbiBzZXR0aW5nIHVwIHRoZSBBbmRyb2lkIHByb2plY3Qgd2FzIGZpZ3VyaW5nIG91dCBob3cgdG8gYmVzdCBzdXBwb3J0IHRoZSBvdXRzaWRlIGNvbW11bml0eS0tZnJvbSB0aGUgaG9iYmllc3QgY29tbXVuaXR5IHRvIGxhcmdlIE9FTXMgYnVpbGRpbmcgbWFzcy1tYXJrZXQgY29uc3VtZXIgZGV2aWNlcy4gV2Ugd2FudGVkIGNvbXBvbmVudHMgdG8gYmUgcmVwbGFjZWFibGUsIGFuZCB3ZSB3YW50ZWQgaW50ZXJlc3RpbmcgY29tcG9uZW50cyB0byBiZSBhYmxlIHRvIGdyb3cgYSBsaWZlIG9mIHRoZWlyIG93biBvdXRzaWRlIG9mIEFuZHJvaWQuIFdlIGZpcnN0IGNob3NlIGEgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0sIHRoZW4gZnVydGhlciBuYXJyb3dlZCBpdCBkb3duIHRvIEdpdC48YnI+PGgzPgorQWxyZWFkeSBhIEdpdCB1c2VyPworPC9oMz4KK0luIG1vc3Qgc2l0dWF0aW9ucywgeW91IGNhbiB1c2UgR2l0IGluc3RlYWQgb2YgUmVwbywgb3IgbWl4IFJlcG8gYW5kIEdpdAorY29tbWFuZHMgdG8gZm9ybSBjb21wbGV4IGNvbW1hbmRzLiBVc2luZyBSZXBvIGZvciBiYXNpYyBhY3Jvc3MtbmV0d29yaworb3BlcmF0aW9ucyB3aWxsIG1ha2UgeW91ciB3b3JrIG11Y2ggc2ltcGxlciwgaG93ZXZlci4KKzxicj48L2Rpdj4KKzxkaXY+PGRpdj48aDI+CitUYXNrIHJlZmVyZW5jZSA8YnI+PC9oMj4KK1RoZSB0YXNrIGxpc3QgYmVsb3cgc2hvd3MgYSBzdW1tYXJ5IG9mIGhvdyB0byBkbyBjb21tb24gUmVwbyBhbmQgR2l0IHRhc2tzLgorRm9yIGNvbXBsZXRlIHF1aWNrLXN0YXJ0IGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgc2VlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2Rvd25sb2FkLmh0bWwiPkdldCBzb3VyY2U8L2E+CisuCis8aDM+CitJbnN0YWxsaW5nIFJlcG8gPGJyPjwvaDM+CiskIGN1cmwgaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcmVwbyB+L2Jpbi9yZXBvIDxkaXY+JCBjaG1vZCBhK3ggfi9iaW4vcmVwbzwvZGl2PgorJCBta2RpciA8aT53b3JraW5nLWRpcmVjdG9yeS1uYW1lPC9pPgorPGJyPiQgY2QgPGk+d29ya2luZy1kaXJlY3RvcnktbmFtZSA8YnI+PC9pPgorJCByZXBvIGluaXQtdSBnaXQ6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnL3BsYXRmb3JtL21hbmlmZXN0LmdpdCA8YnI+PGJyPjxoMz4KK1N5bmNocm9uaXppbmcgeW91ciBjbGllbnQKKzwvaDM+CitUbyBzeW5jaHJvbml6ZSB0aGUgZmlsZXMgZm9yIGFsbCBhdmFpbGFibGUgcHJvamVjdHM6PGJyPiQgcmVwbyBzeW5jIDxicj48YnI+VG8KK3N5bmNocm9uaXplIHRoZSBmaWxlcyBmb3Igc2VsZWN0ZWQgcHJvamVjdHM6PGJyPiQgcmVwbyBzeW5jIDxpPnByb2plY3QxCitwcm9qZWN0MiAuLi48L2k+Cis8aT48YnI+PC9pPgorPGJyPjxoMz4KK1doeSB1c2UgdG9waWMgYnJhbmNoZXM/Cis8L2gzPgorU3RhcnQgYSB0b3BpYyBicmFuY2ggaW4geW91ciBsb2NhbCB3b3JrIGVudmlyb25tZW50IHdoZW5ldmVyIHlvdSBiZWdpbiBhIGNoYW5nZSwgZm9yIGV4YW1wbGUgd2hlbiB5b3UgYmVnaW4gd29yayBvbiBhIGJ1ZyBvciBuZXcgZmVhdHVyZS48YnI+PGJyPkEgdG9waWMgYnJhbmNoIGlzIG5vdCBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGZpbGVzOyBpdCBpcyBhIHBvaW50ZXIgdG8gYSBwYXJ0aWN1bGFyIGNvbW1pdC4gVGhpcyBtYWtlcyBjcmVhdGluZyBsb2NhbCBicmFuY2hlcyBhbmQgc3dpdGNoaW5nIGFtb25nIHRoZW0gYSBsaWdodC13ZWlnaHQgb3BlcmF0aW9uLiBCeSB1c2luZyBicmFuY2hlcywgeW91IGNhbmlzb2xhdGVvbmUgYXNwZWN0IG9mIHlvdXIgd29yayBmcm9tIHRoZSBvdGhlcnMuIEZvciBhbiBpbnRlcmVzdGluZyBhcnRpY2xlIGFib3V0IHVzaW5nIHRvcGljIGJyYW5jaGVzLCBzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQiPlNlcGFyYXRpbmcgdG9waWMgYnJhbmNoZXM8L2E+CisuCis8ZGl2PjxpbWcgc3JjPSJ7QGRvY1Jvb3R9aW1hZ2VzL2dpdC1yZXBvLTAucG5nIj4KKzwvZGl2PgorPGJyPjxicj48aDM+CitDcmVhdGluZyB0b3BpYyBicmFuY2hlcworPC9oMz4KK1RvIHN0YXJ0IGEgdG9waWMgYnJhbmNoIHVzaW5nIFJlcG86PGJyPiQgcmVwbyBzdGFydCA8aT5icmFuY2huYW1lPC9pPgorPGJyPjxicj5UbyB2ZXJpZnkgdGhhdCB5b3VyIG5ldyBicmFuY2ggd2FzIGNyZWF0ZWQ6PGJyPiQgcmVwbyBzdGF0dXMgPGJyPjxicj48aDM+CitVc2luZyB0b3BpYyBicmFuY2hlcworPC9oMz4KK1RvIGFzc2lnbiB0aGUgYnJhbmNoIHRvIGEgcGFydGljdWxhciBwcm9qZWN0Ojxicj4kIHJlcG8gc3RhcnQgPGk+YnJhbmNoPC9pPgorPGk+bmFtZSBwcm9qZWN0PC9pPgorPGJyPjxicj5UbyBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYW1vbmcgYnJhbmNoZXMgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkIGluIHlvdXIgbG9jYWwgd29yayBlbnZpcm9ubWVudDo8YnI+JCBnaXQgY2hlY2tvdXQgPGk+YnJhbmNobmFtZTwvaT4KKzxicj48YnI+VG8gc2VlIGEgbGlzdCBvZiBleGlzdGluZyBicmFuY2hlczo8YnI+JCBnaXQgYnJhbmNoIDxicj5vci4uLjxicj4kIHJlcG8gYnJhbmNoZXMgPGJyPjxicj5UaGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2ggd2lsbCBiZSBwcmVjZWRlZCBieSBhbiBhc3Rlcmlzay48YnI+PGJyPjwvZGl2PgorPGRpdj48aT48Yj5Ob3RlOjwvYj4KKzxicj48L2k+CitBIGJ1ZyBtaWdodCBiZSBjYXVzaW5nIHJlcG8gc3luYyB0byByZXNldCB0aGUgbG9jYWwgdG9waWMgYnJhbmNoLiBJZiBnaXQgYnJhbmNoIHNob3dzICogKG5vIGJyYW5jaCkgYWZ0ZXIgeW91IHJ1biByZXBvIHN5bmMsIHRoZW4gcnVuIGdpdCBjaGVja291dGFnYWluLjxicj48L2Rpdj4KKzxkaXY+PGJyPjxoMz4KK1ZpZXdpbmcgY2xpZW50IHN0YXR1cworPC9oMz4KK1RvIGxpc3QgdGhlIHN0YXRlIG9mIHlvdXIgZmlsZXM6PGJyPiQgcmVwbyBzdGF0dXMgPGJyPjxicj5UbyBzZWUgdW5jb21taXR0ZWQgZWRpdHM6PGJyPiQgcmVwbyBkaWZmIDxicj48YnI+VGhlcmVwbyBkaWZmY29tbWFuZCBzaG93cyBldmVyeSBsb2NhbCBlZGl0IHRoYXQgeW91IGhhdmUgbWFkZSB0aGF0IHdvdWxkIDxpPm5vdDwvaT4KK2dvIGludG8gdGhlIGNvbW1pdCwgaWYgeW91IHdlcmUgdG8gY29tbWl0IHJpZ2h0IG5vdy48YnI+PGJyPlRvIHNlZSBldmVyeSBlZGl0IHRoYXQgd291bGQgZ28gaW50byB0aGUgY29tbWl0IGlmIHlvdSB3ZXJlIHRvIGNvbW1pdCByaWdodCBub3csIHlvdSBuZWVkIGEgR2l0IGNvbW1hbmQsIGdpdCBkaWZmLiBCZWZvcmUgcnVubmluZyBpdCwgYmUgc3VyZSB5b3UgYXJlIGRvd24gaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5Ojxicj4kIGNkIH4vPGk+d29ya2luZ2RpcmVjdG9yeTwvaT4KKy88aT5wcm9qZWN0PC9pPgorPGJyPiQgZ2l0IGRpZmYgLS1jYWNoZWQgPGJyPjxicj48aDM+CitSZWNvdmVyaW5nIHN5bmMgY29uZmxpY3RzCis8L2gzPgorSWYgYSByZXBvIHN5bmMgc2hvd3Mgc3luYyBjb25mbGljdHM6PGJyPjxvbD48bGk+VmlldyB0aGUgZmlsZXMgdGhhdCBhcmUgdW5tZXJnZWQgKHN0YXR1cyBjb2RlID0gVSkuCis8L2xpPgorPGxpPkVkaXQgdGhlIGNvbmZsaWN0IHJlZ2lvbnMgYXMgbmVjZXNzYXJ5LgorPC9saT4KKzxsaT5DaGFuZ2UgaW50byB0aGUgcmVsZXZhbnQgcHJvamVjdCBkaXJlY3RvcnksIHJ1biBnaXQgYWRkIGFuZCBnaXQgY29tbWl0IGZvciB0aGUgZmlsZXMgaW4gcXVlc3Rpb24sIGFuZCB0aGVuICJyZWJhc2UiIHRoZSBjaGFuZ2VzLiBGb3IgZXhhbXBsZTo8YnI+JCBjZCBiaW9uaWMgPGJyPiQgZ2l0IGFkZCBiaW9uaWMvKjxicj4kIGdpdCBjb21taXQgPGJyPiQgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIDxicj48YnI+PC9saT4KKzxsaT5XaGVuIHRoZSByZWJhc2UgaXMgY29tcGxldGUgc3RhcnQgdGhlIGVudGlyZSBzeW5jIGFnYWluOjxicj4kIHJlcG8gc3luY2Jpb25pYyA8aT5wcm9qMjwvaT4KKzxpPnByb2ozPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KKzxicj48L2xpPgorPC9vbD4KKzxoMz4KK0NsZWFuaW5nIHVwIHlvdXIgY2xpZW50IGZpbGVzIDxicj48L2gzPgorVG8gdXBkYXRlIHlvdXIgbG9jYWwgd29ya2luZyBkaXJlY3RvcnkgYWZ0ZXIgY2hhbmdlcyBhcmUgbWVyZ2VkIGluIEdlcnJpdDo8YnI+JHJlcG8gc3luYyA8YnI+PGJyPlRvIHNhZmVseSByZW1vdmUgc3RhbGUgdG9waWMgYnJhbmNoZXM6PGJyPiQgcmVwbyBwcnVuZSA8YnI+PGJyPjxoMz4KK0RlbGV0aW5nIGEgY2xpZW50Cis8L2gzPgorRGVsZXRpbmcgYSBjbGllbnQgd2lsbCA8Yj5wZXJtYW5lbnRseSBkZWxldGU8L2I+CithbnkgY2hhbmdlcyB5b3UgaGF2ZSBub3QgeWV0IHVwbG9hZGVkIGZvciByZXZpZXcuQmVjYXVzZWFsbCBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4geW91ciBjbGllbnQsIHlvdSBvbmx5IG5lZWQgdG8gZGVsZXRlIHRoZSBkaXJlY3RvcnkgZnJvbSB5b3VyIGZpbGVzeXN0ZW06PGJyPjxicj4kIGNkIDxpPn48L2k+Cis8YnI+JCBybSAtcmYgPGk+d29ya2luZy1kaXJlY3RvcnktbmFtZTwvaT4KKzxicj48YnI+PGgzPgorU2NyaXB0aW5nIGNvbW1vbiB0YXNrcworPC9oMz4KK1lvdSBjYW4gdXNlIFJlcG8gdG8gcnVuIHRoZSBzYW1lIHByb2dyYW0gYWNyb3NzIGFsbCBwcm9qZWN0czo8YnI+PGJyPiQgcmVwbyBmb3JhbGxbPGk+cHJvajE8L2k+Cis8aT5wcm9qMjwvaT4KKzxpPi4uLjwvaT4KKworPGk+cHJvak48L2k+CitdLWMgJzxpPmVjaG8gJFJFUE9fUFJPSkVDVCAkQDwvaT4KKydbPGk+YXJnMTwvaT4KKzxpPmFyZzI8L2k+Cis8aT4uLi48L2k+CisKKzxpPmFyZ048L2k+CitdPGJyPjxicj5UaGUgLWMgYXJndW1lbnQgaXMgZXZhbHVhdGVkIHRocm91Z2ggL2Jpbi9zaCBhbmQgYW55IGFyZ3VtZW50cyBhZnRlciBpdCBhcmUgcGFzc2VkIHRocm91Z2ggYXMgc2hlbGwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLjxicj48YnI+PGgyPgorUmVwbyBjb21tYW5kIHJlZmVyZW5jZQorPC9oMj4KK1JlcG8gdXNhZ2UgdGFrZXMgdGhlIGZvbGxvd2luZyBmb3JtOjxicj5yZXBvIDxpPmNvbW1hbmQgb3B0aW9uczwvaT4KKzxicj48YnI+T3B0aW9uYWwgZWxlbWVudHMgYXJlIHNob3duIGluIGJyYWNrZXRzWyBdLiBPbmNlIFJlcG8gaXMgaW5zdGFsbGVkLCB5b3UgY2FuIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbnkgY29tbWFuZCBieSBydW5uaW5nIDxicj5yZXBvIGhlbHAgPGk+Y29tbWFuZDwvaT4KKzxicj48YnI+PGgzPgoraW5pdAorPC9oMz4KK3JlcG8gaW5pdCAtdSA8aT51cmw8L2k+CitbPGk+b3B0aW9uczwvaT4KK108YnI+PGJyPjxkaXY+SW5zdGFsbHMgUmVwbyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIFRoaXMgY3JlYXRlcyBhIC5yZXBvLyBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBHaXQgcmVwb3NpdG9yaWVzIGZvciB0aGUgUmVwbyBzb3VyY2UgY29kZSBhbmQgdGhlIHN0YW5kYXJkIEFuZHJvaWQgbWFuaWZlc3QgZmlsZXMuIFRoZSAucmVwby8gZGlyZWN0b3J5IGFsc28gY29udGFpbnNtYW5pZmVzdC54bWwsIHdoaWNoIGlzIGEgc3ltbGluayB0byB0aGUgc2VsZWN0ZWQgbWFuaWZlc3QgaW4gdGhlIC5yZXBvL21hbmlmZXN0cy8gZGlyZWN0b3J5Ljxicj48YnI+VGhlIC11IGFyZ3VtZW50IHNwZWNpZmllcyBhIFVSTCBmcm9tIHdoaWNoIHRvIHJldHJpZXZlIGEgbWFuaWZlc3QgcmVwb3NpdG9yeS4gRm9yIGV4YW1wbGU6PGJyPiQgcmVwbyBpbml0IC11IGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3QuZ2l0IDxicj48YnI+VG8gc2VsZWN0IGEgbWFuaWZlc3QgZmlsZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnksIHVzZSB0aGUgLW0gb3B0aW9uLiAoSWYgbm8gbWFuaWZlc3QgbmFtZSBpcyBzZWxlY3RlZCwgdGhlIGRlZmF1bHQgaXMgZGVmYXVsdC54bWwuKUZvciBleGFtcGxlOjxicj4kIHJlcG8gaW5pdCAtdWdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3QuZ2l0LW0gZGFsa3Zpay1wbHVzLnhtbCA8YnI+PGJyPlRvIHNwZWNpZnkgYSByZXZpc2lvbiwgdGhhdCBpcywgYSBwYXJ0aWN1bGFyIG1hbmlmZXN0LWJyYW5jaCwgdXNlIHRoZSAtYiBvcHRpb24uIEZvciBleGFtcGxlOjxicj4kIHJlcG8gaW5pdCAtdWdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3QuZ2l0LWIgcmVsZWFzZS0xLjA8YnI+PGJyPlRvIHNlZSBvdGhlciByZXBvIGluaXQgb3B0aW9ucywgcnVuIDxicj4kIHJlcG8gaGVscCBpbml0IDxicj48YnI+PGI+Tm90ZTo8L2I+CitGb3IgYWxsIHJlbWFpbmluZyBSZXBvIGNvbW1hbmRzLCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IGVpdGhlciBiZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiAucmVwby8gb3IgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkuPGJyPjxicj48L2Rpdj4KKzxoMz4KK3N5bmMKKzwvaDM+CityZXBvIHN5bmMgWzxpPnByb2plY3QtbGlzdDwvaT4KK108YnI+PGJyPjxkaXY+RG93bmxvYWRzIG5ldyBjaGFuZ2VzIGFuZCB1cGRhdGVzIHRoZSB3b3JraW5nIGZpbGVzIGluIHlvdXIgbG9jYWwgZW52aXJvbm1lbnQuIEFmdGVyIGEgc3VjY2Vzc2Z1bCByZXBvIHN5bmMsIHRoZSBjb2RlIGluIHNwZWNpZmllZCBwcm9qZWN0cyB3aWxsIGJlIHVwIHRvIGRhdGUgd2l0aCB0aGUgY29kZSBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuPGJyPjxicj5Zb3UgY2FuIHNwZWNpZnkgcHJvamVjdC1saXN0IGFzIGEgbGlzdCBvZiBuYW1lcyBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9jYWwgc291cmNlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvamVjdHM6PGJyPnJlcG8gc3luYyBbPGk+cHJvajE8L2k+Cis8aT5wcm9qMjwvaT4KKzxpPi4uLjwvaT4KKworPGk+cHJvak48L2k+CitdPGJyPjxicj5JZiB5b3UgcnVuIHJlcG8gc3luYyB3aXRob3V0IGFueSBhcmd1bWVudHMsIGl0IHdpbGwgc3luY2hyb25pemUgdGhlIGZpbGVzIGZvciBhbGwgdGhlIHByb2plY3RzLjxicj48YnI+PC9kaXY+Cis8cD48Yj5Ib3cgUmVwbyBzeW5jaHJvbml6YXRpb24gd29ya3M8L2I+Cis8YnI+PC9wPgorPGRpdj5XaGVuIHlvdSBydW4gcmVwbyBzeW5jLCB0aGlzIGlzIHdoYXQgaGFwcGVuczo8YnI+PC9kaXY+Cis8b2w+PGxpPklmIHRoZSBwcm9qZWN0IGhhcyBuZXZlciBiZWVuIHN5bmNocm9uaXplZCwgdGhlbiByZXBvIHN5bmMgaXMgZXF1aXZhbGVudCB0byBnaXQgY2xvbmUuIEFsbCBicmFuY2hlcyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgYXJlIGNvcGllZCB0byB0aGUgbG9jYWwgcHJvamVjdCBkaXJlY3RvcnkuCis8L2xpPgorPGxpPklmIHRoZSBwcm9qZWN0IGhhcyBhbHJlYWR5IGJlZW4gc3luY2hyb25pemVkIG9uY2UsIHRoZW4gcmVwbyBzeW5jIGlzIGVxdWl2YWxlbnQgdG86PGJyPmdpdCByZW1vdGUgdXBkYXRlIDxicj5naXQgcmViYXNlIG9yaWdpbi88aT5icmFuY2g8L2k+Cis8YnI+d2hlcmUgPGk+YnJhbmNoPC9pPgoraXMgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2ggaW4gdGhlIGxvY2FsIHByb2plY3QgZGlyZWN0b3J5LiBJZiB0aGUgbG9jYWwgYnJhbmNoIGlzIG5vdCB0cmFja2luZyBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHRoZW4gbm8gc3luY2hyb25pemF0aW9uIHdpbGwgb2NjdXIgZm9yIHRoZSBwcm9qZWN0Ljxicj48YnI+SWYgdGhlIGdpdCByZWJhc2Ugb3BlcmF0aW9uIHJlc3VsdHMgaW4gbWVyZ2UgY29uZmxpY3RzLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsIEdpdCBjb21tYW5kcyAoZm9yIGV4YW1wbGUsIGdpdCByZWJhc2UgLS1jb250aW51ZSkgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzLjxicj48L2xpPgorPC9vbD4KKzxkaXY+VGhlIHJlcG8gc3luYyBjb21tYW5kIGFsc28gdXBkYXRlcyB0aGUgcHJpdmF0ZSByZXBvc2l0b3JpZXMgaW4gdGhlIC5yZXBvLyBkaXJlY3RvcnkuPGJyPjwvZGl2PgorPGJyPjxoMz4KK3VwbG9hZAorPC9oMz4KK3JlcG8gdXBsb2FkIFs8aT5wcm9qZWN0LWxpc3Q8L2k+CitdPGJyPjxicj48ZGl2PkZvciB0aGUgc3BlY2lmaWVkIHByb2plY3RzLCBSZXBvIGNvbXBhcmVzIHRoZSBsb2NhbCBicmFuY2hlcyB0byB0aGUgcmVtb3RlIGJyYW5jaGVzIHVwZGF0ZWQgZHVyaW5nIHRoZSBsYXN0IHJlcG8gc3luYy4gUmVwbyB3aWxsIHByb21wdCB5b3UgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBicmFuY2hlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHVwbG9hZGVkIGZvciByZXZpZXcuPGJyPjxicj5BZnRlciB5b3Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzLCBhbGwgY29tbWl0cyBvbiB0aGUgc2VsZWN0ZWQgYnJhbmNoZXMgYXJlIHRyYW5zbWl0dGVkIHRvIEdlcnJpdCBvdmVyIGFuIFNTSCBjb25uZWN0aW9uLllvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIGFuIFNTSCBrZXkgdG8gZW5hYmxlIHVwbG9hZCBhdXRob3JpemF0aW9uLlZpc2l0IDxhIGhyZWY9Imh0dHA6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tL0dlcnJpdCNzZXR0aW5ncyxzc2gta2V5cyI+U1NIIEtleXM8L2E+Cit3aXRoaW4gdGhlIHVzZXIgc2V0dGluZ3MgcGFuZWwgdG8gcmVnaXN0ZXIgeW91ciBwdWJsaWMga2V5cyB3aXRoIEdlcnJpdC5UbyBlbmFibGUgcGFzc3dvcmQtbGVzcyB1cGxvYWRzLCBjb25zaWRlciB1c2luZyBzc2gtYWdlbnQgb24geW91ciBjbGllbnQgc3lzdGVtLjxicj48YnI+V2hlbiBHZXJyaXQgcmVjZWl2ZXMgdGhlIG9iamVjdCBkYXRhIG92ZXIgaXRzIFNTSCBzZXJ2ZXIsIGl0IHdpbGwgdHVybiBlYWNoIGNvbW1pdCBpbnRvIGEgY2hhbmdlIHNvIHRoYXQgcmV2aWV3ZXJzIGNhbiBjb21tZW50IG9uIGVhY2ggY29tbWl0IGluZGl2aWR1YWxseS48YnI+PGJyPlRvIGNvbWJpbmUgc2V2ZXJhbCAiY2hlY2twb2ludCIgY29tbWl0cyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIGNvbW1pdCwgdXNlIGdpdCByZWJhc2UgLWkgYmVmb3JlIHlvdSBydW4gcmVwbyB1cGxvYWQuPGJyPjxicj5Zb3UgY2FuIHNwZWNpZnkgcHJvamVjdC1saXN0IGFzIGEgbGlzdCBvZiBuYW1lcyBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9jYWwgc291cmNlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvamVjdHM6PGJyPnJlcG8gdXBsb2FkIFs8aT5wcm9qMTwvaT4KKzxpPnByb2oyPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KK108YnI+PGJyPklmIHlvdSBydW4gcmVwbyB1cGxvYWQgd2l0aG91dCBhbnkgYXJndW1lbnRzLCBpdCB3aWxsIHNlYXJjaCBhbGwgdGhlIHByb2plY3RzIGZvciBjaGFuZ2VzIHRvIHVwbG9hZC48YnI+PGJyPlRvIG1ha2UgZWRpdHMgdG8gY2hhbmdlcyBhZnRlciB0aGV5IGhhdmUgYmVlbiB1cGxvYWRlZCwgeW91IHNob3VsZCB1c2UgYSB0b29sIGxpa2VnaXQgcmViYXNlIC1pb3IgZ2l0IGNvbW1pdCAtLWFtZW5kIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGNvbW1pdHMuPGJyPjxicj5BZnRlciB5b3VyIGVkaXRzIGFyZSBjb21wbGV0ZTo8YnI+PC9kaXY+Cis8ZGl2PjxvbD48bGk+TWFrZSBzdXJlIHRoZSB1cGRhdGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaC4KKzwvbGk+Cis8bGk+VXNlIHJlcG8gdXBsb2FkIC0tcmVwbGFjZSA8aT5wcm9qMTwvaT4KK3RvIG9wZW4gdGhlIGNoYW5nZSBtYXRjaGluZyBlZGl0b3IuCis8L2xpPgorPGxpPkZvciBlYWNoIGNvbW1pdCBpbiB0aGUgc2VyaWVzLCBlbnRlciB0aGUgR2Vycml0IGNoYW5nZSBJZCBpbnNpZGUgdGhlIGJyYWNrZXRzOjxicj48L2xpPgorPC9vbD4KKzwvZGl2PgorPGRpdj4jIFJlcGxhY2luZyBmcm9tIGJyYW5jaCBmb28gPGJyPlsgMzAyMSBdIDM1ZjI1OTZjIFJlZmFjdG9yIHBhcnQgb2YgR2V0VXBsb2FkYWJsZUJyYW5jaGVzIHRvIGxvb2t1cCBvbmUgc3BlY2lmaWMuLi48YnI+WyAyODI5IF0gZWMxOGI0YmEgVXBkYXRlIHByb3RvIGNsaWVudCB0byBzdXBwb3J0IHBhdGNoIHNldCByZXBsYWNtZW50cyA8YnI+WyAzMDIyIF0gYzk5ODgzZmUgVGVhY2ggJ3JlcG8gdXBsb2FkIC0tcmVwbGFjZScgaG93IHRvIGFkZCByZXBsYWNlbWVudCBwYXRjaCBzZS4uLjxicj4jIEluc2VydCBjaGFuZ2UgbnVtYmVycyBpbiB0aGUgYnJhY2tldHMgdG8gYWRkIGEgbmV3IHBhdGNoIHNldC48YnI+IyBUbyBjcmVhdGUgYSBuZXcgY2hhbmdlIHJlY29yZCwgbGVhdmUgdGhlIGJyYWNrZXRzIGVtcHR5Ljxicj48YnI+QWZ0ZXIgdGhlIHVwbG9hZCBpcyBjb21wbGV0ZSB0aGUgY2hhbmdlcyB3aWxsIGhhdmUgYW4gYWRkaXRpb25hbCBQYXRjaCBTZXQgKGUuZy4gUGF0Y2ggU2V0IDIsIFBhdGNoIFNldCAzLCAuLi4pLjxicj48L2Rpdj4KKzxicj48aDM+CitkaWZmCis8L2gzPgorcmVwbyBkaWZmIFs8aT5wcm9qZWN0LWxpc3Q8L2k+CitdPGJyPjxicj48ZGl2PlNob3dzIGNoYW5nZXMgYmV0d2VlbiBjb21taXQgYW5kIHdvcmtpbmcgdHJlZS48YnI+PGJyPllvdSBjYW4gc3BlY2lmeSBwcm9qZWN0LWxpc3QgYXMgYSBsaXN0IG9mIG5hbWVzIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb2NhbCBzb3VyY2UgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm9qZWN0czo8YnI+cmVwbyBkaWZmIFs8aT5wcm9qMTwvaT4KKzxpPnByb2oyPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KK108YnI+PGJyPk9wdGlvbnM6PGJyPi1oLCAtLWhlbHBtZWFucyBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ljxicj48L2Rpdj4KKzxicj48aDM+Citkb3dubG9hZCA8YnI+PC9oMz4KK3JlcG8gZG93bmxvYWQgPGk+dGFyZ2V0PC9pPgorPGk+Y2hhbmdlPC9pPgorPGJyPjxicj48ZGl2PkRvd25sb2FkcyB0aGUgc3BlY2lmaWVkIGNoYW5nZSBpbnRvIHRoZSBzcGVjaWZpZWQgbG9jYWwgZGlyZWN0b3J5LiAoQWRkZWQgdG8gUmVwbyBhcyBvZiB2ZXJzaW9uIDEuMC40Lik8YnI+PGJyPkZvciBleGFtcGxlLCB0byBkb3dubG9hZCA8YSBocmVmPSJodHRwOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8xMjQxIj5jaGFuZ2UgMTI0MTwvYT4KK2ludG8geW91ciBwbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UgZGlyZWN0b3J5Ojxicj4kIHJlcG8gZG93bmxvYWQgcGxhdGZvcm0vZnJhbWV3b3Jrcy9iYXNlIDEyNDE8YnI+PGJyPkEicmVwbyBzeW5jInNob3VsZCBlZmZlY3RpdmVseSByZW1vdmUgYW55IGNvbW1pdHMgcmV0cmlldmVkIHZpYSAicmVwbyBkb3dubG9hZCIuT3IsIHlvdSBjYW4gY2hlY2sgb3V0IHRoZSByZW1vdGUgYnJhbmNoOyBlLmcuLCAiZ2l0IGNoZWNrb3V0IG0vbWFzdGVyIi48YnI+PGJyPjxiPk5vdGU6PC9iPgorQXMgb2YgSmFuLiAyNiwgMjAwOSwgdGhlcmUgaXMgYSBtaXJyb3JpbmcgbGFnIG9mIGFwcHJveGltYXRlbHkgNSBtaW51dGVzIGJldHdlZW4gd2hlbiBhIGNoYW5nZSBpcyB2aXNpYmxlIG9uIHRoZSB3ZWIgaW4gPGEgaHJlZj0iaHR0cDovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vIj5HZXJyaXQ8L2E+CithbmQgd2hlbiByZXBvIGRvd25sb2FkIHdpbGwgYmUgYWJsZSB0byBmaW5kIGl0LCBiZWNhdXNlIGNoYW5nZXMgYXJlIGFjdHVhbGx5IGRvd25sb2FkZWQgb2ZmIHRoZSBnaXQ6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnLyBtaXJyb3IgZmFybS4gVGhlcmUgd2lsbCBhbHdheXMgYmUgYSBzbGlnaHQgbWlycm9yaW5nIGxhZyBhcyBHZXJyaXQgcHVzaGVzIG5ld2x5IHVwbG9hZGVkIGNoYW5nZXMgb3V0IHRvIHRoZSBtaXJyb3IgZmFybS4KKzwvZGl2PgorPGJyPjxoMz4KK2ZvcmFsbAorPC9oMz4KK3JlcG8gZm9yYWxsIFs8aT5wcm9qZWN0LWxpc3Q8L2k+CitdIC1jIDxpPmNvbW1hbmQ8L2k+CitbPGk+YXJnLjwvaT4KKy4uXTxicj48YnI+PGRpdj5SdW5zIGEgc2hlbGwgY29tbWFuZCBpbiBlYWNoIHByb2plY3QuPGJyPjxicj5Zb3UgY2FuIHNwZWNpZnkgcHJvamVjdC1saXN0IGFzIGEgbGlzdCBvZiBuYW1lcyBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9jYWwgc291cmNlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvamVjdHMgPGJyPjwvZGl2PgorPGJyPjxoMz4KK2hlbHAKKzwvaDM+CityZXBvIGhlbHAgWzxpPmNvbW1hbmQ8L2k+CitdPGJyPjxicj48ZGl2PkRpc3BsYXlzIGRldGFpbGVkIGhlbHAgYWJvdXQgYSBjb21tYW5kLjxicj48L2Rpdj4KKzxicj48aDM+CitwcnVuZSA8YnI+PC9oMz4KK3JlcG8gcHJ1bmUgWzxpPnByb2plY3QtbGlzdDwvaT4KK108YnI+PGJyPjxkaXY+UHJ1bmVzIChkZWxldGVzKSB0b3BpY3MgdGhhdCBhcmUgYWxyZWFkeSBtZXJnZWQuPGJyPjxicj5Zb3UgY2FuIHNwZWNpZnkgcHJvamVjdC1saXN0IGFzIGEgbGlzdCBvZiBuYW1lcyBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9jYWwgc291cmNlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvamVjdHM6PGJyPnJlcG8gcHJ1bmUgWzxpPnByb2oxPC9pPgorPGk+cHJvajI8L2k+Cis8aT4uLi48L2k+CisKKzxpPnByb2pOPC9pPgorXTxicj48L2Rpdj4KKzxicj48aDM+CitzdGFydAorPC9oMz4KK3JlcG8gc3RhcnQgPGk+bmV3YnJhbmNobmFtZTwvaT4KK1s8aT5wcm9qZWN0LWxpc3Q8L2k+CitdPGJyPjxicj48ZGl2PlN0YXJ0cyBhIG5ldyBicmFuY2ggZm9yIGRldmVsb3BtZW50Ljxicj48YnI+VGhlIDxpPm5ld2JyYW5jaG5hbWU8L2k+Cithcmd1bWVudCBzaG91bGQgcHJvdmlkZSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFuZ2UgeW91IGFyZSB0cnlpbmcgdG8gbWFrZSB0byB0aGUgcHJvamVjdHMuSWYgeW91IGRvbid0IGtub3csIGNvbnNpZGVyIHVzaW5nIHRoZSBuYW1lIGRlZmF1bHQuPGJyPjxicj5UaGUgPGk+cHJvamVjdC1saXN0PC9pPgorc3BlY2lmaWVzIHdoaWNoIHByb2plY3RzIHdpbGwgcGFydGljaXBhdGUgaW4gdGhpcyB0b3BpYyBicmFuY2guIFlvdSBjYW4gc3BlY2lmeSBwcm9qZWN0LWxpc3QgYXMgYSBsaXN0IG9mIG5hbWVzIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb2NhbCB3b3JraW5nIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvamVjdHM6PGJyPnJlcG8gc3RhcnQgZGVmYXVsdCBbPGk+cHJvajE8L2k+Cis8aT5wcm9qMjwvaT4KKzxpPi4uLjwvaT4KKworPGk+cHJvak48L2k+CitdPGJyPjxicj4iLiIgaXMgYSB1c2VmdWwgc2hvcnRoYW5kIGZvciB0aGUgcHJvamVjdCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS48YnI+PC9kaXY+Cis8YnI+PGgzPgorc3RhdHVzCis8L2gzPgorcmVwbyBzdGF0dXMgWzxpPnByb2plY3QtbGlzdDwvaT4KK108YnI+PGJyPjxkaXY+U2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gWW91IGNhbiBzcGVjaWZ5IHByb2plY3QtbGlzdCBhcyBhIGxpc3Qgb2YgbmFtZXMgb3IgYSBsaXN0IG9mIHBhdGhzIHRvIGxvY2FsIHNvdXJjZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb2plY3RzOjxicj5yZXBvIHN0YXR1cyBbPGk+cHJvajE8L2k+Cis8aT5wcm9qMjwvaT4KKzxpPi4uLjwvaT4KKworPGk+cHJvak48L2k+CitdPGJyPjxicj5UbyBzZWUgdGhlIHN0YXR1cyBmb3Igb25seSB0aGUgY3VycmVudCBicmFuY2gsIHJ1biA8YnI+cmVwbyBzdGF0dXMgLjxicj48YnI+VGhlIHN0YXR1cyBpbmZvcm1hdGlvbiB3aWxsIGJlIGxpc3RlZCBieSBwcm9qZWN0LiBGb3IgZWFjaCBmaWxlIGluIHRoZSBwcm9qZWN0LCBhIHR3by1sZXR0ZXIgY29kZSBpcyB1c2VkOjxicj48L2Rpdj4KKzxkaXY+PHVsPjxsaT5JbiB0aGUgbGVmdC1tb3N0IGNvbHVtbiwgYW4gdXBwZXJjYXNlIGxldHRlciBpbmRpY2F0ZXMgd2hhdCBpcyBoYXBwZW5pbmcgaW4gdGhlIGluZGV4ICh0aGUgc3RhZ2VkIGZpbGVzKSB3aGVuIGNvbXBhcmVkIHRvIHRoZSBsYXN0IGNvbW1pdHRlZCBzdGF0ZS48YnI+PGJyPjwvbGk+Cis8bGk+SW4gdGhlIG5leHQgY29sdW1uLCBhIGxvd2VyY2FzZSBsZXR0ZXIgaW5kaWNhdGVzIHdoYXQgaXMgaGFwcGVuaW5nIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIGNvbXBhcmVkIHRvIHRoZSBpbmRleCAod2hhdCBpcyBzdGFnZWQpLgorPC9saT4KKzwvdWw+Cis8dGFibGU+PHRib2R5Pjx0cj48dGQ+PGI+Q2hhcmFjdGVyPC9iPgorPC90ZD4KKzx0ZD48Yj5NZWFuaW5nPC9iPgorPC90ZD4KKzwvdHI+Cis8dHI+PHRkPkEKKzwvdGQ+Cis8dGQ+VGhlIGZpbGUgaXMgYWRkZWQgKGJyYW5kIG5ldykuIENhbiBvbmx5IGFwcGVhciBpbiB0aGUgZmlyc3QgY29sdW1uLjxicj48L3RkPgorPC90cj4KKzx0cj48dGQ+TSBvciBtIDxicj48L3RkPgorPHRkPlRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGJ1dCBoYXMgYmVlbiBtb2RpZmllZCBpbiBzb21lIHdheS4KKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5EIG9yIGQgPGJyPjwvdGQ+Cis8dGQ+VGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZC48YnI+PC90ZD4KKzwvdHI+Cis8dHI+PHRkPlIKKzwvdGQ+Cis8dGQ+VGhlIGZpbGUgaGFzIGJlZW4gcmVuYW1lZC4gQ2FuIG9ubHkgYXBwZWFyIGluIHRoZSBmaXJzdCBjb2x1bW4uIFRoZSBuZXcgbmFtZSBpcyBhbHNvIHNob3duIG9uIHRoZSBsaW5lLjwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5DCis8L3RkPgorPHRkPlRoZSBmaWxlIGhhcyBiZWVuIGNvcGllZCBmcm9tIGFub3RoZXIgZmlsZS4gQ2FuIG9ubHkgYXBwZWFyIGluIHRoZSBmaXJzdCBjb2x1bW4uIFRoZSBzb3VyY2UgaXMgYWxzbyBzaG93bi4KKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5UCis8L3RkPgorPHRkPk9ubHkgdGhlIGZpbGUncyBtb2RlIChleGVjdXRhYmxlIG9yIG5vdCkgaGFzIGJlZW4gY2hhbmdlZC4gQ2FuIG9ubHkgYXBwZWFyIGluIHRoZSBmaXJzdCBjb2x1bW4uCis8L3RkPgorPC90cj4KKzx0cj48dGQ+VQorPC90ZD4KKzx0ZD5UaGUgZmlsZSBoYXMgbWVyZ2UgY29uZmxpY3RzIGFuZCBpcyBzdGlsbCB1bm1lcmdlZC4gQ2FuIG9ubHkgYXBwZWFyIGluIHRoZSBmaXJzdCBjb2x1bW4uCis8L3RkPgorPC90cj4KKzx0cj48dGQ+LQorPC90ZD4KKzx0ZD5UaGUgZmlsZSBzdGF0ZSBpcyB1bm1vZGlmaWVkLiBBIGh5cGhlbiBpbiA8aT5ib3RoPC9pPgorY29sdW1ucyBtZWFucyB0aGlzIGlzIGEgbmV3IGZpbGUsIHVua25vd24gdG8gR2l0LiBBZnRlciB5b3UgcnVuIGdpdCBhZGQgb24gdGhpcyBmaWxlLCByZXBvIHN0YXR1cyB3aWxsIHNob3cgQS0sIGluZGljYXRpbmcgdGhlIGZpbGUgaGFzIGJlZW4gYWRkZWQuPGJyPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+Cis8YnI+Rm9yIGV4YW1wbGUsIGlmIHlvdSBlZGl0IHRoZSBmaWxlIG1haW4ucHkgd2l0aGluIHRoZSBhcHBlbmcgcHJvamVjdCB3aXRob3V0IHN0YWdpbmcgdGhlIGNoYW5nZXMsIHRoZW4gcmVwbyBzdGF0dXMgbWlnaHQgc2hvdyA8YnI+PGJyPnByb2plY3QgYXBwZW5nLzxicj4tbW1haW4ucHkgPGJyPjxicj5JZiB5b3UgZ28gb24gdG8gc3RhZ2UgdGhlIGNoYW5nZXMgdG8gbWFpbi5weSBieSBydW5uaW5nIGdpdCBhZGQsIHRoZW4gcmVwbyBzdGF0dXMgbWlnaHQgc2hvdyA8YnI+PGJyPnByb2plY3QgYXBwZW5nLzxicj5NLSBtYWluLnB5IDxicj48YnI+SWYgeW91IHRoZW4gbWFrZSBmdXJ0aGVyIGVkaXRzIHRvIHRoZSBhbHJlYWR5LXN0YWdlZCBtYWluLnB5IGFuZCBtYWtlIGVkaXRzIHRvIGFub3RoZXIgZmlsZSB3aXRoaW4gdGhlIHByb2plY3QsIGFwcC55YW1sLCB0aGVuIHJlcG8gc3RhdHVzIG1pZ2h0IHNob3cgPGJyPjxicj5wcm9qZWN0IGFwcGVuZy88YnI+LW1hcHAueWFtbCA8YnI+TW0gbWFpbi5weSA8YnI+PGJyPjwvZGl2PgorPGgyPgorR2l0IGFuZCBSZXBvIGNoZWF0c2hlZXQKKzwvaDI+CitDbGljayBvbiB0aGUgY2hlYXRzaGVldCB0byBvcGVuIGl0IGluIGEgbmV3IHdpbmRvdyBmb3IgZWFzaWVyIHByaW50aW5nLgorCis8ZGl2PjxpbWcgc3JjPSJ7QGRvY1Jvb3R9aW1hZ2VzL2dpdC1yZXBvLTEucG5nIj4KKzwvZGl2PgorCis8IS0tCis8aDI+QWRkaXRpb25hbCBSZXNvdXJjZXM8L2gyPgorPGgzPlJlc291cmNlcyBmb3IgcGxhdGZvcm0gZGV2ZWxvcGVyczwvaDM+IAorR29vZ2xlIEkvTyB2aWRlb3M6Cis8dWw+CisgIDxsaT48YSBocmVmPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2lvL2FuLWludHJvZHVjdGlvbi10by1hbmRyb2lkIj5JbnRyb2R1Y3Rpb24gdG8gQW5kcm9pZDwvYT48L2xpPiAKKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvaW8vYW5hdG9teS1waHlzaW9sb2d5LW9mLWFuLWFuZHJvaWQiPkFuYXRvbXkgUGh5c2lvbG9neSBvZiBhbiBBbmRyb2lkPC9hPjwvbGk+IAorICA8bGk+PGEgaHJlZj0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pby9pbnNpZGUtdGhlLWFuZHJvaWQtYXBwbGljYXRpb24tZnJhbWV3b3JrIj5JbnNpZGUgdGhlIEFuZHJvaWQgQXBwbGljYXRpb24gRnJhbWV3b3JrPC9hPjwvbGk+IAorICA8bGk+PGEgaHJlZj0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pby9kYWx2aWstdm0taW50ZXJuYWxzIj5EYWx2aWsgVk0gSW50ZXJuYWxzPC9hPjwvbGk+IAorPC91bD4gCisgCitHZXR0aW5nIHN0YXJ0ZWQgd2l0aCB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZToKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZG93bmxvYWQiPkdldCBzb3VyY2U8L2E+PC9saT4gCisgIDxsaT48YSBocmVmPSJodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL3N1Ym1pdC1wYXRjaGVzL2NvZGUtc3R5bGUtZ3VpZGUiPkNvZGUgU3R5bGUgR3VpZGU8L2E+PC9saT4gCis8L3VsPiAKKyAKK1JlcG8gYW5kIEdpdCByZXNvdXJjZXM6Cis8dWw+CisgIDxsaT48YSBocmVmPSJodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2Rvd25sb2FkL3VzaW5nLXJlcG8jVE9DLUdpdC1hbmQtUmVwby1jaGVhdHNoZWV0Ij5HaXQgYW5kIFJlcG8gY2hlYXQgc2hlZXQ8L2E+PC9saT4gCisgIDxsaT48YSBocmVmPSJodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2Rvd25sb2FkL3VzaW5nLXJlcG8iPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT48L2xpPiAKKyAgPGxpPlRoZSA8YSBocmVmPSJodHRwOi8vYm9vay5naXQtc2NtLmNvbS8iPkdpdCBDb21tdW5pdHkgQm9vazwvYT4gbWFpbnRhaW5lZCBieSBTY290dCBDaGFjb248L2xpPiAKKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9Gcm9udFBhZ2UiPkdpdFdpa2k8L2E+PC9saT4gCisgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8iPkdpdCBNYW51YWwgUGFnZTwvYT48L2xpPiAKKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ2l0Y2FzdHMuY29tLyI+R2l0Q2FzdHM8L2E+IChHaXQgaG93LXRvIHZpZGVvcyk8L2xpPiAKKzwvdWw+IAorIAorRG9jdW1lbnRhdGlvbiBvbiBzcGVjaWZpYyB0YXNrczoKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZG9jdW1lbnRhdGlvbi9idWlsZGluZy1mb3ItZHJlYW0iPkJ1aWxkaW5nIGZvciBhbiBBbmRyb2lkIERldmVsb3BlciBQaG9uZTwvYT48L2xpPiAKKzwvdWw+IAorLS0+CisKKzxoMj4KKzxiPlRlcm1pbm9sb2d5PC9iPgorPC9oMj4KKzxpPlN0YWdlZDwvaT4KKzxpPmNoYW5nZXM8L2k+Cis8YnI+Q2hhbmdlcyBtYXJrZWQgYnkgZ2l0IGFkZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBuZXh0IGNvbW1pdCdzIHNuYXBzaG90Ljxicj48YnI+PGk+Q29tbWl0IDxicj48L2k+CitBdCBpbnRlcnZhbHMsIHlvdSB1c2UgZ2l0IGNvbW1pdCB0byBzYXZlIGEgc25hcHNob3Qgb2YgdGhlIHN0YWdlZCBmaWxlcyBhbmQgYSBsb2cgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgY2hhbmdlLjxicj48YnI+PGk+TWFuaWZlc3Q8L2k+Cis8YnI+QSBtYW5pZmVzdCBmaWxlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHJlcG9zaXRvcmllcyBhbmQgYSBtYXBwaW5nIG9mIHdoZXJlIHRoZSBmaWxlcyBmcm9tIHRoZXNlIHJlcG9zaXRvcmllcyB3aWxsIGJlIGxvY2F0ZWQgd2l0aGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuIFdoZW4geW91IHN5bmNocm9uaXplIHlvdXIgZmlsZXMsIHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhlIHJlcG9zaXRvcmllcyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIG1hbmlmZXN0IHdpbGwgYmUgcHVsbGVkIGludG8geW91ciB3b3JraW5nIGRpcmVjdG9yeS48L2Rpdj4KKzwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvaW5kZXguamQgYi9wZGsvZG9jcy9zb3VyY2UvaW5kZXguamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwYTBiMwotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9pbmRleC5qZApAQCAtMCwwICsxLDM1IEBACitwYWdlLnRpdGxlPUdldCBJbnZvbHZlZAorZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPGRpdj4KKzxwPlRoYW5rcyBmb3IgeW91ciBpbnRlcmVzdCBpbiBBbmRyb2lkISBIZXJlIGFyZSBzb21lIHdheXMgeW91IGNhbiBnZXQgaW52b2x2ZWQKK2FuZCBoZWxwIEdvb2dsZSBpbXByb3ZlIEFuZHJvaWQuIEZvciBiYWNrZ3JvdW5kIG9uIHRoZSBBbmRyb2lkIHByb2plY3QgYW5kIG91cgorZ29hbHMsIGNoZWNrIG91dCB0aGUgPGEgaHJlZj0ie0Bkb2NSb290fWFib3V0L3BoaWxvc29waHkuaHRtbCI+UHJvamVjdAorUGhpbG9zb3BoeSBwYWdlPC9hPi48L3A+CisKKzxoMj5SZXBvcnQgQnVnczwvaDI+Cis8cD5PbmUgb2YgdGhlIGVhc2llc3QgYW5kIG1vc3QgZWZmZWN0aXZlIHdheXMgeW91IGNhbiBoZWxwIGltcHJvdmUgQW5kcm9pZCBpcwordG8gZmlsZSBidWdzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL3JlcG9ydC1idWdzLmh0bWwiPlJlcG9ydGluZyBCdWdzPC9hPiBwYWdlLjwvcD4KKzxwPlBsZWFzZSBub3RlIHRoYXQgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYW55IHBhcnRpY3VsYXIgYnVnIGNhbiBiZSBmaXhlZCBpbgorYW55IHBhcnRpY3VsYXIgcmVsZWFzZS4gVG8gc2VlIHdoYXQgaGFwcGVucyB0byB5b3VyIGJ1ZyBvbmNlIHlvdSByZXBvcnQgaXQsCityZWFkIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvbGlmZS1vZi1hLWJ1Zy5odG1sIj5MaWZlIG9mIGEgQnVnPC9hPi48L3A+CisKKzxoMj5EZXZlbG9wIEFwcHM8L2gyPgorPHA+V2UgY3JlYXRlZCBBbmRyb2lkIHNvIHRoYXQgYWxsIGRldmVsb3BlcnMgY2FuIGRpc3RyaWJ1dGUgdGhlaXIgYXBwbGljYXRpb25zCit0byB1c2VycyBvbiBhbiBvcGVuIHBsYXRmb3JtLiBPbmUgb2YgdGhlIGJlc3Qgd2F5cyB5b3UgY2FuIGhlbHAgQW5kcm9pZCBpcyB0bword3JpdGUgY29vbCBhcHBzIHRoYXQgdXNlcnMgbG92ZSE8L3A+Cis8cD5UbyBnZXQgc3RhcnRlZCwgdmlzaXQgPGEKK2hyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vIj5kZXZlbG9wZXIuYW5kcm9pZC5jb208L2E+LiBUaGlzIHNpdGUKK3Byb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiBhbmQgdG9vbHMgeW91IG5lZWQgdG8gd3JpdGUgYXBwbGljYXRpb25zIGZvcgorY29tcGF0aWJsZSBBbmRyb2lkIGRldmljZXMsIHVzaW5nIHRoZSBTREsuPC9wPgorCis8aDI+Q29udHJpYnV0ZSB0byB0aGUgQ29kZTwvaDI+Cis8cD5Db2RlIGlzIEtpbmcuIFdlJ2QgbG92ZSB0byByZXZpZXcgYW55IGNoYW5nZXMgeW91IHN1Ym1pdCwgc28gcGxlYXNlIGNoZWNrCitvdXQgdGhlIHNvdXJjZSwgcGljayBhIGJ1ZyBvciBmZWF0dXJlLCBhbmQgZ2V0IGNvZGluZy48L3A+Cis8cD5Zb3UgY2FuIGdldCBzdGFydGVkIHdpdGggIGJ5IGxlYXJuaW5nIGFib3V0IHRoZSA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9saWZlLW9mLWEtcGF0Y2guaHRtbCI+TGlmZSBvZiBhIFBhdGNoPC9hPiwgYW5kIGJ5CitsZWFybmluZyBhYm91dCA8Y29kZT5naXQ8L2NvZGU+LCA8Y29kZT5yZXBvPC9jb2RlPiwgYW5kIG90aGVyIHRvb2xzIHVzaW5nIHRoZQorbGlua3MgdG8gdGhlIGxlZnQuIElmIHlvdSBuZWVkIGhlbHAgYWxvbmcgdGhlIHdheSwgeW91IGNhbiBqb2luIG91ciA8YQoraHJlZj0ie0Bkb2NSb290fWNvbW11bml0eS9pbmRleC5odG1sIj5kaXNjdXNzaW9uIGdyb3Vwcy48L2E+PC9wPgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvbGljZW5zZXMuamQgYi9wZGsvZG9jcy9zb3VyY2UvbGljZW5zZXMuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2YTkyYQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9saWNlbnNlcy5qZApAQCAtMCwwICsxLDg1IEBACitwYWdlLnRpdGxlPUxpY2Vuc2VzCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8ZGl2PgorPHA+VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCB1c2VzIGEgZmV3IDxhCitocmVmPSJodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnLyI+b3BlbiBzb3VyY2UgaW5pdGlhdGl2ZTwvYT4gYXBwcm92ZWQgb3Blbgorc291cmNlIGxpY2Vuc2VzIHRvIGVuYWJsZSBhdmFpbGFiaWxpdHkgb2Ygc291cmNlIGNvZGUgYW5kIHRvIGFjY2VwdAorY29udHJpYnV0aW9ucyBmcm9tIGluZGl2aWR1YWxzIGFuZCBjb3Jwb3JhdGlvbnMuPC9wPgorPGgyPkFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBsaWNlbnNlPC9oMj4KKzxwPlRoZSBwcmVmZXJyZWQgbGljZW5zZSBmb3IgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBpcyA8YQoraHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgMi4wPC9hPi4gQXBhY2hlIDIuMAoraXMgYSBjb21tZXJjaWFsIGFuZCBvcGVuIHNvdXJjZSBmcmllbmRseSBvcGVuIHNvdXJjZSBsaWNlbnNlLiBUaGUgbWFqb3JpdHkgb2YKK3RoZSBBbmRyb2lkIHBsYXRmb3JtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSA8YQoraHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLyI+QXBhY2hlIDIuMCBsaWNlbnNlPC9hPi4gV2hpbGUgdGhlCitwcm9qZWN0IHdpbGwgc3RyaXZlIHRvIGFkaGVyZSB0byB0aGUgcHJlZmVycmVkIGxpY2Vuc2UsIHRoZXJlIG1heSBiZQorZXhjZXB0aW9ucyB3aGljaCB3aWxsIGJlIGhhbmRsZWQgb24gYSBjYXNlLWJ5LWNhc2UgYmFzaXMuIEZvciBleGFtcGxlLCB0aGUKK0xpbnV4IGtlcm5lbCBwYXRjaGVzIGFyZSB1bmRlciB0aGUgR1BMdjIgbGljZW5zZSB3aXRoIHN5c3RlbSBleGNlcHRpb25zLCB3aGljaAorY2FuIGJlIGZvdW5kIG9uIDxhCitocmVmPSJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9DT1BZSU5HIj5rZXJuZWwub3JnPC9hPi4KKzwvcD4KKzxoMj5Db250cmlidXRvciBMaWNlbnNlIEdyYW50czwvaDI+Cis8cD5BbGwgPGI+aW5kaXZpZHVhbDwvYj4gY29udHJpYnV0b3JzICh0aGF0IGlzLCBjb250cmlidXRvcnMgbWFraW5nIGNvbnRyaWJ1dGlvbnMKK29ubHkgb24gdGhlaXIgb3duIGJlaGFsZikgb2YgaWRlYXMsIGNvZGUsIG9yIGRvY3VtZW50YXRpb24gdG8gdGhlIEFuZHJvaWQgT3BlbgorU291cmNlIFByb2plY3Qgd2lsbCBiZSByZXF1aXJlZCB0byBjb21wbGV0ZSwgc2lnbiwgYW5kIHN1Ym1pdCBhbiA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9jbGEtaW5kaXZpZHVhbC5odG1sIj5JbmRpdmlkdWFsCitDb250cmlidXRvciBMaWNlbnNlIEdyYW50PC9hPi4gVGhlIGdyYW50IGNhbiBiZSBleGVjdXRlZCBvbmxpbmUgdGhyb3VnaCB0aGUgPGEKK2hyZWY9Imh0dHBzOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8jc2V0dGluZ3MsYWdyZWVtZW50cyI+Y29kZSByZXZpZXcKK3Rvb2w8L2E+LiBUaGUgYWdyZWVtZW50IGNsZWFybHkgZGVmaW5lcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBoYXMgYmVlbiBjb250cmlidXRlZCB0byB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0LlRoaXMgbGljZW5zZQoraXMgZm9yIHlvdXIgcHJvdGVjdGlvbiBhcyBhIGNvbnRyaWJ1dG9yIGFzIHdlbGwgYXMgdGhlIHByb3RlY3Rpb24gb2YgdGhlCitwcm9qZWN0OyBpdCBkb2VzIG5vdCBjaGFuZ2UgeW91ciByaWdodHMgdG8gdXNlIHlvdXIgb3duIGNvbnRyaWJ1dGlvbnMgZm9yIGFueQorb3RoZXIgcHVycG9zZS48L3A+Cis8cD5Gb3IgYSA8Yj5jb3Jwb3JhdGlvbjwvYj4gKG9yIG90aGVyIGVudGl0eSkgdGhhdCBoYXMgYXNzaWduZWQgZW1wbG95ZWVzIHRvCit3b3JrIG9uIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QsIGEgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvY2xhLWNvcnBvcmF0ZS5odG1sIj5Db3Jwb3JhdGUKK0NvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQ8L2E+IGlzIGF2YWlsYWJsZS4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBHcmFudCBhbGxvd3MgYQorY29ycG9yYXRpb24gdG8gYXV0aG9yaXplIGNvbnRyaWJ1dGlvbnMgc3VibWl0dGVkIGJ5IGl0cyBkZXNpZ25hdGVkIGVtcGxveWVlcworYW5kIHRvIGdyYW50IGNvcHlyaWdodCBhbmQgcGF0ZW50IGxpY2Vuc2VzLiBOb3RlIHRoYXQgYSBDb3Jwb3JhdGUgQ29udHJpYnV0b3IKK0xpY2Vuc2UgR3JhbnQgZG9lcyBub3QgcmVtb3ZlIHRoZSBuZWVkIGZvciBhbnkgZGV2ZWxvcGVyIHRvIHNpZ24gdGhlaXIgb3duCitJbmRpdmlkdWFsIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQgYXMgYW4gaW5kaXZpZHVhbCwgdG8gY292ZXIgYW55IG9mIHRoZWlyCitjb250cmlidXRpb25zIHdoaWNoIGFyZSA8Yj48aT5ub3Q8L2k+PC9iPiBvd25lZCBieSB0aGUgY29ycG9yYXRpb24gc2lnbmluZyB0aGUKK0NvcnBvcmF0ZSBDb250cmlidXRvciBMaWNlbnNlIEdyYW50LgorPC9wPgorPHA+UGxlYXNlIG5vdGUgdGhhdCB3ZSBiYXNlZCBvdXIgZ3JhbnRzIG9uIHRoZSBvbmVzIHRoYXQgdGhlIDxhCitocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4gdXNlcywgd2hpY2ggY2FuCitiZSBmb3VuZCBvbiA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvIj50aGUgQXBhY2hlIHdlYiBzaXRlPC9hPi48L3A+Cis8aDI+V2h5IEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlPzwvaDI+Cis8cD5XZSBhcmUgc29tZXRpbWVzIGFza2VkIHdoeSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgaXMgdGhlIHByZWZlcnJlZAorbGljZW5zZSBmb3IgQW5kcm9pZC4gRm9yIHVzZXJzcGFjZSAodGhhdCBpcywgbm9uLWtlcm5lbCkgc29mdHdhcmUsIHdlIGRvIGluCitmYWN0IHByZWZlciBBU0wyLjAgKGFuZCBzaW1pbGFyIGxpY2Vuc2VzIGxpa2UgQlNELCBNSVQsIGV0Yy4pIG92ZXIgb3RoZXIKK2xpY2Vuc2VzIHN1Y2ggYXMgTEdQTC48L3A+Cis8cD5BbmRyb2lkIGlzIGFib3V0IGZyZWVkb20gYW5kIGNob2ljZS4gVGhlIHB1cnBvc2Ugb2YgQW5kcm9pZCBpcyBwcm9tb3RlCitvcGVubmVzcyBpbiB0aGUgbW9iaWxlIHdvcmxkLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZSBpdCdzIHBvc3NpYmxlIHRvIHByZWRpY3Qgb3IKK2RpY3RhdGUgYWxsIHRoZSB1c2VzIHRvIHdoaWNoIHBlb3BsZSB3aWxsIHdhbnQgdG8gcHV0IG91ciBzb2Z0d2FyZS4gU28sIHdoaWxlCit3ZSBlbmNvdXJhZ2UgZXZlcnlvbmUgdG8gbWFrZSBkZXZpY2VzIHRoYXQgYXJlIG9wZW4gYW5kIG1vZGlmaWFibGUsIHdlIGRvbid0CitiZWxpZXZlIGl0IGlzIG91ciBwbGFjZSB0byBmb3JjZSB0aGVtIHRvIGRvIHNvLiBVc2luZyBMR1BMIGxpYnJhcmllcyB3b3VsZAorb2Z0ZW4gZm9yY2UgdGhlbSB0byBkbyBzby48L3A+Cis8cD5IZXJlIGFyZSBzb21lIG9mIG91ciBzcGVjaWZpYyBjb25jZXJuczo8L3A+Cis8b2w+Cis8bGk+TEdQTCAoaW4gc2ltcGxpZmllZCB0ZXJtcykgcmVxdWlyZXMgZWl0aGVyOiBzaGlwcGluZyBvZiBzb3VyY2UgdG8gdGhlCithcHBsaWNhdGlvbjsgYSB3cml0dGVuIG9mZmVyIGZvciBzb3VyY2U7IG9yIGxpbmtpbmcgdGhlIExHUEwtZWQgbGlicmFyeQorZHluYW1pY2FsbHkgYW5kIGFsbG93aW5nIHVzZXJzIHRvIG1hbnVhbGx5IHVwZ3JhZGUgb3IgcmVwbGFjZSB0aGUgbGlicmFyeS4KK1NpbmNlIEFuZHJvaWQgc29mdHdhcmUgaXMgdHlwaWNhbGx5IHNoaXBwZWQgaW4gdGhlIGZvcm0gb2YgYSBzdGF0aWMgc3lzdGVtCitpbWFnZSwgY29tcGx5aW5nIHdpdGggdGhlc2UgcmVxdWlyZW1lbnRzIGVuZHMgdXAgcmVzdHJpY3RpbmcgT0VNcycgZGVzaWducy4KKyhGb3IgaW5zdGFuY2UsIGl0J3MgZGlmZmljdWx0IGZvciBhIHVzZXIgdG8gcmVwbGFjZSBhIGxpYnJhcnkgb24gcmVhZC1vbmx5CitmbGFzaCBzdG9yYWdlLik8L2xpPgorPGxpPkxHUEwgcmVxdWlyZXMgYWxsb3dhbmNlIG9mIGN1c3RvbWVyIG1vZGlmaWNhdGlvbiBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyB0aG9zZSBtb2RpZmljYXRpb25zLiAgTW9zdCBkZXZpY2UgbWFrZXJzIGRvCitub3Qgd2FudCB0byBoYXZlIHRvIGJlIGJvdW5kIGJ5IHRoZXNlIHRlcm1zLCBzbyB0byBtaW5pbWl6ZSB0aGUgYnVyZGVuIG9uCit0aGVzZSBjb21wYW5pZXMgd2UgbWluaW1pemUgdXNhZ2Ugb2YgTEdQTCBzb2Z0d2FyZSBpbiB1c2Vyc3BhY2UuPC9saT4KKzxsaT5IaXN0b3JpY2FsbHksIExHUEwgbGlicmFyaWVzIGhhdmUgYmVlbiB0aGUgc291cmNlIG9mIGEgbGFyZ2UgbnVtYmVyCitvZiBjb21wbGlhbmNlIHByb2JsZW1zIGZvciBkb3duc3RyZWFtIGRldmljZSBtYWtlcnMgYW5kIGFwcGxpY2F0aW9uCitkZXZlbG9wZXJzLiBFZHVjYXRpbmcgZW5naW5lZXJzIG9uIHRoZXNlIGlzc3VlcyBpcyBkaWZmaWN1bHQgYW5kIHNsb3ctZ29pbmcsCit1bmZvcnR1bmF0ZWx5LiBJdCdzIGNyaXRpY2FsIHRvIEFuZHJvaWQncyBzdWNjZXNzIHRoYXQgaXQgYmUgYXMgZWFzeSBhcworcG9zc2libGUgZm9yIGRldmljZSBtYWtlcnMgdG8gY29tcGx5IHdpdGggdGhlIGxpY2Vuc2VzLiAgR2l2ZW4gdGhlCitkaWZmaWN1bHRpZXMgd2l0aCBjb21wbHlpbmcgd2l0aCBMR1BMIGluIHRoZSBwYXN0LCBpdCBpcyBtb3N0IHBydWRlbnQgdG8KK3NpbXBseSBub3QgdXNlIExHUEwgbGlicmFyaWVzIGlmIHdlIGNhbiBhdm9pZCBpdC48L2xpPgorPC9vbD4KKzxwPlRoZSBpc3N1ZXMgZGlzY3Vzc2VkIGFib3ZlIGFyZSBvdXIgcmVhc29ucyBmb3IgcHJlZmVycmluZyBBU0wyLjAgZm9yCitvdXIgb3duIGNvZGUuIFRoZXkgYXJlbid0IGNyaXRpY2lzbXMgb2YgTEdQTCBvciBvdGhlciBsaWNlbnNlcy4gV2UgZG8KK2ZlZWwgc3Ryb25nbHkgb24gdGhpcyB0b3BpYywgZXZlbiB0byB0aGUgcG9pbnQgd2hlcmUgd2UndmUgZ29uZSBvdXQgb2Ygb3VyCit3YXkgdG8gbWFrZSBzdXJlIGFzIG11Y2ggY29kZSBhcyBwb3NzaWJsZSBpcyBBU0wyLjAuIEhvd2V2ZXIsIHdlIGxvdmUgYWxsIGZyZWUKK2FuZCBvcGVuIHNvdXJjZSBsaWNlbnNlcywgYW5kIHJlc3BlY3Qgb3RoZXJzJyBvcGluaW9ucyBhbmQgcHJlZmVyZW5jZXMuIFdlJ3ZlCitzaW1wbHkgZGVjaWRlZCB0aGF0IEFTTDIuMCBpcyB0aGUgcmlnaHQgbGljZW5zZSBmb3Igb3VyIGdvYWxzLjwvcD4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2xpZmUtb2YtYS1idWcuamQgYi9wZGsvZG9jcy9zb3VyY2UvbGlmZS1vZi1hLWJ1Zy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU4YWUxCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2xpZmUtb2YtYS1idWcuamQKQEAgLTAsMCArMSwxMjggQEAKK3BhZ2UudGl0bGU9TGlmZSBvZiBhIEJ1ZworZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPHA+VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgcHJvamVjdCBtYWludGFpbnMgYSBwdWJsaWMgaXNzdWUgdHJhY2tlciB3aGVyZSB5b3UKK2NhbiByZXBvcnQgYnVncyBhbmQgcmVxdWVzdCBmZWF0dXJlcyBmb3IgdGhlIEFuZHJvaWQgc29mdHdhcmUgc3RhY2suIChGb3IKK2RldGFpbHMgb24gdGhpcyBpc3N1ZSB0cmFja2VyLCBwbGVhc2Ugc2VlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL3JlcG9ydC1idWdzLmh0bWwiPnRoZSBSZXBvcnRpbmcgQnVncyBwYWdlPC9hPi4pCitSZXBvcnRpbmcgYnVncyBpcyBncmVhdCAodGhhbmsgeW91ISksIGJ1dCB3aGF0IGhhcHBlbnMgdG8gYSBidWcgcmVwb3J0IG9uY2UKK3lvdSBmaWxlIGl0PyBUaGlzIHBhZ2UgZGVzY3JpYmVzIHRoZSBMaWZlIG9mIGEgQnVnLjwvcD4KKzxwPjxpPlBsZWFzZSBub3RlOiB0aGUgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoQU9TUCkgaXNzdWUgdHJhY2tlciBpcworaW50ZW5kZWQgb25seSBmb3IgYnVncyAmYW1wOyBmZWF0dXJlIHJlcXVlc3RzIHJlbGF0ZWQgdG8gdGhlIEFuZHJvaWQgc29mdHdhcmUKK3N0YWNrLiBCZWNhdXNlIG1hbnkgdXNlcnMgZmluZCB0aGVpciB3YXkgaGVyZSBsb29raW5nIGZvciB0aGUgR29vZ2xlIGFwcHMgZm9yCitBbmRyb2lkIChzdWNoIGFzIEdtYWlsIGFuZCBzbyBvbiksIHdlIGhhdmUgY29tcG9uZW50cyBzZXQgdXAgZm9yIHRoZWlyCitjb252ZW5pZW5jZS4gSG93ZXZlciwgdGhlc2UgYXBwcyBhcmUgbm90IHBhcnQgb2YgQW5kcm9pZCwgYW5kIGFueSBpc3N1ZXMKK3JlcG9ydGVkIG9uIHRoZXNlIGNvbXBvbmVudHMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHRvIHJlY2VpdmUgYXR0ZW50aW9uLgorTW9zdCBub3RhYmx5LCB0byByZXBvcnQgaXNzdWVzIHJlbGF0ZWQgdG8gQW5kcm9pZCBNYXJrZXQsIHlvdSBzaG91bGQgdmlzaXQgdGhlCis8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc3VwcG9ydC9mb3J1bS9wL0FuZHJvaWQrTWFya2V0P2hsPWVuIj5BbmRyb2lkCitNYXJrZXQgU3VwcG9ydCBGb3J1bTwvYT4uPC9pPjwvcD4KKzxwPkhlcmUncyB0aGUgTGlmZSBvZiBhIEJ1ZywgaW4gYSBudXRzaGVsbDo8L3A+Cis8b2w+Cis8bGk+QSBidWcgaXMgZmlsZWQsIGFuZCBoYXMgdGhlIHN0YXRlICJOZXciLjwvbGk+Cis8bGk+QW4gQU9TUCBjb250cmlidXRvciBwZXJpb2RpY2FsbHkgcmV2aWV3cyBhbmQgdHJpYWdlcyBidWdzLiBCdWdzIGFyZQordHJpYWdlZCBpbnRvIG9uZSBvZiBmb3VyICJidWNrZXRzIjogTmV3LCBPcGVuLCBOby1BY3Rpb24sIG9yIFJlc29sdmVkLjwvbGk+Cis8bGk+RWFjaCBidWNrZXQgaW5jbHVkZXMgYSBudW1iZXIgb2Ygc3RhdGVzIHRoYXQgcHJvdmlkZSBtb3JlIGRldGFpbCBvbiB0aGUKK2ZhdGUgb2YgdGhlIGlzc3VlLjwvbGk+Cis8bGk+QnVncyBpbiB0aGUgIlJlc29sdmVkIiBidWNrZXQgd2lsbCBldmVudHVhbGx5IGJlIGluY2x1ZGVkIGluIGEgZnV0dXJlCityZWxlYXNlIG9mIHRoZSBBbmRyb2lkIHNvZnR3YXJlLjwvbGk+Cis8L29sPgorPGgyPkJ1Y2tldCBEZXRhaWxzPC9oMj4KKzxwPkhlcmUgaXMgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGVhY2ggYnVja2V0LCB3aGF0IGl0IG1lYW5zLCBhbmQgaG93CitpdCdzIGhhbmRsZWQuPC9wPgorPGgzPk5ldyBJc3N1ZXM8L2gzPgorPHA+TmV3IGlzc3VlcyBpbmNsdWRlIGJ1ZyByZXBvcnRzIHRoYXQgYXJlIG5vdCB5ZXQgYmVpbmcgYWN0ZWQgdXBvbi4gVGhlIHR3bworc3RhdGVzIGFyZTo8L3A+Cis8dWw+Cis8bGk+PGI+TmV3PC9iPjxwPlRoZSBidWcgcmVwb3J0IGhhcyBub3QgeWV0IGJlZW4gdHJpYWdlZCAodGhhdCBpcywgcmV2aWV3ZWQgYnkKK2FuIEFPU1AgY29udHJpYnV0b3IuKTwvcD48L2xpPgorPGxpPjxiPk5lZWRzSW5mbzwvYj48cD5UaGUgYnVnIHJlcG9ydCBoYXMgaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGFjdAordXBvbi4gVGhlIHBlcnNvbiB3aG8gcmVwb3J0ZWQgdGhlIGJ1ZyBuZWVkcyB0byBwcm92aWRlIGFkZGl0aW9uYWwgZGV0YWlsCitiZWZvcmUgaXQgY2FuIGJlIHRyaWFnZWQuIElmIGVub3VnaCB0aW1lIHBhc3NlcyBhbmQgbm8gbmV3IGluZm9ybWF0aW9uIGlzCitwcm92aWRlZCwgdGhlIGJ1ZyBtYXkgYmUgY2xvc2VkIGJ5IGRlZmF1bHQsIGFzIG9uZSBvZiB0aGUgTm8tQWN0aW9uCitzdGF0ZXMuPC9wPjwvbGk+Cis8L3VsPgorCis8aDM+T3BlbiBJc3N1ZXM8L2gzPgorPHA+VGhpcyBidWNrZXQgY29udGFpbnMgYnVncyB0aGF0IG5lZWQgYWN0aW9uLCBidXQgd2hpY2ggYXJlIHN0aWxsCit1bnJlc29sdmVkLCBwZW5kaW5nIGEgY2hhbmdlIHRvIHRoZSBzb3VyY2UgY29kZS48L3A+Cis8dWw+Cis8bGk+PGI+VW5hc3NpZ25lZDwvYj48cD5UaGUgYnVnIHJlcG9ydCBoYXMgYmVlbiByZWNvZ25pemVkIGFzIGFuIGFkZXF1YXRlbHkKK2RldGFpbGVkIHJlcG9ydCBvZiBhIGxlZ2l0aW1hdGUgaXNzdWUsIGJ1dCBoYXMgbm90IHlldCBiZWVuIGFzc2lnbmVkIHRvIGFuCitBT1NQIGNvbnRyaWJ1dG9yIHRvIGJlIGZpeGVkLiBUeXBpY2FsbHksIGJ1Z3MgaW4gdGhpcyBzdGF0ZSBhcmUgY29uc2lkZXJlZCBsb3cKK3ByaW9yaXR5LCBhdCBsZWFzdCBpbnNvZmFyIHRoYXQgaWYgdGhleSB3ZXJlIGhpZ2ggcHJpb3JpdHksIHRoZXknZCBiZSBhc3NpZ25lZAordG8gYSBjb250cmlidXRvci48L3A+PC9saT4KKzxsaT48Yj5SZXZpZXdlZDwvYj48cD5MaWtlIDxjb2RlPlVuYXNzaWduZWQ8L2NvZGU+LCBidXQgdGhlIGlzc3VlCityZXByZXNlbnRlZCBpcyBiZWluZyB0cmFja2VkIGluIGEgc2VwYXJhdGUgYnVnIGRhdGFiYXNlLiBGb3IgZXhhbXBsZSwgdGhlIGJ1ZworbWlnaHQgaGF2ZSBiZWVuIHJlcG9ydGVkIHZpYSBhbiBpbnRlcm5hbCBidWctdHJhY2tpbmcgc3lzdGVtLAord2hpY2ggaXMgY29uc2lkZXJlZCB0aGUgIm1hc3RlciIgY29weS4gKEZvciBpbnN0YW5jZSwgR29vZ2xlIG1haW50YWlucyBvbmUKK3N1Y2ggcHJpdmF0ZSBpc3N1ZSB0cmFja2VyLCBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGJ1Z3Mgd2hpY2ggY29udGFpbgorc2Vuc2l0aXZlIGluZm9ybWF0aW9uIHdoaWNoIGNhbid0IGJlIHJldmVhbGVkIHB1YmxpY2x5Lik8L3A+PC9saT4KKzxsaT48Yj5Bc3NpZ25lZDwvYj48bGk+TGlrZSA8Y29kZT5VbmFzc2lnbmVkPC9jb2RlPiwgYnV0IHRoZSBidWcgaGFzIGJlZW4KK2FjdHVhbGx5IGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgY29udHJpYnV0b3IgdG8gZml4LjwvcD48L2xpPgorPC91bD4KKzxwPlR5cGljYWxseSwgYSBnaXZlbiBidWcgd2lsbCBzdGFydCBpbiA8Y29kZT5VbmFzc2lnbmVkPC9jb2RlPiwgd2hlcmUgaXQKK3dpbGwgcmVtYWluIHVudGlsIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHVwY29taW5nIHJlbGVhc2UsIGF0IHdoaWNoCitwb2ludCBpdCB3aWxsIGVudGVyIDxjb2RlPlJldmlld2VkPC9jb2RlPiBvciA8Y29kZT5Bc3NpZ25lZDwvY29kZT4uIEhvd2V2ZXIsCitub3RlIHRoYXQgdGhpcyBpc24ndCBhIGd1YXJhbnRlZSwgYW5kIGl0J3Mgbm90IHVuY29tbW9uIGZvciBidWdzIHRvIGdvIGZyb20KKzxjb2RlPlVuYXNzaWduZWQ8L2NvZGU+IHRvIG9uZSBvZiB0aGUgUmVzb2x2ZWQgc3RhdGVzLjwvcD4KKzxwPkluIGdlbmVyYWwsIGlmIGEgYnVnIGlzIGluIG9uZSBvZiB0aGVzZSBPcGVuIHN0YXRlcywgdGhlIEFPU1AgdGVhbSBoYXMKK3JlY29nbml6ZWQgaXQgYXMgYSBsZWdpdGltYXRlIGlzc3VlIGFuZCB3aWxsIGZpeCBpdCBhY2NvcmRpbmcgdG8gdGhlIHByb2R1Y3QKK3ByaW9yaXRpZXMgYW5kIG1pbGVzdG9uZXMuIEhvd2V2ZXIsIGl0J3MgaW1wb3NzaWJsZSB0byBndWFyYW50ZWUgYSBmaXggaW4gdGltZSAKK2ZvciBhbnkgcGFydGljdWxhciByZWxlYXNlLjwvcD4KKworPGgzPk5vLUFjdGlvbiBJc3N1ZXM8L2gzPgorPHA+VGhpcyBidWNrZXQgY29udGFpbnMgYnVncyB0aGF0IGhhdmUgZm9yIG9uZSByZWFzb24gb3IgYW5vdGhlciBiZWVuCitkZXRlcm1pbmVkIHRvIG5vdCByZXF1aXJlIGFueSBhY3Rpb24uPC9wPgorPHVsPgorPGxpPjxiPlNwYW08L2I+PHA+QSBraW5kIHNvdWwgc2VudCB1cyBzb21lIGRlbGljaW91cyBwb3JrIHByb2R1Y3RzLCB0aGF0IHdlLAorcmVncmV0dGFibHksIGRvIG5vdCB3YW50LjwvcD48L2xpPgorPGxpPjxiPlF1ZXN0aW9uPC9iPjxwPlNvbWVvbmUgbWlzdG9vayB0aGUgaXNzdWUgdHJhY2tlciBmb3IgYSBoZWxwIGZvcnVtLgorKFRoaXMgaXMgbm90IGFzIHVuY29tbW9uIGFzIG9uZSBtaWdodCBhc3N1bWU6IG1hbnkgdXNlcnMgd2hvc2UgbmF0aXZlIGxhbmd1YWdlCitpc24ndCBFbmdsaXNoIGNhbiBtYWtlIHRoaXMgbWlzdGFrZS4pPC9wPjwvbGk+Cis8bGk+PGI+VW5yZXByb2R1Y2libGU8L2I+PHA+QW4gQU9TUCBjb250cmlidXRvciBhdHRlbXB0ZWQgdG8gcmVwcm9kdWNlIHRoZQorYmVoYXZpb3IgZGVzY3JpYmVkLCBhbmQgd2FzIHVuYWJsZSB0byBkbyBzby4gVGhpcyBzb21ldGltZXMgbWVhbnMgdGhhdCB0aGUgYnVnCitpcyBsZWdpdGltYXRlIGJ1dCBzaW1wbHkgcmFyZSBvciBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlLCBhbmQgc29tZXRpbWVzIG1lYW5zCit0aGF0IHRoZSBidWcgd2FzIGZpeGVkIGluIGEgbGF0ZXIgcmVsZWFzZS48L3A+PC9saT4KKzxsaT48Yj5Xb3JraW5nQXNJbnRlbmRlZDwvYj48cD5BbiBBT1NQIGNvbnRyaWJ1dG9yIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlCitiZWhhdmlvciBkZXNjcmliZWQgaXNuJ3QgYSBidWcsIGJ1dCBpcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuIFRoaXMgc3RhdGUgaXMKK2Fsc28gY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgIldBSSIuPC9iPjwvbGk+Cis8bGk+PGI+RGVjbGluZWQ8L2I+PHA+VGhpcyBpcyBsaWtlIDxjb2RlPldvcmtpbmdBc0ludGVuZGVkPC9jb2RlPiwgZXhjZXB0Cit0eXBpY2FsbHkgdXNlZCBmb3IgZmVhdHVyZSByZXF1ZXN0cyBpbnN0ZWFkIG9mIGJ1Z3MuICBUaGF0IGlzLCBhbiBBT1NQCitjb250cmlidXRvciBoYXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZXF1ZXN0IGlzIG5vdCBnb2luZyB0byBiZSBpbXBsZW1lbnRlZCBpbgorQW5kcm9pZC48L2I+PC9saT4KKzwvdWw+CisKKzxoMz5SZXNvbHZlZCBJc3N1ZXM8L2gzPgorPHA+VGhpcyBidWNrZXQgY29udGFpbnMgYnVncyB0aGF0IGhhdmUgaGFkIGFjdGlvbiB0YWtlbiwgYW5kIGFyZSBub3cKK2NvbnNpZGVyZWQgcmVzb2x2ZWQuPC9wPgorPHVsPgorPGxpPjxiPkZ1dHVyZVJlbGVhc2U8L2I+PHA+VGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgKG9yIGZlYXR1cmUgaW1wbGVtZW50ZWQpIGluCithIHNvdXJjZSB0cmVlLCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiBhIGZvcm1hbCBBbmRyb2lkCitwbGF0Zm9ybSByZWxlYXNlLiAoTm90ZSB0aGF0IHRoaXMgbWF5IGFsc28gaW5jbHVkZSBmaXhlcyB0aGF0IGV4aXN0IGluIGEKK3ByaXZhdGUgc291cmNlIHRyZWUgdGhhdCBoYXMgbm90IHlldCBiZWVuIGNvbnRyaWJ1dGVkIHRvIGEgcHVibGljCit0cmVlLik8L3A+PC9saT4KKzxsaT48Yj5SZWxlYXNlZDwvYj48cD5UaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCwgYW5kIGlzIGluY2x1ZGVkIGluIGEgZm9ybWFsCitBbmRyb2lkIHBsYXRmb3JtIHJlbGVhc2UuIFdoZW4gdGhpcyBzdGF0ZSBpcyBzZXQsIHdlIHRyeSB0byBhbHNvIHNldCBhCitwcm9wZXJ0eSBpbmRpY2F0aW5nIHdoaWNoIHJlbGVhc2UgaXQgd2FzIGZpeGVkIGluLjwvcD48L2xpPgorPGxpPjxiPkR1cGxpY2F0ZTwvYj48cD5UaGlzIGJ1ZyBpcyBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyLCBleGlzdGluZyBidWcKK3JlcG9ydC48L3A+PC9saT4KKzwvdWw+CisKKzxoMj5PdGhlciBTdHVmZjwvaDI+Cis8cD5UaGUgc3RhdGVzIGFuZCBsaWZlY3ljbGUgYWJvdmUgYXJlIGhvdyB3ZSBnZW5lcmFsbHkgdHJ5IHRvIHRyYWNrIHNvZnR3YXJlLgorSG93ZXZlciwgQW5kcm9pZCBjb250YWlucyBhIGxvdCBvZiBzb2Z0d2FyZSBhbmQgZ2V0cyBhIGNvcnJlc3BvbmRpbmdseSBsYXJnZQorbnVtYmVyIG9mIGJ1Z3MuIEFzIGEgcmVzdWx0LCBzb21ldGltZXMgYnVncyBkb24ndCBtYWtlIGl0IHRocm91Z2ggYWxsIHRoZQorc3RhdGVzIGluIGEgZm9ybWFsIHByb2dyZXNzaW9uLiBXZSBkbyB0cnkgdG8ga2VlcCB0aGUgc3lzdGVtIHVwIHRvIGRhdGUsIGJ1dAord2UgdGVuZCB0byBkbyBzbyBpbiBwZXJpb2RpYyAiYnVnIHN3ZWVwcyIgd2hlcmUgd2UgcmV2aWV3IHRoZSBkYXRhYmFzZSBhbmQKK21ha2UgdXBkYXRlcy48L3A+Cis8cD5TaW5jZSB0aGUgQU9TUCBpcyBlc3NlbnRpYWxseSBjb25zdGFudGx5IGV2b2x2aW5nLCB3ZSBkbyBtYWtlIHR3ZWFrcyB0bwordGhlIGxpc3Qgb2YgYnVnIHN0YXRlcyBhbmQgdGhlIGxpZmVjeWNsZSBkZXNjcmliZWQgYWJvdmUuICBXaGVuIHdlIGRvIHRoaXMsCitob3dldmVyLCB3ZSdsbCBiZSBzdXJlIHRvIHVwZGF0ZSB0aGlzIHBhZ2UgYXMgd2VsbC48L3A+Cis8cD5GaW5hbGx5LCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgZm9yIGEgdmFyaWV0eSBvZiByZWFzb25zLCB0aGVyZSBhcmUKK2FjdHVhbGx5IG11bHRpcGxlIGlzc3VlIHRyYWNrZXJzIGZvciBBbmRyb2lkLXJlbGF0ZWQgaXNzdWVzLiBUaGUgPGEKK2hyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9saXN0Ij5Hb29nbGUgQ29kZSBQcm9qZWN0CitIb3N0aW5nIElzc3VlIFRyYWNrZXI8L2E+IGlzIHRoZSA8Yj5vbmx5PC9iPiBvZmZpY2lhbCBwdWJsaWMgaXNzdWUgdHJhY2tlcjsgaG93ZXZlciwKK0dvb2dsZSBhbHNvIG1haW50YWlucyBhIHByaXZhdGUgaXNzdWUgdHJhY2tlciwgb3duLCBhcyBkbyBtb3N0IE9FTXMuIFdlIHRyeSB0bwora2VlcCB0aGUgcHVibGljIGlzc3VlIHRyYWNrZXIgaW4gc3luYyB3aXRoIHByaXZhdGUgaXNzdWUgdHJhY2tlcnMKK3doZXJldmVyIHBvc3NpYmxlLCBidXQgaW4gY2FzZXMgd2hlcmUgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIGFuZCBzZWN1cml0eQoraXNzdWVzIGFyZSBpbnZvbHZlZCwgdGhpcyBpc24ndCBhbHdheXMgcG9zc2libGUuPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2xpZmUtb2YtYS1wYXRjaC5qZCBiL3Bkay9kb2NzL3NvdXJjZS9saWZlLW9mLWEtcGF0Y2guamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4YWZhNQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9saWZlLW9mLWEtcGF0Y2guamQKQEAgLTAsMCArMSwxMSBAQAorcGFnZS50aXRsZT1MaWZlIG9mIGEgUGF0Y2gKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxwPlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKEFPU1ApIHVzZXMgYSB3ZWItYmFzZWQgY29kZSByZXZpZXcgdG9vbAora25vd24gYXMgImdlcnJpdCIuIFRoZSBpbWFnZSBiZWxvdyBpcyBhIGZsb3djaGFydCB0aGF0IGRldGFpbHMgd2hhdCBoYXBwZW5zIHRvCithIHBhdGNoLCBvbmNlIGl0J3MgYmVlbiB3cml0dGVuLiBUaG91Z2ggaXQgbWF5IGFwcGVhciBjb21wbGV4LCB0aGUgbWFqb3JpdHkgb2YKK3RoZSBzdGVwcyBiZWxvdyBhcmUgcGVyZm9ybWVkIGluIHRoZSB3ZWIgYXBwbGljYXRpb24uPC9wPgorPHA+Rm9yIGZ1bGwgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBnZXQgc2V0IHVwIHRvIHVzZSBnZXJyaXQgYW5kIGdpdCwgcGxlYXNlCitzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9zdWJtaXQtcGF0Y2hlcy5odG1sIj50aGUgU3VibWl0dGluZyBQYXRjaGVzCitwYWdlPC9hPi48L3A+Cis8aW1nIHNyYz0ie0Bkb2NSb290fWltYWdlcy93b3JrZmxvdy0wLnBuZyIvPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL292ZXJ2aWV3LTEuMC5qZCBiL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy0xLjAuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiNWNkNgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy0xLjAuamQKQEAgLTAsMCArMSwxNTcgQEAKK3BhZ2UudGl0bGU9QW5kcm9pZCAxLjAgRmVhdHVyZXMKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+PGRpdj48ZGl2PjxkaXY+VGhpcyBwYWdlIHByb3ZpZGVzIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiBBbmRyb2lkIDEuMAorZmVhdHVyZXMuIFRvIHNlZSB0aGUgY29kZSBpdHNlbGYsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgPGEgaHJlZj0iaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvIj5HaXRXZWI8L2E+CitpbnRlcmZhY2UgdG8gdmlldyBzbmFwc2hvdHMgb2YgdGhlIGZpbGVzLCBvciB5b3UgY2FuIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2Rvd25sb2FkLmh0bWwiPmRvd25sb2FkPC9hPgordGhlIHNvdXJjZSBjb2RlIG9udG8geW91ciBsb2NhbCBtYWNoaW5lLjxicj48YnI+PGI+QXBwbGljYXRpb25zPC9iPgorPGJyPjxicj5UaGUgQW5kcm9pZCBwbGF0Zm9ybSBjb21lcyB3aXRoIGEgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgd3JpdHRlbiB1c2luZyB0aGUgSmF2YSBwcm9ncmFtbWluZyBsYW5ndWFnZTo8YnI+PHVsPjxsaT48aT5Ib21lPC9pPgorZGlzcGxheXMgYXBwbGljYXRpb25zLCB3aWRnZXRzLCBhbmQgc2hvcnRjdXRzLiBJdCBhbHNvIHN1cHBvcnRzIGN1c3RvbWl6YWJsZSB3YWxsIHBhcGVyLgorPC9saT4KKzxsaT48aT5QaG9uZTwvaT4KK3N1cHBvcnRzIHJlZ3VsYXIgdGVsZXBob255IGZ1bmN0aW9ucyBhcyB3ZWxsIGFzIGNhbGwgY29udHJvbHMsIGNvbmZlcmVuY2UgY2FsbHMsIHN1cHBsZW1lbnRhcnkgc2VydmljZXMsIGFuZCBlYXN5IGludGVncmF0aW9uIHdpdGggPGk+Q29udGFjdHM8L2k+CisuPGJyPjwvbGk+Cis8bGk+PGk+V2ViIEJyb3dzZXI8L2k+CitpcyBhIGZ1bGx5IGZlYXR1cmVkIFdlYktpdC1iYXNlZCBicm93c2VyIHRoYXQgc3VwcG9ydHMgSFRNTCBhbmQgWEhUTUwuCis8L2xpPgorPGxpPjxpPkVtYWlsPC9pPgorcHJvdmlkZXMgYWNjZXNzIHRvIGVtYWlsIHNlcnZlcnMgY29tbW9ubHkgZm91bmQgb24gdGhlIEludGVybmV0IGFuZCBzdXBwb3J0cyBQT1AzLCBJTUFQNCwgYW5kIFNNVFAuCis8L2xpPgorPGxpPjxpPk1lZGlhIFBsYXllcjwvaT4KK2VuYWJsZXMgbWFuYWdpbmcsIGltcG9ydGluZywgYW5kIHBsYXlpbmcgYmFjayBjb250ZW50IHRoYXQgaGFzIGJlZW4gZW5jb2RlZCBpbiB2YXJpb3VzIGZvcm1zLjxicj48L2xpPgorPGxpPjxpPkFsYXJtIENsb2NrLCBDYWxjdWxhdG9yLCBDYWxlbmRhciwgQ2FtZXJhLCBDb250YWN0cywgSU0sIE1NUywgU2V0dGluZ3MsPC9pPgorPGk+Vm9pY2UgRGlhbGVyPC9pPgorLCBhbmQgbWFueSBvdGhlciBhcHBsaWNhdGlvbnMgYXJlIGFsc28gaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLjxicj48L2xpPgorPC91bD4KKzxiPkFwcGxpY2F0aW9uIGZyYW1ld29yazwvYj4KKzxicj48YnI+PC9kaXY+Cis8ZGl2PlRoZSBBbmRyb2lkIEFwcGxpY2F0aW9uIEZyYW1ld29yayBoYXMgYmVlbiBkZXNpZ25lZCB0byBwcm92aWRlIGEgcmljaCBzZXQgb2YgQVBJcyBmb3IgdGhpcmQtcGFydHkgYXBwbGljYXRpb24gZGV2ZWxvcGVycy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL2d1aWRlL2luZGV4Lmh0bWwiPkFuZHJvaWQgU0RLIGRldmVsb3BlciBndWlkZTwvYT4KKy48Yj48YnI+PC9iPgorPC9kaXY+Cis8ZGl2PjwvZGl2PgorPGRpdj48Yj5BbmRyb2lkIHJ1bnRpbWU8L2I+Cis8Yj48YnI+PGJyPjwvYj4KK0FuZHJvaWQgYXBwbGljYXRpb25zIHJ1biBvbiBEYWx2aWssIGEgY3VzdG9tIHZpcnR1YWwgbWFjaGluZSAoVk0pIGRlc2lnbmVkIGZvciBlbWJlZGRlZCB1c2UuIFRoZSBEYWx2aWsgVk0gcnVucyBkZXggZXhlY3V0YWJsZSBmaWxlcywgd2hpY2ggYXJlIHR5cGljYWxseSBjb21waWxlZCBmcm9tIHNvdXJjZSBjb2RlIHdyaXR0ZW4gaW4gSmF2YS48YnI+PGJyPjwvZGl2PgorPGRpdj5UaGUgZGV4IGV4ZWN1dGFibGUgZm9ybWF0IGlzIGRlc2lnbmVkIHRvIGhhdmUgdGhlc2UgY2hhcmFjdGVyaXN0aWNzOjxicj48dWw+PGxpPkVmZmljaWVudCBvbi1kZXZpY2Ugc3RvcmFnZS4KKzwvbGk+Cis8bGk+RWZmaWNpZW50IHJ1bnRpbWUgbWVtb3J5IHVzYWdlLgorPC9saT4KKzxsaT5FYXNlIG9mIGludGVycHJldGF0aW9uLjxicj48L2xpPgorPC91bD4KK0RhbHZpayBoYXMgdGhlIGZvbGxvd2luZyBydW50aW1lIGNoYXJhY3RlcmlzdGljczoKKzx1bD48bGk+RWZmaWNpZW50IHN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbmN1cnJlbnQgVk0gcHJvY2Vzc2VzLCBpbmNsdWRpbmcgYW1vcnRpemVkIGluaXRpYWxpemF0aW9uIGFuZCBoZWF2aWx5IHNoYXJlZCBtZW1vcnkuCis8L2xpPgorPGxpPk9wdGltaXplZCBpbnRlcnByZXRlci4KKzwvbGk+Cis8bGk+RWZmaWNpZW50IGxpbmthZ2UgdG8gbG93LWxldmVsIG5hdGl2ZSBjb2RlLgorPC9saT4KKzxsaT5BIGZhbWlsaWFyIGFuZCByaWNoIHNldCBvZiBjb3JlIGxpYnJhcnkgZnVuY3Rpb25hbGl0eS4gRm9yIGEgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgbGlicmFyaWVzLCBzZWUgPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvcGFja2FnZXMuaHRtbCI+aHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvcGFja2FnZXMuaHRtbDwvYT4KKy4KKzwvbGk+Cis8bGk+RW5oYW5jZWQgSkRXUCBzdXBwb3J0LCBlbmFibGluZyBlYXNpZXIgZGVidWdnaW5nIG9mIG11bHRpcGxlIHByb2Nlc3NlcyBzaW11bHRhbmVvdXNseS4KKzwvbGk+Cis8bGk+Sk5JIHN1cHBvcnQuCis8L2xpPgorPC91bD4KKzxiPk5hdGl2ZSBsaWJyYXJpZXMgPGJyPjwvYj4KKzxicj5UaGUgQW5kcm9pZCBwbGF0Zm9ybSBtYWtlcyB1c2Ugb2YgbWFueSBuYXRpdmUgbGlicmFyaWVzLCBpbmNsdWRpbmc6PGJyPjx1bD48bGk+PGk+QmlvbmljPC9pPgorLCBhIGN1c3RvbSBsaWJjIGltcGxlbWVudGF0aW9uIG9wdGltaXplZCBmb3IgZW1iZWRkZWQgc3lzdGVtcy4KKzwvbGk+Cis8bGk+R3JhcGhpY3MgbGlicmFyaWVzIGZvciAyRCBhbmQgM0QgKE9wZW5HTCBFUyAxLjApIGdyYXBoaWNzIHN1cHBvcnQuPGJyPjwvbGk+Cis8bGk+b3BlbkNvcmUgdG8gcHJvdmlkZSB0aGUgYnVsayBvZiBBbmRyb2lkJ3MgbXVsdGltZWRpYSBjYXBhYmlsaXR5LiBJdCBpbmNsdWRlcyBzdXBwb3J0IGZvciBuZXR3b3JrIHN0cmVhbWluZyAoSFRUUCBhbmQgUlRTUCksIGFzIHdlbGwgYXMgbW9zdCBvZiB0aGUgY29kZWNzIGFuZCBtZWRpYSBmaWxlIHBhcnNlcnMgdXNlZCBieSB0aGUgc3lzdGVtLjxicj48L2xpPgorPGxpPnNxbGl0ZSB0byBzdXBwb3J0IGhhdmluZyBhIGxpZ2h0d2VpZ2h0IHRyYW5zYWN0aW9uYWwgZGF0YSBzdG9yZS4KKzwvbGk+Cis8bGk+V2ViS2l0IGxpYnJhcnkgdG8gcG93ZXIgQW5kcm9pZCdzIFdlYktpdCBiYXNlZCBmdWxsIHdlYiBicm93c2VyLjxicj48L2xpPgorPC91bD4KKzxicj48Yj5TeXN0ZW0gc29mdHdhcmU8L2I+Cis8Yj48YnI+PC9iPgorPGJyPjwvZGl2PgorPGRpdj5BYm91dCBBbmRyb2lkJ3Mgb3BlcmF0aW5nIHN5c3RlbToKKzx1bD48bGk+QmFzZWQgb24gTGludXggMi42LjI1IGZvciBBUk0uPGJyPjwvbGk+Cis8bGk+UGxhdGZvcm0gY3VycmVudGx5IGV4cGVjdHMgQVJNIFY1VCBvciBiZXR0ZXIgYXJjaGl0ZWN0dXJlLiBTdXBwb3J0IGZvciBlYXJsaWVyIGFyY2hpdGVjdHVyZXMgY291bGQgYmUgYWRkZWQsIGJ1dCBDUFVzIHdpdGhvdXQgYW4gTU1VIHdvdWxkIGJlIGRpZmZpY3VsdCB0byBzdXBwb3J0LgorPC9saT4KKzxsaT5BIHNldCBvZiBrZXJuZWwgZW5oYW5jZW1lbnRzIGFyZSBwcm92aWRlZCB0byBzdXBwb3J0IEFuZHJvaWQuIFRoZSBwYXRjaGVzIGluY2x1ZGUgYWxhcm0sIGFzaG1lbSwgYmluZGVyLCBwb3dlciBtYW5hZ2VtZW50LCBsb3cgbWVtb3J5IGtpbGxlciwga2VybmVsIGRlZ3VnZ2VyLCBhbmQgbG9nZ2VyIDxiPi48YnI+PC9iPgorPC9saT4KKzxsaT5XaGlsZSB0aGUgcGxhdGZvcm0gaXMgZGVzaWduZWQgdG8gYmUgY2hpcHNldCBhZ25vc3RpYywgYW5kIHdpbGwgcnVuIG9uIHZpcnR1YWxseSBhbnkgQVJNLWJhc2VkIExpbnV4IGtlcm5lbCBlbnZpcm9ubWVudCwgdmVyc2lvbiAxLjAgb2YgdGhlIHBsYXRmb3JtIGhhcyBiZWVuIHRlc3RlZCBhbmQgdmVyaWZpZWQgb24gdGhlIE1TTSA3SyBjaGlwc2V0cyA8Yj4uPC9iPgorT3ZlciB0aW1lIHdlIGV4cGVjdCB0byBzZWUgc3VwcG9ydCBmb3Igb3RoZXIgbWFqb3IgY2hpcHNldHMuCitLZXJuZWwgcGF0Y2hlcyBmb3IgTVNNIGJhc2VkIGNoaXBzZXRzIGFyZSBhbHNvIGF2YWlsYWJsZS4KKzwvbGk+Cis8bGk+RkFUMzIgZmlsZSBzeXN0ZW0gaXMgc3VwcG9ydGVkLgorPC9saT4KKzxsaT5TdXBwb3J0IGZvciBUQ1AvSVAgKFRDUCwgVURQLCBldGMpLgorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxkaXY+QSBtaW5pbWFsIHJlZmVyZW5jZSBib290bG9hZGVyIGZvciB0aGUgc3VwcG9ydGVkIGNoaXBzZXQgaXMgcHJvdmlkZWQuIEl0IGlzIGNhcGFibGUgb2YgYm9vdGluZyBMaW51eCBmcm9tIFJBTSwgZGVidWdnZXIsIGFuZCBOQU5EIEZsYXNoLjxicj48L2Rpdj4KKzxkaXY+PGJyPkFib3V0IEFuZHJvaWQncyBzdXBwb3J0IGZvciBkZWJ1Z2dpbmc6PGJyPjx1bD48bGk+RGVidWdnaW5nIG5hdGl2ZSBjb2RlIGlzIHN1cHBvcnRlZCB2aWEgR0RCIChHTlUgUHJvamVjdCBEZWJ1Z2dlcikgb3ZlciBVU0IuCis8L2xpPgorPGxpPkRlYnVnZ2luZyBtYW5hZ2VkIGNvZGUgaXMgc3VwcG9ydGVkIHZpYSBhbnkgSkRXUC1jb21wYXRpYmxlIGRlYnVnZ2VyIG92ZXIgVVNCLgorPC9saT4KKzxsaT5Mb2dnaW5nIGFuZCBjcmFzaCBsb2dzIHN1cHBvcnRlZCBmb3IgZGVidWdnaW5nLgorPC9saT4KKzwvdWw+Cis8Yj5TdXBwb3J0ZWQgaGFyZHdhcmUgPGJyPjwvYj4KKzx1bD48bGk+VGhlIHBsYXRmb3JtIHdpbGwgcnVuIG9uIGFsbW9zdCBvbiBhbnkgQVJNIGJhc2VkIExpbnV4IGtlcm5lbCBlbnZpcm9ubWVudC4KKzwvbGk+Cis8bGk+VGhlIHBsYXRmb3JtIHJlcXVpcmVzIGEgbWluaW11bSBvZiAxMjggTUIgb2YgUkFNIGFuZCAyNTYgTUIgb2ZGbGFzaCBtZW1vcnkuIEFuT0VNIG1heSB3YW50IHRvIHN1cHBvcnQgbW9yZSBGbGFzaCBtZW1vcnkgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBkb3dubG9hZCBtb3JlIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyB0byB1c2VyIGRldmljZXMuPGJyPjwvbGk+Cis8bGk+VGhlIHBsYXRmb3JtIHdpbGwgaW50ZXJmYWNlIHdpdGggYSBiYXNlYmFuZCByYWRpbyBzdGFjayBwcm92aWRlZCBleHRlcm5hbGx5IHZpYSBhIFJhZGlvIEludGVyZmFjZSBMYXllciAoUklMKS4KKzwvbGk+Cis8bGk+ODAyLjExIGIvZyBXaS1GaQorPC9saT4KKzxsaT5TdGFuZGFyZCBVU0IgaW50ZXJmYWNlLCBpbmNsdWRpbmcgVVNCIDIuMAorPC9saT4KKzxsaT5CbHVldG9vdGggMi4wIEVEUiAoRW5oYW5jZWQgRGF0YSBSYXRlKQorPC9saT4KKzxsaT5DYW1lcmEgZm9yIHN0aWxsIGFuZCB2aWRlbyBjYXB0dXJlCis8L2xpPgorPGxpPlJlbW92YWJsZSBzdG9yYWdlCis8L2xpPgorPC91bD4KKzxiPlN1cHBvcnRlZCBkaXNwbGF5PC9iPgorPGJyPjx1bD48bGk+SFZHQSByZXNvbHV0aW9uIDxicj48L2xpPgorPGxpPjE2IGJpdCBjb2xvciBkZXB0aCA8YnI+PC9saT4KKzxsaT5MYW5kc2NhcGUgYW5kIHBvcnRyYWl0IG9yaWVudGF0aW9uLCBpbmNsdWRpbmcgZHluYW1pYyBydW50aW1lIHN3aXRjaGluZworPC9saT4KKzxsaT5GaW5nZXItYmFzZWQgdG91Y2hzY3JlZW4gbmF2aWdhdGlvbgorPC9saT4KKzwvdWw+Cis8Yj5TdXBwb3J0ZWQga2V5cGFkcyBhbmQgYnV0dG9uczwvYj4KKzxicj48dWw+PGxpPlFXRVJUWQorPC9saT4KKzxsaT41LXdheSBuYXZpZ2F0aW9uCis8L2xpPgorPGxpPkhhcmR3YXJlIGJ1dHRvbnM6IFNlbmQsIEVuZCwgSG9tZSwgQmFjaywgTWVudTwvbGk+Cis8bGk+UG93ZXIgYnV0dG9uCis8L2xpPgorPGxpPlZvbHVtZSBrZXlzICh1cCBhbmQgZG93bikKKzwvbGk+Cis8bGk+Q2FtZXJhIHRyaWdnZXIgYnV0dG9uLCBpbmNsdWRpbmcgZGV0ZWN0aW9uIGZvciBib3RoIHBhcnRpYWwgcHJlc3MgKHRvIGZvY3VzKSBhbmQgZnVsbCBwcmVzcyAodG8gYWN0dWFsbHkgdGFrZSBhIHBpY3R1cmUpCis8L2xpPgorPC91bD4KKzxiPlN1cHBvcnRlZCBhdWRpbyBvdXRwdXRzPC9iPgorPGJyPjx1bD48bGk+QXVkaW8gb3V0cHV0IHZpYSB0aGUgaGVhZHBob25lIGphY2sgKG1vbm8gYW5kIHN0ZXJlbykKKzwvbGk+Cis8bGk+NjQga2JwcyBCbHVldG9vdGggYXVkaW8gc3VwcG9ydGVkPC9saT4KKzwvdWw+Cis8Yj5TdXBwb3J0ZWQgbm90aWZpY2F0aW9uczwvYj4KKzxicj48dWw+PGxpPkxFRHMKKzwvbGk+Cis8bGk+VmlicmF0aW9uCis8L2xpPgorPC91bD4KKzxiPlN1cHBvcnRlZCByYWRpbyBhbmQgdGVsZXBob255IGZlYXR1cmVzIDxicj48L2I+Cis8dWw+PGxpPkdQUlMsIEVER0UsIFVNVFMsIEhTRFBBCis8L2xpPgorPGxpPkludGVybmF0aW9uYWwgcm9hbWluZywgU01TLCBNTVMgPGJyPjwvbGk+Cis8bGk+RW1lcmdlbmN5IGNhbGwgc3VwcG9ydCA8YnI+PC9saT4KKzxsaT5TdXBwbGVtZW50YXJ5IFNlcnZpY2VzIGZvciBUZWxlcGhvbnksIGZvciBleGFtcGxlIGNhbGwgd2FpdGluZyBhbmQgY29uZmVyZW5jZSBjYWxsaW5nIDxicj48L2xpPgorPGxpPlVuc3RydWN0dXJlZCBTdXBwbGVtZW50YXJ5IFNlcnZpY2UgRGF0YSAoVVNTRCkKKzwvbGk+Cis8bGk+UmVmZXJlbmNlIFJhZGlvIEludGVyZmFjZSBMYXllciAoUklMKQorPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy0xLjUuamQgYi9wZGsvZG9jcy9zb3VyY2Uvb3ZlcnZpZXctMS41LmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNzQ4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2Uvb3ZlcnZpZXctMS41LmpkCkBAIC0wLDAgKzEsMTk4IEBACitwYWdlLnRpdGxlPUFuZHJvaWQgMS41IEZlYXR1cmVzCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8aDM+PGI+UmVsZWFzZSBmZWF0dXJlcyAtIEFuZHJvaWQgMS41PC9iPgorPC9oMz4KKzxkaXY+PGRpdj48ZGl2PjxkaXY+PGI+UHJldmlvdXMgcmVsZWFzZSBoaWdobGlnaHRzPC9iPgorOjxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2Uvb3ZlcnZpZXctMS4wLmh0bWwiPkFuZHJvaWQgMS4wPC9hPgorPGJyPjxicj5UaGlzIHBhZ2UgcHJvdmlkZXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBuZXcgZmVhdHVyZXMgYWRkZWQgdG8KK0FuZHJvaWQgMS41LiBUbyBzZWUgdGhlIGNvZGUgaXRzZWxmLCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlPGEgaHJlZj0iaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvIj5HaXRXZWI8L2E+CitpbnRlcmZhY2UgdG8gdmlldyBzbmFwc2hvdHMgb2YgdGhlIGZpbGVzLCBvciB5b3UgY2FuPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+ZG93bmxvYWQ8L2E+Cit0aGUgc291cmNlIGNvZGUgb250byB5b3VyIGxvY2FsIG1hY2hpbmUuIFlvdSBjYW4gdXNlPGk+cmVwbyBpbml0IC11PC9pPgorZ2l0Oi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9wbGF0Zm9ybS9tYW5pZmVzdC5naXQ8aT4tYiBhbmRyb2lkLTEuNTwvaT4KK3RvIGRvd25sb2FkIHRoZSBzb3VyY2UgY29kZSBmb3IgQW5kcm9pZCAxLjUuPGJyPjxicj48Yj5Vc2VyIGludGVyZmFjZSByZWZpbmVtZW50czo8L2I+Cis8YnI+PHVsPjxsaT5TeXN0ZW0td2lkZToKKzx1bD48bGk+UmVmaW5lbWVudCBvZiBhbGwgY29yZSBVSSBlbGVtZW50cworPC9saT4KKzxsaT5BbmltYXRlZCB3aW5kb3cgdHJhbnNpdGlvbnMgKG9mZiBieSBkZWZhdWx0KQorPC9saT4KKzxsaT5BY2NlbGVyb21ldGVyLWJhc2VkIGFwcGxpY2F0aW9uIHJvdGF0aW9ucworPC9saT4KKzwvdWw+Cis8L2xpPgorPGxpPlVJIHBvbGlzaCBmb3I6Cis8dWw+PGxpPkluLWNhbGwgZXhwZXJpZW5jZQorPC9saT4KKzxsaT5Db250YWN0cywgQ2FsbCBsb2csIGFuZCBGYXZvcml0ZXMKKzwvbGk+Cis8bGk+U01TIE1NUworPC9saT4KKzxsaT5Ccm93c2VyCis8L2xpPgorPGxpPkNhbGVuZGFyCis8L2xpPgorPGxpPkVtYWlsCis8L2xpPgorPGxpPkNhbWVyYSBHYWxsZXJ5Cis8L2xpPgorPGxpPkFwcGxpY2F0aW9uIG1hbmFnZW1lbnQKKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+Cis8ZGl2PjxiPjxicj5QZXJmb3JtYW5jZSBpbXByb3ZlbWVudHM6PC9iPgorPGJyPjwvZGl2PgorPHVsPjxsaT5GYXN0ZXIgQ2FtZXJhIHN0YXJ0LXVwIGFuZCBpbWFnZSBjYXB0dXJlCis8L2xpPgorPGxpPk11Y2ggZmFzdGVyIGFjcXVpc2l0aW9uIG9mIEdQUyBsb2NhdGlvbiAocG93ZXJlZCBieSBTVVBMIEFHUFMpCis8L2xpPgorPGxpPlNtb290aGVyIHBhZ2Ugc2Nyb2xsaW5nIGluIEJyb3dzZXIKKzwvbGk+Cis8L3VsPgorPGJyPjxiPkFwcGxpY2F0aW9uczwvYj4KKzxicj48dWw+PGxpPkNhbWVyYSBHYWxsZXJ5Cis8L2xpPgorPHVsPjxsaT5WaWRlbyByZWNvcmRpbmcKKzwvbGk+Cis8bGk+VmlkZW8gcGxheWJhY2sgKE1QRUctNCAzR1AgZm9ybWF0cykKKzwvbGk+Cis8L3VsPgorPGxpPkJyb3dzZXIKKzwvbGk+Cis8dWw+PGxpPlVwZGF0ZWQgd2l0aCBsYXRlc3QgV2Via2l0IGJyb3dzZXIgU3F1aXJyZWxmaXNoIEphdmFzY3JpcHQgZW5naW5lcworPC9saT4KKzxsaT5Db3B5ICduIHBhc3RlIGluIGJyb3dzZXIKKzwvbGk+Cis8bGk+U2VhcmNoIHdpdGhpbiBhIHBhZ2UKKzwvbGk+Cis8bGk+VXNlci1zZWxlY3RhYmxlIHRleHQtZW5jb2RpbmcKKzwvbGk+Cis8bGk+VUkgY2hhbmdlcyBpbmNsdWRlOgorPC9saT4KKzx1bD48bGk+VW5pZmllZCBHbyBhbmQgU2VhcmNoIGJveAorPC9saT4KKzxsaT5UYWJiZWQgYm9va21hcmtzL2hpc3RvcnkvbW9zdC12aXNpdGVkIHNjcmVlbgorPC9saT4KKzwvdWw+Cis8L3VsPgorPGxpPkNvbnRhY3RzCis8L2xpPgorPHVsPjxsaT5TaG93cyB1c2VyIHBpY3R1cmUgZm9yIEZhdm9yaXRlcworPC9saT4KKzxsaT5TcGVjaWZpYyBkYXRlL3RpbWUgc3RhbXAgZm9yIGV2ZW50cyBpbiBjYWxsIGxvZworPC9saT4KKzxsaT5PbmUtdG91Y2ggYWNjZXNzIHRvIGEgY29udGFjdCBjYXJkIGZyb20gY2FsbCBsb2cgZXZlbnQKKzwvbGk+Cis8L3VsPgorPC91bD4KKzxiPjxicj5BcHBsaWNhdGlvbiBmcmFtZXdvcms8L2I+Cis8YnI+PGJyPjwvZGl2PgorPGRpdj48dWw+PGxpPk9uLXNjcmVlbiBzb2Z0IGtleWJvYXJkCis8L2xpPgorPHVsPjxsaT5Xb3JrcyBpbiBib3RoIHBvcnRyYWl0IGFuZCBsYW5kc2NhcGUgb3JpZW50YXRpb24KKzwvbGk+Cis8bGk+U3VwcG9ydCBmb3IgdXNlciBpbnN0YWxsYXRpb24gb2YgM3JkIHBhcnR5IGtleWJvYXJkcworPC9saT4KKzxsaT5Vc2VyIGRpY3Rpb25hcnkgZm9yIGN1c3RvbSB3b3JkcworPC9saT4KKzwvdWw+Cis8bGk+SG9tZSBzY3JlZW4KKzwvbGk+Cis8dWw+PGxpPldpZGdldHMKKzwvbGk+Cis8dWw+PGxpPkJ1bmRsZWQgaG9tZSBzY3JlZW4gd2lkZ2V0cyBpbmNsdWRlOiBhbmFsb2cgY2xvY2ssIGNhbGVuZGFyLCBtdXNpYyBwbGF5ZXIsIHBpY3R1cmUgZnJhbWUsIGFuZCBzZWFyY2gKKzwvbGk+Cis8L3VsPgorPGxpPkxpdmUgZm9sZGVycworPC9saT4KKzwvdWw+Cis8bGk+VUkgZnJhbWV3b3JrCis8L2xpPgorPHVsPjxsaT5GcmFtZXdvcmsgZm9yIGVhc2llciBiYWNrZ3JvdW5kL1VJIHRocmVhZCBpbnRlcmFjdGlvbgorPC9saT4KKzxsaT5OZXcgU2xpZGluZ0RyYXdlciB3aWRnZXQKKzwvbGk+Cis8bGk+SG9yaXpvbnRhbCBTY3JvbGxWaWV3IHdpZGdldAorPC9saT4KKzwvdWw+Cis8bGk+SG9tZSBTY3JlZW4gZnJhbWV3b3JrCis8L2xpPgorPHVsPjxsaT5BUElzIGZvciBjcmVhdGluZyBzZWN1cmUgaG9tZSBzY3JlZW4gd2lkZ2V0cworPC9saT4KKzxsaT5BUElzIGZvciBwb3B1bGF0aW5nIGxpdmUgZm9sZGVycyB3aXRoIGN1c3RvbSBjb250ZW50Cis8L2xpPgorPC91bD4KKzxsaT5NZWRpYSBmcmFtZXdvcmsKKzwvbGk+Cis8dWw+PGxpPlJhdyBhdWRpbyByZWNvcmRpbmcgYW5kIHBsYXliYWNrIEFQSXMKKzwvbGk+Cis8bGk+SW50ZXJhY3RpdmUgTUlESSBwbGF5YmFjayBlbmdpbmUKKzwvbGk+Cis8bGk+VmlkZW8gcmVjb3JkaW5nIEFQSXMgZm9yIGRldmVsb3BlcnMgKDNHUCBmb3JtYXQpCis8L2xpPgorPGxpPlZpZGVvIGFuZCBwaG90byBzaGFyaW5nIEludGVudHMKKzwvbGk+Cis8bGk+TWVkaWEgc2VhcmNoIEludGVudAorPC9saT4KKzwvdWw+Cis8bGk+SW5wdXQgTWV0aG9kIGZyYW1ld29yaworPC9saT4KKzx1bD48bGk+VGV4dCBwcmVkaWN0aW9uIGVuZ2luZQorPC9saT4KKzxsaT5BYmlsaXR5IHRvIHByb3ZpZGUgZG93bmxvYWRhYmxlIElNRXMgdG8gdXNlcnMKKzwvbGk+Cis8L3VsPgorPGxpPlNwZWVjaCByZWNvZ25pdGlvbiBmcmFtZXdvcmsKKzwvbGk+Cis8dWw+PGxpPlN1cHBvcnQgZm9yIHVzaW5nIHNwZWVjaCByZWNvZ25pdGlvbiBsaWJyYXJpZXMgdmlhIEludGVudAorPC9saT4KKzwvdWw+Cis8bGk+TWlzYyBBUEkgYWRkaXRpb25zCis8L2xpPgorPHVsPjxsaT5Mb2NhdGlvbk1hbmFnZXIgLSBBcHBsaWNhdGlvbnMgY2FuIGdldCBsb2NhdGlvbiBjaGFuZ2UgdXBkYXRlcyB2aWEgSW50ZW50Cis8L2xpPgorPGxpPldlYlZpZXcgLSBUb3VjaCBzdGFydC9lbmQvbW92ZS9jYW5jZWwgRE9NIGV2ZW50IHN1cHBvcnQKKzwvbGk+Cis8bGk+U2Vuc29yTWFuYWdlciAtIHJlZGVzaWduZWQgc2Vuc29yIEFQSXMKKzwvbGk+Cis8bGk+R0xTdXJmYWNlVmlldyAtIGNvbnZlbmllbmNlIGZyYW1ld29yayBmb3IgY3JlYXRpbmcgT3BlbkdMIGFwcGxpY2F0aW9ucworPC9saT4KKzxsaT5Ccm9hZGNhc3QgSW50ZW50IGZvciBhcHAgdXBkYXRlIGluc3RhbGwgc3VjY2VlZGVkIC0gZm9yIHNtb290aGVyIGFwcCB1cGdyYWRlIGV4cGVyaWVuY2UKKzwvbGk+Cis8L3VsPgorPC91bD4KKzwvZGl2PgorPGRpdj48L2Rpdj4KKzxkaXY+PGJyPjxiPlN5c3RlbSBzb2Z0d2FyZTwvYj4KKzxicj48YnI+PC9kaXY+Cis8dWw+PGxpPk5ldyBMaW51eCBrZXJuZWwgKHZlcnNpb24gMi42LjI3KQorPC9saT4KKzxsaT5TRCBjYXJkIGZpbGVzeXN0ZW0gYXV0by1jaGVja2luZyBhbmQgcmVwYWlyCis8L2xpPgorPGxpPlNJTSBBcHBsaWNhdGlvbiBUb29sa2l0IDEuMAorPC9saT4KKzwvdWw+Cis8ZGl2PjxiPjxicj5TdXBwb3J0ZWQgaGFyZHdhcmU8YnI+PC9iPgorPHVsPjxsaT5CbHVldG9vdGg8L2xpPgorPHVsPjxsaT5TdGVyZW8gQmx1ZXRvb3RoIHN1cHBvcnQgKEEyRFAgYW5kIEFWQ1JQIHByb2ZpbGVzKQorPC9saT4KKzxsaT5BdXRvLXBhaXJpbmcKKzwvbGk+Cis8bGk+SW1wcm92ZWQgaGFuZHNmcmVlIGV4cGVyaWVuY2UKKzwvbGk+Cis8L3VsPgorPC91bD4KKzxicj48Yj5EZXZlbG9wZXIgdG9vbHM8L2I+Cis8YnI+PC9kaXY+Cis8ZGl2Pjx1bD48bGk+U3VwcG9ydCBmb3IgbXVsdGlwbGUgdmVyc2lvbnMgb2YgQW5kcm9pZCBpbiBhIHNpbmdsZSBTREsgaW5zdGFsbGF0aW9uCis8L2xpPgorPGxpPkltcHJvdmVkIEpVbml0IHN1cHBvcnQgaW4gQURUCis8L2xpPgorPGxpPkVhc2llciBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSBwcm9maWxpbmcKKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2Uvb3ZlcnZpZXcuamQgYi9wZGsvZG9jcy9zb3VyY2Uvb3ZlcnZpZXcuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2M2M1MgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy5qZApAQCAtMCwwICsxLDkzIEBACitwYWdlLnRpdGxlPUFuZHJvaWQgMS42IFBsYXRmb3JtIE92ZXJ2aWV3Citkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8cD5UaGlzIHBhZ2UgcHJvdmlkZXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBuZXcgZmVhdHVyZXMgYWRkZWQgdG8KK0FuZHJvaWQgMS42LiBUbyBzZWUgdGhlIGNvZGUgaXRzZWxmLCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlIDxhCitocmVmPSJodHRwOi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy8iPkdpdFdlYjwvYT4KK2ludGVyZmFjZSB0byB2aWV3IHNuYXBzaG90cyBvZiB0aGUgZmlsZXMsIG9yIHlvdSBjYW4gPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+ZG93bmxvYWQ8L2E+Cit0aGUgc291cmNlIGNvZGUgb250byB5b3VyIGxvY2FsIG1hY2hpbmUuIFlvdSBjYW4gdXNlIDxjb2RlPnJlcG8gaW5pdCAtdQorZ2l0Oi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9wbGF0Zm9ybS9tYW5pZmVzdC5naXQgLWIgYW5kcm9pZC0xLjY8L2NvZGU+Cit0byBkb3dubG9hZCB0aGUgc291cmNlIGNvZGUgZm9yIEFuZHJvaWQgMS42LjwvcD4KKzxwPjxpPk5vdGU6IHBsYXRmb3JtIG92ZXJ2aWV3IGluZm9ybWF0aW9uIGZvciBBbmRyb2lkIDIueCBoYXMgbm90IHlldCBiZWVuCitwdWJsaXNoZWQsIHNpbmNlIHRoZSA8YQoraHJlZj0ie0Bkb2NSb290fWNvbXBhdGliaWxpdHkvaW5kZXguaHRtbCI+Q29tcGF0aWJpbGl0eSBQcm9ncmFtPC9hPiBmb3IKK0FuZHJvaWQgMi54IGhhcyBub3QgeWV0IGxhdW5jaGVkLiBXaGVuIHRoZSBDb21wYXRpYmlsdHkgRGVmaW5pdGlvbiBEb2N1bWVudAorZm9yIDIueCBpcyByZWxlYXNlZCwgdGhpcyBwYWdlIHdpbGwgYmUgdXBkYXRlZCB0byBtYXRjaC48L2k+PC9wPgorPHA+SW5mb3JtYXRpb24gYWJvdXQgb2xkZXIgQW5kcm9pZCByZWxlYXNlcyBpcyBhbHNvIGF2YWlsYWJsZTo8dWw+Cis8bGk+PGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9vdmVydmlldy0xLjUuaHRtbCI+QW5kcm9pZCAxLjUgUGxhdGZvcm0gT3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL292ZXJ2aWV3LTEuMC5odG1sIj5BbmRyb2lkIDEuMCBQbGF0Zm9ybSBPdmVydmlldzwvYT48L2xpPgorPC91bD48L3A+Cis8aDI+VXNlciBpbnRlcmZhY2UgcmVmaW5lbWVudHM8L2gyPgorPGgzPlF1aWNrIFNlYXJjaCBCb3ggZm9yIEFuZHJvaWQgPC9oMz4KKzxwPkFuZHJvaWQgMS42IGluY2x1ZGVzIGEgcmVkZXNpZ25lZCBzZWFyY2ggZnJhbWV3b3JrIHRoYXQgcHJvdmlkZXMgYSBxdWljaywgZWZmZWN0aXZlLCBhbmQgY29uc2lzdGVudCB3YXkgZm9yIHVzZXJzIHRvIHNlYXJjaCBhY3Jvc3MgbXVsdGlwbGUgc291cmNlc+KAlHN1Y2ggYXMgYnJvd3NlciBib29rbWFya3MgaGlzdG9yeSwgY29udGFjdHMsIGFuZCB0aGUgd2Vi4oCUZGlyZWN0bHkgZnJvbSB0aGUgaG9tZSBzY3JlZW4uCis8L3A+Cis8cD48YnI+PC9wPgorPHA+VGhlIHN5c3RlbSBjb25zdGFudGx5IGxlYXJucyB3aGljaCBzZWFyY2ggcmVzdWx0cyBhcmUgbW9yZSByZWxldmFudCBiYXNlZCBvbiB3aGF0IGlzIGNsaWNrZWQuIFNvIHBvcHVsYXIgY29udGFjdHMgb3IgYXBwcyB0aGF0IGhhdmUgcHJldmlvdXNseSBiZWVuIHBpY2tlZCB3aWxsIGJ1YmJsZSB1cCB0byB0aGUgdG9wIHdoZW4gYSB1c2VyIHR5cGVzIHRoZSBmaXJzdCBmZXcgbGV0dGVycyBvZiBhIHJlbGV2YW50IHF1ZXJ5LgorPC9wPgorPHA+PGJyPjwvcD4KKzxwPlRoZSBzZWFyY2ggZnJhbWV3b3JrIGFsc28gcHJvdmlkZXMgZGV2ZWxvcGVycyBhIHdheSB0byBlYXNpbHkgZXhwb3NlIHJlbGV2YW50IGNvbnRlbnQgZnJvbSB0aGVpciBhcHBsaWNhdGlvbnMgaW4gUXVpY2sgU2VhcmNoIEJveC4KKzwvcD4KKzxoMz5DYW1lcmEsIENhbWNvcmRlciwgYW5kIEdhbGxlcnkgPC9oMz4KKzxwPkFuIHVwZGF0ZWQgdXNlciBpbnRlcmZhY2UgcHJvdmlkZXMgYW4gaW50ZWdyYXRlZCBjYW1lcmEsIGNhbWNvcmRlciwgYW5kIGdhbGxlcnkgZXhwZXJpZW5jZS4gVXNlcnMgY2FuIHF1aWNrbHkgdG9nZ2xlIGJldHdlZW4gc3RpbGwgYW5kIHZpZGVvIGNhcHR1cmUgbW9kZXMuIEFkZGl0aW9uYWxseSwgdGhlIGdhbGxlcnkgZW5hYmxlcyB1c2VycyB0byBzZWxlY3QgbXVsdGlwbGUgcGhvdG9zIGZvciBkZWxldGlvbi48YnI+PC9wPgorPHA+PGJyPjwvcD4KKzxwPkFuZHJvaWQgMS42IGFsc28gcHJvdmlkZXMgYSBtdWNoIGZhc3RlciBjYW1lcmEgZXhwZXJpZW5jZS4gQ29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIHJlbGVhc2UsIGxhdW5jaGluZyB0aGUgY2FtZXJhIGlzIG5vdyAzOSUgZmFzdGVyLCBhbmQgdGhlcmUgaXMgYSAyOCUgaW1wcm92ZW1lbnQgaW4gdGhlIHRpbWUgZnJvbSBjb21wbGV0aW5nIG9uZSBzaG90IHRvIHRoZSBuZXh0LgorPC9wPgorPGgzPlZQTiwgODAyLjF4IDwvaDM+Cis8cD5BIG5ldyBWaXJ0dWFsIFByaXZhdGUgTmV0d29yayAoVlBOKSBjb250cm9sIHBhbmVsIGluIFNldHRpbmdzIGFsbG93cyB1c2VycyB0byBjb25maWd1cmUgYW5kIGNvbm5lY3QgdG8gdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBWUE5zOgorPC9wPgorPHVsPjxsaT5MMlRQL0lQU0VDIHByZS1zaGFyZWQga2V5IGJhc2VkIFZQTgorICA8L2xpPgorPGxpPkwyVFAvSVBzZWMgY2VydGlmaWNhdGUgYmFzZWQgVlBOCisgIDwvbGk+Cis8bGk+TDJUUCBvbmx5IFZQTgorICA8L2xpPgorPGxpPlBQVFAgb25seSBWUE4KKyAgPC9saT4KKzwvdWw+Cis8aDM+QmF0dGVyeSB1c2FnZSBpbmRpY2F0b3IgPC9oMz4KKzxwPkEgbmV3IGJhdHRlcnkgdXNhZ2Ugc2NyZWVuIGxldHMgdXNlcnMgc2VlIHdoaWNoIGFwcHMgYW5kIHNlcnZpY2VzIGFyZSBjb25zdW1pbmcgYmF0dGVyeSBwb3dlci4gSWYgdGhlIHVzZXIgZGV0ZXJtaW5lcyB0aGF0IGEgcGFydGljdWxhciBzZXJ2aWNlIG9yIGFwcGxpY2F0aW9uIGlzIHVzaW5nIHRvbyBtdWNoIHBvd2VyLCB0aGV5IGNhbiB0YWtlIGFjdGlvbiB0byBzYXZlIHRoZSBiYXR0ZXJ5IGJ5IGFkanVzdGluZyBzZXR0aW5ncywgc3RvcHBpbmcgdGhlIGFwcGxpY2F0aW9uLCBvciB1bmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uLgorPC9wPgorPGgzPkFjY2Vzc2liaWxpdHkgPC9oMz4KKzxwPlVzZXJzIHdpbGwgYmUgYWJsZSB0byBkb3dubG9hZCBuZXcgYWNjZXNzaWJpbGl0eSBzZXJ2aWNlcyBidWlsdCBvbiB0aGUgbmV3IGFjY2Vzc2liaWxpdHkgZnJhbWV3b3JrIGFuZCBlbmFibGUgdGhlbSBpbiBTZXR0aW5ncy4KKzwvcD4KKzxoMj5OZXcgUGxhdGZvcm0gVGVjaG5vbG9naWVzIDwvaDI+Cis8aDM+RXhwYW5kZWQgU2VhcmNoIEZyYW1ld29yayA8L2gzPgorPHA+VGhlIEFuZHJvaWQgc2VhcmNoIGZyYW1ld29yayBoYXMgYmVlbiByZWRlc2lnbmVkIGFuZCBleHBhbmRlZCB0byBwcm92aWRlIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyB0aGUgb3Bwb3J0dW5pdHkgdG8gc3VyZmFjZSBjb250ZW50IGZyb20gdGhlaXIgYXBwbGljYXRpb25zIGluIFF1aWNrIFNlYXJjaCBCb3gsIHRoZSBnbG9iYWwgc2VhcmNoIHRvb2wuIFRvIGRvIHRoaXMsIGRldmVsb3BlcnMgd2lsbCBuZWVkIHRvIG1ha2UgdGhlaXIgYXBwICJzZWFyY2hhYmxlIiBhbmQgcHJvdmlkZSBzdWdnZXN0aW9ucyBpbiByZXNwb25zZSB0byB1c2VyIHF1ZXJpZXMuIFRvIGVuYWJsZSBhcHBsaWNhdGlvbiBzZWFyY2ggc3VnZ2VzdGlvbnMsIHVzZXJzIHNpbXBseSBzZWxlY3QgZWFjaCBhcHBsaWNhdGlvbiBmcm9tIHdoaWNoIHRoZXknZCBsaWtlIHRvIHJlY2VpdmUgc3VnZ2VzdGlvbnMsIHVuZGVyIFNlYXJjaGFibGUgaXRlbXMgaW4gdGhlIFNlYXJjaCBzZXR0aW5ncy4KKzwvcD4KKzxoMz5UZXh0LXRvLXNwZWVjaCBlbmdpbmU8L2gzPgorPHA+QW5kcm9pZCAxLjYgZmVhdHVyZXMgYSBtdWx0aS1saW5ndWFsIHNwZWVjaCBzeW50aGVzaXMgZW5naW5lIGNhbGxlZCBQaWNvLiBJdCBhbGxvd3MgYW55IEFuZHJvaWQgYXBwbGljYXRpb24gdG8gInNwZWFrIiBhIHN0cmluZyBvZiB0ZXh0IHdpdGggYW4gYWNjZW50IHRoYXQgbWF0Y2hlcyB0aGUgbGFuZ3VhZ2UuIFRoZSBlbmdpbmUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBsYW5ndWFnZXM6IEVuZ2xpc2ggKEFtZXJpY2FuIGFuZCBCcml0aXNoIGFjY2VudHMpLCBGcmVuY2gsIEl0YWxpYW4sIEdlcm1hbiBhbmQgU3BhbmlzaC4gSWYgeW91J3JlIHVzaW5nIGEgVC1Nb2JpbGUgRzEgb3IgRHJlYW0gZGV2aWNlLCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCB0aGUgU3BlZWNoU3ludGhlc2lzIERhdGEgSW5zdGFsbGVyIGZyb20gQW5kcm9pZCBNYXJrZXQsIHdoaWNoIGluY2x1ZGVzIHRoZSAidm9pY2VzIiBuZWVkZWQgYnkgdGhlIHRleHQtdG8tc3BlZWNoIGVuZ2luZS4KKzwvcD4KKzxoMz5HZXN0dXJlcyA8L2gzPgorPHA+QSBuZXcgZ2VzdHVyZXMgZnJhbWV3b3JrIHByb3ZpZGVzIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd2l0aCBhIGZyYW1ld29yayBmb3IgY3JlYXRpbmcsIHN0b3JpbmcsIGxvYWRpbmcsIGFuZCByZWNvZ25pemluZyBnZXN0dXJlcyBhbmQgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIHNwZWNpZmljIGFjdGlvbnMuCis8L3A+Cis8cD5EZXZlbG9wZXJzIGNhbiB1c2UgdGhlIG5ldyBHZXN0dXJlQnVpbGRlciB0b29sIGluY2x1ZGVkIGluIHRoZSBBbmRyb2lkIDEuNiBTREsgdG8gZ2VuZXJhdGUgbGlicmFyaWVzIG9mIGdlc3R1cmVzIHRvIGluY2x1ZGUgd2l0aCB0aGVpciBhcHBsaWNhdGlvbi4KKzwvcD4KKzxoMz5BY2Nlc3NpYmlsaXR5IDwvaDM+Cis8cD5BbmRyb2lkIDEuNiBwcm92aWRlcyBhIG5ldyBhY2Nlc3NpYmlsaXR5IGZyYW1ld29yay4gV2l0aCB0aGlzIGZyYW1ld29yaywgZGV2ZWxvcGVycyBjYW4gY3JlYXRlIGFjY2Vzc2liaWxpdHkgcGx1Z2lucyB0aGF0IHJlc3BvbmQgdG8gdXNlciBpbnB1dCwgc3VjaCBhcyBtYWtpbmcgYSBzb3VuZCB3aGVuIGEgbmV3IHdpbmRvdyBpcyBzaG93biwgdmlicmF0aW5nIHdoZW4gbmF2aWdhdGluZyB0byB0aGUgdG9wIG9mIGEgbGlzdCwgYW5kIHByb3ZpZGluZyBzcG9rZW4gZmVlZGJhY2suCis8L3A+Cis8aDM+RXhwYW5kZWQgc3VwcG9ydCBmb3Igc2NyZWVuIGRlbnNpdGllcyBhbmQgcmVzb2x1dGlvbnMgPC9oMz4KKzxwPkFuZHJvaWQgMS42IGFkZHMgc2NyZWVuIHN1cHBvcnQgdGhhdCBlbmFibGVzIGFwcGxpY2F0aW9ucyB0byBiZSByZW5kZXJlZCBwcm9wZXJseSBvbiBkaWZmZXJlbnQgZGlzcGxheSByZXNvbHV0aW9ucyBhbmQgZGVuc2l0aWVzLiBEZXZlbG9wZXJzIGNhbiBhbHNvIHNwZWNpZnkgdGhlIHR5cGVzIG9mIHNjcmVlbnMgc3VwcG9ydGVkIGJ5IHRoZWlyIGFwcGxpY2F0aW9uLgorPC9wPgorPGgzPlRlbGVwaG9ueSBzdXBwb3J0IGZvciBDRE1BIDwvaDM+Cis8cD5BbmRyb2lkIDEuNiBpbmNsdWRlcyBzdXBwb3J0IGZvciBDRE1BIGluIHRoZSB0ZWxlcGhvbnkgc3RhY2suCis8L3A+Cis8aDM+TmV3IHZlcnNpb24gb2YgT3BlbkNvcmUgPC9oMz4KKzxwPkFuZHJvaWQgMS42IGluY2x1ZGVzIHRoZSB1cGRhdGVkIE9wZW5Db3JlIDIgbWVkaWEgZW5naW5lLCB3aGljaCBoYXM6Cis8L3A+Cis8dWw+PGxpPlN1cHBvcnQgZm9yIE9wZW5NQVggZW5jb2RlcnMKKyAgPC9saT4KKzxsaT5TdXBwb3J0IGZvciBhZGRpdGlvbmFsIGF1ZGlvIGNvZGVjcyBpbiBBdXRob3JFbmdpbmUKKyAgPC9saT4KKzxsaT5JbXByb3ZlZCBidWZmZXJpbmcgbW9kZWwgc3VwcG9ydHMgc2hhcmVkIGJ1ZmZlcnMgYWxsb2NhdGVkIGluIHRoZSBkZWNvZGVyCisgIDwvbGk+Cis8L3VsPgorPGgzPjIuNi4yOSBMaW51eCBrZXJuZWwgPC9oMz4KKzxwPkFuZHJvaWQgMS42IHVwZ3JhZGVzIHRoZSBMaW51eCBrZXJuZWwgZnJvbSAyLjYuMjcgdG8gMi42LjI5LgorPC9wPgorPGgyPk5ldyBGcmFtZXdvcmsgQVBJczwvaDI+Cis8cD5Gb3IgYSBkZXRhaWxlZCBvdmVydmlldyBvZiBuZXcgQVBJcywgc2VlIHRoZSA8YQoraHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zZGsvYW5kcm9pZC0xLjYuaHRtbCNhcGktY2hhbmdlcyI+VmVyc2lvbgorTm90ZXM8L2E+LiBGb3IgYSBjb21wbGV0ZSByZXBvcnQgb2YgYWxsIEFQSSBjaGFuZ2VzLCBzZWUgdGhlIDxhCitocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Nkay9hcGlfZGlmZi80L2NoYW5nZXMuaHRtbCI+QVBJCitEaWZmZXJlbmNlcyBSZXBvcnQ8L2E+LjwvcD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9yZXBvcnQtYnVncy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9yZXBvcnQtYnVncy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzgwODBkCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL3JlcG9ydC1idWdzLmpkCkBAIC0wLDAgKzEsMTMzIEBACitwYWdlLnRpdGxlPVJlcG9ydCBCdWdzCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8ZGl2PgorPHA+VGhhbmtzIGZvciB5b3VyIGludGVyZXN0IGluIEFuZHJvaWQhIE9uZSBvZiB0aGUgYmVzdCB3YXlzIHlvdSBjYW4gaGVscCB1cworaW1wcm92ZSBBbmRyb2lkIGlzIHRvIGxldCB1cyBrbm93IGFib3V0IGFueSBwcm9ibGVtcyB5b3UgZmluZCB3aXRoIGl0LjwvcD4KKzxwPkZpcnN0LCB0aG91Z2g6IGlmIHlvdSB0aGluayB5b3UndmUgZm91bmQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LAorPGI+cGxlYXNlIGRvbid0IHVzZSB0aGUgZm9ybXMgYmVsb3c8L2I+LiAoVXNpbmcgdGhlIHB1YmxpYyBmb3JtcyBiZWxvdyBtYXkKK2FsbG93IGFueW9uZSB0byBzZWUgeW91ciByZXBvcnQsIHdoaWNoIG1heSBwdXQgdXNlcnMgYXQgcmlzayB1bnRpbCB0aGUgYnVnIGlzCitmaXhlZC4pIEluc3RlYWQsIHBsZWFzZSByZXBvcnQgc2VjdXJpdHkgYnVncyB0byBvdXIgc2VjdXJpdHkgdGVhbSBieSBlbWFpbGluZworPGEgaHJlZj0ibWFpbHRvOnNlY3VyaXR5QGFuZHJvaWQuY29tIj5zZWN1cml0eUBhbmRyb2lkLmNvbTwvYT4uICBXZSBiZWxpZXZlIGluCityZXNwb25zaWJsZSBkaXNjbG9zdXJlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgYW5kIHdpbGwgZ2l2ZSB5b3UgcHJvcGVyCithdHRyaWJ1dGlvbiBmb3IgYW55IGlzc3VlcyB5b3UgcmVwb3J0LjwvcD4KKzxwPkhlcmUncyBob3cgdG8gcmVwb3J0IG5vbi1zZWN1cml0eSBidWdzOjwvcD4KKzxvbD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9hZHZzZWFyY2giPlNlYXJjaCBmb3IKKyAgeW91ciBidWc8L2E+IHRvIHNlZSBpZiBhbnlvbmUgaGFzIGFscmVhZHkgcmVwb3J0ZWQgaXQuPC9saT4KKyAgPGxpPklmIHlvdSBmaW5kIHlvdXIgaXNzdWUgYW5kIGl0J3MgaW1wb3J0YW50IHRvIHlvdSwgc3RhciBpdCEgVGhhdCdzIGhvdyB3ZQorICBrbm93IHdoaWNoIGJ1Z3MgYXJlIG1vc3QgaW1wb3J0YW50IHRvIGZpeC48L2xpPgorICA8bGk+SWYgbm8gb25lJ3MgcmVwb3J0ZWQgeW91ciBidWcsIGZpbGUgdGhlIGJ1Zy4gWW91IGNhbiB1c2Ugb25lIG9mIHRoZXNlCisgIHRlbXBsYXRlczo8dWw+CisgICAgPGxpPjxhCisgICAgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2VudHJ5P3RlbXBsYXRlPVVzZXIlMjBidWclMjByZXBvcnQiPkJ1Z3MKKyAgICBpbiB5b3VyIERldmljZSAoZm9yIHVzZXJzKTwvYT4gLSB1c2UgdGhpcyBpZiB5b3Ugd2FudCB0byByZXBvcnQgYSBidWcgaW4gYQorICAgIGRldmljZSB5b3Ugb3duPC9saT4KKyAgICA8bGk+PGEKKyAgICBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZW50cnk/dGVtcGxhdGU9RGV2ZWxvcGVyJTIwYnVnJTIwcmVwb3J0Ij5CdWdzCisgICAgaW4gdGhlIFNvZnR3YXJlIChmb3IgZGV2ZWxvcGVycyk8L2E+IC0gdXNlIHRoaXMgaWYgeW91IGZvdW5kIGEgYnVnIGluIHRoZQorICAgIGNvdXJzZSBvZiBkZXZlbG9waW5nIGFuIGFwcDwvbGk+CisgICAgPGxpPjxhCisgICAgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2VudHJ5P3RlbXBsYXRlPUZlYXR1cmUlMjByZXF1ZXN0Ij5SZXF1ZXN0CisgICAgYSBOZXcgRmVhdHVyZTwvYT4gLSB1c2UgdGhpcyBmb3IgYSBmZWF0dXJlIHlvdSdkIGxpa2UgdG8gc2VlIGluIGEgZnV0dXJlCisgICAgdmVyaXNvbjwvbGk+CisgIDwvdWw+PC9saT4KKzwvb2w+Cis8cD5QbGVhc2Ugbm90ZSB0aGF0IHdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IGFueSBwYXJ0aWN1bGFyIGJ1ZyBjYW4gYmUgZml4ZWQgaW4KK2FueSBwYXJ0aWN1bGFyIHJlbGVhc2UuIFRvIHNlZSB3aGF0IGhhcHBlbnMgdG8geW91ciBidWcgb25jZSB5b3UgcmVwb3J0IGl0LAorcmVhZCA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2xpZmUtb2YtYS1idWcuaHRtbCI+TGlmZSBvZiBhIEJ1ZzwvYT4uPC9wPgorPHA+SW4gZ2VuZXJhbCwgcGxlYXNlIHB1dCBhcyBtdWNoIGluZm8gaW4gYnVncyBhcyB5b3UgY2FuLiBKdXN0IGEgb25lIGxpbmVyCit0ZWxsaW5nIHVzIHNvbWV0aGluZyBpc24ndCB3b3JraW5nIGlzIHVzdWFsbHkgdXNlbGVzcywgYW5kIHdpbGwgcHJvYmFibHkgYmUKK2Nsb3NlZCB3aXRob3V0IGFueSBhY3Rpb24uIFRoZSBtb3JlIGRldGFpbCB5b3UgcHJvdmlkZSwgdGhlIG1vcmUgbGlrZWx5IHlvdXIKK2lzc3VlIGlzIHRvIGJlIHJlc29sdmVkLiBCZWxvdywgdGhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgYSBnb29kIGJ1ZyByZXBvcnQKK2FuZCBhIHBvb3IgYnVnIHJlcG9ydC48L3A+Cis8aDM+QSBQb29yIEJ1ZyBSZXBvcnQ8L2gzPgorPHByZT4KK1RpdGxlOiBFcnJvciBtZXNzYWdlCisKK1doZW4gcnVubmluZyBFY2xpcHNlIEkgZ2V0IGFuICJJbnRlcm5hbCBFcnJvciIgdGhhdCBzYXlzICJTZWUgdGhlIC5sb2cgZmlsZQorZm9yIG1vcmUgZGV0YWlscyIuCisKK1N0ZXBzIHRvIHJlcHJvZHVjZToKK0hhcHBlbnMgd2hlbiAiT2JqZWN0IG8gPSBudWxsIi4gRG9lc24ndCBoYXBwZW4gd2hlbiBjaGFuZ2VkIHRvICJPYmplY3QgbyIuCisKK0V4cGVjdGVkIHJlc3VsdHM6CitJIHdvdWxkbid0IGdldCB0aGUgZXJyb3IgbWVzc2FnZS0td291bGQgd29yayB3aXRoIE9iamVjdCBvID0gbnVsbC4KKworT2JzZXJ2ZWQgcmVzdWx0czoKK1NlZSBhYm92ZS4KKzwvcHJlPgorPHA+VGhpcyBpcyBhIHBvb3IgYnVnIHJlcG9ydCBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJvdmlkZSBhbnkgY29udGV4dCBmb3IgdGhlCitpc3N1ZTsgaXMgaXQgYSBwcm9ibGVtIGluIHRoZSBEYWx2aWsgdmlydHVhbCBtYWNoaW5lLCB0aGUgY29yZSBmcmFtZXdvcmssIG9yCitzb21ldGhpbmcgZWxzZT8gSXQgYWxzbyBkb2Vzbid0IHByb3ZpZGUgYW55IGNvZGUgb3IgaGludCBvbiBob3cgdG8gcmVwcm9kdWNlCitpdC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgYnVnIHJlcG9ydCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGZvcgorYW55b25lIHRvIHRha2UgYWN0aW9uIG9uLCBzbyBpdCB3b3VsZCBiZSBpZ25vcmVkLjwvcD4KKzxoMz5BIEdvb2QgQnVnIFJlcG9ydDwvaDM+Cis8cHJlPgorVGl0bGU6IFN0ZXBwaW5nIG92ZXIgIk9iamVjdCBvID0gbnVsbCIgY2F1c2VzIEVjbGlwc2UgIkludGVybmFsIEVycm9yIgorCitJbnRlcmVzdGluZyBidWcsIHdoaWxlIHVzaW5nIEVjbGlwc2UgMy4zLjEuMSB3aXRoIG0zN2Egb2YgYW5kcm9pZCBhbmQKK3RoZSBmb2xsb3dpbmcgY29kZToKKworcGFja2FnZSBjb20uc2F2aWxsZS5hbmRyb2lkOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworcHVibGljIGNsYXNzIFRlc3RPYmplY3ROdWxsIGV4dGVuZHMgQWN0aXZpdHkgeworICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgYWN0aXZpdHkgaXMgZmlyc3QgY3JlYXRlZC4gKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgaWNpY2xlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKGljaWNsZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm1haW4pOworCisgICAgICAgIE9iamVjdCBvID0gbnVsbDsKKworICAgICAgICBvID0gImhpIjsKKworICAgICAgICBMb2cudihUQUcsICJvPSIgKyBvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUZXN0T2JqZWN0TnVsbCI7CisKK30KKworRWNsaXBzZSBpbmRpY2F0ZXMgYW4gIkludGVybmFsIEVycm9yIiB3aXRoICJTZWUgdGhlIC5sb2cgZmlsZSBmb3IgbW9yZQorZGV0YWlscyIgYW5kIHRoZW4gYXNrcyBpZiBJIHdhbnQgdG8gZXhpdCB0aGUgd29ya2JlbmNoLiBUaGlzIG9jY3VycyB3aGVuIEkKK3BsYWNlIGEgYnJlYWsgcG9pbnQgb24gInNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm1haW4pOyIgYW5kIHRoZW4gc2luZ2xlCitzdGVwIG92ZXIgIk9iamVjdCBvID0gbnVsbDsiCisKK0lmIEkgY2hhbmdlICJPYmplY3QgbyA9IG51bGw7IiB0byAiT2JqZWN0IG8iIGFsbCBpcyB3ZWxsLgorCitUaGUgbGFzdCBsaW5lcyBvZiB0aGUgLmxvZyBmaWxlIGFyZToKKworIUVOVFJZIG9yZy5lY2xpcHNlLmNvcmUuam9icyA0IDIgMjAwOC0wMS0wMSAxMzowNDoxNS44MjUKKyFNRVNTQUdFIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIGR1cmluZzogImhhcyBjaGlsZHJlbiB1cGRhdGUiLgorIVNUQUNLIDAKK2phdmEubGFuZy5JbnRlcm5hbEVycm9yOiBJbnZhbGlkIHNpZ25hdHVyZTogIiZsdDtudWxsJmd0OyIKKyAgICAgICAgYXQKK29yZy5lY2xpcHNlLmpkaS5pbnRlcm5hbC5UeXBlSW1wbC5zaWduYXR1cmVUb1RhZyhUeXBlSW1wbC5qYXZhOjMwNykKKyAgICAgICAgYXQKK29yZy5lY2xpcHNlLmpkaS5pbnRlcm5hbC5Mb2NhbFZhcmlhYmxlSW1wbC50YWcoTG9jYWxWYXJpYWJsZUltcGwuamF2YToxODUpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5qZGkuaW50ZXJuYWwuU3RhY2tGcmFtZUltcGwuZ2V0VmFsdWVzKFN0YWNrRnJhbWVJbXBsLmphdmE6MTI4KQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuamRpLmludGVybmFsLlN0YWNrRnJhbWVJbXBsLmdldFZhbHVlKFN0YWNrRnJhbWVJbXBsLmphdmE6NzMpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcuY29yZS5tb2RlbC5KRElMb2NhbFZhcmlhYmxlLnJldHJpZXZlVmFsdWUoSkRJTG9jYWxWYXJpYWJsZS5qYXZhOjU3KQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLmNvcmUubW9kZWwuSkRJVmFyaWFibGUuZ2V0Q3VycmVudFZhbHVlKEpESVZhcmlhYmxlLmphdmE6NjYpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcuY29yZS5tb2RlbC5KRElWYXJpYWJsZS5nZXRWYWx1ZShKRElWYXJpYWJsZS5qYXZhOjg4KQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkubW9kZWwuZWxlbWVudHMuVmFyaWFibGVDb250ZW50UHJvdmlkZXIuaGFzQ2hpbGRyZW4oVmFyaWFibGVDb250ZW50UHJvdmlkZXIuamF2YTo2MikKKyAgICAgICAgYXQKK29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS52YXJpYWJsZXMuSmF2YVZhcmlhYmxlQ29udGVudFByb3ZpZGVyLmhhc0NoaWxkcmVuKEphdmFWYXJpYWJsZUNvbnRlbnRQcm92aWRlci5qYXZhOjczKQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkubW9kZWwuZWxlbWVudHMuRWxlbWVudENvbnRlbnRQcm92aWRlci51cGRhdGVIYXNDaGlsZHJlbihFbGVtZW50Q29udGVudFByb3ZpZGVyLmphdmE6MjIzKQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuZGVidWcuaW50ZXJuYWwudWkubW9kZWwuZWxlbWVudHMuRWxlbWVudENvbnRlbnRQcm92aWRlciQzLnJ1bihFbGVtZW50Q29udGVudFByb3ZpZGVyLmphdmE6MjAwKQorICAgICAgICBhdCBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmpvYnMuV29ya2VyLnJ1bihXb3JrZXIuamF2YTo1NSkKKzwvcHJlPgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2Uvcm9sZXMuamQgYi9wZGsvZG9jcy9zb3VyY2Uvcm9sZXMuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxYzgyMQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9yb2xlcy5qZApAQCAtMCwwICsxLDczIEBACitwYWdlLnRpdGxlPVBlb3BsZSBhbmQgUm9sZXMKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxwPlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKEFPU1ApIGluY2x1ZGVzIGluZGl2aWR1YWxzIHdvcmtpbmcgaW4gYSB2YXJpZXR5CitvZiByb2xlcy4gQXMgbm90ZWQgaW4gPGEgaHJlZj0ie0Bkb2NSb290fWFib3V0L3BoaWxvc29waHkuaHRtbCI+T3VyCitQaGlsb3NvcGh5PC9hPiwgR29vZ2xlIGlzIHJlc3BvbnNpYmxlIGZvciBBbmRyb2lkIHByb2R1Y3QgbWFuYWdlbWVudAorYW5kIHRoZSBlbmdpbmVlcmluZyBwcm9jZXNzIGZvciB0aGUgY29yZSBmcmFtZXdvcmsgYW5kIHBsYXRmb3JtOyBob3dldmVyLAordGhlIHByb2plY3QgY29uc2lkZXJzIGNvbnRyaWJ1dGlvbnMgZnJvbSBhbnkgc291cmNlLCBub3QganVzdCBHb29nbGUuIFRoaXMKK3BhZ2UgZGVzY3JpYmVzIHRoZSBraW5kcyBvZiByb2xlcyB0aGF0IGludGVyZXN0ZWQgcGFydGllcyBjYW4gdGFrZSBvbi48L3A+Cis8cD5BbnlvbmUgd2hvIGlzIGludGVyZXN0ZWQgaW4gZXhwbG9yaW5nIGFuZCBjb250cmlidXRpbmcgdG8gQW5kcm9pZCBjYW4gdXNlIHRoZQorQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IHJlc291cmNlcy4gQW55b25lIGNhbiBqb2luIHRoZSBtYWlsaW5nIGxpc3RzLCBhc2sKK3F1ZXN0aW9ucywgY29udHJpYnV0ZSBwYXRjaGVzLCByZXBvcnQgYnVncywgbG9vayBhdCBzdWJtaXR0ZWQgcGF0Y2hlcywgYW5kIHVzZQordGhlIHRvb2xzLiBUbyBnZXQgc3RhcnRlZCB3aXRoIHRoZSBBbmRyb2lkIGNvZGUsIHNlZSA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9pbmRleC5odG1sIj5HZXQgSW52b2x2ZWQ8L2E+LjwvcD4KKworPGgyPkNvbnRyaWJ1dG9yPC9oMj4KKzxwPkEgIkNvbnRyaWJ1dG9yIiBpcyBhbnlvbmUgbWFraW5nIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIEFPU1Agc291cmNlIGNvZGUsCitpbmNsdWRpbmcgYm90aCBlbXBsb3llZXMgb2YgR29vZ2xlIG9yIG90aGVyIGNvbXBhbmllcywgYXMgd2VsbCBhcworZXh0ZXJuYWwgZGV2ZWxvcGVycyB3aG8gYXJlIGNvbnRyaWJ1dGluZyB0byBBbmRyb2lkIG9uIHRoZWlyIG93biBiZWhhbGYuCitUaGVyZSBpcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIENvbnRyaWJ1dG9ycyB3aG8gYXJlIGVtcGxveWVkIGJ5IAorR29vZ2xlLCBhbmQgdGhvc2Ugd2hvIGFyZSBub3Q6IGFsbCBlbmdpbmVlcnMgdXNlIHRoZSBzYW1lIGdpdC9nZXJyaXQgdG9vbHMsIAorZm9sbG93IHRoZSBzYW1lIGNvZGUgcmV2aWV3IHByb2Nlc3MsIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgc2FtZSByZXF1aXJlbWVudHMKK29uIGNvZGUgc3R5bGUgYW5kIHNvIG9uLjwvcD4KKzxwLz4KKworPGgyPkRldmVsb3BlcjwvaDI+Cis8cD5BICJEZXZlbG9wZXIiIGlzIGFuIGVuZ2luZWVyIHdyaXRpbmcgYXBwbGljYXRpb25zIHRoYXQgcnVuIG9uIEFuZHJvaWQKK2RldmljZXMuIFRoZXJlIGlzLCBvZiBjb3Vyc2UsIG5vIGRpZmZlcmVuY2UgaW4gc2tpbGxzZXQgYmV0d2VlbiBhICJEZXZlbG9wZXIiCithbmQgYSAiQ29udHJpYnV0b3IiOyBBT1NQIHNpbXBseSB1c2VzICJEZXZlbG9wZXIiIHRvIGhlbHAgaWRlbnRpZnkgb3VyIGF1ZGllbmNlLgorU2luY2UgdGhlIGtleSBwdXJwb3NlIG9mIEFuZHJvaWQgaXMgdG8gY3VsdGl2YXRlIGFuIG9wZW4gZGV2ZWxvcG1lbnQgcGxhdGZvcm0sCisiRGV2ZWxvcGVycyIgYXJlIG9uZSBvZiB0aGUga2V5IGN1c3RvbWVycyBvZiB0aGUgQW5kcm9pZCBwbGF0Zm9ybS4gQXMgc3VjaCwgd2UKK3RhbGsgYWJvdXQgdGhlbSBhIGxvdCwgdGhvdWdoIHRoaXMgaXNuJ3QgdGVjaG5pY2FsbHkgYSBzZXBhcmF0ZSByb2xlIGluIHRoZQorQU9TUCA8aT5wZXIgc2UuPC9pPjwvcD4KKzxwLz4KKworPGgyPlZlcmlmaWVyPC9oMj4KKzxwPiJWZXJpZmllcnMiIGFyZSByZXNwb25zaWJsZSBmb3IgdGVzdGluZyBjaGFuZ2UgcmVxdWVzdHMuIEFmdGVyIGluZGl2aWR1YWxzCitoYXZlIHN1Ym1pdHRlZCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBoaWdoLXF1YWxpdHkgY29kZSB0byB0aGUgcHJvamVjdCwgdGhlCitQcm9qZWN0IExlYWRzIG1pZ2h0IGludml0ZSB0aGVtIHRvIGJlY29tZSBWZXJpZmllcnMuPC9wPjxwPjxpPk5vdGU6IGF0IHRoaXMKK3RpbWUsIGdlbmVyYWxseSBWZXJpZmllcnMgYXJlIHRoZSBzYW1lIGFzIEFwcHJvdmVycy48L2k+PC9wPgorPHAvPgorCis8aDI+QXBwcm92ZXI8L2gyPgorIkFwcHJvdmVycyIgYXJlIGV4cGVyaWVuY2VkIG1lbWJlcnMgb2YgdGhlIHByb2plY3Qgd2hvIGhhdmUgZGVtb25zdHJhdGVkIHRoZWlyCitkZXNpZ24gc2tpbGxzIGFuZCBoYXZlIG1hZGUgc2lnbmlmaWNhbnQgdGVjaG5pY2FsIGNvbnRyaWJ1dGlvbnMgdG8gdGhlCitwcm9qZWN0LiBJbiB0aGUgY29kZS1yZXZpZXcgcHJvY2VzcywgYW4gQXBwcm92ZXIgZGVjaWRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgb3IKK2V4Y2x1ZGUgYSBjaGFuZ2UuIFByb2plY3QgTGVhZHMgKHdobyBhcmUgdHlwaWNhbGx5IGVtcGxveWVkIGJ5IEdvb2dsZSkgY2hvb3NlCit0aGUgQXBwcm92ZXJzLCBzb21ldGltZXMgcHJvbW90aW5nIHRvIHRoaXMgcG9zaXRpb24gVmVyaWZpZXJzIHdobyBoYXZlCitkZW1vbnN0cmF0ZWQgdGhlaXIgZXhwZXJ0aXNlIHdpdGhpbiBhIHNwZWNpZmljIHByb2plY3QuPC9wPgorPHAvPgorCis8aDI+UHJvamVjdCBMZWFkczwvaDI+Cis8cD5BbmRyb2lkIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIHN1Yi1wcm9qZWN0czsgeW91IGNhbiBzZWUgdGhlc2UgaW4gdGhlIGdpdAorcmVwb3NpdG9yeSwgYXMgaW5kaXZpZHVhbCAuZ2l0IGZpbGVzLiBUZWNoIExlYWRzIGFyZSBzZW5pb3IgQ29udHJpYnV0b3JzIHdobworb3ZlcnNlZSB0aGUgZW5naW5lZXJpbmcgZm9yIGluZGl2aWR1YWwgQW5kcm9pZCBwcm9qZWN0cy4gVHlwaWNhbGx5IHRoZXNlIHRlY2gKK2xlYWRzIHdpbGwgYmUgR29vZ2xlIGVtcGxveWVlcy4gIEEgUHJvamVjdCBMZWFkIGZvciBhbiBpbmRpdmlkdWFsIHByb2plY3QgaXMKK3Jlc3BvbnNpYmxlIGZvciB0aGUgZm9sbG93aW5nOjwvcD4KKzx1bD4KKyAgPGxpPkxlYWQgYWxsIHRlY2huaWNhbCBhc3BlY3RzIG9mIHRoZSBwcm9qZWN0OyBmb3IgZXhhbXBsZSwgdGhlIHByb2plY3QKKyAgcm9hZG1hcCwgZGV2ZWxvcG1lbnQsIHJlbGVhc2UgY3ljbGVzLCB2ZXJzaW9uaW5nLCBhbmQgUUEuPC9saT4KKyAgPGxpPkVuc3VyZSB0aGF0IHRoZSBwcm9qZWN0IGlzIFFBLWVkIGluIHRpbWUgZm9yIHNjaGVkdWxlZCBBbmRyb2lkIHBsYXRmb3JtCisgIHJlbGVhc2VzLjwvbGk+CisgIDxsaT5EZXNpZ25hdGUgVmVyaWZpZXJzIGFuZCBBcHByb3ZlcnMgZm9yIHN1Ym1pdHRlZCBwYXRjaGVzLjwvbGk+CisgIDxsaT5CZSBmYWlyIGFuZCB1bmJpYXNlZCB3aGlsZSByZXZpZXdpbmcgY2hhbmdlcy4gQWNjZXB0IG9yIHJlamVjdCBwYXRjaGVzCisgIGJhc2VkIG9uIHRlY2huaWNhbCBtZXJpdCBhbmQgYWxpZ25tZW50IHdpdGggdGhlIEFuZHJvaWQgcGxhdGZvcm0uPC9saT4KKyAgPGxpPlJldmlldyBjaGFuZ2VzIGluIGEgdGltZWx5IG1hbm5lciBhbmQgbWFrZSBiZXN0IGVmZm9ydHMgdG8gY29tbXVuaWNhdGUKKyAgd2hlbiBjaGFuZ2VzIGFyZSBub3QgYWNjZXB0ZWQuPC9saT4KKyAgPGxpPk9wdGlvbmFsbHkgbWFpbnRhaW4gYSB3ZWIgc2l0ZSBmb3IgdGhlIHByb2plY3QgZm9yIGluZm9ybWF0aW9uIGFuZAorICBkb2N1bWVudHMgc3BlY2lmaWMgdG8gdGhlIHByb2plY3QuPC9saT4KKyAgPGxpPkFjdCBhcyBhIGZhY2lsaXRhdG9yIGluIHJlc29sdmluZyB0ZWNobmljYWwgY29uZmxpY3RzLjwvbGk+CisgIDxsaT5CZSB0aGUgcHVibGljIGZhY2UgZm9yIHRoZSBwcm9qZWN0IGFuZCB0aGUgZ28tdG8gcGVyc29uIGZvciBxdWVzdGlvbnMKKyAgcmVsYXRlZCB0byB0aGUgcHJvamVjdC48L2xpPgorPC91bD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9zb3VyY2VfdG9jLmNzIGIvcGRrL2RvY3Mvc291cmNlL3NvdXJjZV90b2MuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljMjBhNgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9zb3VyY2VfdG9jLmNzCkBAIC0wLDAgKzEsMzggQEAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Cis8IS0tCitmdW5jdGlvbiBub3RoaW5nKCkge30KKy0tPgorPC9zY3JpcHQ+CisKKzx1bD4KKyAgPGxpPjxoMj5UaGUgUHJvamVjdDwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2Uvcm9sZXMuaHRtbCI+UGVvcGxlIGFuZCBSb2xlczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvbGljZW5zZXMuaHRtbCI+TGljZW5zaW5nIEluZm9ybWF0aW9uPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnLyI+QnJvd3NlIFNvdXJjZTwvYT4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogNzUlOyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHMiPltvZmYtc2l0ZV08L3NwYW4+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL292ZXJ2aWV3Lmh0bWwiPlBsYXRmb3JtIE92ZXJ2aWV3PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9saWZlLW9mLWEtYnVnLmh0bWwiPkxpZmUgb2YgYSBCdWc8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+ZmFxcy5odG1sI2Fvc3AiPkZBUXM8L2E+PC9saT4KKyAgPC91bD4KKworICA8bGk+PGgyPkdldHRpbmcgU3RhcnRlZDwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvZG93bmxvYWQuaHRtbCI+R2V0dGluZyB0aGUgU291cmNlPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9naXQtcmVwby5odG1sIj5Vc2luZyBnaXQgYW5kIHJlcG88L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL3VzaW5nLWVjbGlwc2UuaHRtbCI+VXNpbmcgRWNsaXBzZTwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvY29kZS1zdHlsZS5odG1sIj5Db2RlIFN0eWxlPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9idWlsZGluZy1kcmVhbS5odG1sIj5CdWlsZGluZyBmb3IgYW4gQURQPC9hPjwvbGk+CisgIDwvdWw+CisKKyAgPGxpPjxoMj5Db250cmlidXRpbmc8L2gyPjx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL2xpZmUtb2YtYS1wYXRjaC5odG1sIj5MaWZlIG9mIGEgUGF0Y2g8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL3N1Ym1pdC1wYXRjaGVzLmh0bWwiPlN1Ym1pdHRpbmcgUGF0Y2hlczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvcmVwb3J0LWJ1Z3MuaHRtbCI+UmVwb3J0aW5nIEJ1Z3M8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL2NvZGUtbGluZXMuaHRtbCI+QnJhbmNoZXMgJmFtcDsgUmVsZWFzZXM8L2E+PC9saT4KKyAgPC91bD4KKzwvdWw+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKzwhLS0KKyAgICBidWlsZFRvZ2dsZUxpc3RzKCk7CisvLy0tPgorPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9zdWJtaXQtcGF0Y2hlcy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9zdWJtaXQtcGF0Y2hlcy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjdiYWUxCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL3N1Ym1pdC1wYXRjaGVzLmpkCkBAIC0wLDAgKzEsMTQ3IEBACitwYWdlLnRpdGxlPUFuZHJvaWQgQ29udHJpYnV0b3JzJyBXb3JrZmxvdworZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPGJyPlRoaXMgcGFnZSBkZXNjcmliZXMgaG93IHRvIHJlY29yZCBjaGFuZ2VzIHRvIHRoZSBBbmRyb2lkIGZpbGVzIG9uIHlvdXIgbG9jYWwgY2xpZW50LCB1cGxvYWQgdGhvc2UgY2hhbmdlcyB0byB0aGUgY29kZS1yZXZpZXcgc2VydmVyLCBhbmQgdXNlIEdlcnJpdCB0byB0cmFjayBjaGFuZ2VzLjxicj48aDI+CitQcmVyZXF1aXNpdGVzPC9oMj4KK0JlZm9yZSB5b3UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgb24gdGhpcyBwYWdlLCB5b3Ugd2lsbCBuZWVkIHRvIHNldCB1cCB5b3VyCitsb2NhbCB3b3JraW5nIGVudmlyb25tZW50IGFuZCBnZXQgdGhlIEFuZHJvaWQgc291cmNlIGZpbGVzLiBGb3IgaW5zdHJ1Y3Rpb25zLAorc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+R2V0IHNvdXJjZTwvYT4KKy48YnI+PGJyPk90aGVyIHJlY29tbWVuZGVkIHJlYWRpbmc6PGJyPjx1bD48bGk+Rm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBjb2RlCitjb250cmlidXRpb24gYW5kIHJldmlldyBwcm9jZXNzLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvbGlmZS1vZi1hLXBhdGNoLmh0bWwiPkxpZmUgb2YgYSBQYXRjaDwvYT4uPC9saT4KKzxsaT5Gb3IgZGV0YWlscyBhYm91dCBSZXBvLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9naXQtcmVwby5odG1sIj5Vc2luZyBSZXBvIGFuZCBHaXQ8L2E+Ljxicj48L2xpPgorPGxpPkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlmZmVyZW50IHJvbGVzIHlvdSBjYW4gcGxheSB3aXRoaW4gdGhlIEFuZHJvaWQKK09wZW4gU291cmNlIGNvbW11bml0eSwgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2Uvcm9sZXMuaHRtbCI+UHJvamVjdCByb2xlczwvYT4uPC9saT4KKzxsaT5JZiB5b3UgcGxhbiB0byBjb250cmlidXRlIGNvZGUgdG8gdGhlIEFuZHJvaWQgcGxhdGZvcm0sIGJlIHN1cmUgdG8gcmVhZAordGhlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvbGljZW5zZXMuaHRtbCI+QU9TUCdzIGxpY2Vuc2luZyBpbmZvcm1hdGlvbjwvYT4uPC9saT4KKzwvdWw+Cis8aDI+CitXb3JraW5nIHdpdGggdGhlIGNvZGU8L2gyPgorRmlyc3QsIGRvd25sb2FkIHRoZSBzb3VyY2UgaW50byB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LCBhcyBkZXNjcmliZWQgaW4gPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+R2V0IHNvdXJjZTwvYT4KKy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBjaG9vc2Ugd2hpY2ggYnJhbmNoIHRvIHVzZSwgc2VlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2NvZGUtbGluZXMuaHRtbCI+QW5kcm9pZCBDb2RlLUxpbmVzPC9hPi48YnI+PGJyPlRvIHdvcmsgb24gYSBwYXJ0aWN1bGFyIGNoYW5nZSB0byB0aGUgY29kZSwgZm9sbG93IHRoZXNlIHN0ZXBzOjxicj4KKzxkaXY+PGltZyBzcmM9IntAZG9jUm9vdH1pbWFnZXMvc3VibWl0LXBhdGNoZXMtMC5wbmciPgorPC9kaXY+Cis8b2w+PGxpPlVzZSByZXBvIHN0YXJ0IDxpPmJyYW5jaG5hbWU8L2k+Cit0byBzdGFydCBhIG5ldyB0b3BpYyBicmFuY2guPC9saT4KKzxsaT5FZGl0IHRoZSBmaWxlcy48YnI+PC9saT4KKzxsaT48c3Bhbj5Vc2UgZ2l0IGFkZCB0byBzdGFnZSBjaGFuZ2VzLjwvc3Bhbj4KKzxzcGFuPihTb21ldGltZXMgb3B0aW9uYWwuKTwvc3Bhbj4KKzxicj48L2xpPgorPGxpPlVzZSByZXBvIHN0YXR1cyBhbmQgZ2l0IGRpZmYgdG8gdmlldyB0aGUgc3RhdHVzIG9mIHlvdXIgZmlsZXMuPGk+PGJyPjwvaT4KKzwvbGk+Cis8bGk+VXNlIGdpdCBjb21taXQgdG8gY29tbWl0IGNoYW5nZXMuPGJyPjwvbGk+Cis8bGk+PHNwYW4+VXNlIHJlcG8gdXBsb2FkIHRvIHVwbG9hZCBjaGFuZ2VzIHRvIHRoZSByZXZpZXcgc2VydmVyPC9zcGFuPgorLjxicj48L2xpPgorPC9vbD4KK1lvdSBjYW4gdHJhY2sgeW91ciB1cGxvYWRlZCBjaGFuZ2VzIHVzaW5nIHRoZSBHZXJyaXQgY29kZS1yZXZpZXcgdG9vbC4gV2hlbiBpdCdzIHRpbWUgdG8gd29yayBvbiB0aGUgY29kZSBhZ2FpbiwgcnVuIHJlcG8gc3luYywgdGhlbiBnbyBiYWNrIHRvIHN0ZXAgMSBhYm92ZSBhbmQgc3RhcnQgYW5vdGhlciB0b3BpYyBicmFuY2guPGJyPjxicj5UaGUgc3RlcHMgd2lsbCBub3QgYWx3YXlzIGNvbWUgaW4gdGhlIG9yZGVyIHNob3duLS1mb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHJ1biBnaXQgZGlmZiBhdCBzZXZlcmFsIHBvaW50cyBpbiB0aGUgcHJvY2Vzcy48YnI+PGJyPjxoMz4KK1N0YXJ0aW5nIGEgdG9waWMgYnJhbmNoPC9oMz4KK1N0YXJ0IGEgdG9waWMgYnJhbmNoIGNhbGxlZCBkZWZhdWx0IGluIHlvdXIgbG9jYWwgd29yayBlbnZpcm9ubWVudDo8YnI+PGJyPiQgcmVwbyBzdGFydCBkZWZhdWx0IDxicj48YnI+Rm9yIG1vcmUgYWJvdXQgdG9waWMgYnJhbmNoZXMsIHNlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2dpdC1yZXBvLmh0bWwiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4uPGJyPjxoMz4KK0VkaXRpbmcgdGhlIGZpbGVzPC9oMz4KK1lvdSBkbyBub3QgbmVlZCB0byBjaGVjayBmaWxlcyBvdXQgYmVmb3JlIHdvcmtpbmcgb24gdGhlbS4gRWRpdCB0aGUgZmlsZXMgdXNpbmcgdmltLCBlbWFjcywgb3IgYW55IG90aGVyIGVkaXRvci48YnI+PGJyPjxoMz4KK1N0YWdpbmcgY2hhbmdlczwvaDM+CitUbyBpbmRpY2F0ZSB0aGF0IGV2ZXJ5IG5ldyBhbmQgbW9kaWZpZWQgZmlsZSBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHNob3VsZCBiZSAic3RhZ2VkIiBmb3IgaW5jbHVzaW9uIGluIHRoZSBuZXh0IGNvbW1pdCwgcnVuIGdpdCBhZGQgd2l0aG91dCBhbnkgYXJndW1lbnRzLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBmaWxlcyBvciBmaWxldHlwZXMuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgd291bGQgc3RhZ2UgYWxsIHRoZSBuZXcgYW5kIG1vZGlmaWVkIGZpbGVzIHVuZGVyIHRoZSBiaW9uaWMgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXM6PGJyPjxicj4kIGdpdCBhZGQgYmlvbmljLyo8YnI+PGJyPlJ1biBnaXQgaGVscCBhZGQgdG8gc2VlIG1vcmUgd2F5cyB0byB1c2UgZ2l0IGFkZC48YnI+PGJyPjxiPldoZW4gaXMgZ2l0IGFkZCBvcHRpb25hbD88YnI+PC9iPgorPGJyPklmIHlvdSBhZGQgbmV3IGZpbGVzLCB5b3UgbXVzdCBzdGFnZSB0aGVtIHVzaW5nIGdpdCBhZGQgYmVmb3JlIHlvdSBydW4gZ2l0IGNvbW1pdC4gSG93ZXZlciwgaWYgeW91IGFyZSBvbmx5IG1vZGlmeWluZyBvciBkZWxldGluZyBmaWxlcywgeW91IGNhbiBza2lwIGdpdCBhZGQgaWYgeW91IHVzZSB0aGUgLWEgb3B0aW9uIHdpdGggZ2l0IGNvbW1pdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAiQ29tbWl0dGluZyBjaGFuZ2VzIiBzZWN0aW9uIGZ1cnRoZXIgZG93bi48YnI+PGJyPjxoMz4KK1VzaW5nIHJlcG8gc3RhdHVzIDxicj48L2gzPgorVG8gc2VlIHRoZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLCBydW4gPGJyPjxicj4kIHJlcG8gc3RhdHVzIC48YnI+PGJyPkZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIG9mIHJlcG8gc3RhdHVzLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9naXQtcmVwby5odG1sI1RPQy1zdGF0dXMiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4uPGJyPjxicj48aDM+CitVc2luZyBnaXQgZGlmZjwvaDM+CitUbyBzZWUgdW5jb21taXR0ZWQgY2hhbmdlcywgY2QgaW50byB0aGUgcHJvamVjdCBkaXJlY3RvcnkgYW5kIHJ1biA8YnI+PGJyPiQgZ2l0CitkaWZmIDxicj48YnI+V2l0aG91dCBhbnkgYXJndW1lbnRzLCBnaXQgZGlmZiB3aWxsIHNob3cgeW91IHRoZSBkaWZmZXJlbmNlcworYmV0d2VlbiB0aGUgZmlsZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIGNvbW1pdHRlZAorZmlsZXMuPGJyPjxkaXY+PGJyPjxkaXY+PGltZyBzcmM9IntAZG9jUm9vdH1pbWFnZXMvc3VibWl0LXBhdGNoZXMtMS5wbmciPgorPC9kaXY+Cis8YnI+PC9kaXY+Cis8ZGl2PklmIHlvdSBhZGQgdGhlIC0tY2FjaGVkIG9wdGlvbiwgZ2l0IGRpZmYgd2lsbCBzaG93IHlvdSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZmlsZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIHN0YWdlZCBmaWxlcy48YnI+PGJyPjwvZGl2PgorVG8gc2VlIGV2ZXJ5IGVkaXQgdGhhdCB3b3VsZCBnbyBpbnRvIHRoZSBjb21taXQgaWYgeW91IHdlcmUgdG8gY29tbWl0IHJpZ2h0IG5vdywgbWFrZSBzdXJlIHlvdSBhcmUgaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5IGFuZCB0aGVuIHJ1biA8YnI+PGJyPiQgZ2l0IGRpZmYgLS1jYWNoZWQgPGJyPjxicj48aDM+CitDb21taXR0aW5nIGNoYW5nZXM8L2gzPgorQXQgaW50ZXJ2YWxzIHdoaWxlIHlvdSBhcmUgd29ya2luZywgY29tbWl0IHlvdXIgZWRpdHMgYnkgdXNpbmcgZ2l0IGNvbW1pdCBmcm9tIHdpdGhpbiB0aGUgcHJvamVjdCBkaXJlY3Rvcnk6PGJyPjxzcGFuPiQgY2Qgfi9teWRyb2lkLzxpPnByb2plY3QtbmFtZTwvaT4KKzwvc3Bhbj4KKzxzcGFuPjxicj4kIGdpdCBjb21taXQ8L3NwYW4+Cis8YnI+PGJyPkV2ZXJ5IGZpbGUgdGhhdCB5b3Ugc3RhZ2VkIHVzaW5nIGdpdCBhZGQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGlzIGNvbW1pdC48YnI+PGJyPklmIHlvdSBoYXZlIG5vdCBhZGRlZCBhbnkgbmV3IGZpbGVzIHRoYXQgeW91IHdhbnQgdG8gY29tbWl0LCB5b3UgY2FuIHNraXAgZ2l0IGFkZCBhbmQgc2ltcGx5IHJ1biA8YnI+PGJyPiQgZ2l0IGNvbW1pdCAtYSA8YnI+PGJyPlRoZSAtYSBvcHRpb24gd2lsbCBzdGFnZSBhbGwgdGhlIGZpbGVzIHlvdSBoYXZlIG1vZGlmaWVkIG9yIGRlbGV0ZWQgYW5kIGluY2x1ZGUgdGhlbSBpbiB0aGlzIGNvbW1pdC4gKElmIHlvdSBoYXZlIGFkZGVkIG5ldyBmaWxlcyBhbmQgd2FudCB0aGVtIGluY2x1ZGVkIGluIHRoZSBjb21taXQsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIGdpdCBhZGQgYmVmb3JlIHlvdSBydW4gZ2l0IGNvbW1pdC4pPGJyPjxicj5JZiBjb21taXQgPHNwYW4+PC9zcGFuPgorZG9lcyBub3QgZmluZCBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZCwgaXQgd2lsbCByZXBvcnQgIm5vdGhpbmcgdG8gY29tbWl0ICh3b3JraW5nIGRpcmVjdG9yeSBjbGVhbikiLiBJZiBjb21taXQgZmluZHMgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQsIGEgZmlsZSB3aWxsIG9wZW4gaW4gd2hpY2ggeW91IGNhbiBjcmVhdGUgYSBsb2cgbWVzc2FnZTo8YnI+PGJyPjxkaXY+PGk+WW91ciBjb21tZW50cyBhYm91dCB0aGlzIGNvbW1pdCBnbyBoZXJlLi4uLjwvaT4KKzxicj4jIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmcgPGJyPiMgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC48YnI+IyBPbiBicmFuY2ggbWFzdGVyIDxicj4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOjxicj4jKHVzZSAiZ2l0IHJlc2V0IEhFQURmaWxlLi4uIiB0byB1bnN0YWdlKTxicj4jPGJyPiNuZXcgZmlsZToucmVwby9wcm9qZWN0cy9nZXJyaXQtbWFuaWZlc3RzLmdpdC9GRVRDSF9IRUFEIDxicj4jbmV3IGZpbGU6LnJlcG8vcHJvamVjdHMvZ2Vycml0LW1hbmlmZXN0cy5naXQvSEVBRCA8YnI+I25ldyBmaWxlOi5yZXBvL3Byb2plY3RzL2dlcnJpdC1tYW5pZmVzdHMuZ2l0L2NvbmZpZyA8YnI+Ljxicj4uPGJyPi48YnI+PC9kaXY+Cis8YnI+SWYgeW91IGRvIG5vdCBhZGQgYSBsb2cgbWVzc2FnZSwgdGhlIGNvbW1pdCB3aWxsIGJlIGFib3J0ZWQuIEFkZCBhIG1lc3NhZ2UgYW5kIHNhdmUgdGhlIGZpbGUuPGJyPjxicj48aDM+CitDb21taXR0aW5nIGNoYW5nZXMgZHVyaW5nIGNvZGUgcmV2aWV3PC9oMz4KK0lmIHlvdSBwcmV2aW91c2x5IHVwbG9hZGVkIGEgY2hhbmdlIHRvIEdlcnJpdCBhbmQgdGhlIEFwcHJvdmVyIGhhcyBhc2tlZCBmb3IgY2hhbmdlcywgZm9sbG93IHRoZXNlIHN0ZXBzOjxicj48b2w+PGxpPkVkaXQgdGhlIGZpbGVzIHRvIG1ha2UgdGhlIGNoYW5nZXMgdGhlIEFwcHJvdmVyIGhhcyByZXF1ZXN0ZWQuPC9saT4KKzxsaT5SZWNvbW1pdCB5b3VyIGVkaXRzIHVzaW5nIHRoZSAtLWFtZW5kIGZsYWcsIGZvciBleGFtcGxlOjxicj48c3Bhbj4kIGdpdCBjb21taXQgLWEgLS1hbWVuZDwvc3Bhbj4KKzxicj48L2xpPgorPGxpPlNlZSBiZWxvdyB0byB1cGxvYWQgdGhlIGNoYW5nZXMgdG8gR2Vycml0IGFnYWluIGZvciBhbm90aGVyIHJldmlldyBjeWNsZS48L2xpPgorPC9vbD4KKzxoMz4KK0VkaXRpbmcgdXBsb2FkZWQgY2hhbmdlczwvaDM+CitUbyB1cGRhdGUgYW4gZXhpc3RpbmcgY2hhbmdlIHdpdGggYSBuZXcgcGF0Y2ggc2V0Ojxicj48b2w+PGxpPk1ha2Ugc3VyZSB0aGUgdXBkYXRlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2guPC9saT4KKzxsaT5Vc2UgcmVwbyB1cGxvYWQgLS1yZXBsYWNlIDxpPnByb2oxPC9pPgordG8gb3BlbiB0aGUgY2hhbmdlIG1hdGNoaW5nIGVkaXRvci48L2xpPgorPGxpPkZvciBlYWNoIGNvbW1pdCBpbiB0aGUgc2VyaWVzLCBlbnRlciB0aGUgR2Vycml0IGNoYW5nZSBJZCBpbnNpZGUgdGhlIGJyYWNrZXRzLjwvbGk+Cis8L29sPgorRm9yIG1vcmUgZGV0YWlscywgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCNUT0MtdXBsb2FkIj5Vc2luZyBSZXBvIGFuZCBHaXQ8L2E+CisuPGJyPjxoMz4KK1VwbG9hZGluZyBjaGFuZ2VzIHRvIEdlcnJpdDwvaDM+CitUbyB1cGxvYWQgeW91ciBjb21taXR0ZWQgY2hhbmdlcyB0byB0aGUgcmV2aWV3IHNlcnZlcjo8YnI+PG9sPjxsaT5Db21wbGV0ZSB0aGUgYXBwcm9wcmlhdGUgPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyNzZXR0aW5ncyxuZXctYWdyZWVtZW50Ij5Db250cmlidXRvciBBZ3JlZW1lbnQ8L2E+CitpbiBHZXJyaXQsIGdyYW50aW5nIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgcGVybWlzc2lvbiB0byBkaXN0cmlidXRlIHlvdXIgY2hhbmdlcyB0byBvdGhlcnMuPC9saT4KKzxsaT5TZWxlY3QgYW4gPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyNzZXR0aW5ncyxzc2gta2V5cyI+U1NIIFVzZXJuYW1lPC9hPgorYW5kIHVwbG9hZCB5b3VyIDxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8jc2V0dGluZ3Msc3NoLWtleXMiPnB1YmxpYyBTU0gga2V5PC9hPgorLCBzbyB0aGF0IEdlcnJpdCBjYW4gaWRlbnRpZnkgeW91IHdoZW4geW91IHVwbG9hZCBjaGFuZ2VzLlBsZWFzZSBub3RlIHRoYXQgZHVlIHRvIGEgYnVnIGluIHJlcG8sIHJlcG8gdXBsb2FkIHJlcXVpcmVzIHlvdXIgU1NIIFVzZXJuYW1lIGJlIHRoZSBsb2NhbCBwYXJ0IG9mIHlvdXIgZW1haWwgYWRkcmVzcyAodGhlIHRleHQgb24gdGhlIGxlZnQgb2YgdGhlIEAgc2lnbikuPGJyPjxicj5UaGVzZSBmaXJzdCB0d28gc3RlcHMgYXJlIG9ubHkgbmVjZXNzYXJ5IHByaW9yIHRvIHlvdXIgZmlyc3QgY2hhbmdlLkdlcnJpdCB3aWxsIHJlbWVtYmVyIHlvdXIgYWdyZWVtZW50IGFuZCBTU0gga2V5IGZvciBzdWJzZXF1ZW50IGNoYW5nZXMuPGJyPjxicj48L2xpPgorPGxpPlVwZGF0ZSB0byB0aGUgbGF0ZXN0IHJldmlzaW9uczo8c3Bhbj48YnI+PC9zcGFuPgorPHNwYW4+JDwvc3Bhbj4KKzxzcGFuPnJlcG8gc3luYzwvc3Bhbj4KKzxicj48YnI+Rm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBoYW5kbGUgc3luYyBjb25mbGljdHMgYW5kIGhvdyBSZXBvIHN5bmNocm9uaXphdGlvbiB3b3Jrcywgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCNUT0Mtc3luYyI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPgorLjxicj48YnI+PC9saT4KKzxsaT5SdW4gcmVwbyB1cGxvYWQgdG8gZXhhbWluZSB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNoYW5nZXMgYW5kIHNlbGVjdCB3aGljaCB0b3BpYyBicmFuY2hlcyB3aWxsIGJlIHVwbG9hZGVkIHRvIHRoZSByZXZpZXcgc2VydmVyOjxicj48c3Bhbj4kPC9zcGFuPgorPHNwYW4+cmVwbyB1cGxvYWQ8L3NwYW4+Cis8YnI+PGJyPlRoaXMgd2lsbCBvcGVuIGFuIGVkaXRvciB3aW5kb3cgdGhhdCB3aWxsIGxldCB5b3UgY2hvb3NlIHdoaWNoIHRvcGljIGJyYW5jaCB0byB1cGxvYWQuSWYgdGhlcmUgaXMgb25seSBvbmUgYnJhbmNoIGF2YWlsYWJsZSwgYSBzaW1wbGUgeS9uIHByb21wdCBpcyBpbnN0ZWFkIG9mIGFuIGVkaXRvci48YnI+PC9saT4KKzwvb2w+CitBZnRlciBhIGNoYW5nZSBpcyB1cGxvYWRlZCBzdWNjZXNzZnVsbHk6PGJyPjx1bD48bGk+UmVwbyB3aWxsIGdpdmUgeW91IGEgVVJMIHdoZXJlIHlvdSBjYW4gdmlldyB5b3VyIHN1Ym1pc3Npb24uPC9saT4KKzxsaT5UaGUgY29kZS1yZXZpZXcgc3lzdGVtIHdpbGwgYXV0b21hdGljYWxseSBub3RpZnkgdGhlIHByb2plY3Qgb3duZXIgYWJvdXQgeW91ciBzdWJtaXNzaW9uLjwvbGk+Cis8L3VsPgorRm9yIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZnlpbmcgcGFydGljdWxhciBwcm9qZWN0cyB3aXRoIHJlcG8gc3luYyBhbmQgcmVwbyB1cGxvYWQsIHNlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2dpdC1yZXBvLmh0bWwiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4KKy48YnI+PGJyPjxoMz4KK1N1bW1hcnkgZXhhbXBsZSA8YnI+PC9oMz4KK0hlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB5b3UgbWlnaHQgd29yayB3aXRoIHRoZSBiaW9uaWMvQW5kcm9pZC5tayBmaWxlOjxicj48YnI+JCBjZCB+L215ZHJvaWQvYmlvbmljIDxicj4kIHJlcG8gc3RhcnQgZGVmYXVsdCA8YnI+JCB2aSBBbmRyb2lkLm1rIDxicj48aT4uLi5lZGl0IGFuZCBzYXZlIHRoZSBmaWxlLi4uPC9pPgorPGJyPiQgZ2l0IGNvbW1pdCAtYSA8YnI+JCByZXBvIHN5bmMgPGJyPiQgcmVwbyB1cGxvYWQgPGJyPjxpPi4uLmNsb3NlIHRoZSBlZGl0YWJsZSB3aW5kb3cgdGhhdCBvcGVucy4uLjwvaT4KKzxicj48aT4uLi52aXNpdCB0aGUgcHJvdmlkZWQgVVJMIHRvIG9wZW4gR2Vycml0IGFuZCB0cmFjayB5b3VyIGNoYW5nZS4uLjwvaT4KKzxicj48YnI+PGgzPgorRG93bmxvYWRpbmcgY2hhbmdlcyBmcm9tIEdlcnJpdDwvaDM+CitUbyBkb3dubG9hZCBhIHNwZWNpZmljIGNoYW5nZSBmcm9tIEdlcnJpdCwgcnVuIDxicj48YnI+JCByZXBvIGRvd25sb2FkIDxpPnRhcmdldCBjaGFuZ2U8L2k+Cis8YnI+PGJyPndoZXJlIHRhcmdldCBpcyB0aGUgbG9jYWwgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIGNoYW5nZSBzaG91bGQgYmUgZG93bmxvYWRlZCBhbmRjaGFuZ2UgaXMgdGhlIGNoYW5nZSBudW1iZXIgYXMgbGlzdGVkIGluIDxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8iPkdlcnJpdDwvYT4KKy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2dpdC1yZXBvLmh0bWwjVE9DLWRvd25sb2FkIj5Vc2luZyBSZXBvIGFuZCBHaXQ8L2E+CisuPGJyPjxicj48aDI+CitVc2luZyB0aGUgR2Vycml0IGNvZGUtcmV2aWV3IHRvb2wgPGJyPjwvaDI+CitZb3UgY2FuIG9wZW4gR2Vycml0IGJ5IHZpc2l0aW5nIHdoYXRldmVyIFVSTCBpcyByZXR1cm5lZCB0byB5b3UgZnJvbSB0aGUgcmVwbyB1cGxvYWQgY29tbWFuZCwgb3IgYnkgdmlzaXRpbmcgPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyI+aHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tPC9hPi48YnI+PGJyPjxoMz4KK1ZpZXdpbmcgdGhlIHN0YXR1cyBvZiB1cGxvYWRlZCBjaGFuZ2VzIDxicj48L2gzPgorVG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBhIGNoYW5nZSB0aGF0IHlvdSB1cGxvYWRlZCwgb3BlbiA8YSBocmVmPSJodHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vbWluZSI+R2Vycml0PC9hPgorLCBzaWduIGluLCBhbmQgY2xpY2sgTXlDaGFuZ2VzLjxicj48Yj48YnI+PC9iPgorPGgzPgorUmV2aWV3aW5nIGEgY2hhbmdlIDxicj48L2gzPgorSWYgeW91IGFyZSBhc3NpZ25lZCB0byBiZSB0aGUgQXBwcm92ZXIgZm9yIGEgY2hhbmdlLCB5b3UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGZvbGxvd2luZzo8YnI+PHVsPjxsaT5Eb2VzIHRoaXMgY2hhbmdlIGZpdCB3aXRoaW4gdGhpcyBwcm9qZWN0J3Mgc3RhdGVkIHB1cnBvc2U/PGJyPjwvbGk+Cis8bGk+SXMgdGhpcyBjaGFuZ2UgdmFsaWQgd2l0aGluIHRoZSBwcm9qZWN0J3MgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlPzwvbGk+Cis8bGk+RG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgZGVzaWduIGZsYXdzIHRoYXQgd2lsbCBjYXVzZSBwcm9ibGVtcyBpbiB0aGUgZnV0dXJlPzwvbGk+Cis8bGk+RG9lcyB0aGlzIGNoYW5nZSBmb2xsb3dpbmcgdGhlIGJlc3QgcHJhY3RpY2VzIHRoYXQgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzIHByb2plY3Q/PC9saT4KKzxsaT5JcyB0aGlzIGNoYW5nZSBhIGdvb2Qgd2F5IHRvIHBlcmZvcm0gdGhlIGRlc2NyaWJlZCBmdW5jdGlvbj88L2xpPgorPGxpPkRvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSBzZWN1cml0eSBvciBpbnN0YWJpbGl0eSByaXNrcz88L2xpPgorPC91bD4KK0lmIHlvdSBhcHByb3ZlIG9mIHRoZSBjaGFuZ2UsIHlvdSB3aWxsIHRoZW4gbWFyayBpdCB3aXRoIExHVE0gKCJMb29rcyBHb29kIHRvIE1lIikgd2l0aGluIEdlcnJpdC48YnI+PGJyPjxoMz4KK1ZlcmlmeWluZyBhIGNoYW5nZSA8YnI+PC9oMz4KK0lmIHlvdSBhcmUgYXNzaWduZWQgdG8gYmUgdGhlIFZlcmlmaWVyIGZvciBhIGNoYW5nZSwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzo8YnI+PHVsPjxsaT5QYXRjaCB0aGUgY2hhbmdlIGludG8geW91ciBsb2NhbCBjbGllbnQgdXNpbmcgb25lIG9mIHRoZSBEb3dubG9hZCBjb21tYW5kcy48L2xpPgorPGxpPkJ1aWxkIGFuZCB0ZXN0IHRoZSBjaGFuZ2UuPC9saT4KKzxsaT5XaXRoaW4gR2Vycml0IHVzZSBQdWJsaXNoIENvbW1lbnRzIHRvIG1hcmsgdGhlIGNvbW1pdCBhcyAiVmVyaWZpZWQiLCBvciAiRmFpbHMiIChhbmQgYWRkIGEgbWVzc2FnZSBleHBsYWluaW5nIHdoYXQgcHJvYmxlbXMgd2VyZSBpZGVudGlmaWVkKS48YnI+PC9saT4KKzwvdWw+Cis8aDM+CitWaWV3aW5nIGRpZmZzIGFuZCBjb21tZW50czwvaDM+CitUbyBvcGVuIHRoZSBkZXRhaWxzIG9mIHRoZSBjaGFuZ2Ugd2l0aGluIEdlcnJpdCwgY2xpY2sgb24gdGhlICJJZCBudW1iZXIiIG9yICJTdWJqZWN0IiBvZiBhIGNoYW5nZS4gVG8gY29tcGFyZSB0aGUgZXN0YWJsaXNoZWQgY29kZSB3aXRoIHRoZSB1cGRhdGVkIGNvZGUsIGNsaWNrIHRoZSBmaWxlIG5hbWUgdW5kZXIgIlNpZGUtYnktc2lkZSBkaWZmcy4iPGJyPjwvZGl2PgorPGRpdj48aDM+CitBZGRpbmcgY29tbWVudHM8L2gzPgorQW55b25lIGluIHRoZSBjb21tdW5pdHkgY2FuIHVzZSBHZXJyaXQgdG8gYWRkIGlubGluZSBjb21tZW50cyB0byBjb2RlIHN1Ym1pc3Npb25zLiBBIGdvb2QgY29tbWVudCB3aWxsIGJlIHJlbGV2YW50IHRvIHRoZSBsaW5lIG9yIHNlY3Rpb24gb2YgY29kZSB0byB3aGljaCBpdCBpcyBhdHRhY2hlZCBpbiBHZXJyaXQuIEl0IG1pZ2h0IGJlIGEgc2hvcnQgYW5kIGNvbnN0cnVjdGl2ZSBzdWdnZXN0aW9uIGFib3V0IGhvdyBhIGxpbmUgb2YgY29kZSBjb3VsZCBiZSBpbXByb3ZlZCwgb3IgaXQgbWlnaHQgYmUgYW4gZXhwbGFuYXRpb24gZnJvbSB0aGUgYXV0aG9yIGFib3V0IHdoeSB0aGUgY29kZSBtYWtlcyBzZW5zZSB0aGUgd2F5IGl0IGlzLjxicj48YnI+VG8gYWRkIGFuIGlubGluZSBjb21tZW50LCBkb3VibGUtY2xpY2sgdGhlIHJlbGV2YW50IGxpbmUgb2YgdGhlIGNvZGUgYW5kIHdyaXRlIHlvdXIgY29tbWVudCBpbiB0aGUgdGV4dCBib3ggdGhhdCBvcGVucy4gV2hlbiB5b3UgY2xpY2sgU2F2ZSwgb25seSB5b3UgY2FuIHNlZSB5b3VyIGNvbW1lbnQuPGJyPjxicj5UbyBwdWJsaXNoIHlvdXIgY29tbWVudHMgc28gdGhhdCBvdGhlcnMgdXNpbmcgR2Vycml0IHdpbGwgYmUgYWJsZSB0byBzZWUgdGhlbSwgY2xpY2sgdGhlIFB1Ymxpc2ggQ29tbWVudHMgYnV0dG9uLiBZb3VyIGNvbW1lbnRzIHdpbGwgYmUgZW1haWxlZCB0byBhbGwgcmVsZXZhbnQgcGFydGllcyBmb3IgdGhpcyBjaGFuZ2UsIGluY2x1ZGluZyB0aGUgY2hhbmdlIG93bmVyLCB0aGUgcGF0Y2ggc2V0IHVwbG9hZGVyIChpZiBkaWZmZXJlbnQgZnJvbSB0aGUgb3duZXIpLCBhbmQgYWxsIGN1cnJlbnQgcmV2aWV3ZXJzLjxicj48YnI+PGgzPgorQWZ0ZXIgYSBzdWJtaXNzaW9uIGlzIGFwcHJvdmVkPC9oMz4KK0FmdGVyIGEgc3VibWlzc2lvbiBtYWtlcyBpdCB0aHJvdWdoIHRoZSByZXZpZXcgYW5kIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBHZXJyaXQgYXV0b21hdGljYWxseSBtZXJnZXMgdGhlIGNoYW5nZSBpbnRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeS4gVGhlIGNoYW5nZSB3aWxsIG5vdyBiZSB2aXNpYmxlIGluIGdpdHdlYiwgYW5kIG90aGVycyB1c2VycyB3aWxsIGJlIGFibGUgdG8gcnVuIHJlcG8gc3luYyB0byBwdWxsIHRoZSB1cGRhdGUgaW50byB0aGVpciBsb2NhbCBjbGllbnQuPGJyPjxicj48aDM+CitIb3cgZG8gSSBiZWNvbWUgYSBWZXJpZmllciBvciBBcHByb3Zlcj88L2gzPgorSW4gc2hvcnQsIGNvbnRyaWJ1dGUgaGlnaC1xdWFsaXR5IGNvZGUgdG8gb25lIG9yIG1vcmUgb2YgdGhlIEFuZHJvaWQgcHJvamVjdHMuCitGb3IgZGV0YWlscyBhYm91dCB0aGUgZGlmZmVyZW50IHJvbGVzIGluIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIGNvbW11bml0eSBhbmQKK3dobyBwbGF5cyB0aGVtLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9yb2xlcy5odG1sIj5Qcm9qZWN0IHJvbGVzPC9hPgorLjxicj48YnI+PGgyPgorVXNpbmcgR2l0V2ViIHRvIHRyYWNrIHBhdGNoIGhpc3RvcmllczwvaDI+CitUbyB2aWV3IHNuYXBzaG90cyBvZiB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHB1YmxpYyBBbmRyb2lkIHJlcG9zaXRvcmllcyBhbmQgdmlldyBmaWxlIGhpc3RvcmllcywgdXNlIHRoZSA8YSBocmVmPSJodHRwOi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy8iPkFuZHJvaWQgaW5zdGFuY2Ugb2YgR2l0V2ViPC9hPgorLjxicj48L2Rpdj4KKzwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvdXNpbmctZWNsaXBzZS5qZCBiL3Bkay9kb2NzL3NvdXJjZS91c2luZy1lY2xpcHNlLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGY3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvdXNpbmctZWNsaXBzZS5qZApAQCAtMCwwICsxLDIxNCBAQAorcGFnZS50aXRsZT1Vc2luZyBFY2xpcHNlCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8ZGl2PgorPHA+VGhpcyBkb2N1bWVudCB3aWxsIGhlbHAgeW91IHNldCB1cCB0aGUgRWNsaXBzZSBJREUgZm9yIEFuZHJvaWQgcGxhdGZvcm0gZGV2ZWxvcG1lbnQuPC9wPgorPHA+PGk+Tm90ZTogaWYgeW91IGFyZSBsb29raW5nIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCitFY2xpcHNlIHRvIGRldmVsb3AgYXBwbGljYXRpb25zIHRoYXQgcnVuIG9uIEFuZHJvaWQsIHRoaXMgaXMgbm90IHRoZSByaWdodAorcGFnZSBmb3IgeW91LiBZb3UgcHJvYmFibHkgd291bGQgZmluZCA8YQoraHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zZGsvZWNsaXBzZS1hZHQuaHRtbCI+dGhlIEVjbGlwc2UgcGFnZSBvbgorZGV2ZWxvcGVyLmFuZHJvaWQuY29tPC9hPiBtb3JlIHVzZWZ1bC48L2k+PC9wPgorPGgyPjxhPkVudGVyIGVjbGlwc2U8L2E+Cis8L2gyPgorPGg0PgorQmFzaWMgc2V0dXAKKzwvaDQ+Cis8cD5GaXJzdCwgaXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWd1bGFyIEFuZHJvaWQgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIHNldCB1cC4KKzwvcD4KKzxwcmU+Y2QgL3BhdGgvdG8vYW5kcm9pZC9yb290IDxicj5tYWtlICAgICAjIGFuZCB3YWl0IGEgd2hpbGUsIGlmIHlvdSBoYXZlbid0IGRvbmUgdGhpcyA8YnI+PC9wcmU+Cis8cD48Yj5JbXBvcnRhbnQ8L2I+Cis6IFlvdSB3aWxsIHN0aWxsIGJlIHVzaW5nICJtYWtlIiB0byBidWlsZCB0aGUgZmlsZXMgeW91IHdpbGwgYWN0dWFsbHkgcnVuIChpbiB0aGUgZW11bGF0b3Igb3Igb24gYSBkZXZpY2UpLiBZb3Ugd2lsbCBiZSB1c2luZyBFY2xpcHNlIHRvIGVkaXQgZmlsZXMgYW5kIHZlcmlmeSB0aGF0IHRoZXkgY29tcGlsZSwgYnV0IHdoZW4geW91IHdhbnQgdG8gcnVuIHNvbWV0aGluZyB5b3Ugd2lsbCBuZWVkIHRvIG1ha2Ugc3VyZSBmaWxlcyBhcmUgc2F2ZWQgaW4gRWNsaXBzZSBhbmQgcnVuICJtYWtlIiBpbiBhIHNoZWxsLiBUaGUgRWNsaXBzZSBidWlsZCBpcyBqdXN0IGZvciBlcnJvciBjaGVja2luZy4KKzwvcD4KKzxwPkVjbGlwc2UgbmVlZHMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgSmF2YSBmaWxlcy4gVGhpcyBpcyBjYWxsZWQgdGhlICJKYXZhIEJ1aWxkIFBhdGgiIGFuZCBjYW4gYmUgc2V0IHdpdGggdGhlIC5jbGFzc3BhdGggZmlsZS4gV2UgaGF2ZSBhIHNhbXBsZSB2ZXJzaW9uIHRvIHN0YXJ0IHlvdSBvZmYuCis8L3A+Cis8cHJlPmNkIC9wYXRoL3RvL2FuZHJvaWQvcm9vdCA8YnI+Y3AgZGV2ZWxvcG1lbnQvaWRlL2VjbGlwc2UvLmNsYXNzcGF0aCAuPGJyPmNobW9kIHUrdyAuY2xhc3NwYXRoICAjIE1ha2UgdGhlIGNvcHkgd3JpdGFibGUgPGJyPjwvcHJlPgorPHA+Tm93IGVkaXQgdGhhdCBjb3B5IG9mIC5jbGFzc3BhdGgsIGlmIG5lY2Vzc2FyeS4KKzwvcD4KKzxoNT4KK0luY3JlYXNlIEVjbGlwc2UncyBNZW1vcnkgU2V0dGluZ3MKKzwvaDU+Cis8cD5UaGUgQW5kcm9pZCBwcm9qZWN0IGlzIGxhcmdlIGVub3VnaCB0aGF0IEVjbGlwc2UncyBKYXZhIFZNIHNvbWV0aW1lcyBydW5zIG91dCBvZiBtZW1vcnkgd2hpbGUgY29tcGlsaW5nIGl0LiBBdm9pZCB0aGlzIHByb2JsZW0gYnkgZWRpdGluZyB0aGUgdGhlIGVjbGlwc2UuaW5pIGZpbGUuIE9uIEFwcGxlIE9TWCB0aGUgZWNsaXBzZS5pbmkgZmlsZSBpcyBsb2NhdGVkIGF0IC9BcHBsaWNhdGlvbnMvZWNsaXBzZS9FY2xpcHNlLmFwcC9Db250ZW50cy9NYWNPUy9lY2xpcHNlLmluaQorPC9wPgorPHA+TWVtb3J5LXJlbGF0ZWQgZGVmYXVsdHMgKGFzIG9mIEVjbGlwc2UgMy40KQorPC9wPgorCis8cHJlPi1YbXM0MG0gPGJyPi1YbXgyNTZtIDxicj4tWFg6TWF4UGVybVNpemU9MjU2bSA8YnI+PC9wcmU+Cis8cD5SZWNvbW1lbmRlZCBzZXR0aW5ncyBmb3IgQW5kcm9pZCBkZXZlbG9wbWVudAorPC9wPgorPHByZT4tWG1zMTI4bSA8YnI+LVhteDUxMm0gPGJyPi1YWDpNYXhQZXJtU2l6ZT0yNTZtIDxicj48L3ByZT4KKzxwPlRoZXNlIHNldHRpbmdzIHNldCBFY2xpcHNlJ3MgbWluaW11bSBKYXZhIGhlYXAgc2l6ZSB0byAxMjhNQiwgc2V0IHRoZSBtYXhpbXVtIEphdmEgaGVhcCBzaXplIHRvIDUxMk1CLCBhbmQga2VlcCB0aGUgbWF4aW11bSBwZXJtYW5lbnQgZ2VuZXJhdGlvbiBzaXplIGF0IHRoZSBkZWZhdWx0IG9mIDI1Nk1CLgorPC9wPgorPHA+Tm93IHN0YXJ0IEVjbGlwc2U6Cis8L3A+Cis8cHJlPmVjbGlwc2UgICMgb3IgeW91IGNhbiBjbGljayBzb21lIGNsaWNreSB0aGluZyBpbnN0ZWFkLCBpZiB5b3UgcHJlZmVyIDxicj48L3ByZT4KKzxwPk5vdyBjcmVhdGUgYSBwcm9qZWN0IGZvciBBbmRyb2lkIGRldmVsb3BtZW50OgorPC9wPgorPG9sPjxsaT5JZiBFY2xpcHNlIGFza3MgeW91IGZvciBhIHdvcmtzcGFjZSBsb2NhdGlvbiwgY2hvb3NlIHRoZSBkZWZhdWx0LgorPC9saT4KKzxsaT5JZiB5b3UgaGF2ZSBhICJXZWxjb21lIiBzY3JlZW4sIGNsb3NlIGl0IHRvIHJldmVhbCB0aGUgSmF2YSBwZXJzcGVjdGl2ZS4KKzwvbGk+Cis8bGk+RmlsZSBOZXcgSmF2YSBQcm9qZWN0Cis8L2xpPgorPGxpPlBpY2sgYSBwcm9qZWN0IG5hbWUsICJhbmRyb2lkIiBvciBhbnl0aGluZyB5b3UgbGlrZS4KKzwvbGk+Cis8bGk+U2VsZWN0ICJDcmVhdGUgcHJvamVjdCBmcm9tIGV4aXN0aW5nIHNvdXJjZSIsIGVudGVyIHRoZSBwYXRoIHRvIHlvdXIgQW5kcm9pZCByb290IGRpcmVjdG9yeSwgYW5kIGNsaWNrIEZpbmlzaC4KKzwvbGk+Cis8bGk+V2FpdCB3aGlsZSBpdCBzZXRzIHVwIHRoZSBwcm9qZWN0LiAoWW91J2xsIHNlZSBhIHN1YnRsZSBwcm9ncmVzcyBtZXRlciBpbiB0aGUgbG93ZXIgcmlnaHQgY29ybmVyLikKKzwvbGk+Cis8L29sPgorPHA+T25jZSB0aGUgcHJvamVjdCB3b3Jrc3BhY2UgaXMgY3JlYXRlZCwgRWNsaXBzZSBzaG91bGQgc3RhcnQgYnVpbGRpbmcuIEluIHRoZW9yeSwgaXQgc2hvdWxkIGJ1aWxkIHdpdGggbm8gZXJyb3JzIGFuZCB5b3Ugc2hvdWxkIGJlIHNldCB0byBnby4gSWYgbmVjZXNzYXJ5LCB1bmNoZWNrIGFuZCByZS1jaGVjayBQcm9qZWN0IEJ1aWxkIEF1dG9tYXRpY2FsbHkgdG8gZm9yY2UgYSByZWJ1aWxkLgorPC9wPgorPHA+PGk+PGI+Tm90ZTo8L2I+Cis8L2k+CitFY2xpcHNlIHNvbWV0aW1lcyBsaWtlcyB0byBhZGQgYW4gImltcG9ydCBhbmRyb2lkLlIiIHN0YXRlbWVudCBhdCB0aGUgdG9wIG9mIHlvdXIgZmlsZXMgdGhhdCB1c2UgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IHdoZW4geW91IGFzayBlY2xpcHNlIHRvIHNvcnQgb3Igb3RoZXJ3aXNlIG1hbmFnZSBpbXBvcnRzLiBUaGlzIHdpbGwgY2F1c2UgeW91ciBtYWtlIHRvIGJyZWFrLiBMb29rIG91dCBmb3IgdGhlc2UgZXJyb25lb3VzIGltcG9ydCBzdGF0ZW1lbnRzIGFuZCBkZWxldGUgdGhlbS4KKzwvcD4KKzxoND4KK1doZW4geW91IHN5bmMKKzwvaDQ+Cis8cD5FdmVyeSB0aW1lIHlvdSByZXBvIHN5bmMsIG9yIG90aGVyd2lzZSBjaGFuZ2UgZmlsZXMgb3V0c2lkZSBvZiBFY2xpcHNlIChlc3BlY2lhbGx5IHRoZSAuY2xhc3NwYXRoKSwgeW91IG5lZWQgdG8gcmVmcmVzaCBFY2xpcHNlJ3MgdmlldyBvZiB0aGluZ3M6Cis8L3A+Cis8b2w+PGxpPldpbmRvdyBTaG93IFZpZXcgTmF2aWdhdG9yCis8L2xpPgorPGxpPkluIHRoZSAiTmF2aWdhdG9yIiwgcmlnaHQtY2xpY2sgb24gdGhlIHByb2plY3QgKCJhbmRyb2lkLWphdmEiIG9yIHdoYXRldmVyIHlvdSBuYW1lZCBpdCkKKzwvbGk+Cis8bGk+Q2xpY2sgUmVmcmVzaCBpbiB0aGUgY29udGV4dCBtZW51Cis8L2xpPgorPC9vbD4KKzxoND4KK0FkZGluZyBhcHBzIHRvIHRoZSBidWlsZCBwYXRoCis8L2g0PgorPHA+VGhlIGRlZmF1bHQgLmNsYXNzcGF0aCBpbmNsdWRlcyB0aGUgc291cmNlIHRvIHRoZSBjb3JlIHN5c3RlbSBhbmQgYSBzYW1wbGUgc2V0IG9mIGFwcHMsIGJ1dCBtaWdodCBub3QgaW5jbHVkZSB0aGUgcGFydGljdWxhciBhcHAgeW91IG1heSB3YW50IHRvIHdvcmsgb24uIFRvIGFkZCBhbiBhcHAsIHlvdSBtdXN0IGFkZCB0aGUgYXBwJ3Mgc291cmNlIGRpcmVjdG9yeS4gVG8gZG8gdGhpcyBpbnNpZGUgRWNsaXBzZToKKzwvcD4KKzxvbD48bGk+UHJvamVjdCBQcm9wZXJ0aWVzCis8L2xpPgorPGxpPlNlbGVjdCAiSmF2YSBCdWlsZCBQYXRoIiBmcm9tIHRoZSBsZWZ0LWhhbmQgbWVudS4KKzwvbGk+Cis8bGk+Q2hvb3NlIHRoZSAiU291cmNlIiB0YWIuCis8L2xpPgorPGxpPkNsaWNrICJBZGQgRm9sZGVyLi4uIi4KKzwvbGk+Cis8bGk+QWRkIHlvdXIgYXBwJ3MgInNyYyIgZGlyZWN0b3J5LgorPC9saT4KKzxsaT5DbGljayBPSy4KKzwvbGk+Cis8L29sPgorPHA+V2hlbiB5b3UncmUgZG9uZSwgdGhlICJzb3VyY2UgZm9sZGVyIiBwYXRoIGluIHRoZSBsaXN0IHNob3VsZCBsb29rIGxpa2UgYW5kcm9pZC9wYWNrYWdlcy9hcHBzLzxpPllvdXJBcHBOYW1lPC9pPgorL3NyYy4gRGVwZW5kaW5nIG9uIHdoaWNoIGFwcChzKSB5b3UgaW5jbHVkZSwgeW91IG1heSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBvdGhlcnNyYy9tYWluL2phdmEgZGlyZWN0b3JpZXMgdW5kZXIgYW5kcm9pZC9kYWx2aWsvbGliY29yZS4gRG8gdGhpcyBpZiB5b3UgZmluZCB5b3UgY2Fubm90IGJ1aWxkIHdpdGggdGhlIGRlZmF1bHQgc2V0LgorPC9wPgorPGg0PgorRWNsaXBzZSBzZXR1cCB0byB3b3JrIG9uIGRldmVsb3BlciB0b29scworPC9oND4KKzxwPlRvIHdvcmsgb24gSmF2YSBkZXZlbG9wZXIgdG9vbHMsIHRoZSBwcmluY2lwbGUgaXMgdGhlIHNhbWUsIGV4Y2VwdCB5b3Ugc3BlY2lmeSAvcGF0aC90by90b29sIHdoZW4gdXNpbmcgdGhlIG9wdGlvbiAiQ3JlYXRlIHByb2plY3QgZnJvbSBleGlzdGluZyBzb3VyY2UuIgorPC9wPgorPHA+T25jZSB0aGUgcHJvamVjdCBpcyBjcmVhdGVkLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIEphdmEgQnVpbGQgUGF0aDoKKzwvcD4KKzxvbD48bGk+U2VsZWN0IHRoZSBwcm9qZWN0IHlvdSBqdXN0IGNyZWF0ZWQuCis8L2xpPgorPGxpPlByb2plY3QgUHJvcGVydGllcworPC9saT4KKzxsaT5TZWxlY3QgIkphdmEgQnVpbGQgUGF0aCIgZnJvbSB0aGUgbGVmdC1oYW5kIG1lbnUuCis8L2xpPgorPGxpPkNob29zZSB0aGUgIlNvdXJjZSIgdGFiLgorPC9saT4KKzxsaT5FeHBhbmQgdGhlIHNpbmdsZSA8aT50b29sbmFtZTwvaT4KKy9zcmMgZW50cnkuCis8L2xpPgorPGxpPkRvdWJsZSBjbGljayB0aGUgIkV4Y2x1ZGVkOiAobm9uZSkiIGl0ZW0uCis8L2xpPgorPGxpPkFkZCB0byB0aGUgZXhjbHVkZWQgKGJvdHRvbSkgbGlzdDogIk1ha2VGaWxlIiBhbmQgInJlc291cmNlcy8iLgorPC9saT4KKzxsaT5DbG9zZSB0aGUgZGlhbG9nLgorPC9saT4KKzxsaT5CYWNrIGluIHRoZSAiU291cmNlIiB0YWIsIGNsaWNrICJBZGQgRm9sZGVyLi4uIiwgYW5kIGFkZCA8aT50b29sbmFtZTwvaT4KKy9zcmMvcmVzb3VyY2VzLgorPC9saT4KKzxsaT5DbGljayBPSy4KKzwvbGk+Cis8L29sPgorPGg0PgorRWNsaXBzZSBzZXR1cCB0byB3b3JrIG9uIERETVMgPGJyPjwvaDQ+Cis8cD5Gb3IgRERNUywgeW91IHdpbGwgbmVlZCB0byBtYWtlIGEgcHJvamVjdCBmb3IKKzwvcD4KKzxvbD48bGk+ZGV2ZWxvcG1lbnQvdG9vbHMvZGRtcy9saWJzL2RkbWxpYgorPC9saT4KKzxsaT5kZXZlbG9wbWVudC90b29scy9kZG1zL2xpYnMvZGRtdWlsaWIKKzwvbGk+Cis8bGk+ZGV2ZWxvcG1lbnQvdG9vbHMvZGRtcy9hcHAKKzwvbGk+Cis8L29sPgorPHA+RWFjaCBwcm9qZWN0IHdpbGwgbmVlZCB0byByZWZlcmVuY2UgdGhlIG9uZXMgYmVmb3JlIGl0ICgiZGRtdWlsaWIiIHJlZmVyZW5jZXMgImRkbWxpYiIsIGFuZCAiYXBwIiByZWZlcmVuY2VzIGJvdGggb2YgdGhvc2UpLiBUbyBkbyB0aGlzOgorPC9wPgorPG9sPjxsaT5NYWtlIHN1cmUgeW91IGhhdmUgYWxsIDMgcHJvamVjdHMgZGVmaW5lZC4KKzwvbGk+Cis8bGk+UmlnaHQgY2xpY2sgb24gYSBwcm9qZWN0LCAiQnVpbGQgUGF0aCIgIkNvbmZpZ3VyZSBCdWlsZCBQYXRoLi4uIgorPC9saT4KKzxsaT5DaG9vc2UgdGhlICJQcm9qZWN0IiB0YWIuCis8L2xpPgorPGxpPkNsaWNrICJBZGQuLi4iIGFuZCBjaGVjayB0aGUgcmVxdWlyZWQgcHJvamVjdHMuCis8L2xpPgorPC9vbD4KKzxoMj48YT5FY2xpcHNlIGZvcm1hdHRpbmc8L2E+Cis8L2gyPgorPHA+WW91IGNhbiBpbXBvcnQgZmlsZXMgaW4gZGV2ZWxvcG1lbnQvaWRlL2VjbGlwc2UgdG8gbWFrZSBFY2xpcHNlCitmb2xsb3cgdGhlIEFuZHJvaWQgc3R5bGUgcnVsZXMuICBTZWxlY3QKKyJXaW5kb3cgJnJzYXF1bzsgUHJlZmVyZW5jZXMgJnJzYXF1bzsgSmF2YSAmcnNhcXVvOyBDb2RlIFN0eWxlIi4KK1VzZSAiRm9ybWF0dGVyICZyc2FxdW87IEltcG9ydCIgdG8gaW1wb3J0IGFuZHJvaWQtZm9ybWF0dGluZy54bWwKK2FuZCAiT3JnYW5pemUgSW1wb3J0cyAmcnNhcXVvOyBJbXBvcnQiIHRvIGltcG9ydCBhbmRyb2lkLmltcG9ydG9yZGVyLgorPC9wPgorPGgyPjxhPkRlYnVnZ2luZyB0aGUgZW11bGF0b3Igd2l0aCBFY2xpcHNlPC9hPgorPC9oMj4KKzxwPllvdSBjYW4gYWxzbyB1c2UgZWNsaXBzZSB0byBkZWJ1ZyB0aGUgZW11bGF0b3IgYW5kIHN0ZXAgdGhyb3VnaCBjb2RlLiBGaXJzdCwgc3RhcnQgdGhlIGVtdWxhdG9yIHJ1bm5pbmc6Cis8L3A+Cis8cHJlPmNkIC9wYXRoL3RvL2FuZHJvaWQvcm9vdCA8YnI+LiBidWlsZC9lbnZzZXR1cC5zaCA8YnI+bHVuY2ggMSAgICMgdG8gYnVpbGQgdGhlIGVtdWxhdG9yIDxicj5tYWtlICAgICAgIyBpZiB5b3UgZGlkbid0IGFscmVhZHkgZG8gdGhpcyA8YnI+ZW11bGF0b3IgICMgeW91IHNob3VsZCBzZWUgYSBHVUkgcGljdHVyZSBvZiBhIHBob25lIDxicj48L3ByZT4KKzxwPkluIGFub3RoZXIgc2hlbGwsIHN0YXJ0IERETVMgKHRoZSBEYWx2aWsgZGVidWcgbWFuYWdlcik6Cis8L3A+Cis8cHJlPmNkIC9wYXRoL3RvL2FuZHJvaWQvcm9vdCA8YnI+ZGRtcyAgICAgICMgeW91IHNob3VsZCBnZXQgYSBzcGx1ZnR5IGRlYnVnZ2luZyBjb25zb2xlIDxicj48L3ByZT4KKzxwPk5vdywgaW4gZWNsaXBzZSwgeW91IGNhbiBhdHRhY2ggdG8gdGhlIGVtdWxhdG9yOgorPC9wPgorPG9sPjxsaT5SdW4gT3BlbiBEZWJ1ZyBEaWFsb2cuLi4KKzwvbGk+Cis8bGk+UmlnaHQtY2xpY2sgIlJlbW90ZSBKYXZhIEFwcGxpY2F0aW9uIiwgc2VsZWN0ICJOZXciLgorPC9saT4KKzxsaT5QaWNrIGEgbmFtZSwgImFuZHJvaWQtZGVidWciIG9yIGFueXRoaW5nIHlvdSBsaWtlLgorPC9saT4KKzxsaT5TZXQgdGhlICJQcm9qZWN0IiB0byB5b3VyIHByb2plY3QgKCJhbmRyb2lkLWphdmEiIG9yIHdoYXRldmVyKS4KKzwvbGk+Cis8bGk+S2VlcCB0aGUgIkhvc3QiIHNldCB0byAibG9jYWxob3N0IiwgYnV0IGNoYW5nZSAiUG9ydCIgdG8gODcwMC4KKzwvbGk+Cis8bGk+Q2xpY2sgdGhlICJEZWJ1ZyIgYnV0dG9uIGFuZCB5b3Ugc2hvdWxkIGJlIGFsbCBzZXQuCis8L2xpPgorPC9vbD4KKzxwPk5vdGUgdGhhdCBwb3J0IDg3MDAgaXMgYXR0YWNoZWQgdG8gd2hhdGV2ZXIgcHJvY2VzcyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgaW4gdGhlIERETVMgY29uc29sZSwgc28geW91IG5lZWQgdG8gc3VyZSB0aGF0IERETVMgaGFzIHNlbGVjdGVkIHRoZSBwcm9jZXNzIHlvdSB3YW50IHRvIGRlYnVnLgorPC9wPgorPHA+WW91IG1heSBuZWVkIHRvIG9wZW4gdGhlIERlYnVnIHBlcnNwZWN0aXZlIChuZXh0IHRvIHRoZSAiSmF2YSIgcGVyc3BlY3RpdmUgaWNvbiBpbiB0aGUgdXBwZXItcmlnaHQsIGNsaWNrIHRoZSBzbWFsbCAiT3BlbiBQZXJzcGVjdGl2ZSIgaWNvbiBhbmQgc2VsZWN0ICJEZWJ1ZyIpLiBPbmNlIHlvdSBkbywgeW91IHNob3VsZCBzZWUgYSBsaXN0IG9mIHRocmVhZHM7IGlmIHlvdSBzZWxlY3Qgb25lIGFuZCBicmVhayBpdCAoYnkgY2xpY2tpbmcgdGhlICJwYXVzZSIgaWNvbiksIGl0IHNob3VsZCBzaG93IHRoZSBzdGFjayB0cmFjZSwgc291cmNlIGZpbGUsIGFuZCBsaW5lIHdoZXJlIGV4ZWN1dGlvbiBpcyBhdC4gQnJlYWtwb2ludHMgYW5kIHdoYXRub3Qgc2hvdWxkIGFsbCB3b3JrLgorPC9wPgorPGgyPjxhPkJvbnVzIG1hdGVyaWFsPC9hPgorPC9oMj4KKzxwPlJlcGxhY2UgQ3RybCB3aXRoIHRoZSBBcHBsZSBrZXkgb24gTWFjLgorPC9wPgorCis8cHJlPkN0cmwtU2hpZnQtbyA9IE9yZ2FuaXplIGltcG9ydHMgPGJyPkN0cmwtU2hpZnQtdCA9IGxvYWQgY2xhc3MgYnkgbmFtZSA8YnI+Q3RybC1TaGlmdC1yID0gbG9hZCBub24tY2xhc3MgcmVzb3VyY2UgYnkgbmFtZSA8YnI+Q3RybC0xID0gcXVpY2sgZml4IDxicj5DdHJsLWUgPSBSZWNlbnRseSB2aWV3ZWQgZmlsZXMgPGJyPkN0cmwtc3BhY2UgPSBhdXRvIGNvbXBsZXRlIDxicj5TaGlmdC1BbHQtciA9IHJlZmFjdG9yOnJlbmFtZSA8YnI+U2hpZnQtQWx0LXYgPSByZWZhY3Rvcjptb3ZlIDxicj48L3ByZT4KKworPGgyPjxhPlVzZWZ1bCBQbHVnaW5zPC9hPgorPC9oMj4KKzxwPkVjbGlwc2UgaGFzIGEgcGx1Z2luIGFyY2hpdGVjdHVyZSB0aGF0IGVuYWJsZXMgdGhpcmQgcGFydGllcyB0byBleHRlbmQgdGhlIElERS4gSGVyZSBhcmUgc29tZSBwbHVnaW5zIHRoYXQgbWFrZSBFY2xpcHNlIGVhc2llciB0byB1c2UgZm9yIHdyaXRpbmcgQW5kcm9pZCBzb2Z0d2FyZToKKzwvcD4KKworPHVsPjxsaT48YSBocmVmPSJodHRwOi8vYW5kcmVpLmdteGhvbWUuZGUvYW55ZWRpdC8iPkFueUVkaXQ8L2E+CistIGF1dG9tYXRpY2FsbHkgZml4IHdoaXRlc3BhY2UgaXNzdWVzIHdoZW4gc2F2aW5nIGZpbGVzLiBDYW4gY29udmVydCB0YWJzIHRvIHNwYWNlcywgc3RyaXAgYmxhbmtzIGF0IGVuZC1vZi1saW5lLCBhbmQgZW5zdXJlIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGZpbGUgaGFzIGFuIGVuZC1vZi1saW5lIGNoYXJhY3Rlci4KKzwvbGk+Cis8L3VsPgorPGgyPjxhPiJFY2xpcHNlIGlzIG5vdCB3b3JraW5nIGNvcnJlY3RseSwgd2hhdCBzaG91bGQgSSBkbz8iPC9hPgorPC9oMj4KKzxwPk1ha2Ugc3VyZToKKzwvcD4KKzx1bD48bGk+WW91IGZvbGxvd2VkIHRoZSBpbnN0cnVjdGlvbnMgb24gdGhpcyBwYWdlIHByZWNpc2VseS4KKzwvbGk+Cis8bGk+WW91ciBQcm9ibGVtcyB2aWV3IGRvZXNuJ3Qgc2hvdyBhbnkgZXJyb3JzLgorPC9saT4KKzxsaT5Zb3VyIGFwcGxpY2F0aW9uIHJlc3BlY3RzIHRoZSBwYWNrYWdlL2RpcmVjdG9yeSBzdHJ1Y3R1cmUuCis8L2xpPgorPC91bD4KKzxwPklmIHlvdSdyZSBzdGlsbCBoYXZpbmcgcHJvYmxlbXMsIHBsZWFzZSBjb250YWN0IG9uZSBvZiB0aGUgQW5kcm9pZCBtYWlsaW5nIGxpc3RzIG9yIElSQyBjaGFubmVscy4KKzwvcD4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2hvc3RpbmcvYXBwLnlhbWwgYi9wZGsvaG9zdGluZy9hcHAueWFtbAppbmRleCBiMzZlZmU4Li42NzU4NTM5IDEwMDY0NAotLS0gYS9wZGsvaG9zdGluZy9hcHAueWFtbAorKysgYi9wZGsvaG9zdGluZy9hcHAueWFtbApAQCAtNCw4ICs0LDEwIEBACiBhcGlfdmVyc2lvbjogMQogCiBoYW5kbGVyczoKLS0gdXJsOiAvb25saW5lLXBkawotICBzdGF0aWNfZGlyOiBvbmxpbmUtcGRrCi0KIC0gdXJsOiAvCi0gIHNjcmlwdDogcGRrLnB5CisgIHN0YXRpY19maWxlczogb25saW5lLXBkay9pbmRleC5odG1sCisgIHVwbG9hZDogb25saW5lLXBkay9pbmRleC5odG1sCisKKy0gdXJsOiAvKC4qKQorICBzdGF0aWNfZmlsZXM6IG9ubGluZS1wZGsvXDEKKyAgdXBsb2FkOiBvbmxpbmUtcGRrLy4qCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggYTZlZmY5Ni4uNjYxNWQ3MSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtNCw5ICs0LDkgQEAKICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAorCiAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIAorCiAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCkBAIC0yOCwxMyArMjgsMTQgQEAKICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04iIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9XQUxMUEFQRVIiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFIiAvPgogCiAgICAgPCEtLSBXZSB3aWxsIHJlcXVlc3QgYWNjZXNzIHRvIHRoZSBjYW1lcmEsIHNheWluZyB3ZSByZXF1aXJlIGEgY2FtZXJhCiAgICAgICAgICBvZiBzb21lIHNvcnQgYnV0IG5vdCBvbmUgd2l0aCBhdXRvZm9jdXMgY2FwYWJpbGl0eS4gLS0+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DQU1FUkEiIC8+CiAgICAgPHVzZXMtZmVhdHVyZSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhIiAvPgogICAgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMiIGFuZHJvaWQ6cmVxdWlyZWQ9ImZhbHNlIiAvPgotICAgIAorCiAgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bmFtZT0iQXBpRGVtb3NBcHBsaWNhdGlvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfc2FtcGxlX2NvZGUiCiAgICAgICAgICAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9hcHBfc2FtcGxlX2NvZGUiID4KQEAgLTQyLDcgKzQzLDcgQEAKICAgICAgICAgPCEtLSBUaGlzIGlzIGhvdyB3ZSBjYW4gcmVxdWVzdCBhIGxpYnJhcnkgYnV0IHN0aWxsIGFsbG93IHRoZSBhcHAKICAgICAgICAgICAgICB0byBiZSBpbnN0YWxsZWQgaWYgaXQgZG9lc24ndCBleGlzdC4gLS0+CiAgICAgICAgIDx1c2VzLWxpYnJhcnkgYW5kcm9pZDpuYW1lPSJjb20uZXhhbXBsZS53aWxsLm5ldmVyLmV4aXN0IiBhbmRyb2lkOnJlcXVpcmVkPSJmYWxzZSIgLz4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQXBpRGVtb3MiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgpAQCAtMTkxLDExICsxOTIsMTEgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5SZW9yZGVyVHdvIiAvPgogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlb3JkZXJUaHJlZSIgLz4KICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5SZW9yZGVyRm91ciIgLz4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5TZXRXYWxscGFwZXJBY3Rpdml0eSIKICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfc2V0d2FsbHBhcGVyIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgpAQCAtMjE3LDE0ICsyMTgsMzAgQEAKIAogICAgICAgICA8c2VydmljZSBhbmRyb2lkOm5hbWU9Ii5hcHAuTG9jYWxTZXJ2aWNlIiAvPgogCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuTG9jYWxTZXJ2aWNlQ29udHJvbGxlciIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLkxvY2FsU2VydmljZUFjdGl2aXRpZXMkQ29udHJvbGxlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X2xvY2FsX3NlcnZpY2VfY29udHJvbGxlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhdW5jaE1vZGU9InNpbmdsZVRvcCI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+CiAKLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5Mb2NhbFNlcnZpY2VCaW5kaW5nIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X2xvY2FsX3NlcnZpY2VfYmluZGluZyI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuTG9jYWxTZXJ2aWNlQWN0aXZpdGllcyRCaW5kaW5nIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfbG9jYWxfc2VydmljZV9iaW5kaW5nIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworPCEtLSBCRUdJTl9JTkNMVURFKHJlbW90ZV9zZXJ2aWNlX2RlY2xhcmF0aW9uKSAtLT4KKyAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSIuYXBwLk1lc3NlbmdlclNlcnZpY2UiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpwcm9jZXNzPSI6cmVtb3RlIiAvPgorPCEtLSBFTkRfSU5DTFVERShyZW1vdGVfc2VydmljZV9kZWNsYXJhdGlvbikgLS0+CisKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5NZXNzZW5nZXJTZXJ2aWNlQWN0aXZpdGllcyRCaW5kaW5nIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfbWVzc2VuZ2VyX3NlcnZpY2VfYmluZGluZyI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CkBAIC0yNDMsMTQgKzI2MCwxNyBAQAogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L3NlcnZpY2U+CiAKLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5SZW1vdGVTZXJ2aWNlQ29udHJvbGxlciIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9yZW1vdGVfc2VydmljZV9jb250cm9sbGVyIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5SZW1vdGVTZXJ2aWNlJENvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9yZW1vdGVfc2VydmljZV9jb250cm9sbGVyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF1bmNoTW9kZT0ic2luZ2xlVG9wIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlbW90ZVNlcnZpY2VCaW5kaW5nIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3JlbW90ZV9zZXJ2aWNlX2JpbmRpbmciPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlbW90ZVNlcnZpY2UkQmluZGluZyIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3JlbW90ZV9zZXJ2aWNlX2JpbmRpbmciPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgpAQCAtMjU5LDcgKzI3OSw5IEBACiAKICAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSIuYXBwLlNlcnZpY2VTdGFydEFyZ3VtZW50cyIgLz4KIAotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlciI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuU2VydmljZVN0YXJ0QXJndW1lbnRzJENvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF1bmNoTW9kZT0ic2luZ2xlVG9wIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KQEAgLTI2Nyw4ICsyODksMTAgQEAKICAgICAgICAgPC9hY3Rpdml0eT4KIAogICAgICAgICA8c2VydmljZSBhbmRyb2lkOm5hbWU9Ii5hcHAuRm9yZWdyb3VuZFNlcnZpY2UiIC8+Ci0gICAgICAgIAotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLkZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlciIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlciI+CisKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5Gb3JlZ3JvdW5kU2VydmljZSRDb250cm9sbGVyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfZm9yZWdyb3VuZF9zZXJ2aWNlX2NvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXVuY2hNb2RlPSJzaW5nbGVUb3AiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgpAQCAtMzkyLDExICs0MTYsMTEgQEAKICAgICAgICAgICAgIDwhLS0gd2hlbmV2ZXIgdGhlIHVzZXIgaW52b2tlcyBzZWFyY2ggd2hpbGUgaW4gdGhpcyBBY3Rpdml0eS4gLS0+CiAgICAgICAgICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuZGVmYXVsdF9zZWFyY2hhYmxlIgogICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnZhbHVlPSIuYXBwLlNlYXJjaFF1ZXJ5UmVzdWx0cyIgLz4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8IS0tIFRoaXMgaXMgbm90IHRoZSB0eXBpY2FsIHdheSB0byBkZWZpbmUgYW5kcm9pZC5hcHAuZGVmYXVsdF9zZWFyY2hhYmxlLCAtLT4KICAgICAgICAgICAgIDwhLS0gYW5kIHdlIHNob3cgaXQgaGVyZSBvbmx5IGJlY2F1c2Ugd2Ugd2lzaCB0byBjb25maW5lIHRoZSBzZWFyY2ggZGVtbyB0byB0aGlzIC0tPgogICAgICAgICAgICAgPCEtLSBzZWN0aW9uIG9mIHRoZSBBcGlEZW1vcyBhcHBsaWNhdGlvbi4gLS0+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPCEtLSBGb3IgdHlwaWNhbCBhcHBsaWNhdGlvbnMsIGl0J3Mgc2ltcGxlciB0byBkZWZpbmUgYW5kcm9pZC5hcHAuZGVmYXVsdF9zZWFyY2hhYmxlIC0tPgogICAgICAgICAgICAgPCEtLSBqdXN0IG9uY2UsIGF0IHRoZSBhcHBsaWNhdGlvbiBsZXZlbCwgd2hlcmUgaXQgc2VydmVzIGFzIGEgZGVmYXVsdCBmb3IgYWxsIG9mIC0tPgogICAgICAgICAgICAgPCEtLSB0aGUgQWN0aXZpdGllcyBpbiB5b3VyIHBhY2thZ2UuIC0tPgpAQCAtNDExLDI0ICs0MzUsMjQgQEAKICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPCEtLSBUaGlzIGludGVudC1maWx0ZXIgaWRlbnRpZmllcyB0aGlzIGFjdGl2aXR5IGFzICJzZWFyY2hhYmxlIiAtLT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlNFQVJDSCIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5ERUZBVUxUIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwhLS0gVGhpcyBtZXRhZGF0YSBlbnRyeSBwcm92aWRlcyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3Igc2VhcmNoZXMgLS0+CiAgICAgICAgICAgICA8IS0tIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhpcyBhY3Rpdml0eS4gLS0+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPG1ldGEtZGF0YSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYXBwLnNlYXJjaGFibGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6cmVzb3VyY2U9IkB4bWwvc2VhcmNoYWJsZSIgLz4KICAgICAgICAgPC9hY3Rpdml0eT4KIAogICAgICAgICA8IS0tIFRoaXMgcHJvdmlkZXIgZGVjbGFyYXRpb24gaW5mb3JtcyB0aGUgU2VhcmNoIE1hbmFnZXIgdGhhdCB5b3UgaGF2ZSBhIHByb3ZpZGVyIG9mIC0tPgogICAgICAgICA8IS0tIFNlYXJjaCBzdWdnZXN0aW9ucywgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBhY2Nlc3MgaXQuIC0tPgotICAgICAgICAKKwogICAgICAgICA8cHJvdmlkZXIgYW5kcm9pZDpuYW1lPSIuYXBwLlNlYXJjaFN1Z2dlc3Rpb25TYW1wbGVQcm92aWRlciIKICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6YXV0aG9yaXRpZXM9ImNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5TdWdnZXN0aW9uUHJvdmlkZXIiIC8+CiAKQEAgLTQzNiwxMiArNDYwLDEyIEBACiAKICAgICAgICAgPCEtLSBUaGlzIHNlY3Rpb24gb2Ygc2FtcGxlIGNvZGUgc2hvd3MgaG93IHlvdXIgYXBwbGljYXRpb24gY2FuIGFkZCBzaG9ydGN1dHMgdG8gLS0+CiAgICAgICAgIDwhLS0gdGhlIGxhdW5jaGVyIChob21lIHNjcmVlbikuICBTaG9ydGN1dHMgaGF2ZSBhIHRocmVlIHN0ZXAgbGlmZSBjeWNsZS4gLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0gMS4gIFlvdXIgYXBwbGljYXRpb24gb2ZmZXJzIHRvIHByb3ZpZGUgc2hvcnRjdXRzIHRvIHRoZSBsYXVuY2hlci4gIFdoZW4gLS0+CiAgICAgICAgIDwhLS0gICAgIHRoZSB1c2VyIGluc3RhbGxzIGEgc2hvcnRjdXQsIGFuIGFjdGl2aXR5IHdpdGhpbiB5b3VyIGFwcGxpY2F0aW9uIC0tPgogICAgICAgICA8IS0tICAgICBnZW5lcmF0ZXMgdGhlIGFjdHVhbCBzaG9ydGN1dCBhbmQgcmV0dXJucyBpdCB0byB0aGUgbGF1bmNoZXIsIHdoZXJlIGl0IC0tPgogICAgICAgICA8IS0tICAgICBpcyBzaG93biB0byB0aGUgdXNlciBhcyBhbiBpY29uLiAtLT4KLSAgICAgICAgCisKICAgICAgICAgPCEtLSAyLiAgQW55IHRpbWUgdGhlIHVzZXIgY2xpY2tzIG9uIGFuIGluc3RhbGxlZCBzaG9ydGN1dCwgYW4gaW50ZW50IGlzIHNlbnQuIC0tPgogICAgICAgICA8IS0tICAgICBUeXBpY2FsbHkgdGhpcyB3b3VsZCB0aGVuIGJlIGhhbmRsZWQgYXMgbmVjZXNzYXJ5IGJ5IGFuIGFjdGl2aXR5IHdpdGhpbiAtLT4KICAgICAgICAgPCEtLSAgICAgeW91ciBhcHBsaWNhdGlvbi4gLS0+CkBAIC01MzMsNiArNTU3LDI4IEBACiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+CiAKKyAgICAgICAgPCEtLSBEZXZpY2UgQWRtaW4gU2FtcGxlcyAtLT4KKworICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLkRldmljZUFkbWluU2FtcGxlJENvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9zYW1wbGVfZGV2aWNlX2FkbWluIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworPCEtLSBCRUdJTl9JTkNMVURFKGRldmljZV9hZG1pbl9kZWNsYXJhdGlvbikgLS0+CisgICAgICAgIDxyZWNlaXZlciBhbmRyb2lkOm5hbWU9Ii5hcHAuRGV2aWNlQWRtaW5TYW1wbGUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9zYW1wbGVfZGV2aWNlX2FkbWluIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZGVzY3JpcHRpb249IkBzdHJpbmcvc2FtcGxlX2RldmljZV9hZG1pbl9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb249ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX0RFVklDRV9BRE1JTiI+CisgICAgICAgICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuZGV2aWNlX2FkbWluIgorICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnJlc291cmNlPSJAeG1sL2RldmljZV9hZG1pbl9zYW1wbGUiIC8+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuYWN0aW9uLkRFVklDRV9BRE1JTl9FTkFCTEVEIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L3JlY2VpdmVyPgorPCEtLSBFTkRfSU5DTFVERShkZXZpY2VfYWRtaW5fZGVjbGFyYXRpb24pIC0tPgogCiAgICAgICAgIDwhLS0gVm9pY2UgUmVjb2duaXRpb24gU2FtcGxlcyAtLT4KIApAQCAtNTU2LDYgKzYwMiwxNCBAQAogICAgICAgICA8IS0tICAgICAgICBDT05URU5UIFBBQ0tBR0UgU0FNUExFUyAgICAgICAgLS0+CiAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIAorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuY29udGVudC5FeHRlcm5hbFN0b3JhZ2UiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfZXh0ZXJuYWxfc3RvcmFnZSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuRU1CRUQiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmNvbnRlbnQuU3R5bGVkVGV4dCIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9zdHlsZWRfdGV4dCI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CkBAIC0xMzk2LDYgKzE0NTAsMzcgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuQ29tcHJlc3NlZFRleHR1cmVBY3Rpdml0eSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcy9PcGVuR0wgRVMvQ29tcHJlc3NlZCBUZXh0dXJlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb25maWdDaGFuZ2VzPSJvcmllbnRhdGlvbnxrZXlib2FyZEhpZGRlbiI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLkN1YmVNYXBBY3Rpdml0eSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcy9PcGVuR0wgRVMvQ3ViZSBNYXAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTm9UaXRsZUJhciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtleWJvYXJkSGlkZGVuIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5ncmFwaGljcy5GcmFtZUJ1ZmZlck9iamVjdEFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9GcmFtZSBCdWZmZXIgT2JqZWN0IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb25maWdDaGFuZ2VzPSJvcmllbnRhdGlvbnxrZXlib2FyZEhpZGRlbiI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLkdMU3VyZmFjZVZpZXdBY3Rpdml0eSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcy9PcGVuR0wgRVMvR0xTdXJmYWNlVmlldyIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5Ob1RpdGxlQmFyIgpAQCAtMTQwNiw2ICsxNDkxLDI1IEBACiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+CiAKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLkdMRVMyMEFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9PcGVuR0wgRVMgMi4wIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb25maWdDaGFuZ2VzPSJvcmllbnRhdGlvbnxrZXlib2FyZEhpZGRlbiI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLk1hdHJpeFBhbGV0dGVBY3Rpdml0eSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcy9PcGVuR0wgRVMvTWF0cml4IFBhbGV0dGUgU2tpbm5pbmciCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb25maWdDaGFuZ2VzPSJvcmllbnRhdGlvbnxrZXlib2FyZEhpZGRlbiI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLlRyYW5zbHVjZW50R0xTdXJmYWNlVmlld0FjdGl2aXR5IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9UcmFuc2x1Y2VudCBHTFN1cmZhY2VWaWV3IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBzdHlsZS9UaGVtZS5UcmFuc2x1Y2VudCIKQEAgLTE0MTUsNyArMTUxOSw3IEBACiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5ncmFwaGljcy5UcmlhbmdsZUFjdGl2aXR5IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9UZXh0dXJlZCBUcmlhbmdsZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5Ob1RpdGxlQmFyIgpAQCAtMTQyNSw3ICsxNTI5LDcgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLnNwcml0ZXRleHQuU3ByaXRlVGV4dEFjdGl2aXR5IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9TcHJpdGUgVGV4dCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5Ob1RpdGxlQmFyIgpAQCAtMTQzNSw3ICsxNTM5LDcgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLlRvdWNoUm90YXRlQWN0aXZpdHkiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvT3BlbkdMIEVTL1RvdWNoIFJvdGF0ZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5Ob1RpdGxlQmFyIgpAQCAtMTQ0NSw3ICsxNTQ5LDcgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLlBvbHlUb1BvbHkiIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL1BvbHlUb1BvbHkiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgpAQCAtMTY3OSw3ICsxNzgzLDcgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLlB1cmdlYWJsZUJpdG1hcCIgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvUHVyZ2VhYmxlQml0bWFwL05vblB1cmdlYWJsZSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CkBAIC0xNzczLDcgKzE4NzcsNyBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIudGV4dC5Mb2dUZXh0Qm94MSIgYW5kcm9pZDpsYWJlbD0iVGV4dC9Mb2dUZXh0Qm94Ij4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2RyYXdhYmxlLWhkcGkvcm9ib3QucG5nIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvZHJhd2FibGUtaGRwaS9yb2JvdC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNlNGZkMjEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvZHJhd2FibGUtaGRwaS9yb2JvdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWN0aXZpdHlfYW5pbWF0aW9uLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hY3Rpdml0eV9hbmltYXRpb24ueG1sCmluZGV4IDQ0NmY3MzUuLjI0MzJjOTAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hY3Rpdml0eV9hbmltYXRpb24ueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hY3Rpdml0eV9hbmltYXRpb24ueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hY3Rpdml0eV9hbmltYXRpb25fbXNnIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxhcm1fY29udHJvbGxlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxhcm1fY29udHJvbGxlci54bWwKaW5kZXggOWNlNGQ3Mi4uOTdhZDlmNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsYXJtX2NvbnRyb2xsZXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGFybV9jb250cm9sbGVyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxhcm1fY29udHJvbGxlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsYXJtX3NlcnZpY2UueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsYXJtX3NlcnZpY2UueG1sCmluZGV4IGUyNDM2OWMuLmU3ZGFjOWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGFybV9zZXJ2aWNlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxhcm1fc2VydmljZS54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsYXJtX3NlcnZpY2UiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGVydF9kaWFsb2cueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZy54bWwKaW5kZXggNzQxYmUzMy4uMDA5N2U3YSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZy54bWwKQEAgLTE4LDM0ICsxOCwzNCBAQAogICAgICBTZWUgY29ycmVzcG9uZGluZyBKYXZhIGNvZGUgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcC5BbGVydERpYWxvZ1NhbXBsZXMuamF2YS4gLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9zY3JlZW4iCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3R3b19idXR0b25zIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsZXJ0X2RpYWxvZ190d29fYnV0dG9ucyIvPgogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvdHdvX2J1dHRvbnMyIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsZXJ0X2RpYWxvZ190d29fYnV0dG9uczIiLz4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3NlbGVjdF9idXR0b24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxlcnRfZGlhbG9nX3NlbGVjdF9idXR0b24iLz4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3Byb2dyZXNzX2J1dHRvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbGVydF9kaWFsb2dfcHJvZ3Jlc3NfYnV0dG9uIi8+CiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9yYWRpb19idXR0b24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxlcnRfZGlhbG9nX3NpbmdsZV9jaG9pY2UiLz4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NoZWNrYm94X2J1dHRvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbGVydF9kaWFsb2dfbXVsdGlfY2hvaWNlIi8+CiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9jaGVja2JveF9idXR0b24yIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsZXJ0X2RpYWxvZ19tdWx0aV9jaG9pY2VfY3Vyc29yIi8+CiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC90ZXh0X2VudHJ5X2J1dHRvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbGVydF9kaWFsb2dfdGV4dF9lbnRyeSIvPgogICAgIDwvTGluZWFyTGF5b3V0PgogPC9TY3JvbGxWaWV3PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZ190ZXh0X2VudHJ5LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGVydF9kaWFsb2dfdGV4dF9lbnRyeS54bWwKaW5kZXggYWRlYzMwNS4uMWY0ZDA5MyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZ190ZXh0X2VudHJ5LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxlcnRfZGlhbG9nX3RleHRfZW50cnkueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCkBAIC0zMiw3ICszMiw3IEBACiAgICAgPEVkaXRUZXh0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdXNlcm5hbWVfZWRpdCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luTGVmdD0iMjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSIyMGRpcCIKICAgICAgICAgYW5kcm9pZDpzY3JvbGxIb3Jpem9udGFsbHk9InRydWUiCkBAIC01NCw3ICs1NCw3IEBACiAgICAgPEVkaXRUZXh0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGFzc3dvcmRfZWRpdCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luTGVmdD0iMjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSIyMGRpcCIKICAgICAgICAgYW5kcm9pZDpzY3JvbGxIb3Jpem9udGFsbHk9InRydWUiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8xLnhtbAppbmRleCBjZDI1ZTA0Li44MzgwZmM0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMS54bWwKQEAgLTE3LDE4ICsxNywxOCBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgIAogICAgIDxUZXh0VmlldyAKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxMGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FuaW1hdGlvbl8xX2luc3RydWN0aW9ucyIKICAgICAvPgogICAgIAogICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3B3IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMi54bWwKaW5kZXggOWYzNzkyMC4uZjcyNzUzZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzIueG1sCkBAIC0xNywzNCArMTcsMzQgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8Vmlld0ZsaXBwZXIgYW5kcm9pZDppZD0iQCtpZC9mbGlwcGVyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmZsaXBJbnRlcnZhbD0iMjAwMCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjIwZGlwIiA+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMjZzcCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbmltYXRpb25fMl90ZXh0XzEiLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIyNnNwIgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FuaW1hdGlvbl8yX3RleHRfMiIvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjI2c3AiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYW5pbWF0aW9uXzJfdGV4dF8zIi8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMjZzcCIKQEAgLTUyLDE0ICs1MiwxNCBAQAogICAgIDwvVmlld0ZsaXBwZXI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSI1ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYW5pbWF0aW9uXzJfaW5zdHJ1Y3Rpb25zIgogICAgIC8+CiAKICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3NwaW5uZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMy54bWwKaW5kZXggNGQxNDc0Yy4uMGRjZjNmYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzMueG1sCkBAIC0xNyw3ICsxNyw3IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6Y2xpcFRvUGFkZGluZz0iZmFsc2UiPgogCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbmltYXRpb25fM190ZXh0Ii8+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIyMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSI1ZGlwIgpAQCAtMzcsNyArMzcsNyBAQAogCiAgICAgPFNwaW5uZXIKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zcGlubmVyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25zX21haW5fc2NyZWVuLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25zX21haW5fc2NyZWVuLnhtbAppbmRleCBlZTllMzM5Li44OGFiZGQwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uc19tYWluX3NjcmVlbi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbnNfbWFpbl9zY3JlZW4ueG1sCkBAIC0xNiwyMSArMTYsMjEgQEAKIAogPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL2NvbnRhaW5lciIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8TGlzdFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKICAgICAgICAgYW5kcm9pZDpwZXJzaXN0ZW50RHJhd2luZ0NhY2hlPSJhbmltYXRpb258c2Nyb2xsaW5nIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dEFuaW1hdGlvbj0iQGFuaW0vbGF5b3V0X2JvdHRvbV90b190b3Bfc2xpZGUiIC8+CiAKICAgICA8SW1hZ2VWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGljdHVyZSIKICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImZpdENlbnRlciIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIiAvPgogCiA8L0ZyYW1lTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FwcHdpZGdldF9jb25maWd1cmUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FwcHdpZGdldF9jb25maWd1cmUueG1sCmluZGV4IGMwNDFhZDYuLmQwMThhN2IgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hcHB3aWRnZXRfY29uZmlndXJlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXBwd2lkZ2V0X2NvbmZpZ3VyZS54bWwKQEAgLTE1LDIwICsxNSwyMCBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgID4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXBwd2lkZ2V0X2NvbmZpZ3VyZV9pbnN0cnVjdGlvbnMiCiAgICAgLz4KIAogICAgIDxFZGl0VGV4dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FwcHdpZGdldF9wcmVmaXgiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfMS54bWwKaW5kZXggM2M0MTkyNi4uOTVhYjFmZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzEueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxUZXh0VmlldwpAQCAtMjYsNyArMjYsNyBAQAogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hdXRvY29tcGxldGVfMV9jb3VudHJ5IiAvPgogCiAgICAgICAgIDxBdXRvQ29tcGxldGVUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2VkaXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KIAogICAgIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfMi54bWwKaW5kZXggNmQ0ZWU3NS4uNDBiZDM0YyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzIueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJib3R0b20iPgogCiAgICAgPEJ1dHRvbgpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hdXRvY29tcGxldGVfMl9jb3VudHJ5IiAvPgogCiAgICAgICAgIDxBdXRvQ29tcGxldGVUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2VkaXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KIAogICAgIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfMy54bWwKaW5kZXggZTk3NTM1YS4uYjFlMzQ0ZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzMueG1sCkBAIC0xNSwxMiArMTUsMTIgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPEJ1dHRvbgpAQCAtMTA1LDcgKzEwNSw3IEBACiAKICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgICAgIDxUZXh0VmlldwpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2F1dG9jb21wbGV0ZV8zX2NvdW50cnkiIC8+CiAKICAgICAgICAgICAgIDxBdXRvQ29tcGxldGVUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2VkaXQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICAgICAgPFRleHRWaWV3CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXV0b2NvbXBsZXRlXzNfY291bnRyeSIgLz4KIAogICAgICAgICAgICAgPEF1dG9Db21wbGV0ZVRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdDIiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV80LnhtbAppbmRleCA5N2U1ZWI5Li44OGJlODcwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNC54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3CkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtMzYsNyArMzYsNyBAQAogCiAgICAgICAgIDxBdXRvQ29tcGxldGVUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2VkaXQiCiAgICAgICAgICAgICBhbmRyb2lkOmNvbXBsZXRpb25UaHJlc2hvbGQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KIAogICAgIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV81LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNS54bWwKaW5kZXggMzRmNjhjNi4uY2RjZTU1ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV81LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzUueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxUZXh0VmlldwpAQCAtMjYsNyArMjYsNyBAQAogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgPEF1dG9Db21wbGV0ZVRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdCIKICAgICAgICAgICAgIGFuZHJvaWQ6Y29tcGxldGlvblRocmVzaG9sZD0iMSIKICAgICAgICAgICAgIGFuZHJvaWQ6Y29tcGxldGlvbkhpbnQ9IkBzdHJpbmcvYXV0b2NvbXBsZXRlXzVfaGludCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzYueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV82LnhtbAppbmRleCAyNGZiZGExLi5jODA3MDZiIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzYueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNi54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3CkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2F1dG9jb21wbGV0ZV83X2NvdW50cnkiIC8+CiAKICAgICAgICAgPE11bHRpQXV0b0NvbXBsZXRlVGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9lZGl0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8xLnhtbAppbmRleCAwZjFjOWY2Li41NTkxMmVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzEueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMi54bWwKaW5kZXggOGUzMjNiNi4uZDZiZGM5OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8yLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzMueG1sCmluZGV4IGMyNTE3MDMuLjBmYzEwYWYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMy54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxLjAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCI+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV80LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV80LnhtbAppbmRleCA1ZmFhOWRhLi5jNmQwNTVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzQueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNi54bWwKaW5kZXggNTQxOGFmYi4uODhlMTQwNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzYueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV82LnhtbApAQCAtMTUsMTIgKzE1LDEyIEBACiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9hbmNob3IiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjIwc3AiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYXNlbGluZV82X211bHRpX2xpbmUiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV83LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV83LnhtbAppbmRleCAyZGM5NDM5Li41NWFiNTliIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzcueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hbmNob3IiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8xLnhtbAppbmRleCBiOTQwMjM5Li4xNjBjNzM4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMS54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzIueG1sCmluZGV4IDViYzgzNjEuLjRiYjc1YzIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8yLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMy54bWwKaW5kZXggYzAxYzk0Ny4uZWRhNDdhMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzMueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYnV0dG9uc18xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9idXR0b25zXzEueG1sCmluZGV4IGRjNjU3ZWYuLmMyNWMxYjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9idXR0b25zXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9idXR0b25zXzEueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDwhLS0gTG90cyBvZiBidXR0b25zID0gbmVlZCBzY3JvbGxpbmcgLS0+CiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jaHJvbm9tZXRlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY2hyb25vbWV0ZXIueG1sCmluZGV4IGIzOGMyYjYuLjYzZGM2N2YgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jaHJvbm9tZXRlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Nocm9ub21ldGVyLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxDaHJvbm9tZXRlciBhbmRyb2lkOmlkPSJAK2lkL2Nocm9ub21ldGVyIgogICAgICAgICBhbmRyb2lkOmZvcm1hdD0iQHN0cmluZy9jaHJvbm9tZXRlcl9pbml0aWFsX2Zvcm1hdCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jb250YWN0c19maWx0ZXIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRhY3RzX2ZpbHRlci54bWwKaW5kZXggZThkMTYxNS4uYzEyMDE1MSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRhY3RzX2ZpbHRlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRhY3RzX2ZpbHRlci54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbnRhY3RzX2ZpbHRlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRyb2xzXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRyb2xzXzEueG1sCmluZGV4IDI5NjU4ZDcuLjFhYWVmM2QgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jb250cm9sc18xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY29udHJvbHNfMS54bWwKQEAgLTE2LDEyICsxNiwxMiBAQAogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgCiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9idXR0b24iCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogICAgIAogICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9lZGl0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAgICAgICAgICAgICAKICAgICAgICAgPENoZWNrQm94IGFuZHJvaWQ6aWQ9IkAraWQvY2hlY2sxIgpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbnRyb2xzXzFfY2hlY2tib3hfMiIgLz4KICAgICAKICAgICAgICAgPFJhZGlvR3JvdXAKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAKQEAgLTc3LDEzICs3NywxMyBAQAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAgICAgICAgICAgICAgCiAgICAgICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvc3Bpbm5lcjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmRyYXdTZWxlY3Rvck9uVG9wPSJ0cnVlIgogICAgICAgICAvPgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSI1ZGlwIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RleHRDb2xvclByaW1hcnkiCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIC8+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjVkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGV4dENvbG9yU2Vjb25kYXJ5IgpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIC8+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjVkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGV4dENvbG9yVGVydGlhcnkiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX2RpYWxvZ19hY3Rpdml0eS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX2RpYWxvZ19hY3Rpdml0eS54bWwKaW5kZXggZDcwNjAxOC4uOTcxYWMwZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV9kaWFsb2dfYWN0aXZpdHkueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fZGlhbG9nX2FjdGl2aXR5LnhtbApAQCAtMTksNiArMTksNiBAQAogCiA8IS0tIFRoaXMgc2NyZWVuIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHRleHQgZmllbGQgdGhhdCBkaXNwbGF5cyBzb21lIHRleHQuIC0tPgogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxjZW50ZXJfaG9yaXpvbnRhbCIKICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY3VzdG9tX2RpYWxvZ19hY3Rpdml0eV90ZXh0Ii8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX3RpdGxlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sCmluZGV4IGRiZThjYjYuLjhjZGM1ODQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6aWQ9IkAraWQvc2NyZWVuIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+Ci0gICAgPExpbmVhckxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmJhc2VsaW5lQWxpZ25lZD0iZmFsc2UiPgogICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9sZWZ0X3RleHRfZWRpdCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jdXN0b21fdGl0bGVfbGVmdF9idXR0b24iLz4KICAgICA8L0xpbmVhckxheW91dD4KLSAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgPExpbmVhckxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6YmFzZWxpbmVBbGlnbmVkPSJmYWxzZSI+CiAgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3JpZ2h0X3RleHRfZWRpdCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGVfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX3RpdGxlXzEueG1sCmluZGV4IGY3OTQzMzIuLjgxMmZiYjAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGVfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZV8xLnhtbApAQCAtMTgsNyArMTgsNyBAQAogICAgICBTZWUgY29ycmVzcG9uZGluZyBKYXZhIGNvZGUgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcC5DdXN0b21UaXRsZS5qYXZhLiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9zY3JlZW4iCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9sZWZ0X3RleHQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX3ZpZXdfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX3ZpZXdfMS54bWwKaW5kZXggY2FjOTFhZC4uY2I4ZTBmNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV92aWV3XzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdmlld18xLnhtbApAQCAtMTksMjQgKzE5LDI0IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgeG1sbnM6YXBwPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2NvbS5leGFtcGxlLmFuZHJvaWQuYXBpcyIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgIAogICAgIDxjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMudmlldy5MYWJlbFZpZXcKICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlZCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCiAgICAgICAgICAgICBhcHA6dGV4dD0iUmVkIi8+CiAgICAgCiAgICAgPGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy52aWV3LkxhYmVsVmlldwogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCiAgICAgICAgICAgICBhcHA6dGV4dD0iQmx1ZSIgYXBwOnRleHRTaXplPSIyMGRwIi8+CiAgICAgCiAgICAgPGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy52aWV3LkxhYmVsVmlldwogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZ3JlZW4iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAogICAgICAgICAgICAgYXBwOnRleHQ9IkdyZWVuIiBhcHA6dGV4dENvbG9yPSIjZmZmZmZmZmYiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kYXRlX3dpZGdldHNfZXhhbXBsZV8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kYXRlX3dpZGdldHNfZXhhbXBsZV8yLnhtbAppbmRleCA1MGIxODJkLi4wYzk5NTIyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGF0ZV93aWRnZXRzX2V4YW1wbGVfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2RhdGVfd2lkZ2V0c19leGFtcGxlXzIueG1sCkBAIC0yMiw3ICsyMiw3IEBACiAKICAgICA8VGltZVBpY2tlciBhbmRyb2lkOmlkPSJAK2lkL3RpbWVQaWNrZXIiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiLz4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZGF0ZURpc3BsYXkiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2RldmljZV9hZG1pbl9zYW1wbGUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2RldmljZV9hZG1pbl9zYW1wbGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDRkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGV2aWNlX2FkbWluX3NhbXBsZS54bWwKQEAgLTAsMCArMSwxMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8IS0tIERlbW9uc3RyYXRlcyBpbXBsZW1lbnRhdGlvbiBvZiBhIERldmljZUFkbWluLiAtLT4KKworPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKKyAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKworICAgIDxUZXh0VmlldworICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zYW1wbGVfZGV2aWNlX2FkbWluX3N1bW1hcnkiLz4KKworCTxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisJICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworCSAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZW5hYmxlIgorCSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCSAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2VuYWJsZV9hZG1pbiI+CisJICAgICAgICA8cmVxdWVzdEZvY3VzIC8+CisJICAgIDwvQnV0dG9uPgorCQorCSAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZGlzYWJsZSIKKwkgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9kaXNhYmxlX2FkbWluIj4KKwkgICAgPC9CdXR0b24+CisJICAgIAorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIiBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCisJICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvcGFzc3dvcmRfcXVhbGl0eSIKKwkgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKwkgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9InRydWUiCisJICAgICAgICBhbmRyb2lkOnByb21wdD0iQHN0cmluZy9wYXNzd29yZF9xdWFsaXR5Ij4KKwkgICAgPC9TcGlubmVyPgorICAgIAorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9wYXNzd29yZF9sZW5ndGgiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmhpbnQ9IkBzdHJpbmcvcGFzc3dvcmRfbGVuZ3RoX2hpbnQiCisgICAgICAgICAgICBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyIj4KKyAgICAgICAgPC9FZGl0VGV4dD4KKyAgICAgICAgICAgIAorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3NldF9wYXNzd29yZCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorICAgICAgICBhbmRyb2lkX2xheW91dF9ncmF2aXR5PSJlYXN0fGNlbnRlcl92ZXJ0aWNhbCIKKyAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NldF9wYXNzd29yZCI+CisgICAgPC9CdXR0b24+CisgICAgICAgIAorICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9wYXNzd29yZCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICAgICAgICAgIGFuZHJvaWQ6aGludD0iQHN0cmluZy9wYXNzd29yZF9oaW50IgorICAgICAgICAgICAgYW5kcm9pZDpmcmVlemVzVGV4dD0idHJ1ZSI+CisgICAgICAgIDwvRWRpdFRleHQ+CisgICAgICAgICAgICAKKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3Jlc2V0X3Bhc3N3b3JkIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlc2V0X3Bhc3N3b3JkIj4KKyAgICAgICAgPC9CdXR0b24+CisgICAgICAgIAorICAgIDwvTGluZWFyTGF5b3V0PgorICAgICAgICAKKyAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvbWF4X2ZhaWxlZF9wdyIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6aGludD0iQHN0cmluZy9tYXhfZmFpbGVkX3B3X2hpbnQiCisgICAgICAgICAgICBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyIj4KKyAgICAgICAgPC9FZGl0VGV4dD4KKyAgICAgICAgICAgIAorICAgIDwvTGluZWFyTGF5b3V0PgorICAgICAgICAKKyAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2ZvcmNlX2xvY2siCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZm9yY2VfbG9jayI+CisgICAgICAgIDwvQnV0dG9uPgorICAgICAgICAKKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3dpcGVfZGF0YSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy93aXBlX2RhdGEiPgorICAgICAgICA8L0J1dHRvbj4KKyAgICAgICAgCisgICAgPC9MaW5lYXJMYXlvdXQ+CisgICAgCis8L0xpbmVhckxheW91dD4KKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2RpYWxvZ19hY3Rpdml0eS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGlhbG9nX2FjdGl2aXR5LnhtbAppbmRleCA4OGM0YjA3Li4yYjI3ZDlhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGlhbG9nX2FjdGl2aXR5LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGlhbG9nX2FjdGl2aXR5LnhtbApAQCAtMTksNiArMTksNiBAQAogCiA8IS0tIFRoaXMgc2NyZWVuIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHRleHQgZmllbGQgdGhhdCBkaXNwbGF5cyBzb21lIHRleHQuIC0tPgogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxjZW50ZXJfaG9yaXpvbnRhbCIKICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZGlhbG9nX2FjdGl2aXR5X3RleHQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9leHRlcm5hbF9zdG9yYWdlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9leHRlcm5hbF9zdG9yYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODEwNWEzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2V4dGVybmFsX3N0b3JhZ2UueG1sCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOnNjcm9sbGJhcnM9Im5vbmUiPgorCisgICAgPExpbmVhckxheW91dAorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xheW91dCIKKyAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICA8L0xpbmVhckxheW91dD4KKzwvU2Nyb2xsVmlldz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9leHRlcm5hbF9zdG9yYWdlX2l0ZW0ueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2V4dGVybmFsX3N0b3JhZ2VfaXRlbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhMDU4YgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9leHRlcm5hbF9zdG9yYWdlX2l0ZW0ueG1sCkBAIC0wLDAgKzEsNTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbGFiZWwiIHN0eWxlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtSW52ZXJzZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKKyAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgorICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgIGFuZHJvaWQ6Y29sb3I9Ij9hbmRyb2lkOmF0dHIvdGV4dENvbG9yUHJpbWFyeUludmVyc2UiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzg4OCIgLz4KKyAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9wYXRoIiBzdHlsZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZVNtYWxsIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCisgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIgLz4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPFZpZXcKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCisgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiAvPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvY3JlYXRlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NyZWF0ZSIgLz4KKyAgICAgICAgPFZpZXcKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCisgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiAvPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZGVsZXRlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RlbGV0ZSIgLz4KKyAgICAgICAgPFZpZXcKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCisgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMS54bWwKaW5kZXggMTJhZjBhOS4uOTZhYjQ2NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18xLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90eHRTdGF0dXMiCkBAIC0yNywxMiArMjcsMTIgQEAKICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9yc3NMaXN0VmlldyIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjNzcwMENDMDAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIC8+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIC8+CiAKICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcnNzV2ViVmlldyIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjNzdDQzAwMDAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNTBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9ImZhbHNlIiAvPgogCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18yLnhtbAppbmRleCA2MzUxZGUyLi4wNzIwZDViIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzIueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgogCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2xlZnRCdXR0b24iCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMy54bWwKaW5kZXggZjA4YzNmOC4uZjg3MTY5NSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18zLnhtbApAQCAtMTgsOCArMTgsOCBAQAogICAgICBmb2N1cyBiZWhhdmlvciB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCB3aXRoIGRlZmF1bHQgZm9jdXMgY2FsY3VsYXRpb24gYWxnLi0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRpcCI+CiAKICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvdG9wIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcmVncm91bmRfc2VydmljZV9jb250cm9sbGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlci54bWwKaW5kZXggNDQ5MzIwMC4uMjBjZTEwMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcmVncm91bmRfc2VydmljZV9jb250cm9sbGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yZWdyb3VuZF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcndhcmRfdGFyZ2V0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb3J3YXJkX3RhcmdldC54bWwKaW5kZXggNmQ1NmFlMi4uYjEyMjk1NSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcndhcmRfdGFyZ2V0LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yd2FyZF90YXJnZXQueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZm9yd2FyZF90YXJnZXQiLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcndhcmRpbmcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcndhcmRpbmcueG1sCmluZGV4IGE4NjBkODguLjZmMGQ4YTggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb3J3YXJkaW5nLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yd2FyZGluZy54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2ZvcndhcmRpbmciLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nYWxsZXJ5XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMS54bWwKaW5kZXggNDBmMzQ0My4uOWI5YzRiYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMS54bWwKQEAgLTE1LDcgKzE1LDcgQEAKIC0tPgogCiA8R2FsbGVyeSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvZ2FsbGVyeSIKLQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIC8+CiAgICAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ2FsbGVyeV8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nYWxsZXJ5XzIueG1sCmluZGV4IDM3ZTVkMTEuLjExOTJiYjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nYWxsZXJ5XzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nYWxsZXJ5XzIueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxCdXR0b24KQEAgLTI4LDcgKzI4LDcgQEAKICAgICAvPgogCiAgICAgPEdhbGxlcnkgYW5kcm9pZDppZD0iQCtpZC9nYWxsZXJ5IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKICAgICAgICAgYW5kcm9pZDpzcGFjaW5nPSIxNmRwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dvb2dsZV9sb2dpbi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ29vZ2xlX2xvZ2luLnhtbAppbmRleCA5YWIyZjYyLi44ZjFmZDhhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ29vZ2xlX2xvZ2luLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ29vZ2xlX2xvZ2luLnhtbApAQCAtMTgsOCArMTgsOCBAQAogICAgICBTZWUgY29ycmVzcG9uZGluZyBKYXZhIGNvZGUgY29tLmFuZHJvaWQuc2RrLmNvbnRlbnQuU3R5bGVkVGV4dCAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8QnV0dG9uCkBAIC00NiwxNCArNDYsMTQgQEAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC91c2VybmFtZV9sYWJlbCIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZ29vZ2xlbG9naW5fdXNlciIvPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdXNlcm5hbWUiCiAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2dvb2dsZV9sb2dpbl91c2VybmFtZV90ZXh0Ii8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ncmlkXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dyaWRfMS54bWwKaW5kZXggY2E2MDMyMC4uNzY1ZDQ0YiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dyaWRfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dyaWRfMS54bWwKQEAgLTE1LDggKzE1LDggQEAKIC0tPgogCiA8R3JpZFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL215R3JpZCIKLQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRwIgogICAgIGFuZHJvaWQ6dmVydGljYWxTcGFjaW5nPSIxMGRwIgogICAgIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dyaWRfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8yLnhtbAppbmRleCA0NjQwYWI2Li5lYWVhNjU4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8yLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8R3JpZFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKICAgICBhbmRyb2lkOmlkPSJAK2lkL215R3JpZCIKLQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRwIgogICAgIGFuZHJvaWQ6dmVydGljYWxTcGFjaW5nPSIxMGRwIgogICAgIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2hlbGxvX3dvcmxkLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9oZWxsb193b3JsZC54bWwKaW5kZXggMzY0YTgzYS4uMDI4MjA3NiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2hlbGxvX3dvcmxkLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaGVsbG9fd29ybGQueG1sCkBAIC0yMCw2ICsyMCw2IEBACiA8IS0tIFRoaXMgc2NyZWVuIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHRleHQgZmllbGQgdGhhdAogICAgICBkaXNwbGF5cyBvdXIgIkhlbGxvLCBXb3JsZCEiIHRleHQuIC0tPgogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxjZW50ZXJfaG9yaXpvbnRhbCIKICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaGVsbG9fd29ybGQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV9idXR0b25fMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW1hZ2VfYnV0dG9uXzEueG1sCmluZGV4IDExNDE2M2UuLjQ2M2U3MDYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV9idXR0b25fMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX2J1dHRvbl8xLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPEltYWdlQnV0dG9uCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW1hZ2Vfc3dpdGNoZXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW1hZ2Vfc3dpdGNoZXJfMS54bWwKaW5kZXggZDljZDA4MC4uMGZkZjNmOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX3N3aXRjaGVyXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV9zd2l0Y2hlcl8xLnhtbApAQCAtMTUsMTkgKzE1LDE5IEBACiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4gCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPiAKICAgICAKICAgICA8SW1hZ2VTd2l0Y2hlciBhbmRyb2lkOmlkPSJAK2lkL3N3aXRjaGVyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRMZWZ0PSJ0cnVlIgogICAgIC8+CiAgICAgCiAgICAgPEdhbGxlcnkgYW5kcm9pZDppZD0iQCtpZC9nYWxsZXJ5IgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM1NTAwMDAwMCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjYwZHAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW1hZ2Vfdmlld18xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV92aWV3XzEueG1sCmluZGV4IDM2YjkyNmQuLmM1ZTIyNDAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV92aWV3XzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV92aWV3XzEueG1sCkBAIC0xNSwxOCArMTUsMTggQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIAogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICAgICAKICAgICAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGZvdXIgZXhhbXBsZXMgdXNlIGEgbGFyZ2UgaW1hZ2UgLS0+CiAgICAgICAgIDwhLS0gMS4gTm9uLXNjYWxlZCB2aWV3LCBmb3IgcmVmZXJlbmNlIC0tPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW1hZ2Vfdmlld19sYXJnZV9ub3JtYWwiLz4KQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICA8IS0tIDIuIExpbWl0IHRvIGF0IG1vc3QgNTB4NTAgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X2xhcmdlX2F0X21vc3QiLz4KQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgICAgIDwhLS0gMy4gTGltaXQgdG8gYXQgbW9zdCA3MHg3MCwgd2l0aCAxMCBwaXhlbHMgb2YgcGFkZGluZyBhbGwgYXJvdW5kIC0tPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW1hZ2Vfdmlld19sYXJnZV9hdF9tb3N0X3BhZGRlZCIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgIDwhLS0gNC4gTGltaXQgdG8gZXhhY3RseSA3MHg3MCwgd2l0aCAxMCBwaXhlbHMgb2YgcGFkZGluZyBhbGwgYXJvdW5kIC0tPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW1hZ2Vfdmlld19sYXJnZV9leGFjdGx5X3BhZGRlZCIvPgpAQCAtODMsNyArODMsNyBAQAogICAgICAgICA8IS0tIFJlcGVhdGluZyB0aGUgcHJldmlvdXMgZm91ciBleGFtcGxlcyB3aXRoIHNtYWxsIGltYWdlIC0tPgogICAgICAgICA8IS0tIDEuIE5vbi1zY2FsZWQgdmlldywgZm9yIHJlZmVyZW5jZSAtLT4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjEwZGlwIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2ltYWdlX3ZpZXdfc21hbGxfbm9ybWFsIi8+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgPCEtLSAyLiBMaW1pdCB0byBhdCBtb3N0IDUweDUwIC0tPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW1hZ2Vfdmlld19zbWFsbF9hdF9tb3N0Ii8+CkBAIC0xMTEsNyArMTExLDcgQEAKIAogICAgICAgIDwhLS0gMy4gTGltaXQgdG8gYXQgbW9zdCA3MHg3MCwgd2l0aCAxMCBwaXhlbHMgb2YgcGFkZGluZyBhbGwgYXJvdW5kIC0tPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW1hZ2Vfdmlld19zbWFsbF9hdF9tb3N0X3BhZGRlZCIvPgpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgPCEtLSA0LiBMaW1pdCB0byBleGFjdGx5IDcweDcwLCB3aXRoIDEwIHBpeGVscyBvZiBwYWRkaW5nIGFsbCBhcm91bmQgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X3NtYWxsX2V4YWN0bHlfcGFkZGVkIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZS54bWwKaW5kZXggMDFlYTA0YS4uM2MwZDkyYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2UueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8QnV0dG9uCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZ5IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2VfaW5mby54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9pbmZvLnhtbAppbmRleCA3MjNhNGRhLi5mZWYyNTU2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9pbmZvLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9pbmZvLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogCQk8SW1hZ2VWaWV3CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9wYW5lbC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9wYW5lbC54bWwKaW5kZXggMzEyMGU0ZS4uYmRkODA4ZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2VfcGFuZWwueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX3BhbmVsLnhtbApAQCAtMTUsMTMgKzE1LDEzIEBACiAtLT4KIAogPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxlL3RvYXN0X2ZyYW1lIj4KIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgICAgIDxJbWFnZVZpZXcKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX3ZpZXcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2Vfdmlldy54bWwKaW5kZXggYjI4NmU2ZS4uYjJkYWY0ZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2Vfdmlldy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2Vfdmlldy54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI0ZGlwIgogICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSI0ZGlwIgogICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW50ZW50cy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW50ZW50cy54bWwKaW5kZXggMDIzZTRlOC4uNTUzMTIzNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ludGVudHMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbnRlbnRzLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW50ZW50cyIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xhdW5jaGVyX3Nob3J0Y3V0cy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF1bmNoZXJfc2hvcnRjdXRzLnhtbAppbmRleCBjOGZiYjJhLi4xZGViYmQzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF1bmNoZXJfc2hvcnRjdXRzLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF1bmNoZXJfc2hvcnRjdXRzLnhtbApAQCAtMTcsMTMgKzE3LDEzIEBACiA8IS0tIFRoaXMgYWN0aXZpdHkgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgbGF1bmNoZXIgc2hvcnRjdXRzIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAKICAgICA8IS0tICBTZWN0aW9uOiBJbmZvcm1hdGlvbiAtLT4KICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbXNnX2xhdW5jaGVyX3Nob3J0Y3V0cyIgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMS54bWwKaW5kZXggMmIyNTQ4NS4uZDcwYTU4MyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMS54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxHcmlkVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvZ3JpZCIKICAgICBhbmRyb2lkOmxheW91dEFuaW1hdGlvbj0iQGFuaW0vbGF5b3V0X2dyaWRfZmFkZSIKIAotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRwIgogICAgIGFuZHJvaWQ6dmVydGljYWxTcGFjaW5nPSIxMGRwIgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzMueG1sCmluZGV4IDA1MWZhOGUuLjNkZGFhYjcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzMueG1sCkBAIC0xNiw2ICsxNiw2IEBACiAKIDxMaXN0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0QW5pbWF0aW9uPSJAYW5pbS9sYXlvdXRfYm90dG9tX3RvX3RvcF9zbGlkZSIgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNC54bWwKaW5kZXggNzNiOTliMC4uMGI3NDg5OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNC54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxHcmlkVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvZ3JpZCIKICAgICBhbmRyb2lkOmxheW91dEFuaW1hdGlvbj0iQGFuaW0vbGF5b3V0X3JhbmRvbV9mYWRlIgogCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZHAiCiAgICAgYW5kcm9pZDp2ZXJ0aWNhbFNwYWNpbmc9IjEwZHAiCiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNS54bWwKaW5kZXggNjAyZmIxOC4uZmYzNGI0MyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNS54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxHcmlkVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvZ3JpZCIKICAgICBhbmRyb2lkOmxheW91dEFuaW1hdGlvbj0iQGFuaW0vbGF5b3V0X2dyaWRfaW52ZXJzZV9mYWRlIgogCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZHAiCiAgICAgYW5kcm9pZDp2ZXJ0aWNhbFNwYWNpbmc9IjEwZHAiCiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzYueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNi54bWwKaW5kZXggMDI2Nzk3ZS4uZjZjZmFkOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNi54bWwKQEAgLTE3LDggKzE3LDggQEAKIDxHcmlkVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvZ3JpZCIKICAgICBhbmRyb2lkOmxheW91dEFuaW1hdGlvbj0iQGFuaW0vbGF5b3V0X3dhdmVfc2NhbGUiCiAKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6dmVydGljYWxTcGFjaW5nPSIxMGRwIgogCiAgICAgYW5kcm9pZDpob3Jpem9udGFsU3BhY2luZz0iMTBkcCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNy54bWwKaW5kZXggMzgyNjBjNy4uYjY3MmMzNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNy54bWwKQEAgLTE5LDggKzE5LDggQEAKICAgICBhbmRyb2lkOmFuaW1hdGlvbkNhY2hlPSJmYWxzZSIKICAgICBhbmRyb2lkOmNsaXBUb1BhZGRpbmc9ImZhbHNlIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTJkcCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6c3RyZXRjaENvbHVtbnM9IjEiPgogCiAgICAgPFRhYmxlUm93CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEueG1sCmluZGV4IGVmMDFjZWQuLmJlM2U3N2QgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEueG1sCkBAIC0xOSwyNyArMTksMjcgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JsdWUiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPCEtLSB2aWV3MSBnb2VzIG9uIHRvcCAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF8xX3RvcCIvPgogCiAgICAgPCEtLSB2aWV3MiBnb2VzIGluIHRoZSBtaWRkbGUgLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfMV9taWRkbGUiLz4KIAogICAgIDwhLS0gdmlldzMgZ29lcyBvbiB0aGUgYm90dG9tIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzFfYm90dG9tIi8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEwLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEwLnhtbAppbmRleCBlYjc5M2ZkLi40YzA0NDc0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8xMC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMTAueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKICAgICAgVGV4dFZpZXdzLCBFZGl0VGV4dHMsIGFuZCBCdXR0b25zLiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPCEtLSBUb3AgbGFiZWwvYnV0dG9uIHRleHQgZmllbGQuIC0tPgogCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmFkZFN0YXRlc0Zyb21DaGlsZHJlbj0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICBleGNlcHQgZm9yIHRoZSBsYWJlbC4pICAtLT4KIAogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDphZGRTdGF0ZXNGcm9tQ2hpbGRyZW49InRydWUiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8yLnhtbAppbmRleCAzY2FjY2NjLi42Y2NmZDc1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8yLnhtbApAQCAtMTksMjcgKzE5LDI3IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDwhLS0gdmlldzEgZ29lcyBvbiB0b3AgLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfMl90b3AiLz4KIAogICAgIDwhLS0gdmlldzIgZ29lcyBpbiB0aGUgbWlkZGxlIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzJfbWlkZGxlIi8+CiAKICAgICA8IS0tIHZpZXczIGdvZXMgb24gdGhlIGJvdHRvbSAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF8yX2JvdHRvbSIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzMueG1sCmluZGV4IDJiOWIzMjcuLjY4M2I3ZWIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzMueG1sCkBAIC0yMywyMCArMjMsMjAgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JsdWUiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSB2aWV3MSBnb2VzIG9uIHRvcCAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF8zX3RvcCIvPgogCiAgICAgPCEtLSB2aWV3MiBnb2VzIGluIHRoZSBtaWRkbGUgLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF8zX21pZGRsZSIvPgpAQCAtNDQsNyArNDQsNyBAQAogICAgIDwhLS0gdmlldzMgZ29lcyBvbiB0aGUgYm90dG9tIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzNfYm90dG9tIi8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNC54bWwKaW5kZXggMTM5ZmI1Ny4uM2JhMDI4MiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNC54bWwKQEAgLTIwLDMxICsyMCwzMSBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yZWQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZ3JlZW4iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS95ZWxsb3ciCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+CiAKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF81LnhtbAppbmRleCA4MzJhMTAzLi5iNWQ0NWMwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF81LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF81LnhtbApAQCAtMjEsNyArMjEsNyBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIj4KIApAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXh0VmlldyBnb2VzIG9uIHRvcC4uLgogICAgIC0tPgogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF81X2luc3RydWN0aW9ucyIvPgogCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGFuIGFwcGxpY2F0aW9uIHJlc291cmNlLgogICAgIC0tPgogICAgIDxFZGl0VGV4dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxlL2VkaXRib3hfYmFja2dyb3VuZCIvPgogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIFRoaXMgaXRlbSBoYXMgbGF5b3V0X2dyYXZpdHk9InJpZ2h0Ii4gVGhpcyBtZWFucyB0aGUgd2hvbGUKICAgICAgICAgaG9yaXpvbnRhbCBMaW5lYXJMYXlvdXQgaXMgcmlnaHQgYWxpZ25lZCwgbm90IHRoZSBpbmRpdmlkdWFsCiAgICAgICAgIGl0ZW1zIHdpdGhpbiBpdC4gVGhlIGhvcml6b250YWwgTGluZWFyTGF5b3V0J3Mgd2lkdGggaXMgc2V0IHRvCi0gICAgICAgIHdyYXBfY29udGVudC4gKElmIGl0IHdhcyBmaWxsX3BhcmVudCBpdCB3b3VsZCBub3QgaGF2ZSBhbnkKKyAgICAgICAgd3JhcF9jb250ZW50LiAoSWYgaXQgd2FzIG1hdGNoX3BhcmVudCBpdCB3b3VsZCBub3QgaGF2ZSBhbnkKICAgICAgICAgcm9vbSB0byBzbGlkZSB0byB0aGUgcmlnaHQuKQogICAgIC0tPgogICAgIDxMaW5lYXJMYXlvdXQKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzYueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNi54bWwKaW5kZXggZjRiYjZhNy4uZGE5ZDgxNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNi54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPCEtLQogICAgIExpbmVhckxheW91dCB3aGljaCB1c2VzIGEgY29tYmluYXRpb24gb2Ygd3JhcF9jb250ZW50IG9uIGl0c2VsZiBhbmQKLSAgICBmaWxsX3BhcmVudCBvbiBpdHMgY2hpbGRyZW4gdG8gZ2V0IGV2ZXJ5IGl0ZW0gdG8gYmUgdGhlIHNhbWUgd2lkdGguCisgICAgbWF0Y2hfcGFyZW50IG9uIGl0cyBjaGlsZHJlbiB0byBnZXQgZXZlcnkgaXRlbSB0byBiZSB0aGUgc2FtZSB3aWR0aC4KIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKQEAgLTI4LDI1ICsyOCwyNSBAQAogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfNl9vbmUiLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzZfdHdvIi8+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF82X3RocmVlIi8+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF82X2ZvdXIiLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF83LnhtbAppbmRleCAxOWIyMmU1Li41OTg2NTY1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF83LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF83LnhtbApAQCAtMjAsMjcgKzIwLDI3IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlZCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0Xzdfc21hbGwiLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzdfYmlnIi8+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0Xzdfc21hbGwiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzgueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfOC54bWwKaW5kZXggZjIyNjA0My4uNzYzZWRjYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfOC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfOC54bWwKQEAgLTE5LDE1ICsxOSwxNSBAQAogICAgIGNoaWxkcmVuIHN0YWNrZWQgZnJvbSB0aGUgdG9wLgogICAgIC0tPgogPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMzBkaXAiPgogICA8TGluZWFyTGF5b3V0CiAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xheW91dCIKICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjMwZGlwIj4KIAogICAgIDxUZXh0VmlldwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfOS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF85LnhtbAppbmRleCBlYjkxMTQ3Li42N2VhZjAwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF85LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF85LnhtbApAQCAtMjEsMTYgKzIxLDE2IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2xpc3QiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMS4wIiAvPgogCiAgICAgPEJ1dHRvbgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF85X2J1dHRvbiIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmsueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmsueG1sCmluZGV4IGE2NWQwMDAuLmQ0ZWFmMGMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5rLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluay54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICA8IS0tIEZvdXIgVGV4dFZpZXcgd2lkZ2V0cywgZWFjaCBvbmUgZGlzcGxheWluZyB0ZXh0IGNvbnRhaW5pbmcgbGlua3MuIC0tPgpAQCAtMjQsOCArMjQsOCBAQAogICA8IS0tIHRleHQxIGF1dG9tYXRpY2FsbHkgbGlua2lmaWVzIHRoaW5ncyBsaWtlIFVSTHMgYW5kIHBob25lIG51bWJlcnMuIC0tPgogICA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0MSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmF1dG9MaW5rPSJhbGwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGlua190ZXh0X2F1dG8iCiAgICAgICAgICAgICAvPgpAQCAtMzQsMjMgKzM0LDIzIEBACiAgICAgICAgc3BlY2lmeSBsaW5rcy4gLS0+CiAgIDxUZXh0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RleHQyIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5rX3RleHRfbWFudWFsIgogICAgICAgICAgICAgLz4KIAogICA8IS0tIHRleHQzIGJ1aWxkcyB0aGUgdGV4dCBpbiB0aGUgSmF2YSBjb2RlIHVzaW5nIEhUTUwuIC0tPgogICA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0MyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogCiAgIDwhLS0gdGV4dDQgYnVpbGRzIHRoZSB0ZXh0IGluIHRoZSBKYXZhIGNvZGUgd2l0aG91dCB1c2luZyBIVE1MLiAtLT4KICAgPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dDQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KIAogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF8xMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF8xMi54bWwKaW5kZXggN2YxOWI1OC4uZWVmNjQ4MSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfMTIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzEyLnhtbApAQCAtMTYsMjAgKzE2LDIwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI4ZGlwIgogICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSI4ZGlwIj4KICAgICAKICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOnN0YWNrRnJvbUJvdHRvbT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDp0cmFuc2NyaXB0TW9kZT0ibm9ybWFsIi8+CiAgICAgICAgIAogICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3VzZXJUZXh0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogICAgICAgICAKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfMTMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfMTMueG1sCmluZGV4IDY4MWI0NmUuLjcyZjJmNTggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzEzLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF8xMy54bWwKQEAgLTE2LDE3ICsxNiwxNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICAKICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOmRyYXdTZWxlY3Rvck9uVG9wPSJmYWxzZSIvPgogICAgICAgICAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9zdGF0dXMiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iOGRpcCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjhkaXAiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfNy54bWwKaW5kZXggMmRjNzc3Ny4uYzE2YzlhYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfNy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfNy54bWwKQEAgLTE2LDIwICsxNiwyMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKIAlhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAJYW5kcm9pZDpwYWRkaW5nTGVmdD0iOGRpcCIKIAlhbmRyb2lkOnBhZGRpbmdSaWdodD0iOGRpcCI+Ci0JCisKIAk8TGlzdFZpZXcgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKwkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAJICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKIAkgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogCSAgICBhbmRyb2lkOmRyYXdTZWxlY3Rvck9uVG9wPSJmYWxzZSIvPgogCSAgICAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9waG9uZSIKLSAgICAJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIAlhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIi8+Ci0gICAgCQorCiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzgueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfOC54bWwKaW5kZXggYTg4YjY3Yy4uZWY1NDEwYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfOC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfOC54bWwKQEAgLTE2LDEyICsxNiwxMiBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIAogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYWRkIgpAQCAtMzksMjEgKzM5LDIxIEBACiAgICAgPCEtLSBUaGUgZnJhbWUgbGF5b3V0IGlzIGhlcmUgc2luY2Ugd2Ugd2lsbCBiZSBzaG93aW5nIGVpdGhlcgogICAgIHRoZSBlbXB0eSB2aWV3IG9yIHRoZSBsaXN0IHZpZXcuICAtLT4KICAgICA8RnJhbWVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiA+CiAgICAgICAgIDwhLS0gSGVyZSBpcyB0aGUgbGlzdC4gU2luY2Ugd2UgYXJlIHVzaW5nIGEgTGlzdEFjdGl2aXR5LCB3ZQogICAgICAgICAgICAgIGhhdmUgdG8gY2FsbCBpdCAiQGFuZHJvaWQ6aWQvbGlzdCIgc28gTGlzdEFjdGl2aXR5IHdpbGwKICAgICAgICAgICAgICBmaW5kIGl0IC0tPgogICAgICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvbGlzdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9ImZhbHNlIi8+CiAgICAgICAgIAogICAgICAgICA8IS0tIEhlcmUgaXMgdGhlIHZpZXcgdG8gc2hvdyBpZiB0aGUgbGlzdCBpcyBlbXRweSAtLT4KICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZW1wdHkiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGlzdF84X25vX3Bob3RvcyIvPgogICAgICAgICAgICAgCiAgICAgPC9GcmFtZUxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0X2l0ZW1fY2hlY2tib3gueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9jaGVja2JveC54bWwKaW5kZXggZmExZDJkOC4uYTI2ZjZmNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9jaGVja2JveC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9jaGVja2JveC54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPENoZWNrQm94IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC90ZXh0MSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Ij9hbmRyb2lkOmF0dHIvbGlzdFByZWZlcnJlZEl0ZW1IZWlnaHQiCiAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZUxhcmdlIgogLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0X2l0ZW1faWNvbl90ZXh0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0X2l0ZW1faWNvbl90ZXh0LnhtbAppbmRleCA3MjA2YzA0Li44NWVkYTdhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF9pdGVtX2ljb25fdGV4dC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9pY29uX3RleHQueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPEltYWdlVmlldyBhbmRyb2lkOmlkPSJAK2lkL2ljb24iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0OGRpcCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zYW1wbGUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NhbXBsZS54bWwKaW5kZXggZTY2MjkyMS4uNzBhOWM2YiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NhbXBsZS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NhbXBsZS54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xvY2FsX3NhbXBsZSIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NlcnZpY2VfYmluZGluZy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2VydmljZV9iaW5kaW5nLnhtbAppbmRleCA3NzViOGZiLi42ZjA0YWIxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2VydmljZV9iaW5kaW5nLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2VydmljZV9iaW5kaW5nLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbG9jYWxfc2VydmljZV9iaW5kaW5nIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2VydmljZV9jb250cm9sbGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCmluZGV4IDdiYjAyY2EuLjMwMjk4ZDAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2dfdGV4dF9ib3hfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9nX3RleHRfYm94XzEueG1sCmluZGV4IGYwNjYxOWQuLjRkMmM3NzQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2dfdGV4dF9ib3hfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvZ190ZXh0X2JveF8xLnhtbApAQCAtMTcsOCArMTcsOCBAQAogPExpbmVhckxheW91dAogICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPEJ1dHRvbgogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FkZCIKQEAgLTI5LDcgKzI5LDcgQEAKICAgICA8Y29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLnRleHQuTG9nVGV4dEJveAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDpzY3JvbGxiYXJzPSJ2ZXJ0aWNhbCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21hcHZpZXcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21hcHZpZXcueG1sCmluZGV4IDk3ZWY3ZmYuLjY2NGQ4ZjYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tYXB2aWV3LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWFwdmlldy54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL21haW4iCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgPGNvbS5nb29nbGUuYW5kcm9pZC5tYXBzLk1hcFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmVuYWJsZWQ9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmFwaUtleT0iYXBpc2FtcGxlcyIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tYXJxdWVlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tYXJxdWVlLnhtbAppbmRleCA2ZDQwYzg0Li42MjY2ZmYyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWFycXVlZS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21hcnF1ZWUueG1sCkBAIC0xNyw4ICsxNyw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIAogICAgIDxCdXR0b24KICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjE1MGRpcCIgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVkaWFwbGF5ZXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVkaWFwbGF5ZXJfMS54bWwKaW5kZXggMTZhZTYxYi4uNzQxMWU0MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21lZGlhcGxheWVyXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tZWRpYXBsYXllcl8xLnhtbApAQCAtMSwzMCArMSwzMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgPgogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9sb2NhbHZpZGVvIgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9sb2NhbF92aWRlbyIgCiAgICAgLz4KICAgICAKICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc3RyZWFtdmlkZW8iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0cmVhbV92aWRlbyIgCiAgICAgLz4KICAgICAKICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvbG9jYWxhdWRpbyIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbG9jYWxfYXVkaW8iIAogICAgIC8+CiAgICAgCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3Jlc291cmNlc2F1ZGlvIgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZXNfYXVkaW8iIAogICAgIC8+CiAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVkaWFwbGF5ZXJfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVkaWFwbGF5ZXJfMi54bWwKaW5kZXggZTFlNDlkZC4uYTdmNzhmNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21lZGlhcGxheWVyXzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tZWRpYXBsYXllcl8yLnhtbApAQCAtMSw4ICsxLDggQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8U3VyZmFjZVZpZXcgYW5kcm9pZDppZD0iQCtpZC9zdXJmYWNlIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21lc3Nlbmdlcl9zZXJ2aWNlX2JpbmRpbmcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21lc3Nlbmdlcl9zZXJ2aWNlX2JpbmRpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzY2Y2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVzc2VuZ2VyX3NlcnZpY2VfYmluZGluZy54bWwKQEAgLTAsMCArMSw0NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhLS0gRGVtb25zdHJhdGVzIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyBhIGxvY2FsIHNlcnZpY2UuCisgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uYW5kcm9pZC5zZGsuYXBwLkxvY2FsU2VyaWNlLmphdmEuIC0tPgorCis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKKyAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKworICAgIDxUZXh0VmlldworICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9tZXNzZW5nZXJfc2VydmljZV9iaW5kaW5nIi8+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmluZCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmluZF9zZXJ2aWNlIj4KKyAgICAgICAgPHJlcXVlc3RGb2N1cyAvPgorICAgIDwvQnV0dG9uPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3VuYmluZCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdW5iaW5kX3NlcnZpY2UiPgorICAgIDwvQnV0dG9uPgorCisgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY2FsbGJhY2siCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCisgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIvPgorCis8L0xpbmVhckxheW91dD4KKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21vcnNlX2NvZGUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21vcnNlX2NvZGUueG1sCmluZGV4IGY1MzZkYTIuLjNjNzk5M2MgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tb3JzZV9jb2RlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbW9yc2VfY29kZS54bWwKQEAgLTE3LDEzICsxNywxMyBAQAogPCEtLSBUaGlzIGFjdGl2aXR5IGV4ZXJjaXNlcyBzZWFyY2ggaW52b2NhdGlvbiBvcHRpb25zIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAKICAgICA8RWRpdFRleHQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIC8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbm90aWZ5X3dpdGhfdGV4dC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbm90aWZ5X3dpdGhfdGV4dC54bWwKaW5kZXggNmNiYTkwZC4uZTFiNjgzNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L25vdGlmeV93aXRoX3RleHQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ub3RpZnlfd2l0aF90ZXh0LnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8QnV0dG9uCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc2hvcnRfbm90aWZ5IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L25vdGlmeWluZ19jb250cm9sbGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ub3RpZnlpbmdfY29udHJvbGxlci54bWwKaW5kZXggNTRjZWYxNy4uMzBjZGIyNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L25vdGlmeWluZ19jb250cm9sbGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbm90aWZ5aW5nX2NvbnRyb2xsZXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub3RpZnlpbmdfc2VydmljZV9jb250cm9sbGVyIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMS54bWwKaW5kZXggMDM4M2RlOS4uOWUzYWNiMSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8xLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8UHJvZ3Jlc3NCYXIgYW5kcm9pZDppZD0iQCtpZC9wcm9ncmVzc19ob3Jpem9udGFsIgpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZGVjcmVhc2UiCkBAIC01Niw3ICs1Niw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9kZWNyZWFzZV9zZWNvbmRhcnkiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMi54bWwKaW5kZXggMmQ0MzYyMi4uMGMzZjYzYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8yLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFByb2dyZXNzQmFyIGFuZHJvaWQ6aWQ9IkArYW5kcm9pZDppZC9wcm9ncmVzc19sYXJnZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8zLnhtbAppbmRleCBhYzEwYTMwLi4wYzQzNzA4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzMueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zaG93SW5kZXRlcm1pbmF0ZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl80LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl80LnhtbAppbmRleCA1ZTU3N2EwLi42YmFjZjdhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfNC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzQueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC90b2dnbGUiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcXVpY2tfY29udGFjdHMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3F1aWNrX2NvbnRhY3RzLnhtbAppbmRleCBmZmIxOWVkLi5hMzRmZWEyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcXVpY2tfY29udGFjdHMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9xdWlja19jb250YWN0cy54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPFJlbGF0aXZlTGF5b3V0CiAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjBkaXAiCiAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjlkaXAiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSAid3JhcF9jb250ZW50IgpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIyZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9SaWdodE9mPSJAaWQvYmFkZ2UiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKIDwvUmVsYXRpdmVMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmFkaW9fZ3JvdXBfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmFkaW9fZ3JvdXBfMS54bWwKaW5kZXggMzAyOTIwNy4uYTE3ZjlkMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JhZGlvX2dyb3VwXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yYWRpb19ncm91cF8xLnhtbApAQCAtMTUsMTEgKzE1LDExIEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgPFJhZGlvR3JvdXAKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgICAgIGFuZHJvaWQ6Y2hlY2tlZEJ1dHRvbj0iQCtpZC9sdW5jaCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yYXRpbmdiYXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmF0aW5nYmFyXzEueG1sCmluZGV4IDMyNTZkM2MuLjlmODE1MDUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yYXRpbmdiYXJfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JhdGluZ2Jhcl8xLnhtbApAQCAtMTcsOCArMTcsOCBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMTBkaXAiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFJhdGluZ0JhciBhbmRyb2lkOmlkPSJAK2lkL3JhdGluZ2JhcjEiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIGFuZHJvaWQ6cmF0aW5nPSIyLjI1IiAvPgogCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjEwZGlwIj4KICAgICAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVhZF9hc3NldC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVhZF9hc3NldC54bWwKaW5kZXggNzliOGJiNi4uYzM0MjNiZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlYWRfYXNzZXQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWFkX2Fzc2V0LnhtbApAQCAtMTgsMTEgKzE4LDExIEBACiAgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uYW5kcm9pZC5zZGsuY29udGVudC5TdHlsZWRUZXh0IC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJub3JtYWwiLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlY2VpdmVfcmVzdWx0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWNlaXZlX3Jlc3VsdC54bWwKaW5kZXggNDYxYmU2Yy4uYTg5NDYxMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlY2VpdmVfcmVzdWx0LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVjZWl2ZV9yZXN1bHQueG1sCkBAIC0yMSwxNiArMjEsMTYgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZWNlaXZlX3Jlc3VsdF9pbnN0cnVjdGlvbnMiLz4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Jlc3VsdHMiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIxMGRpcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIxMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2dyZWVuIj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWRpcmVjdF9lbnRlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfZW50ZXIueG1sCmluZGV4IGY3M2Q5OTkuLjZiNDQ5M2UgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWRpcmVjdF9lbnRlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2VudGVyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVkaXJlY3RfZW50ZXIiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWRpcmVjdF9nZXR0ZXIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2dldHRlci54bWwKaW5kZXggOTg3OWI3OC4uYzRlM2JkNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2dldHRlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2dldHRlci54bWwKQEAgLTE5LDE2ICsxOSwxNiBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3JlZGlyZWN0X2dldHRlciIvPgogCiAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIj4KICAgICAgICAgPHJlcXVlc3RGb2N1cyAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X21haW4ueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X21haW4ueG1sCmluZGV4IDc0ZGU1MDIuLmE1NGE5ZGYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWRpcmVjdF9tYWluLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfbWFpbi54bWwKQEAgLTE5LDE2ICsxOSwxNiBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3JlZGlyZWN0X21haW4iLz4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbGF0aXZlX2xheW91dF8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWxhdGl2ZV9sYXlvdXRfMS54bWwKaW5kZXggMTIyZTcxOC4uOTRmNzZlOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbGF0aXZlX2xheW91dF8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVsYXRpdmVfbGF5b3V0XzEueG1sCkBAIC0xOSwxNCArMTksMTQgQEAKIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDwhLS0gdmlldzEgZ29lcyBvbiB0b3AgLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdmlldzEiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlZCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRUb3A9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZWxhdGl2ZV9sYXlvdXRfMV90b3AiLz4KQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC92aWV3MiIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZ3JlZW4iCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVsYXRpdmVfbGF5b3V0XzFfYm90dG9tIi8+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdmlldzMiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3llbGxvdyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2Fib3ZlPSJAaWQvdmlldzIiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvdmlldzEiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVsYXRpdmVfbGF5b3V0XzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbGF0aXZlX2xheW91dF8yLnhtbAppbmRleCBkYzYxM2U2Li4wODM5NTNhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVsYXRpdmVfbGF5b3V0XzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWxhdGl2ZV9sYXlvdXRfMi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIDwhLS0gRGVtb25zdHJhdGVzIHVzaW5nIGEgcmVsYXRpdmUgbGF5b3V0IHRvIGNyZWF0ZSBhIGZvcm0gLS0+CiAKIDxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIj4KQEAgLTI3LDcgKzI3LDcgQEAKICAgICAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sYWJlbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3JlbGF0aXZlX2xheW91dF8yX2luc3RydWN0aW9ucyIvPgogCkBAIC00MCw3ICs0MCw3IEBACiAgICAgLS0+CiAgICAgPEVkaXRUZXh0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZW50cnkiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvZWRpdGJveF9iYWNrZ3JvdW5kIgogICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL2xhYmVsIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVtb3RlX3NlcnZpY2VfYmluZGluZy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVtb3RlX3NlcnZpY2VfYmluZGluZy54bWwKaW5kZXggYTM1M2VmYi4uY2M0MDhkMSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbW90ZV9zZXJ2aWNlX2JpbmRpbmcueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW1vdGVfc2VydmljZV9iaW5kaW5nLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVtb3RlX3NlcnZpY2VfYmluZGluZyIvPgpAQCAtNDQsNyArNDQsNyBAQAogICAgIDwvQnV0dG9uPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY2FsbGJhY2siCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVtb3RlX3NlcnZpY2VfY29udHJvbGxlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVtb3RlX3NlcnZpY2VfY29udHJvbGxlci54bWwKaW5kZXggNDhlNGM5NS4uNjFkNzcwZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbW90ZV9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW1vdGVfc2VydmljZV9jb250cm9sbGVyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVtb3RlX3NlcnZpY2VfY29udHJvbGxlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfZm91ci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9mb3VyLnhtbAppbmRleCA0NWYxM2EzLi5hNWMyMmI1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9mb3VyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9mb3VyLnhtbApAQCAtMjEsMTEgKzIxLDExIEBACiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlb3JkZXJfZm91cl90ZXh0Ii8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9vbl9sYXVuY2gueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfb25fbGF1bmNoLnhtbAppbmRleCA4NTBhMmY1Li45ODFiM2Y0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9vbl9sYXVuY2gueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX29uX2xhdW5jaC54bWwKQEAgLTIxLDExICsyMSwxMSBAQAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZW9yZGVyX29uX2xhdW5jaCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfdGhyZWUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfdGhyZWUueG1sCmluZGV4IDMwZWY0MWIuLjUxYThkMGMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX3RocmVlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl90aHJlZS54bWwKQEAgLTIxLDExICsyMSwxMSBAQAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZW9yZGVyX3RocmVlX3RleHQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX3R3by54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl90d28ueG1sCmluZGV4IDcxMzI1NjEuLjZmYWRjYTAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX3R3by54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfdHdvLnhtbApAQCAtMjEsMTEgKzIxLDExIEBACiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlb3JkZXJfdHdvX3RleHQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZXNvdXJjZXMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlc291cmNlcy54bWwKaW5kZXggNjBlYzU4MS4uZWU5ZGFjMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlc291cmNlcy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlc291cmNlcy54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc3R5bGVkX3RleHQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJub3JtYWwiCkBAIC0zNiw3ICszNiw3IEBACiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFpbl90ZXh0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0ibm9ybWFsIgpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcmVzMSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9Im5vcm1hbCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zYXZlX3Jlc3RvcmVfc3RhdGUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NhdmVfcmVzdG9yZV9zdGF0ZS54bWwKaW5kZXggNGYzZjhlZS4uNGI0ODllZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NhdmVfcmVzdG9yZV9zdGF0ZS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NhdmVfcmVzdG9yZV9zdGF0ZS54bWwKQEAgLTE4LDIxICsxOCwyMSBAQAogICAgICBTZWUgY29ycmVzcG9uZGluZyBKYXZhIGNvZGUgY29tLmFuZHJvaWQuc2RrLmFwcC5TYXZlUmVzdG9yZVN0YXRlLmphdmEuIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL21zZyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIiAvPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NhdmVzX3N0YXRlIi8+CiAKICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9zYXZlZCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZ3JlZW4iCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbml0aWFsX3RleHQiCkBAIC00MSwxNCArNDEsMTQgQEAKICAgICA8L0VkaXRUZXh0PgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iOGRpcCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fc2F2ZXNfc3RhdGUiLz4KIAogICAgIDxFZGl0VGV4dCAKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvcmVkIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW5pdGlhbF90ZXh0Ij4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxfdmlld18xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxfdmlld18xLnhtbAppbmRleCAwNTUyODA3Li40NzkyZTIxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsX3ZpZXdfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbF92aWV3XzEueG1sCkBAIC0xNyw3MiArMTcsNzIgQEAKIDwhLS0gRGVtb25zdHJhdGVzIHNjcm9sbGluZyB3aXRoIGEgU2Nyb2xsVmlldy4gLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9Im5vbmUiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xheW91dCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV90ZXh0XzEiLz4KIAogICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV9idXR0b25fMSIvPgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfdGV4dF8yIi8+CiAKICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfYnV0dG9uXzIiLz4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX3RleHRfMyIvPgogCiAgICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX2J1dHRvbl8zIi8+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV90ZXh0XzQiLz4KIAogICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV9idXR0b25fNCIvPgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfdGV4dF81Ii8+CiAKICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfYnV0dG9uXzUiLz4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX3RleHRfNiIvPgogCiAgICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX2J1dHRvbl82Ii8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxfdmlld18yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxfdmlld18yLnhtbAppbmRleCAwMTA3ZTQ2Li5kODU4N2NmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsX3ZpZXdfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbF92aWV3XzIueG1sCkBAIC0xNywyMyArMTcsMjMgQEAKIDwhLS0gRGVtb25zdHJhdGVzIHNjcm9sbGluZyB3aXRoIGEgU2Nyb2xsVmlldy4gLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9Im5vbmUiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xheW91dCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzJfdGV4dF8xIi8+CiAKICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzJfYnV0dG9uXzEiLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjEueG1sCmluZGV4IDcyMjFiM2UuLjdhNWI4NmUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIxLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMS54bWwKQEAgLTE3LDE1MiArMTcsMTUyIEBACiA8IS0tIERlbW9uc3RyYXRlcyBzY3JvbGxpbmcgd2l0aCBhIFNjcm9sbFZpZXcuIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMi54bWwKaW5kZXggNDg4MmE3Mi4uOTJhZDE5ZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogPCEtLSBEZW1vbnN0cmF0ZXMgc2Nyb2xsaW5nIHdpdGggYSBTY3JvbGxWaWV3LiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6c2Nyb2xsYmFyVHJhY2tWZXJ0aWNhbD0iQGRyYXdhYmxlL3Njcm9sbGJhcl92ZXJ0aWNhbF90cmFjayIKICAgICBhbmRyb2lkOnNjcm9sbGJhclRodW1iVmVydGljYWw9IkBkcmF3YWJsZS9zY3JvbGxiYXJfdmVydGljYWxfdGh1bWIiCkBAIC0yNSwxNDcgKzI1LDE0NyBAQAogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMy54bWwKaW5kZXggYzI3MmU0NS4uZmEyMGRiMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIzLnhtbApAQCAtMTgsMTIgKzE4LDEyIEBACiAKIDxMaW5lYXJMYXlvdXQKICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgogCkBAIC0zMyw0NyArMzMsNDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iI0ZGMDAwMCI+CiAgICAgICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIgLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIgLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIgLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiMwMEZGMDAiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iMTJkaXAiPgogICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8zX3RleHQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiMwMDAwMDAiCkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjEyMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvZWRpdF90ZXh0Ij4KICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjMDAwMDAwIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfM190ZXh0IiAvPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAKICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICA8U2Nyb2xsVmlldwogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC92aWV3NCIKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDpzY3JvbGxiYXJTdHlsZT0ib3V0c2lkZU92ZXJsYXkiCiAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxlL2VkaXRfdGV4dCI+CiAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iIzAwMDAwMCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzNfdGV4dCIgLz4KQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDpzY3JvbGxiYXJTdHlsZT0ib3V0c2lkZUluc2V0IgogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9lZGl0X3RleHQiPgogICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiMwMDAwMDAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8zX3RleHQiIC8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VhcmNoX2ludm9rZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VhcmNoX2ludm9rZS54bWwKaW5kZXggYjc4YTYxNi4uNjZiZjJlOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlYXJjaF9pbnZva2UueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWFyY2hfaW52b2tlLnhtbApAQCAtMTcsMTMgKzE3LDEzIEBACiA8IS0tIFRoaXMgYWN0aXZpdHkgZXhlcmNpc2VzIHNlYXJjaCBpbnZvY2F0aW9uIG9wdGlvbnMgLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIAogICAgIDwhLS0gIFNlY3Rpb246IEluZm9ybWF0aW9uIC0tPgogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9tc2dfc2VhcmNoIiAvPgpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogICAgICAgICAgICAgCiAgICAgPFNwaW5uZXIgYW5kcm9pZDppZD0iQCtpZC9zcGlubmVyX21lbnVfbW9kZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpkcmF3U2VsZWN0b3JPblRvcD0idHJ1ZSIgLz4KICAgICAgICAgICAgIApAQCAtNTAsMTIgKzUwLDEyIEBACiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2VhcmNoX3NlY3Rfb3B0aW9ucyIgLz4KICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KQEAgLTcyLDExICs3MiwxMSBAQAogICAgIDwvTGluZWFyTGF5b3V0PgogICAgIAogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAgICAgICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWFyY2hfcXVlcnlfcmVzdWx0cy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VhcmNoX3F1ZXJ5X3Jlc3VsdHMueG1sCmluZGV4IDAzZjFhZTYuLmNkOTJmMmQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWFyY2hfcXVlcnlfcmVzdWx0cy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlYXJjaF9xdWVyeV9yZXN1bHRzLnhtbApAQCAtMTcsMjAgKzE3LDIwIEBACiA8IS0tIFRoaXMgYWN0aXZpdHkgZGlzcGxheXMgc2VhcmNoIHF1ZXJpZXMgYW5kICJyZXN1bHRzIiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgCiAgICAgPCEtLSAgU2VjdGlvbjogSW5mb3JtYXRpb24gLS0+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL21zZ19zZWFyY2hfcmVzdWx0cyIgLz4KICAgICAKICAgICA8IS0tICBTZWN0aW9uOiBTZWFyY2ggUXVlcnkgU3RyaW5nIC0tPgogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIDwhLS0gIFNlY3Rpb246IFNlYXJjaCBRdWVyeSBhcHBsaWNhdGlvbiBjb250ZXh0IGRhdGEgLS0+CiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KIApAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgPCEtLSAgU2VjdGlvbjogSG93IHRoZSBxdWVyeSB3YXMgZGVsaXZlcmVkIC0tPgogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWVrYmFyXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlZWtiYXJfMS54bWwKaW5kZXggNTEzMTE0ZS4uZDMxNDBiMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlZWtiYXJfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlZWtiYXJfMS54bWwKQEAgLTE2LDIxICsxNiwyMSBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8U2Vla0JhciBhbmRyb2lkOmlkPSJAK2lkL3NlZWsiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bWF4PSIxMDAiCiAgICAgICAgIGFuZHJvaWQ6cHJvZ3Jlc3M9IjUwIgogICAgICAgICBhbmRyb2lkOnNlY29uZGFyeVByb2dyZXNzPSI3NSIgLz4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Byb2dyZXNzIgotICAgICAgIAlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdHJhY2tpbmciCi0gICAgICAgCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWxlY3RfZGlhbG9nLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWxlY3RfZGlhbG9nLnhtbAppbmRleCBhZDgyNmFmLi5kYmY5ZmI3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VsZWN0X2RpYWxvZy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlbGVjdF9kaWFsb2cueG1sCkBAIC0xOCwxMiArMTgsMTIgQEAKICAgICAgU2VlIGNvcnJlc3BvbmRpbmcgSmF2YSBjb2RlIGNvbS5hbmRyb2lkLnNkay5hcHAuU2VsZWN0RGlhbG9nU2FtcGxlcy5qYXZhLiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvc2NyZWVuIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3Nob3dfZGlhbG9nIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NlbGVjdF9kaWFsb2dfc2hvdyIvPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL21lc3NhZ2UiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlbmRfcmVzdWx0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZW5kX3Jlc3VsdC54bWwKaW5kZXggMzg2YzNmYy4uMzRiMzY5MyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlbmRfcmVzdWx0LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VuZF9yZXN1bHQueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjhkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9waWNrX3Jlc3VsdCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIueG1sCmluZGV4IDE5Yjc0OTguLjU1NmRmZmMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlci54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zaGFwZV9kcmF3YWJsZV8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zaGFwZV9kcmF3YWJsZV8xLnhtbAppbmRleCAwMzdlODQ0Li5iMGFkNDc5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2hhcGVfZHJhd2FibGVfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NoYXBlX2RyYXdhYmxlXzEueG1sCkBAIC0xNyw1NiArMTcsNTYgQEAKIDwhLS0gRGVtb25zdHJhdGVzIHNjcm9sbGluZyB3aXRoIGEgU2Nyb2xsVmlldy4gLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCi0JYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCQogICAgIDxMaW5lYXJMYXlvdXQKICAgICAJYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAKIAkJPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNTBkaXAiCiAJCQlhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL3NoYXBlXzEiIC8+CiAJCQkKIAkJPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogCQkJYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9saW5lIiAvPgogCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjUwZGlwIgogCQkJYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9zaGFwZV8yIiAvPgogCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIAkJCWFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvbGluZSIgLz4KIAkJCQogCQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI1MGRpcCIKIAkJCWFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvc2hhcGVfMyIgLz4KIAkJCQogCQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAJCQlhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2xpbmUiIC8+CiAJCQkJCQogCQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI1MGRpcCIKIAkJCWFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvc2hhcGVfNCIgLz4KIAkJCQogCQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAJCQlhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2xpbmUiIC8+CiAJCQkJCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjUwZGlwIgogCQkJYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9zaGFwZV81IiAvPgogCTwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NwaW5uZXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3Bpbm5lcl8xLnhtbAppbmRleCAzZDVmM2MxLi5iNzE2NmYzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3Bpbm5lcl8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3Bpbm5lcl8xLnhtbApAQCAtMTcsMzEgKzE3LDMxIEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3Bpbm5lcl8xX2NvbG9yIgogICAgIC8+CiAKICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3NwaW5uZXIxIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmRyYXdTZWxlY3Rvck9uVG9wPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOnByb21wdD0iQHN0cmluZy9zcGlubmVyXzFfY29sb3JfcHJvbXB0IgogICAgIC8+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxMGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NwaW5uZXJfMV9wbGFuZXQiCiAgICAgLz4KIAogICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvc3Bpbm5lcjIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6cHJvbXB0PSJAc3RyaW5nL3NwaW5uZXJfMV9wbGFuZXRfcHJvbXB0IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm90aWZpY2F0aW9ucy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25zLnhtbAppbmRleCAxMWYzYzk2Li4wYTI5MWJjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25zLnhtbApAQCAtMTUsMTIgKzE1LDEyIEBACiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAKICAgICAgICAgPFRleHRWaWV3CkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIAogICAgICAgICAgICAgPEJ1dHRvbgpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAKICAgICAgICAgICAgIDxCdXR0b24KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgIAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgCiAgICAgICAgICAgICA8QnV0dG9uCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgCiAgICAgICAgICAgICA8QnV0dG9uCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3R5bGVkX3RleHQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3N0eWxlZF90ZXh0LnhtbAppbmRleCA2MTBlYTY0Li5hODk3NWRlIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3R5bGVkX3RleHQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdHlsZWRfdGV4dC54bWwKQEAgLTE4LDMyICsxOCwzMiBAQAogICAgICBTZWUgY29ycmVzcG9uZGluZyBKYXZhIGNvZGUgY29tLmFuZHJvaWQuc2RrLmNvbnRlbnQuU3R5bGVkVGV4dCAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0eWxlZF90ZXh0X3JzcmMiLz4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9Im5vcm1hbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0eWxlZF90ZXh0Ii8+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgIC8+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdHlsZWRfdGV4dF9wcm9nIi8+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9Im5vcm1hbCIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3VyZmFjZV92aWV3X292ZXJsYXkueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3N1cmZhY2Vfdmlld19vdmVybGF5LnhtbAppbmRleCBhNTU3ZTIyLi5kY2I5ODI0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3VyZmFjZV92aWV3X292ZXJsYXkueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdXJmYWNlX3ZpZXdfb3ZlcmxheS54bWwKQEAgLTE4LDI3ICsxOCwyNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDwhLS0gSGVyZSBpcyB3aGVyZSB3ZSBwdXQgdGhlIFN1cmZhY2VWaWV3LCBpbiBhIGZyYW1lIHNvIHRoYXQgd2UgY2FuCiAgICAgICAgICBzdGFjayBvdGhlciB2aWV3cyBvbiB0b3Agb2YgaXQuIC0tPgogICAgIDxGcmFtZUxheW91dAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMHB4IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIj4KIAogICAgICAgICA8YW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldyBhbmRyb2lkOmlkPSJAK2lkL2dsc3VyZmFjZXZpZXciCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiIC8+CisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgLz4KIAogICAgICAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6aWQ9IkAraWQvaGlkZWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdHJhbnNsdWNlbnRfYmFja2dyb3VuZCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9oaWRlbWUxIgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMS54bWwKaW5kZXggOGQ5NWU4Mi4uMjQ2MDljNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGFibGVSb3c+CiAgICAgICAgIDxUZXh0VmlldwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEwLnhtbAppbmRleCA2YzU1OGU3Li43NTU3M2EwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEwLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEwLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgYW5kcm9pZDpzdHJldGNoQ29sdW1ucz0iMSI+CiAKICAgIDxUYWJsZVJvdz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMS54bWwKaW5kZXggZTQwZTI4YS4uNjM4YjcxMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMS54bWwKQEAgLTE1LDcgKzE1LDcgQEAKIC0tPgogCiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6c3RyZXRjaENvbHVtbnM9IjEiPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTIueG1sCmluZGV4IDQyM2UzNGUuLjE3YzYzYWUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTIueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAtLT4KIAogPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8VGFibGVSb3c+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8yLnhtbAppbmRleCBjNTEzNGQzLi5mN2NkMjA2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMi54bWwKQEAgLTE1LDggKzE1LDggQEAKIC0tPgogCiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUYWJsZVJvdz4KICAgICAgICAgPEJ1dHRvbgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMy54bWwKaW5kZXggNDQ0MTVmYy4uNjkxZjgyNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzMueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6c2hyaW5rQ29sdW1ucz0iMiwgMyI+CiAKICAgICA8IS0tIFJvd3MgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIGNvbnRlbnQgZG9lc24ndCBmaXQgb24KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzQueG1sCmluZGV4IGE5YjdiNDIuLjNiNTBiZWMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF80LnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8IS0tIFN0cmV0Y2ggc29tZSBjb2x1bW5zIC0tPgogPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6c3RyZXRjaENvbHVtbnM9IjEiPgogCiAgICAgPFRhYmxlUm93PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF81LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNS54bWwKaW5kZXggNzczZDcyOS4uYjYxODEyOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF81LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzUueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDwhLS0gU3RyZXRjaCBzb21lIGNvbHVtbnMgLS0+CiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpzdHJldGNoQ29sdW1ucz0iMSI+CiAKICAgICA8VGFibGVSb3c+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzYueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF82LnhtbAppbmRleCA5NjA3ZjFjLi5jYmI2ZDhkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzYueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNi54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPCEtLSBTdHJldGNoIHNvbWUgY29sdW1ucyAtLT4KIDxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnN0cmV0Y2hDb2x1bW5zPSIxIj4KIAogICAgIDxUYWJsZVJvdz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzcueG1sCmluZGV4IDg4YzQ5MTAuLmFlOGJhMWYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF83LnhtbApAQCAtMTYsMTEgKzE2LDExIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICA8VGFibGVMYXlvdXQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tZW51IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnN0cmV0Y2hDb2x1bW5zPSIxIgogICAgICAgICBhbmRyb2lkOmNvbGxhcHNlQ29sdW1ucz0iMiI+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzgueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF84LnhtbAppbmRleCBhNjNhOGU4Li4wODcxNDMyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzgueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfOC54bWwKQEAgLTE2LDExICsxNiwxMSBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgPFRhYmxlTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWVudSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRhYmxlUm93PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF85LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfOS54bWwKaW5kZXggYTJkNjU2NC4uZWRiNDAyOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF85LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzkueG1sCkBAIC0xNSwxNSArMTUsMTUgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICAgICAgPFRhYmxlTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21lbnUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgICAgICA8VGFibGVSb3c+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFiczEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYnMxLnhtbAppbmRleCA1YTE3NjkzLi42MDNmZTgyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFiczEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJzMS54bWwKQEAgLTE1LDI1ICsxNSwyNSBAQAogLS0+CiAKIDxGcmFtZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdmlldzEiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JsdWUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90YWJzXzFfdGFiXzEiLz4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3ZpZXcyIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yZWQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90YWJzXzFfdGFiXzIiLz4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3ZpZXczIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RhYnNfMV90YWJfMyIvPgogCiA8L0ZyYW1lTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RleHRfc3dpdGNoZXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGV4dF9zd2l0Y2hlcl8xLnhtbAppbmRleCBkN2JlNzQzLi4wMGFlMzA3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGV4dF9zd2l0Y2hlcl8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGV4dF9zd2l0Y2hlcl8xLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL25leHQiCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90ZXh0X3N3aXRjaGVyXzFfbmV4dF90ZXh0IiAvPgogCiAgICAgPFRleHRTd2l0Y2hlciBhbmRyb2lkOmlkPSJAK2lkL3N3aXRjaGVyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90ZXh0X3RvX3NwZWVjaC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGV4dF90b19zcGVlY2gueG1sCmluZGV4IDBiYTYwZTEuLjQ4Mjk1ZGYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90ZXh0X3RvX3NwZWVjaC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RleHRfdG9fc3BlZWNoLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgID4KICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYWdhaW5fYnV0dG9uIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RyYW5zbHVjZW50X2JhY2tncm91bmQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RyYW5zbHVjZW50X2JhY2tncm91bmQueG1sCmluZGV4IDZiNmUxY2YuLmM0YTFhY2YgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90cmFuc2x1Y2VudF9iYWNrZ3JvdW5kLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdHJhbnNsdWNlbnRfYmFja2dyb3VuZC54bWwKQEAgLTE5LDYgKzE5LDYgQEAKIAogPCEtLSBUaGlzIHNjcmVlbiBjb25zaXN0cyBvZiBhIHNpbmdsZSB0ZXh0IGZpZWxkIHRoYXQgZGlzcGxheXMgc29tZSB0ZXh0LiAtLT4KIDxUZXh0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8Y2VudGVyX2hvcml6b250YWwiCiAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RyYW5zbHVjZW50X2JhY2tncm91bmQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC92aWRlb3ZpZXcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3ZpZGVvdmlldy54bWwKaW5kZXggNGYzNWFjZS4uZGI5N2ExMSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3ZpZGVvdmlldy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3ZpZGVvdmlldy54bWwKQEAgLTEsOCArMSw4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICA+CiAgICAgCiAgICAgPFZpZGVvVmlldyAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC92aXNpYmlsaXR5XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Zpc2liaWxpdHlfMS54bWwKaW5kZXggYWQ5NDYwMi4uMTAyNzc3MiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Zpc2liaWxpdHlfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Zpc2liaWxpdHlfMS54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgIDxUZXh0VmlldwogICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlZCIKLSAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdmlzaWJpbGl0eV8xX3ZpZXdfMSIvPgogCiAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC92aWN0aW0iCiAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZ3JlZW4iCi0gICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Zpc2liaWxpdHlfMV92aWV3XzIiLz4KIAogICAgICAgPFRleHRWaWV3CiAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdmlzaWJpbGl0eV8xX3ZpZXdfMyIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdm9pY2VfcmVjb2duaXRpb24ueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3ZvaWNlX3JlY29nbml0aW9uLnhtbAppbmRleCAyZGI0YTcyLi42NjE3NWVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdm9pY2VfcmVjb2duaXRpb24ueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC92b2ljZV9yZWNvZ25pdGlvbi54bWwKQEAgLTE4LDIzICsxOCwyMyBAQAogPCEtLSBUaGlzIGFjdGl2aXR5IGRpc3BsYXlzIFVJIGZvciBsYXVuY2hpbmcgdm9pY2UgcmVjb2duaXRpb24gLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy92b2ljZV9yZWNvZ25pdGlvbl9wcm9tcHQiIC8+CiAgICAgICAgIAogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9idG5fc3BlYWsiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zcGVha19idXR0b24iIC8+CiAgICAgICAgIAogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2xpc3QiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC93YWxscGFwZXJfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvd2FsbHBhcGVyXzIueG1sCmluZGV4IDg1MTYxYzkuLjMyNGQ3NDkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC93YWxscGFwZXJfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3dhbGxwYXBlcl8yLnhtbApAQCAtMTAsNyArMTAsNyBAQAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICAgICAgPEJ1dHRvbgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yYW5kb21pemUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3dlYnZpZXdfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvd2Vidmlld18xLnhtbAppbmRleCA5MWZjYTM5Li42N2NlYTNhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvd2Vidmlld18xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvd2Vidmlld18xLnhtbApAQCAtMTUsNjQgKzE1LDY0IEBACiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIAogICAgIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djEiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogICAgICAgICAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3YyIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICAgICAgICAgIAogICAgICAgICA8V2ViVmlldyBhbmRyb2lkOmlkPSJAK2lkL3d2MyIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogICAgICAgICAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3Y1IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICAgICAgICAgIAogICAgICAgICA8V2ViVmlldyBhbmRyb2lkOmlkPSJAK2lkL3d2NiIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3Y3IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICAgICAgICAgIAogICAgICAgICA8V2ViVmlldyBhbmRyb2lkOmlkPSJAK2lkL3d2OCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djkiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogICAgICAgICAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3YxMCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L2FuZHJvaWRzLnBrbSBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9hbmRyb2lkcy5wa20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwN2U3ZQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9hbmRyb2lkcy5wa20KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvZHJhd2FibGUtbWRwaS9yb2JvdC5wbmcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvcm9ib3QucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL0FwaURlbW9zL3Jlcy9kcmF3YWJsZS1tZHBpL3JvYm90LnBuZwpyZW5hbWUgdG8gc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3JvYm90LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDAuanBnIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAwLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjg3ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAwLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDEuanBnIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGEwNmJjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAxLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDIuanBnIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmQ4ODZhCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDMuanBnIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAzLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzAwMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXAzLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDQuanBnIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXA0LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGJjNTQzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXA0LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDUuanBnIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXA1LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjllZDFiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L3NreWN1YmVtYXA1LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9hcnJheXMueG1sCmluZGV4IGNhMzAwM2YuLjc2YmY1MTggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9hcnJheXMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9hcnJheXMueG1sCkBAIC04NSw0ICs4NSwxMiBAQAogICAgICAgICA8aXRlbT5jaGFybGllPC9pdGVtPiAgCiAgICAgPC9zdHJpbmctYXJyYXk+CiAgICAgCisgICAgPCEtLSBVc2VkIGluIGFwcC9TYW1wbGUgRGV2aWNlIEFkbWluIC0tPgorICAgIDxzdHJpbmctYXJyYXkgbmFtZT0icGFzc3dvcmRfcXVhbGl0aWVzIj4KKyAgICAgICAgPGl0ZW0+VW5zcGVjaWZpZWQ8L2l0ZW0+CisgICAgICAgIDxpdGVtPlNvbWV0aGluZzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+TnVtZXJpYzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+QWxwaGFudW1lcmljPC9pdGVtPgorICAgIDwvc3RyaW5nLWFycmF5PgorCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCBiZGNiN2E3Li5jN2JiODRlIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0xMDksNiArMTA5LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9zZXJ2aWNlX2Nvbm5lY3RlZCI+Q29ubmVjdGVkIHRvIGxvY2FsIHNlcnZpY2U8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX3NlcnZpY2VfZGlzY29ubmVjdGVkIj5EaXNjb25uZWN0ZWQgZnJvbSBsb2NhbCBzZXJ2aWNlPC9zdHJpbmc+CiAKKyAgICA8c3RyaW5nIG5hbWU9ImFjdGl2aXR5X21lc3Nlbmdlcl9zZXJ2aWNlX2JpbmRpbmciPkFwcC9TZXJ2aWNlL01lc3NlbmdlciBTZXJ2aWNlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZXNzZW5nZXJfc2VydmljZV9iaW5kaW5nIj5UaGlzIGRlbW9uc3RyYXRlcyBob3cgeW91IGNhbiBjb21tdW5pY2F0ZSB3aXRoCisgICAgICAgIGEgcmVtb3RlIHNlcnZpY2UgdXNpbmcgTWVzc2VuZ2VyLjwvc3RyaW5nPgorCiAgICAgPHN0cmluZyBuYW1lPSJyZW1vdGVfc2VydmljZV9zdGFydGVkIj5SZW1vdGUgc2VydmljZSBoYXMgc3RhcnRlZDwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVtb3RlX3NlcnZpY2Vfc3RvcHBlZCI+UmVtb3RlIHNlcnZpY2UgaGFzIHN0b3BwZWQ8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlbW90ZV9zZXJ2aWNlX2xhYmVsIj5TYW1wbGUgUmVtb3RlIFNlcnZpY2U8L3N0cmluZz4KQEAgLTIyOCw2ICsyMzIsMTAgQEAKICAgICA8IS0tICBhcHAvY29udGVudCBleGFtcGxlcyBzdHJpbmdzICAtLT4KICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfZXh0ZXJuYWxfc3RvcmFnZSI+Q29udGVudC9TdG9yYWdlL0V4dGVybmFsIFN0b3JhZ2U8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZSI+Q3JlYXRlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiPkRlbGV0ZTwvc3RyaW5nPgorICAgIAogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfc3R5bGVkX3RleHQiPkNvbnRlbnQvUmVzb3VyY2VzLzxpPlN0eWxlZDwvaT4gPGI+VGV4dDwvYj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0eWxlZF90ZXh0X3JzcmMiPkluaXRpYWxpemVkIGZyb20gYSByZXNvdXJjZTo8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0eWxlZF90ZXh0Ij5QbGFpbiwgPGI+Ym9sZDwvYj4sIDxpPml0YWxpYzwvaT4sIDxiPjxpPmJvbGQtaXRhbGljPC9pPjwvYj48L3N0cmluZz4KQEAgLTQzNCw2ICs0NDIsMzAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2ludGVudCI+SW50ZW50Ojwvc3RyaW5nPgogICAgIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorICAgIDwhLS0gIGFwcC9kZXZpY2UgcG9saWNpZXMgZXhhbXBsZXMgc3RyaW5ncyAgICAgLS0+CisgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgICAgCisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9zYW1wbGVfZGV2aWNlX2FkbWluIj5BcHAvRGV2aWNlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYW1wbGVfZGV2aWNlX2FkbWluIj5TYW1wbGUgRGV2aWNlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYW1wbGVfZGV2aWNlX2FkbWluX2Rlc2NyaXB0aW9uIj5TYW1wbGUgY29kZSBmb3Igd3JpdGluZworICAgICAgICBhIERldmljZUFkbWluIGNsYXNzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIFVJIChpbiBBcGlEZW1vcykKKyAgICAgICAgZm9yIHlvdSB0byBkaXJlY3RseSBjb250cm9sIHdoYXQgdGhlIERldmljZUFkbWluIGRvZXMgd2l0aCB0aGUKKyAgICAgICAgc3lzdGVtLjwvc3RyaW5nPgorICAgICAgICAKKyAgICA8c3RyaW5nIG5hbWU9InNhbXBsZV9kZXZpY2VfYWRtaW5fc3VtbWFyeSI+RGVtb25zdHJhdGlvbiBvZiBhIERldmljZUFkbWluCisgICAgICAgIGNsYXNzIGZvciBhZG1pbmlzdGVyaW5nIHRoZSB1c2VyXCdzIGRldmljZS48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hZG1pbiI+RW5hYmxlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNhYmxlX2FkbWluIj5EaXNhYmxlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9xdWFsaXR5Ij5QYXNzd29yZCBRdWFsaXR5PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9sZW5ndGhfaGludCI+TWluaW11bSBMZW5ndGg8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNldF9wYXNzd29yZCI+U2V0IFBhc3N3b3JkPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9oaW50Ij5QYXNzd29yZDwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzZXRfcGFzc3dvcmQiPlJlc2V0IFBhc3N3b3JkPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfZmFpbGVkX3B3X2hpbnQiPlBhc3N3b3JkIEF0dGVtcHRzIFdpcGUgRGF0YTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfbG9jayI+Rm9yY2UgTG9jazwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lwZV9kYXRhIj5XaXBlIERhdGE8L3N0cmluZz4KKyAgICAKKyAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8IS0tICBhcHAvdm9pY2UgcmVjb2duaXRpb24gZXhhbXBsZXMgc3RyaW5ncyAgLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3htbC9kZXZpY2VfYWRtaW5fc2FtcGxlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3htbC9kZXZpY2VfYWRtaW5fc2FtcGxlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU4MDAzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMveG1sL2RldmljZV9hZG1pbl9zYW1wbGUueG1sCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8IS0tIEJFR0lOX0lOQ0xVREUobWV0YV9kYXRhKSAtLT4KKzxkZXZpY2UtYWRtaW4geG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKyAgICA8dXNlcy1wb2xpY2llcz4KKyAgICAgICAgPGxpbWl0LXBhc3N3b3JkIC8+CisgICAgICAgIDx3YXRjaC1sb2dpbiAvPgorICAgICAgICA8cmVzZXQtcGFzc3dvcmQgLz4KKyAgICAgICAgPGZvcmNlLWxvY2sgLz4KKyAgICAgICAgPHdpcGUtZGF0YSAvPgorICAgIDwvdXNlcy1wb2xpY2llcz4KKzwvZGV2aWNlLWFkbWluPgorPCEtLSBFTkRfSU5DTFVERShtZXRhX2RhdGEpIC0tPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9EZXZpY2VBZG1pblNhbXBsZS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9EZXZpY2VBZG1pblNhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NmE2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0RldmljZUFkbWluU2FtcGxlLmphdmEKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKK2ltcG9ydCBhbmRyb2lkLmFwcC5EZXZpY2VBZG1pblJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQuYXBwLkRldmljZVBvbGljeU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyOworCisvKioKKyAqIEV4YW1wbGUgb2YgYSBkby1ub3RoaW5nIGFkbWluIGNsYXNzLiAgV2hlbiBlbmFibGVkLCBpdCBsZXRzIHlvdSBjb250cm9sCisgKiBzb21lIG9mIGl0cyBwb2xpY3kgYW5kIHJlcG9ydHMgd2hlbiB0aGVyZSBpcyBpbnRlcmVzdGluZyBhY3Rpdml0eS4KKyAqLworcHVibGljIGNsYXNzIERldmljZUFkbWluU2FtcGxlIGV4dGVuZHMgRGV2aWNlQWRtaW5SZWNlaXZlciB7CisKKyAgICBzdGF0aWMgU2hhcmVkUHJlZmVyZW5jZXMgZ2V0U2FtcGxlUHJlZmVyZW5jZXMoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBjb250ZXh0LmdldFNoYXJlZFByZWZlcmVuY2VzKERldmljZUFkbWluUmVjZWl2ZXIuY2xhc3MuZ2V0TmFtZSgpLCAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFN0cmluZyBQUkVGX1BBU1NXT1JEX1FVQUxJVFkgPSAicGFzc3dvcmRfcXVhbGl0eSI7CisgICAgc3RhdGljIFN0cmluZyBQUkVGX1BBU1NXT1JEX0xFTkdUSCA9ICJwYXNzd29yZF9sZW5ndGgiOworICAgIHN0YXRpYyBTdHJpbmcgUFJFRl9NQVhfRkFJTEVEX1BXID0gIm1heF9mYWlsZWRfcHciOworICAgIAorICAgIHZvaWQgc2hvd1RvYXN0KENvbnRleHQgY29udGV4dCwgQ2hhclNlcXVlbmNlIG1zZykgeworICAgICAgICBUb2FzdC5tYWtlVGV4dChjb250ZXh0LCBtc2csIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkVuYWJsZWQoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHNob3dUb2FzdChjb250ZXh0LCAiU2FtcGxlIERldmljZSBBZG1pbjogZW5hYmxlZCIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDaGFyU2VxdWVuY2Ugb25EaXNhYmxlUmVxdWVzdGVkKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICByZXR1cm4gIlRoaXMgaXMgYW4gb3B0aW9uYWwgbWVzc2FnZSB0byB3YXJuIHRoZSB1c2VyIGFib3V0IGRpc2FibGluZy4iOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uRGlzYWJsZWQoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHNob3dUb2FzdChjb250ZXh0LCAiU2FtcGxlIERldmljZSBBZG1pbjogZGlzYWJsZWQiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblBhc3N3b3JkQ2hhbmdlZChDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc2hvd1RvYXN0KGNvbnRleHQsICJTYW1wbGUgRGV2aWNlIEFkbWluOiBwdyBjaGFuZ2VkIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25QYXNzd29yZEZhaWxlZChDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc2hvd1RvYXN0KGNvbnRleHQsICJTYW1wbGUgRGV2aWNlIEFkbWluOiBwdyBmYWlsZWQiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblBhc3N3b3JkU3VjY2VlZGVkKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICBzaG93VG9hc3QoY29udGV4dCwgIlNhbXBsZSBEZXZpY2UgQWRtaW46IHB3IHN1Y2NlZWRlZCIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIDxwPlVJIGNvbnRyb2wgZm9yIHRoZSBzYW1wbGUgZGV2aWNlIGFkbWluLiAgVGhpcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UKKyAgICAgKiB0byBlbmFibGUsIGRpc2FibGUsIGFuZCBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMgd2l0aCBpdCB0byBzZWUKKyAgICAgKiB0aGVpciBlZmZlY3QuPC9wPgorICAgICAqIAorICAgICAqIDxwPk5vdGUgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGFuIGlubmVyIGNsYXNzIG9ubHkga2VlcCB0aGUgc2FtcGxlCisgICAgICogYWxsIHRvZ2V0aGVyOyB0eXBpY2FsbHkgdGhpcyBjb2RlIHdvdWxkIGFwcGVhciBpbiBzb21lIHNlcGFyYXRlIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICAgICAgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfRU5BQkxFID0gMTsKKyAgICAgICAgCisgICAgICAgIERldmljZVBvbGljeU1hbmFnZXIgbURQTTsKKyAgICAgICAgQWN0aXZpdHlNYW5hZ2VyIG1BTTsKKyAgICAgICAgQ29tcG9uZW50TmFtZSBtRGV2aWNlQWRtaW5TYW1wbGU7CisgICAgICAgIAorICAgICAgICBCdXR0b24gbUVuYWJsZUJ1dHRvbjsKKyAgICAgICAgQnV0dG9uIG1EaXNhYmxlQnV0dG9uOworICAgICAgICAKKyAgICAgICAgLy8gUGFzc3dvcmQgcXVhbGl0eSBzcGlubmVyIGNob2ljZXMKKyAgICAgICAgLy8gVGhpcyBsaXN0IG11c3QgbWF0Y2ggdGhlIGxpc3QgZm91bmQgaW4gc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL2FycmF5cy54bWwKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBtUGFzc3dvcmRRdWFsaXR5VmFsdWVzW10gPSBuZXcgaW50W10geworICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVELAorICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1NPTUVUSElORywKKyAgICAgICAgICAgIERldmljZVBvbGljeU1hbmFnZXIuUEFTU1dPUkRfUVVBTElUWV9OVU1FUklDLAorICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX0FMUEhBTlVNRVJJQworICAgICAgICB9OworICAgICAgICBTcGlubmVyIG1QYXNzd29yZFF1YWxpdHk7CisgICAgICAgIEVkaXRUZXh0IG1QYXNzd29yZExlbmd0aDsKKyAgICAgICAgQnV0dG9uIG1TZXRQYXNzd29yZEJ1dHRvbjsKKyAgICAgICAgCisgICAgICAgIEVkaXRUZXh0IG1QYXNzd29yZDsKKyAgICAgICAgQnV0dG9uIG1SZXNldFBhc3N3b3JkQnV0dG9uOworICAgICAgICAKKyAgICAgICAgRWRpdFRleHQgbU1heEZhaWxlZFB3OworICAgICAgICAKKyAgICAgICAgQnV0dG9uIG1Gb3JjZUxvY2tCdXR0b247CisgICAgICAgIEJ1dHRvbiBtV2lwZURhdGFCdXR0b247CisgICAgICAgIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICAgICAgbURQTSA9IChEZXZpY2VQb2xpY3lNYW5hZ2VyKWdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5ERVZJQ0VfUE9MSUNZX1NFUlZJQ0UpOworICAgICAgICAgICAgbUFNID0gKEFjdGl2aXR5TWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQUNUSVZJVFlfU0VSVklDRSk7CisgICAgICAgICAgICBtRGV2aWNlQWRtaW5TYW1wbGUgPSBuZXcgQ29tcG9uZW50TmFtZShDb250cm9sbGVyLnRoaXMsIERldmljZUFkbWluU2FtcGxlLmNsYXNzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuZGV2aWNlX2FkbWluX3NhbXBsZSk7CisKKyAgICAgICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgorICAgICAgICAgICAgbUVuYWJsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZW5hYmxlKTsKKyAgICAgICAgICAgIG1FbmFibGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1FbmFibGVMaXN0ZW5lcik7CisgICAgICAgICAgICBtRGlzYWJsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZGlzYWJsZSk7CisgICAgICAgICAgICBtRGlzYWJsZUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobURpc2FibGVMaXN0ZW5lcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1QYXNzd29yZFF1YWxpdHkgPSAoU3Bpbm5lcilmaW5kVmlld0J5SWQoUi5pZC5wYXNzd29yZF9xdWFsaXR5KTsKKyAgICAgICAgICAgIEFycmF5QWRhcHRlcjxDaGFyU2VxdWVuY2U+IGFkYXB0ZXIgPSBBcnJheUFkYXB0ZXIuY3JlYXRlRnJvbVJlc291cmNlKAorICAgICAgICAgICAgICAgICAgICB0aGlzLCBSLmFycmF5LnBhc3N3b3JkX3F1YWxpdGllcywgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfc3Bpbm5lcl9pdGVtKTsKKyAgICAgICAgICAgIGFkYXB0ZXIuc2V0RHJvcERvd25WaWV3UmVzb3VyY2UoYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfc3Bpbm5lcl9kcm9wZG93bl9pdGVtKTsKKyAgICAgICAgICAgIG1QYXNzd29yZFF1YWxpdHkuc2V0QWRhcHRlcihhZGFwdGVyKTsKKyAgICAgICAgICAgIG1QYXNzd29yZFF1YWxpdHkuc2V0T25JdGVtU2VsZWN0ZWRMaXN0ZW5lcigKKyAgICAgICAgICAgICAgICAgICAgbmV3IE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TZWxlY3RlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhcHRlclZpZXc8Pz4gcGFyZW50LCBWaWV3IHZpZXcsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhc3N3b3JkUXVhbGl0eShtUGFzc3dvcmRRdWFsaXR5VmFsdWVzW3Bvc2l0aW9uXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aGluZ1NlbGVjdGVkKEFkYXB0ZXJWaWV3PD8+IHBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhc3N3b3JkUXVhbGl0eShEZXZpY2VQb2xpY3lNYW5hZ2VyLlBBU1NXT1JEX1FVQUxJVFlfVU5TUEVDSUZJRUQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1QYXNzd29yZExlbmd0aCA9IChFZGl0VGV4dClmaW5kVmlld0J5SWQoUi5pZC5wYXNzd29yZF9sZW5ndGgpOworICAgICAgICAgICAgbVBhc3N3b3JkTGVuZ3RoLmFkZFRleHRDaGFuZ2VkTGlzdGVuZXIobmV3IFRleHRXYXRjaGVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFmdGVyVGV4dENoYW5nZWQoRWRpdGFibGUgcykgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXh0Q2hhbmdlZChDaGFyU2VxdWVuY2UgcywgaW50IHN0YXJ0LCBpbnQgY291bnQsIGludCBhZnRlcikgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblRleHRDaGFuZ2VkKENoYXJTZXF1ZW5jZSBzLCBpbnQgc3RhcnQsIGludCBiZWZvcmUsIGludCBjb3VudCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFzc3dvcmRMZW5ndGgoSW50ZWdlci5wYXJzZUludChzLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbVNldFBhc3N3b3JkQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zZXRfcGFzc3dvcmQpOworICAgICAgICAgICAgbVNldFBhc3N3b3JkQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU2V0UGFzc3dvcmRMaXN0ZW5lcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1QYXNzd29yZCA9IChFZGl0VGV4dClmaW5kVmlld0J5SWQoUi5pZC5wYXNzd29yZCk7CisgICAgICAgICAgICBtUmVzZXRQYXNzd29yZEJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQucmVzZXRfcGFzc3dvcmQpOworICAgICAgICAgICAgbVJlc2V0UGFzc3dvcmRCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1SZXNldFBhc3N3b3JkTGlzdGVuZXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtTWF4RmFpbGVkUHcgPSAoRWRpdFRleHQpZmluZFZpZXdCeUlkKFIuaWQubWF4X2ZhaWxlZF9wdyk7CisgICAgICAgICAgICBtTWF4RmFpbGVkUHcuYWRkVGV4dENoYW5nZWRMaXN0ZW5lcihuZXcgVGV4dFdhdGNoZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYWZ0ZXJUZXh0Q2hhbmdlZChFZGl0YWJsZSBzKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZVRleHRDaGFuZ2VkKENoYXJTZXF1ZW5jZSBzLCBpbnQgc3RhcnQsIGludCBjb3VudCwgaW50IGFmdGVyKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGJlZm9yZSwgaW50IGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4RmFpbENvdW50ID0gSW50ZWdlci5wYXJzZUludChzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heEZhaWxDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChDb250cm9sbGVyLnRoaXMsICJXQVJOSU5HOiBQaG9uZSB3aWxsIHdpcGUgYWZ0ZXIgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICsgIiBpbmNvcnJlY3QgcGFzc3dvcmRzIiwgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXhGYWlsZWRQdyhtYXhGYWlsQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1Gb3JjZUxvY2tCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmZvcmNlX2xvY2spOworICAgICAgICAgICAgbUZvcmNlTG9ja0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUZvcmNlTG9ja0xpc3RlbmVyKTsKKyAgICAgICAgICAgIG1XaXBlRGF0YUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQud2lwZV9kYXRhKTsKKyAgICAgICAgICAgIG1XaXBlRGF0YUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVdpcGVEYXRhTGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB1cGRhdGVCdXR0b25TdGF0ZXMoKSB7CisgICAgICAgICAgICBib29sZWFuIGFjdGl2ZSA9IG1EUE0uaXNBZG1pbkFjdGl2ZShtRGV2aWNlQWRtaW5TYW1wbGUpOworICAgICAgICAgICAgaWYgKGFjdGl2ZSkgeworICAgICAgICAgICAgICAgIG1FbmFibGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbURpc2FibGVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtUGFzc3dvcmRRdWFsaXR5LnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbVBhc3N3b3JkTGVuZ3RoLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbVNldFBhc3N3b3JkQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbVBhc3N3b3JkLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbVJlc2V0UGFzc3dvcmRCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtRm9yY2VMb2NrQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbVdpcGVEYXRhQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1FbmFibGVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtRGlzYWJsZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtUGFzc3dvcmRRdWFsaXR5LnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1QYXNzd29yZExlbmd0aC5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtU2V0UGFzc3dvcmRCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbVBhc3N3b3JkLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1SZXNldFBhc3N3b3JkQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1Gb3JjZUxvY2tCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbVdpcGVEYXRhQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHVwZGF0ZUNvbnRyb2xzKCkgeworICAgICAgICAgICAgU2hhcmVkUHJlZmVyZW5jZXMgcHJlZnMgPSBnZXRTYW1wbGVQcmVmZXJlbmNlcyh0aGlzKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBwd1F1YWxpdHkgPSBwcmVmcy5nZXRJbnQoUFJFRl9QQVNTV09SRF9RVUFMSVRZLAorICAgICAgICAgICAgICAgICAgICBEZXZpY2VQb2xpY3lNYW5hZ2VyLlBBU1NXT1JEX1FVQUxJVFlfVU5TUEVDSUZJRUQpOworICAgICAgICAgICAgZmluYWwgaW50IHB3TGVuZ3RoID0gcHJlZnMuZ2V0SW50KFBSRUZfUEFTU1dPUkRfTEVOR1RILCAwKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBtYXhGYWlsZWRQdyA9IHByZWZzLmdldEludChQUkVGX01BWF9GQUlMRURfUFcsIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bVBhc3N3b3JkUXVhbGl0eVZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtUGFzc3dvcmRRdWFsaXR5VmFsdWVzW2ldID09IHB3UXVhbGl0eSkgeworICAgICAgICAgICAgICAgICAgICBtUGFzc3dvcmRRdWFsaXR5LnNldFNlbGVjdGlvbihpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtUGFzc3dvcmRMZW5ndGguc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKHB3TGVuZ3RoKSk7CisgICAgICAgICAgICBtTWF4RmFpbGVkUHcuc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKG1heEZhaWxlZFB3KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgdXBkYXRlUG9saWNpZXMoKSB7CisgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcyA9IGdldFNhbXBsZVByZWZlcmVuY2VzKHRoaXMpOworICAgICAgICAgICAgZmluYWwgaW50IHB3UXVhbGl0eSA9IHByZWZzLmdldEludChQUkVGX1BBU1NXT1JEX1FVQUxJVFksCisgICAgICAgICAgICAgICAgICAgIERldmljZVBvbGljeU1hbmFnZXIuUEFTU1dPUkRfUVVBTElUWV9VTlNQRUNJRklFRCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgcHdMZW5ndGggPSBwcmVmcy5nZXRJbnQoUFJFRl9QQVNTV09SRF9MRU5HVEgsIDApOworICAgICAgICAgICAgZmluYWwgaW50IG1heEZhaWxlZFB3ID0gcHJlZnMuZ2V0SW50KFBSRUZfTUFYX0ZBSUxFRF9QVywgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2xlYW4gYWN0aXZlID0gbURQTS5pc0FkbWluQWN0aXZlKG1EZXZpY2VBZG1pblNhbXBsZSk7CisgICAgICAgICAgICBpZiAoYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgbURQTS5zZXRQYXNzd29yZFF1YWxpdHkobURldmljZUFkbWluU2FtcGxlLCBwd1F1YWxpdHkpOworICAgICAgICAgICAgICAgIG1EUE0uc2V0UGFzc3dvcmRNaW5pbXVtTGVuZ3RoKG1EZXZpY2VBZG1pblNhbXBsZSwgcHdMZW5ndGgpOworICAgICAgICAgICAgICAgIG1EUE0uc2V0TWF4aW11bUZhaWxlZFBhc3N3b3Jkc0ZvcldpcGUobURldmljZUFkbWluU2FtcGxlLCBtYXhGYWlsZWRQdyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0UGFzc3dvcmRRdWFsaXR5KGludCBxdWFsaXR5KSB7CisgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcyA9IGdldFNhbXBsZVByZWZlcmVuY2VzKHRoaXMpOworICAgICAgICAgICAgcHJlZnMuZWRpdCgpLnB1dEludChQUkVGX1BBU1NXT1JEX1FVQUxJVFksIHF1YWxpdHkpLmNvbW1pdCgpOworICAgICAgICAgICAgdXBkYXRlUG9saWNpZXMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRQYXNzd29yZExlbmd0aChpbnQgbGVuZ3RoKSB7CisgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcyA9IGdldFNhbXBsZVByZWZlcmVuY2VzKHRoaXMpOworICAgICAgICAgICAgcHJlZnMuZWRpdCgpLnB1dEludChQUkVGX1BBU1NXT1JEX0xFTkdUSCwgbGVuZ3RoKS5jb21taXQoKTsKKyAgICAgICAgICAgIHVwZGF0ZVBvbGljaWVzKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0TWF4RmFpbGVkUHcoaW50IGxlbmd0aCkgeworICAgICAgICAgICAgU2hhcmVkUHJlZmVyZW5jZXMgcHJlZnMgPSBnZXRTYW1wbGVQcmVmZXJlbmNlcyh0aGlzKTsKKyAgICAgICAgICAgIHByZWZzLmVkaXQoKS5wdXRJbnQoUFJFRl9NQVhfRkFJTEVEX1BXLCBsZW5ndGgpLmNvbW1pdCgpOworICAgICAgICAgICAgdXBkYXRlUG9saWNpZXMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlcygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQWN0aXZpdHlSZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBpbnQgcmVzdWx0Q29kZSwgSW50ZW50IGRhdGEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocmVxdWVzdENvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJFU1VMVF9FTkFCTEU6CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRDb2RlID09IEFjdGl2aXR5LlJFU1VMVF9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoIkRldmljZUFkbWluU2FtcGxlIiwgIkFkbWluIGVuYWJsZWQhIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuaSgiRGV2aWNlQWRtaW5TYW1wbGUiLCAiQWRtaW4gZW5hYmxlIEZBSUxFRCEiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN1cGVyLm9uQWN0aXZpdHlSZXN1bHQocmVxdWVzdENvZGUsIHJlc3VsdENvZGUsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUVuYWJsZUxpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gTGF1bmNoIHRoZSBhY3Rpdml0eSB0byBoYXZlIHRoZSB1c2VyIGVuYWJsZSBvdXIgYWRtaW4uCisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoRGV2aWNlUG9saWN5TWFuYWdlci5BQ1RJT05fQUREX0RFVklDRV9BRE1JTik7CisgICAgICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKERldmljZVBvbGljeU1hbmFnZXIuRVhUUkFfREVWSUNFX0FETUlOLAorICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUFkbWluU2FtcGxlKTsKKyAgICAgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoRGV2aWNlUG9saWN5TWFuYWdlci5FWFRSQV9BRERfRVhQTEFOQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAiQWRkaXRpb25hbCB0ZXh0IGV4cGxhaW5pbmcgd2h5IHRoaXMgbmVlZHMgdG8gYmUgYWRkZWQuIik7CisgICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIFJFU1VMVF9FTkFCTEUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1EaXNhYmxlTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBtRFBNLnJlbW92ZUFjdGl2ZUFkbWluKG1EZXZpY2VBZG1pblNhbXBsZSk7CisgICAgICAgICAgICAgICAgdXBkYXRlQnV0dG9uU3RhdGVzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVNldFBhc3N3b3JkTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBMYXVuY2ggdGhlIGFjdGl2aXR5IHRvIGhhdmUgdGhlIHVzZXIgc2V0IGEgbmV3IHBhc3N3b3JkLgorICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KERldmljZVBvbGljeU1hbmFnZXIuQUNUSU9OX1NFVF9ORVdfUEFTU1dPUkQpOworICAgICAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtUmVzZXRQYXNzd29yZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgaWYgKG1BTS5pc1VzZXJBTW9ua2V5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgdHJ1c3QgbW9ua2V5cyB0byBkbyB0aGUgcmlnaHQgdGhpbmchCisgICAgICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKENvbnRyb2xsZXIudGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TWVzc2FnZSgiWW91IGNhbid0IHJlc2V0IG15IHBhc3N3b3JkIGJlY2F1c2UgeW91IGFyZSBhIG1vbmtleSEiKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRQb3NpdGl2ZUJ1dHRvbigiSSBhZG1pdCBkZWZlYXQiLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbGVhbiBhY3RpdmUgPSBtRFBNLmlzQWRtaW5BY3RpdmUobURldmljZUFkbWluU2FtcGxlKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgIG1EUE0ucmVzZXRQYXNzd29yZChtUGFzc3dvcmQuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtRm9yY2VMb2NrTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFNLmlzVXNlckFNb25rZXkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCB0cnVzdCBtb25rZXlzIHRvIGRvIHRoZSByaWdodCB0aGluZyEKKyAgICAgICAgICAgICAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoQ29udHJvbGxlci50aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRNZXNzYWdlKCJZb3UgY2FuJ3QgbG9jayBteSBzY3JlZW4gYmVjYXVzZSB5b3UgYXJlIGEgbW9ua2V5ISIpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNldFBvc2l0aXZlQnV0dG9uKCJJIGFkbWl0IGRlZmVhdCIsIG51bGwpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib29sZWFuIGFjdGl2ZSA9IG1EUE0uaXNBZG1pbkFjdGl2ZShtRGV2aWNlQWRtaW5TYW1wbGUpOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgbURQTS5sb2NrTm93KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1XaXBlRGF0YUxpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgaWYgKG1BTS5pc1VzZXJBTW9ua2V5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgdHJ1c3QgbW9ua2V5cyB0byBkbyB0aGUgcmlnaHQgdGhpbmchCisgICAgICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKENvbnRyb2xsZXIudGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TWVzc2FnZSgiWW91IGNhbid0IHdpcGUgbXkgZGF0YSBiZWNhdXNlIHlvdSBhcmUgYSBtb25rZXkhIik7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UG9zaXRpdmVCdXR0b24oIkkgYWRtaXQgZGVmZWF0IiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2hvdygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKENvbnRyb2xsZXIudGhpcyk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRNZXNzYWdlKCJUaGlzIHdpbGwgZXJhc2UgYWxsIG9mIHlvdXIgZGF0YS4gIEFyZSB5b3Ugc3VyZT8iKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNldFBvc2l0aXZlQnV0dG9uKCJZZXMiLCBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKENvbnRyb2xsZXIudGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNldE1lc3NhZ2UoIlRoaXMgaXMgbm90IGEgdGVzdC4gICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiVGhpcyBXSUxMIGVyYXNlIGFsbCBvZiB5b3VyIGRhdGEhICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkFyZSB5b3UgcmVhbGx5IGFic29sdXRlbHkgc3VyZT8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UG9zaXRpdmVCdXR0b24oIkJPT00hIiwgbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhY3RpdmUgPSBtRFBNLmlzQWRtaW5BY3RpdmUobURldmljZUFkbWluU2FtcGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURQTS53aXBlRGF0YSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXROZWdhdGl2ZUJ1dHRvbigiT29wcywgcnVuIGF3YXkhIiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TmVnYXRpdmVCdXR0b24oIk5vIHdheSEiLCBudWxsKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNob3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0ZvcmVncm91bmRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0ZvcmVncm91bmRTZXJ2aWNlLmphdmEKaW5kZXggMjc3MDhmNC4uYzdhMmRmYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Gb3JlZ3JvdW5kU2VydmljZS5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRm9yZWdyb3VuZFNlcnZpY2UuamF2YQpAQCAtMTYsMTMgKzE2LDE4IEBACiAKIHBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKQEAgLTQzLDYgKzQ4LDcgQEAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9GT1JFR1JPVU5EID0gImNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5GT1JFR1JPVU5EIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9CQUNLR1JPVU5EID0gImNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5CQUNLR1JPVU5EIjsKICAgICAKKyAvLyBCRUdJTl9JTkNMVURFKGZvcmVncm91bmRfY29tcGF0aWJpbGl0eSkKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzc1tdIG1TdGFydEZvcmVncm91bmRTaWduYXR1cmUgPSBuZXcgQ2xhc3NbXSB7CiAgICAgICAgIGludC5jbGFzcywgTm90aWZpY2F0aW9uLmNsYXNzfTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzc1tdIG1TdG9wRm9yZWdyb3VuZFNpZ25hdHVyZSA9IG5ldyBDbGFzc1tdIHsKQEAgLTU0LDYwICs2MCw2IEBACiAgICAgcHJpdmF0ZSBPYmplY3RbXSBtU3RhcnRGb3JlZ3JvdW5kQXJncyA9IG5ldyBPYmplY3RbMl07CiAgICAgcHJpdmF0ZSBPYmplY3RbXSBtU3RvcEZvcmVncm91bmRBcmdzID0gbmV3IE9iamVjdFsxXTsKICAgICAKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKLSAgICAgICAgbU5NID0gKE5vdGlmaWNhdGlvbk1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShOT1RJRklDQVRJT05fU0VSVklDRSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtU3RhcnRGb3JlZ3JvdW5kID0gZ2V0Q2xhc3MoKS5nZXRNZXRob2QoInN0YXJ0Rm9yZWdyb3VuZCIsCi0gICAgICAgICAgICAgICAgICAgIG1TdGFydEZvcmVncm91bmRTaWduYXR1cmUpOwotICAgICAgICAgICAgbVN0b3BGb3JlZ3JvdW5kID0gZ2V0Q2xhc3MoKS5nZXRNZXRob2QoInN0b3BGb3JlZ3JvdW5kIiwKLSAgICAgICAgICAgICAgICAgICAgbVN0b3BGb3JlZ3JvdW5kU2lnbmF0dXJlKTsKLSAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIFJ1bm5pbmcgb24gYW4gb2xkZXIgcGxhdGZvcm0uCi0gICAgICAgICAgICBtU3RhcnRGb3JlZ3JvdW5kID0gbVN0b3BGb3JlZ3JvdW5kID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIG9sZCBvblN0YXJ0IG1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBwcmUtMi4wCi0gICAgLy8gcGxhdGZvcm0uICBPbiAyLjAgb3IgbGF0ZXIgd2Ugb3ZlcnJpZGUgb25TdGFydENvbW1hbmQoKSBzbyB0aGlzCi0gICAgLy8gbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZC4KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN0YXJ0KEludGVudCBpbnRlbnQsIGludCBzdGFydElkKSB7Ci0gICAgICAgIGhhbmRsZUNvbW1hbmQoaW50ZW50KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IG9uU3RhcnRDb21tYW5kKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IHN0YXJ0SWQpIHsKLSAgICAgICAgaGFuZGxlQ29tbWFuZChpbnRlbnQpOwotICAgICAgICAvLyBXZSB3YW50IHRoaXMgc2VydmljZSB0byBjb250aW51ZSBydW5uaW5nIHVudGlsIGl0IGlzIGV4cGxpY2l0bHkKLSAgICAgICAgLy8gc3RvcHBlZCwgc28gcmV0dXJuIHN0aWNreS4KLSAgICAgICAgcmV0dXJuIFNUQVJUX1NUSUNLWTsKLSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZUNvbW1hbmQoSW50ZW50IGludGVudCkgewotICAgICAgICBpZiAoQUNUSU9OX0ZPUkVHUk9VTkQuZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIC8vIEluIHRoaXMgc2FtcGxlLCB3ZSdsbCB1c2UgdGhlIHNhbWUgdGV4dCBmb3IgdGhlIHRpY2tlciBhbmQgdGhlIGV4cGFuZGVkIG5vdGlmaWNhdGlvbgotICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHRleHQgPSBnZXRUZXh0KFIuc3RyaW5nLmZvcmVncm91bmRfc2VydmljZV9zdGFydGVkKTsKLQotICAgICAgICAgICAgLy8gU2V0IHRoZSBpY29uLCBzY3JvbGxpbmcgdGV4dCBhbmQgdGltZXN0YW1wCi0gICAgICAgICAgICBOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbihSLmRyYXdhYmxlLnN0YXRfc2FtcGxlLCB0ZXh0LAotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBQZW5kaW5nSW50ZW50IHRvIGxhdW5jaCBvdXIgYWN0aXZpdHkgaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGlzIG5vdGlmaWNhdGlvbgotICAgICAgICAgICAgUGVuZGluZ0ludGVudCBjb250ZW50SW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRBY3Rpdml0eSh0aGlzLCAwLAotICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50KHRoaXMsIEZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlci5jbGFzcyksIDApOwotCi0gICAgICAgICAgICAvLyBTZXQgdGhlIGluZm8gZm9yIHRoZSB2aWV3cyB0aGF0IHNob3cgaW4gdGhlIG5vdGlmaWNhdGlvbiBwYW5lbC4KLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zZXRMYXRlc3RFdmVudEluZm8odGhpcywgZ2V0VGV4dChSLnN0cmluZy5sb2NhbF9zZXJ2aWNlX2xhYmVsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsIGNvbnRlbnRJbnRlbnQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGFydEZvcmVncm91bmRDb21wYXQoUi5zdHJpbmcuZm9yZWdyb3VuZF9zZXJ2aWNlX3N0YXJ0ZWQsIG5vdGlmaWNhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIGlmIChBQ1RJT05fQkFDS0dST1VORC5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgewotICAgICAgICAgICAgc3RvcEZvcmVncm91bmRDb21wYXQoUi5zdHJpbmcuZm9yZWdyb3VuZF9zZXJ2aWNlX3N0YXJ0ZWQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIC8qKgogICAgICAqIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmV3IHN0YXJ0Rm9yZWdyb3VuZCBtZXRob2QsIHVzaW5nIHRoZSBvbGRlcgogICAgICAqIEFQSXMgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KQEAgLTE2MSwxMyArMTEzLDExOCBAQAogICAgIH0KICAgICAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKKyAgICAgICAgbU5NID0gKE5vdGlmaWNhdGlvbk1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShOT1RJRklDQVRJT05fU0VSVklDRSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU3RhcnRGb3JlZ3JvdW5kID0gZ2V0Q2xhc3MoKS5nZXRNZXRob2QoInN0YXJ0Rm9yZWdyb3VuZCIsCisgICAgICAgICAgICAgICAgICAgIG1TdGFydEZvcmVncm91bmRTaWduYXR1cmUpOworICAgICAgICAgICAgbVN0b3BGb3JlZ3JvdW5kID0gZ2V0Q2xhc3MoKS5nZXRNZXRob2QoInN0b3BGb3JlZ3JvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgbVN0b3BGb3JlZ3JvdW5kU2lnbmF0dXJlKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFJ1bm5pbmcgb24gYW4gb2xkZXIgcGxhdGZvcm0uCisgICAgICAgICAgICBtU3RhcnRGb3JlZ3JvdW5kID0gbVN0b3BGb3JlZ3JvdW5kID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBub3RpZmljYXRpb24gaXMgZ29uZS4KICAgICAgICAgc3RvcEZvcmVncm91bmRDb21wYXQoUi5zdHJpbmcuZm9yZWdyb3VuZF9zZXJ2aWNlX3N0YXJ0ZWQpOwogICAgIH0KKy8vIEVORF9JTkNMVURFKGZvcmVncm91bmRfY29tcGF0aWJpbGl0eSkKIAorLy8gQkVHSU5fSU5DTFVERShzdGFydF9jb21wYXRpYmlsaXR5KQorICAgIC8vIFRoaXMgaXMgdGhlIG9sZCBvblN0YXJ0IG1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBwcmUtMi4wCisgICAgLy8gcGxhdGZvcm0uICBPbiAyLjAgb3IgbGF0ZXIgd2Ugb3ZlcnJpZGUgb25TdGFydENvbW1hbmQoKSBzbyB0aGlzCisgICAgLy8gbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZC4KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0YXJ0KEludGVudCBpbnRlbnQsIGludCBzdGFydElkKSB7CisgICAgICAgIGhhbmRsZUNvbW1hbmQoaW50ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IG9uU3RhcnRDb21tYW5kKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IHN0YXJ0SWQpIHsKKyAgICAgICAgaGFuZGxlQ29tbWFuZChpbnRlbnQpOworICAgICAgICAvLyBXZSB3YW50IHRoaXMgc2VydmljZSB0byBjb250aW51ZSBydW5uaW5nIHVudGlsIGl0IGlzIGV4cGxpY2l0bHkKKyAgICAgICAgLy8gc3RvcHBlZCwgc28gcmV0dXJuIHN0aWNreS4KKyAgICAgICAgcmV0dXJuIFNUQVJUX1NUSUNLWTsKKyAgICB9CisvLyBFTkRfSU5DTFVERShzdGFydF9jb21wYXRpYmlsaXR5KQorCisgICAgdm9pZCBoYW5kbGVDb21tYW5kKEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgaWYgKEFDVElPTl9GT1JFR1JPVU5ELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICAvLyBJbiB0aGlzIHNhbXBsZSwgd2UnbGwgdXNlIHRoZSBzYW1lIHRleHQgZm9yIHRoZSB0aWNrZXIgYW5kIHRoZSBleHBhbmRlZCBub3RpZmljYXRpb24KKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSB0ZXh0ID0gZ2V0VGV4dChSLnN0cmluZy5mb3JlZ3JvdW5kX3NlcnZpY2Vfc3RhcnRlZCk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgaWNvbiwgc2Nyb2xsaW5nIHRleHQgYW5kIHRpbWVzdGFtcAorICAgICAgICAgICAgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oUi5kcmF3YWJsZS5zdGF0X3NhbXBsZSwgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOworCisgICAgICAgICAgICAvLyBUaGUgUGVuZGluZ0ludGVudCB0byBsYXVuY2ggb3VyIGFjdGl2aXR5IGlmIHRoZSB1c2VyIHNlbGVjdHMgdGhpcyBub3RpZmljYXRpb24KKyAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQgY29udGVudEludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkodGhpcywgMCwKKyAgICAgICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBDb250cm9sbGVyLmNsYXNzKSwgMCk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgaW5mbyBmb3IgdGhlIHZpZXdzIHRoYXQgc2hvdyBpbiB0aGUgbm90aWZpY2F0aW9uIHBhbmVsLgorICAgICAgICAgICAgbm90aWZpY2F0aW9uLnNldExhdGVzdEV2ZW50SW5mbyh0aGlzLCBnZXRUZXh0KFIuc3RyaW5nLmxvY2FsX3NlcnZpY2VfbGFiZWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwgY29udGVudEludGVudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXJ0Rm9yZWdyb3VuZENvbXBhdChSLnN0cmluZy5mb3JlZ3JvdW5kX3NlcnZpY2Vfc3RhcnRlZCwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKEFDVElPTl9CQUNLR1JPVU5ELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICBzdG9wRm9yZWdyb3VuZENvbXBhdChSLnN0cmluZy5mb3JlZ3JvdW5kX3NlcnZpY2Vfc3RhcnRlZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQorICAgIAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIDxwPkV4YW1wbGUgb2YgZXhwbGljaXRseSBzdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIHtAbGluayBGb3JlZ3JvdW5kU2VydmljZX0uCisgICAgICogCisgICAgICogPHA+Tm90ZSB0aGF0IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4gaW5uZXIgY2xhc3Mgb25seSBrZWVwIHRoZSBzYW1wbGUKKyAgICAgKiBhbGwgdG9nZXRoZXI7IHR5cGljYWxseSB0aGlzIGNvZGUgd291bGQgYXBwZWFyIGluIHNvbWUgc2VwYXJhdGUgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250cm9sbGVyIGV4dGVuZHMgQWN0aXZpdHkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuZm9yZWdyb3VuZF9zZXJ2aWNlX2NvbnRyb2xsZXIpOworCisgICAgICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KKyAgICAgICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0X2ZvcmVncm91bmQpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtRm9yZWdyb3VuZExpc3RlbmVyKTsKKyAgICAgICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRfYmFja2dyb3VuZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1CYWNrZ3JvdW5kTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtRm9yZWdyb3VuZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoRm9yZWdyb3VuZFNlcnZpY2UuQUNUSU9OX0ZPUkVHUk9VTkQpOworICAgICAgICAgICAgICAgIGludGVudC5zZXRDbGFzcyhDb250cm9sbGVyLnRoaXMsIEZvcmVncm91bmRTZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UoaW50ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtQmFja2dyb3VuZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoRm9yZWdyb3VuZFNlcnZpY2UuQUNUSU9OX0JBQ0tHUk9VTkQpOworICAgICAgICAgICAgICAgIGludGVudC5zZXRDbGFzcyhDb250cm9sbGVyLnRoaXMsIEZvcmVncm91bmRTZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UoaW50ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RvcExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgc3RvcFNlcnZpY2UobmV3IEludGVudChDb250cm9sbGVyLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JlZ3JvdW5kU2VydmljZS5jbGFzcykpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0ZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmE2ZWYzLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwotCi0vLyBOZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKLS8vIGNsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCi1pbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247Ci0KLQotLyoqCi0gKiA8cD5FeGFtcGxlIG9mIGV4cGxpY2l0bHkgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSB7QGxpbmsgRm9yZWdyb3VuZFNlcnZpY2V9LgotICovCi1wdWJsaWMgY2xhc3MgRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyIGV4dGVuZHMgQWN0aXZpdHkgewotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlcik7Ci0KLSAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCi0gICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0X2ZvcmVncm91bmQpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1Gb3JlZ3JvdW5kTGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0X2JhY2tncm91bmQpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1CYWNrZ3JvdW5kTGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3ApOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdG9wTGlzdGVuZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1Gb3JlZ3JvdW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoRm9yZWdyb3VuZFNlcnZpY2UuQUNUSU9OX0ZPUkVHUk9VTkQpOwotICAgICAgICAgICAgaW50ZW50LnNldENsYXNzKEZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlci50aGlzLCBGb3JlZ3JvdW5kU2VydmljZS5jbGFzcyk7Ci0gICAgICAgICAgICBzdGFydFNlcnZpY2UoaW50ZW50KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtQmFja2dyb3VuZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEZvcmVncm91bmRTZXJ2aWNlLkFDVElPTl9CQUNLR1JPVU5EKTsKLSAgICAgICAgICAgIGludGVudC5zZXRDbGFzcyhGb3JlZ3JvdW5kU2VydmljZUNvbnRyb2xsZXIudGhpcywgRm9yZWdyb3VuZFNlcnZpY2UuY2xhc3MpOwotICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKGludGVudCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0b3BMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBzdG9wU2VydmljZShuZXcgSW50ZW50KEZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlci50aGlzLAotICAgICAgICAgICAgICAgICAgICBGb3JlZ3JvdW5kU2VydmljZS5jbGFzcykpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9MYXVuY2hpbmdQcmVmZXJlbmNlcy5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9MYXVuY2hpbmdQcmVmZXJlbmNlcy5qYXZhCmluZGV4IGFhMTUxZmUuLjRhYTE1MjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTGF1bmNoaW5nUHJlZmVyZW5jZXMuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xhdW5jaGluZ1ByZWZlcmVuY2VzLmphdmEKQEAgLTI4LDcgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dC5MYXlvdXRQYXJhbXM7CiAKIC8qKgpAQCAtNjMsMTEgKzYyLDExIEBACiAgICAgICAgIEJ1dHRvbiBsYXVuY2hQcmVmZXJlbmNlcyA9IG5ldyBCdXR0b24odGhpcyk7CiAgICAgICAgIGxhdW5jaFByZWZlcmVuY2VzLnNldFRleHQoZ2V0U3RyaW5nKFIuc3RyaW5nLmxhdW5jaF9wcmVmZXJlbmNlX2FjdGl2aXR5KSk7CiAgICAgICAgIGxhdW5jaFByZWZlcmVuY2VzLnNldE9uQ2xpY2tMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgbGF5b3V0LmFkZFZpZXcobGF1bmNoUHJlZmVyZW5jZXMsIG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICBsYXlvdXQuYWRkVmlldyhsYXVuY2hQcmVmZXJlbmNlcywgbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAogICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKICAgICAgICAgCiAgICAgICAgIG1Db3VudGVyVGV4dCA9IG5ldyBUZXh0Vmlldyh0aGlzKTsKLSAgICAgICAgbGF5b3V0LmFkZFZpZXcobUNvdW50ZXJUZXh0LCBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKKyAgICAgICAgbGF5b3V0LmFkZFZpZXcobUNvdW50ZXJUZXh0LCBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOwogICAgICAgICAKICAgICAgICAgdXBkYXRlQ291bnRlclRleHQoKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xvY2FsU2VydmljZS5qYXZhCmluZGV4IDc5MzI0YTQuLjg1OTk2OWMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2UuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CiAKQEAgLTMzLDggKzMyLDggQEAKIAogLyoqCiAgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaW1wbGVtZW50aW5nIGFuIGFwcGxpY2F0aW9uIHNlcnZpY2UgdGhhdCBydW5zIGxvY2FsbHkKLSAqIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIHtAbGluayBMb2NhbFNlcnZpY2VDb250cm9sbGVyfQotICogYW5kIHtAbGluayBMb2NhbFNlcnZpY2VCaW5kaW5nfSBjbGFzc2VzIHNob3cgaG93IHRvIGludGVyYWN0IHdpdGggdGhlCisgKiBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSB7QGxpbmsgTG9jYWxTZXJ2aWNlQWN0aXZpdGllcy5Db250cm9sbGVyfQorICogYW5kIHtAbGluayBMb2NhbFNlcnZpY2VBY3Rpdml0aWVzLkJpbmRpbmd9IGNsYXNzZXMgc2hvdyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGUKICAqIHNlcnZpY2UuCiAgKgogICogPHA+Tm90aWNlIHRoZSB1c2Ugb2YgdGhlIHtAbGluayBOb3RpZmljYXRpb25NYW5hZ2VyfSB3aGVuIGludGVyZXN0aW5nIHRoaW5ncwpAQCAtNDIsNiArNDEsNyBAQAogICogaW50ZXJhY3Qgd2l0aCB0aGUgdXNlciwgcmF0aGVyIHRoYW4gZG9pbmcgc29tZXRoaW5nIG1vcmUgZGlzcnVwdGl2ZSBzdWNoIGFzCiAgKiBjYWxsaW5nIHN0YXJ0QWN0aXZpdHkoKS4KICAqLworLy9CRUdJTl9JTkNMVURFKHNlcnZpY2UpCiBwdWJsaWMgY2xhc3MgTG9jYWxTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7CiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb25NYW5hZ2VyIG1OTTsKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAKICAgICAgICAgLy8gVGhlIFBlbmRpbmdJbnRlbnQgdG8gbGF1bmNoIG91ciBhY3Rpdml0eSBpZiB0aGUgdXNlciBzZWxlY3RzIHRoaXMgbm90aWZpY2F0aW9uCiAgICAgICAgIFBlbmRpbmdJbnRlbnQgY29udGVudEludGVudCA9IFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkodGhpcywgMCwKLSAgICAgICAgICAgICAgICBuZXcgSW50ZW50KHRoaXMsIExvY2FsU2VydmljZUNvbnRyb2xsZXIuY2xhc3MpLCAwKTsKKyAgICAgICAgICAgICAgICBuZXcgSW50ZW50KHRoaXMsIExvY2FsU2VydmljZUFjdGl2aXRpZXMuQ29udHJvbGxlci5jbGFzcyksIDApOwogCiAgICAgICAgIC8vIFNldCB0aGUgaW5mbyBmb3IgdGhlIHZpZXdzIHRoYXQgc2hvdyBpbiB0aGUgbm90aWZpY2F0aW9uIHBhbmVsLgogICAgICAgICBub3RpZmljYXRpb24uc2V0TGF0ZXN0RXZlbnRJbmZvKHRoaXMsIGdldFRleHQoUi5zdHJpbmcubG9jYWxfc2VydmljZV9sYWJlbCksCkBAIC0xMTQsNCArMTE0LDQgQEAKICAgICAgICAgbU5NLm5vdGlmeShSLnN0cmluZy5sb2NhbF9zZXJ2aWNlX3N0YXJ0ZWQsIG5vdGlmaWNhdGlvbik7CiAgICAgfQogfQotCisvL0VORF9JTkNMVURFKHNlcnZpY2UpCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xvY2FsU2VydmljZUFjdGl2aXRpZXMuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQWN0aXZpdGllcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzNmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xvY2FsU2VydmljZUFjdGl2aXRpZXMuamF2YQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKKworaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CisKK3B1YmxpYyBjbGFzcyBMb2NhbFNlcnZpY2VBY3Rpdml0aWVzIHsKKyAgICAvKioKKyAgICAgKiA8cD5FeGFtcGxlIG9mIGV4cGxpY2l0bHkgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBsb2NhbCBzZXJ2aWNlLgorICAgICAqIFRoaXMgZGVtb25zdHJhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlcnZpY2UgdGhhdCBydW5zIGluIHRoZSBzYW1lCisgICAgICogcHJvY2VzcyBhcyB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24sIHdoaWNoIGlzIGV4cGxpY2l0bHkgc3RhcnRlZCBhbmQgc3RvcHBlZAorICAgICAqIGFzIGRlc2lyZWQuPC9wPgorICAgICAqIAorICAgICAqIDxwPk5vdGUgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGFuIGlubmVyIGNsYXNzIG9ubHkga2VlcCB0aGUgc2FtcGxlCisgICAgICogYWxsIHRvZ2V0aGVyOyB0eXBpY2FsbHkgdGhpcyBjb2RlIHdvdWxkIGFwcGVhciBpbiBzb21lIHNlcGFyYXRlIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisKKyAgICAgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmxvY2FsX3NlcnZpY2VfY29udHJvbGxlcik7CisKKyAgICAgICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgorICAgICAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnQpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3ApOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RvcExpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQuICBJdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAvLyB1bnRpbCBzb21lb25lIGNhbGxzIHN0b3BTZXJ2aWNlKCkuICBUaGUgSW50ZW50IHdlIHVzZSB0byBmaW5kCisgICAgICAgICAgICAgICAgLy8gdGhlIHNlcnZpY2UgZXhwbGljaXRseSBzcGVjaWZpZXMgb3VyIHNlcnZpY2UgY29tcG9uZW50LCBiZWNhdXNlCisgICAgICAgICAgICAgICAgLy8gd2Ugd2FudCBpdCBydW5uaW5nIGluIG91ciBvd24gcHJvY2VzcyBhbmQgZG9uJ3Qgd2FudCBvdGhlcgorICAgICAgICAgICAgICAgIC8vIGFwcGxpY2F0aW9ucyB0byByZXBsYWNlIGl0LgorICAgICAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KENvbnRyb2xsZXIudGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsU2VydmljZS5jbGFzcykpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdG9wTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5jZWwgYSBwcmV2aW91cyBjYWxsIHRvIHN0YXJ0U2VydmljZSgpLiAgTm90ZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHNlcnZpY2Ugd2lsbCBub3QgYWN0dWFsbHkgc3RvcCBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgIC8vIHN0aWxsIGJvdW5kIGNsaWVudHMuCisgICAgICAgICAgICAgICAgc3RvcFNlcnZpY2UobmV3IEludGVudChDb250cm9sbGVyLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2UuY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBFeGFtcGxlIG9mIGJpbmRpbmcgYW5kIHVuYmluZGluZyB0byB0aGUgbG9jYWwgc2VydmljZS4KKyAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHdoaWNoIHRoZSBjbGllbnQgd2lsbAorICAgICAqIGJpbmQgdG8sIHJlY2VpdmluZyBhbiBvYmplY3QgdGhyb3VnaCB3aGljaCBpdCBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgc2VydmljZS48L3A+CisgICAgICogCisgICAgICogPHA+Tm90ZSB0aGF0IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4gaW5uZXIgY2xhc3Mgb25seSBrZWVwIHRoZSBzYW1wbGUKKyAgICAgKiBhbGwgdG9nZXRoZXI7IHR5cGljYWxseSB0aGlzIGNvZGUgd291bGQgYXBwZWFyIGluIHNvbWUgc2VwYXJhdGUgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCaW5kaW5nIGV4dGVuZHMgQWN0aXZpdHkgeworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUlzQm91bmQ7CisKKy8vIEJFR0lOX0lOQ0xVREUoYmluZCkKKyAgICAgICAgcHJpdmF0ZSBMb2NhbFNlcnZpY2UgbUJvdW5kU2VydmljZTsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgU2VydmljZUNvbm5lY3Rpb24gbUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsIElCaW5kZXIgc2VydmljZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmljZSBoYXMgYmVlbgorICAgICAgICAgICAgICAgIC8vIGVzdGFibGlzaGVkLCBnaXZpbmcgdXMgdGhlIHNlcnZpY2Ugb2JqZWN0IHdlIGNhbiB1c2UgdG8KKyAgICAgICAgICAgICAgICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBzZXJ2aWNlLiAgQmVjYXVzZSB3ZSBoYXZlIGJvdW5kIHRvIGEgZXhwbGljaXQKKyAgICAgICAgICAgICAgICAvLyBzZXJ2aWNlIHRoYXQgd2Uga25vdyBpcyBydW5uaW5nIGluIG91ciBvd24gcHJvY2Vzcywgd2UgY2FuCisgICAgICAgICAgICAgICAgLy8gY2FzdCBpdHMgSUJpbmRlciB0byBhIGNvbmNyZXRlIGNsYXNzIGFuZCBkaXJlY3RseSBhY2Nlc3MgaXQuCisgICAgICAgICAgICAgICAgbUJvdW5kU2VydmljZSA9ICgoTG9jYWxTZXJ2aWNlLkxvY2FsQmluZGVyKXNlcnZpY2UpLmdldFNlcnZpY2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIGFib3V0IHRoaXMgZm9yIG91ciBkZW1vLgorICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KEJpbmRpbmcudGhpcywgUi5zdHJpbmcubG9jYWxfc2VydmljZV9jb25uZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgLy8gdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZCAtLSB0aGF0IGlzLCBpdHMgcHJvY2VzcyBjcmFzaGVkLgorICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgaXQgaXMgcnVubmluZyBpbiBvdXIgc2FtZSBwcm9jZXNzLCB3ZSBzaG91bGQgbmV2ZXIKKyAgICAgICAgICAgICAgICAvLyBzZWUgdGhpcyBoYXBwZW4uCisgICAgICAgICAgICAgICAgbUJvdW5kU2VydmljZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoQmluZGluZy50aGlzLCBSLnN0cmluZy5sb2NhbF9zZXJ2aWNlX2Rpc2Nvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgdm9pZCBkb0JpbmRTZXJ2aWNlKCkgeworICAgICAgICAgICAgLy8gRXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlLiAgV2UgdXNlIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAvLyBjbGFzcyBuYW1lIGJlY2F1c2Ugd2Ugd2FudCBhIHNwZWNpZmljIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdGhhdAorICAgICAgICAgICAgLy8gd2Uga25vdyB3aWxsIGJlIHJ1bm5pbmcgaW4gb3VyIG93biBwcm9jZXNzIChhbmQgdGh1cyB3b24ndCBiZQorICAgICAgICAgICAgLy8gc3VwcG9ydGluZyBjb21wb25lbnQgcmVwbGFjZW1lbnQgYnkgb3RoZXIgYXBwbGljYXRpb25zKS4KKyAgICAgICAgICAgIGJpbmRTZXJ2aWNlKG5ldyBJbnRlbnQoQmluZGluZy50aGlzLCAKKyAgICAgICAgICAgICAgICAgICAgTG9jYWxTZXJ2aWNlLmNsYXNzKSwgbUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7CisgICAgICAgICAgICBtSXNCb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZG9VbmJpbmRTZXJ2aWNlKCkgeworICAgICAgICAgICAgaWYgKG1Jc0JvdW5kKSB7CisgICAgICAgICAgICAgICAgLy8gRGV0YWNoIG91ciBleGlzdGluZyBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgIHVuYmluZFNlcnZpY2UobUNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgIG1Jc0JvdW5kID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkRlc3Ryb3koKSB7CisgICAgICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTsKKyAgICAgICAgICAgIGRvVW5iaW5kU2VydmljZSgpOworICAgICAgICB9CisvLyBFTkRfSU5DTFVERShiaW5kKQorCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1CaW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBkb0JpbmRTZXJ2aWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVVuYmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgZG9VbmJpbmRTZXJ2aWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubG9jYWxfc2VydmljZV9iaW5kaW5nKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5iaW5kKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJpbmRMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnVuYmluZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1VbmJpbmRMaXN0ZW5lcik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xvY2FsU2VydmljZUJpbmRpbmcuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGNmYWQ1Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwotCi0KLS8qKgotICogPHA+RXhhbXBsZSBvZiBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgdG8gdGhlIHtAbGluayBMb2NhbFNlcnZpY2V9LgotICogVGhpcyBkZW1vbnN0cmF0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgc2VydmljZSB3aGljaCB0aGUgY2xpZW50IHdpbGwKLSAqIGJpbmQgdG8sIHJlY2VpdmluZyBhbiBvYmplY3QgdGhyb3VnaCB3aGljaCBpdCBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgc2VydmljZS48L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBMb2NhbFNlcnZpY2VCaW5kaW5nIGV4dGVuZHMgQWN0aXZpdHkgewotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNCb3VuZDsKLSAgICBwcml2YXRlIExvY2FsU2VydmljZSBtQm91bmRTZXJ2aWNlOwotCi0gICAgQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmxvY2FsX3NlcnZpY2VfYmluZGluZyk7Ci0KLSAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCi0gICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmJpbmQpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1CaW5kTGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnVuYmluZCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVVuYmluZExpc3RlbmVyKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFNlcnZpY2VDb25uZWN0aW9uIG1Db25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsIElCaW5kZXIgc2VydmljZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCi0gICAgICAgICAgICAvLyBlc3RhYmxpc2hlZCwgZ2l2aW5nIHVzIHRoZSBzZXJ2aWNlIG9iamVjdCB3ZSBjYW4gdXNlIHRvCi0gICAgICAgICAgICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBzZXJ2aWNlLiAgQmVjYXVzZSB3ZSBoYXZlIGJvdW5kIHRvIGEgZXhwbGljaXQKLSAgICAgICAgICAgIC8vIHNlcnZpY2UgdGhhdCB3ZSBrbm93IGlzIHJ1bm5pbmcgaW4gb3VyIG93biBwcm9jZXNzLCB3ZSBjYW4KLSAgICAgICAgICAgIC8vIGNhc3QgaXRzIElCaW5kZXIgdG8gYSBjb25jcmV0ZSBjbGFzcyBhbmQgZGlyZWN0bHkgYWNjZXNzIGl0LgotICAgICAgICAgICAgbUJvdW5kU2VydmljZSA9ICgoTG9jYWxTZXJ2aWNlLkxvY2FsQmluZGVyKXNlcnZpY2UpLmdldFNlcnZpY2UoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciBhYm91dCB0aGlzIGZvciBvdXIgZGVtby4KLSAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KExvY2FsU2VydmljZUJpbmRpbmcudGhpcywgUi5zdHJpbmcubG9jYWxfc2VydmljZV9jb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UgaGFzIGJlZW4KLSAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWRseSBkaXNjb25uZWN0ZWQgLS0gdGhhdCBpcywgaXRzIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICAgICAgICAgIC8vIEJlY2F1c2UgaXQgaXMgcnVubmluZyBpbiBvdXIgc2FtZSBwcm9jZXNzLCB3ZSBzaG91bGQgbmV2ZXIKLSAgICAgICAgICAgIC8vIHNlZSB0aGlzIGhhcHBlbi4KLSAgICAgICAgICAgIG1Cb3VuZFNlcnZpY2UgPSBudWxsOwotICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoTG9jYWxTZXJ2aWNlQmluZGluZy50aGlzLCBSLnN0cmluZy5sb2NhbF9zZXJ2aWNlX2Rpc2Nvbm5lY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAvLyBFc3RhYmxpc2ggYSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UuICBXZSB1c2UgYW4gZXhwbGljaXQKLSAgICAgICAgICAgIC8vIGNsYXNzIG5hbWUgYmVjYXVzZSB3ZSB3YW50IGEgc3BlY2lmaWMgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0aGF0Ci0gICAgICAgICAgICAvLyB3ZSBrbm93IHdpbGwgYmUgcnVubmluZyBpbiBvdXIgb3duIHByb2Nlc3MgKGFuZCB0aHVzIHdvbid0IGJlCi0gICAgICAgICAgICAvLyBzdXBwb3J0aW5nIGNvbXBvbmVudCByZXBsYWNlbWVudCBieSBvdGhlciBhcHBsaWNhdGlvbnMpLgotICAgICAgICAgICAgYmluZFNlcnZpY2UobmV3IEludGVudChMb2NhbFNlcnZpY2VCaW5kaW5nLnRoaXMsIAotICAgICAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2UuY2xhc3MpLCBtQ29ubmVjdGlvbiwgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFKTsKLSAgICAgICAgICAgIG1Jc0JvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtVW5iaW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgaWYgKG1Jc0JvdW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGV0YWNoIG91ciBleGlzdGluZyBjb25uZWN0aW9uLgotICAgICAgICAgICAgICAgIHVuYmluZFNlcnZpY2UobUNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgIG1Jc0JvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotfQotCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xvY2FsU2VydmljZUNvbnRyb2xsZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQ29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQxMjQ5Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKLQotLy8gTmVlZCB0aGUgZm9sbG93aW5nIGltcG9ydCB0byBnZXQgYWNjZXNzIHRvIHRoZSBhcHAgcmVzb3VyY2VzLCBzaW5jZSB0aGlzCi0vLyBjbGFzcyBpcyBpbiBhIHN1Yi1wYWNrYWdlLgotaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotCi0KLS8qKgotICogPHA+RXhhbXBsZSBvZiBleHBsaWNpdGx5IHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUge0BsaW5rIExvY2FsU2VydmljZX0uCi0gKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHRoYXQgcnVucyBpbiB0aGUgc2FtZQotICogcHJvY2VzcyBhcyB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24sIHdoaWNoIGlzIGV4cGxpY2l0bHkgc3RhcnRlZCBhbmQgc3RvcHBlZAotICogYXMgZGVzaXJlZC48L3A+Ci0gKi8KLXB1YmxpYyBjbGFzcyBMb2NhbFNlcnZpY2VDb250cm9sbGVyIGV4dGVuZHMgQWN0aXZpdHkgewotICAgIEBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIpOwotCi0gICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgotICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0YXJ0TGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3ApOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdG9wTGlzdGVuZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2VydmljZSBpcyBzdGFydGVkLiAgSXQgd2lsbCBjb250aW51ZSBydW5uaW5nCi0gICAgICAgICAgICAvLyB1bnRpbCBzb21lb25lIGNhbGxzIHN0b3BTZXJ2aWNlKCkuICBUaGUgSW50ZW50IHdlIHVzZSB0byBmaW5kCi0gICAgICAgICAgICAvLyB0aGUgc2VydmljZSBleHBsaWNpdGx5IHNwZWNpZmllcyBvdXIgc2VydmljZSBjb21wb25lbnQsIGJlY2F1c2UKLSAgICAgICAgICAgIC8vIHdlIHdhbnQgaXQgcnVubmluZyBpbiBvdXIgb3duIHByb2Nlc3MgYW5kIGRvbid0IHdhbnQgb3RoZXIKLSAgICAgICAgICAgIC8vIGFwcGxpY2F0aW9ucyB0byByZXBsYWNlIGl0LgotICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKG5ldyBJbnRlbnQoTG9jYWxTZXJ2aWNlQ29udHJvbGxlci50aGlzLAotICAgICAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2UuY2xhc3MpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RvcExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENhbmNlbCBhIHByZXZpb3VzIGNhbGwgdG8gc3RhcnRTZXJ2aWNlKCkuICBOb3RlIHRoYXQgdGhlCi0gICAgICAgICAgICAvLyBzZXJ2aWNlIHdpbGwgbm90IGFjdHVhbGx5IHN0b3AgYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBhcmUKLSAgICAgICAgICAgIC8vIHN0aWxsIGJvdW5kIGNsaWVudHMuCi0gICAgICAgICAgICBzdG9wU2VydmljZShuZXcgSW50ZW50KExvY2FsU2VydmljZUNvbnRyb2xsZXIudGhpcywKLSAgICAgICAgICAgICAgICAgICAgTG9jYWxTZXJ2aWNlLmNsYXNzKSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL01lbnVJbmZsYXRlRnJvbVhtbC5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9NZW51SW5mbGF0ZUZyb21YbWwuamF2YQppbmRleCBmNTFiM2I4Li5mYzdiNjJhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL01lbnVJbmZsYXRlRnJvbVhtbC5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTWVudUluZmxhdGVGcm9tWG1sLmphdmEKQEAgLTE5LDE0ICsxOSwxMSBAQAogaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BcnJheUFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRnJhbWVMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNwaW5uZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CkBAIC05Myw3ICs5MCw3IEBACiAgICAgICAgIC8vIEFkZCB0aGUgc3Bpbm5lcgogICAgICAgICBsYXlvdXQuYWRkVmlldyhtU3Bpbm5lciwKICAgICAgICAgICAgICAgICBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGhlbHAgdGV4dApAQCAtMTAzLDcgKzEwMCw3IEBACiAgICAgICAgIAogICAgICAgICAvLyBBZGQgdGhlIGhlbHAsIG1ha2UgaXQgbG9vayBkZWNlbnQKICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBscCA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOwogICAgICAgICBscC5zZXRNYXJnaW5zKDEwLCAxMCwgMTAsIDEwKTsKICAgICAgICAgbGF5b3V0LmFkZFZpZXcobUluc3RydWN0aW9uc1RleHQsIGxwKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTWVzc2VuZ2VyU2VydmljZS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9NZXNzZW5nZXJTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNzYzZQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTWVzc2VuZ2VyU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOworCitpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzZW5nZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKKy8vIE5lZWQgdGhlIGZvbGxvd2luZyBpbXBvcnQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgYXBwIHJlc291cmNlcywgc2luY2UgdGhpcworLy8gY2xhc3MgaXMgaW4gYSBzdWItcGFja2FnZS4KK2ltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKK2ltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLlJlbW90ZVNlcnZpY2UuQ29udHJvbGxlcjsKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaW1wbGVtZW50aW5nIGFuIGFwcGxpY2F0aW9uIHNlcnZpY2UgdGhhdCB1c2VzIHRoZQorICoge0BsaW5rIE1lc3Nlbmdlcn0gY2xhc3MgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBjbGllbnRzLiAgVGhpcyBhbGxvd3MgZm9yCisgKiByZW1vdGUgaW50ZXJhY3Rpb24gd2l0aCBhIHNlcnZpY2UsIHdpdGhvdXQgbmVlZGluZyB0byBkZWZpbmUgYW4gQUlETAorICogaW50ZXJmYWNlLgorICoKKyAqIDxwPk5vdGljZSB0aGUgdXNlIG9mIHRoZSB7QGxpbmsgTm90aWZpY2F0aW9uTWFuYWdlcn0gd2hlbiBpbnRlcmVzdGluZyB0aGluZ3MKKyAqIGhhcHBlbiBpbiB0aGUgc2VydmljZS4gIFRoaXMgaXMgZ2VuZXJhbGx5IGhvdyBiYWNrZ3JvdW5kIHNlcnZpY2VzIHNob3VsZAorICogaW50ZXJhY3Qgd2l0aCB0aGUgdXNlciwgcmF0aGVyIHRoYW4gZG9pbmcgc29tZXRoaW5nIG1vcmUgZGlzcnVwdGl2ZSBzdWNoIGFzCisgKiBjYWxsaW5nIHN0YXJ0QWN0aXZpdHkoKS4KKyAqLworLy9CRUdJTl9JTkNMVURFKHNlcnZpY2UpCitwdWJsaWMgY2xhc3MgTWVzc2VuZ2VyU2VydmljZSBleHRlbmRzIFNlcnZpY2UgeworICAgIC8qKiBGb3Igc2hvd2luZyBhbmQgaGlkaW5nIG91ciBub3RpZmljYXRpb24uICovCisgICAgTm90aWZpY2F0aW9uTWFuYWdlciBtTk07CisgICAgLyoqIEtlZXBzIHRyYWNrIG9mIGFsbCBjdXJyZW50IHJlZ2lzdGVyZWQgY2xpZW50cy4gKi8KKyAgICBBcnJheUxpc3Q8TWVzc2VuZ2VyPiBtQ2xpZW50cyA9IG5ldyBBcnJheUxpc3Q8TWVzc2VuZ2VyPigpOworICAgIC8qKiBIb2xkcyBsYXN0IHZhbHVlIHNldCBieSBhIGNsaWVudC4gKi8KKyAgICBpbnQgbVZhbHVlID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21tYW5kIHRvIHRoZSBzZXJ2aWNlIHRvIHJlZ2lzdGVyIGEgY2xpZW50LCByZWNlaXZpbmcgY2FsbGJhY2tzCisgICAgICogZnJvbSB0aGUgc2VydmljZS4gIFRoZSBNZXNzYWdlJ3MgcmVwbHlUbyBmaWVsZCBtdXN0IGJlIGEgTWVzc2VuZ2VyIG9mCisgICAgICogdGhlIGNsaWVudCB3aGVyZSBjYWxsYmFja3Mgc2hvdWxkIGJlIHNlbnQuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBNU0dfUkVHSVNURVJfQ0xJRU5UID0gMTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb21tYW5kIHRvIHRoZSBzZXJ2aWNlIHRvIHVucmVnaXN0ZXIgYSBjbGllbnQsIG90IHN0b3AgcmVjZWl2aW5nIGNhbGxiYWNrcworICAgICAqIGZyb20gdGhlIHNlcnZpY2UuICBUaGUgTWVzc2FnZSdzIHJlcGx5VG8gZmllbGQgbXVzdCBiZSBhIE1lc3NlbmdlciBvZgorICAgICAqIHRoZSBjbGllbnQgYXMgcHJldmlvdXNseSBnaXZlbiB3aXRoIE1TR19SRUdJU1RFUl9DTElFTlQuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBNU0dfVU5SRUdJU1RFUl9DTElFTlQgPSAyOworICAgIAorICAgIC8qKgorICAgICAqIENvbW1hbmQgdG8gc2VydmljZSB0byBzZXQgYSBuZXcgdmFsdWUuICBUaGlzIGNhbiBiZSBzZW50IHRvIHRoZQorICAgICAqIHNlcnZpY2UgdG8gc3VwcGx5IGEgbmV3IHZhbHVlLCBhbmQgd2lsbCBiZSBzZW50IGJ5IHRoZSBzZXJ2aWNlIHRvCisgICAgICogYW55IHJlZ2lzdGVyZWQgY2xpZW50cyB3aXRoIHRoZSBuZXcgdmFsdWUuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBNU0dfU0VUX1ZBTFVFID0gMzsKKyAgICAKKyAgICAvKioKKyAgICAgKiBIYW5kbGVyIG9mIGluY29taW5nIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4KKyAgICAgKi8KKyAgICBjbGFzcyBJbmNvbWluZ0hhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19SRUdJU1RFUl9DTElFTlQ6CisgICAgICAgICAgICAgICAgICAgIG1DbGllbnRzLmFkZChtc2cucmVwbHlUbyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1VOUkVHSVNURVJfQ0xJRU5UOgorICAgICAgICAgICAgICAgICAgICBtQ2xpZW50cy5yZW1vdmUobXNnLnJlcGx5VG8pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVRfVkFMVUU6CisgICAgICAgICAgICAgICAgICAgIG1WYWx1ZSA9IG1zZy5hcmcxOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPW1DbGllbnRzLnNpemUoKS0xOyBpPj0wOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNsaWVudHMuZ2V0KGkpLnNlbmQoTWVzc2FnZS5vYnRhaW4obnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1TR19TRVRfVkFMVUUsIG1WYWx1ZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY2xpZW50IGlzIGRlYWQuICBSZW1vdmUgaXQgZnJvbSB0aGUgbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBmcm9tIGJhY2sgdG8gZnJvbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGlzIGlzIHNhZmUgdG8gZG8gaW5zaWRlIHRoZSBsb29wLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DbGllbnRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBzdXBlci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVGFyZ2V0IHdlIHB1Ymxpc2ggZm9yIGNsaWVudHMgdG8gc2VuZCBtZXNzYWdlcyB0byBJbmNvbWluZ0hhbmRsZXIuCisgICAgICovCisgICAgZmluYWwgTWVzc2VuZ2VyIG1NZXNzZW5nZXIgPSBuZXcgTWVzc2VuZ2VyKG5ldyBJbmNvbWluZ0hhbmRsZXIoKSk7CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoKSB7CisgICAgICAgIG1OTSA9IChOb3RpZmljYXRpb25NYW5hZ2VyKWdldFN5c3RlbVNlcnZpY2UoTk9USUZJQ0FUSU9OX1NFUlZJQ0UpOworCisgICAgICAgIC8vIERpc3BsYXkgYSBub3RpZmljYXRpb24gYWJvdXQgdXMgc3RhcnRpbmcuCisgICAgICAgIHNob3dOb3RpZmljYXRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkRlc3Ryb3koKSB7CisgICAgICAgIC8vIENhbmNlbCB0aGUgcGVyc2lzdGVudCBub3RpZmljYXRpb24uCisgICAgICAgIG1OTS5jYW5jZWwoUi5zdHJpbmcucmVtb3RlX3NlcnZpY2Vfc3RhcnRlZCk7CisKKyAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB3ZSBzdG9wcGVkLgorICAgICAgICBUb2FzdC5tYWtlVGV4dCh0aGlzLCBSLnN0cmluZy5yZW1vdGVfc2VydmljZV9zdG9wcGVkLCBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogV2hlbiBiaW5kaW5nIHRvIHRoZSBzZXJ2aWNlLCB3ZSByZXR1cm4gYW4gaW50ZXJmYWNlIHRvIG91ciBtZXNzZW5nZXIKKyAgICAgKiBmb3Igc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgc2VydmljZS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSUJpbmRlciBvbkJpbmQoSW50ZW50IGludGVudCkgeworICAgICAgICByZXR1cm4gbU1lc3Nlbmdlci5nZXRCaW5kZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaG93IGEgbm90aWZpY2F0aW9uIHdoaWxlIHRoaXMgc2VydmljZSBpcyBydW5uaW5nLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzaG93Tm90aWZpY2F0aW9uKCkgeworICAgICAgICAvLyBJbiB0aGlzIHNhbXBsZSwgd2UnbGwgdXNlIHRoZSBzYW1lIHRleHQgZm9yIHRoZSB0aWNrZXIgYW5kIHRoZSBleHBhbmRlZCBub3RpZmljYXRpb24KKyAgICAgICAgQ2hhclNlcXVlbmNlIHRleHQgPSBnZXRUZXh0KFIuc3RyaW5nLnJlbW90ZV9zZXJ2aWNlX3N0YXJ0ZWQpOworCisgICAgICAgIC8vIFNldCB0aGUgaWNvbiwgc2Nyb2xsaW5nIHRleHQgYW5kIHRpbWVzdGFtcAorICAgICAgICBOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbihSLmRyYXdhYmxlLnN0YXRfc2FtcGxlLCB0ZXh0LAorICAgICAgICAgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKworICAgICAgICAvLyBUaGUgUGVuZGluZ0ludGVudCB0byBsYXVuY2ggb3VyIGFjdGl2aXR5IGlmIHRoZSB1c2VyIHNlbGVjdHMgdGhpcyBub3RpZmljYXRpb24KKyAgICAgICAgUGVuZGluZ0ludGVudCBjb250ZW50SW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRBY3Rpdml0eSh0aGlzLCAwLAorICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQodGhpcywgQ29udHJvbGxlci5jbGFzcyksIDApOworCisgICAgICAgIC8vIFNldCB0aGUgaW5mbyBmb3IgdGhlIHZpZXdzIHRoYXQgc2hvdyBpbiB0aGUgbm90aWZpY2F0aW9uIHBhbmVsLgorICAgICAgICBub3RpZmljYXRpb24uc2V0TGF0ZXN0RXZlbnRJbmZvKHRoaXMsIGdldFRleHQoUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfbGFiZWwpLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LCBjb250ZW50SW50ZW50KTsKKworICAgICAgICAvLyBTZW5kIHRoZSBub3RpZmljYXRpb24uCisgICAgICAgIC8vIFdlIHVzZSBhIHN0cmluZyBpZCBiZWNhdXNlIGl0IGlzIGEgdW5pcXVlIG51bWJlci4gIFdlIHVzZSBpdCBsYXRlciB0byBjYW5jZWwuCisgICAgICAgIG1OTS5ub3RpZnkoUi5zdHJpbmcucmVtb3RlX3NlcnZpY2Vfc3RhcnRlZCwgbm90aWZpY2F0aW9uKTsKKyAgICB9Cit9CisvL0VORF9JTkNMVURFKHNlcnZpY2UpCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL01lc3NlbmdlclNlcnZpY2VBY3Rpdml0aWVzLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL01lc3NlbmdlclNlcnZpY2VBY3Rpdml0aWVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwYWM4YwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTWVzc2VuZ2VyU2VydmljZUFjdGl2aXRpZXMuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOworCitpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CitpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcC5Mb2NhbFNlcnZpY2VBY3Rpdml0aWVzLkJpbmRpbmc7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKK2ltcG9ydCBhbmRyb2lkLm9zLk1lc3NlbmdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OworCitwdWJsaWMgY2xhc3MgTWVzc2VuZ2VyU2VydmljZUFjdGl2aXRpZXMgeworICAgIC8qKgorICAgICAqIEV4YW1wbGUgb2YgYmluZGluZyBhbmQgdW5iaW5kaW5nIHRvIHRoZSByZW1vdGUgc2VydmljZS4KKyAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHdoaWNoIHRoZSBjbGllbnQgd2lsbAorICAgICAqIGJpbmQgdG8sIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCBhbiBhaWRsIGludGVyZmFjZS48L3A+CisgICAgICogCisgICAgICogPHA+Tm90ZSB0aGF0IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4gaW5uZXIgY2xhc3Mgb25seSBrZWVwIHRoZSBzYW1wbGUKKyAgICAgKiBhbGwgdG9nZXRoZXI7IHR5cGljYWxseSB0aGlzIGNvZGUgd291bGQgYXBwZWFyIGluIHNvbWUgc2VwYXJhdGUgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCaW5kaW5nIGV4dGVuZHMgQWN0aXZpdHkgeworLy8gQkVHSU5fSU5DTFVERShiaW5kKQorICAgICAgICAvKiogTWVzc2VuZ2VyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggc2VydmljZS4gKi8KKyAgICAgICAgTWVzc2VuZ2VyIG1TZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgLyoqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHdlIGhhdmUgY2FsbGVkIGJpbmQgb24gdGhlIHNlcnZpY2UuICovCisgICAgICAgIGJvb2xlYW4gbUlzQm91bmQ7CisgICAgICAgIC8qKiBTb21lIHRleHQgdmlldyB3ZSBhcmUgdXNpbmcgdG8gc2hvdyBzdGF0ZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAgICAgVGV4dFZpZXcgbUNhbGxiYWNrVGV4dDsKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBIYW5kbGVyIG9mIGluY29taW5nIG1lc3NhZ2VzIGZyb20gc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIGNsYXNzIEluY29taW5nSGFuZGxlciBleHRlbmRzIEhhbmRsZXIgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtc2cud2hhdCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIE1lc3NlbmdlclNlcnZpY2UuTVNHX1NFVF9WQUxVRToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiUmVjZWl2ZWQgZnJvbSBzZXJ2aWNlOiAiICsgbXNnLmFyZzEpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogVGFyZ2V0IHdlIHB1Ymxpc2ggZm9yIGNsaWVudHMgdG8gc2VuZCBtZXNzYWdlcyB0byBJbmNvbWluZ0hhbmRsZXIuCisgICAgICAgICAqLworICAgICAgICBmaW5hbCBNZXNzZW5nZXIgbU1lc3NlbmdlciA9IG5ldyBNZXNzZW5nZXIobmV3IEluY29taW5nSGFuZGxlcigpKTsKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBDbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbWFpbiBpbnRlcmZhY2Ugb2YgdGhlIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIFNlcnZpY2VDb25uZWN0aW9uIG1Db25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICBJQmluZGVyIHNlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2hlZCwgZ2l2aW5nIHVzIHRoZSBzZXJ2aWNlIG9iamVjdCB3ZSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VydmljZS4gIFdlIGFyZSBjb21tdW5pY2F0aW5nIHdpdGggb3VyCisgICAgICAgICAgICAgICAgLy8gc2VydmljZSB0aHJvdWdoIGFuIElETCBpbnRlcmZhY2UsIHNvIGdldCBhIGNsaWVudC1zaWRlCisgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgdGhhdCBmcm9tIHRoZSByYXcgc2VydmljZSBvYmplY3QuCisgICAgICAgICAgICAgICAgbVNlcnZpY2UgPSBuZXcgTWVzc2VuZ2VyKHNlcnZpY2UpOworICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiQXR0YWNoZWQuIik7CisKKyAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vbml0b3IgdGhlIHNlcnZpY2UgZm9yIGFzIGxvbmcgYXMgd2UgYXJlCisgICAgICAgICAgICAgICAgLy8gY29ubmVjdGVkIHRvIGl0LgorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4obnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzZW5nZXJTZXJ2aWNlLk1TR19SRUdJU1RFUl9DTElFTlQpOworICAgICAgICAgICAgICAgICAgICBtc2cucmVwbHlUbyA9IG1NZXNzZW5nZXI7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNlbmQobXNnKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgaXQgc29tZSB2YWx1ZSBhcyBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBNZXNzYWdlLm9idGFpbihudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NlbmdlclNlcnZpY2UuTVNHX1NFVF9WQUxVRSwgdGhpcy5oYXNoQ29kZSgpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2VuZChtc2cpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgc2VydmljZSBoYXMgY3Jhc2hlZCBiZWZvcmUgd2UgY291bGQgZXZlbgorICAgICAgICAgICAgICAgICAgICAvLyBkbyBhbnl0aGluZyB3aXRoIGl0OyB3ZSBjYW4gY291bnQgb24gc29vbiBiZWluZworICAgICAgICAgICAgICAgICAgICAvLyBkaXNjb25uZWN0ZWQgKGFuZCB0aGVuIHJlY29ubmVjdGVkIGlmIGl0IGNhbiBiZSByZXN0YXJ0ZWQpCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQXMgcGFydCBvZiB0aGUgc2FtcGxlLCB0ZWxsIHRoZSB1c2VyIHdoYXQgaGFwcGVuZWQuCisgICAgICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoQmluZGluZy50aGlzLCBSLnN0cmluZy5yZW1vdGVfc2VydmljZV9jb25uZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgLy8gdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZCAtLSB0aGF0IGlzLCBpdHMgcHJvY2VzcyBjcmFzaGVkLgorICAgICAgICAgICAgICAgIG1TZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIkRpc2Nvbm5lY3RlZC4iKTsKKworICAgICAgICAgICAgICAgIC8vIEFzIHBhcnQgb2YgdGhlIHNhbXBsZSwgdGVsbCB0aGUgdXNlciB3aGF0IGhhcHBlbmVkLgorICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KEJpbmRpbmcudGhpcywgUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfZGlzY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB2b2lkIGRvQmluZFNlcnZpY2UoKSB7CisgICAgICAgICAgICAvLyBFc3RhYmxpc2ggYSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UuICBXZSB1c2UgYW4gZXhwbGljaXQKKyAgICAgICAgICAgIC8vIGNsYXNzIG5hbWUgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gYmUgYWJsZSB0byBsZXQgb3RoZXIKKyAgICAgICAgICAgIC8vIGFwcGxpY2F0aW9ucyByZXBsYWNlIG91ciBjb21wb25lbnQuCisgICAgICAgICAgICBiaW5kU2VydmljZShuZXcgSW50ZW50KEJpbmRpbmcudGhpcywgCisgICAgICAgICAgICAgICAgICAgIE1lc3NlbmdlclNlcnZpY2UuY2xhc3MpLCBtQ29ubmVjdGlvbiwgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFKTsKKyAgICAgICAgICAgIG1Jc0JvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiQmluZGluZy4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkb1VuYmluZFNlcnZpY2UoKSB7CisgICAgICAgICAgICBpZiAobUlzQm91bmQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHJlY2VpdmVkIHRoZSBzZXJ2aWNlLCBhbmQgaGVuY2UgcmVnaXN0ZXJlZCB3aXRoCisgICAgICAgICAgICAgICAgLy8gaXQsIHRoZW4gbm93IGlzIHRoZSB0aW1lIHRvIHVucmVnaXN0ZXIuCisgICAgICAgICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4obnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2VuZ2VyU2VydmljZS5NU0dfVU5SRUdJU1RFUl9DTElFTlQpOworICAgICAgICAgICAgICAgICAgICAgICAgbXNnLnJlcGx5VG8gPSBtTWVzc2VuZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2VuZChtc2cpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIHdlIG5lZWQgdG8gZG8gaWYgdGhlIHNlcnZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBjcmFzaGVkLgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIERldGFjaCBvdXIgZXhpc3RpbmcgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICB1bmJpbmRTZXJ2aWNlKG1Db25uZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBtSXNCb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiVW5iaW5kaW5nLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgLy8gRU5EX0lOQ0xVREUoYmluZCkKKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBTdGFuZGFyZCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGFjdGl2aXR5LiAgU2V0IHVwIHRoZSBVSSwgdGhlbiB3YWl0CisgICAgICAgICAqIGZvciB0aGUgdXNlciB0byBwb2tlIGl0IGJlZm9yZSBkb2luZyBhbnl0aGluZy4KKyAgICAgICAgICovCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5tZXNzZW5nZXJfc2VydmljZV9iaW5kaW5nKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5iaW5kKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJpbmRMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnVuYmluZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1VbmJpbmRMaXN0ZW5lcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1DYWxsYmFja1RleHQgPSAoVGV4dFZpZXcpZmluZFZpZXdCeUlkKFIuaWQuY2FsbGJhY2spOworICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJOb3QgYXR0YWNoZWQuIik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtQmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgZG9CaW5kU2VydmljZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1VbmJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIGRvVW5iaW5kU2VydmljZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvUmVtb3RlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlLmphdmEKaW5kZXggYzBkZWJiYy4uYTYyYTUyNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlLmphdmEKQEAgLTE2LDIxICsxNiwyOCBAQAogCiBwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7CiAKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CiAKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQogLy8gTmVlZCB0aGUgZm9sbG93aW5nIGltcG9ydCB0byBnZXQgYWNjZXNzIHRvIHRoZSBhcHAgcmVzb3VyY2VzLCBzaW5jZSB0aGlzCiAvLyBjbGFzcyBpcyBpbiBhIHN1Yi1wYWNrYWdlLgogaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwpAQCAtMzksOCArNDYsMTMgQEAKICAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBpbXBsZW1lbnRpbmcgYW4gYXBwbGljYXRpb24gc2VydmljZSB0aGF0IHJ1bnMgaW4gYQogICogZGlmZmVyZW50IHByb2Nlc3MgdGhhbiB0aGUgYXBwbGljYXRpb24uICBCZWNhdXNlIGl0IGNhbiBiZSBpbiBhbm90aGVyCiAgKiBwcm9jZXNzLCB3ZSBtdXN0IHVzZSBJUEMgdG8gaW50ZXJhY3Qgd2l0aCBpdC4gIFRoZQotICoge0BsaW5rIFJlbW90ZVNlcnZpY2VDb250cm9sbGVyfSBhbmQge0BsaW5rIFJlbW90ZVNlcnZpY2VCaW5kaW5nfSBjbGFzc2VzCisgKiB7QGxpbmsgQ29udHJvbGxlcn0gYW5kIHtAbGluayBCaW5kaW5nfSBjbGFzc2VzCiAgKiBzaG93IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBzZXJ2aWNlLgorICogCisgKiA8cD5Ob3RlIHRoYXQgbW9zdCBhcHBsaWNhdGlvbnMgPHN0cm9uZz5kbyBub3Q8L3N0cm9uZz4gbmVlZCB0byBkZWFsIHdpdGgKKyAqIHRoZSBjb21wbGV4aXR5IHNob3duIGhlcmUuICBJZiB5b3VyIGFwcGxpY2F0aW9uIHNpbXBseSBoYXMgYSBzZXJ2aWNlCisgKiBydW5uaW5nIGluIGl0cyBvd24gcHJvY2VzcywgdGhlIHtAbGluayBMb2NhbFNlcnZpY2V9IHNhbXBsZSBzaG93cyBhIG11Y2gKKyAqIHNpbXBsZXIgd2F5IHRvIGludGVyYWN0IHdpdGggaXQuCiAgKi8KIHB1YmxpYyBjbGFzcyBSZW1vdGVTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7CiAgICAgLyoqCkBAIC0xNzIsNyArMTg0LDcgQEAKIAogICAgICAgICAvLyBUaGUgUGVuZGluZ0ludGVudCB0byBsYXVuY2ggb3VyIGFjdGl2aXR5IGlmIHRoZSB1c2VyIHNlbGVjdHMgdGhpcyBub3RpZmljYXRpb24KICAgICAgICAgUGVuZGluZ0ludGVudCBjb250ZW50SW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRBY3Rpdml0eSh0aGlzLCAwLAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQodGhpcywgTG9jYWxTZXJ2aWNlQ29udHJvbGxlci5jbGFzcyksIDApOworICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQodGhpcywgQ29udHJvbGxlci5jbGFzcyksIDApOwogCiAgICAgICAgIC8vIFNldCB0aGUgaW5mbyBmb3IgdGhlIHZpZXdzIHRoYXQgc2hvdyBpbiB0aGUgbm90aWZpY2F0aW9uIHBhbmVsLgogICAgICAgICBub3RpZmljYXRpb24uc2V0TGF0ZXN0RXZlbnRJbmZvKHRoaXMsIGdldFRleHQoUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfbGFiZWwpLApAQCAtMTgyLDQgKzE5NCwyNjYgQEAKICAgICAgICAgLy8gV2UgdXNlIGEgc3RyaW5nIGlkIGJlY2F1c2UgaXQgaXMgYSB1bmlxdWUgbnVtYmVyLiAgV2UgdXNlIGl0IGxhdGVyIHRvIGNhbmNlbC4KICAgICAgICAgbU5NLm5vdGlmeShSLnN0cmluZy5yZW1vdGVfc2VydmljZV9zdGFydGVkLCBub3RpZmljYXRpb24pOwogICAgIH0KKyAgICAKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogPHA+RXhhbXBsZSBvZiBleHBsaWNpdGx5IHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgcmVtb3ZlIHNlcnZpY2UuCisgICAgICogVGhpcyBkZW1vbnN0cmF0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgc2VydmljZSB0aGF0IHJ1bnMgaW4gYSBkaWZmZXJlbnQKKyAgICAgKiBwcm9jZXNzIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBleHBsaWNpdGx5IHN0YXJ0ZWQgYW5kIHN0b3BwZWQKKyAgICAgKiBhcyBkZXNpcmVkLjwvcD4KKyAgICAgKiAKKyAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBpbm5lciBjbGFzcyBvbmx5IGtlZXAgdGhlIHNhbXBsZQorICAgICAqIGFsbCB0b2dldGhlcjsgdHlwaWNhbGx5IHRoaXMgY29kZSB3b3VsZCBhcHBlYXIgaW4gc29tZSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5yZW1vdGVfc2VydmljZV9jb250cm9sbGVyKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydExpc3RlbmVyKTsKKyAgICAgICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RvcCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdG9wTGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0TGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHNlcnZpY2UgaXMgc3RhcnRlZC4gIEl0IHdpbGwgY29udGludWUgcnVubmluZworICAgICAgICAgICAgICAgIC8vIHVudGlsIHNvbWVvbmUgY2FsbHMgc3RvcFNlcnZpY2UoKS4KKyAgICAgICAgICAgICAgICAvLyBXZSB1c2UgYW4gYWN0aW9uIGNvZGUgaGVyZSwgaW5zdGVhZCBvZiBleHBsaWN0bHkgc3VwcGx5aW5nCisgICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBuYW1lLCBzbyB0aGF0IG90aGVyIHBhY2thZ2VzIGNhbiByZXBsYWNlCisgICAgICAgICAgICAgICAgLy8gdGhlIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKG5ldyBJbnRlbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcC5SRU1PVEVfU0VSVklDRSIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RvcExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gQ2FuY2VsIGEgcHJldmlvdXMgY2FsbCB0byBzdGFydFNlcnZpY2UoKS4gIE5vdGUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyBzZXJ2aWNlIHdpbGwgbm90IGFjdHVhbGx5IHN0b3AgYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICAvLyBzdGlsbCBib3VuZCBjbGllbnRzLgorICAgICAgICAgICAgICAgIHN0b3BTZXJ2aWNlKG5ldyBJbnRlbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcC5SRU1PVEVfU0VSVklDRSIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIEV4YW1wbGUgb2YgYmluZGluZyBhbmQgdW5iaW5kaW5nIHRvIHRoZSByZW1vdGUgc2VydmljZS4KKyAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHdoaWNoIHRoZSBjbGllbnQgd2lsbAorICAgICAqIGJpbmQgdG8sIGludGVyYWN0aW5nIHdpdGggaXQgdGhyb3VnaCBhbiBhaWRsIGludGVyZmFjZS48L3A+CisgICAgICogCisgICAgICogPHA+Tm90ZSB0aGF0IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4gaW5uZXIgY2xhc3Mgb25seSBrZWVwIHRoZSBzYW1wbGUKKyAgICAgKiBhbGwgdG9nZXRoZXI7IHR5cGljYWxseSB0aGlzIGNvZGUgd291bGQgYXBwZWFyIGluIHNvbWUgc2VwYXJhdGUgY2xhc3MuCisgICAgICovCisgLy8gQkVHSU5fSU5DTFVERShjYWxsaW5nX2Ffc2VydmljZSkKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJpbmRpbmcgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgICAgIC8qKiBUaGUgcHJpbWFyeSBpbnRlcmZhY2Ugd2Ugd2lsbCBiZSBjYWxsaW5nIG9uIHRoZSBzZXJ2aWNlLiAqLworICAgICAgICBJUmVtb3RlU2VydmljZSBtU2VydmljZSA9IG51bGw7CisgICAgICAgIC8qKiBBbm90aGVyIGludGVyZmFjZSB3ZSB1c2Ugb24gdGhlIHNlcnZpY2UuICovCisgICAgICAgIElTZWNvbmRhcnkgbVNlY29uZGFyeVNlcnZpY2UgPSBudWxsOworICAgICAgICAKKyAgICAgICAgQnV0dG9uIG1LaWxsQnV0dG9uOworICAgICAgICBUZXh0VmlldyBtQ2FsbGJhY2tUZXh0OworCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSXNCb3VuZDsKKworICAgICAgICAvKioKKyAgICAgICAgICogU3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBhY3Rpdml0eS4gIFNldCB1cCB0aGUgVUksIHRoZW4gd2FpdAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIgdG8gcG9rZSBpdCBiZWZvcmUgZG9pbmcgYW55dGhpbmcuCisgICAgICAgICAqLworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQucmVtb3RlX3NlcnZpY2VfYmluZGluZyk7CisKKyAgICAgICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgorICAgICAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuYmluZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1CaW5kTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC51bmJpbmQpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtVW5iaW5kTGlzdGVuZXIpOworICAgICAgICAgICAgbUtpbGxCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmtpbGwpOworICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1LaWxsTGlzdGVuZXIpOworICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1DYWxsYmFja1RleHQgPSAoVGV4dFZpZXcpZmluZFZpZXdCeUlkKFIuaWQuY2FsbGJhY2spOworICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJOb3QgYXR0YWNoZWQuIik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2xhc3MgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIG1haW4gaW50ZXJmYWNlIG9mIHRoZSBzZXJ2aWNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTZXJ2aWNlQ29ubmVjdGlvbiBtQ29ubmVjdGlvbiA9IG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgSUJpbmRlciBzZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgLy8gZXN0YWJsaXNoZWQsIGdpdmluZyB1cyB0aGUgc2VydmljZSBvYmplY3Qgd2UgY2FuIHVzZSB0bworICAgICAgICAgICAgICAgIC8vIGludGVyYWN0IHdpdGggdGhlIHNlcnZpY2UuICBXZSBhcmUgY29tbXVuaWNhdGluZyB3aXRoIG91cgorICAgICAgICAgICAgICAgIC8vIHNlcnZpY2UgdGhyb3VnaCBhbiBJREwgaW50ZXJmYWNlLCBzbyBnZXQgYSBjbGllbnQtc2lkZQorICAgICAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgZnJvbSB0aGUgcmF3IHNlcnZpY2Ugb2JqZWN0LgorICAgICAgICAgICAgICAgIG1TZXJ2aWNlID0gSVJlbW90ZVNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiQXR0YWNoZWQuIik7CisKKyAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vbml0b3IgdGhlIHNlcnZpY2UgZm9yIGFzIGxvbmcgYXMgd2UgYXJlCisgICAgICAgICAgICAgICAgLy8gY29ubmVjdGVkIHRvIGl0LgorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnJlZ2lzdGVyQ2FsbGJhY2sobUNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIHNlcnZpY2UgaGFzIGNyYXNoZWQgYmVmb3JlIHdlIGNvdWxkIGV2ZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gZG8gYW55dGhpbmcgd2l0aCBpdDsgd2UgY2FuIGNvdW50IG9uIHNvb24gYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gZGlzY29ubmVjdGVkIChhbmQgdGhlbiByZWNvbm5lY3RlZCBpZiBpdCBjYW4gYmUgcmVzdGFydGVkKQorICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEFzIHBhcnQgb2YgdGhlIHNhbXBsZSwgdGVsbCB0aGUgdXNlciB3aGF0IGhhcHBlbmVkLgorICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KEJpbmRpbmcudGhpcywgUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmljZSBoYXMgYmVlbgorICAgICAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWRseSBkaXNjb25uZWN0ZWQgLS0gdGhhdCBpcywgaXRzIHByb2Nlc3MgY3Jhc2hlZC4KKyAgICAgICAgICAgICAgICBtU2VydmljZSA9IG51bGw7CisgICAgICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJEaXNjb25uZWN0ZWQuIik7CisKKyAgICAgICAgICAgICAgICAvLyBBcyBwYXJ0IG9mIHRoZSBzYW1wbGUsIHRlbGwgdGhlIHVzZXIgd2hhdCBoYXBwZW5lZC4KKyAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChCaW5kaW5nLnRoaXMsIFIuc3RyaW5nLnJlbW90ZV9zZXJ2aWNlX2Rpc2Nvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZSBvZiB0aGUgc2VydmljZS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgU2VydmljZUNvbm5lY3Rpb24gbVNlY29uZGFyeUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgIElCaW5kZXIgc2VydmljZSkgeworICAgICAgICAgICAgICAgIC8vIENvbm5lY3RpbmcgdG8gYSBzZWNvbmRhcnkgaW50ZXJmYWNlIGlzIHRoZSBzYW1lIGFzIGFueQorICAgICAgICAgICAgICAgIC8vIG90aGVyIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICBtU2Vjb25kYXJ5U2VydmljZSA9IElTZWNvbmRhcnkuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUpIHsKKyAgICAgICAgICAgICAgICBtU2Vjb25kYXJ5U2VydmljZSA9IG51bGw7CisgICAgICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIC8vIEVzdGFibGlzaCBhIGNvdXBsZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLCBiaW5kaW5nCisgICAgICAgICAgICAgICAgLy8gYnkgaW50ZXJmYWNlIG5hbWVzLiAgVGhpcyBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGJlCisgICAgICAgICAgICAgICAgLy8gaW5zdGFsbGVkIHRoYXQgcmVwbGFjZSB0aGUgcmVtb3RlIHNlcnZpY2UgYnkgaW1wbGVtZW50aW5nCisgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgIGJpbmRTZXJ2aWNlKG5ldyBJbnRlbnQoSVJlbW90ZVNlcnZpY2UuY2xhc3MuZ2V0TmFtZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOworICAgICAgICAgICAgICAgIGJpbmRTZXJ2aWNlKG5ldyBJbnRlbnQoSVNlY29uZGFyeS5jbGFzcy5nZXROYW1lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNlY29uZGFyeUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7CisgICAgICAgICAgICAgICAgbUlzQm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiQmluZGluZy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtVW5iaW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBpZiAobUlzQm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSByZWNlaXZlZCB0aGUgc2VydmljZSwgYW5kIGhlbmNlIHJlZ2lzdGVyZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAvLyBpdCwgdGhlbiBub3cgaXMgdGhlIHRpbWUgdG8gdW5yZWdpc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UudW5yZWdpc3RlckNhbGxiYWNrKG1DYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgc3BlY2lhbCB3ZSBuZWVkIHRvIGRvIGlmIHRoZSBzZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzIGNyYXNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIERldGFjaCBvdXIgZXhpc3RpbmcgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgdW5iaW5kU2VydmljZShtQ29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHVuYmluZFNlcnZpY2UobVNlY29uZGFyeUNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbUlzQm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJVbmJpbmRpbmcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1LaWxsTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBraWxsIHRoZSBwcm9jZXNzIGhvc3Rpbmcgb3VyIHNlcnZpY2UsIHdlIG5lZWQgdG8ga25vdyBpdHMKKyAgICAgICAgICAgICAgICAvLyBQSUQuICBDb252ZW5pZW50bHkgb3VyIHNlcnZpY2UgaGFzIGEgY2FsbCB0aGF0IHdpbGwgcmV0dXJuCisgICAgICAgICAgICAgICAgLy8gdG8gdXMgdGhhdCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAobVNlY29uZGFyeVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpZCA9IG1TZWNvbmRhcnlTZXJ2aWNlLmdldFBpZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0LCB0aG91Z2ggdGhpcyBBUEkgYWxsb3dzIHVzIHRvIHJlcXVlc3QgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbGwgYW55IHByb2Nlc3MgYmFzZWQgb24gaXRzIFBJRCwgdGhlIGtlcm5lbCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCBpbXBvc2Ugc3RhbmRhcmQgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIFBJRHMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgYWN0dWFsbHkgYWJsZSB0byBraWxsLiAgVHlwaWNhbGx5IHRoaXMgbWVhbnMgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgcnVubmluZyB5b3VyIGFwcGxpY2F0aW9uIGFuZCBhbnkgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2VzIGNyZWF0ZWQgYnkgdGhhdCBhcHAgYXMgc2hvd24gaGVyZTsgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNoYXJpbmcgYSBjb21tb24gVUlEIHdpbGwgYWxzbyBiZSBhYmxlIHRvIGtpbGwgZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIncyBwcm9jZXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzLmtpbGxQcm9jZXNzKHBpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIktpbGxlZCBzZXJ2aWNlIHByb2Nlc3MuIik7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjb3ZlciBncmFjZWZ1bGx5IGZyb20gdGhlIHByb2Nlc3MgaG9zdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlcnZlciBkeWluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgZm9yIHB1cnBvc2VzIG9mIHRoZSBzYW1wbGUsIHB1dCB1cCBhIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KEJpbmRpbmcudGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcucmVtb3RlX2NhbGxfZmFpbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gQ29kZSBzaG93aW5nIGhvdyB0byBkZWFsIHdpdGggY2FsbGJhY2tzLgorICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkIHRvIHJlY2VpdmUgY2FsbGJhY2tzIGZyb20gdGhlIHJlbW90ZQorICAgICAgICAgKiBzZXJ2aWNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBJUmVtb3RlU2VydmljZUNhbGxiYWNrIG1DYWxsYmFjayA9IG5ldyBJUmVtb3RlU2VydmljZUNhbGxiYWNrLlN0dWIoKSB7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSByZW1vdGUgc2VydmljZSByZWd1bGFybHkgdG8gdGVsbCB1cyBhYm91dAorICAgICAgICAgICAgICogbmV3IHZhbHVlcy4gIE5vdGUgdGhhdCBJUEMgY2FsbHMgYXJlIGRpc3BhdGNoZWQgdGhyb3VnaCBhIHRocmVhZAorICAgICAgICAgICAgICogcG9vbCBydW5uaW5nIGluIGVhY2ggcHJvY2Vzcywgc28gdGhlIGNvZGUgZXhlY3V0aW5nIGhlcmUgd2lsbAorICAgICAgICAgICAgICogTk9UIGJlIHJ1bm5pbmcgaW4gb3VyIG1haW4gdGhyZWFkIGxpa2UgbW9zdCBvdGhlciB0aGluZ3MgLS0gc28sCisgICAgICAgICAgICAgKiB0byB1cGRhdGUgdGhlIFVJLCB3ZSBuZWVkIHRvIHVzZSBhIEhhbmRsZXIgdG8gaG9wIG92ZXIgdGhlcmUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZhbHVlQ2hhbmdlZChpbnQgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZShtSGFuZGxlci5vYnRhaW5NZXNzYWdlKEJVTVBfTVNHLCB2YWx1ZSwgMCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVTVBfTVNHID0gMTsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgSGFuZGxlciBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQlVNUF9NU0c6CisgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIlJlY2VpdmVkIGZyb20gc2VydmljZTogIiArIG1zZy5hcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIuaGFuZGxlTWVzc2FnZShtc2cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9OworICAgIH0KKy8vIEVORF9JTkNMVURFKGNhbGxpbmdfYV9zZXJ2aWNlKQogfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlQmluZGluZy5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlQmluZGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWFkNGU1Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvUmVtb3RlU2VydmljZUJpbmRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwotCi1pbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKLQotLy8gQkVHSU5fSU5DTFVERShleHBvc2luZ19hX3NlcnZpY2UpCi1wdWJsaWMgY2xhc3MgUmVtb3RlU2VydmljZUJpbmRpbmcgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgLyoqIFRoZSBwcmltYXJ5IGludGVyZmFjZSB3ZSB3aWxsIGJlIGNhbGxpbmcgb24gdGhlIHNlcnZpY2UuICovCi0gICAgSVJlbW90ZVNlcnZpY2UgbVNlcnZpY2UgPSBudWxsOwotICAgIC8qKiBBbm90aGVyIGludGVyZmFjZSB3ZSB1c2Ugb24gdGhlIHNlcnZpY2UuICovCi0gICAgSVNlY29uZGFyeSBtU2Vjb25kYXJ5U2VydmljZSA9IG51bGw7Ci0gICAgCi0gICAgQnV0dG9uIG1LaWxsQnV0dG9uOwotICAgIFRleHRWaWV3IG1DYWxsYmFja1RleHQ7Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gbUlzQm91bmQ7Ci0KLSAgICAvKioKLSAgICAgKiBTdGFuZGFyZCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGFjdGl2aXR5LiAgU2V0IHVwIHRoZSBVSSwgdGhlbiB3YWl0Ci0gICAgICogZm9yIHRoZSB1c2VyIHRvIHBva2UgaXQgYmVmb3JlIGRvaW5nIGFueXRoaW5nLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5yZW1vdGVfc2VydmljZV9iaW5kaW5nKTsKLQotICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KLSAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuYmluZCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJpbmRMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQudW5iaW5kKTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtVW5iaW5kTGlzdGVuZXIpOwotICAgICAgICBtS2lsbEJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQua2lsbCk7Ci0gICAgICAgIG1LaWxsQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtS2lsbExpc3RlbmVyKTsKLSAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBtQ2FsbGJhY2tUZXh0ID0gKFRleHRWaWV3KWZpbmRWaWV3QnlJZChSLmlkLmNhbGxiYWNrKTsKLSAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJOb3QgYXR0YWNoZWQuIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xhc3MgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIG1haW4gaW50ZXJmYWNlIG9mIHRoZSBzZXJ2aWNlLgotICAgICAqLwotICAgIHByaXZhdGUgU2VydmljZUNvbm5lY3Rpb24gbUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICBJQmluZGVyIHNlcnZpY2UpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmljZSBoYXMgYmVlbgotICAgICAgICAgICAgLy8gZXN0YWJsaXNoZWQsIGdpdmluZyB1cyB0aGUgc2VydmljZSBvYmplY3Qgd2UgY2FuIHVzZSB0bwotICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VydmljZS4gIFdlIGFyZSBjb21tdW5pY2F0aW5nIHdpdGggb3VyCi0gICAgICAgICAgICAvLyBzZXJ2aWNlIHRocm91Z2ggYW4gSURMIGludGVyZmFjZSwgc28gZ2V0IGEgY2xpZW50LXNpZGUKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgZnJvbSB0aGUgcmF3IHNlcnZpY2Ugb2JqZWN0LgotICAgICAgICAgICAgbVNlcnZpY2UgPSBJUmVtb3RlU2VydmljZS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpOwotICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiQXR0YWNoZWQuIik7Ci0KLSAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gbW9uaXRvciB0aGUgc2VydmljZSBmb3IgYXMgbG9uZyBhcyB3ZSBhcmUKLSAgICAgICAgICAgIC8vIGNvbm5lY3RlZCB0byBpdC4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2UucmVnaXN0ZXJDYWxsYmFjayhtQ2FsbGJhY2spOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIHNlcnZpY2UgaGFzIGNyYXNoZWQgYmVmb3JlIHdlIGNvdWxkIGV2ZW4KLSAgICAgICAgICAgICAgICAvLyBkbyBhbnl0aGluZyB3aXRoIGl0OyB3ZSBjYW4gY291bnQgb24gc29vbiBiZWluZwotICAgICAgICAgICAgICAgIC8vIGRpc2Nvbm5lY3RlZCAoYW5kIHRoZW4gcmVjb25uZWN0ZWQgaWYgaXQgY2FuIGJlIHJlc3RhcnRlZCkKLSAgICAgICAgICAgICAgICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEFzIHBhcnQgb2YgdGhlIHNhbXBsZSwgdGVsbCB0aGUgdXNlciB3aGF0IGhhcHBlbmVkLgotICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoUmVtb3RlU2VydmljZUJpbmRpbmcudGhpcywgUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCi0gICAgICAgICAgICAvLyB1bmV4cGVjdGVkbHkgZGlzY29ubmVjdGVkIC0tIHRoYXQgaXMsIGl0cyBwcm9jZXNzIGNyYXNoZWQuCi0gICAgICAgICAgICBtU2VydmljZSA9IG51bGw7Ci0gICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiRGlzY29ubmVjdGVkLiIpOwotCi0gICAgICAgICAgICAvLyBBcyBwYXJ0IG9mIHRoZSBzYW1wbGUsIHRlbGwgdGhlIHVzZXIgd2hhdCBoYXBwZW5lZC4KLSAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KFJlbW90ZVNlcnZpY2VCaW5kaW5nLnRoaXMsIFIuc3RyaW5nLnJlbW90ZV9zZXJ2aWNlX2Rpc2Nvbm5lY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQ2xhc3MgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHNlY29uZGFyeSBpbnRlcmZhY2Ugb2YgdGhlIHNlcnZpY2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTZXJ2aWNlQ29ubmVjdGlvbiBtU2Vjb25kYXJ5Q29ubmVjdGlvbiA9IG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgIElCaW5kZXIgc2VydmljZSkgewotICAgICAgICAgICAgLy8gQ29ubmVjdGluZyB0byBhIHNlY29uZGFyeSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgYXMgYW55Ci0gICAgICAgICAgICAvLyBvdGhlciBpbnRlcmZhY2UuCi0gICAgICAgICAgICBtU2Vjb25kYXJ5U2VydmljZSA9IElTZWNvbmRhcnkuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKTsKLSAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIG1TZWNvbmRhcnlTZXJ2aWNlID0gbnVsbDsKLSAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1CaW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgLy8gRXN0YWJsaXNoIGEgY291cGxlIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UsIGJpbmRpbmcKLSAgICAgICAgICAgIC8vIGJ5IGludGVyZmFjZSBuYW1lcy4gIFRoaXMgYWxsb3dzIG90aGVyIGFwcGxpY2F0aW9ucyB0byBiZQotICAgICAgICAgICAgLy8gaW5zdGFsbGVkIHRoYXQgcmVwbGFjZSB0aGUgcmVtb3RlIHNlcnZpY2UgYnkgaW1wbGVtZW50aW5nCi0gICAgICAgICAgICAvLyB0aGUgc2FtZSBpbnRlcmZhY2UuCi0gICAgICAgICAgICBiaW5kU2VydmljZShuZXcgSW50ZW50KElSZW1vdGVTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKSksCi0gICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOwotICAgICAgICAgICAgYmluZFNlcnZpY2UobmV3IEludGVudChJU2Vjb25kYXJ5LmNsYXNzLmdldE5hbWUoKSksCi0gICAgICAgICAgICAgICAgICAgIG1TZWNvbmRhcnlDb25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOwotICAgICAgICAgICAgbUlzQm91bmQgPSB0cnVlOwotICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJCaW5kaW5nLiIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1VbmJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBpZiAobUlzQm91bmQpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHJlY2VpdmVkIHRoZSBzZXJ2aWNlLCBhbmQgaGVuY2UgcmVnaXN0ZXJlZCB3aXRoCi0gICAgICAgICAgICAgICAgLy8gaXQsIHRoZW4gbm93IGlzIHRoZSB0aW1lIHRvIHVucmVnaXN0ZXIuCi0gICAgICAgICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnVucmVnaXN0ZXJDYWxsYmFjayhtQ2FsbGJhY2spOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIHdlIG5lZWQgdG8gZG8gaWYgdGhlIHNlcnZpY2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBjcmFzaGVkLgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIERldGFjaCBvdXIgZXhpc3RpbmcgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAgICB1bmJpbmRTZXJ2aWNlKG1Db25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICB1bmJpbmRTZXJ2aWNlKG1TZWNvbmRhcnlDb25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBtSXNCb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiVW5iaW5kaW5nLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1LaWxsTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgLy8gVG8ga2lsbCB0aGUgcHJvY2VzcyBob3N0aW5nIG91ciBzZXJ2aWNlLCB3ZSBuZWVkIHRvIGtub3cgaXRzCi0gICAgICAgICAgICAvLyBQSUQuICBDb252ZW5pZW50bHkgb3VyIHNlcnZpY2UgaGFzIGEgY2FsbCB0aGF0IHdpbGwgcmV0dXJuCi0gICAgICAgICAgICAvLyB0byB1cyB0aGF0IGluZm9ybWF0aW9uLgotICAgICAgICAgICAgaWYgKG1TZWNvbmRhcnlTZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpbnQgcGlkID0gbVNlY29uZGFyeVNlcnZpY2UuZ2V0UGlkKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCwgdGhvdWdoIHRoaXMgQVBJIGFsbG93cyB1cyB0byByZXF1ZXN0IHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIGtpbGwgYW55IHByb2Nlc3MgYmFzZWQgb24gaXRzIFBJRCwgdGhlIGtlcm5lbCB3aWxsCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIGltcG9zZSBzdGFuZGFyZCByZXN0cmljdGlvbnMgb24gd2hpY2ggUElEcyB5b3UKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGFjdHVhbGx5IGFibGUgdG8ga2lsbC4gIFR5cGljYWxseSB0aGlzIG1lYW5zIG9ubHkKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgcnVubmluZyB5b3VyIGFwcGxpY2F0aW9uIGFuZCBhbnkgYWRkaXRpb25hbAotICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZXMgY3JlYXRlZCBieSB0aGF0IGFwcCBhcyBzaG93biBoZXJlOyBwYWNrYWdlcwotICAgICAgICAgICAgICAgICAgICAvLyBzaGFyaW5nIGEgY29tbW9uIFVJRCB3aWxsIGFsc28gYmUgYWJsZSB0byBraWxsIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIncyBwcm9jZXNzZXMuCi0gICAgICAgICAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MocGlkKTsKLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJLaWxsZWQgc2VydmljZSBwcm9jZXNzLiIpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZWNvdmVyIGdyYWNlZnVsbHkgZnJvbSB0aGUgcHJvY2VzcyBob3N0aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXIgZHlpbmcuCi0gICAgICAgICAgICAgICAgICAgIC8vIEp1c3QgZm9yIHB1cnBvc2VzIG9mIHRoZSBzYW1wbGUsIHB1dCB1cCBhIG5vdGlmaWNhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoUmVtb3RlU2VydmljZUJpbmRpbmcudGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5yZW1vdGVfY2FsbF9mYWlsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gQ29kZSBzaG93aW5nIGhvdyB0byBkZWFsIHdpdGggY2FsbGJhY2tzLgotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAKLSAgICAvKioKLSAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBjYWxsYmFja3MgZnJvbSB0aGUgcmVtb3RlCi0gICAgICogc2VydmljZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIElSZW1vdGVTZXJ2aWNlQ2FsbGJhY2sgbUNhbGxiYWNrID0gbmV3IElSZW1vdGVTZXJ2aWNlQ2FsbGJhY2suU3R1YigpIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSByZW1vdGUgc2VydmljZSByZWd1bGFybHkgdG8gdGVsbCB1cyBhYm91dAotICAgICAgICAgKiBuZXcgdmFsdWVzLiAgTm90ZSB0aGF0IElQQyBjYWxscyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIGEgdGhyZWFkCi0gICAgICAgICAqIHBvb2wgcnVubmluZyBpbiBlYWNoIHByb2Nlc3MsIHNvIHRoZSBjb2RlIGV4ZWN1dGluZyBoZXJlIHdpbGwKLSAgICAgICAgICogTk9UIGJlIHJ1bm5pbmcgaW4gb3VyIG1haW4gdGhyZWFkIGxpa2UgbW9zdCBvdGhlciB0aGluZ3MgLS0gc28sCi0gICAgICAgICAqIHRvIHVwZGF0ZSB0aGUgVUksIHdlIG5lZWQgdG8gdXNlIGEgSGFuZGxlciB0byBob3Agb3ZlciB0aGVyZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHZhbHVlQ2hhbmdlZChpbnQgdmFsdWUpIHsKLSAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoQlVNUF9NU0csIHZhbHVlLCAwKSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVU1QX01TRyA9IDE7Ci0gICAgCi0gICAgcHJpdmF0ZSBIYW5kbGVyIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZy53aGF0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBCVU1QX01TRzoKLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJSZWNlaXZlZCBmcm9tIHNlcnZpY2U6ICIgKyBtc2cuYXJnMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLmhhbmRsZU1lc3NhZ2UobXNnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICB9OwotfQotLy8gRU5EX0lOQ0xVREUoZXhwb3NpbmdfYV9zZXJ2aWNlKQotCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2VDb250cm9sbGVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2VDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MWQ0MTEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlQ29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKLQotLy8gTmVlZCB0aGUgZm9sbG93aW5nIGltcG9ydCB0byBnZXQgYWNjZXNzIHRvIHRoZSBhcHAgcmVzb3VyY2VzLCBzaW5jZSB0aGlzCi0vLyBjbGFzcyBpcyBpbiBhIHN1Yi1wYWNrYWdlLgotaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotCi1wdWJsaWMgY2xhc3MgUmVtb3RlU2VydmljZUNvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnJlbW90ZV9zZXJ2aWNlX2NvbnRyb2xsZXIpOwotCi0gICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgotICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0YXJ0TGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3ApOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdG9wTGlzdGVuZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2VydmljZSBpcyBzdGFydGVkLiAgSXQgd2lsbCBjb250aW51ZSBydW5uaW5nCi0gICAgICAgICAgICAvLyB1bnRpbCBzb21lb25lIGNhbGxzIHN0b3BTZXJ2aWNlKCkuCi0gICAgICAgICAgICAvLyBXZSB1c2UgYW4gYWN0aW9uIGNvZGUgaGVyZSwgaW5zdGVhZCBvZiBleHBsaWN0bHkgc3VwcGx5aW5nCi0gICAgICAgICAgICAvLyB0aGUgY29tcG9uZW50IG5hbWUsIHNvIHRoYXQgb3RoZXIgcGFja2FnZXMgY2FuIHJlcGxhY2UKLSAgICAgICAgICAgIC8vIHRoZSBzZXJ2aWNlLgotICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKG5ldyBJbnRlbnQoCi0gICAgICAgICAgICAgICAgICAgICJjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLlJFTU9URV9TRVJWSUNFIikpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdG9wTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgLy8gQ2FuY2VsIGEgcHJldmlvdXMgY2FsbCB0byBzdGFydFNlcnZpY2UoKS4gIE5vdGUgdGhhdCB0aGUKLSAgICAgICAgICAgIC8vIHNlcnZpY2Ugd2lsbCBub3QgYWN0dWFsbHkgc3RvcCBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGFyZQotICAgICAgICAgICAgLy8gc3RpbGwgYm91bmQgY2xpZW50cy4KLSAgICAgICAgICAgIHN0b3BTZXJ2aWNlKG5ldyBJbnRlbnQoCi0gICAgICAgICAgICAgICAgICAgICJjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLlJFTU9URV9TRVJWSUNFIikpOwotICAgICAgICB9Ci0gICAgfTsKLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvU2VydmljZVN0YXJ0QXJndW1lbnRzLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1NlcnZpY2VTdGFydEFyZ3VtZW50cy5qYXZhCmluZGV4IGY0ZjlhZjEuLmY1NTE0NDcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvU2VydmljZVN0YXJ0QXJndW1lbnRzLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9TZXJ2aWNlU3RhcnRBcmd1bWVudHMuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7CiAKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwpAQCAtMjksMTMgKzMwLDE2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CiAKIGltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKIAogLyoqCiAgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaW1wbGVtZW50aW5nIGFuIGFwcGxpY2F0aW9uIHNlcnZpY2UgdGhhdCBydW5zIGxvY2FsbHkKLSAqIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIHtAbGluayBTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyfQorICogaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0aGUgYXBwbGljYXRpb24uICBUaGUge0BsaW5rIENvbnRyb2xsZXJ9CiAgKiBjbGFzcyBzaG93cyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VydmljZS4gCiAgKgogICogPHA+Tm90aWNlIHRoZSB1c2Ugb2YgdGhlIHtAbGluayBOb3RpZmljYXRpb25NYW5hZ2VyfSB3aGVuIGludGVyZXN0aW5nIHRoaW5ncwpAQCAtNDQsNyArNDgsNyBAQAogICogY2FsbGluZyBzdGFydEFjdGl2aXR5KCkuCiAgKiAKICAqIDxwPkZvciBhcHBsaWNhdGlvbnMgdGFyZ2V0aW5nIEFuZHJvaWQgMS41IG9yIGJleW9uZCwgeW91IG1heSB3YW50IGNvbnNpZGVyCi0gKiB1c2luZyB0aGUgYW5kcm9pZC5hcHAuSW50ZW50U2VydmljZSBjbGFzcywgd2hpY2ggdGFrZXMgY2FyZSBvZiBhbGwgdGhlCisgKiB1c2luZyB0aGUge0BsaW5rIGFuZHJvaWQuYXBwLkludGVudFNlcnZpY2V9IGNsYXNzLCB3aGljaCB0YWtlcyBjYXJlIG9mIGFsbCB0aGUKICAqIHdvcmsgb2YgY3JlYXRpbmcgdGhlIGV4dHJhIHRocmVhZCBhbmQgZGlzcGF0Y2hpbmcgY29tbWFuZHMgdG8gaXQuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZXJ2aWNlU3RhcnRBcmd1bWVudHMgZXh0ZW5kcyBTZXJ2aWNlIHsKQEAgLTU5LDggKzYzLDcgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpCi0gICAgICAgIHsKKyAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewogICAgICAgICAgICAgQnVuZGxlIGFyZ3VtZW50cyA9IChCdW5kbGUpbXNnLm9iajsKICAgICAgICAgCiAgICAgICAgICAgICBTdHJpbmcgdHh0ID0gYXJndW1lbnRzLmdldFN0cmluZygibmFtZSIpOwpAQCAtMTA1LDcgKzEwOCw3IEBACiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHdobyBzaG91bGQgYmUgbGF1bmNoZWQgaWYgdGhlIHVzZXIgc2VsZWN0cyBvdXIgcGVyc2lzdGVudAogICAgICAgICAvLyBub3RpZmljYXRpb24uCi0gICAgICAgIG1JbnZva2VJbnRlbnQgPSBuZXcgSW50ZW50KHRoaXMsIFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIuY2xhc3MpOworICAgICAgICBtSW52b2tlSW50ZW50ID0gbmV3IEludGVudCh0aGlzLCBDb250cm9sbGVyLmNsYXNzKTsKIAogICAgICAgICAvLyBTdGFydCB1cCB0aGUgdGhyZWFkIHJ1bm5pbmcgdGhlIHNlcnZpY2UuICBOb3RlIHRoYXQgd2UgY3JlYXRlIGEKICAgICAgICAgLy8gc2VwYXJhdGUgdGhyZWFkIGJlY2F1c2UgdGhlIHNlcnZpY2Ugbm9ybWFsbHkgcnVucyBpbiB0aGUgcHJvY2VzcydzCkBAIC0xNzcsNyArMTgwLDcgQEAKIAogICAgICAgICAvLyBUaGUgUGVuZGluZ0ludGVudCB0byBsYXVuY2ggb3VyIGFjdGl2aXR5IGlmIHRoZSB1c2VyIHNlbGVjdHMgdGhpcyBub3RpZmljYXRpb24KICAgICAgICAgUGVuZGluZ0ludGVudCBjb250ZW50SW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRBY3Rpdml0eSh0aGlzLCAwLAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQodGhpcywgQWxhcm1TZXJ2aWNlLmNsYXNzKSwgMCk7CisgICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBDb250cm9sbGVyLmNsYXNzKSwgMCk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBpbmZvIGZvciB0aGUgdmlld3MgdGhhdCBzaG93IGluIHRoZSBub3RpZmljYXRpb24gcGFuZWwuCiAgICAgICAgIG5vdGlmaWNhdGlvbi5zZXRMYXRlc3RFdmVudEluZm8odGhpcywgZ2V0VGV4dChSLnN0cmluZy5zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19sYWJlbCksCkBAIC0xOTQsNSArMTk3LDc2IEBACiAgICAgcHJpdmF0ZSB2b2lkIGhpZGVOb3RpZmljYXRpb24oKSB7CiAgICAgICAgIG1OTS5jYW5jZWwoUi5zdHJpbmcuc2VydmljZV9jcmVhdGVkKTsKICAgICB9CisgICAgCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRXhhbXBsZSBvZiBleHBsaWNpdGx5IHN0YXJ0aW5nIHRoZSB7QGxpbmsgU2VydmljZVN0YXJ0QXJndW1lbnRzfS4KKyAgICAgKiAKKyAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBpbm5lciBjbGFzcyBvbmx5IGtlZXAgdGhlIHNhbXBsZQorICAgICAqIGFsbCB0b2dldGhlcjsgdHlwaWNhbGx5IHRoaXMgY29kZSB3b3VsZCBhcHBlYXIgaW4gc29tZSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydDEpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnQxTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydDIpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnQyTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydDMpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnQzTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydGZhaWwpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRGYWlsTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5raWxsKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUtpbGxMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RhcnQxTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChDb250cm9sbGVyLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlU3RhcnRBcmd1bWVudHMuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJPbmUiKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0Mkxpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKG5ldyBJbnRlbnQoQ29udHJvbGxlci50aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiVHdvIikpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydDNMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KENvbnRyb2xsZXIudGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VTdGFydEFyZ3VtZW50cy5jbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnB1dEV4dHJhKCJuYW1lIiwgIlRocmVlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnB1dEV4dHJhKCJyZWRlbGl2ZXIiLCB0cnVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0RmFpbExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKG5ldyBJbnRlbnQoQ29udHJvbGxlci50aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiRmFpbHVyZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgiZmFpbCIsIHRydWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtS2lsbExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBzaW11bGF0ZSB0aGUgc2VydmljZSBiZWluZyBraWxsZWQgd2hpbGUgaXQgaXMKKyAgICAgICAgICAgICAgICAvLyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MoUHJvY2Vzcy5teVBpZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvU2VydmljZVN0YXJ0QXJndW1lbnRzQ29udHJvbGxlci5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9TZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNzllMmUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9TZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwotCi0vLyBOZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKLS8vIGNsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLQotaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwotCi0vKioKLSAqIEV4YW1wbGUgb2YgZXhwbGljaXRseSBzdGFydGluZyB0aGUge0BsaW5rIFNlcnZpY2VTdGFydEFyZ3VtZW50c30uCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyIGV4dGVuZHMgQWN0aXZpdHkgewotICAgIEBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyKTsKLQotICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KLSAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnQxKTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnQxTGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0Mik7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0YXJ0Mkxpc3RlbmVyKTsKLSAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydDMpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydDNMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRmYWlsKTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRGYWlsTGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmtpbGwpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1LaWxsTGlzdGVuZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydDFMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLnRoaXMsCi0gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VTdGFydEFyZ3VtZW50cy5jbGFzcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiT25lIikpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydDJMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLnRoaXMsCi0gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VTdGFydEFyZ3VtZW50cy5jbGFzcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiVHdvIikpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydDNMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLnRoaXMsCi0gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VTdGFydEFyZ3VtZW50cy5jbGFzcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiVGhyZWUiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgicmVkZWxpdmVyIiwgdHJ1ZSkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydEZhaWxMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLnRoaXMsCi0gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VTdGFydEFyZ3VtZW50cy5jbGFzcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiRmFpbHVyZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnB1dEV4dHJhKCJmYWlsIiwgdHJ1ZSkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1LaWxsTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBzaW11bGF0ZSB0aGUgc2VydmljZSBiZWluZyBraWxsZWQgd2hpbGUgaXQgaXMKLSAgICAgICAgICAgIC8vIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQuCi0gICAgICAgICAgICBQcm9jZXNzLmtpbGxQcm9jZXNzKFByb2Nlc3MubXlQaWQoKSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9faW5kZXguaHRtbCBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvX2luZGV4Lmh0bWwKaW5kZXggMjQ1NGJhZC4uZmZmNWNlMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9faW5kZXguaHRtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL19pbmRleC5odG1sCkBAIC00MSw1NSArNDEsNDQgQEAKIAogPGgzPlNlcnZpY2U8L2gzPgogPGRsPgotICA8ZHQ+PGEgaHJlZj0iTG9jYWxTZXJ2aWNlQ29udHJvbGxlci5odG1sIj5Mb2NhbCBTZXJ2aWNlIENvbnRyb2xsZXI8L2E+PC9kdD4KLSAgPGRkPlN0YXJ0cyBhbmQgc3RvcHMgdGhlIHNlcnZpY2UgY2xhc3MKLSAgPGEgaHJlZj0iTG9jYWxTZXJ2aWNlLmh0bWwiPkxvY2FsU2VydmljZTwvYT4gdGhhdCBydW5zIGluIHRoZSBzYW1lCi0gIHByb2Nlc3MgYXMgdGhlIGFjdGl2aXR5LCB0byBkZW1vbnN0cmF0ZSBhIHNlcnZpY2UncwotICBsaWZlY3ljbGUgd2hlbiB1c2luZyB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjc3RhcnRTZXJ2aWNlCisgIDxkdD48YSBocmVmPSJMb2NhbFNlcnZpY2UuaHRtbCI+TG9jYWwgU2VydmljZSBDb250cm9sbGVyIGFuZAorICAgICAgICBMb2NhbCBTZXJ2aWNlIEJpbmRpbmc8L2E+PC9kdD4KKyAgPGRkPkRlbW9uc3RyYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlcnZpY2UgdGhhdCBydW5zIGluIHRoZSBzYW1lCisgIHByb2Nlc3MgYXMgaXRzIGNsaWVudChzKS4gIFNob3dzIGhvdyB0aG9zZSBjbGllbnRzIGNhbiBlaXRoZXIgc3RhcnQvc3RvcCBpdAorICB3aXRoIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNzdGFydFNlcnZpY2UKICAgQ29udGV4dC5zdGFydFNlcnZpY2V9IGFuZCB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjc3RvcFNlcnZpY2UKLSAgQ29udGV4dC5zdG9wU2VydmljZX0uPC9kZD4KLQotICA8ZHQ+PGEgaHJlZj0iTG9jYWxTZXJ2aWNlQmluZGluZy5odG1sIj5Mb2NhbCBTZXJ2aWNlIEJpbmRpbmc8L2E+PC9kdD4KLSAgPGRkPkRlbW9uc3RyYXRlcyBiaW5kaW5nIHRvIGEgc2VydmljZSBjbGFzcwotICA8YSBocmVmPSJMb2NhbFNlcnZpY2UuaHRtbCI+TG9jYWxTZXJ2aWNlPC9hPiB0aGF0IHJ1bnMgaW4gdGhlIHNhbWUKLSAgcHJvY2VzcyBhcyB0aGUgYWN0aXZpdHksIHRvIGRlbW9uc3RyYXRlIHVzaW5nIHRoZQorICBDb250ZXh0LnN0b3BTZXJ2aWNlfSwgb3IgYmluZCBhbmQgY2FsbCBpdCB3aXRoCiAgIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNiaW5kU2VydmljZSBDb250ZXh0LmJpbmRTZXJ2aWNlfSBhbmQKLSAge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I3VuYmluZFNlcnZpY2UgQ29udGV4dC51bmluZFNlcnZpY2V9Ci0gIG1ldGhvZHMgd2l0aCBhIHNlcnZpY2UuICBUaGlzIGFsc28gc2hvd3MgaG93IHlvdSBjYW4gc2ltcGxpZnkgd29ya2luZworICB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjdW5iaW5kU2VydmljZSBDb250ZXh0LnVuaW5kU2VydmljZX0uCisgIFRoaXMgYWxzbyBzaG93cyBob3cgeW91IGNhbiBzaW1wbGlmeSB3b3JraW5nCiAgIHdpdGggYSBzZXJ2aWNlIHdoZW4geW91IGtub3cgaXQgd2lsbCBvbmx5IHJ1biBpbiB5b3VyIG93biBwcm9jZXNzLjwvZGQ+Ci0KLSAgPGR0PjxhIGhyZWY9IlJlbW90ZVNlcnZpY2VDb250cm9sbGVyLmh0bWwiPlJlbW90ZSBTZXJ2aWNlIENvbnRyb2xsZXI8L2E+PC9kdD4KKyAgCisgIDxkdD48YSBocmVmPSJSZW1vdGVTZXJ2aWNlLmh0bWwiPlJlbW90ZSBTZXJ2aWNlIENvbnRyb2xsZXIgYW5kCisgICAgICAgIFJlbW92ZSBTZXJ2aWNlIEJpbmRpbmc8L2E+PC9kdD4KICAgPGRkPkRlbW9uc3RyYXRlcyBzdGFydGluZyBhIHNlcnZpY2UgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCBieSBhc3NpZ25pbmcKICAgPGNvZGU+YW5kcm9pZDpwcm9jZXNzPSZxdW90OzpyZW1vdGUmcXVvdDs8L2NvZGU+IHRvIHRoZSBzZXJ2aWNlIGluIHRoZQotICBBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGUuIDwvZGQ+Ci0KLSAgPGR0PjxhIGhyZWY9IlJlbW90ZVNlcnZpY2VCaW5kaW5nLmh0bWwiPlJlbW90ZSBTZXJ2aWNlIEJpbmRpbmc8L2E+PC9kdD4KLSAgPGRkPkRlbW9uc3RyYXRlcyBiaW5kaW5nIHRvIGEgcmVtb3RlIHNlcnZpY2UsIHNpbWlsYXIgdG8gdGhlIExvY2FsIFNlcnZpY2UKLSAgQmluZGluZyBzYW1wbGUsIGJ1dCBpbGx1c3RyYXRpbmcgdGhlIGFkZGl0aW9uYWwgd29yayAoZGVmaW5pbmcgYWlkbAorICBBbmRyb2lkTWFuaWZlc3QueG1sIGZpbGUuICBTaG93cyBob3cgdGhvc2UgY2xpZW50cyBjYW4gZWl0aGVyIHN0YXJ0L3N0b3AgaXQKKyAgd2l0aCB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjc3RhcnRTZXJ2aWNlCisgIENvbnRleHQuc3RhcnRTZXJ2aWNlfSBhbmQge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I3N0b3BTZXJ2aWNlCisgIENvbnRleHQuc3RvcFNlcnZpY2V9LCBvciBiaW5kIGFuZCBjYWxsIGl0IHdpdGgKKyAge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I2JpbmRTZXJ2aWNlIENvbnRleHQuYmluZFNlcnZpY2V9IGFuZAorICB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjdW5iaW5kU2VydmljZSBDb250ZXh0LnVuaW5kU2VydmljZX0uCisgIEJpbmRpbmcgaXMgc2ltaWxhciB0byB0aGUgbG9jYWwgc2VydmljZSBzYW1wbGUsCisgIGJ1dCBpbGx1c3RyYXRlcyB0aGUgYWRkaXRpb25hbCB3b3JrIChkZWZpbmluZyBhaWRsCiAgIGludGVyZmFjZXMpIG5lZWRlZCB0byBpbnRlcmFjdCB3aXRoIGEgc2VydmljZSBpbiBhbm90aGVyIHByb2Nlc3MuICBBbHNvCiAgIHNob3dzIGhvdyBhIHNlcnZpY2UgY2FuIHB1Ymxpc2ggbXVsdGlwbGUgaW50ZXJmYWNlcyBhbmQgaW1wbGVtZW50CiAgIGNhbGxiYWNrcyB0byBpdHMgY2xpZW50cy48L2RkPgogCi0gIDxkdD48YSBocmVmPSJTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLmh0bWwiPlNlcnZpY2UgU3RhcnQgQXJndW1lbnRzIENvbnRyb2xsZXI8L2E+PC9kdD4KKyAgPGR0PjxhIGhyZWY9IlNlcnZpY2VTdGFydEFyZ3VtZW50cy5odG1sIj5TZXJ2aWNlIFN0YXJ0IEFyZ3VtZW50cyBDb250cm9sbGVyPC9hPjwvZHQ+CiAgIDxkZD5EZW1vbnN0cmF0ZXMgaG93IHlvdSBjYW4gdXNlIGEgU2VydmljZSBhcyBhIGpvYiBxdWV1ZSwgd2hlcmUgeW91IAogICBzdWJtaXQgam9icyB0byBpdCB3aXRoIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNzdGFydFNlcnZpY2UKICAgQ29udGV4dC5zdGFydFNlcnZpY2V9IGluc3RlYWQgb2YgYmluZGluZyB0byB0aGUgc2VydmljZS4gIFN1Y2ggYSBzZXJ2aWNlCiAgIGF1dG9tYXRpY2FsbHkgc3RvcHMgaXRzZWxmIG9uY2UgYWxsIGpvYnMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIFRoaXMgY2FuIGJlCiAgIGEgdmVyeSBjb252ZW5pZW50IHdheSB0byBpbnRlcmFjdCB3aXRoIGEgc2VydmljZSB3aGVuIHlvdSBkbyBub3QgbmVlZAotICBhIHJlc3VsdCBiYWNrIGZyb20gaXQuCi0gIDxkbD4KLSAgPGR0PkNvZGU6Ci0gIDxkZD4gPGEgaHJlZj0iU2VydmljZVN0YXJ0QXJndW1lbnRzQ29udHJvbGxlci5odG1sIj5TZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLmphdmE8L2E+Ci0gIDxkZD4gPGEgaHJlZj0iU2VydmljZVN0YXJ0QXJndW1lbnRzLmh0bWwiPlNlcnZpY2VTdGFydEFyZ3VtZW50cy5qYXZhPC9hPgotICA8ZHQ+TGF5b3V0OgotICA8ZGQ+IDxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL3Jlcy9sYXlvdXQvc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlci5odG1sIj4KLSAgc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlci54bWw8L2E+Ci0gIDwvZGw+Ci0gIDwvZGQ+CisgIGEgcmVzdWx0IGJhY2sgZnJvbSBpdC48L2RkPgogICAKLSAgPGR0PjxhIGhyZWY9IkZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlci5odG1sIj5Gb3JlZ3JvdW5kIFNlcnZpY2UgQ29udHJvbGxlcjwvYT48L2R0PgotICA8ZGQ+Q29udHJvbHMgdGhlIHNlcnZpY2UgY2xhc3MgCi0gIDxhIGhyZWY9IkZvcmVncm91bmRTZXJ2aWNlLmh0bWwiPkZvcmVncm91bmRTZXJ2aWNlPC9hPiwgd2hpY2ggc2hvd3MgaG93IHlvdQorICA8ZHQ+PGEgaHJlZj0iRm9yZWdyb3VuZFNlcnZpY2UuaHRtbCI+Rm9yZWdyb3VuZCBTZXJ2aWNlIENvbnRyb2xsZXI8L2E+PC9kdD4KKyAgPGRkPlNob3dzIGhvdyB5b3UKICAgY2FuIHdyaXRlIGEgU2VydmljZSB0aGF0IHJ1bnMgaW4gdGhlIGZvcmVncm91bmQgYW5kIHdvcmtzIG9uIGJvdGggcHJlLTIuMAogICBhbmQgcG9zdC0yLjAgdmVyc2lvbnMgb2YgdGhlIHBsYXRmb3JtLiAgVGhpcyBleGFtcGxlIHdpbGwgc2VsZWN0aXZlbHkgdXNlCiAgIHRoZSBuZXcgZm9yZWdyb3VuZCBBUElzIHRoYXQgd2VyZSBpbnRyb2R1Y2VkIGluIEFuZHJvaWQgMi4wIGlmIHRoZXkgYXJlCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvY29udGVudC9FeHRlcm5hbFN0b3JhZ2UuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L0V4dGVybmFsU3RvcmFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NTBhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvY29udGVudC9FeHRlcm5hbFN0b3JhZ2UuamF2YQpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmNvbnRlbnQ7CisKKy8vTmVlZCB0aGUgZm9sbG93aW5nIGltcG9ydCB0byBnZXQgYWNjZXNzIHRvIHRoZSBhcHAgcmVzb3VyY2VzLCBzaW5jZSB0aGlzCisvL2NsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCitpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFTY2FubmVyQ29ubmVjdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCisKKy8qKgorKiBEZW1vbnN0cmF0aW9uIG9mIHN0eWxlZCB0ZXh0IHJlc291cmNlcy4KKyovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxTdG9yYWdlIGV4dGVuZHMgQWN0aXZpdHkgeworICAgIFZpZXdHcm91cCBtTGF5b3V0OworICAgIAorICAgIHN0YXRpYyBjbGFzcyBJdGVtIHsKKyAgICAgICAgVmlldyBtUm9vdDsKKyAgICAgICAgQnV0dG9uIG1DcmVhdGU7CisgICAgICAgIEJ1dHRvbiBtRGVsZXRlOworICAgIH0KKyAgICAKKyAgICBJdGVtIG1FeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlOworICAgIEl0ZW0gbUV4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlOworICAgIEl0ZW0gbUV4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlOworICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5leHRlcm5hbF9zdG9yYWdlKTsKKyAgICAgICAgbUxheW91dCA9IChWaWV3R3JvdXApZmluZFZpZXdCeUlkKFIuaWQubGF5b3V0KTsKKyAgICAgICAgbUV4dGVybmFsU3RvcmFnZVB1YmxpY1BpY3R1cmUgPSBjcmVhdGVTdG9yYWdlQ29udHJvbHMoCisgICAgICAgICAgICAgICAgIlBpY3R1cmU6IGdldEV4dGVybmFsU3RvcmFnZVB1YmxpY0RpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlUHVibGljRGlyZWN0b3J5KAorICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuRElSRUNUT1JZX1BJQ1RVUkVTKSwKKyAgICAgICAgICAgICAgICBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVFeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIG1MYXlvdXQuYWRkVmlldyhtRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZS5tUm9vdCk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZSA9IGNyZWF0ZVN0b3JhZ2VDb250cm9scygKKyAgICAgICAgICAgICAgICAiUGljdHVyZSBnZXRFeHRlcm5hbEZpbGVzRGlyIiwKKyAgICAgICAgICAgICAgICBnZXRFeHRlcm5hbEZpbGVzRGlyKEVudmlyb25tZW50LkRJUkVDVE9SWV9QSUNUVVJFUyksCisgICAgICAgICAgICAgICAgbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUV4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIG1MYXlvdXQuYWRkVmlldyhtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmUubVJvb3QpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUgPSBjcmVhdGVTdG9yYWdlQ29udHJvbHMoCisgICAgICAgICAgICAgICAgIkZpbGUgZ2V0RXh0ZXJuYWxGaWxlc0RpciIsCisgICAgICAgICAgICAgICAgZ2V0RXh0ZXJuYWxGaWxlc0RpcihudWxsKSwKKyAgICAgICAgICAgICAgICBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXh0ZXJuYWxTdG9yYWdlU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgbUxheW91dC5hZGRWaWV3KG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZS5tUm9vdCk7CisgICAgICAgIAorICAgICAgICBzdGFydFdhdGNoaW5nRXh0ZXJuYWxTdG9yYWdlKCk7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICAgICAgc3VwZXIub25EZXN0cm95KCk7CisgICAgICAgIHN0b3BXYXRjaGluZ0V4dGVybmFsU3RvcmFnZSgpOworICAgIH0KKworICAgIHZvaWQgaGFuZGxlRXh0ZXJuYWxTdG9yYWdlU3RhdGUoYm9vbGVhbiBhdmFpbGFibGUsIGJvb2xlYW4gd3JpdGVhYmxlKSB7CisgICAgICAgIGJvb2xlYW4gaGFzID0gaGFzRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZSgpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZS5tQ3JlYXRlLnNldEVuYWJsZWQod3JpdGVhYmxlICYmICFoYXMpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZS5tRGVsZXRlLnNldEVuYWJsZWQod3JpdGVhYmxlICYmIGhhcyk7CisgICAgICAgIGhhcyA9IGhhc0V4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlKCk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZS5tQ3JlYXRlLnNldEVuYWJsZWQod3JpdGVhYmxlICYmICFoYXMpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmUubURlbGV0ZS5zZXRFbmFibGVkKHdyaXRlYWJsZSAmJiBoYXMpOworICAgICAgICBoYXMgPSBoYXNFeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZSgpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUubUNyZWF0ZS5zZXRFbmFibGVkKHdyaXRlYWJsZSAmJiAhaGFzKTsKKyAgICAgICAgbUV4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlLm1EZWxldGUuc2V0RW5hYmxlZCh3cml0ZWFibGUgJiYgaGFzKTsKKyAgICB9CisgICAgCisvLyBCRUdJTl9JTkNMVURFKG1vbml0b3Jfc3RvcmFnZSkKKyAgICBCcm9hZGNhc3RSZWNlaXZlciBtRXh0ZXJuYWxTdG9yYWdlUmVjZWl2ZXI7CisgICAgYm9vbGVhbiBtRXh0ZXJuYWxTdG9yYWdlQXZhaWxhYmxlID0gZmFsc2U7CisgICAgYm9vbGVhbiBtRXh0ZXJuYWxTdG9yYWdlV3JpdGVhYmxlID0gZmFsc2U7CisgICAgCisgICAgdm9pZCB1cGRhdGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpIHsKKyAgICAgICAgU3RyaW5nIHN0YXRlID0gRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoKTsKKyAgICAgICAgaWYgKEVudmlyb25tZW50Lk1FRElBX01PVU5URUQuZXF1YWxzKHN0YXRlKSkgeworICAgICAgICAgICAgbUV4dGVybmFsU3RvcmFnZUF2YWlsYWJsZSA9IG1FeHRlcm5hbFN0b3JhZ2VXcml0ZWFibGUgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKEVudmlyb25tZW50Lk1FRElBX01PVU5URURfUkVBRF9PTkxZLmVxdWFscyhzdGF0ZSkpIHsKKyAgICAgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VBdmFpbGFibGUgPSB0cnVlOworICAgICAgICAgICAgbUV4dGVybmFsU3RvcmFnZVdyaXRlYWJsZSA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUV4dGVybmFsU3RvcmFnZUF2YWlsYWJsZSA9IG1FeHRlcm5hbFN0b3JhZ2VXcml0ZWFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZShtRXh0ZXJuYWxTdG9yYWdlQXZhaWxhYmxlLAorICAgICAgICAgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VXcml0ZWFibGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdFeHRlcm5hbFN0b3JhZ2UoKSB7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgICAgIExvZy5pKCJ0ZXN0IiwgIlN0b3JhZ2U6ICIgKyBpbnRlbnQuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcigpOworICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fTUVESUFfTU9VTlRFRCk7CisgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9NRURJQV9SRU1PVkVEKTsKKyAgICAgICAgcmVnaXN0ZXJSZWNlaXZlcihtRXh0ZXJuYWxTdG9yYWdlUmVjZWl2ZXIsIGZpbHRlcik7CisgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcFdhdGNoaW5nRXh0ZXJuYWxTdG9yYWdlKCkgeworICAgICAgICB1bnJlZ2lzdGVyUmVjZWl2ZXIobUV4dGVybmFsU3RvcmFnZVJlY2VpdmVyKTsKKyAgICB9CisgLy8gRU5EX0lOQ0xVREUobW9uaXRvcl9zdG9yYWdlKQorICAgIAorIC8vIEJFR0lOX0lOQ0xVREUocHVibGljX3BpY3R1cmUpCisgICAgdm9pZCBjcmVhdGVFeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlKCkgeworICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHBpY3R1cmUgaW4gdGhlIHVzZXIncworICAgICAgICAvLyBwdWJsaWMgcGljdHVyZXMgZGlyZWN0b3J5LiAgTm90ZSB0aGF0IHlvdSBzaG91bGQgYmUgY2FyZWZ1bCBhYm91dAorICAgICAgICAvLyB3aGF0IHlvdSBwbGFjZSBoZXJlLCBzaW5jZSB0aGUgdXNlciBvZnRlbiBtYW5hZ2VzIHRoZXNlIGZpbGVzLiAgRm9yCisgICAgICAgIC8vIHBpY3R1cmVzIGFuZCBvdGhlciBtZWRpYSBvd25lZCBieSB0aGUgYXBwbGljYXRpb24sIGNvbnNpZGVyCisgICAgICAgIC8vIENvbnRleHQuZ2V0RXh0ZXJuYWxNZWRpYURpcigpLgorICAgICAgICBGaWxlIHBhdGggPSBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VQdWJsaWNEaXJlY3RvcnkoCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuRElSRUNUT1JZX1BJQ1RVUkVTKTsKKyAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUocGF0aCwgIkRlbW9QaWN0dXJlLmpwZyIpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgUGljdHVyZXMgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgICAgICAgIHBhdGgubWtkaXJzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFZlcnkgc2ltcGxlIGNvZGUgdG8gY29weSBhIHBpY3R1cmUgZnJvbSB0aGUgYXBwbGljYXRpb24ncworICAgICAgICAgICAgLy8gcmVzb3VyY2UgaW50byB0aGUgZXh0ZXJuYWwgZmlsZS4gIE5vdGUgdGhhdCB0aGlzIGNvZGUgZG9lcworICAgICAgICAgICAgLy8gbm8gZXJyb3IgY2hlY2tpbmcsIGFuZCBhc3N1bWVzIHRoZSBwaWN0dXJlIGlzIHNtYWxsIChkb2VzIG5vdAorICAgICAgICAgICAgLy8gdHJ5IHRvIGNvcHkgaXQgaW4gY2h1bmtzKS4gIE5vdGUgdGhhdCBpZiBleHRlcm5hbCBzdG9yYWdlIGlzCisgICAgICAgICAgICAvLyBub3QgY3VycmVudGx5IG1vdW50ZWQgdGhpcyB3aWxsIHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGdldFJlc291cmNlcygpLm9wZW5SYXdSZXNvdXJjZShSLmRyYXdhYmxlLmJhbGxvb25zKTsKKyAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOworICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtpcy5hdmFpbGFibGUoKV07CisgICAgICAgICAgICBpcy5yZWFkKGRhdGEpOworICAgICAgICAgICAgb3Mud3JpdGUoZGF0YSk7CisgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgb3MuY2xvc2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGVsbCB0aGUgbWVkaWEgc2Nhbm5lciBhYm91dCB0aGUgbmV3IGZpbGUgc28gdGhhdCBpdCBpcworICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLgorICAgICAgICAgICAgTWVkaWFTY2FubmVyQ29ubmVjdGlvbi5zY2FuRmlsZSh0aGlzLAorICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyBmaWxlLnRvU3RyaW5nKCkgfSwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgbmV3IE1lZGlhU2Nhbm5lckNvbm5lY3Rpb24uU2NhblJlc3VsdExpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2NhbkNvbXBsZXRlZChTdHJpbmcgcGF0aCwgVXJpIHVyaSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuaSgiRXh0ZXJuYWxTdG9yYWdlIiwgIlNjYW5uZWQgIiArIHBhdGggKyAiOiIpOworICAgICAgICAgICAgICAgICAgICBMb2cuaSgiRXh0ZXJuYWxTdG9yYWdlIiwgIi0+IHVyaT0iICsgdXJpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gVW5hYmxlIHRvIGNyZWF0ZSBmaWxlLCBsaWtlbHkgYmVjYXVzZSBleHRlcm5hbCBzdG9yYWdlIGlzCisgICAgICAgICAgICAvLyBub3QgY3VycmVudGx5IG1vdW50ZWQuCisgICAgICAgICAgICBMb2cudygiRXh0ZXJuYWxTdG9yYWdlIiwgIkVycm9yIHdyaXRpbmcgIiArIGZpbGUsIGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZSgpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcGF0aCB3aGVyZSB3ZSB3aWxsIHBsYWNlIG91ciBwaWN0dXJlIGluIHRoZSB1c2VyJ3MKKyAgICAgICAgLy8gcHVibGljIHBpY3R1cmVzIGRpcmVjdG9yeSBhbmQgZGVsZXRlIHRoZSBmaWxlLiAgSWYgZXh0ZXJuYWwKKyAgICAgICAgLy8gc3RvcmFnZSBpcyBub3QgY3VycmVudGx5IG1vdW50ZWQgdGhpcyB3aWxsIGZhaWwuCisgICAgICAgIEZpbGUgcGF0aCA9IEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZVB1YmxpY0RpcmVjdG9yeSgKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpOworICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLCAiRGVtb1BpY3R1cmUuanBnIik7CisgICAgICAgIGZpbGUuZGVsZXRlKCk7CisgICAgfQorICAgIAorICAgIGJvb2xlYW4gaGFzRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZSgpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcGF0aCB3aGVyZSB3ZSB3aWxsIHBsYWNlIG91ciBwaWN0dXJlIGluIHRoZSB1c2VyJ3MKKyAgICAgICAgLy8gcHVibGljIHBpY3R1cmVzIGRpcmVjdG9yeSBhbmQgY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzLiAgSWYKKyAgICAgICAgLy8gZXh0ZXJuYWwgc3RvcmFnZSBpcyBub3QgY3VycmVudGx5IG1vdW50ZWQgdGhpcyB3aWxsIHRoaW5rIHRoZQorICAgICAgICAvLyBwaWN0dXJlIGRvZXNuJ3QgZXhpc3QuCisgICAgICAgIEZpbGUgcGF0aCA9IEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZVB1YmxpY0RpcmVjdG9yeSgKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpOworICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLCAiRGVtb1BpY3R1cmUuanBnIik7CisgICAgICAgIHJldHVybiBmaWxlLmV4aXN0cygpOworICAgIH0KKy8vIEVORF9JTkNMVURFKHB1YmxpY19waWN0dXJlKQorICAgIAorLy8gQkVHSU5fSU5DTFVERShwcml2YXRlX3BpY3R1cmUpCisgICAgdm9pZCBjcmVhdGVFeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZSgpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcGF0aCB3aGVyZSB3ZSB3aWxsIHBsYWNlIG91ciBwaWN0dXJlIGluIG91ciBvd24gcHJpdmF0ZQorICAgICAgICAvLyBwaWN0dXJlcyBkaXJlY3RvcnkuICBOb3RlIHRoYXQgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gcGxhY2UgYQorICAgICAgICAvLyBwaWN0dXJlIGluIERJUkVDVE9SWV9QSUNUVVJFUywgc2luY2UgdGhlIG1lZGlhIHNjYW5uZXIgd2lsbCBzZWUKKyAgICAgICAgLy8gYWxsIG1lZGlhIGluIHRoZXNlIGRpcmVjdG9yaWVzOyB0aGlzIG1heSBiZSB1c2VmdWwgd2l0aCBvdGhlcgorICAgICAgICAvLyBtZWRpYSB0eXBlcyBzdWNoIGFzIERJUkVDVE9SWV9NVVNJQyBob3dldmVyIHRvIGhlbHAgaXQgY2xhc3NpZnkKKyAgICAgICAgLy8geW91ciBtZWRpYSBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4KKyAgICAgICAgRmlsZSBwYXRoID0gZ2V0RXh0ZXJuYWxGaWxlc0RpcihFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpOworICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLCAiRGVtb1BpY3R1cmUuanBnIik7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gVmVyeSBzaW1wbGUgY29kZSB0byBjb3B5IGEgcGljdHVyZSBmcm9tIHRoZSBhcHBsaWNhdGlvbidzCisgICAgICAgICAgICAvLyByZXNvdXJjZSBpbnRvIHRoZSBleHRlcm5hbCBmaWxlLiAgTm90ZSB0aGF0IHRoaXMgY29kZSBkb2VzCisgICAgICAgICAgICAvLyBubyBlcnJvciBjaGVja2luZywgYW5kIGFzc3VtZXMgdGhlIHBpY3R1cmUgaXMgc21hbGwgKGRvZXMgbm90CisgICAgICAgICAgICAvLyB0cnkgdG8gY29weSBpdCBpbiBjaHVua3MpLiAgTm90ZSB0aGF0IGlmIGV4dGVybmFsIHN0b3JhZ2UgaXMKKyAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgc2lsZW50bHkgZmFpbC4KKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gZ2V0UmVzb3VyY2VzKCkub3BlblJhd1Jlc291cmNlKFIuZHJhd2FibGUuYmFsbG9vbnMpOworICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CisgICAgICAgICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2lzLmF2YWlsYWJsZSgpXTsKKyAgICAgICAgICAgIGlzLnJlYWQoZGF0YSk7CisgICAgICAgICAgICBvcy53cml0ZShkYXRhKTsKKyAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICBvcy5jbG9zZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUZWxsIHRoZSBtZWRpYSBzY2FubmVyIGFib3V0IHRoZSBuZXcgZmlsZSBzbyB0aGF0IGl0IGlzCisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBhdmFpbGFibGUgdG8gdGhlIHVzZXIuCisgICAgICAgICAgICBNZWRpYVNjYW5uZXJDb25uZWN0aW9uLnNjYW5GaWxlKHRoaXMsCisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IGZpbGUudG9TdHJpbmcoKSB9LCBudWxsLAorICAgICAgICAgICAgICAgICAgICBuZXcgTWVkaWFTY2FubmVyQ29ubmVjdGlvbi5TY2FuUmVzdWx0TGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY2FuQ29tcGxldGVkKFN0cmluZyBwYXRoLCBVcmkgdXJpKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5pKCJFeHRlcm5hbFN0b3JhZ2UiLCAiU2Nhbm5lZCAiICsgcGF0aCArICI6Iik7CisgICAgICAgICAgICAgICAgICAgIExvZy5pKCJFeHRlcm5hbFN0b3JhZ2UiLCAiLT4gdXJpPSIgKyB1cmkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBVbmFibGUgdG8gY3JlYXRlIGZpbGUsIGxpa2VseSBiZWNhdXNlIGV4dGVybmFsIHN0b3JhZ2UgaXMKKyAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgbW91bnRlZC4KKyAgICAgICAgICAgIExvZy53KCJFeHRlcm5hbFN0b3JhZ2UiLCAiRXJyb3Igd3JpdGluZyAiICsgZmlsZSwgZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVFeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZSgpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcGF0aCB3aGVyZSB3ZSB3aWxsIHBsYWNlIG91ciBwaWN0dXJlIGluIHRoZSB1c2VyJ3MKKyAgICAgICAgLy8gcHVibGljIHBpY3R1cmVzIGRpcmVjdG9yeSBhbmQgZGVsZXRlIHRoZSBmaWxlLiAgSWYgZXh0ZXJuYWwKKyAgICAgICAgLy8gc3RvcmFnZSBpcyBub3QgY3VycmVudGx5IG1vdW50ZWQgdGhpcyB3aWxsIGZhaWwuCisgICAgICAgIEZpbGUgcGF0aCA9IGdldEV4dGVybmFsRmlsZXNEaXIoRW52aXJvbm1lbnQuRElSRUNUT1JZX1BJQ1RVUkVTKTsKKyAgICAgICAgaWYgKHBhdGggIT0gbnVsbCkgeworICAgICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUocGF0aCwgIkRlbW9QaWN0dXJlLmpwZyIpOworICAgICAgICAgICAgZmlsZS5kZWxldGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sZWFuIGhhc0V4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlKCkgeworICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHBpY3R1cmUgaW4gdGhlIHVzZXIncworICAgICAgICAvLyBwdWJsaWMgcGljdHVyZXMgZGlyZWN0b3J5IGFuZCBjaGVjayBpZiB0aGUgZmlsZSBleGlzdHMuICBJZgorICAgICAgICAvLyBleHRlcm5hbCBzdG9yYWdlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgdGhpbmsgdGhlCisgICAgICAgIC8vIHBpY3R1cmUgZG9lc24ndCBleGlzdC4KKyAgICAgICAgRmlsZSBwYXRoID0gZ2V0RXh0ZXJuYWxGaWxlc0RpcihFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpOworICAgICAgICBpZiAocGF0aCAhPSBudWxsKSB7CisgICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLCAiRGVtb1BpY3R1cmUuanBnIik7CisgICAgICAgICAgICByZXR1cm4gZmlsZS5leGlzdHMoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorLy8gRU5EX0lOQ0xVREUocHJpdmF0ZV9waWN0dXJlKQorICAgICAgICAKKy8vIEJFR0lOX0lOQ0xVREUocHJpdmF0ZV9maWxlKQorICAgICB2b2lkIGNyZWF0ZUV4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlKCkgeworICAgICAgICAgLy8gQ3JlYXRlIGEgcGF0aCB3aGVyZSB3ZSB3aWxsIHBsYWNlIG91ciBwcml2YXRlIGZpbGUgb24gZXh0ZXJuYWwKKyAgICAgICAgIC8vIHN0b3JhZ2UuCisgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRFeHRlcm5hbEZpbGVzRGlyKG51bGwpLCAiRGVtb0ZpbGUuanBnIik7CisgICAgICAgICAKKyAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgLy8gVmVyeSBzaW1wbGUgY29kZSB0byBjb3B5IGEgcGljdHVyZSBmcm9tIHRoZSBhcHBsaWNhdGlvbidzCisgICAgICAgICAgICAgLy8gcmVzb3VyY2UgaW50byB0aGUgZXh0ZXJuYWwgZmlsZS4gIE5vdGUgdGhhdCB0aGlzIGNvZGUgZG9lcworICAgICAgICAgICAgIC8vIG5vIGVycm9yIGNoZWNraW5nLCBhbmQgYXNzdW1lcyB0aGUgcGljdHVyZSBpcyBzbWFsbCAoZG9lcyBub3QKKyAgICAgICAgICAgICAvLyB0cnkgdG8gY29weSBpdCBpbiBjaHVua3MpLiAgTm90ZSB0aGF0IGlmIGV4dGVybmFsIHN0b3JhZ2UgaXMKKyAgICAgICAgICAgICAvLyBub3QgY3VycmVudGx5IG1vdW50ZWQgdGhpcyB3aWxsIHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBnZXRSZXNvdXJjZXMoKS5vcGVuUmF3UmVzb3VyY2UoUi5kcmF3YWJsZS5iYWxsb29ucyk7CisgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CisgICAgICAgICAgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtpcy5hdmFpbGFibGUoKV07CisgICAgICAgICAgICAgaXMucmVhZChkYXRhKTsKKyAgICAgICAgICAgICBvcy53cml0ZShkYXRhKTsKKyAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgIG9zLmNsb3NlKCk7CisgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgLy8gVW5hYmxlIHRvIGNyZWF0ZSBmaWxlLCBsaWtlbHkgYmVjYXVzZSBleHRlcm5hbCBzdG9yYWdlIGlzCisgICAgICAgICAgICAgLy8gbm90IGN1cnJlbnRseSBtb3VudGVkLgorICAgICAgICAgICAgIExvZy53KCJFeHRlcm5hbFN0b3JhZ2UiLCAiRXJyb3Igd3JpdGluZyAiICsgZmlsZSwgZSk7CisgICAgICAgICB9CisgICAgIH0KKyAgICAgCisgICAgIHZvaWQgZGVsZXRlRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUoKSB7CisgICAgICAgICAvLyBHZXQgcGF0aCBmb3IgdGhlIGZpbGUgb24gZXh0ZXJuYWwgc3RvcmFnZS4gIElmIGV4dGVybmFsCisgICAgICAgICAvLyBzdG9yYWdlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgZmFpbC4KKyAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldEV4dGVybmFsRmlsZXNEaXIobnVsbCksICJEZW1vRmlsZS5qcGciKTsKKyAgICAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICBmaWxlLmRlbGV0ZSgpOworICAgICAgICAgfQorICAgICB9CisgICAgIAorICAgICBib29sZWFuIGhhc0V4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlKCkgeworICAgICAgICAgLy8gR2V0IHBhdGggZm9yIHRoZSBmaWxlIG9uIGV4dGVybmFsIHN0b3JhZ2UuICBJZiBleHRlcm5hbAorICAgICAgICAgLy8gc3RvcmFnZSBpcyBub3QgY3VycmVudGx5IG1vdW50ZWQgdGhpcyB3aWxsIGZhaWwuCisgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRFeHRlcm5hbEZpbGVzRGlyKG51bGwpLCAiRGVtb0ZpbGUuanBnIik7CisgICAgICAgICBpZiAoZmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgcmV0dXJuIGZpbGUuZXhpc3RzKCk7CisgICAgICAgICB9CisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKyAvLyBFTkRfSU5DTFVERShwcml2YXRlX2ZpbGUpCisgICAgIAorICAgIEl0ZW0gY3JlYXRlU3RvcmFnZUNvbnRyb2xzKENoYXJTZXF1ZW5jZSBsYWJlbCwgRmlsZSBwYXRoLAorICAgICAgICAgICAgVmlldy5PbkNsaWNrTGlzdGVuZXIgY3JlYXRlQ2xpY2ssCisgICAgICAgICAgICBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBkZWxldGVDbGljaykgeworICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IChMYXlvdXRJbmZsYXRlcilnZXRTeXN0ZW1TZXJ2aWNlKExBWU9VVF9JTkZMQVRFUl9TRVJWSUNFKTsKKyAgICAgICAgSXRlbSBpdGVtID0gbmV3IEl0ZW0oKTsKKyAgICAgICAgaXRlbS5tUm9vdCA9IGluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuZXh0ZXJuYWxfc3RvcmFnZV9pdGVtLCBudWxsKTsKKyAgICAgICAgVGV4dFZpZXcgdHYgPSAoVGV4dFZpZXcpaXRlbS5tUm9vdC5maW5kVmlld0J5SWQoUi5pZC5sYWJlbCk7CisgICAgICAgIHR2LnNldFRleHQobGFiZWwpOworICAgICAgICBpZiAocGF0aCAhPSBudWxsKSB7CisgICAgICAgICAgICB0diA9IChUZXh0VmlldylpdGVtLm1Sb290LmZpbmRWaWV3QnlJZChSLmlkLnBhdGgpOworICAgICAgICAgICAgdHYuc2V0VGV4dChwYXRoLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGl0ZW0ubUNyZWF0ZSA9IChCdXR0b24paXRlbS5tUm9vdC5maW5kVmlld0J5SWQoUi5pZC5jcmVhdGUpOworICAgICAgICBpdGVtLm1DcmVhdGUuc2V0T25DbGlja0xpc3RlbmVyKGNyZWF0ZUNsaWNrKTsKKyAgICAgICAgaXRlbS5tRGVsZXRlID0gKEJ1dHRvbilpdGVtLm1Sb290LmZpbmRWaWV3QnlJZChSLmlkLmRlbGV0ZSk7CisgICAgICAgIGl0ZW0ubURlbGV0ZS5zZXRPbkNsaWNrTGlzdGVuZXIoZGVsZXRlQ2xpY2spOworICAgICAgICByZXR1cm4gaXRlbTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvY29udGVudC9faW5kZXguaHRtbCBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L19pbmRleC5odG1sCmluZGV4IDFhYTUyYjMuLjc2OWE5MjcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L19pbmRleC5odG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L19pbmRleC5odG1sCkBAIC0xLDUgKzEsOCBAQAogPGgzPlJlc291cmNlczwvaDM+CiA8ZGw+CisgIDxkdD48YSBocmVmPSJTdHlsZWRUZXh0Lmh0bWwiPkV4dGVybmFsIFN0b3JhZ2U8L2E+PC9kdD4KKyAgPGRkPkRlbW9uc3RyYXRlcyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluIGV4dGVybmFsIHN0b3JhZ2UuIDwvZGQ+CisKICAgPGR0PjxhIGhyZWY9IlN0eWxlZFRleHQuaHRtbCI+U3R5bGVkIFRleHQ8L2E+PC9kdD4KICAgPGRkPkRlbW9uc3RyYXRlcyBsb2FkaW5nIHN0eWxlZCB0ZXh0IChib2xkLCBpdGFsaWMpIGRlZmluZWQgaW4gYSByZXNvdXJjZSBmaWxlLiA8L2RkPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ2FtZXJhUHJldmlldy5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0NhbWVyYVByZXZpZXcuamF2YQppbmRleCBlM2NmOTc2Li4xNzFjODg1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ2FtZXJhUHJldmlldy5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9DYW1lcmFQcmV2aWV3LmphdmEKQEAgLTE5LDI0ICsxOSwyNyBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhOworaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7CisKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXB1YmxpYyBjbGFzcyBDYW1lcmFQcmV2aWV3IGV4dGVuZHMgQWN0aXZpdHkgeyAgICAKK3B1YmxpYyBjbGFzcyBDYW1lcmFQcmV2aWV3IGV4dGVuZHMgQWN0aXZpdHkgewogICAgIHByaXZhdGUgUHJldmlldyBtUHJldmlldzsKLSAgICAKKwogICAgIEBPdmVycmlkZQogCXByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSGlkZSB0aGUgd2luZG93IHRpdGxlLgogICAgICAgICByZXF1ZXN0V2luZG93RmVhdHVyZShXaW5kb3cuRkVBVFVSRV9OT19USVRMRSk7Ci0gICAgCisKICAgICAgICAgLy8gQ3JlYXRlIG91ciBQcmV2aWV3IHZpZXcgYW5kIHNldCBpdCBhcyB0aGUgY29udGVudCBvZiBvdXIgYWN0aXZpdHkuCiAgICAgICAgIG1QcmV2aWV3ID0gbmV3IFByZXZpZXcodGhpcyk7CiAgICAgICAgIHNldENvbnRlbnRWaWV3KG1QcmV2aWV3KTsKQEAgLTQ5LDEwICs1MiwxMCBAQAogY2xhc3MgUHJldmlldyBleHRlbmRzIFN1cmZhY2VWaWV3IGltcGxlbWVudHMgU3VyZmFjZUhvbGRlci5DYWxsYmFjayB7CiAgICAgU3VyZmFjZUhvbGRlciBtSG9sZGVyOwogICAgIENhbWVyYSBtQ2FtZXJhOwotICAgIAorCiAgICAgUHJldmlldyhDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEluc3RhbGwgYSBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIHNvIHdlIGdldCBub3RpZmllZCB3aGVuIHRoZQogICAgICAgICAvLyB1bmRlcmx5aW5nIHN1cmZhY2UgaXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkLgogICAgICAgICBtSG9sZGVyID0gZ2V0SG9sZGVyKCk7CkBAIC04MiwxMSArODUsNDkgQEAKICAgICAgICAgbUNhbWVyYSA9IG51bGw7CiAgICAgfQogCisKKyAgICBwcml2YXRlIFNpemUgZ2V0T3B0aW1hbFByZXZpZXdTaXplKExpc3Q8U2l6ZT4gc2l6ZXMsIGludCB3LCBpbnQgaCkgeworICAgICAgICBmaW5hbCBkb3VibGUgQVNQRUNUX1RPTEVSQU5DRSA9IDAuMDU7CisgICAgICAgIGRvdWJsZSB0YXJnZXRSYXRpbyA9IChkb3VibGUpIHcgLyBoOworICAgICAgICBpZiAoc2l6ZXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisKKyAgICAgICAgU2l6ZSBvcHRpbWFsU2l6ZSA9IG51bGw7CisgICAgICAgIGRvdWJsZSBtaW5EaWZmID0gRG91YmxlLk1BWF9WQUxVRTsKKworICAgICAgICBpbnQgdGFyZ2V0SGVpZ2h0ID0gaDsKKworICAgICAgICAvLyBUcnkgdG8gZmluZCBhbiBzaXplIG1hdGNoIGFzcGVjdCByYXRpbyBhbmQgc2l6ZQorICAgICAgICBmb3IgKFNpemUgc2l6ZSA6IHNpemVzKSB7CisgICAgICAgICAgICBkb3VibGUgcmF0aW8gPSAoZG91YmxlKSBzaXplLndpZHRoIC8gc2l6ZS5oZWlnaHQ7CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMocmF0aW8gLSB0YXJnZXRSYXRpbykgPiBBU1BFQ1RfVE9MRVJBTkNFKSBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhzaXplLmhlaWdodCAtIHRhcmdldEhlaWdodCkgPCBtaW5EaWZmKSB7CisgICAgICAgICAgICAgICAgb3B0aW1hbFNpemUgPSBzaXplOworICAgICAgICAgICAgICAgIG1pbkRpZmYgPSBNYXRoLmFicyhzaXplLmhlaWdodCAtIHRhcmdldEhlaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYW5ub3QgZmluZCB0aGUgb25lIG1hdGNoIHRoZSBhc3BlY3QgcmF0aW8sIGlnbm9yZSB0aGUgcmVxdWlyZW1lbnQKKyAgICAgICAgaWYgKG9wdGltYWxTaXplID09IG51bGwpIHsKKyAgICAgICAgICAgIG1pbkRpZmYgPSBEb3VibGUuTUFYX1ZBTFVFOworICAgICAgICAgICAgZm9yIChTaXplIHNpemUgOiBzaXplcykgeworICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhzaXplLmhlaWdodCAtIHRhcmdldEhlaWdodCkgPCBtaW5EaWZmKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGltYWxTaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgbWluRGlmZiA9IE1hdGguYWJzKHNpemUuaGVpZ2h0IC0gdGFyZ2V0SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9wdGltYWxTaXplOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHN1cmZhY2VDaGFuZ2VkKFN1cmZhY2VIb2xkZXIgaG9sZGVyLCBpbnQgZm9ybWF0LCBpbnQgdywgaW50IGgpIHsKICAgICAgICAgLy8gTm93IHRoYXQgdGhlIHNpemUgaXMga25vd24sIHNldCB1cCB0aGUgY2FtZXJhIHBhcmFtZXRlcnMgYW5kIGJlZ2luCiAgICAgICAgIC8vIHRoZSBwcmV2aWV3LgogICAgICAgICBDYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gbUNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld1NpemUodywgaCk7CisKKyAgICAgICAgTGlzdDxTaXplPiBzaXplcyA9IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld1NpemVzKCk7CisgICAgICAgIFNpemUgb3B0aW1hbFNpemUgPSBnZXRPcHRpbWFsUHJldmlld1NpemUoc2l6ZXMsIHcsIGgpOworICAgICAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdTaXplKG9wdGltYWxTaXplLndpZHRoLCBvcHRpbWFsU2l6ZS5oZWlnaHQpOworCiAgICAgICAgIG1DYW1lcmEuc2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKICAgICAgICAgbUNhbWVyYS5zdGFydFByZXZpZXcoKTsKICAgICB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ29tcHJlc3NlZFRleHR1cmVBY3Rpdml0eS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0NvbXByZXNzZWRUZXh0dXJlQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I1NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0NvbXByZXNzZWRUZXh0dXJlQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uQnVmZmVyOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOworCitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVUQzFVdGlsOworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMDsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKKworLyoqCisgKiBEZW1vbnN0cmF0ZSBob3cgdG8gdXNlIEVUQzEgZm9ybWF0IGNvbXByZXNzZWQgdGV4dHVyZXMuCisgKiBUaGlzIHNhbXBsZSBjYW4gYmUgcmVjb21waWxlZCB0byB1c2UgZWl0aGVyIHJlc291cmNlLWJhc2VkCisgKiB0ZXh0dXJlcyAoY29tcHJlc3NlZCBvZmZsaW5lIHVzaW5nIHRoZSBldGMxdG9vbCksIG9yCisgKiB0ZXh0dXJlcyBjcmVhdGVkIG9uIHRoZSBmbHkgYnkgY29tcHJlc3NpbmcgaW1hZ2VzLgorICoKKyAqLworcHVibGljIGNsYXNzIENvbXByZXNzZWRUZXh0dXJlQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDb21wcmVzc2VkVGV4dHVyZUFjdGl2aXR5IjsKKyAgICAvKioKKyAgICAgKiBDaG9vc2UgYmV0d2VlbiBjcmVhdGluZyBhIGNvbXByZXNzZWQgdGV4dHVyZSBvbiB0aGUgZmx5IG9yCisgICAgICogbG9hZGluZyBhIGNvbXByZXNzZWQgdGV4dHVyZSBmcm9tIGEgcmVzb3VyY2UuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbiBURVNUX0NSRUFURV9URVhUVVJFID0gZmFsc2U7CisgICAgLyoqCisgICAgICogV2hlbiBjcmVhdGluZyBhIGNvbXByZXNzZWQgdGV4dHVyZSBvbiB0aGUgZmx5LCBjaG9vc2UKKyAgICAgKiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIGkvbyBzdHJlYW0gQVBJcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIFVTRV9TVFJFQU1fSU8gPSBmYWxzZTsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgbUdMVmlldyA9IG5ldyBHTFN1cmZhY2VWaWV3KHRoaXMpOworICAgICAgICBtR0xWaWV3LnNldEVHTENvbmZpZ0Nob29zZXIoZmFsc2UpOworICAgICAgICBTdGF0aWNUcmlhbmdsZVJlbmRlcmVyLlRleHR1cmVMb2FkZXIgbG9hZGVyOworICAgICAgICBpZiAoVEVTVF9DUkVBVEVfVEVYVFVSRSkgeworICAgICAgICAgICAgbG9hZGVyID0gbmV3IFN5bnRoZXRpY0NvbXByZXNzZWRUZXh0dXJlTG9hZGVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkZXIgPSBuZXcgQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIoKTsKKyAgICAgICAgfQorICAgICAgICBtR0xWaWV3LnNldFJlbmRlcmVyKG5ldyBTdGF0aWNUcmlhbmdsZVJlbmRlcmVyKHRoaXMsIGxvYWRlcikpOworICAgICAgICBzZXRDb250ZW50VmlldyhtR0xWaWV3KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgeworICAgICAgICBzdXBlci5vblBhdXNlKCk7CisgICAgICAgIG1HTFZpZXcub25QYXVzZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBtR0xWaWV3Lm9uUmVzdW1lKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVtb25zdHJhdGUgaG93IHRvIGxvYWQgYSBjb21wcmVzc2VkIHRleHR1cmUgZnJvbSBhbiBBUEsgcmVzb3VyY2UuCisgICAgICoKKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIENvbXByZXNzZWRUZXh0dXJlTG9hZGVyIGltcGxlbWVudHMgU3RhdGljVHJpYW5nbGVSZW5kZXJlci5UZXh0dXJlTG9hZGVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgbG9hZChHTDEwIGdsKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJFVEMxIHRleHR1cmUgc3VwcG9ydDogIiArIEVUQzFVdGlsLmlzRVRDMVN1cHBvcnRlZCgpKTsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0ID0gZ2V0UmVzb3VyY2VzKCkub3BlblJhd1Jlc291cmNlKFIucmF3LmFuZHJvaWRzKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgRVRDMVV0aWwubG9hZFRleHR1cmUoR0xFUzEwLkdMX1RFWFRVUkVfMkQsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBHTEVTMTAuR0xfUkdCLCBHTEVTMTAuR0xfVU5TSUdORURfU0hPUlRfNV82XzUsIGlucHV0KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgbG9hZCB0ZXh0dXJlOiAiICsgZSk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0LmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXhjZXB0aW9uIHRocm93biBmcm9tIGNsb3NlLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERlbW9uc3RyYXRlIGhvdyB0byBjcmVhdGUgYSBjb21wcmVzc2VkIHRleHR1cmUgb24gdGhlIGZseS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGNsYXNzIFN5bnRoZXRpY0NvbXByZXNzZWRUZXh0dXJlTG9hZGVyIGltcGxlbWVudHMgU3RhdGljVHJpYW5nbGVSZW5kZXJlci5UZXh0dXJlTG9hZGVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgbG9hZChHTDEwIGdsKSB7CisgICAgICAgICAgICBpbnQgd2lkdGggPSAxMjg7CisgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gMTI4OworICAgICAgICAgICAgQnVmZmVyIGltYWdlID0gY3JlYXRlSW1hZ2Uod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBFVEMxVXRpbC5FVEMxVGV4dHVyZSBldGMxVGV4dHVyZSA9IEVUQzFVdGlsLmNvbXByZXNzVGV4dHVyZShpbWFnZSwgd2lkdGgsIGhlaWdodCwgMywgMyAqIHdpZHRoKTsKKyAgICAgICAgICAgIGlmIChVU0VfU1RSRUFNX0lPKSB7CisgICAgICAgICAgICAgICAgLy8gVGVzdCB0aGUgRVRDMVV0aWwgQVBJcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBjb21wcmVzc2VkIHRleHR1cmVzIHRvIEkvTyBzdHJlYW1zLgorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgICAgIEVUQzFVdGlsLndyaXRlVGV4dHVyZShldGMxVGV4dHVyZSwgYm9zKTsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJvcy50b0J5dGVBcnJheSgpKTsKKyAgICAgICAgICAgICAgICAgICAgRVRDMVV0aWwubG9hZFRleHR1cmUoR0xFUzEwLkdMX1RFWFRVUkVfMkQsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xFUzEwLkdMX1JHQiwgR0xFUzEwLkdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCBiaXMpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ291bGQgbm90IGxvYWQgdGV4dHVyZTogIiArIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRVRDMVV0aWwubG9hZFRleHR1cmUoR0xFUzEwLkdMX1RFWFRVUkVfMkQsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBHTEVTMTAuR0xfUkdCLCBHTEVTMTAuR0xfVU5TSUdORURfU0hPUlRfNV82XzUsIGV0YzFUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgQnVmZmVyIGNyZWF0ZUltYWdlKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgaW50IHN0cmlkZSA9IDMgKiB3aWR0aDsKKyAgICAgICAgICAgIEJ5dGVCdWZmZXIgaW1hZ2UgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGhlaWdodCAqIHN0cmlkZSkKKyAgICAgICAgICAgICAgICAub3JkZXIoQnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCkpOworCisgICAgICAgICAgICAvLyBGaWxsIHdpdGggYSBwcmV0dHkgIm11bmNoaW5nIHNxdWFyZXMiIHBhdHRlcm46CisgICAgICAgICAgICBmb3IgKGludCB0ID0gMDsgdCA8IGhlaWdodDsgdCsrKSB7CisgICAgICAgICAgICAgICAgYnl0ZSByZWQgPSAoYnl0ZSkoMjU1LTIqdCk7CisgICAgICAgICAgICAgICAgYnl0ZSBncmVlbiA9IChieXRlKSgyKnQpOworICAgICAgICAgICAgICAgIGJ5dGUgYmx1ZSA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB5ID0geCBeIHQ7CisgICAgICAgICAgICAgICAgICAgIGltYWdlLnBvc2l0aW9uKHN0cmlkZSp5K3gqMyk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlLnB1dChyZWQpOworICAgICAgICAgICAgICAgICAgICBpbWFnZS5wdXQoZ3JlZW4pOworICAgICAgICAgICAgICAgICAgICBpbWFnZS5wdXQoYmx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW1hZ2UucG9zaXRpb24oMCk7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpdmF0ZSBHTFN1cmZhY2VWaWV3IG1HTFZpZXc7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ3ViZU1hcEFjdGl2aXR5LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ3ViZU1hcEFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzZTBmZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9DdWJlTWFwQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDQxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOworaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7CisKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTA7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMTsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDExRXh0OworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTFFeHRlbnNpb25QYWNrOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMU3VyZmFjZVZpZXc7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVOworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMVXRpbHM7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOworCisvKioKKyAqIERlbW9uc3RyYXRlIGhvdyB0byB1c2UgdGhlIE9FU190ZXh0dXJlX2N1YmVfbWFwIGV4dGVuc2lvbiwgYXZhaWxhYmxlIG9uIHNvbWUKKyAqIGhpZ2gtZW5kIE9wZW5HTCBFUyAxLnggR1BVcy4KKyAqLworcHVibGljIGNsYXNzIEN1YmVNYXBBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgbUdMU3VyZmFjZVZpZXc7CisgICAgcHJpdmF0ZSBjbGFzcyBSZW5kZXJlciBpbXBsZW1lbnRzIEdMU3VyZmFjZVZpZXcuUmVuZGVyZXIgeworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUNvbnRleHRTdXBwb3J0c0N1YmVNYXA7CisgICAgICAgIHByaXZhdGUgR3JpZCBtR3JpZDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUN1YmVNYXBUZXh0dXJlSUQ7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtVXNlVGV4R2VuID0gZmFsc2U7CisgICAgICAgIHByaXZhdGUgZmxvYXQgbUFuZ2xlOworCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRHJhd0ZyYW1lKEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICBpZiAobUNvbnRleHRTdXBwb3J0c0N1YmVNYXApIHsKKyAgICAgICAgICAgICAgICBnbC5nbENsZWFyQ29sb3IoMCwwLDEsMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQgY29udGV4dCBkb2Vzbid0IHN1cHBvcnQgY3ViZSBtYXBzLgorICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoaXMgYnkgZHJhd2luZyBhIHJlZCBiYWNrZ3JvdW5kLgorICAgICAgICAgICAgICAgIGdsLmdsQ2xlYXJDb2xvcigxLDAsMCwwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsLmdsQ2xlYXIoR0wxMC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wxMC5HTF9ERVBUSF9CVUZGRVJfQklUKTsKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMMTAuR0xfREVQVEhfVEVTVCk7CisgICAgICAgICAgICBnbC5nbE1hdHJpeE1vZGUoR0wxMC5HTF9NT0RFTFZJRVcpOworICAgICAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsKKworICAgICAgICAgICAgR0xVLmdsdUxvb2tBdChnbCwgMCwgMCwgLTUsIDBmLCAwZiwgMGYsIDBmLCAxLjBmLCAwLjBmKTsKKyAgICAgICAgICAgIGdsLmdsUm90YXRlZihtQW5nbGUsICAgICAgICAwLCAxLCAwKTsKKyAgICAgICAgICAgIGdsLmdsUm90YXRlZihtQW5nbGUqMC4yNWYsICAxLCAwLCAwKTsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisKKyAgICAgICAgICAgIGlmIChtQ29udGV4dFN1cHBvcnRzQ3ViZU1hcCkgeworICAgICAgICAgICAgICAgIGdsLmdsQWN0aXZlVGV4dHVyZShHTDEwLkdMX1RFWFRVUkUwKTsKKyAgICAgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfQ1VCRV9NQVApOworICAgICAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTDExRXh0ZW5zaW9uUGFjay5HTF9URVhUVVJFX0NVQkVfTUFQLCBtQ3ViZU1hcFRleHR1cmVJRCk7CisgICAgICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgICAgICBHTDExRXh0ZW5zaW9uUGFjayBnbDExZXAgPSAoR0wxMUV4dGVuc2lvblBhY2spIGdsOworICAgICAgICAgICAgICAgIGdsMTFlcC5nbFRleEdlbmkoR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9HRU5fU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9HRU5fTU9ERSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMMTFFeHRlbnNpb25QYWNrLkdMX1JFRkxFQ1RJT05fTUFQKTsKKyAgICAgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfR0VOX1NUUik7CisgICAgICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgICAgICBnbC5nbFRleEVudngoR0wxMC5HTF9URVhUVVJFX0VOViwgR0wxMC5HTF9URVhUVVJFX0VOVl9NT0RFLCBHTDEwLkdMX0RFQ0FMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgIG1HcmlkLmRyYXcoZ2wpOworCisgICAgICAgICAgICBpZiAobUNvbnRleHRTdXBwb3J0c0N1YmVNYXApIHsKKyAgICAgICAgICAgICAgICBnbC5nbERpc2FibGUoR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9HRU5fU1RSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisKKyAgICAgICAgICAgIG1BbmdsZSArPSAxLjJmOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ2hhbmdlZChHTDEwIGdsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICBnbC5nbFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgZmxvYXQgcmF0aW8gPSAoZmxvYXQpIHdpZHRoIC8gaGVpZ2h0OworICAgICAgICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMMTAuR0xfUFJPSkVDVElPTik7CisgICAgICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOworICAgICAgICAgICAgZ2wuZ2xGcnVzdHVtZigtcmF0aW8sIHJhdGlvLCAtMSwgMSwgMSwgMTApOworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNyZWF0ZWQoR0wxMCBnbCwgRUdMQ29uZmlnIGNvbmZpZykgeworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgIC8vIFRoaXMgdGVzdCBuZWVkcyB0byBiZSBkb25lIGVhY2ggdGltZSBhIGNvbnRleHQgaXMgY3JlYXRlZCwKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgZGlmZmVyZW50IGNvbnRleHRzIG1heSBzdXBwb3J0IGRpZmZlcmVudCBleHRlbnNpb25zLgorICAgICAgICAgICAgbUNvbnRleHRTdXBwb3J0c0N1YmVNYXAgPSBjaGVja0lmQ29udGV4dFN1cHBvcnRzQ3ViZU1hcChnbCk7CisKKyAgICAgICAgICAgIG1HcmlkID0gZ2VuZXJhdGVUb3J1c0dyaWQoZ2wsIDYwLCA2MCwgMy4wZiwgMC43NWYpOworCisgICAgICAgICAgICBpZiAobUNvbnRleHRTdXBwb3J0c0N1YmVNYXApIHsKKyAgICAgICAgICAgICAgICBpbnRbXSBjdWJlTWFwUmVzb3VyY2VJZHMgPSBuZXcgaW50W117CisgICAgICAgICAgICAgICAgICAgICAgICBSLnJhdy5za3ljdWJlbWFwMCwgUi5yYXcuc2t5Y3ViZW1hcDEsIFIucmF3LnNreWN1YmVtYXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgUi5yYXcuc2t5Y3ViZW1hcDMsIFIucmF3LnNreWN1YmVtYXA0LCBSLnJhdy5za3ljdWJlbWFwNX07CisgICAgICAgICAgICAgICAgbUN1YmVNYXBUZXh0dXJlSUQgPSBnZW5lcmF0ZUN1YmVNYXAoZ2wsIGN1YmVNYXBSZXNvdXJjZUlkcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgZ2VuZXJhdGVDdWJlTWFwKEdMMTAgZ2wsIGludFtdIHJlc291cmNlSWRzKSB7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgaW50W10gaWRzID0gbmV3IGludFsxXTsKKyAgICAgICAgICAgIGdsLmdsR2VuVGV4dHVyZXMoMSwgaWRzLCAwKTsKKyAgICAgICAgICAgIGludCBjdWJlTWFwVGV4dHVyZUlkID0gaWRzWzBdOworICAgICAgICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTDExRXh0ZW5zaW9uUGFjay5HTF9URVhUVVJFX0NVQkVfTUFQLCBjdWJlTWFwVGV4dHVyZUlkKTsKKyAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyZihHTDExRXh0ZW5zaW9uUGFjay5HTF9URVhUVVJFX0NVQkVfTUFQLAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0wxMC5HTF9MSU5FQVIpOworICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJmKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfQ1VCRV9NQVAsCisgICAgICAgICAgICAgICAgICAgIEdMMTAuR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTDEwLkdMX0xJTkVBUik7CisKKyAgICAgICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKSB7CisgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBnZXRSZXNvdXJjZXMoKS5vcGVuUmF3UmVzb3VyY2UocmVzb3VyY2VJZHNbZmFjZV0pOworICAgICAgICAgICAgICAgIEJpdG1hcCBiaXRtYXA7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oaXMpOworICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKCJDdWJlTWFwIiwgIkNvdWxkIG5vdCBkZWNvZGUgdGV4dHVyZSBmb3IgZmFjZSAiICsgSW50ZWdlci50b1N0cmluZyhmYWNlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgR0xVdGlscy50ZXhJbWFnZTJEKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAsIDApOworICAgICAgICAgICAgICAgIGJpdG1hcC5yZWN5Y2xlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgcmV0dXJuIGN1YmVNYXBUZXh0dXJlSWQ7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIEdyaWQgZ2VuZXJhdGVUb3J1c0dyaWQoR0wgZ2wsIGludCB1U3RlcHMsIGludCB2U3RlcHMsIGZsb2F0IG1ham9yUmFkaXVzLCBmbG9hdCBtaW5vclJhZGl1cykgeworICAgICAgICAgICAgR3JpZCBncmlkID0gbmV3IEdyaWQodVN0ZXBzICsgMSwgdlN0ZXBzICsgMSk7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSB2U3RlcHM7IGorKykgeworICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVYgPSBNYXRoLlBJICogMiAqIGogLyB2U3RlcHM7CisgICAgICAgICAgICAgICAgZmxvYXQgY29zViA9IChmbG9hdCkgTWF0aC5jb3MoYW5nbGVWKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzaW5WID0gKGZsb2F0KSBNYXRoLnNpbihhbmdsZVYpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHVTdGVwczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVUgPSBNYXRoLlBJICogMiAqIGkgLyB1U3RlcHM7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNvc1UgPSAoZmxvYXQpIE1hdGguY29zKGFuZ2xlVSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNpblUgPSAoZmxvYXQpIE1hdGguc2luKGFuZ2xlVSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBtYWpvclJhZGl1cyttaW5vclJhZGl1cypjb3NVOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB4ID0gZCpjb3NWOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB5ID0gZCooLXNpblYpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB6ID0gbWlub3JSYWRpdXMgKiBzaW5VOworCisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG54ID0gY29zViAqIGNvc1U7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG55ID0gLXNpblYgKiBjb3NVOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBueiA9IHNpblU7CisKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGVuZ3RoID0gKGZsb2F0KSBNYXRoLnNxcnQobngqbnggKyBueSpueSArIG56Km56KTsKKyAgICAgICAgICAgICAgICAgICAgbnggLz0gbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBueSAvPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIG56IC89IGxlbmd0aDsKKworICAgICAgICAgICAgICAgICAgICBncmlkLnNldChpLCBqLCB4LCB5LCB6LCBueCwgbnksIG56KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBncmlkLmNyZWF0ZUJ1ZmZlck9iamVjdHMoZ2wpOworICAgICAgICAgICAgcmV0dXJuIGdyaWQ7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tJZkNvbnRleHRTdXBwb3J0c0N1YmVNYXAoR0wxMCBnbCkgeworICAgICAgICAgICAgcmV0dXJuIGNoZWNrSWZDb250ZXh0U3VwcG9ydHNFeHRlbnNpb24oZ2wsICJHTF9PRVNfdGV4dHVyZV9jdWJlX21hcCIpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0IHdheSB0byBjaGVjayBmb3IgYW4gZXh0ZW5zaW9uLCBidXQgZmluZSBpZgorICAgICAgICAgKiB3ZSBhcmUgb25seSBjaGVja2luZyBmb3IgYSBmZXcgZXh0ZW5zaW9ucyBlYWNoIHRpbWUgYSBjb250ZXh0IGlzIGNyZWF0ZWQuCisgICAgICAgICAqIEBwYXJhbSBnbAorICAgICAgICAgKiBAcGFyYW0gZXh0ZW5zaW9uCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXh0ZW5zaW9uIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0lmQ29udGV4dFN1cHBvcnRzRXh0ZW5zaW9uKEdMMTAgZ2wsIFN0cmluZyBleHRlbnNpb24pIHsKKyAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zID0gIiAiICsgZ2wuZ2xHZXRTdHJpbmcoR0wxMC5HTF9FWFRFTlNJT05TKSArICIgIjsKKyAgICAgICAgICAgIC8vIFRoZSBleHRlbnNpb25zIHN0cmluZyBpcyBwYWRkZWQgd2l0aCBzcGFjZXMgYmV0d2VlbiBleHRlbnNpb25zLCBidXQgbm90CisgICAgICAgICAgICAvLyBuZWNlc3NhcmlseSBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZC4gRm9yIHNpbXBsaWNpdHksIGFkZCBzcGFjZXMgYXQgdGhlCisgICAgICAgICAgICAvLyBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgZXh0ZW5zaW9ucyBzdHJpbmcgYW5kIHRoZSBleHRlbnNpb24gc3RyaW5nLgorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW4gYXZvaWQgc3BlY2lhbC1jYXNlIGNoZWNrcyBmb3IgdGhlIGZpcnN0IG9yIGxhc3QKKyAgICAgICAgICAgIC8vIGV4dGVuc2lvbiwgYXMgd2VsbCBhcyBhdm9pZCBzcGVjaWFsLWNhc2UgY2hlY2tzIHdoZW4gYW4gZXh0ZW5zaW9uIG5hbWUKKyAgICAgICAgICAgIC8vIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJ0IG9mIGFub3RoZXIgZXh0ZW5zaW9uIG5hbWUuCisgICAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9ucy5pbmRleE9mKCIgIiArIGV4dGVuc2lvbiArICIgIikgPj0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBBIGdyaWQgaXMgYSB0b3BvbG9naWNhbGx5IHJlY3Rhbmd1bGFyIGFycmF5IG9mIHZlcnRpY2VzLgorICAgICAqCisgICAgICogVGhpcyBncmlkIGNsYXNzIGlzIGN1c3RvbWl6ZWQgZm9yIHRoZSB2ZXJ0ZXggZGF0YSByZXF1aXJlZCBmb3IgdGhpcworICAgICAqIGV4YW1wbGUuCisgICAgICoKKyAgICAgKiBUaGUgdmVydGV4IGFuZCBpbmRleCBkYXRhIGFyZSBoZWxkIGluIFZCTyBvYmplY3RzIGJlY2F1c2Ugb24gbW9zdAorICAgICAqIEdQVXMgVkJPIG9iamVjdHMgYXJlIHRoZSBmYXN0ZXN0IHdheSBvZiByZW5kZXJpbmcgc3RhdGljIHZlcnRleAorICAgICAqIGFuZCBpbmRleCBkYXRhLgorICAgICAqCisgICAgICovCisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHcmlkIHsKKyAgICAgICAgLy8gU2l6ZSBvZiB2ZXJ0ZXggZGF0YSBlbGVtZW50cyBpbiBieXRlczoKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBGTE9BVF9TSVpFID0gNDsKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBDSEFSX1NJWkUgPSAyOworCisgICAgICAgIC8vIFZlcnRleCBzdHJ1Y3R1cmU6CisgICAgICAgIC8vIGZsb2F0IHgsIHksIHo7CisgICAgICAgIC8vIGZsb2F0IG54LCBueSwgbng7CisKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBWRVJURVhfU0laRSA9IDYgKiBGTE9BVF9TSVpFOworICAgICAgICBmaW5hbCBzdGF0aWMgaW50IFZFUlRFWF9OT1JNQUxfQlVGRkVSX0lOREVYX09GRlNFVCA9IDM7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVZlcnRleEJ1ZmZlck9iamVjdElkOworICAgICAgICBwcml2YXRlIGludCBtRWxlbWVudEJ1ZmZlck9iamVjdElkOworCisgICAgICAgIC8vIFRoZXNlIGJ1ZmZlcnMgYXJlIHVzZWQgdG8gaG9sZCB0aGUgdmVydGV4IGFuZCBpbmRleCBkYXRhIHdoaWxlCisgICAgICAgIC8vIGNvbnN0cnVjdGluZyB0aGUgZ3JpZC4gT25jZSBjcmVhdGVCdWZmZXJPYmplY3RzKCkgaXMgY2FsbGVkCisgICAgICAgIC8vIHRoZSBidWZmZXJzIGFyZSBudWxsZWQgb3V0IHRvIHNhdmUgbWVtb3J5LgorCisgICAgICAgIHByaXZhdGUgQnl0ZUJ1ZmZlciBtVmVydGV4Qnl0ZUJ1ZmZlcjsKKyAgICAgICAgcHJpdmF0ZSBGbG9hdEJ1ZmZlciBtVmVydGV4QnVmZmVyOworICAgICAgICBwcml2YXRlIENoYXJCdWZmZXIgbUluZGV4QnVmZmVyOworCisgICAgICAgIHByaXZhdGUgaW50IG1XOworICAgICAgICBwcml2YXRlIGludCBtSDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUluZGV4Q291bnQ7CisKKyAgICAgICAgcHVibGljIEdyaWQoaW50IHcsIGludCBoKSB7CisgICAgICAgICAgICBpZiAodyA8IDAgfHwgdyA+PSA2NTUzNikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoIDwgMCB8fCBoID49IDY1NTM2KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHcgKiBoID49IDY1NTM2KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidyAqIGggPj0gNjU1MzYiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVcgPSB3OworICAgICAgICAgICAgbUggPSBoOworICAgICAgICAgICAgaW50IHNpemUgPSB3ICogaDsKKworICAgICAgICAgICAgbVZlcnRleEJ5dGVCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFZFUlRFWF9TSVpFICogc2l6ZSkKKyAgICAgICAgICAgIC5vcmRlcihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyID0gbVZlcnRleEJ5dGVCdWZmZXIuYXNGbG9hdEJ1ZmZlcigpOworCisgICAgICAgICAgICBpbnQgcXVhZFcgPSBtVyAtIDE7CisgICAgICAgICAgICBpbnQgcXVhZEggPSBtSCAtIDE7CisgICAgICAgICAgICBpbnQgcXVhZENvdW50ID0gcXVhZFcgKiBxdWFkSDsKKyAgICAgICAgICAgIGludCBpbmRleENvdW50ID0gcXVhZENvdW50ICogNjsKKyAgICAgICAgICAgIG1JbmRleENvdW50ID0gaW5kZXhDb3VudDsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoQ0hBUl9TSVpFICogaW5kZXhDb3VudCkKKyAgICAgICAgICAgIC5vcmRlcihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSkuYXNDaGFyQnVmZmVyKCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJbml0aWFsaXplIHRyaWFuZ2xlIGxpc3QgbWVzaC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiAgICAgWzBdLS0tLS1bICAxXSAuLi4KKyAgICAgICAgICAgICAqICAgICAgfCAgICAvICAgfAorICAgICAgICAgICAgICogICAgICB8ICAgLyAgICB8CisgICAgICAgICAgICAgKiAgICAgIHwgIC8gICAgIHwKKyAgICAgICAgICAgICAqICAgICBbd10tLS0tLVt3KzFdIC4uLgorICAgICAgICAgICAgICogICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHF1YWRIOyB5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBxdWFkVzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGEgPSAoY2hhcikgKHkgKiBtVyArIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBiID0gKGNoYXIpICh5ICogbVcgKyB4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSAoY2hhcikgKCh5ICsgMSkgKiBtVyArIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkID0gKGNoYXIpICgoeSArIDEpICogbVcgKyB4ICsgMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KGludCBpLCBpbnQgaiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgbngsIGZsb2F0IG55LCBmbG9hdCBueikgeworICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbVcpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA8IDAgfHwgaiA+PSBtSCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImoiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGluZGV4ID0gbVcgKiBqICsgaTsKKworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wb3NpdGlvbihpbmRleCAqIFZFUlRFWF9TSVpFIC8gRkxPQVRfU0laRSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh4KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHkpOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wdXQoeik7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dChueCk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dChueSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dChueik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBjcmVhdGVCdWZmZXJPYmplY3RzKEdMIGdsKSB7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSB0aGUgdmVydGV4IGFuZCBlbGVtZW50IGJ1ZmZlciBJRHMKKyAgICAgICAgICAgIGludFtdIHZib0lkcyA9IG5ldyBpbnRbMl07CisgICAgICAgICAgICBHTDExIGdsMTEgPSAoR0wxMSkgZ2w7CisgICAgICAgICAgICBnbDExLmdsR2VuQnVmZmVycygyLCB2Ym9JZHMsIDApOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlck9iamVjdElkID0gdmJvSWRzWzBdOworICAgICAgICAgICAgbUVsZW1lbnRCdWZmZXJPYmplY3RJZCA9IHZib0lkc1sxXTsKKworICAgICAgICAgICAgLy8gVXBsb2FkIHRoZSB2ZXJ0ZXggZGF0YQorICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9BUlJBWV9CVUZGRVIsIG1WZXJ0ZXhCdWZmZXJPYmplY3RJZCk7CisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlci5wb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCdWZmZXJEYXRhKEdMMTEuR0xfQVJSQVlfQlVGRkVSLCBtVmVydGV4Qnl0ZUJ1ZmZlci5jYXBhY2l0eSgpLCBtVmVydGV4Qnl0ZUJ1ZmZlciwgR0wxMS5HTF9TVEFUSUNfRFJBVyk7CisKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1FbGVtZW50QnVmZmVyT2JqZWN0SWQpOworICAgICAgICAgICAgbUluZGV4QnVmZmVyLnBvc2l0aW9uKDApOworICAgICAgICAgICAgZ2wxMS5nbEJ1ZmZlckRhdGEoR0wxMS5HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbUluZGV4QnVmZmVyLmNhcGFjaXR5KCkgKiBDSEFSX1NJWkUsIG1JbmRleEJ1ZmZlciwgR0wxMS5HTF9TVEFUSUNfRFJBVyk7CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGluLW1lbW9yeSBkYXRhIGFueSBtb3JlCisgICAgICAgICAgICBtVmVydGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1WZXJ0ZXhCeXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHTDEwIGdsKSB7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgR0wxMSBnbDExID0gKEdMMTEpIGdsOworCisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9BUlJBWV9CVUZGRVIsIG1WZXJ0ZXhCdWZmZXJPYmplY3RJZCk7CisgICAgICAgICAgICBnbDExLmdsVmVydGV4UG9pbnRlcigzLCBHTDEwLkdMX0ZMT0FULCBWRVJURVhfU0laRSwgMCk7CisKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9OT1JNQUxfQVJSQVkpOworICAgICAgICAgICAgZ2wxMS5nbE5vcm1hbFBvaW50ZXIoR0wxMC5HTF9GTE9BVCwgVkVSVEVYX1NJWkUsIFZFUlRFWF9OT1JNQUxfQlVGRkVSX0lOREVYX09GRlNFVCAqIEZMT0FUX1NJWkUpOworCisgICAgICAgICAgICBnbDExLmdsQmluZEJ1ZmZlcihHTDExLkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtRWxlbWVudEJ1ZmZlck9iamVjdElkKTsKKyAgICAgICAgICAgIGdsMTEuZ2xEcmF3RWxlbWVudHMoR0wxMC5HTF9UUklBTkdMRVMsIG1JbmRleENvdW50LCBHTDEwLkdMX1VOU0lHTkVEX1NIT1JULCAwKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfTk9STUFMX0FSUkFZKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfQVJSQVlfQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDApOworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNoZWNrR0xFcnJvcihHTCBnbCkgeworICAgICAgICBpbnQgZXJyb3IgPSAoKEdMMTApIGdsKS5nbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciAhPSBHTDEwLkdMX05PX0VSUk9SKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiR0xFcnJvciAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVycm9yKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIG91ciBzdXJmYWNlIHZpZXcgYW5kIHNldCBpdCBhcyB0aGUgY29udGVudCBvZiBvdXIKKyAgICAgICAgLy8gQWN0aXZpdHkKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcgPSBuZXcgR0xTdXJmYWNlVmlldyh0aGlzKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcuc2V0UmVuZGVyZXIobmV3IFJlbmRlcmVyKCkpOworICAgICAgICBzZXRDb250ZW50VmlldyhtR0xTdXJmYWNlVmlldyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5vblJlc3VtZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblBhdXNlKCk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3Lm9uUGF1c2UoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvRGVuc2l0eUFjdGl2aXR5LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvRGVuc2l0eUFjdGl2aXR5LmphdmEKaW5kZXggMTBjNDJhNy4uOGM1YzkzYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0RlbnNpdHlBY3Rpdml0eS5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9EZW5zaXR5QWN0aXZpdHkuamF2YQpAQCAtMjEsNyArMjEsNiBAQAogaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQXBwbGljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwpAQCAtMzQsOCArMzMsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApAQCAtMTE3LDIwICsxMTQsMjAgQEAKIAogICAgIHByaXZhdGUgVmlldyBzY3JvbGxXcmFwKFZpZXcgdmlldykgewogICAgICAgICBTY3JvbGxWaWV3IHNjcm9sbGVyID0gbmV3IFNjcm9sbFZpZXcodGhpcyk7Ci0gICAgICAgIHNjcm9sbGVyLmFkZFZpZXcodmlldywgbmV3IFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zKFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAotICAgICAgICAgICAgICAgIFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKSk7CisgICAgICAgIHNjcm9sbGVyLmFkZFZpZXcodmlldywgbmV3IFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zKFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICBTY3JvbGxWaWV3LkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpKTsKICAgICAgICAgcmV0dXJuIHNjcm9sbGVyOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRMYWJlbFRvUm9vdChMaW5lYXJMYXlvdXQgcm9vdCwgU3RyaW5nIHRleHQpIHsKICAgICAgICAgVGV4dFZpZXcgbGFiZWwgPSBuZXcgVGV4dFZpZXcodGhpcyk7CiAgICAgICAgIGxhYmVsLnNldFRleHQodGV4dCk7Ci0gICAgICAgIHJvb3QuYWRkVmlldyhsYWJlbCwgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKKyAgICAgICAgcm9vdC5hZGRWaWV3KGxhYmVsLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRDaGlsZFRvUm9vdChMaW5lYXJMYXlvdXQgcm9vdCwgTGluZWFyTGF5b3V0IGxheW91dCkgewotICAgICAgICByb290LmFkZFZpZXcobGF5b3V0LCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICByb290LmFkZFZpZXcobGF5b3V0LCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0ZyYW1lQnVmZmVyT2JqZWN0QWN0aXZpdHkuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9GcmFtZUJ1ZmZlck9iamVjdEFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkNGEyOAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9GcmFtZUJ1ZmZlck9iamVjdEFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5ncmFwaGljczsKKworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb25maWc7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0w7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMDsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDExRXh0ZW5zaW9uUGFjazsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMU3VyZmFjZVZpZXc7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CisKKy8qKgorICogRGVtb25zdHJhdGUgdGhlIEZyYW1lIEJ1ZmZlciBPYmplY3QgT3BlbkdMIEVTIGV4dGVuc2lvbi4KKyAqIDxwPgorICogVGhpcyBzYW1wbGUgcmVuZGVycyBhIHNjZW5lIGludG8gYW4gb2Zmc2NyZWVuIGZyYW1lIGJ1ZmZlciwgYW5kIHRoZW4KKyAqIHVzZXMgdGhlIHJlc3VsdGluZyBpbWFnZSBhcyBhIHRleHR1cmUgdG8gcmVuZGVyIGFuIG9uc2NyZWVuIHNjZW5lLgorICovCitwdWJsaWMgY2xhc3MgRnJhbWVCdWZmZXJPYmplY3RBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgbUdMU3VyZmFjZVZpZXc7CisKKyAgICBwcml2YXRlIGNsYXNzIFJlbmRlcmVyIGltcGxlbWVudHMgR0xTdXJmYWNlVmlldy5SZW5kZXJlciB7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQ29udGV4dFN1cHBvcnRzRnJhbWVCdWZmZXJPYmplY3Q7CisgICAgICAgIHByaXZhdGUgaW50IG1UYXJnZXRUZXh0dXJlOworICAgICAgICBwcml2YXRlIGludCBtRnJhbWVidWZmZXI7CisgICAgICAgIHByaXZhdGUgaW50IG1GcmFtZWJ1ZmZlcldpZHRoID0gMjU2OworICAgICAgICBwcml2YXRlIGludCBtRnJhbWVidWZmZXJIZWlnaHQgPSAyNTY7CisgICAgICAgIHByaXZhdGUgaW50IG1TdXJmYWNlV2lkdGg7CisgICAgICAgIHByaXZhdGUgaW50IG1TdXJmYWNlSGVpZ2h0OworCisgICAgICAgIHByaXZhdGUgVHJpYW5nbGUgbVRyaWFuZ2xlOworICAgICAgICBwcml2YXRlIEN1YmUgbUN1YmU7CisgICAgICAgIHByaXZhdGUgZmxvYXQgbUFuZ2xlOworICAgICAgICAvKioKKyAgICAgICAgICogU2V0dGluZyB0aGlzIHRvIHRydWUgd2lsbCBjaGFuZ2UgdGhlIGJlaGF2aW9yICBvZiB0aGlzIHNhbXBsZS4gSXQKKyAgICAgICAgICogd2lsbCBzdXBwcmVzcyB0aGUgbm9ybWFsbHkgb25zY3JlZW4gcmVuZGVyaW5nLCBhbmQgaXQgd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgICogcmVuZGVyaW5nIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgZG9uZSB0byB0aGUgb2Zmc2NyZWVuIEZCTworICAgICAgICAgKiBiZSByZW5kZXJlZCBvbnNjcmVlbiBpbnN0ZWFkLiBUaGlzIGNhbiBiZSBoZWxwZnVsIGluIGRlYnVnZ2luZyB0aGUKKyAgICAgICAgICogcmVuZGVyaW5nIGFsZ29yaXRobS4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfUkVOREVSX09GRlNDUkVFTl9PTlNDUkVFTiA9IGZhbHNlOworCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRHJhd0ZyYW1lKEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICBpZiAobUNvbnRleHRTdXBwb3J0c0ZyYW1lQnVmZmVyT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgR0wxMUV4dGVuc2lvblBhY2sgZ2wxMWVwID0gKEdMMTFFeHRlbnNpb25QYWNrKSBnbDsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfUkVOREVSX09GRlNDUkVFTl9PTlNDUkVFTikgeworICAgICAgICAgICAgICAgICAgICBkcmF3T2Zmc2NyZWVuSW1hZ2UoZ2wsIG1TdXJmYWNlV2lkdGgsIG1TdXJmYWNlSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnbDExZXAuZ2xCaW5kRnJhbWVidWZmZXJPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfT0VTLCBtRnJhbWVidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBkcmF3T2Zmc2NyZWVuSW1hZ2UoZ2wsIG1GcmFtZWJ1ZmZlcldpZHRoLCBtRnJhbWVidWZmZXJIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBnbDExZXAuZ2xCaW5kRnJhbWVidWZmZXJPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfT0VTLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgZHJhd09uc2NyZWVuKGdsLCBtU3VyZmFjZVdpZHRoLCBtU3VyZmFjZUhlaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBDdXJyZW50IGNvbnRleHQgZG9lc24ndCBzdXBwb3J0IGZyYW1lIGJ1ZmZlciBvYmplY3RzLgorICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoaXMgYnkgZHJhd2luZyBhIHJlZCBiYWNrZ3JvdW5kLgorICAgICAgICAgICAgICAgIGdsLmdsQ2xlYXJDb2xvcigxLDAsMCwwKTsKKyAgICAgICAgICAgICAgICBnbC5nbENsZWFyKEdMMTAuR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMMTAuR0xfREVQVEhfQlVGRkVSX0JJVCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDaGFuZ2VkKEdMMTAgZ2wsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgIG1TdXJmYWNlV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIG1TdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgZ2wuZ2xWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNyZWF0ZWQoR0wxMCBnbCwgRUdMQ29uZmlnIGNvbmZpZykgeworICAgICAgICAgICAgbUNvbnRleHRTdXBwb3J0c0ZyYW1lQnVmZmVyT2JqZWN0ID0gY2hlY2tJZkNvbnRleHRTdXBwb3J0c0ZyYW1lQnVmZmVyT2JqZWN0KGdsKTsKKyAgICAgICAgICAgIGlmIChtQ29udGV4dFN1cHBvcnRzRnJhbWVCdWZmZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBtVGFyZ2V0VGV4dHVyZSA9IGNyZWF0ZVRhcmdldFRleHR1cmUoZ2wsIG1GcmFtZWJ1ZmZlcldpZHRoLCBtRnJhbWVidWZmZXJIZWlnaHQpOworICAgICAgICAgICAgICAgIG1GcmFtZWJ1ZmZlciA9IGNyZWF0ZUZyYW1lQnVmZmVyKGdsLCBtRnJhbWVidWZmZXJXaWR0aCwgbUZyYW1lYnVmZmVySGVpZ2h0LCBtVGFyZ2V0VGV4dHVyZSk7CisKKyAgICAgICAgICAgICAgICBtQ3ViZSA9IG5ldyBDdWJlKCk7CisgICAgICAgICAgICAgICAgbVRyaWFuZ2xlID0gbmV3IFRyaWFuZ2xlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgZHJhd09uc2NyZWVuKEdMMTAgZ2wsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgZ2wuZ2xWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZsb2F0IHJhdGlvID0gKGZsb2F0KSB3aWR0aCAvIGhlaWdodDsKKyAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX1BST0pFQ1RJT04pOworICAgICAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIGdsLmdsRnJ1c3R1bWYoLXJhdGlvLCByYXRpbywgLTEsIDEsIDMsIDcpOworCisgICAgICAgICAgICBnbC5nbENsZWFyQ29sb3IoMCwwLDEsMCk7CisgICAgICAgICAgICBnbC5nbENsZWFyKEdMMTAuR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMMTAuR0xfREVQVEhfQlVGRkVSX0JJVCk7CisgICAgICAgICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRV8yRCwgbVRhcmdldFRleHR1cmUpOworCisgICAgICAgICAgICBnbC5nbFRleEVudmYoR0wxMC5HTF9URVhUVVJFX0VOViwgR0wxMC5HTF9URVhUVVJFX0VOVl9NT0RFLAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUExBQ0UpOworCisgICAgICAgICAgICBnbC5nbE1hdHJpeE1vZGUoR0wxMC5HTF9NT0RFTFZJRVcpOworICAgICAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsKKworICAgICAgICAgICAgR0xVLmdsdUxvb2tBdChnbCwgMCwgMCwgLTUsIDBmLCAwZiwgMGYsIDBmLCAxLjBmLCAwLjBmKTsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CisKKyAgICAgICAgICAgIGdsLmdsQWN0aXZlVGV4dHVyZShHTDEwLkdMX1RFWFRVUkUwKTsKKworICAgICAgICAgICAgbG9uZyB0aW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkgJSA0MDAwTDsKKyAgICAgICAgICAgIGZsb2F0IGFuZ2xlID0gMC4wOTBmICogKChpbnQpIHRpbWUpOworCisgICAgICAgICAgICBnbC5nbFJvdGF0ZWYoYW5nbGUsIDAsIDAsIDEuMGYpOworCisgICAgICAgICAgICBtVHJpYW5nbGUuZHJhdyhnbCk7CisKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgZGVmYXVsdCBzdGF0ZSBzbyB0aGUgb3RoZXIgcmVuZGVyZXIgaXMgbm90IGFmZmVjdGVkLgorCisgICAgICAgICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDEwLkdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGRyYXdPZmZzY3JlZW5JbWFnZShHTDEwIGdsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgICAgIGdsLmdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBmbG9hdCByYXRpbyA9IChmbG9hdCkgd2lkdGggLyBoZWlnaHQ7CisgICAgICAgICAgICBnbC5nbE1hdHJpeE1vZGUoR0wxMC5HTF9QUk9KRUNUSU9OKTsKKyAgICAgICAgICAgIGdsLmdsTG9hZElkZW50aXR5KCk7CisgICAgICAgICAgICBnbC5nbEZydXN0dW1mKC1yYXRpbywgcmF0aW8sIC0xLCAxLCAxLCAxMCk7CisKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMMTAuR0xfQ1VMTF9GQUNFKTsKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMMTAuR0xfREVQVEhfVEVTVCk7CisKKyAgICAgICAgICAgIGdsLmdsQ2xlYXJDb2xvcigwLDAuNWYsMSwwKTsKKyAgICAgICAgICAgIGdsLmdsQ2xlYXIoR0wxMC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wxMC5HTF9ERVBUSF9CVUZGRVJfQklUKTsKKyAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX01PREVMVklFVyk7CisgICAgICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOworICAgICAgICAgICAgZ2wuZ2xUcmFuc2xhdGVmKDAsIDAsIC0zLjBmKTsKKyAgICAgICAgICAgIGdsLmdsUm90YXRlZihtQW5nbGUsICAgICAgICAwLCAxLCAwKTsKKyAgICAgICAgICAgIGdsLmdsUm90YXRlZihtQW5nbGUqMC4yNWYsICAxLCAwLCAwKTsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfQ09MT1JfQVJSQVkpOworCisgICAgICAgICAgICBtQ3ViZS5kcmF3KGdsKTsKKworICAgICAgICAgICAgZ2wuZ2xSb3RhdGVmKG1BbmdsZSoyLjBmLCAwLCAxLCAxKTsKKyAgICAgICAgICAgIGdsLmdsVHJhbnNsYXRlZigwLjVmLCAwLjVmLCAwLjVmKTsKKworICAgICAgICAgICAgbUN1YmUuZHJhdyhnbCk7CisKKyAgICAgICAgICAgIG1BbmdsZSArPSAxLjJmOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIGRlZmF1bHQgc3RhdGUgc28gdGhlIG90aGVyIHJlbmRlcmVyIGlzIG5vdCBhZmZlY3RlZC4KKworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlKEdMMTAuR0xfQ1VMTF9GQUNFKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZShHTDEwLkdMX0RFUFRIX1RFU1QpOworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9WRVJURVhfQVJSQVkpOworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9DT0xPUl9BUlJBWSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGludCBjcmVhdGVUYXJnZXRUZXh0dXJlKEdMMTAgZ2wsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgaW50IHRleHR1cmU7CisgICAgICAgICAgICBpbnRbXSB0ZXh0dXJlcyA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICBnbC5nbEdlblRleHR1cmVzKDEsIHRleHR1cmVzLCAwKTsKKyAgICAgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlc1swXTsKKyAgICAgICAgICAgIGdsLmdsQmluZFRleHR1cmUoR0wxMC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAgICAgICAgIGdsLmdsVGV4SW1hZ2UyRChHTDEwLkdMX1RFWFRVUkVfMkQsIDAsIEdMMTAuR0xfUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwKKyAgICAgICAgICAgICAgICAgICAgR0wxMC5HTF9SR0JBLCBHTDEwLkdMX1VOU0lHTkVEX0JZVEUsIG51bGwpOworICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJmKEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX01JTl9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgIEdMMTAuR0xfTkVBUkVTVCk7CisgICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMC5HTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgR0wxMC5HTF9MSU5FQVIpOworICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJ4KEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX1dSQVBfUywKKyAgICAgICAgICAgICAgICAgICAgR0wxMC5HTF9SRVBFQVQpOworICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJ4KEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX1dSQVBfVCwKKyAgICAgICAgICAgICAgICAgICAgR0wxMC5HTF9SRVBFQVQpOworOyAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgY3JlYXRlRnJhbWVCdWZmZXIoR0wxMCBnbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgdGFyZ2V0VGV4dHVyZUlkKSB7CisgICAgICAgICAgICBHTDExRXh0ZW5zaW9uUGFjayBnbDExZXAgPSAoR0wxMUV4dGVuc2lvblBhY2spIGdsOworICAgICAgICAgICAgaW50IGZyYW1lYnVmZmVyOworICAgICAgICAgICAgaW50W10gZnJhbWVidWZmZXJzID0gbmV3IGludFsxXTsKKyAgICAgICAgICAgIGdsMTFlcC5nbEdlbkZyYW1lYnVmZmVyc09FUygxLCBmcmFtZWJ1ZmZlcnMsIDApOworICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcnNbMF07CisgICAgICAgICAgICBnbDExZXAuZ2xCaW5kRnJhbWVidWZmZXJPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfT0VTLCBmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGludCBkZXB0aGJ1ZmZlcjsKKyAgICAgICAgICAgIGludFtdIHJlbmRlcmJ1ZmZlcnMgPSBuZXcgaW50WzFdOworICAgICAgICAgICAgZ2wxMWVwLmdsR2VuUmVuZGVyYnVmZmVyc09FUygxLCByZW5kZXJidWZmZXJzLCAwKTsKKyAgICAgICAgICAgIGRlcHRoYnVmZmVyID0gcmVuZGVyYnVmZmVyc1swXTsKKworICAgICAgICAgICAgZ2wxMWVwLmdsQmluZFJlbmRlcmJ1ZmZlck9FUyhHTDExRXh0ZW5zaW9uUGFjay5HTF9SRU5ERVJCVUZGRVJfT0VTLCBkZXB0aGJ1ZmZlcik7CisgICAgICAgICAgICBnbDExZXAuZ2xSZW5kZXJidWZmZXJTdG9yYWdlT0VTKEdMMTFFeHRlbnNpb25QYWNrLkdMX1JFTkRFUkJVRkZFUl9PRVMsCisgICAgICAgICAgICAgICAgICAgIEdMMTFFeHRlbnNpb25QYWNrLkdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGdsMTFlcC5nbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyT0VTKEdMMTFFeHRlbnNpb25QYWNrLkdMX0ZSQU1FQlVGRkVSX09FUywKKyAgICAgICAgICAgICAgICAgICAgR0wxMUV4dGVuc2lvblBhY2suR0xfREVQVEhfQVRUQUNITUVOVF9PRVMsCisgICAgICAgICAgICAgICAgICAgIEdMMTFFeHRlbnNpb25QYWNrLkdMX1JFTkRFUkJVRkZFUl9PRVMsIGRlcHRoYnVmZmVyKTsKKworICAgICAgICAgICAgZ2wxMWVwLmdsRnJhbWVidWZmZXJUZXh0dXJlMkRPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfT0VTLAorICAgICAgICAgICAgICAgICAgICBHTDExRXh0ZW5zaW9uUGFjay5HTF9DT0xPUl9BVFRBQ0hNRU5UMF9PRVMsIEdMMTAuR0xfVEVYVFVSRV8yRCwKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VGV4dHVyZUlkLCAwKTsKKyAgICAgICAgICAgIGludCBzdGF0dXMgPSBnbDExZXAuZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzT0VTKEdMMTFFeHRlbnNpb25QYWNrLkdMX0ZSQU1FQlVGRkVSX09FUyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEdMMTFFeHRlbnNpb25QYWNrLkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX09FUykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGU6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b0hleFN0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsMTFlcC5nbEJpbmRGcmFtZWJ1ZmZlck9FUyhHTDExRXh0ZW5zaW9uUGFjay5HTF9GUkFNRUJVRkZFUl9PRVMsIDApOworICAgICAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrSWZDb250ZXh0U3VwcG9ydHNGcmFtZUJ1ZmZlck9iamVjdChHTDEwIGdsKSB7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tJZkNvbnRleHRTdXBwb3J0c0V4dGVuc2lvbihnbCwgIkdMX09FU19mcmFtZWJ1ZmZlcl9vYmplY3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCB3YXkgdG8gY2hlY2sgZm9yIGFuIGV4dGVuc2lvbiwgYnV0IGZpbmUgaWYKKyAgICAgICAgICogd2UgYXJlIG9ubHkgY2hlY2tpbmcgZm9yIGEgZmV3IGV4dGVuc2lvbnMgZWFjaCB0aW1lIGEgY29udGV4dCBpcyBjcmVhdGVkLgorICAgICAgICAgKiBAcGFyYW0gZ2wKKyAgICAgICAgICogQHBhcmFtIGV4dGVuc2lvbgorICAgICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGV4dGVuc2lvbiBpcyBwcmVzZW50IGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tJZkNvbnRleHRTdXBwb3J0c0V4dGVuc2lvbihHTDEwIGdsLCBTdHJpbmcgZXh0ZW5zaW9uKSB7CisgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9ucyA9ICIgIiArIGdsLmdsR2V0U3RyaW5nKEdMMTAuR0xfRVhURU5TSU9OUykgKyAiICI7CisgICAgICAgICAgICAvLyBUaGUgZXh0ZW5zaW9ucyBzdHJpbmcgaXMgcGFkZGVkIHdpdGggc3BhY2VzIGJldHdlZW4gZXh0ZW5zaW9ucywgYnV0IG5vdAorICAgICAgICAgICAgLy8gbmVjZXNzYXJpbHkgYXQgdGhlIGJlZ2lubmluZyBvciBlbmQuIEZvciBzaW1wbGljaXR5LCBhZGQgc3BhY2VzIGF0IHRoZQorICAgICAgICAgICAgLy8gYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGV4dGVuc2lvbnMgc3RyaW5nIGFuZCB0aGUgZXh0ZW5zaW9uIHN0cmluZy4KKyAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgY2FuIGF2b2lkIHNwZWNpYWwtY2FzZSBjaGVja3MgZm9yIHRoZSBmaXJzdCBvciBsYXN0CisgICAgICAgICAgICAvLyBleHRlbnNpb24sIGFzIHdlbGwgYXMgYXZvaWQgc3BlY2lhbC1jYXNlIGNoZWNrcyB3aGVuIGFuIGV4dGVuc2lvbiBuYW1lCisgICAgICAgICAgICAvLyBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgcGFydCBvZiBhbm90aGVyIGV4dGVuc2lvbiBuYW1lLgorICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnMuaW5kZXhPZigiICIgKyBleHRlbnNpb24gKyAiICIpID49IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0dMRXJyb3IoR0wgZ2wpIHsKKyAgICAgICAgaW50IGVycm9yID0gKChHTDEwKSBnbCkuZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgIT0gR0wxMC5HTF9OT19FUlJPUikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkdMRXJyb3IgMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlcnJvcikpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgIC8vIENyZWF0ZSBvdXIgc3VyZmFjZSB2aWV3IGFuZCBzZXQgaXQgYXMgdGhlIGNvbnRlbnQgb2Ygb3VyCisgICAgICAgIC8vIEFjdGl2aXR5CisgICAgICAgIG1HTFN1cmZhY2VWaWV3ID0gbmV3IEdMU3VyZmFjZVZpZXcodGhpcyk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3LnNldFJlbmRlcmVyKG5ldyBSZW5kZXJlcigpKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcobUdMU3VyZmFjZVZpZXcpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQorICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKKyAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcub25SZXN1bWUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgeworICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQorICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKKyAgICAgICAgc3VwZXIub25QYXVzZSgpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5vblBhdXNlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0dMRVMyMEFjdGl2aXR5LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvR0xFUzIwQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU3M2NmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0dMRVMyMEFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Db25maWd1cmF0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCisvKioKKyAqIFRoaXMgc2FtcGxlIHNob3dzIGhvdyB0byBjaGVjayBmb3IgT3BlbkdMIEVTIDIuMCBzdXBwb3J0IGF0IHJ1bnRpbWUsIGFuZCB0aGVuCisgKiB1c2UgZWl0aGVyIE9wZW5HTCBFUyAxLjAgb3IgT3BlbkdMIEVTIDIuMCwgYXMgYXBwcm9wcmlhdGUuCisgKi8KK3B1YmxpYyBjbGFzcyBHTEVTMjBBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3ID0gbmV3IEdMU3VyZmFjZVZpZXcodGhpcyk7CisgICAgICAgIGlmIChkZXRlY3RPcGVuR0xFUzIwKCkpIHsKKyAgICAgICAgICAgIC8vIFRlbGwgdGhlIHN1cmZhY2UgdmlldyB3ZSB3YW50IHRvIGNyZWF0ZSBhbiBPcGVuR0wgRVMgMi4wLWNvbXBhdGlibGUKKyAgICAgICAgICAgIC8vIGNvbnRleHQsIGFuZCBzZXQgYW4gT3BlbkdMIEVTIDIuMC1jb21wYXRpYmxlIHJlbmRlcmVyLgorICAgICAgICAgICAgbUdMU3VyZmFjZVZpZXcuc2V0RUdMQ29udGV4dENsaWVudFZlcnNpb24oMik7CisgICAgICAgICAgICBtR0xTdXJmYWNlVmlldy5zZXRSZW5kZXJlcihuZXcgR0xFUzIwVHJpYW5nbGVSZW5kZXJlcih0aGlzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTZXQgYW4gT3BlbkdMIEVTIDEueC1jb21wYXRpYmxlIHJlbmRlcmVyLiBJbiBhIHJlYWwgYXBwbGljYXRpb24KKyAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyZXIgbWlnaHQgYXBwcm94aW1hdGUgdGhlIHNhbWUgb3V0cHV0IGFzIHRoZSAyLjAgcmVuZGVyZXIuCisgICAgICAgICAgICBtR0xTdXJmYWNlVmlldy5zZXRSZW5kZXJlcihuZXcgVHJpYW5nbGVSZW5kZXJlcih0aGlzKSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0Q29udGVudFZpZXcobUdMU3VyZmFjZVZpZXcpOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBkZXRlY3RPcGVuR0xFUzIwKCkgeworICAgICAgICBBY3Rpdml0eU1hbmFnZXIgYW0gPQorICAgICAgICAgICAgKEFjdGl2aXR5TWFuYWdlcikgZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFDVElWSVRZX1NFUlZJQ0UpOworICAgICAgICBDb25maWd1cmF0aW9uSW5mbyBpbmZvID0gYW0uZ2V0RGV2aWNlQ29uZmlndXJhdGlvbkluZm8oKTsKKyAgICAgICAgcmV0dXJuIChpbmZvLnJlcUdsRXNWZXJzaW9uID49IDB4MjAwMDApOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQorICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKKyAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcub25SZXN1bWUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgeworICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQorICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKKyAgICAgICAgc3VwZXIub25QYXVzZSgpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5vblBhdXNlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBHTFN1cmZhY2VWaWV3IG1HTFN1cmZhY2VWaWV3OworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0dMRVMyMFRyaWFuZ2xlUmVuZGVyZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9HTEVTMjBUcmlhbmdsZVJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2ZWI2OAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9HTEVTMjBUcmlhbmdsZVJlbmRlcmVyLmphdmEKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5ncmFwaGljczsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKK2ltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKKworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb25maWc7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFV0aWxzOworaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKKworY2xhc3MgR0xFUzIwVHJpYW5nbGVSZW5kZXJlciBpbXBsZW1lbnRzIEdMU3VyZmFjZVZpZXcuUmVuZGVyZXIgeworCisgICAgcHVibGljIEdMRVMyMFRyaWFuZ2xlUmVuZGVyZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbVRyaWFuZ2xlVmVydGljZXMgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KG1UcmlhbmdsZVZlcnRpY2VzRGF0YS5sZW5ndGgKKyAgICAgICAgICAgICAgICAqIEZMT0FUX1NJWkVfQllURVMpLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKS5hc0Zsb2F0QnVmZmVyKCk7CisgICAgICAgIG1UcmlhbmdsZVZlcnRpY2VzLnB1dChtVHJpYW5nbGVWZXJ0aWNlc0RhdGEpLnBvc2l0aW9uKDApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uRHJhd0ZyYW1lKEdMMTAgZ2xVbnVzZWQpIHsKKyAgICAgICAgLy8gSWdub3JlIHRoZSBwYXNzZWQtaW4gR0wxMCBpbnRlcmZhY2UsIGFuZCB1c2UgdGhlIEdMRVMyMAorICAgICAgICAvLyBjbGFzcydzIHN0YXRpYyBtZXRob2RzIGluc3RlYWQuCisgICAgICAgIEdMRVMyMC5nbENsZWFyQ29sb3IoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZik7CisgICAgICAgIEdMRVMyMC5nbENsZWFyKCBHTEVTMjAuR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICAgICAgR0xFUzIwLmdsVXNlUHJvZ3JhbShtUHJvZ3JhbSk7CisgICAgICAgIGNoZWNrR2xFcnJvcigiZ2xVc2VQcm9ncmFtIik7CisKKyAgICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOworICAgICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgbVRleHR1cmVJRCk7CisKKyAgICAgICAgbVRyaWFuZ2xlVmVydGljZXMucG9zaXRpb24oVFJJQU5HTEVfVkVSVElDRVNfREFUQV9QT1NfT0ZGU0VUKTsKKyAgICAgICAgR0xFUzIwLmdsVmVydGV4QXR0cmliUG9pbnRlcihtYVBvc2l0aW9uSGFuZGxlLCAzLCBHTEVTMjAuR0xfRkxPQVQsIGZhbHNlLAorICAgICAgICAgICAgICAgIFRSSUFOR0xFX1ZFUlRJQ0VTX0RBVEFfU1RSSURFX0JZVEVTLCBtVHJpYW5nbGVWZXJ0aWNlcyk7CisgICAgICAgIGNoZWNrR2xFcnJvcigiZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIG1hUG9zaXRpb24iKTsKKyAgICAgICAgbVRyaWFuZ2xlVmVydGljZXMucG9zaXRpb24oVFJJQU5HTEVfVkVSVElDRVNfREFUQV9VVl9PRkZTRVQpOworICAgICAgICBHTEVTMjAuZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtYVBvc2l0aW9uSGFuZGxlKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5IG1hUG9zaXRpb25IYW5kbGUiKTsKKyAgICAgICAgR0xFUzIwLmdsVmVydGV4QXR0cmliUG9pbnRlcihtYVRleHR1cmVIYW5kbGUsIDIsIEdMRVMyMC5HTF9GTE9BVCwgZmFsc2UsCisgICAgICAgICAgICAgICAgVFJJQU5HTEVfVkVSVElDRVNfREFUQV9TVFJJREVfQllURVMsIG1UcmlhbmdsZVZlcnRpY2VzKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbFZlcnRleEF0dHJpYlBvaW50ZXIgbWFUZXh0dXJlSGFuZGxlIik7CisgICAgICAgIEdMRVMyMC5nbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1hVGV4dHVyZUhhbmRsZSk7CisgICAgICAgIGNoZWNrR2xFcnJvcigiZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSBtYVRleHR1cmVIYW5kbGUiKTsKKworICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAlIDQwMDBMOworICAgICAgICBmbG9hdCBhbmdsZSA9IDAuMDkwZiAqICgoaW50KSB0aW1lKTsKKyAgICAgICAgTWF0cml4LnNldFJvdGF0ZU0obU1NYXRyaXgsIDAsIGFuZ2xlLCAwLCAwLCAxLjBmKTsKKyAgICAgICAgTWF0cml4Lm11bHRpcGx5TU0obU1WUE1hdHJpeCwgMCwgbVZNYXRyaXgsIDAsIG1NTWF0cml4LCAwKTsKKyAgICAgICAgTWF0cml4Lm11bHRpcGx5TU0obU1WUE1hdHJpeCwgMCwgbVByb2pNYXRyaXgsIDAsIG1NVlBNYXRyaXgsIDApOworCisgICAgICAgIEdMRVMyMC5nbFVuaWZvcm1NYXRyaXg0ZnYobXVNVlBNYXRyaXhIYW5kbGUsIDEsIGZhbHNlLCBtTVZQTWF0cml4LCAwKTsKKyAgICAgICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAuR0xfVFJJQU5HTEVTLCAwLCAzKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbERyYXdBcnJheXMiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDaGFuZ2VkKEdMMTAgZ2xVbnVzZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAvLyBJZ25vcmUgdGhlIHBhc3NlZC1pbiBHTDEwIGludGVyZmFjZSwgYW5kIHVzZSB0aGUgR0xFUzIwCisgICAgICAgIC8vIGNsYXNzJ3Mgc3RhdGljIG1ldGhvZHMgaW5zdGVhZC4KKyAgICAgICAgR0xFUzIwLmdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGZsb2F0IHJhdGlvID0gKGZsb2F0KSB3aWR0aCAvIGhlaWdodDsKKyAgICAgICAgTWF0cml4LmZydXN0dW1NKG1Qcm9qTWF0cml4LCAwLCAtcmF0aW8sIHJhdGlvLCAtMSwgMSwgMywgNyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRlZChHTDEwIGdsVW51c2VkLCBFR0xDb25maWcgY29uZmlnKSB7CisgICAgICAgIC8vIElnbm9yZSB0aGUgcGFzc2VkLWluIEdMMTAgaW50ZXJmYWNlLCBhbmQgdXNlIHRoZSBHTEVTMjAKKyAgICAgICAgLy8gY2xhc3MncyBzdGF0aWMgbWV0aG9kcyBpbnN0ZWFkLgorICAgICAgICBtUHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0obVZlcnRleFNoYWRlciwgbUZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgaWYgKG1Qcm9ncmFtID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtYVBvc2l0aW9uSGFuZGxlID0gR0xFUzIwLmdsR2V0QXR0cmliTG9jYXRpb24obVByb2dyYW0sICJhUG9zaXRpb24iKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbEdldEF0dHJpYkxvY2F0aW9uIGFQb3NpdGlvbiIpOworICAgICAgICBpZiAobWFQb3NpdGlvbkhhbmRsZSA9PSAtMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgYXR0cmliIGxvY2F0aW9uIGZvciBhUG9zaXRpb24iKTsKKyAgICAgICAgfQorICAgICAgICBtYVRleHR1cmVIYW5kbGUgPSBHTEVTMjAuZ2xHZXRBdHRyaWJMb2NhdGlvbihtUHJvZ3JhbSwgImFUZXh0dXJlQ29vcmQiKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbEdldEF0dHJpYkxvY2F0aW9uIGFUZXh0dXJlQ29vcmQiKTsKKyAgICAgICAgaWYgKG1hVGV4dHVyZUhhbmRsZSA9PSAtMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgYXR0cmliIGxvY2F0aW9uIGZvciBhVGV4dHVyZUNvb3JkIik7CisgICAgICAgIH0KKworICAgICAgICBtdU1WUE1hdHJpeEhhbmRsZSA9IEdMRVMyMC5nbEdldFVuaWZvcm1Mb2NhdGlvbihtUHJvZ3JhbSwgInVNVlBNYXRyaXgiKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbEdldFVuaWZvcm1Mb2NhdGlvbiB1TVZQTWF0cml4Iik7CisgICAgICAgIGlmIChtdU1WUE1hdHJpeEhhbmRsZSA9PSAtMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgYXR0cmliIGxvY2F0aW9uIGZvciB1TVZQTWF0cml4Iik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBDcmVhdGUgb3VyIHRleHR1cmUuIFRoaXMgaGFzIHRvIGJlIGRvbmUgZWFjaCB0aW1lIHRoZQorICAgICAgICAgKiBzdXJmYWNlIGlzIGNyZWF0ZWQuCisgICAgICAgICAqLworCisgICAgICAgIGludFtdIHRleHR1cmVzID0gbmV3IGludFsxXTsKKyAgICAgICAgR0xFUzIwLmdsR2VuVGV4dHVyZXMoMSwgdGV4dHVyZXMsIDApOworCisgICAgICAgIG1UZXh0dXJlSUQgPSB0ZXh0dXJlc1swXTsKKyAgICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIG1UZXh0dXJlSUQpOworCisgICAgICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIEdMRVMyMC5HTF9URVhUVVJFX01JTl9GSUxURVIsCisgICAgICAgICAgICAgICAgR0xFUzIwLkdMX05FQVJFU1QpOworICAgICAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKEdMRVMyMC5HTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgIEdMRVMyMC5HTF9URVhUVVJFX01BR19GSUxURVIsCisgICAgICAgICAgICAgICAgR0xFUzIwLkdMX0xJTkVBUik7CisKKyAgICAgICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyaShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgR0xFUzIwLkdMX1RFWFRVUkVfV1JBUF9TLAorICAgICAgICAgICAgICAgIEdMRVMyMC5HTF9SRVBFQVQpOworICAgICAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJpKEdMRVMyMC5HTF9URVhUVVJFXzJELCBHTEVTMjAuR0xfVEVYVFVSRV9XUkFQX1QsCisgICAgICAgICAgICAgICAgR0xFUzIwLkdMX1JFUEVBVCk7CisKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKQorICAgICAgICAgICAgLm9wZW5SYXdSZXNvdXJjZShSLnJhdy5yb2JvdCk7CisgICAgICAgIEJpdG1hcCBiaXRtYXA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBiaXRtYXAgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpcyk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBHTFV0aWxzLnRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAsIGJpdG1hcCwgMCk7CisgICAgICAgIGJpdG1hcC5yZWN5Y2xlKCk7CisKKyAgICAgICAgTWF0cml4LnNldExvb2tBdE0obVZNYXRyaXgsIDAsIDAsIDAsIC01LCAwZiwgMGYsIDBmLCAwZiwgMS4wZiwgMC4wZik7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgbG9hZFNoYWRlcihpbnQgc2hhZGVyVHlwZSwgU3RyaW5nIHNvdXJjZSkgeworICAgICAgICBpbnQgc2hhZGVyID0gR0xFUzIwLmdsQ3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpOworICAgICAgICBpZiAoc2hhZGVyICE9IDApIHsKKyAgICAgICAgICAgIEdMRVMyMC5nbFNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSk7CisgICAgICAgICAgICBHTEVTMjAuZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgICAgICAgICBpbnRbXSBjb21waWxlZCA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICBHTEVTMjAuZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMRVMyMC5HTF9DT01QSUxFX1NUQVRVUywgY29tcGlsZWQsIDApOworICAgICAgICAgICAgaWYgKGNvbXBpbGVkWzBdID09IDApIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZCBub3QgY29tcGlsZSBzaGFkZXIgIiArIHNoYWRlclR5cGUgKyAiOiIpOworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgR0xFUzIwLmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTsKKyAgICAgICAgICAgICAgICBHTEVTMjAuZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgICAgICAgICBzaGFkZXIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzaGFkZXI7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgY3JlYXRlUHJvZ3JhbShTdHJpbmcgdmVydGV4U291cmNlLCBTdHJpbmcgZnJhZ21lbnRTb3VyY2UpIHsKKyAgICAgICAgaW50IHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoR0xFUzIwLkdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFNvdXJjZSk7CisgICAgICAgIGlmICh2ZXJ0ZXhTaGFkZXIgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcGl4ZWxTaGFkZXIgPSBsb2FkU2hhZGVyKEdMRVMyMC5HTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U291cmNlKTsKKyAgICAgICAgaWYgKHBpeGVsU2hhZGVyID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaW50IHByb2dyYW0gPSBHTEVTMjAuZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIGlmIChwcm9ncmFtICE9IDApIHsKKyAgICAgICAgICAgIEdMRVMyMC5nbEF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgICAgICAgICAgY2hlY2tHbEVycm9yKCJnbEF0dGFjaFNoYWRlciIpOworICAgICAgICAgICAgR0xFUzIwLmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHBpeGVsU2hhZGVyKTsKKyAgICAgICAgICAgIGNoZWNrR2xFcnJvcigiZ2xBdHRhY2hTaGFkZXIiKTsKKyAgICAgICAgICAgIEdMRVMyMC5nbExpbmtQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgaW50W10gbGlua1N0YXR1cyA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICBHTEVTMjAuZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xFUzIwLkdMX0xJTktfU1RBVFVTLCBsaW5rU3RhdHVzLCAwKTsKKyAgICAgICAgICAgIGlmIChsaW5rU3RhdHVzWzBdICE9IEdMRVMyMC5HTF9UUlVFKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ291bGQgbm90IGxpbmsgcHJvZ3JhbTogIik7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBHTEVTMjAuZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7CisgICAgICAgICAgICAgICAgR0xFUzIwLmdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tHbEVycm9yKFN0cmluZyBvcCkgeworICAgICAgICBpbnQgZXJyb3I7CisgICAgICAgIHdoaWxlICgoZXJyb3IgPSBHTEVTMjAuZ2xHZXRFcnJvcigpKSAhPSBHTEVTMjAuR0xfTk9fRVJST1IpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgb3AgKyAiOiBnbEVycm9yICIgKyBlcnJvcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihvcCArICI6IGdsRXJyb3IgIiArIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTE9BVF9TSVpFX0JZVEVTID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJJQU5HTEVfVkVSVElDRVNfREFUQV9TVFJJREVfQllURVMgPSA1ICogRkxPQVRfU0laRV9CWVRFUzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJJQU5HTEVfVkVSVElDRVNfREFUQV9QT1NfT0ZGU0VUID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJJQU5HTEVfVkVSVElDRVNfREFUQV9VVl9PRkZTRVQgPSAzOworICAgIHByaXZhdGUgZmluYWwgZmxvYXRbXSBtVHJpYW5nbGVWZXJ0aWNlc0RhdGEgPSB7CisgICAgICAgICAgICAvLyBYLCBZLCBaLCBVLCBWCisgICAgICAgICAgICAtMS4wZiwgLTAuNWYsIDAsIC0wLjVmLCAwLjBmLAorICAgICAgICAgICAgMS4wZiwgLTAuNWYsIDAsIDEuNWYsIC0wLjBmLAorICAgICAgICAgICAgMC4wZiwgIDEuMTE4MDMzOTlmLCAwLCAwLjVmLCAgMS42MTgwMzM5OWYgfTsKKworICAgIHByaXZhdGUgRmxvYXRCdWZmZXIgbVRyaWFuZ2xlVmVydGljZXM7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtVmVydGV4U2hhZGVyID0KKyAgICAgICAgInVuaWZvcm0gbWF0NCB1TVZQTWF0cml4O1xuIiArCisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhUG9zaXRpb247XG4iICsKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFUZXh0dXJlQ29vcmQ7XG4iICsKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xuIiArCisgICAgICAgICJ2b2lkIG1haW4oKSB7XG4iICsKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSB1TVZQTWF0cml4ICogYVBvc2l0aW9uO1xuIiArCisgICAgICAgICIgIHZUZXh0dXJlQ29vcmQgPSBhVGV4dHVyZUNvb3JkO1xuIiArCisgICAgICAgICJ9XG4iOworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUZyYWdtZW50U2hhZGVyID0KKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIiArCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZDtcbiIgKworICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc1RleHR1cmU7XG4iICsKKyAgICAgICAgInZvaWQgbWFpbigpIHtcbiIgKworICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoc1RleHR1cmUsIHZUZXh0dXJlQ29vcmQpO1xuIiArCisgICAgICAgICJ9XG4iOworCisgICAgcHJpdmF0ZSBmbG9hdFtdIG1NVlBNYXRyaXggPSBuZXcgZmxvYXRbMTZdOworICAgIHByaXZhdGUgZmxvYXRbXSBtUHJvak1hdHJpeCA9IG5ldyBmbG9hdFsxNl07CisgICAgcHJpdmF0ZSBmbG9hdFtdIG1NTWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKKyAgICBwcml2YXRlIGZsb2F0W10gbVZNYXRyaXggPSBuZXcgZmxvYXRbMTZdOworCisgICAgcHJpdmF0ZSBpbnQgbVByb2dyYW07CisgICAgcHJpdmF0ZSBpbnQgbVRleHR1cmVJRDsKKyAgICBwcml2YXRlIGludCBtdU1WUE1hdHJpeEhhbmRsZTsKKyAgICBwcml2YXRlIGludCBtYVBvc2l0aW9uSGFuZGxlOworICAgIHByaXZhdGUgaW50IG1hVGV4dHVyZUhhbmRsZTsKKworICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFHID0gIkdMRVMyMFRyaWFuZ2xlUmVuZGVyZXIiOworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL01hdHJpeFBhbGV0dGVBY3Rpdml0eS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL01hdHJpeFBhbGV0dGVBY3Rpdml0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMGUwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvTWF0cml4UGFsZXR0ZUFjdGl2aXR5LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKKworLyoqCisgKiBUaGlzIHNhbXBsZSBzaG93cyBob3cgdG8gaW1wbGVtZW50IGEgTWF0cml4IFBhbGV0dGUKKyAqLworcHVibGljIGNsYXNzIE1hdHJpeFBhbGV0dGVBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3ID0gbmV3IEdMU3VyZmFjZVZpZXcodGhpcyk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3LnNldFJlbmRlcmVyKG5ldyBNYXRyaXhQYWxldHRlUmVuZGVyZXIodGhpcykpOworICAgICAgICBzZXRDb250ZW50VmlldyhtR0xTdXJmYWNlVmlldyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5vblJlc3VtZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblBhdXNlKCk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3Lm9uUGF1c2UoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgbUdMU3VyZmFjZVZpZXc7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvTWF0cml4UGFsZXR0ZVJlbmRlcmVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvTWF0cml4UGFsZXR0ZVJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlMmRiMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9NYXRyaXhQYWxldHRlUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOworaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7CisKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTA7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMTsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDExRXh0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMU3VyZmFjZVZpZXc7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVOworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMVXRpbHM7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKKworaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOworCitwdWJsaWMgY2xhc3MgTWF0cml4UGFsZXR0ZVJlbmRlcmVyIGltcGxlbWVudHMgR0xTdXJmYWNlVmlldy5SZW5kZXJlcnsKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBHcmlkIG1HcmlkOworICAgIHByaXZhdGUgaW50IG1UZXh0dXJlSUQ7CisKKyAgICAvKiogQSBncmlkIGlzIGEgdG9wb2xvZ2ljYWxseSByZWN0YW5ndWxhciBhcnJheSBvZiB2ZXJ0aWNlcy4KKyAgICAgKgorICAgICAqIFRoaXMgZ3JpZCBjbGFzcyBpcyBjdXN0b21pemVkIGZvciB0aGUgdmVydGV4IGRhdGEgcmVxdWlyZWQgZm9yIHRoaXMKKyAgICAgKiBleGFtcGxlLgorICAgICAqCisgICAgICogVGhlIHZlcnRleCBhbmQgaW5kZXggZGF0YSBhcmUgaGVsZCBpbiBWQk8gb2JqZWN0cyBiZWNhdXNlIG9uIG1vc3QKKyAgICAgKiBHUFVzIFZCTyBvYmplY3RzIGFyZSB0aGUgZmFzdGVzdCB3YXkgb2YgcmVuZGVyaW5nIHN0YXRpYyB2ZXJ0ZXgKKyAgICAgKiBhbmQgaW5kZXggZGF0YS4KKyAgICAgKgorICAgICAqLworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR3JpZCB7CisgICAgICAgIC8vIFNpemUgb2YgdmVydGV4IGRhdGEgZWxlbWVudHMgaW4gYnl0ZXM6CisgICAgICAgIGZpbmFsIHN0YXRpYyBpbnQgRkxPQVRfU0laRSA9IDQ7CisgICAgICAgIGZpbmFsIHN0YXRpYyBpbnQgQ0hBUl9TSVpFID0gMjsKKworICAgICAgICAvLyBWZXJ0ZXggc3RydWN0dXJlOgorICAgICAgICAvLyBmbG9hdCB4LCB5LCB6OworICAgICAgICAvLyBmbG9hdCB1LCB2OworICAgICAgICAvLyBmbG9hdCB3ZWlnaHQwLCB3ZWlnaHQxOworICAgICAgICAvLyBieXRlIHBhbGV0dGUwLCBwYWxldHRlMSwgcGFkMCwgcGFkMTsKKworICAgICAgICBmaW5hbCBzdGF0aWMgaW50IFZFUlRFWF9TSVpFID0gOCAqIEZMT0FUX1NJWkU7CisgICAgICAgIGZpbmFsIHN0YXRpYyBpbnQgVkVSVEVYX1RFWFRVUkVfQlVGRkVSX0lOREVYX09GRlNFVCA9IDM7CisgICAgICAgIGZpbmFsIHN0YXRpYyBpbnQgVkVSVEVYX1dFSUdIVF9CVUZGRVJfSU5ERVhfT0ZGU0VUID0gNTsKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBWRVJURVhfUEFMRVRURV9JTkRFWF9PRkZTRVQgPSA3ICogRkxPQVRfU0laRTsKKworICAgICAgICBwcml2YXRlIGludCBtVmVydGV4QnVmZmVyT2JqZWN0SWQ7CisgICAgICAgIHByaXZhdGUgaW50IG1FbGVtZW50QnVmZmVyT2JqZWN0SWQ7CisKKyAgICAgICAgLy8gVGhlc2UgYnVmZmVycyBhcmUgdXNlZCB0byBob2xkIHRoZSB2ZXJ0ZXggYW5kIGluZGV4IGRhdGEgd2hpbGUKKyAgICAgICAgLy8gY29uc3RydWN0aW5nIHRoZSBncmlkLiBPbmNlIGNyZWF0ZUJ1ZmZlck9iamVjdHMoKSBpcyBjYWxsZWQKKyAgICAgICAgLy8gdGhlIGJ1ZmZlcnMgYXJlIG51bGxlZCBvdXQgdG8gc2F2ZSBtZW1vcnkuCisKKyAgICAgICAgcHJpdmF0ZSBCeXRlQnVmZmVyIG1WZXJ0ZXhCeXRlQnVmZmVyOworICAgICAgICBwcml2YXRlIEZsb2F0QnVmZmVyIG1WZXJ0ZXhCdWZmZXI7CisgICAgICAgIHByaXZhdGUgQ2hhckJ1ZmZlciBtSW5kZXhCdWZmZXI7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVc7CisgICAgICAgIHByaXZhdGUgaW50IG1IOworICAgICAgICBwcml2YXRlIGludCBtSW5kZXhDb3VudDsKKworICAgICAgICBwdWJsaWMgR3JpZChpbnQgdywgaW50IGgpIHsKKyAgICAgICAgICAgIGlmICh3IDwgMCB8fCB3ID49IDY1NTM2KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGggPCAwIHx8IGggPj0gNjU1MzYpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJoIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodyAqIGggPj0gNjU1MzYpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ3ICogaCA+PSA2NTUzNiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtVyA9IHc7CisgICAgICAgICAgICBtSCA9IGg7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IHcgKiBoOworCisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoVkVSVEVYX1NJWkUgKiBzaXplKQorICAgICAgICAgICAgICAgIC5vcmRlcihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyID0gbVZlcnRleEJ5dGVCdWZmZXIuYXNGbG9hdEJ1ZmZlcigpOworCisgICAgICAgICAgICBpbnQgcXVhZFcgPSBtVyAtIDE7CisgICAgICAgICAgICBpbnQgcXVhZEggPSBtSCAtIDE7CisgICAgICAgICAgICBpbnQgcXVhZENvdW50ID0gcXVhZFcgKiBxdWFkSDsKKyAgICAgICAgICAgIGludCBpbmRleENvdW50ID0gcXVhZENvdW50ICogNjsKKyAgICAgICAgICAgIG1JbmRleENvdW50ID0gaW5kZXhDb3VudDsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoQ0hBUl9TSVpFICogaW5kZXhDb3VudCkKKyAgICAgICAgICAgICAgICAub3JkZXIoQnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCkpLmFzQ2hhckJ1ZmZlcigpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSW5pdGlhbGl6ZSB0cmlhbmdsZSBsaXN0IG1lc2guCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogICAgIFswXS0tLS0tWyAgMV0gLi4uCisgICAgICAgICAgICAgKiAgICAgIHwgICAgLyAgIHwKKyAgICAgICAgICAgICAqICAgICAgfCAgIC8gICAgfAorICAgICAgICAgICAgICogICAgICB8ICAvICAgICB8CisgICAgICAgICAgICAgKiAgICAgW3ddLS0tLS1bdysxXSAuLi4KKyAgICAgICAgICAgICAqICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBxdWFkSDsgeSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcXVhZFc7IHgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBhID0gKGNoYXIpICh5ICogbVcgKyB4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYiA9IChjaGFyKSAoeSAqIG1XICsgeCArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gKGNoYXIpICgoeSArIDEpICogbVcgKyB4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZCA9IChjaGFyKSAoKHkgKyAxKSAqIG1XICsgeCArIDEpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtSW5kZXhCdWZmZXIucHV0KGkrKywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtSW5kZXhCdWZmZXIucHV0KGkrKywgYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtSW5kZXhCdWZmZXIucHV0KGkrKywgYik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KGludCBpLCBpbnQgaiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICBmbG9hdCB1LCBmbG9hdCB2LAorICAgICAgICAgICAgICAgIGZsb2F0IHcwLCBmbG9hdCB3MSwKKyAgICAgICAgICAgICAgICBpbnQgcDAsIGludCBwMSkgeworICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbVcpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA8IDAgfHwgaiA+PSBtSCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImoiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHcwICsgdzEgIT0gMS4wZikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIldlaWdodHMgbXVzdCBhZGQgdXAgdG8gMS4wZiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgaW5kZXggPSBtVyAqIGogKyBpOworCisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnBvc2l0aW9uKGluZGV4ICogVkVSVEVYX1NJWkUgLyBGTE9BVF9TSVpFKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHgpOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wdXQoeSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh6KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHUpOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wdXQodik7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh3MCk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh3MSk7CisKKyAgICAgICAgICAgIG1WZXJ0ZXhCeXRlQnVmZmVyLnBvc2l0aW9uKGluZGV4ICogVkVSVEVYX1NJWkUgKyBWRVJURVhfUEFMRVRURV9JTkRFWF9PRkZTRVQpOworICAgICAgICAgICAgbVZlcnRleEJ5dGVCdWZmZXIucHV0KChieXRlKSBwMCk7CisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlci5wdXQoKGJ5dGUpIHAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUJ1ZmZlck9iamVjdHMoR0wgZ2wpIHsKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEgdGhlIHZlcnRleCBhbmQgZWxlbWVudCBidWZmZXIgSURzCisgICAgICAgICAgICBpbnRbXSB2Ym9JZHMgPSBuZXcgaW50WzJdOworICAgICAgICAgICAgR0wxMSBnbDExID0gKEdMMTEpIGdsOworICAgICAgICAgICAgZ2wxMS5nbEdlbkJ1ZmZlcnMoMiwgdmJvSWRzLCAwKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXJPYmplY3RJZCA9IHZib0lkc1swXTsKKyAgICAgICAgICAgIG1FbGVtZW50QnVmZmVyT2JqZWN0SWQgPSB2Ym9JZHNbMV07CisKKyAgICAgICAgICAgIC8vIFVwbG9hZCB0aGUgdmVydGV4IGRhdGEKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfQVJSQVlfQlVGRkVSLCBtVmVydGV4QnVmZmVyT2JqZWN0SWQpOworICAgICAgICAgICAgbVZlcnRleEJ5dGVCdWZmZXIucG9zaXRpb24oMCk7CisgICAgICAgICAgICBnbDExLmdsQnVmZmVyRGF0YShHTDExLkdMX0FSUkFZX0JVRkZFUiwgbVZlcnRleEJ5dGVCdWZmZXIuY2FwYWNpdHkoKSwgbVZlcnRleEJ5dGVCdWZmZXIsIEdMMTEuR0xfU1RBVElDX0RSQVcpOworCisgICAgICAgICAgICBnbDExLmdsQmluZEJ1ZmZlcihHTDExLkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtRWxlbWVudEJ1ZmZlck9iamVjdElkKTsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCdWZmZXJEYXRhKEdMMTEuR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1JbmRleEJ1ZmZlci5jYXBhY2l0eSgpICogQ0hBUl9TSVpFLCBtSW5kZXhCdWZmZXIsIEdMMTEuR0xfU1RBVElDX0RSQVcpOworCisgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBpbi1tZW1vcnkgZGF0YSBhbnkgbW9yZQorICAgICAgICAgICAgbVZlcnRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlciA9IG51bGw7CisgICAgICAgICAgICBtSW5kZXhCdWZmZXIgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZHJhdyhHTDEwIGdsKSB7CisgICAgICAgICAgICBHTDExIGdsMTEgPSAoR0wxMSkgZ2w7CisgICAgICAgICAgICBHTDExRXh0IGdsMTFFeHQgPSAoR0wxMUV4dCkgZ2w7CisKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9WRVJURVhfQVJSQVkpOworCisgICAgICAgICAgICBnbDExLmdsQmluZEJ1ZmZlcihHTDExLkdMX0FSUkFZX0JVRkZFUiwgbVZlcnRleEJ1ZmZlck9iamVjdElkKTsKKyAgICAgICAgICAgIGdsMTEuZ2xWZXJ0ZXhQb2ludGVyKDMsIEdMMTAuR0xfRkxPQVQsIFZFUlRFWF9TSVpFLCAwKTsKKyAgICAgICAgICAgIGdsMTEuZ2xUZXhDb29yZFBvaW50ZXIoMiwgR0wxMC5HTF9GTE9BVCwgVkVSVEVYX1NJWkUsIFZFUlRFWF9URVhUVVJFX0JVRkZFUl9JTkRFWF9PRkZTRVQgKiBGTE9BVF9TSVpFKTsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDExRXh0LkdMX01BVFJJWF9JTkRFWF9BUlJBWV9PRVMpOworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDExRXh0LkdMX1dFSUdIVF9BUlJBWV9PRVMpOworCisgICAgICAgICAgICBnbDExRXh0LmdsV2VpZ2h0UG9pbnRlck9FUygyLCBHTDEwLkdMX0ZMT0FULCBWRVJURVhfU0laRSwgVkVSVEVYX1dFSUdIVF9CVUZGRVJfSU5ERVhfT0ZGU0VUICAqIEZMT0FUX1NJWkUpOworICAgICAgICAgICAgZ2wxMUV4dC5nbE1hdHJpeEluZGV4UG9pbnRlck9FUygyLCBHTDEwLkdMX1VOU0lHTkVEX0JZVEUsIFZFUlRFWF9TSVpFLCBWRVJURVhfUEFMRVRURV9JTkRFWF9PRkZTRVQgKTsKKworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbUVsZW1lbnRCdWZmZXJPYmplY3RJZCk7CisgICAgICAgICAgICBnbDExLmdsRHJhd0VsZW1lbnRzKEdMMTAuR0xfVFJJQU5HTEVTLCBtSW5kZXhDb3VudCwgR0wxMC5HTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDExRXh0LkdMX01BVFJJWF9JTkRFWF9BUlJBWV9PRVMpOworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0wxMUV4dC5HTF9XRUlHSFRfQVJSQVlfT0VTKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfQVJSQVlfQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDApOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIE1hdHJpeFBhbGV0dGVSZW5kZXJlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNyZWF0ZWQoR0wxMCBnbCwgRUdMQ29uZmlnIGNvbmZpZykgeworICAgICAgICAvKgorICAgICAgICAgKiBCeSBkZWZhdWx0LCBPcGVuR0wgZW5hYmxlcyBmZWF0dXJlcyB0aGF0IGltcHJvdmUgcXVhbGl0eQorICAgICAgICAgKiBidXQgcmVkdWNlIHBlcmZvcm1hbmNlLiBPbmUgbWlnaHQgd2FudCB0byB0d2VhayB0aGF0CisgICAgICAgICAqIGVzcGVjaWFsbHkgb24gc29mdHdhcmUgcmVuZGVyZXIuCisgICAgICAgICAqLworICAgICAgICBnbC5nbERpc2FibGUoR0wxMC5HTF9ESVRIRVIpOworCisgICAgICAgIC8qCisgICAgICAgICAqIFNvbWUgb25lLXRpbWUgT3BlbkdMIGluaXRpYWxpemF0aW9uIGNhbiBiZSBtYWRlIGhlcmUKKyAgICAgICAgICogcHJvYmFibHkgYmFzZWQgb24gZmVhdHVyZXMgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQKKyAgICAgICAgICovCisgICAgICAgIGdsLmdsSGludChHTDEwLkdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX0ZBU1RFU1QpOworCisgICAgICAgIGdsLmdsQ2xlYXJDb2xvciguNWYsIC41ZiwgLjVmLCAxKTsKKyAgICAgICAgZ2wuZ2xTaGFkZU1vZGVsKEdMMTAuR0xfU01PT1RIKTsKKyAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMC5HTF9ERVBUSF9URVNUKTsKKyAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMC5HTF9URVhUVVJFXzJEKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDcmVhdGUgb3VyIHRleHR1cmUuIFRoaXMgaGFzIHRvIGJlIGRvbmUgZWFjaCB0aW1lIHRoZQorICAgICAgICAgKiBzdXJmYWNlIGlzIGNyZWF0ZWQuCisgICAgICAgICAqLworCisgICAgICAgIGludFtdIHRleHR1cmVzID0gbmV3IGludFsxXTsKKyAgICAgICAgZ2wuZ2xHZW5UZXh0dXJlcygxLCB0ZXh0dXJlcywgMCk7CisKKyAgICAgICAgbVRleHR1cmVJRCA9IHRleHR1cmVzWzBdOworICAgICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRV8yRCwgbVRleHR1cmVJRCk7CisKKyAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJmKEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX01JTl9GSUxURVIsCisgICAgICAgICAgICAgICAgR0wxMC5HTF9ORUFSRVNUKTsKKyAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJmKEdMMTAuR0xfVEVYVFVSRV8yRCwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX0xJTkVBUik7CisKKyAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJmKEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX1dSQVBfUywKKyAgICAgICAgICAgICAgICBHTDEwLkdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9ULAorICAgICAgICAgICAgICAgIEdMMTAuR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICAgICAgZ2wuZ2xUZXhFbnZmKEdMMTAuR0xfVEVYVFVSRV9FTlYsIEdMMTAuR0xfVEVYVFVSRV9FTlZfTU9ERSwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUExBQ0UpOworCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKKyAgICAgICAgICAgICAgICAub3BlblJhd1Jlc291cmNlKFIucmF3LnJvYm90KTsKKyAgICAgICAgQml0bWFwIGJpdG1hcDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIElnbm9yZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEdMVXRpbHMudGV4SW1hZ2UyRChHTDEwLkdMX1RFWFRVUkVfMkQsIDAsIGJpdG1hcCwgMCk7CisgICAgICAgIGJpdG1hcC5yZWN5Y2xlKCk7CisKKyAgICAgICAgbUdyaWQgPSBnZW5lcmF0ZVdlaWdodGVkR3JpZChnbCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25EcmF3RnJhbWUoR0wxMCBnbCkgeworICAgICAgICAvKgorICAgICAgICAgKiBCeSBkZWZhdWx0LCBPcGVuR0wgZW5hYmxlcyBmZWF0dXJlcyB0aGF0IGltcHJvdmUgcXVhbGl0eQorICAgICAgICAgKiBidXQgcmVkdWNlIHBlcmZvcm1hbmNlLiBPbmUgbWlnaHQgd2FudCB0byB0d2VhayB0aGF0CisgICAgICAgICAqIGVzcGVjaWFsbHkgb24gc29mdHdhcmUgcmVuZGVyZXIuCisgICAgICAgICAqLworICAgICAgICBnbC5nbERpc2FibGUoR0wxMC5HTF9ESVRIRVIpOworCisgICAgICAgIGdsLmdsVGV4RW52eChHTDEwLkdMX1RFWFRVUkVfRU5WLCBHTDEwLkdMX1RFWFRVUkVfRU5WX01PREUsCisgICAgICAgICAgICAgICAgR0wxMC5HTF9NT0RVTEFURSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVXN1YWxseSwgdGhlIGZpcnN0IHRoaW5nIG9uZSBtaWdodCB3YW50IHRvIGRvIGlzIHRvIGNsZWFyCisgICAgICAgICAqIHRoZSBzY3JlZW4uIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgb2YgZG9pbmcgdGhpcyBpcyB0byB1c2UKKyAgICAgICAgICogZ2xDbGVhcigpLgorICAgICAgICAgKi8KKworICAgICAgICBnbC5nbENsZWFyKEdMMTAuR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMMTAuR0xfREVQVEhfQlVGRkVSX0JJVCk7CisKKyAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMC5HTF9ERVBUSF9URVNUKTsKKworICAgICAgICBnbC5nbEVuYWJsZShHTDEwLkdMX0NVTExfRkFDRSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IHdlJ3JlIHJlYWR5IHRvIGRyYXcgc29tZSAzRCBvYmplY3RzCisgICAgICAgICAqLworCisgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX01PREVMVklFVyk7CisgICAgICAgIGdsLmdsTG9hZElkZW50aXR5KCk7CisKKyAgICAgICAgR0xVLmdsdUxvb2tBdChnbCwgMCwgMCwgLTUsIDBmLCAwZiwgMGYsIDBmLCAxLjBmLCAwLjBmKTsKKworICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDEwLkdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworCisgICAgICAgIGdsLmdsQWN0aXZlVGV4dHVyZShHTDEwLkdMX1RFWFRVUkUwKTsKKyAgICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTDEwLkdMX1RFWFRVUkVfMkQsIG1UZXh0dXJlSUQpOworICAgICAgICBnbC5nbFRleFBhcmFtZXRlcngoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9TLAorICAgICAgICAgICAgICAgIEdMMTAuR0xfUkVQRUFUKTsKKyAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJ4KEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX1dSQVBfVCwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUEVBVCk7CisKKyAgICAgICAgbG9uZyB0aW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkgJSA0MDAwTDsKKworICAgICAgICAvLyBSb2NrIGJhY2sgYW5kIGZvcnRoCisgICAgICAgIGRvdWJsZSBhbmltYXRpb25Vbml0ID0gKChkb3VibGUpIHRpbWUpIC8gNDAwMDsKKyAgICAgICAgZmxvYXQgdW5pdEFuZ2xlID0gKGZsb2F0KSBNYXRoLmNvcyhhbmltYXRpb25Vbml0ICogMiAqIE1hdGguUEkpOworICAgICAgICBmbG9hdCBhbmdsZSA9IHVuaXRBbmdsZSAqIDEzNWY7CisKKyAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMUV4dC5HTF9NQVRSSVhfUEFMRVRURV9PRVMpOworICAgICAgICBnbC5nbE1hdHJpeE1vZGUoR0wxMUV4dC5HTF9NQVRSSVhfUEFMRVRURV9PRVMpOworCisgICAgICAgIEdMMTFFeHQgZ2wxMUV4dCA9IChHTDExRXh0KSBnbDsKKworICAgICAgICAvLyBtYXRyaXggMDogbm8gdHJhbnNmb3JtYXRpb24KKyAgICAgICAgZ2wxMUV4dC5nbEN1cnJlbnRQYWxldHRlTWF0cml4T0VTKDApOworICAgICAgICBnbDExRXh0LmdsTG9hZFBhbGV0dGVGcm9tTW9kZWxWaWV3TWF0cml4T0VTKCk7CisKKworICAgICAgICAvLyBtYXRyaXggMTogcm90YXRlIGJ5ICJhbmdsZSIKKyAgICAgICAgZ2wuZ2xSb3RhdGVmKGFuZ2xlLCAwLCAwLCAxLjBmKTsKKworICAgICAgICBnbDExRXh0LmdsQ3VycmVudFBhbGV0dGVNYXRyaXhPRVMoMSk7CisgICAgICAgIGdsMTFFeHQuZ2xMb2FkUGFsZXR0ZUZyb21Nb2RlbFZpZXdNYXRyaXhPRVMoKTsKKworICAgICAgICBtR3JpZC5kcmF3KGdsKTsKKworICAgICAgICBnbC5nbERpc2FibGUoR0wxMUV4dC5HTF9NQVRSSVhfUEFMRVRURV9PRVMpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNoYW5nZWQoR0wxMCBnbCwgaW50IHcsIGludCBoKSB7CisgICAgICAgIGdsLmdsVmlld3BvcnQoMCwgMCwgdywgaCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgKiBTZXQgb3VyIHByb2plY3Rpb24gbWF0cml4LiBUaGlzIGRvZXNuJ3QgaGF2ZSB0byBiZSBkb25lCisgICAgICAgICogZWFjaCB0aW1lIHdlIGRyYXcsIGJ1dCB1c3VhbGx5IGEgbmV3IHByb2plY3Rpb24gbmVlZHMgdG8KKyAgICAgICAgKiBiZSBzZXQgd2hlbiB0aGUgdmlld3BvcnQgaXMgcmVzaXplZC4KKyAgICAgICAgKi8KKworICAgICAgICBmbG9hdCByYXRpbyA9IChmbG9hdCkgdyAvIGg7CisgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX1BST0pFQ1RJT04pOworICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOworICAgICAgICBnbC5nbEZydXN0dW1mKC1yYXRpbywgcmF0aW8sIC0xLCAxLCAzLCA3KTsKKyAgICB9CisKKyAgICBwcml2YXRlIEdyaWQgZ2VuZXJhdGVXZWlnaHRlZEdyaWQoR0wgZ2wpIHsKKyAgICAgICAgZmluYWwgaW50IHVTdGVwcyA9IDIwOworICAgICAgICBmaW5hbCBpbnQgdlN0ZXBzID0gMjA7CisKKyAgICAgICAgZmxvYXQgcmFkaXVzID0gMC4yNWY7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IDIuMGY7CisgICAgICAgIEdyaWQgZ3JpZCA9IG5ldyBHcmlkKHVTdGVwcyArIDEsIHZTdGVwcyArIDEpOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHZTdGVwczsgaisrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSB1U3RlcHM7IGkrKykgeworICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IE1hdGguUEkgKiAyICogaSAvIHVTdGVwczsKKyAgICAgICAgICAgICAgICBmbG9hdCB4ID0gcmFkaXVzICogKGZsb2F0KSBNYXRoLmNvcyhhbmdsZSk7CisgICAgICAgICAgICAgICAgZmxvYXQgeSA9IGhlaWdodCAqICgoZmxvYXQpIGogLyB2U3RlcHMgLSAwLjVmKTsKKyAgICAgICAgICAgICAgICBmbG9hdCB6ID0gcmFkaXVzICogKGZsb2F0KSBNYXRoLnNpbihhbmdsZSk7CisgICAgICAgICAgICAgICAgZmxvYXQgdSA9IC00LjBmICogKGZsb2F0KSBpIC8gdVN0ZXBzOworICAgICAgICAgICAgICAgIGZsb2F0IHYgPSAtNC4wZiAqIChmbG9hdCkgaiAvIHZTdGVwczsKKyAgICAgICAgICAgICAgICBmbG9hdCB3MCA9IChmbG9hdCkgaiAvIHZTdGVwczsKKyAgICAgICAgICAgICAgICBmbG9hdCB3MSA9IDEuMGYgLSB3MDsKKyAgICAgICAgICAgICAgICBncmlkLnNldChpLCBqLCB4LCB5LCB6LCB1LCB2LCB3MCwgdzEsIDAsIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZ3JpZC5jcmVhdGVCdWZmZXJPYmplY3RzKGdsKTsKKyAgICAgICAgcmV0dXJuIGdyaWQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1BpY3R1cmVMYXlvdXQuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9QaWN0dXJlTGF5b3V0LmphdmEKaW5kZXggOWJkYjQ5YS4uY2ZhM2MyOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1BpY3R1cmVMYXlvdXQuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvUGljdHVyZUxheW91dC5qYXZhCkBAIC03Niw3ICs3Niw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgTGF5b3V0UGFyYW1zIGdlbmVyYXRlRGVmYXVsdExheW91dFBhcmFtcygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULCBMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpOworICAgICAgICByZXR1cm4gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9TdGF0aWNUcmlhbmdsZVJlbmRlcmVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvU3RhdGljVHJpYW5nbGVSZW5kZXJlci5qYXZhCmluZGV4IGM0OTJlM2YuLjdlZjA4NDEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9TdGF0aWNUcmlhbmdsZVJlbmRlcmVyLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1N0YXRpY1RyaWFuZ2xlUmVuZGVyZXIuamF2YQpAQCAtNTAsOSArNTAsMjUgQEAKICAqLwogcHVibGljIGNsYXNzIFN0YXRpY1RyaWFuZ2xlUmVuZGVyZXIgaW1wbGVtZW50cyBHTFN1cmZhY2VWaWV3LlJlbmRlcmVyewogCisgICAgcHVibGljIGludGVyZmFjZSBUZXh0dXJlTG9hZGVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExvYWQgYSB0ZXh0dXJlIGludG8gdGhlIGN1cnJlbnRseSBib3VuZCBPcGVuR0wgdGV4dHVyZS4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgbG9hZChHTDEwIGdsKTsKKyAgICB9CisKICAgICBwdWJsaWMgU3RhdGljVHJpYW5nbGVSZW5kZXJlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgaW5pdChjb250ZXh0LCBuZXcgUm9ib3RUZXh0dXJlTG9hZGVyKCkpOworICAgIH0KKworICAgIHB1YmxpYyBTdGF0aWNUcmlhbmdsZVJlbmRlcmVyKENvbnRleHQgY29udGV4dCwgVGV4dHVyZUxvYWRlciBsb2FkZXIpIHsKKyAgICAgICAgaW5pdChjb250ZXh0LCBsb2FkZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBpbml0KENvbnRleHQgY29udGV4dCwgVGV4dHVyZUxvYWRlciBsb2FkZXIpIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtVHJpYW5nbGUgPSBuZXcgVHJpYW5nbGUoKTsKKyAgICAgICAgbVRleHR1cmVMb2FkZXIgPSBsb2FkZXI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRlZChHTDEwIGdsLCBFR0xDb25maWcgY29uZmlnKSB7CkBAIC05OSwyMiArMTE1LDcgQEAKIAogICAgICAgICBnbFRleEVudmYoR0xfVEVYVFVSRV9FTlYsIEdMX1RFWFRVUkVfRU5WX01PREUsCiAgICAgICAgICAgICAgICAgR0xfUkVQTEFDRSk7Ci0KLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKQotICAgICAgICAgICAgICAgIC5vcGVuUmF3UmVzb3VyY2UoUi5kcmF3YWJsZS5yb2JvdCk7Ci0gICAgICAgIEJpdG1hcCBiaXRtYXA7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBiaXRtYXAgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpcyk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJZ25vcmUuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHTFV0aWxzLnRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgYml0bWFwLCAwKTsKLSAgICAgICAgYml0bWFwLnJlY3ljbGUoKTsKKyAgICAgICAgbVRleHR1cmVMb2FkZXIubG9hZChnbCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25EcmF3RnJhbWUoR0wxMCBnbCkgewpAQCAtMTgxLDYgKzE4MiwyNyBAQAogICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIFRyaWFuZ2xlIG1UcmlhbmdsZTsKICAgICBwcml2YXRlIGludCBtVGV4dHVyZUlEOworICAgIHByaXZhdGUgVGV4dHVyZUxvYWRlciBtVGV4dHVyZUxvYWRlcjsKKworICAgIHByaXZhdGUgY2xhc3MgUm9ib3RUZXh0dXJlTG9hZGVyIGltcGxlbWVudHMgVGV4dHVyZUxvYWRlciB7CisgICAgICAgIHB1YmxpYyB2b2lkIGxvYWQoR0wxMCBnbCkgeworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5vcGVuUmF3UmVzb3VyY2UoCisgICAgICAgICAgICAgICAgICAgIFIucmF3LnJvYm90KTsKKyAgICAgICAgICAgIEJpdG1hcCBiaXRtYXA7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZS4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMVXRpbHMudGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBiaXRtYXAsIDApOworICAgICAgICAgICAgYml0bWFwLnJlY3ljbGUoKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHN0YXRpYyBjbGFzcyBUcmlhbmdsZSB7CiAgICAgICAgIHB1YmxpYyBUcmlhbmdsZSgpIHsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9UcmlhbmdsZVJlbmRlcmVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvVHJpYW5nbGVSZW5kZXJlci5qYXZhCmluZGV4IGU1Mjk5YjMuLmVkZTZlZjUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9UcmlhbmdsZVJlbmRlcmVyLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1RyaWFuZ2xlUmVuZGVyZXIuamF2YQpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgICAgIEdMMTAuR0xfUkVQTEFDRSk7CiAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKQotICAgICAgICAgICAgICAgIC5vcGVuUmF3UmVzb3VyY2UoUi5kcmF3YWJsZS5yb2JvdCk7CisgICAgICAgICAgICAgICAgLm9wZW5SYXdSZXNvdXJjZShSLnJhdy5yb2JvdCk7CiAgICAgICAgIEJpdG1hcCBiaXRtYXA7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBiaXRtYXAgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpcyk7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9MYWJlbE1ha2VyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9MYWJlbE1ha2VyLmphdmEKaW5kZXggNGJmODdmNy4uNjQ4MTM5NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL3Nwcml0ZXRleHQvTGFiZWxNYWtlci5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9zcHJpdGV0ZXh0L0xhYmVsTWFrZXIuamF2YQpAQCAtMzUxLDE3ICszNTEsMTIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkcmF3KEdMMTAgZ2wsIGZsb2F0IHgsIGZsb2F0IHksIGludCBsYWJlbElEKSB7CiAgICAgICAgIGNoZWNrU3RhdGUoU1RBVEVfRFJBV0lORywgU1RBVEVfRFJBV0lORyk7Ci0gICAgICAgIGdsLmdsUHVzaE1hdHJpeCgpOwotICAgICAgICBmbG9hdCBzbmFwcGVkWCA9IChmbG9hdCkgTWF0aC5mbG9vcih4KTsKLSAgICAgICAgZmxvYXQgc25hcHBlZFkgPSAoZmxvYXQpIE1hdGguZmxvb3IoeSk7Ci0gICAgICAgIGdsLmdsVHJhbnNsYXRlZihzbmFwcGVkWCwgc25hcHBlZFksIDAuMGYpOwogICAgICAgICBMYWJlbCBsYWJlbCA9IG1MYWJlbHMuZ2V0KGxhYmVsSUQpOwogICAgICAgICBnbC5nbEVuYWJsZShHTDEwLkdMX1RFWFRVUkVfMkQpOwogICAgICAgICAoKEdMMTEpZ2wpLmdsVGV4UGFyYW1ldGVyaXYoR0wxMC5HTF9URVhUVVJFXzJELAogICAgICAgICAgICAgICAgIEdMMTFFeHQuR0xfVEVYVFVSRV9DUk9QX1JFQ1RfT0VTLCBsYWJlbC5tQ3JvcCwgMCk7Ci0gICAgICAgICgoR0wxMUV4dClnbCkuZ2xEcmF3VGV4aU9FUygoaW50KSBzbmFwcGVkWCwgKGludCkgc25hcHBlZFksIDAsCisgICAgICAgICgoR0wxMUV4dClnbCkuZ2xEcmF3VGV4aU9FUygoaW50KSB4LCAoaW50KSB5LCAwLAogICAgICAgICAgICAgICAgIChpbnQpIGxhYmVsLndpZHRoLCAoaW50KSBsYWJlbC5oZWlnaHQpOwotICAgICAgICBnbC5nbFBvcE1hdHJpeCgpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL3Nwcml0ZXRleHQvU3ByaXRlVGV4dFJlbmRlcmVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9TcHJpdGVUZXh0UmVuZGVyZXIuamF2YQppbmRleCAyMjMzMDBhLi5lMDFkNmVmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9TcHJpdGVUZXh0UmVuZGVyZXIuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9TcHJpdGVUZXh0UmVuZGVyZXIuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMVTsKIGltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFV0aWxzOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwogCkBAIC05Niw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgR0wxMC5HTF9SRVBMQUNFKTsKIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpCi0gICAgICAgICAgICAgICAgLm9wZW5SYXdSZXNvdXJjZShSLmRyYXdhYmxlLnJvYm90KTsKKyAgICAgICAgICAgICAgICAub3BlblJhd1Jlc291cmNlKFIucmF3LnJvYm90KTsKICAgICAgICAgQml0bWFwIGJpdG1hcDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKQEAgLTE3Miw2ICsxNzMsMTUgQEAKICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJ4KEdMMTAuR0xfVEVYVFVSRV8yRCwgR0wxMC5HTF9URVhUVVJFX1dSQVBfVCwKICAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUEVBVCk7CiAKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIGlmIChtTGFzdFRpbWUgIT0gMCkgeworICAgICAgICAgICAgICAgIGxvbmcgZGVsdGEgPSB0aW1lIC0gbUxhc3RUaW1lOworICAgICAgICAgICAgICAgIExvZy53KCJ0aW1lIiwgTG9uZy50b1N0cmluZyhkZWx0YSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUxhc3RUaW1lID0gdGltZTsKKyAgICAgICAgfQorCiAgICAgICAgIGxvbmcgdGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpICUgNDAwMEw7CiAgICAgICAgIGZsb2F0IGFuZ2xlID0gMC4wOTBmICogKChpbnQpIHRpbWUpOwogCkBAIC0yNjYsNiArMjc2LDcgQEAKICAgICBwcml2YXRlIFByb2plY3RvciBtUHJvamVjdG9yOwogICAgIHByaXZhdGUgTnVtZXJpY1Nwcml0ZSBtTnVtZXJpY1Nwcml0ZTsKICAgICBwcml2YXRlIGZsb2F0W10gbVNjcmF0Y2ggPSBuZXcgZmxvYXRbOF07CisgICAgcHJpdmF0ZSBsb25nIG1MYXN0VGltZTsKIH0KIAogY2xhc3MgVHJpYW5nbGUgewpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvRXhwYW5kYWJsZUxpc3QxLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9FeHBhbmRhYmxlTGlzdDEuamF2YQppbmRleCA5NDRkYjY0Li5iZGEzNjZiIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9FeHBhbmRhYmxlTGlzdDEuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9FeHBhbmRhYmxlTGlzdDEuamF2YQpAQCAtMjQsNyArMjQsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtczsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BYnNMaXN0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5CYXNlRXhwYW5kYWJsZUxpc3RBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkV4cGFuZGFibGVMaXN0QWRhcHRlcjsKQEAgLTExMiw3ICsxMTEsNyBAQAogICAgICAgICBwdWJsaWMgVGV4dFZpZXcgZ2V0R2VuZXJpY1ZpZXcoKSB7CiAgICAgICAgICAgICAvLyBMYXlvdXQgcGFyYW1ldGVycyBmb3IgdGhlIEV4cGFuZGFibGVMaXN0VmlldwogICAgICAgICAgICAgQWJzTGlzdFZpZXcuTGF5b3V0UGFyYW1zIGxwID0gbmV3IEFic0xpc3RWaWV3LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgNjQpOworICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgNjQpOwogCiAgICAgICAgICAgICBUZXh0VmlldyB0ZXh0VmlldyA9IG5ldyBUZXh0VmlldyhFeHBhbmRhYmxlTGlzdDEudGhpcyk7CiAgICAgICAgICAgICB0ZXh0Vmlldy5zZXRMYXlvdXRQYXJhbXMobHApOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW1hZ2VTd2l0Y2hlcjEuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ltYWdlU3dpdGNoZXIxLmphdmEKaW5kZXggZjcyYjYyMy4uNjZlZjI4MiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW1hZ2VTd2l0Y2hlcjEuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbWFnZVN3aXRjaGVyMS5qYXZhCkBAIC02Nyw4ICs2Nyw4IEBACiAgICAgICAgIEltYWdlVmlldyBpID0gbmV3IEltYWdlVmlldyh0aGlzKTsKICAgICAgICAgaS5zZXRCYWNrZ3JvdW5kQ29sb3IoMHhGRjAwMDAwMCk7CiAgICAgICAgIGkuc2V0U2NhbGVUeXBlKEltYWdlVmlldy5TY2FsZVR5cGUuRklUX0NFTlRFUik7Ci0gICAgICAgIGkuc2V0TGF5b3V0UGFyYW1zKG5ldyBJbWFnZVN3aXRjaGVyLkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCi0gICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKSk7CisgICAgICAgIGkuc2V0TGF5b3V0UGFyYW1zKG5ldyBJbWFnZVN3aXRjaGVyLkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAorICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpKTsKICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbnRlcm5hbFNlbGVjdGlvbkZvY3VzLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbnRlcm5hbFNlbGVjdGlvbkZvY3VzLmphdmEKaW5kZXggYTY2NGFiOS4uODc2YWY4ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW50ZXJuYWxTZWxlY3Rpb25Gb2N1cy5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ludGVybmFsU2VsZWN0aW9uRm9jdXMuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiAgICAgICAgIGZpbmFsIExpbmVhckxheW91dCBsYXlvdXQgPSBuZXcgTGluZWFyTGF5b3V0KHRoaXMpOwogICAgICAgICBsYXlvdXQuc2V0T3JpZW50YXRpb24oTGluZWFyTGF5b3V0LkhPUklaT05UQUwpOwogICAgICAgICBsYXlvdXQuc2V0TGF5b3V0UGFyYW1zKG5ldyBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCi0gICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCkpOworICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAorICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKSk7CiAKICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBwYXJhbXMgPSBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygwLAotICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIDEpOworICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCAxKTsKIAogICAgICAgICBmaW5hbCBJbnRlcm5hbFNlbGVjdGlvblZpZXcgbGVmdENvbHVtbiA9IG5ldyBJbnRlcm5hbFNlbGVjdGlvblZpZXcodGhpcywgNSwgImxlZnQgY29sdW1uIik7CiAgICAgICAgIGxlZnRDb2x1bW4uc2V0TGF5b3V0UGFyYW1zKHBhcmFtcyk7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbnRlcm5hbFNlbGVjdGlvblNjcm9sbC5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW50ZXJuYWxTZWxlY3Rpb25TY3JvbGwuamF2YQppbmRleCBmZTYwN2UyLi45ODdlYWVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbnRlcm5hbFNlbGVjdGlvblNjcm9sbC5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ludGVybmFsU2VsZWN0aW9uU2Nyb2xsLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgICAgICBTY3JvbGxWaWV3IHN2ID0gbmV3IFNjcm9sbFZpZXcodGhpcyk7CiAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgc3ZMcCA9IG5ldyBTY3JvbGxWaWV3LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAogICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKTsKIAogICAgICAgICBMaW5lYXJMYXlvdXQgbGwgPSBuZXcgTGluZWFyTGF5b3V0KHRoaXMpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBJbnRlcm5hbFNlbGVjdGlvblZpZXcgaXN2ID0gbmV3IEludGVybmFsU2VsZWN0aW9uVmlldyh0aGlzLCAxMCk7CiAgICAgICAgIGludCBzY3JlZW5IZWlnaHQgPSBnZXRXaW5kb3dNYW5hZ2VyKCkuZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRIZWlnaHQoKTsKICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBsbExwID0gbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKKyAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICAyICogc2NyZWVuSGVpZ2h0KTsgIC8vIDJ4IHNjcmVlbiBoZWlnaHQgdG8gZW5zdXJlIHNjcm9sbGluZwogICAgICAgICBpc3Yuc2V0TGF5b3V0UGFyYW1zKGxsTHApOwogICAgICAgICBsbC5hZGRWaWV3KGlzdik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaW5lYXJMYXlvdXQ3LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaW5lYXJMYXlvdXQ3LmphdmEKaW5kZXggMzJjNzg3Zi4uYTdlZGYyZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGluZWFyTGF5b3V0Ny5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpbmVhckxheW91dDcuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAKIC8qKgotICogRGVtb25zdHJhdGVzIHVzaW5nIGZpbGxfcGFyZW50IHdpdGhpbiBhIGxpbmVhciBsYXlvdXQgd2hvc2Ugc2l6ZSBpcyBub3QgZml4ZWQuCisgKiBEZW1vbnN0cmF0ZXMgdXNpbmcgbWF0Y2hfcGFyZW50IHdpdGhpbiBhIGxpbmVhciBsYXlvdXQgd2hvc2Ugc2l6ZSBpcyBub3QgZml4ZWQuCiAgKgogICovCiBwdWJsaWMgY2xhc3MgTGluZWFyTGF5b3V0NyBleHRlbmRzIEFjdGl2aXR5IHsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q0LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0NC5qYXZhCmluZGV4IDJiZDU4OWQuLmExNDBlNjAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q0LmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDQuamF2YQpAQCAtMzQ2LDEyICszNDYsMTIgQEAKICAgICAgICAgICAgIG1UaXRsZSA9IG5ldyBUZXh0Vmlldyhjb250ZXh0KTsKICAgICAgICAgICAgIG1UaXRsZS5zZXRUZXh0KHRpdGxlKTsKICAgICAgICAgICAgIGFkZFZpZXcobVRpdGxlLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKIAogICAgICAgICAgICAgbURpYWxvZ3VlID0gbmV3IFRleHRWaWV3KGNvbnRleHQpOwogICAgICAgICAgICAgbURpYWxvZ3VlLnNldFRleHQod29yZHMpOwogICAgICAgICAgICAgYWRkVmlldyhtRGlhbG9ndWUsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0Ni5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDYuamF2YQppbmRleCA5YmI1YjE0Li4yZDQ1MzZmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0Ni5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q2LmphdmEKQEAgLTM3NCwxMSArMzc0LDExIEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1UaXRsZSA9IG5ldyBUZXh0Vmlldyhjb250ZXh0KTsKICAgICAgICAgICAgIG1UaXRsZS5zZXRUZXh0KHRpdGxlKTsKLSAgICAgICAgICAgIGFkZFZpZXcobVRpdGxlLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKKyAgICAgICAgICAgIGFkZFZpZXcobVRpdGxlLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1EaWFsb2d1ZSA9IG5ldyBUZXh0Vmlldyhjb250ZXh0KTsKICAgICAgICAgICAgIG1EaWFsb2d1ZS5zZXRUZXh0KGRpYWxvZ3VlKTsKLSAgICAgICAgICAgIGFkZFZpZXcobURpYWxvZ3VlLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKKyAgICAgICAgICAgIGFkZFZpZXcobURpYWxvZ3VlLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1EaWFsb2d1ZS5zZXRWaXNpYmlsaXR5KGV4cGFuZGVkID8gVklTSUJMRSA6IEdPTkUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0Ny5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDcuamF2YQppbmRleCBkNDRlZDU2Li5lNzczZGI2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0Ny5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q3LmphdmEKQEAgLTE2LDE1ICsxNiwxMiBAQAogCiBwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy52aWV3OwogCi0vLyBOZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKLS8vIGNsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCiBpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CiAKLQogaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzLlBlb3BsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3Q7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcjsKQEAgLTM2LDQ2ICszMyw2OSBAQAogICogQSBsaXN0IHZpZXcgZXhhbXBsZSB3aGVyZSB0aGUgZGF0YSBjb21lcyBmcm9tIGEgY3Vyc29yLgogICovCiBwdWJsaWMgY2xhc3MgTGlzdDcgZXh0ZW5kcyBMaXN0QWN0aXZpdHkgaW1wbGVtZW50cyBPbkl0ZW1TZWxlY3RlZExpc3RlbmVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBQUk9KRUNUSU9OID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgUGVvcGxlLl9JRCwgUGVvcGxlLk5BTUUsIFBlb3BsZS5OVU1CRVIKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBQUk9KRUNUSU9OID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgIENvbnRhY3RzQ29udHJhY3QuQ29udGFjdHMuX0lELAorICAgICAgICAgICAgQ29udGFjdHNDb250cmFjdC5Db250YWN0cy5ESVNQTEFZX05BTUUsCisgICAgICAgICAgICBDb250YWN0c0NvbnRyYWN0LkNvbnRhY3RzLkhBU19QSE9ORV9OVU1CRVIsCisgICAgICAgICAgICBDb250YWN0c0NvbnRyYWN0LkNvbnRhY3RzLkxPT0tVUF9LRVkKICAgICB9OwogCisgICAgcHJpdmF0ZSBpbnQgbUlkQ29sdW1uSW5kZXg7CisgICAgcHJpdmF0ZSBpbnQgbUhhc1Bob25lQ29sdW1uSW5kZXg7CisKKyAgICBwcml2YXRlIFRleHRWaWV3IG1QaG9uZTsKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKwogICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5saXN0XzcpOworCiAgICAgICAgIG1QaG9uZSA9IChUZXh0VmlldykgZmluZFZpZXdCeUlkKFIuaWQucGhvbmUpOwogICAgICAgICBnZXRMaXN0VmlldygpLnNldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIodGhpcyk7CiAKICAgICAgICAgLy8gR2V0IGEgY3Vyc29yIHdpdGggYWxsIHBlb3BsZQotICAgICAgICBDdXJzb3IgYyA9IGdldENvbnRlbnRSZXNvbHZlcigpLnF1ZXJ5KFBlb3BsZS5DT05URU5UX1VSSSwgUFJPSkVDVElPTiwgbnVsbCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgIHN0YXJ0TWFuYWdpbmdDdXJzb3IoYyk7Ci0gICAgICAgIG1QaG9uZUNvbHVtbkluZGV4ID0gYy5nZXRDb2x1bW5JbmRleChQZW9wbGUuTlVNQkVSKTsKKyAgICAgICAgQ3Vyc29yIGMgPSBtYW5hZ2VkUXVlcnkoQ29udGFjdHNDb250cmFjdC5Db250YWN0cy5DT05URU5UX1VSSSwKKyAgICAgICAgICAgICAgICBQUk9KRUNUSU9OLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgbUlkQ29sdW1uSW5kZXggPSBjLmdldENvbHVtbkluZGV4KENvbnRhY3RzQ29udHJhY3QuQ29udGFjdHMuX0lEKTsKKyAgICAgICAgbUhhc1Bob25lQ29sdW1uSW5kZXggPSBjLmdldENvbHVtbkluZGV4KENvbnRhY3RzQ29udHJhY3QuQ29udGFjdHMuSEFTX1BIT05FX05VTUJFUik7CiAKICAgICAgICAgTGlzdEFkYXB0ZXIgYWRhcHRlciA9IG5ldyBTaW1wbGVDdXJzb3JBZGFwdGVyKHRoaXMsCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfbGlzdF9pdGVtXzEsIC8vIFVzZSBhIHRlbXBsYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZGlzcGxheXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0IHZpZXcKLSAgICAgICAgICAgICAgICBjLCAvLyBHaXZlIHRoZSBjdXJzb3IgdG8gdGhlIGxpc3QgYWRhdHBlcgotICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7UGVvcGxlLk5BTUV9LCAvLyBNYXAgdGhlIE5BTUUgY29sdW1uIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwZW9wbGUgZGF0YWJhc2UgdG8uLi4KLSAgICAgICAgICAgICAgICBuZXcgaW50W10ge2FuZHJvaWQuUi5pZC50ZXh0MX0pOyAvLyBUaGUgInRleHQxIiB2aWV3IGRlZmluZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFhNTCB0ZW1wbGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGRpc3BsYXlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCB2aWV3CisgICAgICAgICAgICAgICAgYywgLy8gR2l2ZSB0aGUgY3Vyc29yIHRvIHRoZSBsaXN0IGFkYXB0ZXIKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyBDb250YWN0c0NvbnRyYWN0LkNvbnRhY3RzLkRJU1BMQVlfTkFNRSB9LCAvLyBNYXAgdGhlIE5BTUUgY29sdW1uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlb3BsZSBkYXRhYmFzZSB0by4uLgorICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7IGFuZHJvaWQuUi5pZC50ZXh0MSB9KTsgLy8gVGhlICJ0ZXh0MSIgdmlldyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgWE1MIHRlbXBsYXRlCiAgICAgICAgIHNldExpc3RBZGFwdGVyKGFkYXB0ZXIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uSXRlbVNlbGVjdGVkKEFkYXB0ZXJWaWV3IHBhcmVudCwgVmlldyB2LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHsKLSAgICAgICAgICAgIEN1cnNvciBjID0gKEN1cnNvcikgcGFyZW50LmdldEl0ZW1BdFBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIG1QaG9uZS5zZXRUZXh0KGMuZ2V0U3RyaW5nKG1QaG9uZUNvbHVtbkluZGV4KSk7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3IgYyA9IChDdXJzb3IpIHBhcmVudC5nZXRJdGVtQXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgICAgICBpZiAoYy5nZXRJbnQobUhhc1Bob25lQ29sdW1uSW5kZXgpID4gMCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY29udGFjdElkID0gYy5nZXRMb25nKG1JZENvbHVtbkluZGV4KTsKKyAgICAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgcGhvbmVzID0gZ2V0Q29udGVudFJlc29sdmVyKCkucXVlcnkoCisgICAgICAgICAgICAgICAgICAgICAgICBDb250YWN0c0NvbnRyYWN0LkNvbW1vbkRhdGFLaW5kcy5QaG9uZS5DT05URU5UX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IENvbnRhY3RzQ29udHJhY3QuQ29tbW9uRGF0YUtpbmRzLlBob25lLk5VTUJFUiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFjdHNDb250cmFjdC5Db21tb25EYXRhS2luZHMuUGhvbmUuQ09OVEFDVF9JRCArICI9IiArIGNvbnRhY3RJZCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3RzQ29udHJhY3QuQ29tbW9uRGF0YUtpbmRzLlBob25lLklTX1NVUEVSX1BSSU1BUlkgKyAiIERFU0MiKTsKKworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHBob25lcy5tb3ZlVG9GaXJzdCgpOworICAgICAgICAgICAgICAgICAgICBtUGhvbmUuc2V0VGV4dChwaG9uZXMuZ2V0U3RyaW5nKDApKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBwaG9uZXMuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1QaG9uZS5zZXRUZXh0KFIuc3RyaW5nLmxpc3RfN19ub3RoaW5nKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbk5vdGhpbmdTZWxlY3RlZChBZGFwdGVyVmlldyBwYXJlbnQpIHsKICAgICAgICAgbVBob25lLnNldFRleHQoUi5zdHJpbmcubGlzdF83X25vdGhpbmcpOwotCiAgICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgbVBob25lQ29sdW1uSW5kZXg7Ci0gICAgcHJpdmF0ZSBUZXh0VmlldyBtUGhvbmU7CiB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9TY3JvbGxWaWV3Mi5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvU2Nyb2xsVmlldzIuamF2YQppbmRleCA4OWU0MDAzLi4xYWYzYzgxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9TY3JvbGxWaWV3Mi5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L1Njcm9sbFZpZXcyLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CkBAIC00MSw3ICs0MCw3IEBACiAgICAgICAgICAgICBUZXh0VmlldyB0ZXh0VmlldyA9IG5ldyBUZXh0Vmlldyh0aGlzKTsKICAgICAgICAgICAgIHRleHRWaWV3LnNldFRleHQoIlRleHQgVmlldyAiICsgaSk7CiAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIHAgPSBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UCiAgICAgICAgICAgICApOwogICAgICAgICAgICAgbGF5b3V0LmFkZFZpZXcodGV4dFZpZXcsIHApOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvU3Bpbm5lcjEuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L1NwaW5uZXIxLmphdmEKaW5kZXggYTM1YTkwOS4uYzViNGJkOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvU3Bpbm5lcjEuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9TcGlubmVyMS5qYXZhCkBAIC0yMiwxMiArMjIsMjAgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5TcGlubmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3Lk9uSXRlbVNlbGVjdGVkTGlzdGVuZXI7CiAKIAogcHVibGljIGNsYXNzIFNwaW5uZXIxIGV4dGVuZHMgQWN0aXZpdHkgewogCisgICAgdm9pZCBzaG93VG9hc3QoQ2hhclNlcXVlbmNlIG1zZykgeworICAgICAgICBUb2FzdC5tYWtlVGV4dCh0aGlzLCBtc2csIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgIH0KKyAgICAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CkBAIC0zOCwxMSArNDYsMzMgQEAKICAgICAgICAgICAgICAgICB0aGlzLCBSLmFycmF5LmNvbG9ycywgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfc3Bpbm5lcl9pdGVtKTsKICAgICAgICAgYWRhcHRlci5zZXREcm9wRG93blZpZXdSZXNvdXJjZShhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9zcGlubmVyX2Ryb3Bkb3duX2l0ZW0pOwogICAgICAgICBzMS5zZXRBZGFwdGVyKGFkYXB0ZXIpOworICAgICAgICBzMS5zZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKAorICAgICAgICAgICAgICAgIG5ldyBPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TZWxlY3RlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyVmlldzw/PiBwYXJlbnQsIFZpZXcgdmlldywgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9hc3QoIlNwaW5uZXIxOiBwb3NpdGlvbj0iICsgcG9zaXRpb24gKyAiIGlkPSIgKyBpZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGhpbmdTZWxlY3RlZChBZGFwdGVyVmlldzw/PiBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUb2FzdCgiU3Bpbm5lcjE6IHVuc2VsZWN0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIFNwaW5uZXIgczIgPSAoU3Bpbm5lcikgZmluZFZpZXdCeUlkKFIuaWQuc3Bpbm5lcjIpOwogICAgICAgICBhZGFwdGVyID0gQXJyYXlBZGFwdGVyLmNyZWF0ZUZyb21SZXNvdXJjZSh0aGlzLCBSLmFycmF5LnBsYW5ldHMsCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfc3Bpbm5lcl9pdGVtKTsKICAgICAgICAgYWRhcHRlci5zZXREcm9wRG93blZpZXdSZXNvdXJjZShhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9zcGlubmVyX2Ryb3Bkb3duX2l0ZW0pOwogICAgICAgICBzMi5zZXRBZGFwdGVyKGFkYXB0ZXIpOworICAgICAgICBzMi5zZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKAorICAgICAgICAgICAgICAgIG5ldyBPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TZWxlY3RlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyVmlldzw/PiBwYXJlbnQsIFZpZXcgdmlldywgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG93VG9hc3QoIlNwaW5uZXIyOiBwb3NpdGlvbj0iICsgcG9zaXRpb24gKyAiIGlkPSIgKyBpZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGhpbmdTZWxlY3RlZChBZGFwdGVyVmlldzw/PiBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUb2FzdCgiU3Bpbm5lcjI6IHVuc2VsZWN0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L19pbmRleC5odG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvX2luZGV4Lmh0bWwKaW5kZXggMTU2MTcyOS4uYTQ2MmJjMSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvX2luZGV4Lmh0bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvX2luZGV4Lmh0bWwKQEAgLTEzLDcgKzEzLDcgQEAKICAgPGRkPkRlbW9uc3RyYXRlcyBhIHNpbXBsZSBMaW5lYXJMYXlvdXQsIHdpdGggY2hpbGQgd2lkdGggc2V0IHRvIFdSQVBfQ09OVEVOVC4gPC9kZD4KIAogICA8ZHQ+PGEgaHJlZj0iTGluZWFyTGF5b3V0Mi5odG1sIj4yLiBWZXJ0aWNhbCAoRmlsbCBTY3JlZW4pPC9hPjwvZHQ+Ci0gIDxkZD5EZW1vbnN0cmF0ZXMgYSBzaW1wbGUgTGluZWFyTGF5b3V0LCB3aXRoIGNoaWxkIHdpZHRoIHNldCB0byBGSUxMX1BBUkVOVC48L2RkPgorICA8ZGQ+RGVtb25zdHJhdGVzIGEgc2ltcGxlIExpbmVhckxheW91dCwgd2l0aCBjaGlsZCB3aWR0aCBzZXQgdG8gTUFUQ0hfUEFSRU5ULjwvZGQ+CiAKICAgPGR0PjxhIGhyZWY9IkxpbmVhckxheW91dDMuaHRtbCI+My4gVmVydGljYWwgKFBhZGRlZCk8L2E+PC9kdD4KICAgPGRkPkRlbW9uc3RyYXRlcyBhIExpbmVhckxheW91dCB3aGVyZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGNhbiBleHBhbmQgdG8gZmlsbCBhbnkgcmVtYWluaW5nIHNjcmVlbiBzcGFjZSAod2VpZ2h0PTEpLiA8L2RkPgpAQCAtMjUsNyArMjUsNyBAQAogICA8ZGQ+RGVtb25zdHJhdGVzIG5lc3RlZCBsYXlvdXRzIHRvIGNyZWF0ZSBhIHVzZXIgZm9ybS48L2RkPgogCiAgIDxkdD48YSBocmVmPSJMaW5lYXJMYXlvdXQ2Lmh0bWwiPjYuIFVuaWZvcm0gU2l6ZTwvYT48L2R0PgotICA8ZGQ+TGluZWFyTGF5b3V0IHdoaWNoIHVzZXMgYSBjb21iaW5hdGlvbiBvZiB3cmFwX2NvbnRlbnQgb24gaXRzZWxmIGFuZCBmaWxsX3BhcmVudCBvbiBpdHMgY2hpbGRyZW4gdG8gZ2V0IGV2ZXJ5IGl0ZW0gdG8gYmUgdGhlIHNhbWUgd2lkdGguPC9kZD4KKyAgPGRkPkxpbmVhckxheW91dCB3aGljaCB1c2VzIGEgY29tYmluYXRpb24gb2Ygd3JhcF9jb250ZW50IG9uIGl0c2VsZiBhbmQgbWF0Y2hfcGFyZW50IG9uIGl0cyBjaGlsZHJlbiB0byBnZXQgZXZlcnkgaXRlbSB0byBiZSB0aGUgc2FtZSB3aWR0aC48L2RkPgogCiAgIDxkdD48YSBocmVmPSJMaW5lYXJMYXlvdXQ3Lmh0bWwiPjcuIEZpbGwgUGFyZW50PC9hPjwvZHQ+CiAgIDxkZD5EZW1vbnN0cmF0ZXMgYSBob3Jpem9udGFsIGxpbmVhciBsYXlvdXQgd2l0aCBlcXVhbGx5IHNpemVkIGNvbHVtbnMuIFNvbWUgY29sdW1ucyBmb3JjZSB0aGVpciBoZWlnaHQgdG8gbWF0Y2ggdGhlIHBhcmVudC48L2RkPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvY3VzdG9tX3RpdGxlLnhtbCBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZS54bWwKaW5kZXggNmI3ZGNhNS4uNTdlYjZiNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvY3VzdG9tX3RpdGxlLnhtbAorKysgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sCkBAIC0xNCw4ICsxNCw4IEBACiAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCiAgID4KICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGVfbGVmdF90ZXh0IgpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgogICAgICAgc3R5bGU9Ij9hbmRyb2lkOmF0dHIvd2luZG93VGl0bGVTdHlsZSIKICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgLz4KICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90aXRsZV9yaWdodF90ZXh0IgpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iI2ZmZiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiAKICAgICAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvZGV2aWNlX2xpc3QueG1sIGIvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvZGV2aWNlX2xpc3QueG1sCmluZGV4IGU3Yjg0YjkuLjM5NTY5NWYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2RldmljZV9saXN0LnhtbAorKysgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9kZXZpY2VfbGlzdC54bWwKQEAgLTE1LDExICsxNSwxMSBAQAogLS0+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgID4KICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90aXRsZV9wYWlyZWRfZGV2aWNlcyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RpdGxlX3BhaXJlZF9kZXZpY2VzIgogICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCkBAIC0yOCwxMyArMjgsMTMgQEAKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iNWRwIgogICAgIC8+CiAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcGFpcmVkX2RldmljZXMiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6c3RhY2tGcm9tQm90dG9tPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgLz4KICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90aXRsZV9uZXdfZGV2aWNlcyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RpdGxlX290aGVyX2RldmljZXMiCiAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKQEAgLTQzLDEzICs0MywxMyBAQAogICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI1ZHAiCiAgICAgLz4KICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9uZXdfZGV2aWNlcyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpzdGFja0Zyb21Cb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMiIKICAgICAvPgogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9idXR0b25fc2NhbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2J1dHRvbl9zY2FuIgogICAgIC8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9kZXZpY2VfbmFtZS54bWwgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9kZXZpY2VfbmFtZS54bWwKaW5kZXggYzY5M2YzYS4uOGZhMzU4YyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvZGV2aWNlX25hbWUueG1sCisrKyBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2RldmljZV9uYW1lLnhtbApAQCAtMTQsNyArMTQsNyBAQAogICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC0tPgogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOnRleHRTaXplPSIxOHNwIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iNWRwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvbWFpbi54bWwgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tYWluLnhtbAppbmRleCAzMDdmNWE1Li4xNzAyNWY2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tYWluLnhtbAorKysgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tYWluLnhtbApAQCAtMTYsMTkgKzE2LDE5IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgPgogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2luIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnN0YWNrRnJvbUJvdHRvbT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDp0cmFuc2NyaXB0TW9kZT0iYWx3YXlzU2Nyb2xsIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgLz4KICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgID4KICAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdF90ZXh0X291dCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L21lc3NhZ2UueG1sIGIvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvbWVzc2FnZS54bWwKaW5kZXggYzY5M2YzYS4uOGZhMzU4YyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvbWVzc2FnZS54bWwKKysrIGIvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvbWVzc2FnZS54bWwKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAtLT4KIDxUZXh0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMThzcCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjVkcCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggYWU2YjVkYi4uZDkyNjcyOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTI0LDExICsyNCwxMiBAQAogICAgIDx1c2VzLXNkayBhbmRyb2lkOm1pblNka1ZlcnNpb249IjMiIC8+CiAKICAgICA8YXBwbGljYXRpb24gYW5kcm9pZDppY29uPSJAZHJhd2FibGUvc2FtcGxlX2Jyb3dzZXJfcGx1Z2luIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvc2FtcGxlX2Jyb3dzZXJfcGx1Z2luIj4KLSAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSJTYW1wbGVQbHVnaW4iPgorICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3NhbXBsZV9icm93c2VyX3BsdWdpbiI+CisgICAgICAgIDxzZXJ2aWNlIGFuZHJvaWQ6bmFtZT0iLlNhbXBsZVBsdWdpbiI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC53ZWJraXQuUExVR0lOIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgPG1ldGEtZGF0YSBhbmRyb2lkOm5hbWU9InR5cGUiIGFuZHJvaWQ6dmFsdWU9Im5hdGl2ZSIgLz4KICAgICAgICAgPC9zZXJ2aWNlPgogICAgIDwvYXBwbGljYXRpb24+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9SRUFETUUgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vUkVBRE1FCmluZGV4IDA4YjA0YTUuLjI5Nzk3YjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9SRUFETUUKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL1JFQURNRQpAQCAtNTcsMTAgKzU3LDE0IEBACiAgICAgICAgICAgICBzaGFyZWQgbGlicmFyaWVzIHRvIGluY2x1ZGUuCiAKIEFuZHJvaWRNYW5pZmVzdC54bWw6IHNpbWlsYXIgdG8gYSBzdGFuZGFyZCBhbmRyb2lkIG1hbmlmZXN0IGZpbGUsIGV4Y2VwdCB0aGF0IGl0Ci0gICAgICAgICAgICAgICAgICAgICBtdXN0IGNvbnRhaW4gdGhlICJ1c2VzLXBlcm1pc3Npb24iIGFuZCAiaW50ZW50LWZpbHRlciIKLSAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHRoYXQgYXJlIHBsdWdpbiBzcGVjaWZpYy4KKyAgICAgICAgICAgICAgICAgICAgIG11c3QgY29udGFpbiB0aGUgInVzZXMtcGVybWlzc2lvbiIgYW5kICJzZXJ2aWNlIgorICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgdGhhdCBhcmUgcGx1Z2luIHNwZWNpZmljLiBUaGUgInNlcnZpY2UiIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHN1Yi1lbGVtZW50cyB0aGF0IGRlc2NyaWJlIHRoZSBqYXZhIGNvbXBvbmVudCBvZgorICAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2UuCiAKLXNyYy8qOiBsb2NhdGlvbiBvZiB0aGUgamF2YSBmaWxlcyB3aGljaCBpbiBvdXIgY2FzZSBpcyBqdXN0IGFuIGVtcHR5IHNlcnZpY2UKK3NyYy8qOiBsb2NhdGlvbiBvZiB0aGUgamF2YSBzb3VyY2UgZmlsZXMuICBUaGlzIGNvbnRhaW5zIHRoZSBTYW1wbGVQbHVnaW4uY2xhc3MKKyAgICAgICB3aGljaCBpcyB0aGUgamF2YSBjb21wb25lbnQgb2Ygb3VyIHBsdWdpbi4gIFRoZSBjb21wb25lbnQgbXVzdCBleGlzdCBhbmQKKyAgICAgICBpbXBsZW1lbnQgdGhlIHJlcXVpcmVkIGludGVyZmFjZXMsIHRob3VnaCBzaW1wbHkgcmV0dXJuaW5nIG51bGwgaXMgdmFsaWQuCiAKIHJlcy8qOiBsb2NhdGlvbiBvZiB0aGUgc3RhdGljIHJlc291cmNlcyAoZS5nLiBhbiBpY29uIGZvciB0aGUgcGx1Z2luKQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL0FuZHJvaWQubWsgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL0FuZHJvaWQubWsKaW5kZXggY2JkOGExNS4uZDQ0NGJiMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9BbmRyb2lkLm1rCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvQW5kcm9pZC5tawpAQCAtMzQsNyArMzQsOSBAQAogCWF1ZGlvL0F1ZGlvUGx1Z2luLmNwcCBcCiAJYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmNwcCBcCiAJZm9ybS9Gb3JtUGx1Z2luLmNwcCBcCisJbmF2aWdhdGlvbi9OYXZpZ2F0aW9uUGx1Z2luLmNwcCBcCiAJcGFpbnQvUGFpbnRQbHVnaW4uY3BwIFwKKwl2aWRlby9WaWRlb1BsdWdpbi5jcHAgXAogCWpuaS1icmlkZ2UuY3BwIFwKIAogTE9DQUxfQ19JTkNMVURFUyArPSBcCkBAIC00NCw3ICs0Niw5IEBACiAJJChMT0NBTF9QQVRIKS9hdWRpbyBcCiAJJChMT0NBTF9QQVRIKS9iYWNrZ3JvdW5kIFwKIAkkKExPQ0FMX1BBVEgpL2Zvcm0gXAorCSQoTE9DQUxfUEFUSCkvbmF2aWdhdGlvbiBcCiAJJChMT0NBTF9QQVRIKS9wYWludCBcCisJJChMT0NBTF9QQVRIKS92aWRlbyBcCiAJZXh0ZXJuYWwvd2Via2l0L1dlYkNvcmUvYnJpZGdlIFwKIAlleHRlcm5hbC93ZWJraXQvV2ViQ29yZS9wbHVnaW5zIFwKIAlleHRlcm5hbC93ZWJraXQvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0phdmFWTSBcCmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL1BsdWdpbk9iamVjdC5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL1BsdWdpbk9iamVjdC5jcHAKaW5kZXggODBmNWU3Yy4uZGQwZmJhYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9QbHVnaW5PYmplY3QuY3BwCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvUGx1Z2luT2JqZWN0LmNwcApAQCAtNiw3ICs2LDcgQEAKICByZWRpc3RyaWJ1dGUgdGhpcyBBcHBsZSBzb2Z0d2FyZS4KIAogIEluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHN1YmplY3QgdG8gdGhlc2UKLSB0ZXJtcywgQXBwbGUgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHVuZGVyIEFwcGxl1XMgY29weXJpZ2h0cyBpbgorIHRlcm1zLCBBcHBsZSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdW5kZXIgQXBwbGXDlXMgY29weXJpZ2h0cyBpbgogIHRoaXMgb3JpZ2luYWwgQXBwbGUgc29mdHdhcmUgKHRoZSAiQXBwbGUgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQKICByZWRpc3RyaWJ1dGUgdGhlIEFwcGxlIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKICBmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBBcHBsZSBTb2Z0d2FyZSBpbiBpdHMgZW50aXJldHkgYW5kIHdpdGhvdXQKQEAgLTM1LDYgKzM1LDQwIEBACiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgIlBsdWdpbk9iamVjdC5oIgogCitpbnQgU3ViUGx1Z2luOjpnZXRQbHVnaW5XaWR0aCgpIHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QqKSBpbnN0KCktPnBkYXRhOworICAgIHJldHVybiBvYmotPndpbmRvdy0+d2lkdGg7Cit9CisKK2ludCBTdWJQbHVnaW46OmdldFBsdWdpbkhlaWdodCgpIHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QqKSBpbnN0KCktPnBkYXRhOworICAgIHJldHVybiBvYmotPndpbmRvdy0+aGVpZ2h0OworfQorCitib29sIFN1cmZhY2VTdWJQbHVnaW46OnN1cHBvcnRzRHJhd2luZ01vZGVsKEFOUERyYXdpbmdNb2RlbCBtb2RlbCkgeworICAgIHJldHVybiAobW9kZWwgPT0ga1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsKTsKK30KKwordm9pZCBTdXJmYWNlU3ViUGx1Z2luOjpzZXRDb250ZXh0KGpvYmplY3QgY29udGV4dCkgeworICAgIEpOSUVudiogZW52ID0gTlVMTDsKKyAgICBpZiAoZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSA9PSBKTklfT0spIHsKKworICAgICAgICAvLyBpZiBvbmUgZXhpc3RzIHRoZW4gZnJlZSBpdHMgZ2xvYmFsIHJlZmVyZW5jZQorICAgICAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgICAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtX2NvbnRleHQpOworICAgICAgICAgICAgbV9jb250ZXh0ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBnbG9iYWwgcmVmCisgICAgICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0ID0gZW52LT5OZXdHbG9iYWxSZWYoY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBzZXQgdGhlIHZhbHVlCisgICAgICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCBwbHVnaW5JbnZhbGlkYXRlKE5QT2JqZWN0ICpvYmopOwogc3RhdGljIGJvb2wgcGx1Z2luSGFzUHJvcGVydHkoTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG5hbWUpOwogc3RhdGljIGJvb2wgcGx1Z2luSGFzTWV0aG9kKE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBuYW1lKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvUGx1Z2luT2JqZWN0LmggYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL1BsdWdpbk9iamVjdC5oCmluZGV4IDYxNDg2ZDUuLjBlYmVkMjggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvUGx1Z2luT2JqZWN0LmgKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9QbHVnaW5PYmplY3QuaApAQCAtNiw3ICs2LDcgQEAKICByZWRpc3RyaWJ1dGUgdGhpcyBBcHBsZSBzb2Z0d2FyZS4KIAogIEluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHN1YmplY3QgdG8gdGhlc2UKLSB0ZXJtcywgQXBwbGUgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHVuZGVyIEFwcGxl1XMgY29weXJpZ2h0cyBpbgorIHRlcm1zLCBBcHBsZSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdW5kZXIgQXBwbGXvv71zIGNvcHlyaWdodHMgaW4KICB0aGlzIG9yaWdpbmFsIEFwcGxlIHNvZnR3YXJlICh0aGUgIkFwcGxlIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kCiAgcmVkaXN0cmlidXRlIHRoZSBBcHBsZSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5CiAgZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgQXBwbGUgU29mdHdhcmUgaW4gaXRzIGVudGlyZXR5IGFuZCB3aXRob3V0CkBAIC0zNyw2ICszNywxMyBAQAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlIDxqbmkuaD4KIAorZW51bSBDdXN0b21FdmVudFR5cGVzIHsKKyAgICBrU3VyZmFjZUNyZWF0ZWRfQ3VzdG9tRXZlbnQgICAgID0gMCwKKyAgICBrU3VyZmFjZUNoYW5nZWRfQ3VzdG9tRXZlbnQgICAgID0gMSwKKyAgICBrU3VyZmFjZURlc3Ryb3llZF9DdXN0b21FdmVudCAgID0gMiwKK307Cit0eXBlZGVmIGludDMyX3QgQ3VzdG9tRXZlbnRUeXBlOworCiBjbGFzcyBTdWJQbHVnaW4gewogcHVibGljOgogICAgIFN1YlBsdWdpbihOUFAgaW5zdCkgOiBtX2luc3QoaW5zdCkge30KQEAgLTQ0LDYgKzUxLDkgQEAKICAgICB2aXJ0dWFsIGludDE2IGhhbmRsZUV2ZW50KGNvbnN0IEFOUEV2ZW50KiBldnQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEcmF3aW5nTW9kZWwoQU5QRHJhd2luZ01vZGVsKSA9IDA7CiAKKyAgICBpbnQgZ2V0UGx1Z2luV2lkdGgoKTsKKyAgICBpbnQgZ2V0UGx1Z2luSGVpZ2h0KCk7CisKICAgICBOUFAgaW5zdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdDsgfQogCiBwcml2YXRlOgpAQCAtNTIsMTIgKzYyLDE0IEBACiAKIGNsYXNzIFN1cmZhY2VTdWJQbHVnaW4gOiBwdWJsaWMgU3ViUGx1Z2luIHsKIHB1YmxpYzoKLSAgICBTdXJmYWNlU3ViUGx1Z2luKE5QUCBpbnN0KSA6IFN1YlBsdWdpbihpbnN0KSB7fQorICAgIFN1cmZhY2VTdWJQbHVnaW4oTlBQIGluc3QpIDogU3ViUGx1Z2luKGluc3QpIHsgbV9jb250ZXh0ID0gTlVMTDsgfQogICAgIHZpcnR1YWwgflN1cmZhY2VTdWJQbHVnaW4oKSB7fQotICAgIHZpcnR1YWwgYm9vbCBpc0ZpeGVkU3VyZmFjZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3VyZmFjZUNyZWF0ZWQoSk5JRW52Kiwgam9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlQ2hhbmdlZChpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3VyZmFjZURlc3Ryb3llZCgpID0gMDsKKyAgICB2aXJ0dWFsIGpvYmplY3QgZ2V0U3VyZmFjZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEcmF3aW5nTW9kZWwoQU5QRHJhd2luZ01vZGVsKTsKKworICAgIHZvaWQgc2V0Q29udGV4dChqb2JqZWN0IGNvbnRleHQpOworCisgICAgam9iamVjdCBtX2NvbnRleHQ7CiB9OwogCiBlbnVtIFBsdWdpblR5cGVzIHsKQEAgLTY3LDYgKzc5LDggQEAKICAgICBrRm9ybV9QbHVnaW5UeXBlICAgICAgID0gNCwKICAgICBrVGV4dF9QbHVnaW5UeXBlICAgICAgID0gNSwKICAgICBrUGFpbnRfUGx1Z2luVHlwZSAgICAgID0gNiwKKyAgICBrVmlkZW9fUGx1Z2luVHlwZSAgICAgID0gNywKKyAgICBrTmF2aWdhdGlvbl9QbHVnaW5UeXBlID0gOCwKIH07CiB0eXBlZGVmIHVpbnQzMl90IFBsdWdpblR5cGU7CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYW5pbWF0aW9uL0FuaW1hdGlvblBsdWdpbi5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2FuaW1hdGlvbi9BbmltYXRpb25QbHVnaW4uY3BwCmluZGV4IGI2MTc1YzEuLjcyYTExYzkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYW5pbWF0aW9uL0FuaW1hdGlvblBsdWdpbi5jcHAKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9hbmltYXRpb24vQW5pbWF0aW9uUGx1Z2luLmNwcApAQCAtODUsNyArODUsNyBAQAogICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrVG91Y2hfQU5QRXZlbnRGbGFnOwogICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKICAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2F1ZGlvL0F1ZGlvUGx1Z2luLmNwcCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYXVkaW8vQXVkaW9QbHVnaW4uY3BwCmluZGV4IDU4ZDM0MGMuLjk3MzFmMTkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYXVkaW8vQXVkaW9QbHVnaW4uY3BwCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYXVkaW8vQXVkaW9QbHVnaW4uY3BwCkBAIC05OSw3ICs5OSw3IEBACiAKICAgICAvLyBvcGVuIGEgZmlsZSBzdHJlYW0KICAgICBGSUxFKiBmID0gZm9wZW4ocGF0aCwgInIiKTsKLSAgICBnTG9nSS5sb2coaW5zdCwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0gcGF0aCAlcyBGSUxFICVwIiwgcGF0aCwgZik7CisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tIHBhdGggJXMgRklMRSAlcCIsIHBhdGgsIGYpOwogCiAgICAgLy8gc2V0dXAgb3VyIHByaXZhdGUgYXVkaW8gc3RydWN0J3MgZGVmYXVsdCB2YWx1ZXMKICAgICBtX3NvdW5kUGxheSA9IG5ldyBTb3VuZFBsYXk7CkBAIC0xMjMsMTMgKzEyMywxMyBAQAogICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0dXM7CiAKICAgICBpZihmaWxlRGVzY3JpcHRvciA8PSAwKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRXJyb3JfQU5QTG9nVHlwZSwgImZvcGVuIGVycm9yIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgImZvcGVuIGVycm9yIik7CiAgICAgfQogICAgIGVsc2UgaWYgKGZzdGF0KGZpbGVEZXNjcmlwdG9yLCAmZmlsZVN0YXR1cykgIT0gMCkgewotICAgICAgICBnTG9nSS5sb2coaW5zdCwga0RlYnVnX0FOUExvZ1R5cGUsICJGaWxlIFNpemU6ICVkIiwgZmlsZVN0YXR1cy5zdF9zaXplKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiRmlsZSBTaXplOiAlZCIsIGZpbGVTdGF0dXMuc3Rfc2l6ZSk7CiAgICAgICAgIG1fc291bmRQbGF5LT5maWxlU2l6ZSA9IGZpbGVTdGF0dXMuc3Rfc2l6ZTsKICAgICB9IGVsc2UgewotICAgICAgICBnTG9nSS5sb2coaW5zdCwga0Vycm9yX0FOUExvZ1R5cGUsICJmc3RhdCBlcnJvciIpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJmc3RhdCBlcnJvciIpOwogICAgIH0KIAogICAgIC8vIGNvbmZpZ3VyZSB0aGUgVUkgZWxlbWVudHMKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrVG91Y2hfQU5QRXZlbnRGbGFnOwogICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKICAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CiAgICAgfQogfQogCkBAIC0yMDMsMTAgKzIwMywxMCBAQAogfQogCiB2b2lkIEF1ZGlvUGx1Z2luOjpkcmF3KEFOUENhbnZhcyogY2FudmFzKSB7Ci0gICAgTlBQIGluc3RhbmNlID0gdGhpcy0+aW5zdCgpOwotICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3RhbmNlLT5wZGF0YTsKIAotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJEcmF3aW5nIik7CisgICAgUGx1Z2luT2JqZWN0ICpvYmogPSAoUGx1Z2luT2JqZWN0KikgdGhpcy0+aW5zdCgpLT5wZGF0YTsKKworICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkRyYXdpbmciKTsKIAogICAgIGNvbnN0IGZsb2F0IHRyYWNrSGVpZ2h0ID0gMzA7CiAgICAgY29uc3QgZmxvYXQgYnV0dG9uV2lkdGggPSA2MDsKQEAgLTMzMiw3ICszMzIsNyBAQAogCiAgICAgLy8gaWYgdGhlIHRyYWNrIGlzIG51bGwgdGhlbiByZXR1cm4KICAgICBpZiAoTlVMTCA9PSBtX3NvdW5kUGxheS0+dHJhY2spIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0gJXAgdW5hYmxlIHRvIGNyZWF0ZSB0cmFjayIsCisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0gJXAgdW5hYmxlIHRvIGNyZWF0ZSB0cmFjayIsCiAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDQsNyArMzQ0LDcgQEAKIAogICAgIGlmIChjdXJyZW50UmVjdCA9PSAmbV9wbGF5UmVjdCkgewogCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIHN0YXJ0aW5nIHRyYWNrICglZCkiLAorICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIHN0YXJ0aW5nIHRyYWNrICglZCkiLAogICAgICAgICAgICAgICAgICAgbV9zb3VuZFBsYXktPnRyYWNrLCBnU291bmRJLmlzU3RvcHBlZChtX3NvdW5kUGxheS0+dHJhY2spKTsKIAogICAgICAgICBpZiAoZ1NvdW5kSS5pc1N0b3BwZWQobV9zb3VuZFBsYXktPnRyYWNrKSkgewpAQCAtMzUzLDcgKzM1Myw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKGN1cnJlbnRSZWN0ID09ICZtX3BhdXNlUmVjdCkgewogCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIHBhdXNpbmcgdHJhY2sgKCVkKSIsCisgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgcGF1c2luZyB0cmFjayAoJWQpIiwKICAgICAgICAgICAgICAgICAgIG1fc291bmRQbGF5LT50cmFjaywgZ1NvdW5kSS5pc1N0b3BwZWQobV9zb3VuZFBsYXktPnRyYWNrKSk7CiAKICAgICAgICAgaWYgKCFnU291bmRJLmlzU3RvcHBlZChtX3NvdW5kUGxheS0+dHJhY2spKSB7CkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICB9CiAgICAgZWxzZSBpZiAoY3VycmVudFJlY3QgPT0gJm1fc3RvcFJlY3QpIHsKIAotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBzdG9wcGluZyB0cmFjayAoJWQpIiwKKyAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBzdG9wcGluZyB0cmFjayAoJWQpIiwKICAgICAgICAgICAgICAgICAgIG1fc291bmRQbGF5LT50cmFjaywgZ1NvdW5kSS5pc1N0b3BwZWQobV9zb3VuZFBsYXktPnRyYWNrKSk7CiAKICAgICAgICAgaWYgKCFnU291bmRJLmlzU3RvcHBlZChtX3NvdW5kUGxheS0+dHJhY2spKSB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2JhY2tncm91bmQvQmFja2dyb3VuZFBsdWdpbi5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2JhY2tncm91bmQvQmFja2dyb3VuZFBsdWdpbi5jcHAKaW5kZXggMmE2NWI0Zi4uNTc4ZmU2ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9iYWNrZ3JvdW5kL0JhY2tncm91bmRQbHVnaW4uY3BwCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmNwcApAQCAtMzgsNyArMzgsOSBAQAogZXh0ZXJuIEFOUExvZ0ludGVyZmFjZVYwICAgICAgIGdMb2dJOwogZXh0ZXJuIEFOUFBhaW50SW50ZXJmYWNlVjAgICAgIGdQYWludEk7CiBleHRlcm4gQU5QU3VyZmFjZUludGVyZmFjZVYwICAgZ1N1cmZhY2VJOworZXh0ZXJuIEFOUFN5c3RlbUludGVyZmFjZVYwICAgIGdTeXN0ZW1JOwogZXh0ZXJuIEFOUFR5cGVmYWNlSW50ZXJmYWNlVjAgIGdUeXBlZmFjZUk7CitleHRlcm4gQU5QV2luZG93SW50ZXJmYWNlVjAgICAgZ1dpbmRvd0k7CiAKICNkZWZpbmUgQVJSQVlfQ09VTlQoYXJyYXkpICAgICAgKHNpemVvZihhcnJheSkgLyBzaXplb2YoYXJyYXlbMF0pKQogCkBAIC01NCw3ICs1Niw2IEBACiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBkcmF3aW5nIHN1cmZhY2UKICAgICBtX3N1cmZhY2UgPSBOVUxMOwotICAgIG1fdm0gPSBOVUxMOwogCiAgICAgLy9pbml0aWFsaXplIGJpdG1hcCB0cmFuc3BhcmVuY3kgdmFyaWFibGVzCiAgICAgbUZpbmlzaGVkU3RhZ2VPbmUgICA9IGZhbHNlOwpAQCAtNjcsMzAgKzY4LDU3IEBACiAgICAgdGVzdF9iaXRtYXBzKCk7IC8vIGFuZHJvaWQgYml0bWFwcwogICAgIHRlc3RfZG9tQWNjZXNzKCk7CiAgICAgdGVzdF9qYXZhc2NyaXB0KCk7CisgICAgdGVzdF9sb2FkSmF2YUNsYXNzKCk7CisKKyAgICAvL3JlZ2lzdGVyIGZvciB0b3VjaCBldmVudHMKKyAgICBBTlBFdmVudEZsYWdzIGZsYWdzID0ga1RvdWNoX0FOUEV2ZW50RmxhZzsKKyAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3QsIGtBY2NlcHRFdmVudHNfQU5QU2V0VmFsdWUsICZmbGFncyk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZWxlY3RpbmcgaW5wdXQgZXZlbnRzLiIpOworICAgIH0KIH0KIAotQmFja2dyb3VuZFBsdWdpbjo6fkJhY2tncm91bmRQbHVnaW4oKSB7IH0KLQotYm9vbCBCYWNrZ3JvdW5kUGx1Z2luOjpzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwgbW9kZWwpIHsKLSAgICByZXR1cm4gKG1vZGVsID09IGtTdXJmYWNlX0FOUERyYXdpbmdNb2RlbCk7CitCYWNrZ3JvdW5kUGx1Z2luOjp+QmFja2dyb3VuZFBsdWdpbigpIHsKKyAgICBzZXRDb250ZXh0KE5VTEwpOworICAgIGRlc3Ryb3lTdXJmYWNlKCk7CiB9CiAKLWJvb2wgQmFja2dyb3VuZFBsdWdpbjo6aXNGaXhlZFN1cmZhY2UoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQoram9iamVjdCBCYWNrZ3JvdW5kUGx1Z2luOjpnZXRTdXJmYWNlKCkgewogCi12b2lkIEJhY2tncm91bmRQbHVnaW46OnN1cmZhY2VDcmVhdGVkKEpOSUVudiogZW52LCBqb2JqZWN0IHN1cmZhY2UpIHsKLSAgICBlbnYtPkdldEphdmFWTSgmbV92bSk7Ci0gICAgbV9zdXJmYWNlID0gZW52LT5OZXdHbG9iYWxSZWYoc3VyZmFjZSk7Ci19CisgICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KIAotdm9pZCBCYWNrZ3JvdW5kUGx1Z2luOjpzdXJmYWNlQ2hhbmdlZChpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBkcmF3UGx1Z2luKHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEJhY2tncm91bmRQbHVnaW46OnN1cmZhY2VEZXN0cm95ZWQoKSB7CisgICAgLy8gbG9hZCB0aGUgYXBwcm9wcmlhdGUgamF2YSBjbGFzcyBhbmQgaW5zdGFudGlhdGUgaXQKICAgICBKTklFbnYqIGVudiA9IE5VTEw7Ci0gICAgaWYgKG1fc3VyZmFjZSAmJiBtX3ZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSA9PSBKTklfT0spIHsKKyAgICBpZiAoZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGdldCBlbnYiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gImNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbi5CYWNrZ3JvdW5kU3VyZmFjZSI7CisgICAgamNsYXNzIGJhY2tncm91bmRDbGFzcyA9IGdTeXN0ZW1JLmxvYWRKYXZhQ2xhc3MoaW5zdCgpLCBjbGFzc05hbWUpOworCisgICAgaWYoIWJhY2tncm91bmRDbGFzcykgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBnZXRTdXJmYWNlOiBmYWlsZWQgdG8gbG9hZCBjbGFzcyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBqbWV0aG9kSUQgY29uc3RydWN0b3IgPSBlbnYtPkdldE1ldGhvZElEKGJhY2tncm91bmRDbGFzcywgIjxpbml0PiIsICIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIik7CisgICAgam9iamVjdCBiYWNrZ3JvdW5kU3VyZmFjZSA9IGVudi0+TmV3T2JqZWN0KGJhY2tncm91bmRDbGFzcywgY29uc3RydWN0b3IsIG1fY29udGV4dCk7CisKKyAgICBpZighYmFja2dyb3VuZFN1cmZhY2UpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGNvbnN0cnVjdCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbV9zdXJmYWNlID0gZW52LT5OZXdHbG9iYWxSZWYoYmFja2dyb3VuZFN1cmZhY2UpOworICAgIHJldHVybiBtX3N1cmZhY2U7Cit9CisKK3ZvaWQgQmFja2dyb3VuZFBsdWdpbjo6ZGVzdHJveVN1cmZhY2UoKSB7CisgICAgSk5JRW52KiBlbnYgPSBOVUxMOworICAgIGlmIChtX3N1cmZhY2UgJiYgZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSA9PSBKTklfT0spIHsKICAgICAgICAgZW52LT5EZWxldGVHbG9iYWxSZWYobV9zdXJmYWNlKTsKICAgICAgICAgbV9zdXJmYWNlID0gTlVMTDsKICAgICB9CkBAIC0xMDksNyArMTM3LDcgQEAKIAogICAgIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgem9vbSBsZXZlbCBpcyB1bmlmb3JtCiAgICAgaWYgKHpvb21GYWN0b3JXICsgLjAxIDwgem9vbUZhY3RvckggJiYgem9vbUZhY3RvclcgLSAuMDEgPiB6b29tRmFjdG9ySCkKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHpvb20gaXMgb3V0IG9mIHN5bmMgKCVmLCVmKSIsCisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgem9vbSBpcyBvdXQgb2Ygc3luYyAoJWYsJWYpIiwKICAgICAgICAgICAgICAgICAgIGluc3QoKSwgem9vbUZhY3RvclcsIHpvb21GYWN0b3JIKTsKIAogICAgIC8vIHNjYWxlIHRoZSB2YXJpYWJsZXMgYmFzZWQgb24gdGhlIHpvb20gbGV2ZWwKQEAgLTExOSw5ICsxNDcsOSBAQAogICAgIC8vIGxvY2sgdGhlIHN1cmZhY2UKICAgICBBTlBCaXRtYXAgYml0bWFwOwogICAgIEpOSUVudiogZW52ID0gTlVMTDsKLSAgICBpZiAoIW1fc3VyZmFjZSB8fCBtX3ZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0sgfHwKKyAgICBpZiAoIW1fc3VyZmFjZSB8fCBnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSyB8fAogICAgICAgICAhZ1N1cmZhY2VJLmxvY2soZW52LCBtX3N1cmZhY2UsICZiaXRtYXAsIE5VTEwpKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0KCksIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB1bmFibGUgdG8gbG9jayB0aGUgcGx1Z2luIiwgaW5zdCgpKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB1bmFibGUgdG8gbG9jayB0aGUgcGx1Z2luIiwgaW5zdCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTU0LDE5ICsxODIsMjYgQEAKIGludDE2IEJhY2tncm91bmRQbHVnaW46OmhhbmRsZUV2ZW50KGNvbnN0IEFOUEV2ZW50KiBldnQpIHsKICAgICBzd2l0Y2ggKGV2dC0+ZXZlbnRUeXBlKSB7CiAgICAgICAgIGNhc2Uga0RyYXdfQU5QRXZlbnRUeXBlOgotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHRoZSBwbHVnaW4gZGlkIG5vdCByZXF1ZXN0IGRyYXcgZXZlbnRzIiwgaW5zdCgpKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiBkaWQgbm90IHJlcXVlc3QgZHJhdyBldmVudHMiLCBpbnN0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Uga0xpZmVjeWNsZV9BTlBFdmVudFR5cGU6CiAgICAgICAgICAgICBpZiAoZXZ0LT5kYXRhLmxpZmVjeWNsZS5hY3Rpb24gPT0ga09uTG9hZF9BTlBMaWZlY3ljbGVBY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBnTG9nSS5sb2coaW5zdCgpLCBrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiByZWNlaXZlZCBhbiBvbkxvYWQgZXZlbnQiLCBpbnN0KCkpOworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiByZWNlaXZlZCBhbiBvbkxvYWQgZXZlbnQiLCBpbnN0KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Uga1RvdWNoX0FOUEV2ZW50VHlwZToKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0KCksIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIGRpZCBub3QgcmVxdWVzdCB0b3VjaCBldmVudHMiLCBpbnN0KCkpOworICAgICAgICAgICAgaWYgKGtEb3duX0FOUFRvdWNoQWN0aW9uID09IGV2dC0+ZGF0YS50b3VjaC5hY3Rpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIGtIYW5kbGVMb25nUHJlc3NfQU5QVG91Y2hSZXN1bHQgfCBrSGFuZGxlRG91YmxlVGFwX0FOUFRvdWNoUmVzdWx0OworICAgICAgICAgICAgZWxzZSBpZiAoa0xvbmdQcmVzc19BTlBUb3VjaEFjdGlvbiA9PSBldnQtPmRhdGEudG91Y2guYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgYnJvd3Nlci0+Z2V0dXJsKGluc3QoKSwgImphdmFzY3JpcHQ6YWxlcnQoJ0RldGVjdGVkIGxvbmcgcHJlc3MgZXZlbnQuJykiLCAwKTsKKyAgICAgICAgICAgICAgICBnV2luZG93SS5yZXF1ZXN0RnVsbFNjcmVlbihpbnN0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoa0RvdWJsZVRhcF9BTlBUb3VjaEFjdGlvbiA9PSBldnQtPmRhdGEudG91Y2guYWN0aW9uKQorICAgICAgICAgICAgICAgIGJyb3dzZXItPmdldHVybChpbnN0KCksICJqYXZhc2NyaXB0OmFsZXJ0KCdEZXRlY3RlZCBkb3VibGUgdGFwIGV2ZW50LicpIiwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBrS2V5X0FOUEV2ZW50VHlwZToKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0KCksIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIGRpZCBub3QgcmVxdWVzdCBrZXkgZXZlbnRzIiwgaW5zdCgpKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiBkaWQgbm90IHJlcXVlc3Qga2V5IGV2ZW50cyIsIGluc3QoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgzLDkgKzIxOCw5IEBACiAgICAgTlBQIGluc3RhbmNlID0gdGhpcy0+aW5zdCgpOwogCiAgICAgLy9MT0dfRVJST1IoaW5zdGFuY2UsICIgLS0tLS0tICVwIFRlc3RpbmcgTG9nIEVycm9yIiwgaW5zdGFuY2UpOwotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgTG9nIEVycm9yIiwgaW5zdGFuY2UpOwotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga1dhcm5pbmdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBMb2cgV2FybmluZyIsIGluc3RhbmNlKTsKLSAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIExvZyBEZWJ1ZyIsIGluc3RhbmNlKTsKKyAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgTG9nIEVycm9yIiwgaW5zdGFuY2UpOworICAgIGdMb2dJLmxvZyhrV2FybmluZ19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIExvZyBXYXJuaW5nIiwgaW5zdGFuY2UpOworICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBMb2cgRGVidWciLCBpbnN0YW5jZSk7CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTIyMywxMyArMjU4LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkIHRpbWVyX29uZXNob3QoTlBQIGluc3RhbmNlLCB1aW50MzIgdGltZXJJRCkgewotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tLS0tLSBvbmVzaG90IHRpbWVyXG4iKTsKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tLS0tLSBvbmVzaG90IHRpbWVyXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgdGltZXJfcmVwZWF0KE5QUCBpbnN0YW5jZSwgdWludDMyIHRpbWVySUQpIHsKICAgICBCYWNrZ3JvdW5kUGx1Z2luICpvYmogPSAoKEJhY2tncm91bmRQbHVnaW4qKSAoKFBsdWdpbk9iamVjdCopIGluc3RhbmNlLT5wZGF0YSktPmFjdGl2ZVBsdWdpbik7CiAKLSAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLS0tLS0gcmVwZWF0IHRpbWVyICVkXG4iLAorICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0tLS0tIHJlcGVhdCB0aW1lciAlZFxuIiwKICAgICAgICAgICAgICAgb2JqLT5tVGltZXJSZXBlYXRDb3VudCk7CiAgICAgaWYgKC0tb2JqLT5tVGltZXJSZXBlYXRDb3VudCA9PSAwKSB7CiAgICAgICAgIGJyb3dzZXItPnVuc2NoZWR1bGV0aW1lcihpbnN0YW5jZSwgdGltZXJJRCk7CkBAIC0yMzcsNyArMjcyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgdGltZXJfbmV2ZXJmaXJlcyhOUFAgaW5zdGFuY2UsIHVpbnQzMiB0aW1lcklEKSB7Ci0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0tLS0tIHRpbWVyX25ldmVyZmlyZXMhISFcbiIpOworICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0tLS0tIHRpbWVyX25ldmVyZmlyZXMhISFcbiIpOwogfQogCiBzdGF0aWMgdm9pZCB0aW1lcl9sYXRlbmN5KE5QUCBpbnN0YW5jZSwgdWludDMyIHRpbWVySUQpIHsKQEAgLTI1NCw3ICsyODksNyBAQAogCiAgICAgb2JqLT5tUHJldlRpbWUgPSBub3c7CiAKLSAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLAorICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwKICAgICAgICAgICAgICAgIi0tLS0tLS0tIGxhdGVuY3kgdGVzdDogWyUzZF0gaW50ZXJ2YWwgJWQgZXhwZWN0ZWQgJWQsIHRvdGFsICVkIGV4cGVjdGVkICVkLCBkcmlmdCAlZCBhdmcgJWRcbiIsCiAgICAgICAgICAgICAgIG9iai0+bVRpbWVyTGF0ZW5jeUN1cnJlbnRDb3VudCwgaW50ZXJ2YWwsIFRJTUVSX0lOVEVSVkFMLCBkdXIsCiAgICAgICAgICAgICAgIGV4cGVjdGVkRHVyLCBkcmlmdCwgYXZnRHJpZnQpOwpAQCAtMjg5LDcgKzMyNCw3IEBACiAgICAgQU5QUGl4ZWxQYWNraW5nIHBhY2tpbmc7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9DT1VOVChnUmVjcyk7IGkrKykgewogICAgICAgICBpZiAoZ0JpdG1hcEkuZ2V0UGl4ZWxQYWNraW5nKGdSZWNzW2ldLmZGb3JtYXQsICZwYWNraW5nKSkgewotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAicGl4ZWwgZm9ybWF0IFslZF0gJXMgaGFzIHBhY2tpbmcgQVJHQiBbJWQgJWRdIFslZCAlZF0gWyVkICVkXSBbJWQgJWRdXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGdSZWNzW2ldLmZGb3JtYXQsIGdSZWNzW2ldLmZOYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmcuQVNoaWZ0LCBwYWNraW5nLkFCaXRzLApAQCAtMjk3LDcgKzMzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZy5HU2hpZnQsIHBhY2tpbmcuR0JpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZy5CU2hpZnQsIHBhY2tpbmcuQkJpdHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAicGl4ZWwgZm9ybWF0IFslZF0gJXMgaGFzIG5vIHBhY2tpbmdcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZ1JlY3NbaV0uZkZvcm1hdCwgZ1JlY3NbaV0uZk5hbWUpOwogICAgICAgICB9CkBAIC0zMTAsMTggKzM0NSwxOCBAQAogICAgIC8vIGNoZWNrIGRlZmF1bHQgJiBzZXQgdHJhbnNwYXJlbnQKICAgICBpZiAoIW1GaW5pc2hlZFN0YWdlT25lKSB7CiAKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIkJFR0lOOiB0ZXN0aW5nIGJpdG1hcCB0cmFuc3BhcmVuY3kiKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiQkVHSU46IHRlc3RpbmcgYml0bWFwIHRyYW5zcGFyZW5jeSIpOwogCiAgICAgICAgIC8vY2hlY2sgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCB0cmFuc3BhcmVudAogICAgICAgICBpZiAoZXZ0LT5kYXRhLmRyYXcuZGF0YS5iaXRtYXAuZm9ybWF0ID09IGtSR0JBXzg4ODhfQU5QQml0bWFwRm9ybWF0KSB7Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiYml0bWFwIGRlZmF1bHQgZm9ybWF0IGlzIHRyYW5zcGFyZW50Iik7CisgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJiaXRtYXAgZGVmYXVsdCBmb3JtYXQgaXMgdHJhbnNwYXJlbnQiKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vbWFrZSBpdCB0cmFuc3BhcmVudCAoYW55IG5vbi1udWxsIHZhbHVlIHdpbGwgc2V0IGl0IHRvIHRydWUpCiAgICAgICAgIGJvb2wgdmFsdWUgPSB0cnVlOwogICAgICAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3RhbmNlLCBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sLCAmdmFsdWUpOwogICAgICAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2V0dGluZyB0cmFuc3BhcmVuY3kuIik7CisgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZXR0aW5nIHRyYW5zcGFyZW5jeS4iKTsKICAgICAgICAgfQogCiAgICAgICAgIG1GaW5pc2hlZFN0YWdlT25lID0gdHJ1ZTsKQEAgLTMzMiwxMyArMzY3LDEzIEBACiAKICAgICAgICAgLy9jaGVjayB0byBtYWtlIHN1cmUgaXQgaXMgdHJhbnNwYXJlbnQKICAgICAgICAgaWYgKGV2dC0+ZGF0YS5kcmF3LmRhdGEuYml0bWFwLmZvcm1hdCAhPSBrUkdCQV84ODg4X0FOUEJpdG1hcEZvcm1hdCkgewotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgImJpdG1hcCBkaWQgbm90IGNoYW5nZSB0byB0cmFuc3BhcmVudCBmb3JtYXQiKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgImJpdG1hcCBkaWQgbm90IGNoYW5nZSB0byB0cmFuc3BhcmVudCBmb3JtYXQiKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vbWFrZSBpdCBvcGFxdWUKICAgICAgICAgTlBFcnJvciBlcnIgPSBicm93c2VyLT5zZXR2YWx1ZShpbnN0YW5jZSwgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbCwgTlVMTCk7CiAgICAgICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZXR0aW5nIHRyYW5zcGFyZW5jeS4iKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNldHRpbmcgdHJhbnNwYXJlbmN5LiIpOwogICAgICAgICB9CiAKICAgICAgICAgbUZpbmlzaGVkU3RhZ2VUd28gPSB0cnVlOwpAQCAtMzQ4LDEwICszODMsMTAgQEAKIAogICAgICAgICAvL2NoZWNrIHRvIG1ha2Ugc3VyZSBpdCBpcyBub3QgdHJhbnNwYXJlbnQKICAgICAgICAgaWYgKGV2dC0+ZGF0YS5kcmF3LmRhdGEuYml0bWFwLmZvcm1hdCA9PSBrUkdCQV84ODg4X0FOUEJpdG1hcEZvcm1hdCkgewotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgImJpdG1hcCBkZWZhdWx0IGZvcm1hdCBpcyB0cmFuc3BhcmVudCIpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiYml0bWFwIGRlZmF1bHQgZm9ybWF0IGlzIHRyYW5zcGFyZW50Iik7CiAgICAgICAgIH0KIAotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiRU5EOiB0ZXN0aW5nIGJpdG1hcCB0cmFuc3BhcmVuY3kiKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiRU5EOiB0ZXN0aW5nIGJpdG1hcCB0cmFuc3BhcmVuY3kiKTsKIAogICAgICAgICBtRmluaXNoZWRTdGFnZVRocmVlID0gdHJ1ZTsKICAgICB9CkBAIC0zNjQsMTQgKzM5OSwxNCBAQAogdm9pZCBCYWNrZ3JvdW5kUGx1Z2luOjp0ZXN0X2RvbUFjY2VzcygpIHsKICAgICBOUFAgaW5zdGFuY2UgPSB0aGlzLT5pbnN0KCk7CiAKLSAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIERPTSBBY2Nlc3MiLCBpbnN0YW5jZSk7CisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIERPTSBBY2Nlc3MiLCBpbnN0YW5jZSk7CiAKICAgICAvLyBHZXQgdGhlIHBsdWdpbidzIERPTSBvYmplY3QKICAgICBOUE9iamVjdCogd2luZG93T2JqZWN0ID0gTlVMTDsKICAgICBicm93c2VyLT5nZXR2YWx1ZShpbnN0YW5jZSwgTlBOVldpbmRvd05QT2JqZWN0LCAmd2luZG93T2JqZWN0KTsKIAogICAgIGlmICghd2luZG93T2JqZWN0KQotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBVbmFibGUgdG8gcmV0cmlldmUgRE9NIFdpbmRvdyIsIGluc3RhbmNlKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBVbmFibGUgdG8gcmV0cmlldmUgRE9NIFdpbmRvdyIsIGluc3RhbmNlKTsKIAogICAgIC8vIFJldHJpZXZlIGEgcHJvcGVydHkgZnJvbSB0aGUgcGx1Z2luJ3MgRE9NIG9iamVjdAogICAgIE5QSWRlbnRpZmllciB0b3BJZGVudGlmaWVyID0gYnJvd3Nlci0+Z2V0c3RyaW5naWRlbnRpZmllcigidG9wIik7CkBAIC0zNzksNyArNDE0LDcgQEAKICAgICBicm93c2VyLT5nZXRwcm9wZXJ0eShpbnN0YW5jZSwgd2luZG93T2JqZWN0LCB0b3BJZGVudGlmaWVyLCAmdG9wT2JqZWN0VmFyaWFudCk7CiAKICAgICBpZiAodG9wT2JqZWN0VmFyaWFudC50eXBlICE9IE5QVmFyaWFudFR5cGVfT2JqZWN0KQotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBJbnZhbGlkIFZhcmlhbnQgdHlwZSBmb3IgRE9NIFByb3BlcnR5OiAlZCwlZCIsIGluc3RhbmNlLCB0b3BPYmplY3RWYXJpYW50LnR5cGUsIE5QVmFyaWFudFR5cGVfT2JqZWN0KTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBJbnZhbGlkIFZhcmlhbnQgdHlwZSBmb3IgRE9NIFByb3BlcnR5OiAlZCwlZCIsIGluc3RhbmNlLCB0b3BPYmplY3RWYXJpYW50LnR5cGUsIE5QVmFyaWFudFR5cGVfT2JqZWN0KTsKIH0KIAogCkBAIC0zOTEsMTQgKzQyNiwxNCBAQAogdm9pZCBCYWNrZ3JvdW5kUGx1Z2luOjp0ZXN0X2phdmFzY3JpcHQoKSB7CiAgICAgTlBQIGluc3RhbmNlID0gdGhpcy0+aW5zdCgpOwogCi0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBKYXZhU2NyaXB0IEFjY2VzcyIsIGluc3RhbmNlKTsKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgSmF2YVNjcmlwdCBBY2Nlc3MiLCBpbnN0YW5jZSk7CiAKICAgICAvLyBHZXQgdGhlIHBsdWdpbidzIERPTSBvYmplY3QKICAgICBOUE9iamVjdCogd2luZG93T2JqZWN0ID0gTlVMTDsKICAgICBicm93c2VyLT5nZXR2YWx1ZShpbnN0YW5jZSwgTlBOVldpbmRvd05QT2JqZWN0LCAmd2luZG93T2JqZWN0KTsKIAogICAgIGlmICghd2luZG93T2JqZWN0KQotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBVbmFibGUgdG8gcmV0cmlldmUgRE9NIFdpbmRvdyIsIGluc3RhbmNlKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBVbmFibGUgdG8gcmV0cmlldmUgRE9NIFdpbmRvdyIsIGluc3RhbmNlKTsKIAogICAgIC8vIGNyZWF0ZSBhIHN0cmluZyAoSlMgY29kZSkgdGhhdCBpcyBzdG9yZWQgaW4gbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgYnJvd3NlcgogICAgIGNvbnN0IGNoYXIqIGpzU3RyaW5nID0gIjEyMDAgKyAzNCI7CkBAIC00MDksMTUgKzQ0NCw1MSBAQAogICAgIE5QU3RyaW5nIHNjcmlwdCA9IHsgKGNoYXIqKXN0cmluZ01lbSwgc3RybGVuKGpzU3RyaW5nKSB9OwogICAgIE5QVmFyaWFudCBzY3JpcHRWYXJpYW50OwogICAgIGlmICghYnJvd3Nlci0+ZXZhbHVhdGUoaW5zdGFuY2UsIHdpbmRvd09iamVjdCwgJnNjcmlwdCwgJnNjcmlwdFZhcmlhbnQpKQotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBVbmFibGUgdG8gZXZhbCB0aGUgSlMuIiwgaW5zdGFuY2UpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFVuYWJsZSB0byBldmFsIHRoZSBKUy4iLCBpbnN0YW5jZSk7CiAKICAgICBpZiAoc2NyaXB0VmFyaWFudC50eXBlID09IE5QVmFyaWFudFR5cGVfSW50MzIpIHsKICAgICAgICAgaWYgKHNjcmlwdFZhcmlhbnQudmFsdWUuaW50VmFsdWUgIT0gMTIzNCkKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIEludmFsaWQgVmFsdWUgZm9yIEpTIFJldHVybjogJWQsMTIzNCIsIGluc3RhbmNlLCBzY3JpcHRWYXJpYW50LnZhbHVlLmludFZhbHVlKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgSW52YWxpZCBWYWx1ZSBmb3IgSlMgUmV0dXJuOiAlZCwxMjM0IiwgaW5zdGFuY2UsIHNjcmlwdFZhcmlhbnQudmFsdWUuaW50VmFsdWUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIEludmFsaWQgVmFyaWFudCB0eXBlIGZvciBKUyBSZXR1cm46ICVkLCVkIiwgaW5zdGFuY2UsIHNjcmlwdFZhcmlhbnQudHlwZSwgTlBWYXJpYW50VHlwZV9JbnQzMik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgSW52YWxpZCBWYXJpYW50IHR5cGUgZm9yIEpTIFJldHVybjogJWQsJWQiLCBpbnN0YW5jZSwgc2NyaXB0VmFyaWFudC50eXBlLCBOUFZhcmlhbnRUeXBlX0ludDMyKTsKICAgICB9CiAKICAgICAvLyBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHdpdGhpbiB0aGUgYnJvd3NlcgogICAgIGJyb3dzZXItPm1lbWZyZWUoc3RyaW5nTWVtKTsKIH0KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTG9hZCBKYXZhIENsYXNzZXMgVGVzdHMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordm9pZCBCYWNrZ3JvdW5kUGx1Z2luOjp0ZXN0X2xvYWRKYXZhQ2xhc3MoKSB7CisKKyAgICBKTklFbnYqIGVudiA9IE5VTEw7CisgICAgaWYgKGdWTS0+R2V0RW52KCh2b2lkKiopICZlbnYsIEpOSV9WRVJTSU9OXzFfNCkgIT0gSk5JX09LKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIExvYWRKYXZhVGVzdDogZmFpbGVkIHRvIGdldCBlbnYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9ICJjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW4uQmFja2dyb3VuZFRlc3QiOworICAgIGpjbGFzcyBiYWNrZ3JvdW5kQ2xhc3MgPSBnU3lzdGVtSS5sb2FkSmF2YUNsYXNzKGluc3QoKSwgY2xhc3NOYW1lKTsKKworICAgIGlmKCFiYWNrZ3JvdW5kQ2xhc3MpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gTG9hZEphdmFUZXN0OiBmYWlsZWQgdG8gbG9hZCBjbGFzcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgam1ldGhvZElEIGNvbnN0cnVjdG9yID0gZW52LT5HZXRNZXRob2RJRChiYWNrZ3JvdW5kQ2xhc3MsICI8aW5pdD4iLCAiKClWIik7CisgICAgam1ldGhvZElEIGFkZE1ldGhvZCA9IGVudi0+R2V0TWV0aG9kSUQoYmFja2dyb3VuZENsYXNzLCAiYWRkSW50IiwgIihJSSlJIik7CisgICAgam9iamVjdCBiYWNrZ3JvdW5kT2JqZWN0ID0gZW52LT5OZXdPYmplY3QoYmFja2dyb3VuZENsYXNzLCBjb25zdHJ1Y3Rvcik7CisKKyAgICBpZighYmFja2dyb3VuZE9iamVjdCkgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBMb2FkSmF2YVRlc3Q6IGZhaWxlZCB0byBjb25zdHJ1Y3Qgb2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBqaW50IHJlc3VsdCA9IGVudi0+Q2FsbEludE1ldGhvZChiYWNrZ3JvdW5kT2JqZWN0LCBhZGRNZXRob2QsIDIsIDIpOworCisgICAgaWYgKHJlc3VsdCAhPSA0KSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIExvYWRKYXZhVGVzdDogaW52YWxpZCByZXN1bHQgKCVkICE9IDQpIiwgcmVzdWx0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2JhY2tncm91bmQvQmFja2dyb3VuZFBsdWdpbi5oIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9iYWNrZ3JvdW5kL0JhY2tncm91bmRQbHVnaW4uaAppbmRleCAzYjljN2JhLi5lYmQ3N2QxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2JhY2tncm91bmQvQmFja2dyb3VuZFBsdWdpbi5oCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmgKQEAgLTMyLDEyICszMiw4IEBACiBwdWJsaWM6CiAgICAgQmFja2dyb3VuZFBsdWdpbihOUFAgaW5zdCk7CiAgICAgdmlydHVhbCB+QmFja2dyb3VuZFBsdWdpbigpOwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwpOwogICAgIHZpcnR1YWwgaW50MTYgaGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCk7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VDcmVhdGVkKEpOSUVudiogZW52LCBqb2JqZWN0IHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlQ2hhbmdlZChpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlRGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCBib29sIGlzRml4ZWRTdXJmYWNlKCk7CisgICAgdmlydHVhbCBqb2JqZWN0IGdldFN1cmZhY2UoKTsKIAogICAgIC8vIFRpbWVyIFRlc3RpbmcgVmFyaWFibGVzCiAgICAgdWludDMyX3QgbVN0YXJ0VGltZTsKQEAgLTUzLDkgKzQ5LDkgQEAKIAogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdQbHVnaW4oaW50IHN1cmZhY2VXaWR0aCwgaW50IHN1cmZhY2VIZWlnaHQpOworICAgIHZvaWQgZGVzdHJveVN1cmZhY2UoKTsKIAogICAgIGpvYmplY3QgICAgIG1fc3VyZmFjZTsKLSAgICBKYXZhVk0qICAgICBtX3ZtOwogCiAgICAgdm9pZCB0ZXN0X2xvZ2dpbmcoKTsKICAgICB2b2lkIHRlc3RfdGltZXJzKCk7CkBAIC02Myw2ICs1OSw3IEBACiAgICAgdm9pZCB0ZXN0X2JpdG1hcF90cmFuc3BhcmVuY3koY29uc3QgQU5QRXZlbnQqIGV2dCk7CiAgICAgdm9pZCB0ZXN0X2RvbUFjY2VzcygpOwogICAgIHZvaWQgdGVzdF9qYXZhc2NyaXB0KCk7CisgICAgdm9pZCB0ZXN0X2xvYWRKYXZhQ2xhc3MoKTsKIAogfTsKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9mb3JtL0Zvcm1QbHVnaW4uY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9mb3JtL0Zvcm1QbHVnaW4uY3BwCmluZGV4IGE5MmQ0NDcuLjVhNTM2ZDkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvZm9ybS9Gb3JtUGx1Z2luLmNwcAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2Zvcm0vRm9ybVBsdWdpbi5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrS2V5X0FOUEV2ZW50RmxhZzsKICAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3QsIGtBY2NlcHRFdmVudHNfQU5QU2V0VmFsdWUsICZmbGFncyk7CiAgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBnTG9nSS5sb2coaW5zdCwga0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZWxlY3RpbmcgaW5wdXQgZXZlbnRzLiIpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZWxlY3RpbmcgaW5wdXQgZXZlbnRzLiIpOwogICAgIH0KIH0KIApAQCAtMjE1LDcgKzIxNSw3IEBACiAKICAgICAgICAgY2FzZSBrTGlmZWN5Y2xlX0FOUEV2ZW50VHlwZToKICAgICAgICAgICAgIGlmIChldnQtPmRhdGEubGlmZWN5Y2xlLmFjdGlvbiA9PSBrTG9zZUZvY3VzX0FOUExpZmVjeWNsZUFjdGlvbikgewotICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgTG9vc2luZyBGb2N1cyIsIGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgTG9vc2luZyBGb2N1cyIsIGluc3RhbmNlKTsKIAogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUlucHV0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGhpZGUgdGhlIGtleWJvYXJkCkBAIC0yMzAsNyArMjMwLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGV2dC0+ZGF0YS5saWZlY3ljbGUuYWN0aW9uID09IGtHYWluRm9jdXNfQU5QTGlmZWN5Y2xlQWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBHYWluaW5nIEZvY3VzIiwgaW5zdGFuY2UpOworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBHYWluaW5nIEZvY3VzIiwgaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgIG1faGFzRm9jdXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGludmFsKGluc3RhbmNlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTMwMCw3ICszMDAsNyBAQAogYm9vbCBGb3JtUGx1Z2luOjpoYW5kbGVOYXZpZ2F0aW9uKEFOUEtleUNvZGUga2V5Q29kZSkgewogICAgIE5QUCBpbnN0YW5jZSA9IHRoaXMtPmluc3QoKTsKIAotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgUmVjdmQgTmF2IEtleSAlZCIsIGluc3RhbmNlLCBrZXlDb2RlKTsKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgUmVjdmQgTmF2IEtleSAlZCIsIGluc3RhbmNlLCBrZXlDb2RlKTsKIAogICAgIGlmICghbV9hY3RpdmVJbnB1dCkgewogICAgICAgICBnV2luZG93SS5zaG93S2V5Ym9hcmQoaW5zdGFuY2UsIHRydWUpOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAgICAgaW5wdXQtPnRleHRbaW5wdXQtPmNoYXJQdHJdID0gc3RhdGljX2Nhc3Q8Y2hhcj4odW5pY2hhcik7CiAgICAgaW5wdXQtPmNoYXJQdHIrKzsKIAotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgVGV4dDogICVjIiwgaW5zdGFuY2UsIHVuaWNoYXIpOworICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBUZXh0OiAgJWMiLCBpbnN0YW5jZSwgdW5pY2hhcik7CiB9CiAKIHZvaWQgRm9ybVBsdWdpbjo6c2Nyb2xsSW50b1ZpZXcoVGV4dElucHV0KiBpbnB1dCkgewpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9oZWxsby1qbmkuY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9oZWxsby1qbmkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzg5YjdlLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvaGVsbG8tam5pLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxKTklIZWxwLmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0KLSNkZWZpbmUgRVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0KLXN0YXRpYyBqc3RyaW5nIHN0cmluZ0Zyb21KTkkoIEpOSUVudiogZW52LCBqb2JqZWN0IHRoaXogKQotewotICAgIHJldHVybiBlbnYtPk5ld1N0cmluZ1VURigiSGVsbG8gZnJvbSBKTkkgISIpOwotfQotCi0vKgotICogSk5JIHJlZ2lzdHJhdGlvbi4KLSAqLwotc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBnSmF2YVNhbXBsZVBsdWdpblN0dWJNZXRob2RzW10gPSB7Ci0gICAgeyAibmF0aXZlU3RyaW5nRnJvbUpOSSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIsICh2b2lkKikgc3RyaW5nRnJvbUpOSSB9LAotfTsKLQotRVhQT1JUIGppbnQgSk5JX09uTG9hZChKYXZhVk0qIHZtLCB2b2lkKiByZXNlcnZlZCkgewotCi0gICAgSk5JRW52KiBlbnYgPSBOVUxMOwotCi0gICAgaWYgKHZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGpuaVJlZ2lzdGVyTmF0aXZlTWV0aG9kcyhlbnYsICJjb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vU2FtcGxlUGx1Z2luU3R1YiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdKYXZhU2FtcGxlUGx1Z2luU3R1Yk1ldGhvZHMsIE5FTEVNKGdKYXZhU2FtcGxlUGx1Z2luU3R1Yk1ldGhvZHMpKTsKLQotICAgIHJldHVybiBKTklfVkVSU0lPTl8xXzQ7Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2puaS1icmlkZ2UuY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9qbmktYnJpZGdlLmNwcAppbmRleCA0NWVjZDU0Li45YmE4YTMyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2puaS1icmlkZ2UuY3BwCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvam5pLWJyaWRnZS5jcHAKQEAgLTIzLDUxICsyMyw0OCBAQAogCiAjZGVmaW5lIEVYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQogCi1zdGF0aWMgU3VyZmFjZVN1YlBsdWdpbiogZ2V0UGx1Z2luT2JqZWN0KGludCBucHApIHsKLSAgICBOUFAgaW5zdGFuY2UgPSAoTlBQKW5wcDsKLSAgICBQbHVnaW5PYmplY3QqIG9iaiA9IHN0YXRpY19jYXN0PFBsdWdpbk9iamVjdCo+KGluc3RhbmNlLT5wZGF0YSk7Ci0gICAgaWYgKG9iaiAmJiBvYmotPmFjdGl2ZVBsdWdpbgotICAgICAgICAgICAgJiYgb2JqLT5hY3RpdmVQbHVnaW4tPnN1cHBvcnRzRHJhd2luZ01vZGVsKGtTdXJmYWNlX0FOUERyYXdpbmdNb2RlbCkpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN1cmZhY2VTdWJQbHVnaW4qPihvYmotPmFjdGl2ZVBsdWdpbik7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQorZXh0ZXJuIEFOUEV2ZW50SW50ZXJmYWNlVjAgICAgICAgICBnRXZlbnRJOwogCiBzdGF0aWMgdm9pZCBzdXJmYWNlQ3JlYXRlZChKTklFbnYqIGVudiwgam9iamVjdCB0aGl6LCBqaW50IG5wcCwgam9iamVjdCBzdXJmYWNlKSB7Ci0gICAgU3VyZmFjZVN1YlBsdWdpbiogb2JqID0gZ2V0UGx1Z2luT2JqZWN0KG5wcCk7CiAKLSAgICAvL1RPRE8gd2h5IGlzIHRoaXMgVk0gZGlmZmVyZW50IGZyb20gdGhlIG9uZSBpbiBOUF9JTklULi4uCi0gICAgSmF2YVZNKiB2bSA9IE5VTEw7Ci0gICAgZW52LT5HZXRKYXZhVk0oJnZtKTsKKyAgICAvLyBzZW5kIGN1c3RvbSBldmVudAorICAgIEFOUEV2ZW50IGV2ZW50OworICAgIGV2ZW50LmluU2l6ZSA9IHNpemVvZihBTlBFdmVudCk7CisgICAgZXZlbnQuZXZlbnRUeXBlID0ga0N1c3RvbV9BTlBFdmVudFR5cGU7CisgICAgZXZlbnQuZGF0YS5vdGhlclswXSA9IGtTdXJmYWNlQ3JlYXRlZF9DdXN0b21FdmVudDsKIAotICAgIG9iai0+c3VyZmFjZUNyZWF0ZWQoZW52LCBzdXJmYWNlKTsKKyAgICBnRXZlbnRJLnBvc3RFdmVudCgoTlBQKW5wcCwgJmV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoSk5JRW52KiBlbnYsIGpvYmplY3QgdGhpeiwgamludCBucHAsIGppbnQgZm9ybWF0LCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCkgewotICAgIFN1cmZhY2VTdWJQbHVnaW4qIG9iaiA9IGdldFBsdWdpbk9iamVjdChucHApOwotICAgIG9iai0+c3VyZmFjZUNoYW5nZWQoZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAvLyBzZW5kIGN1c3RvbSBldmVudAorICAgIEFOUEV2ZW50IGV2ZW50OworICAgIGV2ZW50LmluU2l6ZSA9IHNpemVvZihBTlBFdmVudCk7CisgICAgZXZlbnQuZXZlbnRUeXBlID0ga0N1c3RvbV9BTlBFdmVudFR5cGU7CisgICAgZXZlbnQuZGF0YS5vdGhlclswXSA9IGtTdXJmYWNlQ2hhbmdlZF9DdXN0b21FdmVudDsKKyAgICBldmVudC5kYXRhLm90aGVyWzFdID0gd2lkdGg7CisgICAgZXZlbnQuZGF0YS5vdGhlclsyXSA9IGhlaWdodDsKKworICAgIGdFdmVudEkucG9zdEV2ZW50KChOUFApbnBwLCAmZXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKEpOSUVudiogZW52LCBqb2JqZWN0IHRoaXosIGppbnQgbnBwKSB7Ci0gICAgU3VyZmFjZVN1YlBsdWdpbiogb2JqID0gZ2V0UGx1Z2luT2JqZWN0KG5wcCk7Ci0gICAgaWYgKG9iaikgewotICAgICAgICBvYmotPnN1cmZhY2VEZXN0cm95ZWQoKTsKLSAgICB9Ci19CisgICAgLy8gc2VuZCBjdXN0b20gZXZlbnQKKyAgICBBTlBFdmVudCBldmVudDsKKyAgICBldmVudC5pblNpemUgPSBzaXplb2YoQU5QRXZlbnQpOworICAgIGV2ZW50LmV2ZW50VHlwZSA9IGtDdXN0b21fQU5QRXZlbnRUeXBlOworICAgIGV2ZW50LmRhdGEub3RoZXJbMF0gPSBrU3VyZmFjZURlc3Ryb3llZF9DdXN0b21FdmVudDsKIAotc3RhdGljIGpib29sZWFuIGlzRml4ZWRTdXJmYWNlKEpOSUVudiogZW52LCBqb2JqZWN0IHRoaXosIGppbnQgbnBwKSB7Ci0gICAgU3VyZmFjZVN1YlBsdWdpbiogb2JqID0gZ2V0UGx1Z2luT2JqZWN0KG5wcCk7Ci0gICAgcmV0dXJuIG9iai0+aXNGaXhlZFN1cmZhY2UoKTsKKyAgICBnRXZlbnRJLnBvc3RFdmVudCgoTlBQKW5wcCwgJmV2ZW50KTsKIH0KIAogLyoKICAqIEpOSSByZWdpc3RyYXRpb24uCiAgKi8KLXN0YXRpYyBKTklOYXRpdmVNZXRob2QgZ0phdmFTYW1wbGVQbHVnaW5TdHViTWV0aG9kc1tdID0gewotICAgIHsgIm5hdGl2ZVN1cmZhY2VDcmVhdGVkIiwgIihJTGFuZHJvaWQvdmlldy9WaWV3OylWIiwgKHZvaWQqKSBzdXJmYWNlQ3JlYXRlZCB9LAorc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBnUGFpbnRTdXJmYWNlTWV0aG9kc1tdID0geworICAgIHsgIm5hdGl2ZVN1cmZhY2VDcmVhdGVkIiwgIihJKVYiLCAodm9pZCopIHN1cmZhY2VDcmVhdGVkIH0sCiAgICAgeyAibmF0aXZlU3VyZmFjZUNoYW5nZWQiLCAiKElJSUkpViIsICh2b2lkKikgc3VyZmFjZUNoYW5nZWQgfSwKICAgICB7ICJuYXRpdmVTdXJmYWNlRGVzdHJveWVkIiwgIihJKVYiLCAodm9pZCopIHN1cmZhY2VEZXN0cm95ZWQgfSwKLSAgICB7ICJuYXRpdmVJc0ZpeGVkU3VyZmFjZSIsICIoSSlaIiwgKHZvaWQqKSBpc0ZpeGVkU3VyZmFjZSB9LAogfTsKIAogRVhQT1JUIGppbnQgSk5JX09uTG9hZChKYXZhVk0qIHZtLCB2b2lkKiByZXNlcnZlZCkgewpAQCAtNzgsOCArNzUsOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgam5pUmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwgImNvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9TYW1wbGVQbHVnaW5TdHViIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0phdmFTYW1wbGVQbHVnaW5TdHViTWV0aG9kcywgTkVMRU0oZ0phdmFTYW1wbGVQbHVnaW5TdHViTWV0aG9kcykpOworICAgIGpuaVJlZ2lzdGVyTmF0aXZlTWV0aG9kcyhlbnYsICJjb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vUGFpbnRTdXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1BhaW50U3VyZmFjZU1ldGhvZHMsIE5FTEVNKGdQYWludFN1cmZhY2VNZXRob2RzKSk7CiAKICAgICByZXR1cm4gSk5JX1ZFUlNJT05fMV80OwogfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9tYWluLmNwcCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbWFpbi5jcHAKaW5kZXggZDAwMDkxZi4uM2U4ZmVlNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9tYWluLmNwcAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uY3BwCkBAIC0zMiw5ICszMiwxMyBAQAogI2luY2x1ZGUgIkF1ZGlvUGx1Z2luLmgiCiAjaW5jbHVkZSAiQmFja2dyb3VuZFBsdWdpbi5oIgogI2luY2x1ZGUgIkZvcm1QbHVnaW4uaCIKKyNpbmNsdWRlICJOYXZpZ2F0aW9uUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGFpbnRQbHVnaW4uaCIKKyNpbmNsdWRlICJWaWRlb1BsdWdpbi5oIgogCiBOUE5ldHNjYXBlRnVuY3MqIGJyb3dzZXI7CitKYXZhVk0qIGdWTTsKKwogI2RlZmluZSBFWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKIAogTlBFcnJvciBOUFBfTmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywKQEAgLTU2LDcgKzYwLDcgQEAKIE5QRXJyb3IgTlBQX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKIAogZXh0ZXJuICJDIiB7Ci1FWFBPUlQgTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVGdW5jcyogYnJvd3NlckZ1bmNzLCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcywgdm9pZCAqamF2YV9lbnYsIHZvaWQgKmFwcGxpY2F0aW9uX2NvbnRleHQpOworRVhQT1JUIE5QRXJyb3IgTlBfSW5pdGlhbGl6ZShOUE5ldHNjYXBlRnVuY3MqIGJyb3dzZXJGdW5jcywgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MsIHZvaWQgKmphdmFfZW52KTsKIEVYUE9SVCBOUEVycm9yIE5QX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKIEVYUE9SVCBjb25zdCBjaGFyKiBOUF9HZXRNSU1FRGVzY3JpcHRpb24odm9pZCk7CiBFWFBPUlQgdm9pZCBOUF9TaHV0ZG93bih2b2lkKTsKQEAgLTY1LDYgKzY5LDcgQEAKIEFOUEF1ZGlvVHJhY2tJbnRlcmZhY2VWMCAgICBnU291bmRJOwogQU5QQml0bWFwSW50ZXJmYWNlVjAgICAgICAgIGdCaXRtYXBJOwogQU5QQ2FudmFzSW50ZXJmYWNlVjAgICAgICAgIGdDYW52YXNJOworQU5QRXZlbnRJbnRlcmZhY2VWMCAgICAgICAgIGdFdmVudEk7CiBBTlBMb2dJbnRlcmZhY2VWMCAgICAgICAgICAgZ0xvZ0k7CiBBTlBQYWludEludGVyZmFjZVYwICAgICAgICAgZ1BhaW50STsKIEFOUFBhdGhJbnRlcmZhY2VWMCAgICAgICAgICBnUGF0aEk7CkBAIC03Niw3ICs4MSw3IEBACiAjZGVmaW5lIEFSUkFZX0NPVU5UKGFycmF5KSAgICAgIChzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKGFycmF5WzBdKSkKICNkZWZpbmUgREVCVUdfUExVR0lOX0VWRU5UUyAgICAgMAogCi1OUEVycm9yIE5QX0luaXRpYWxpemUoTlBOZXRzY2FwZUZ1bmNzKiBicm93c2VyRnVuY3MsIE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCB2b2lkICpqYXZhX2Vudiwgdm9pZCAqYXBwbGljYXRpb25fY29udGV4dCkKK05QRXJyb3IgTlBfSW5pdGlhbGl6ZShOUE5ldHNjYXBlRnVuY3MqIGJyb3dzZXJGdW5jcywgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MsIHZvaWQgKmphdmFfZW52KQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZnVuY3Rpb24gdGFibGUgZXF1YWwgb3IgbGFyZ2VyIHRoYW4gd2UgYXJlIGJ1aWx0IGFnYWluc3QuCiAgICAgaWYgKGJyb3dzZXJGdW5jcy0+c2l6ZSA8IHNpemVvZihOUE5ldHNjYXBlRnVuY3MpKSB7CkBAIC0xMTIsNiArMTE3LDcgQEAKICAgICAgICAgeyBrQXVkaW9UcmFja0ludGVyZmFjZVYwX0FOUEdldFZhbHVlLCAgIHNpemVvZihnU291bmRJKSwgICAgJmdTb3VuZEkgfSwKICAgICAgICAgeyBrQml0bWFwSW50ZXJmYWNlVjBfQU5QR2V0VmFsdWUsICAgICAgIHNpemVvZihnQml0bWFwSSksICAgJmdCaXRtYXBJIH0sCiAgICAgICAgIHsga0NhbnZhc0ludGVyZmFjZVYwX0FOUEdldFZhbHVlLCAgICAgICBzaXplb2YoZ0NhbnZhc0kpLCAgICZnQ2FudmFzSSB9LAorICAgICAgICB7IGtFdmVudEludGVyZmFjZVYwX0FOUEdldFZhbHVlLCAgICAgICAgc2l6ZW9mKGdFdmVudEkpLCAgICAmZ0V2ZW50SSB9LAogICAgICAgICB7IGtMb2dJbnRlcmZhY2VWMF9BTlBHZXRWYWx1ZSwgICAgICAgICAgc2l6ZW9mKGdMb2dJKSwgICAgICAmZ0xvZ0kgfSwKICAgICAgICAgeyBrUGFpbnRJbnRlcmZhY2VWMF9BTlBHZXRWYWx1ZSwgICAgICAgIHNpemVvZihnUGFpbnRJKSwgICAgJmdQYWludEkgfSwKICAgICAgICAgeyBrUGF0aEludGVyZmFjZVYwX0FOUEdldFZhbHVlLCAgICAgICAgIHNpemVvZihnUGF0aEkpLCAgICAgJmdQYXRoSSB9LApAQCAtMTI4LDYgKzEzNCwxMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLy8gc3RvcmUgdGhlIEphdmFWTSBmb3IgdGhlIHBsdWdpbgorICAgIEpOSUVudiogZW52ID0gKEpOSUVudiopamF2YV9lbnY7CisgICAgZW52LT5HZXRKYXZhVk0oJmdWTSk7CisKICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CiAKQEAgLTE1MCw5ICsxNjAsOCBAQAogCiAgICAgLy8gU2NyaXB0aW5nIGZ1bmN0aW9ucyBhcHBlYXJlZCBpbiBOUEFQSSB2ZXJzaW9uIDE0CiAgICAgaWYgKGJyb3dzZXItPnZlcnNpb24gPj0gMTQpIHsKLSAgICBpbnN0YW5jZS0+cGRhdGEgPSBicm93c2VyLT5jcmVhdGVvYmplY3QgKGluc3RhbmNlLCBnZXRQbHVnaW5DbGFzcygpKTsKLSAgICBvYmogPSBzdGF0aWNfY2FzdDxQbHVnaW5PYmplY3QqPihpbnN0YW5jZS0+cGRhdGEpOwotICAgIGJ6ZXJvKG9iaiwgc2l6ZW9mKCpvYmopKTsKKyAgICAgICAgaW5zdGFuY2UtPnBkYXRhID0gYnJvd3Nlci0+Y3JlYXRlb2JqZWN0IChpbnN0YW5jZSwgZ2V0UGx1Z2luQ2xhc3MoKSk7CisgICAgICAgIG9iaiA9IHN0YXRpY19jYXN0PFBsdWdpbk9iamVjdCo+KGluc3RhbmNlLT5wZGF0YSk7CiAgICAgfQogICAgIC8qIEVORDogU1RBTkRBUkQgUExVR0lOIEZSQU1FV09SSyAqLwogCkBAIC0xNjcsMzQgKzE3NiwyNSBAQAogICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiU3VyZmFjZSIpKSB7CiAgICAgICAgICAgICAgICBtb2RlbCA9IGtTdXJmYWNlX0FOUERyYXdpbmdNb2RlbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tLS0gJXAgRHJhd2luZ01vZGVsIGlzICVkIiwgaW5zdGFuY2UsIG1vZGVsKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBEcmF3aW5nTW9kZWwgaXMgJWQiLCBpbnN0YW5jZSwgbW9kZWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBub3RpZnkgdGhlIHBsdWdpbiBBUEkgb2YgdGhlIGxvY2F0aW9uIG9mIHRoZSBqYXZhIGludGVyZmFjZQotICAgIGNoYXIqIGNsYXNzTmFtZSA9ICJjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW4uU2FtcGxlUGx1Z2luU3R1YiI7Ci0gICAgTlBFcnJvciBucEVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3RhbmNlLCBrU2V0UGx1Z2luU3R1YkphdmFDbGFzc05hbWVfQU5QU2V0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNsYXNzTmFtZSkpOwotICAgIGlmIChucEVycikgewotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAic2V0IGNsYXNzIGVyciAlZCIsIG5wRXJyKTsKLSAgICAgICAgcmV0dXJuIG5wRXJyOwotICAgIH0KLQogICAgIC8vIG5vdGlmeSB0aGUgcGx1Z2luIEFQSSBvZiB0aGUgZHJhd2luZyBtb2RlbCB3ZSB3aXNoIHRvIHVzZS4gVGhpcyBtdXN0IGJlCiAgICAgLy8gZG9uZSBwcmlvciB0byBjcmVhdGluZyBjZXJ0YWluIHN1YlBsdWdpbiBvYmplY3RzIChlLmcuIHN1cmZhY2VWaWV3cykKICAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3RhbmNlLCBrUmVxdWVzdERyYXdpbmdNb2RlbF9BTlBTZXRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihtb2RlbCkpOwogICAgIGlmIChlcnIpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgInJlcXVlc3QgbW9kZWwgJWQgZXJyICVkIiwgbW9kZWwsIGVycik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgInJlcXVlc3QgbW9kZWwgJWQgZXJyICVkIiwgbW9kZWwsIGVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogcGF0aCA9IGdTeXN0ZW1JLmdldEFwcGxpY2F0aW9uRGF0YURpcmVjdG9yeSgpOwogICAgIGlmIChwYXRoKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICJBcHBsaWNhdGlvbiBkYXRhIGRpciBpcyAlcyIsIHBhdGgpOworICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICJBcHBsaWNhdGlvbiBkYXRhIGRpciBpcyAlcyIsIHBhdGgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJDYW4ndCBmaW5kIEFwcGxpY2F0aW9uIGRhdGEgZGlyIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkNhbid0IGZpbmQgQXBwbGljYXRpb24gZGF0YSBkaXIiKTsKICAgICB9CiAKICAgICAvLyBzZWxlY3QgdGhlIHBsdWdpblR5cGUKQEAgLTIxNiwzNSArMjE2LDYyIEBACiAgICAgICAgICAgICAgICAgb2JqLT5wbHVnaW5UeXBlID0ga0Zvcm1fUGx1Z2luVHlwZTsKICAgICAgICAgICAgICAgICBvYmotPmFjdGl2ZVBsdWdpbiA9IG5ldyBGb3JtUGx1Z2luKGluc3RhbmNlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIk5hdmlnYXRpb24iKSkgeworICAgICAgICAgICAgICAgIG9iai0+cGx1Z2luVHlwZSA9IGtOYXZpZ2F0aW9uX1BsdWdpblR5cGU7CisgICAgICAgICAgICAgICAgb2JqLT5hY3RpdmVQbHVnaW4gPSBuZXcgTmF2aWdhdGlvblBsdWdpbihpbnN0YW5jZSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICJQYWludCIpKSB7CiAgICAgICAgICAgICAgICAgb2JqLT5wbHVnaW5UeXBlID0ga1BhaW50X1BsdWdpblR5cGU7CiAgICAgICAgICAgICAgICAgb2JqLT5hY3RpdmVQbHVnaW4gPSBuZXcgUGFpbnRQbHVnaW4oaW5zdGFuY2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBQbHVnaW5UeXBlIGlzICVkIiwgaW5zdGFuY2UsIG9iai0+cGx1Z2luVHlwZSk7CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICJWaWRlbyIpKSB7CisgICAgICAgICAgICAgICAgb2JqLT5wbHVnaW5UeXBlID0ga1ZpZGVvX1BsdWdpblR5cGU7CisgICAgICAgICAgICAgICAgb2JqLT5hY3RpdmVQbHVnaW4gPSBuZXcgVmlkZW9QbHVnaW4oaW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLS0tICVwIFBsdWdpblR5cGUgaXMgJWQiLCBpbnN0YW5jZSwgb2JqLT5wbHVnaW5UeXBlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gaWYgbm8gcGx1Z2luVHlwZSBpcyBzcGVjaWZpZWQgdGhlbiBkZWZhdWx0IHRvIEFuaW1hdGlvbgogICAgIGlmICghb2JqLT5wbHVnaW5UeXBlKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICItLS0tLS0gJXAgTm8gUGx1Z2luVHlwZSBhdHRyaWJ1dGUgd2FzIGZvdW5kIiwgaW5zdGFuY2UpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICItLS0tLS0gJXAgTm8gUGx1Z2luVHlwZSBhdHRyaWJ1dGUgd2FzIGZvdW5kIiwgaW5zdGFuY2UpOwogICAgICAgICBvYmotPnBsdWdpblR5cGUgPSBrQW5pbWF0aW9uX1BsdWdpblR5cGU7CiAgICAgICAgIG9iai0+YWN0aXZlUGx1Z2luID0gbmV3IEJhbGxBbmltYXRpb24oaW5zdGFuY2UpOwogICAgIH0KIAogICAgIC8vIGNoZWNrIHRvIGVuc3VyZSB0aGUgcGx1Z2luVHlwZSBzdXBwb3J0cyB0aGUgbW9kZWwKICAgICBpZiAoIW9iai0+YWN0aXZlUGx1Z2luLT5zdXBwb3J0c0RyYXdpbmdNb2RlbChtb2RlbCkpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBVbnN1cHBvcnRlZCBEcmF3aW5nTW9kZWwgKCVkKSIsIGluc3RhbmNlLCBtb2RlbCk7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBVbnN1cHBvcnRlZCBEcmF3aW5nTW9kZWwgKCVkKSIsIGluc3RhbmNlLCBtb2RlbCk7CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogICAgIH0KIAorICAgIC8vIGlmIHRoZSBwbHVnaW4gdXNlcyB0aGUgc3VyZmFjZSBkcmF3aW5nIG1vZGVsIHRoZW4gc2V0IHRoZSBqYXZhIGNvbnRleHQKKyAgICBpZiAobW9kZWwgPT0ga1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsKSB7CisgICAgICAgIFN1cmZhY2VTdWJQbHVnaW4qIHN1cmZhY2VQbHVnaW4gPSBzdGF0aWNfY2FzdDxTdXJmYWNlU3ViUGx1Z2luKj4ob2JqLT5hY3RpdmVQbHVnaW4pOworCisgICAgICAgIGpvYmplY3QgY29udGV4dDsKKyAgICAgICAgTlBFcnJvciBlcnIgPSBicm93c2VyLT5nZXR2YWx1ZShpbnN0YW5jZSwga0phdmFDb250ZXh0X0FOUEdldFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQqPigmY29udGV4dCkpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJyZXF1ZXN0IGNvbnRleHQgZXJyOiAlZCIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisKKyAgICAgICAgc3VyZmFjZVBsdWdpbi0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB9CisKKwogICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKIH0KIAogTlBFcnJvciBOUFBfRGVzdHJveShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2ZSkKIHsKICAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QqKSBpbnN0YW5jZS0+cGRhdGE7Ci0gICAgZGVsZXRlIG9iai0+YWN0aXZlUGx1Z2luOworICAgIGlmIChvYmopIHsKKyAgICAgICAgZGVsZXRlIG9iai0+YWN0aXZlUGx1Z2luOworICAgICAgICBicm93c2VyLT5yZWxlYXNlb2JqZWN0KCZvYmotPmhlYWRlcik7CisgICAgfQogCiAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogfQpAQCAtMzA2LDcgKzMzMyw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGljIEFOUEJpdG1hcEZvcm1hdCBjdXJyZW50Rm9ybWF0ID0gLTE7CiAgICAgICAgICAgICAgICAgaWYgKGV2dC0+ZGF0YS5kcmF3LmRhdGEuYml0bWFwLmZvcm1hdCAhPSBjdXJyZW50Rm9ybWF0KSB7CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtYXQgPSBldnQtPmRhdGEuZHJhdy5kYXRhLmJpdG1hcC5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIERyYXcgKGJpdG1hcCkiCisgICAgICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgRHJhdyAoYml0bWFwKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpcD0lZCwlZCwlZCwlZCBmb3JtYXQ9JWQiLCBpbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC0+ZGF0YS5kcmF3LmNsaXAubGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC0+ZGF0YS5kcmF3LmNsaXAudG9wLApAQCAtMzE4LDcgKzM0NSw3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGtLZXlfQU5QRXZlbnRUeXBlOgotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgS2V5IGFjdGlvbj0lZCIKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgS2V5IGFjdGlvbj0lZCIKICAgICAgICAgICAgICAgICAgICAgICAiIGNvZGU9JWQgdmNvZGU9JWQgdW5pY2hhcj0lZCByZXBlYXQ9JWQgbW9kcz0leCIsIGluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgIGV2dC0+ZGF0YS5rZXkuYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIGV2dC0+ZGF0YS5rZXkubmF0aXZlQ29kZSwKQEAgLTMyOSwzNyArMzU2LDM3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGtMaWZlY3ljbGVfQU5QRXZlbnRUeXBlOgotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgTGlmZWN5Y2xlIGFjdGlvbj0lZCIsCisgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIExpZmVjeWNsZSBhY3Rpb249JWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgZXZ0LT5kYXRhLmxpZmVjeWNsZS5hY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICBjYXNlIGtUb3VjaF9BTlBFdmVudFR5cGU6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBUb3VjaCBhY3Rpb249JWQgWyVkICVkXSIsCisgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIFRvdWNoIGFjdGlvbj0lZCBbJWQgJWRdIiwKICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgZXZ0LT5kYXRhLnRvdWNoLmFjdGlvbiwgZXZ0LT5kYXRhLnRvdWNoLngsCiAgICAgICAgICAgICAgICAgICAgICAgZXZ0LT5kYXRhLnRvdWNoLnkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICBjYXNlIGtNb3VzZV9BTlBFdmVudFR5cGU6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBNb3VzZSBhY3Rpb249JWQgWyVkICVkXSIsCisgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIE1vdXNlIGFjdGlvbj0lZCBbJWQgJWRdIiwKICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgZXZ0LT5kYXRhLm1vdXNlLmFjdGlvbiwgZXZ0LT5kYXRhLm1vdXNlLngsCiAgICAgICAgICAgICAgICAgICAgICAgZXZ0LT5kYXRhLm1vdXNlLnkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICBjYXNlIGtWaXNpYmxlUmVjdF9BTlBFdmVudFR5cGU6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBWaXNpYmxlUmVjdCBbJWQgJWQgJWQgJWRdIiwKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgVmlzaWJsZVJlY3QgWyVkICVkICVkICVkXSIsCiAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsIGV2dC0+ZGF0YS52aXNpYmxlUmVjdC5yZWN0LmxlZnQsIGV2dC0+ZGF0YS52aXNpYmxlUmVjdC5yZWN0LnRvcCwKICAgICAgICAgICAgICAgICAgICAgICBldnQtPmRhdGEudmlzaWJsZVJlY3QucmVjdC5yaWdodCwgZXZ0LT5kYXRhLnZpc2libGVSZWN0LnJlY3QuYm90dG9tKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSAlcCBVbmtub3duIEV2ZW50IFslZF0iLAorICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSAlcCBVbmtub3duIEV2ZW50IFslZF0iLAogICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCBldnQtPmV2ZW50VHlwZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmKCFvYmotPmFjdGl2ZVBsdWdpbikgewotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAidGhlIGFjdGl2ZSBwbHVnaW4gaXMgbnVsbC4iKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAidGhlIGFjdGl2ZSBwbHVnaW4gaXMgbnVsbC4iKTsKICAgICAgICAgcmV0dXJuIDA7IC8vIHVua25vd24gb3IgdW5oYW5kbGVkIGV2ZW50CiAgICAgfQogICAgIGVsc2UgewpAQCAtMzg5LDE5ICs0MTYsMzcgQEAKICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKIH0KIAotTlBFcnJvciBOUFBfR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpCitOUEVycm9yIE5QUF9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIHsKICAgICBpZiAodmFyaWFibGUgPT0gTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCkgewogICAgICAgICB2b2lkICoqdiA9ICh2b2lkICoqKXZhbHVlOwogICAgICAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QqKSBpbnN0YW5jZS0+cGRhdGE7CiAKICAgICAgICAgaWYgKG9iaikKLSAgICAgICAgICAgIGJyb3dzZXItPnJldGFpbm9iamVjdCgoTlBPYmplY3QqKW9iaik7CisgICAgICAgICAgICBicm93c2VyLT5yZXRhaW5vYmplY3QoJm9iai0+aGVhZGVyKTsKIAotICAgICAgICAqdiA9IG9iajsKKyAgICAgICAgKnYgPSAmKG9iai0+aGVhZGVyKTsKICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogICAgIH0KIAorICAgIGlmICh2YXJpYWJsZSA9PSBrSmF2YVN1cmZhY2VfQU5QR2V0VmFsdWUpIHsKKyAgICAgICAgLy9nZXQgdGhlIHN1cmZhY2Ugc3ViLXBsdWdpbgorICAgICAgICBQbHVnaW5PYmplY3QqIG9iaiA9IHN0YXRpY19jYXN0PFBsdWdpbk9iamVjdCo+KGluc3RhbmNlLT5wZGF0YSk7CisgICAgICAgIGlmIChvYmogJiYgb2JqLT5hY3RpdmVQbHVnaW4pIHsKKworICAgICAgICAgICAgaWYob2JqLT5hY3RpdmVQbHVnaW4tPnN1cHBvcnRzRHJhd2luZ01vZGVsKGtTdXJmYWNlX0FOUERyYXdpbmdNb2RlbCkpIHsKKyAgICAgICAgICAgICAgICBTdXJmYWNlU3ViUGx1Z2luKiBwbHVnaW4gPSBzdGF0aWNfY2FzdDxTdXJmYWNlU3ViUGx1Z2luKj4ob2JqLT5hY3RpdmVQbHVnaW4pOworICAgICAgICAgICAgICAgIGpvYmplY3QqIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxqb2JqZWN0Kj4odmFsdWUpOworICAgICAgICAgICAgICAgICpzdXJmYWNlID0gcGx1Z2luLT5nZXRTdXJmYWNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICItLSAlcCBUcmllZCB0byByZXRyaWV2ZSBzdXJmYWNlIGZvciBub24tc3VyZmFjZSBwbHVnaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKIH0KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9tYWluLmggYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uaAppbmRleCA4YWQyY2NlLi42NjYyOWU2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uaAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uaApAQCAtMjgsNSArMjgsNyBAQAogI2luY2x1ZGUgPG5wcnVudGltZS5oPgogI2luY2x1ZGUgImFuZHJvaWRfbnBhcGkuaCIKICNpbmNsdWRlICJBTlBTdXJmYWNlX25wYXBpLmgiCisjaW5jbHVkZSAiQU5QU3lzdGVtX25wYXBpLmgiCiAKIGV4dGVybiBOUE5ldHNjYXBlRnVuY3MqIGJyb3dzZXI7CitleHRlcm4gSmF2YVZNKiBnVk07CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL25hdmlnYXRpb24vTmF2aWdhdGlvblBsdWdpbi5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL25hdmlnYXRpb24vTmF2aWdhdGlvblBsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2NjdhNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uUGx1Z2luLmNwcApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJOYXZpZ2F0aW9uUGx1Z2luLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuIE5QTmV0c2NhcGVGdW5jcyogICAgICAgICBicm93c2VyOworZXh0ZXJuIEFOUExvZ0ludGVyZmFjZVYwICAgICAgICBnTG9nSTsKK2V4dGVybiBBTlBDYW52YXNJbnRlcmZhY2VWMCAgICAgZ0NhbnZhc0k7CitleHRlcm4gQU5QUGFpbnRJbnRlcmZhY2VWMCAgICAgIGdQYWludEk7CitleHRlcm4gQU5QVHlwZWZhY2VJbnRlcmZhY2VWMCAgIGdUeXBlZmFjZUk7CitleHRlcm4gQU5QV2luZG93SW50ZXJmYWNlVjAgICAgIGdXaW5kb3dJOworCisKK3N0YXRpYyB2b2lkIGludmFsKE5QUCBpbnN0YW5jZSkgeworICAgIGJyb3dzZXItPmludmFsaWRhdGVyZWN0KGluc3RhbmNlLCBOVUxMKTsKK30KKworc3RhdGljIHVpbnQxNiBybmQxNihmbG9hdCB4LCBpbnQgaW5zZXQpIHsKKyAgICBpbnQgaXggPSAoaW50KXJvdW5kZih4KSArIGluc2V0OworICAgIGlmIChpeCA8IDApIHsKKyAgICAgICAgaXggPSAwOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2PihpeCk7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsKE5QUCBpbnN0YW5jZSwgY29uc3QgQU5QUmVjdEYmIHIsIGJvb2wgZG9BQSkgeworICAgIGNvbnN0IGludCBpbnNldCA9IGRvQUEgPyAtMSA6IDA7CisKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luT2JqZWN0Kj4oaW5zdGFuY2UtPnBkYXRhKTsKKyAgICBOUFJlY3QgaW52YWw7CisgICAgaW52YWwubGVmdCA9IHJuZDE2KHIubGVmdCwgaW5zZXQpOworICAgIGludmFsLnRvcCA9IHJuZDE2KHIudG9wLCBpbnNldCk7CisgICAgaW52YWwucmlnaHQgPSBybmQxNihyLnJpZ2h0LCAtaW5zZXQpOworICAgIGludmFsLmJvdHRvbSA9IHJuZDE2KHIuYm90dG9tLCAtaW5zZXQpOworICAgIGJyb3dzZXItPmludmFsaWRhdGVyZWN0KGluc3RhbmNlLCAmaW52YWwpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK05hdmlnYXRpb25QbHVnaW46Ok5hdmlnYXRpb25QbHVnaW4oTlBQIGluc3QpIDogU3ViUGx1Z2luKGluc3QpIHsKKworICAgIG1faGFzRm9jdXMgPSBmYWxzZTsKKyAgICBtX2FjdGl2ZU5hdiA9IE5VTEw7CisKKyAgICBtX3BhaW50RGlzYWJsZWQgPSBnUGFpbnRJLm5ld1BhaW50KCk7CisgICAgZ1BhaW50SS5zZXRGbGFncyhtX3BhaW50RGlzYWJsZWQsIGdQYWludEkuZ2V0RmxhZ3MobV9wYWludERpc2FibGVkKSB8IGtBbnRpQWxpYXNfQU5QUGFpbnRGbGFnKTsKKyAgICBnUGFpbnRJLnNldENvbG9yKG1fcGFpbnREaXNhYmxlZCwgMHhGRkZGRkZGRik7CisKKyAgICBtX3BhaW50QWN0aXZlID0gZ1BhaW50SS5uZXdQYWludCgpOworICAgIGdQYWludEkuc2V0RmxhZ3MobV9wYWludEFjdGl2ZSwgZ1BhaW50SS5nZXRGbGFncyhtX3BhaW50QWN0aXZlKSB8IGtBbnRpQWxpYXNfQU5QUGFpbnRGbGFnKTsKKyAgICBnUGFpbnRJLnNldENvbG9yKG1fcGFpbnRBY3RpdmUsIDB4RkZGRkZGMDApOworCisgICAgLy9yZWdpc3RlciBmb3Iga2V5IGV2ZW50cworICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrS2V5X0FOUEV2ZW50RmxhZzsKKyAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3QsIGtBY2NlcHRFdmVudHNfQU5QU2V0VmFsdWUsICZmbGFncyk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZWxlY3RpbmcgaW5wdXQgZXZlbnRzLiIpOworICAgIH0KK30KKworTmF2aWdhdGlvblBsdWdpbjo6fk5hdmlnYXRpb25QbHVnaW4oKSB7CisgICAgZ1BhaW50SS5kZWxldGVQYWludChtX3BhaW50RGlzYWJsZWQpOworICAgIGdQYWludEkuZGVsZXRlUGFpbnQobV9wYWludEFjdGl2ZSk7Cit9CisKK2Jvb2wgTmF2aWdhdGlvblBsdWdpbjo6c3VwcG9ydHNEcmF3aW5nTW9kZWwoQU5QRHJhd2luZ01vZGVsIG1vZGVsKSB7CisgICAgcmV0dXJuIChtb2RlbCA9PSBrQml0bWFwX0FOUERyYXdpbmdNb2RlbCk7Cit9CisKK3ZvaWQgTmF2aWdhdGlvblBsdWdpbjo6ZHJhd1BsdWdpbihjb25zdCBBTlBCaXRtYXAmIGJpdG1hcCwgY29uc3QgQU5QUmVjdEkmIGNsaXApIHsKKyAgICBBTlBDYW52YXMqIGNhbnZhcyA9IGdDYW52YXNJLm5ld0NhbnZhcygmYml0bWFwKTsKKworICAgIEFOUFJlY3RGIGNsaXBSOworICAgIGNsaXBSLmxlZnQgPSBjbGlwLmxlZnQ7CisgICAgY2xpcFIudG9wID0gY2xpcC50b3A7CisgICAgY2xpcFIucmlnaHQgPSBjbGlwLnJpZ2h0OworICAgIGNsaXBSLmJvdHRvbSA9IGNsaXAuYm90dG9tOworICAgIGdDYW52YXNJLmNsaXBSZWN0KGNhbnZhcywgJmNsaXBSKTsKKworICAgIGRyYXcoY2FudmFzKTsKKyAgICBnQ2FudmFzSS5kZWxldGVDYW52YXMoY2FudmFzKTsKK30KKwordm9pZCBOYXZpZ2F0aW9uUGx1Z2luOjpkcmF3KEFOUENhbnZhcyogY2FudmFzKSB7CisgICAgTlBQIGluc3RhbmNlID0gdGhpcy0+aW5zdCgpOworICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3RhbmNlLT5wZGF0YTsKKworICAgIGNvbnN0IGludCBXID0gb2JqLT53aW5kb3ctPndpZHRoOworICAgIGNvbnN0IGludCBIID0gb2JqLT53aW5kb3ctPmhlaWdodDsKKyAgICBjb25zdCBpbnQgV20gPSBXLzI7CisgICAgY29uc3QgaW50IEhtID0gSC8yOworCisgICAgLy8gY29sb3IgdGhlIHBsdWdpbiBjYW52YXMKKyAgICBnQ2FudmFzSS5kcmF3Q29sb3IoY2FudmFzLCAobV9oYXNGb2N1cykgPyAweEZGQ0RDRENEIDogMHhGRjU0NTQ1NCk7CisKKyAgICAvLyBkcmF3IHRoZSBuYXYgdXAgYm94ICg1IHB4IGZyb20gdGhlIHRvcCBlZGdlKQorICAgIG1fbmF2VXAubGVmdCA9IFdtIC0gMTU7CisgICAgbV9uYXZVcC50b3AgPSA1OworICAgIG1fbmF2VXAucmlnaHQgPSBtX25hdlVwLmxlZnQgKyAzMDsKKyAgICBtX25hdlVwLmJvdHRvbSA9IG1fbmF2VXAudG9wICsgMzA7CisgICAgZ0NhbnZhc0kuZHJhd1JlY3QoY2FudmFzLCAmbV9uYXZVcCwgZ2V0UGFpbnQoJm1fbmF2VXApKTsKKworICAgIC8vIGRyYXcgdGhlIG5hdiBkb3duIGJveCAoNSBweCBmcm9tIHRoZSBib3R0b20gZWRnZSkKKyAgICBtX25hdkRvd24ubGVmdCA9IFdtIC0gMTU7CisgICAgbV9uYXZEb3duLnRvcCA9IEggLSAoMzAgKyA1KTsKKyAgICBtX25hdkRvd24ucmlnaHQgPSBtX25hdkRvd24ubGVmdCArIDMwOworICAgIG1fbmF2RG93bi5ib3R0b20gPSBtX25hdkRvd24udG9wICsgMzA7CisgICAgZ0NhbnZhc0kuZHJhd1JlY3QoY2FudmFzLCAmbV9uYXZEb3duLCBnZXRQYWludCgmbV9uYXZEb3duKSk7CisKKyAgICAvLyBkcmF3IHRoZSBuYXYgbGVmdCBib3ggKDUgcHggZnJvbSB0aGUgbGVmdCBlZGdlKQorICAgIG1fbmF2TGVmdC5sZWZ0ID0gNTsKKyAgICBtX25hdkxlZnQudG9wID0gSG0gLSAxNTsKKyAgICBtX25hdkxlZnQucmlnaHQgPSBtX25hdkxlZnQubGVmdCArIDMwOworICAgIG1fbmF2TGVmdC5ib3R0b20gPSBtX25hdkxlZnQudG9wICsgMzA7CisgICAgZ0NhbnZhc0kuZHJhd1JlY3QoY2FudmFzLCAmbV9uYXZMZWZ0LCBnZXRQYWludCgmbV9uYXZMZWZ0KSk7CisKKyAgICAvLyBkcmF3IHRoZSBuYXYgcmlnaHQgYm94ICg1IHB4IGZyb20gdGhlIHJpZ2h0IGVkZ2UpCisgICAgbV9uYXZSaWdodC5sZWZ0ID0gVyAtICgzMCArIDUpOworICAgIG1fbmF2UmlnaHQudG9wID0gSG0gLSAxNTsKKyAgICBtX25hdlJpZ2h0LnJpZ2h0ID0gbV9uYXZSaWdodC5sZWZ0ICsgMzA7CisgICAgbV9uYXZSaWdodC5ib3R0b20gPSBtX25hdlJpZ2h0LnRvcCArIDMwOworICAgIGdDYW52YXNJLmRyYXdSZWN0KGNhbnZhcywgJm1fbmF2UmlnaHQsIGdldFBhaW50KCZtX25hdlJpZ2h0KSk7CisKKyAgICAvLyBkcmF3IHRoZSBuYXYgY2VudGVyIGJveAorICAgIG1fbmF2Q2VudGVyLmxlZnQgPSBXbSAtIDE1OworICAgIG1fbmF2Q2VudGVyLnRvcCA9IEhtIC0gMTU7CisgICAgbV9uYXZDZW50ZXIucmlnaHQgPSBtX25hdkNlbnRlci5sZWZ0ICsgMzA7CisgICAgbV9uYXZDZW50ZXIuYm90dG9tID0gbV9uYXZDZW50ZXIudG9wICsgMzA7CisgICAgZ0NhbnZhc0kuZHJhd1JlY3QoY2FudmFzLCAmbV9uYXZDZW50ZXIsIGdldFBhaW50KCZtX25hdkNlbnRlcikpOworCisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSVwIERyYXdpbmcgUGx1Z2luIiwgaW5zdCgpKTsKK30KKworQU5QUGFpbnQqIE5hdmlnYXRpb25QbHVnaW46OmdldFBhaW50KEFOUFJlY3RGKiBpbnB1dCkgeworICAgIHJldHVybiAoaW5wdXQgPT0gbV9hY3RpdmVOYXYpID8gbV9wYWludEFjdGl2ZSA6IG1fcGFpbnREaXNhYmxlZDsKK30KKworaW50MTYgTmF2aWdhdGlvblBsdWdpbjo6aGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCkgeworICAgIE5QUCBpbnN0YW5jZSA9IHRoaXMtPmluc3QoKTsKKworICAgIHN3aXRjaCAoZXZ0LT5ldmVudFR5cGUpIHsKKyAgICAgICAgY2FzZSBrRHJhd19BTlBFdmVudFR5cGU6CisgICAgICAgICAgICBzd2l0Y2ggKGV2dC0+ZGF0YS5kcmF3Lm1vZGVsKSB7CisgICAgICAgICAgICAgICAgY2FzZSBrQml0bWFwX0FOUERyYXdpbmdNb2RlbDoKKyAgICAgICAgICAgICAgICAgICAgZHJhd1BsdWdpbihldnQtPmRhdGEuZHJhdy5kYXRhLmJpdG1hcCwgZXZ0LT5kYXRhLmRyYXcuY2xpcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIHVua25vd24gZHJhd2luZyBtb2RlbAorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTGlmZWN5Y2xlX0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIGlmIChldnQtPmRhdGEubGlmZWN5Y2xlLmFjdGlvbiA9PSBrTG9zZUZvY3VzX0FOUExpZmVjeWNsZUFjdGlvbikgeworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBMb29zaW5nIEZvY3VzIiwgaW5zdGFuY2UpOworICAgICAgICAgICAgICAgIG1faGFzRm9jdXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnZhbChpbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChldnQtPmRhdGEubGlmZWN5Y2xlLmFjdGlvbiA9PSBrR2FpbkZvY3VzX0FOUExpZmVjeWNsZUFjdGlvbikgeworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBHYWluaW5nIEZvY3VzIiwgaW5zdGFuY2UpOworICAgICAgICAgICAgICAgIG1faGFzRm9jdXMgPSB0cnVlOworICAgICAgICAgICAgICAgIGludmFsKGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga01vdXNlX0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGNhc2Uga0tleV9BTlBFdmVudFR5cGU6CisgICAgICAgICAgICBpZiAoZXZ0LT5kYXRhLmtleS5hY3Rpb24gPT0ga0Rvd25fQU5QS2V5QWN0aW9uKSB7CisgICAgICAgICAgICAJYm9vbCByZXN1bHQgPSBoYW5kbGVOYXZpZ2F0aW9uKGV2dC0+ZGF0YS5rZXkubmF0aXZlQ29kZSk7CisgICAgICAgICAgICAJaW52YWwoaW5zdGFuY2UpOworICAgICAgICAgICAgCXJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOyAgIC8vIHVua25vd24gb3IgdW5oYW5kbGVkIGV2ZW50Cit9CisKK2Jvb2wgTmF2aWdhdGlvblBsdWdpbjo6aGFuZGxlTmF2aWdhdGlvbihBTlBLZXlDb2RlIGtleUNvZGUpIHsKKyAgICBOUFAgaW5zdGFuY2UgPSB0aGlzLT5pbnN0KCk7CisKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgUmVjZWl2ZWQgS2V5ICVkIiwgaW5zdGFuY2UsIGtleUNvZGUpOworCisgICAgc3dpdGNoIChrZXlDb2RlKSB7CisJCWNhc2Uga0RwYWRVcF9BTlBLZXlDb2RlOgorCQkJbV9hY3RpdmVOYXYgPSAmbV9uYXZVcDsKKwkJCWJyZWFrOworCQljYXNlIGtEcGFkRG93bl9BTlBLZXlDb2RlOgorCQkJbV9hY3RpdmVOYXYgPSAmbV9uYXZEb3duOworCQkJYnJlYWs7CisJCWNhc2Uga0RwYWRMZWZ0X0FOUEtleUNvZGU6CisJCQltX2FjdGl2ZU5hdiA9ICZtX25hdkxlZnQ7CisJCQlicmVhazsKKwkJY2FzZSBrRHBhZFJpZ2h0X0FOUEtleUNvZGU6CisJCQltX2FjdGl2ZU5hdiA9ICZtX25hdlJpZ2h0OworCQkJYnJlYWs7CisJCWNhc2Uga0RwYWRDZW50ZXJfQU5QS2V5Q29kZToKKwkJCW1fYWN0aXZlTmF2ID0gJm1fbmF2Q2VudGVyOworCQkJYnJlYWs7CisJCWNhc2Uga1FfQU5QS2V5Q29kZToKKwkJY2FzZSBrRGVsX0FOUEtleUNvZGU6CisJCQltX2FjdGl2ZU5hdiA9IE5VTEw7CisJCQlyZXR1cm4gZmFsc2U7CisJCWRlZmF1bHQ6CisJCQltX2FjdGl2ZU5hdiA9IE5VTEw7CisJCQlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL25hdmlnYXRpb24vTmF2aWdhdGlvblBsdWdpbi5oIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9uYXZpZ2F0aW9uL05hdmlnYXRpb25QbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTEyYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9uYXZpZ2F0aW9uL05hdmlnYXRpb25QbHVnaW4uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlBsdWdpbk9iamVjdC5oIgorCisjaWZuZGVmIG5hdmlnYXRpb25QbHVnaW5fX0RFRklORUQKKyNkZWZpbmUgbmF2aWdhdGlvblBsdWdpbl9fREVGSU5FRAorCitjbGFzcyBOYXZpZ2F0aW9uUGx1Z2luIDogcHVibGljIFN1YlBsdWdpbiB7CitwdWJsaWM6CisJTmF2aWdhdGlvblBsdWdpbihOUFAgaW5zdCk7CisgICAgdmlydHVhbCB+TmF2aWdhdGlvblBsdWdpbigpOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwpOworICAgIHZpcnR1YWwgaW50MTYgaGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCk7Citwcml2YXRlOgorICAgIHZvaWQgZHJhdyhBTlBDYW52YXMqKTsKKyAgICB2b2lkIGRyYXdQbHVnaW4oY29uc3QgQU5QQml0bWFwJiBiaXRtYXAsIGNvbnN0IEFOUFJlY3RJJiBjbGlwKTsKKworICAgIGJvb2wgICAgICAgIG1faGFzRm9jdXM7CisKKyAgICBBTlBSZWN0RioJbV9hY3RpdmVOYXY7CisgICAgQU5QUmVjdEYJbV9uYXZVcDsKKyAgICBBTlBSZWN0RgltX25hdkRvd247CisgICAgQU5QUmVjdEYJbV9uYXZMZWZ0OworICAgIEFOUFJlY3RGCW1fbmF2UmlnaHQ7CisgICAgQU5QUmVjdEYJbV9uYXZDZW50ZXI7CisKKyAgICBBTlBQYWludCogICBtX3BhaW50RGlzYWJsZWQ7CisgICAgQU5QUGFpbnQqICAgbV9wYWludEFjdGl2ZTsKKworICAgIGJvb2wgaGFuZGxlTmF2aWdhdGlvbihBTlBLZXlDb2RlIGtleUNvZGUpOworICAgIEFOUFBhaW50KiBnZXRQYWludChBTlBSZWN0RiopOworfTsKKworI2VuZGlmIC8vIG5hdmlnYXRpb25QbHVnaW5fX0RFRklORUQKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvcGFpbnQvUGFpbnRQbHVnaW4uY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5jcHAKaW5kZXggNWIwMGRiYS4uZTQ3ODg5NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5jcHAKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKIGV4dGVybiBBTlBQYWludEludGVyZmFjZVYwICAgICAgZ1BhaW50STsKIGV4dGVybiBBTlBQYXRoSW50ZXJmYWNlVjAgICAgICAgZ1BhdGhJOwogZXh0ZXJuIEFOUFN1cmZhY2VJbnRlcmZhY2VWMCAgICBnU3VyZmFjZUk7CitleHRlcm4gQU5QU3lzdGVtSW50ZXJmYWNlVjAgICAgIGdTeXN0ZW1JOwogZXh0ZXJuIEFOUFR5cGVmYWNlSW50ZXJmYWNlVjAgICBnVHlwZWZhY2VJOwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC01MiwxMiArNTMsMTEgQEAKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIGRyYXdpbmcgc3VyZmFjZQogICAgIG1fc3VyZmFjZSA9IE5VTEw7Ci0gICAgbV92bSA9IE5VTEw7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBwYXRoCiAgICAgbV90b3VjaFBhdGggPSBnUGF0aEkubmV3UGF0aCgpOwogICAgIGlmKCFtX3RvdWNoUGF0aCkKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QsIGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSVwIFVuYWJsZSB0byBjcmVhdGUgdGhlIHRvdWNoIHBhdGgiLCBpbnN0KTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSVwIFVuYWJsZSB0byBjcmVhdGUgdGhlIHRvdWNoIHBhdGgiLCBpbnN0KTsKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIHBhaW50IGNvbG9ycwogICAgIG1fcGFpbnRTdXJmYWNlID0gZ1BhaW50SS5uZXdQYWludCgpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrVG91Y2hfQU5QRXZlbnRGbGFnOwogICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKICAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CiAgICAgfQogfQogCkBAIC04NiwxOCArODYsMTYgQEAKICAgICBnUGF0aEkuZGVsZXRlUGF0aChtX3RvdWNoUGF0aCk7CiAgICAgZ1BhaW50SS5kZWxldGVQYWludChtX3BhaW50U3VyZmFjZSk7CiAgICAgZ1BhaW50SS5kZWxldGVQYWludChtX3BhaW50QnV0dG9uKTsKLSAgICBzdXJmYWNlRGVzdHJveWVkKCk7Ci19CiAKLWJvb2wgUGFpbnRQbHVnaW46OnN1cHBvcnRzRHJhd2luZ01vZGVsKEFOUERyYXdpbmdNb2RlbCBtb2RlbCkgewotICAgIHJldHVybiAobW9kZWwgPT0ga1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsKTsKKyAgICBzZXRDb250ZXh0KE5VTEwpOworICAgIGRlc3Ryb3lTdXJmYWNlKCk7CiB9CiAKIEFOUENhbnZhcyogUGFpbnRQbHVnaW46OmdldENhbnZhcyhBTlBSZWN0SSogZGlydHlSZWN0KSB7CiAKICAgICBBTlBCaXRtYXAgYml0bWFwOwogICAgIEpOSUVudiogZW52ID0gTlVMTDsKLSAgICBpZiAoIW1fc3VyZmFjZSB8fCBtX3ZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0sgfHwKKyAgICBpZiAoIW1fc3VyZmFjZSB8fCBnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSyB8fAogICAgICAgICAhZ1N1cmZhY2VJLmxvY2soZW52LCBtX3N1cmZhY2UsICZiaXRtYXAsIGRpcnR5UmVjdCkpIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xMzIsNyArMTMwLDcgQEAKIAogdm9pZCBQYWludFBsdWdpbjo6cmVsZWFzZUNhbnZhcyhBTlBDYW52YXMqIGNhbnZhcykgewogICAgIEpOSUVudiogZW52ID0gTlVMTDsKLSAgICBpZiAobV9zdXJmYWNlICYmIG1fdm0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgeworICAgIGlmIChtX3N1cmZhY2UgJiYgZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSA9PSBKTklfT0spIHsKICAgICAgICAgZ1N1cmZhY2VJLnVubG9jayhlbnYsIG1fc3VyZmFjZSk7CiAgICAgfQogICAgIGdDYW52YXNJLmRlbGV0ZUNhbnZhcyhjYW52YXMpOwpAQCAtMjEyLDMwICsyMTAsNTEgQEAKICAgICAgICAgcmV0dXJuICJSZWQiOwogfQogCi1ib29sIFBhaW50UGx1Z2luOjppc0ZpeGVkU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KK2pvYmplY3QgUGFpbnRQbHVnaW46OmdldFN1cmZhY2UoKSB7CisgICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KIAotdm9pZCBQYWludFBsdWdpbjo6c3VyZmFjZUNyZWF0ZWQoSk5JRW52KiBlbnYsIGpvYmplY3Qgc3VyZmFjZSkgewotICAgIGVudi0+R2V0SmF2YVZNKCZtX3ZtKTsKLSAgICBtX3N1cmZhY2UgPSBlbnYtPk5ld0dsb2JhbFJlZihzdXJmYWNlKTsKLSAgICBkcmF3Q2xlYW5QbHVnaW4oKTsKLX0KKyAgICAvLyBsb2FkIHRoZSBhcHByb3ByaWF0ZSBqYXZhIGNsYXNzIGFuZCBpbnN0YW50aWF0ZSBpdAorICAgIEpOSUVudiogZW52ID0gTlVMTDsKKyAgICBpZiAoZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGdldCBlbnYiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi12b2lkIFBhaW50UGx1Z2luOjpzdXJmYWNlQ2hhbmdlZChpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAvLyBnZXQgdGhlIHBsdWdpbidzIGRpbWVuc2lvbnMgYWNjb3JkaW5nIHRvIHRoZSBET00KKyAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAiY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luLlBhaW50U3VyZmFjZSI7CisgICAgamNsYXNzIHBhaW50Q2xhc3MgPSBnU3lzdGVtSS5sb2FkSmF2YUNsYXNzKGluc3QoKSwgY2xhc3NOYW1lKTsKKworICAgIGlmKCFwYWludENsYXNzKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIGdldFN1cmZhY2U6IGZhaWxlZCB0byBsb2FkIGNsYXNzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3QoKS0+cGRhdGE7CiAgICAgY29uc3QgaW50IHBXID0gb2JqLT53aW5kb3ctPndpZHRoOwogICAgIGNvbnN0IGludCBwSCA9IG9iai0+d2luZG93LT5oZWlnaHQ7Ci0gICAgLy8gY29tcGFyZSB0byB0aGUgcGx1Z2luJ3Mgc3VyZmFjZSBkaW1lbnNpb25zCi0gICAgaWYgKHBXICE9IHdpZHRoIHx8IHBIICE9IGhlaWdodCkKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsCi0gICAgICAgICAgICAgICAgICAiLS0tLSVwIEludmFsaWQgU3VyZmFjZSBEaW1lbnNpb25zICglZCwlZCk6KCVkLCVkKSIsCi0gICAgICAgICAgICAgICAgICBpbnN0KCksIHBXLCBwSCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBqbWV0aG9kSUQgY29uc3RydWN0b3IgPSBlbnYtPkdldE1ldGhvZElEKHBhaW50Q2xhc3MsICI8aW5pdD4iLCAiKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtJSUkpViIpOworICAgIGpvYmplY3QgcGFpbnRTdXJmYWNlID0gZW52LT5OZXdPYmplY3QocGFpbnRDbGFzcywgY29uc3RydWN0b3IsIG1fY29udGV4dCwgKGludClpbnN0KCksIHBXLCBwSCk7CisKKyAgICBpZighcGFpbnRTdXJmYWNlKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIGdldFN1cmZhY2U6IGZhaWxlZCB0byBjb25zdHJ1Y3Qgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1fc3VyZmFjZSA9IGVudi0+TmV3R2xvYmFsUmVmKHBhaW50U3VyZmFjZSk7CisgICAgcmV0dXJuIG1fc3VyZmFjZTsKIH0KLXZvaWQgUGFpbnRQbHVnaW46OnN1cmZhY2VEZXN0cm95ZWQoKSB7CisKK3ZvaWQgUGFpbnRQbHVnaW46OmRlc3Ryb3lTdXJmYWNlKCkgewogICAgIEpOSUVudiogZW52ID0gTlVMTDsKLSAgICBpZiAobV9zdXJmYWNlICYmIG1fdm0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgeworICAgIGlmIChtX3N1cmZhY2UgJiYgZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSA9PSBKTklfT0spIHsKKworICAgICAgICAvLyBkZXRhY2ggdGhlIG5hdGl2ZSBjb2RlIGZyb20gdGhlIG9iamVjdAorICAgICAgICBqY2xhc3MgamF2YUNsYXNzID0gZW52LT5HZXRPYmplY3RDbGFzcyhtX3N1cmZhY2UpOworICAgICAgICBqbWV0aG9kSUQgaW52YWxNZXRob2QgPSBlbnYtPkdldE1ldGhvZElEKGphdmFDbGFzcywgImludmFsaWRhdGVOUFAiLCAiKClWIik7CisgICAgICAgIGVudi0+Q2FsbFZvaWRNZXRob2QobV9zdXJmYWNlLCBpbnZhbE1ldGhvZCk7CisKICAgICAgICAgZW52LT5EZWxldGVHbG9iYWxSZWYobV9zdXJmYWNlKTsKICAgICAgICAgbV9zdXJmYWNlID0gTlVMTDsKICAgICB9CkBAIC0yNzcsNyArMjk2LDcgQEAKICAgICAgICAgY2FzZSBrTW91c2VfQU5QRXZlbnRUeXBlOiB7CiAKICAgICAgICAgICAgIGlmIChtX2lzVG91Y2hBY3RpdmUpCi0gICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsICItLS0tJXAgUmVjZWl2ZWQgdW5pbnRlbmRlZCBtb3VzZSBldmVudCIsIGluc3QoKSk7CisgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSVwIFJlY2VpdmVkIHVuaW50ZW5kZWQgbW91c2UgZXZlbnQiLCBpbnN0KCkpOwogCiAgICAgICAgICAgICBpZiAoa0Rvd25fQU5QTW91c2VBY3Rpb24gPT0gZXZ0LT5kYXRhLm1vdXNlLmFjdGlvbikgewogICAgICAgICAgICAgICAgIEFOUFJlY3RGKiByZWN0ID0gdmFsaWRUb3VjaChldnQtPmRhdGEubW91c2UueCwgZXZ0LT5kYXRhLm1vdXNlLnkpOwpAQCAtMjkyLDYgKzMxMSwzNSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBrQ3VzdG9tX0FOUEV2ZW50VHlwZTogeworCisgICAgICAgICAgICBzd2l0Y2ggKGV2dC0+ZGF0YS5vdGhlclswXSkgeworICAgICAgICAgICAgICAgIGNhc2Uga1N1cmZhY2VDcmVhdGVkX0N1c3RvbUV2ZW50OgorICAgICAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLSBjdXN0b21FdmVudDogc3VyZmFjZUNyZWF0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZHJhd0NsZWFuUGx1Z2luKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Uga1N1cmZhY2VDaGFuZ2VkX0N1c3RvbUV2ZW50OiB7CisgICAgICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tIGN1c3RvbUV2ZW50OiBzdXJmYWNlQ2hhbmdlZCIpOworCisgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IGV2dC0+ZGF0YS5vdGhlclsxXTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IGV2dC0+ZGF0YS5vdGhlclsyXTsKKworICAgICAgICAgICAgICAgICAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QqKSBpbnN0KCktPnBkYXRhOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcFcgPSBvYmotPndpbmRvdy0+d2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwSCA9IG9iai0+d2luZG93LT5oZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhcmUgdG8gdGhlIHBsdWdpbidzIHN1cmZhY2UgZGltZW5zaW9ucworICAgICAgICAgICAgICAgICAgICBpZiAocFcgIT0gd2lkdGggfHwgcEggIT0gaGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tJXAgSW52YWxpZCBTdXJmYWNlIERpbWVuc2lvbnMgKCVkLCVkKTooJWQsJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0KCksIHBXLCBwSCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIGtTdXJmYWNlRGVzdHJveWVkX0N1c3RvbUV2ZW50OgorICAgICAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLSBjdXN0b21FdmVudDogc3VyZmFjZURlc3Ryb3llZCIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOyAvLyBlbmQgS0N1c3RvbV9BTlBFdmVudFR5cGUKKyAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5oIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5oCmluZGV4IDhmZjU2MWMuLjQ4NjdhNzAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvcGFpbnQvUGFpbnRQbHVnaW4uaAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3BhaW50L1BhaW50UGx1Z2luLmgKQEAgLTMzLDE4ICszMywxNSBAQAogcHVibGljOgogICAgIFBhaW50UGx1Z2luKE5QUCBpbnN0KTsKICAgICB2aXJ0dWFsIH5QYWludFBsdWdpbigpOwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwpOwogICAgIHZpcnR1YWwgaW50MTYgaGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCk7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VDcmVhdGVkKEpOSUVudiogZW52LCBqb2JqZWN0IHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlQ2hhbmdlZChpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlRGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCBib29sIGlzRml4ZWRTdXJmYWNlKCk7CisgICAgdmlydHVhbCBqb2JqZWN0IGdldFN1cmZhY2UoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkICAgICAgICBkcmF3Q2xlYW5QbHVnaW4oQU5QQ2FudmFzKiBjYW52YXMgPSBOVUxMKTsKICAgICBBTlBDYW52YXMqICBnZXRDYW52YXMoQU5QUmVjdEkqIGRpcnR5UmVjdCA9IE5VTEwpOwogICAgIEFOUENhbnZhcyogIGdldENhbnZhcyhBTlBSZWN0RiogZGlydHlSZWN0KTsKICAgICBjb25zdCBjaGFyKiBnZXRDb2xvclRleHQoKTsKKyAgICB2b2lkICAgICAgICBkZXN0cm95U3VyZmFjZSgpOwogICAgIHZvaWQgICAgICAgIHBhaW50TW91c2UoaW50IHgsIGludCB5KTsKICAgICB2b2lkICAgICAgICBwYWludFRvdWNoKCk7CiAgICAgdm9pZCAgICAgICAgcmVsZWFzZUNhbnZhcyhBTlBDYW52YXMqKTsKQEAgLTU1LDcgKzUyLDYgQEAKICAgICBib29sICAgICAgICBtX2lzVG91Y2hBY3RpdmU7CiAgICAgYm9vbCAgICAgICAgbV9pc1RvdWNoQ3VycmVudElucHV0OwogCi0gICAgSmF2YVZNKiAgICAgbV92bTsKICAgICBqb2JqZWN0ICAgICBtX3N1cmZhY2U7CiAgICAgQU5QUGF0aCogICAgbV90b3VjaFBhdGg7CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvdmlkZW8vVmlkZW9QbHVnaW4uY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS92aWRlby9WaWRlb1BsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0Mjk1YgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvdmlkZW8vVmlkZW9QbHVnaW4uY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlZpZGVvUGx1Z2luLmgiCisjaW5jbHVkZSAiYW5kcm9pZF9ucGFwaS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2V4dGVybiBOUE5ldHNjYXBlRnVuY3MqICAgICAgICBicm93c2VyOworZXh0ZXJuIEFOUEJpdG1hcEludGVyZmFjZVYwICAgIGdCaXRtYXBJOworZXh0ZXJuIEFOUENhbnZhc0ludGVyZmFjZVYwICAgIGdDYW52YXNJOworZXh0ZXJuIEFOUExvZ0ludGVyZmFjZVYwICAgICAgIGdMb2dJOworZXh0ZXJuIEFOUFBhaW50SW50ZXJmYWNlVjAgICAgIGdQYWludEk7CitleHRlcm4gQU5QU3VyZmFjZUludGVyZmFjZVYwICAgZ1N1cmZhY2VJOworZXh0ZXJuIEFOUFN5c3RlbUludGVyZmFjZVYwICAgIGdTeXN0ZW1JOworZXh0ZXJuIEFOUFR5cGVmYWNlSW50ZXJmYWNlVjAgIGdUeXBlZmFjZUk7CitleHRlcm4gQU5QV2luZG93SW50ZXJmYWNlVjAgICAgZ1dpbmRvd0k7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworVmlkZW9QbHVnaW46OlZpZGVvUGx1Z2luKE5QUCBpbnN0KSA6IFN1cmZhY2VTdWJQbHVnaW4oaW5zdCkgeworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZHJhd2luZyBzdXJmYWNlCisgICAgbV9zdXJmYWNlID0gTlVMTDsKKworICAgIC8vcmVnaXN0ZXIgZm9yIHRvdWNoIGV2ZW50cworICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrVG91Y2hfQU5QRXZlbnRGbGFnOworICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgfQorfQorCitWaWRlb1BsdWdpbjo6flZpZGVvUGx1Z2luKCkgeworICAgIHNldENvbnRleHQoTlVMTCk7CisgICAgZGVzdHJveVN1cmZhY2UoKTsKK30KKworam9iamVjdCBWaWRlb1BsdWdpbjo6Z2V0U3VyZmFjZSgpIHsKKworICAgIGlmIChtX3N1cmZhY2UpIHsKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICAvLyBsb2FkIHRoZSBhcHByb3ByaWF0ZSBqYXZhIGNsYXNzIGFuZCBpbnN0YW50aWF0ZSBpdAorICAgIEpOSUVudiogZW52ID0gTlVMTDsKKyAgICBpZiAoZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGdldCBlbnYiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gImNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbi5WaWRlb1N1cmZhY2UiOworICAgIGpjbGFzcyB2aWRlb0NsYXNzID0gZ1N5c3RlbUkubG9hZEphdmFDbGFzcyhpbnN0KCksIGNsYXNzTmFtZSk7CisKKyAgICBpZighdmlkZW9DbGFzcykgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBnZXRTdXJmYWNlOiBmYWlsZWQgdG8gbG9hZCBjbGFzcyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBqbWV0aG9kSUQgY29uc3RydWN0b3IgPSBlbnYtPkdldE1ldGhvZElEKHZpZGVvQ2xhc3MsICI8aW5pdD4iLCAiKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDspViIpOworICAgIGpvYmplY3QgdmlkZW9TdXJmYWNlID0gZW52LT5OZXdPYmplY3QodmlkZW9DbGFzcywgY29uc3RydWN0b3IsIG1fY29udGV4dCk7CisKKyAgICBpZighdmlkZW9TdXJmYWNlKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIGdldFN1cmZhY2U6IGZhaWxlZCB0byBjb25zdHJ1Y3Qgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1fc3VyZmFjZSA9IGVudi0+TmV3R2xvYmFsUmVmKHZpZGVvU3VyZmFjZSk7CisgICAgcmV0dXJuIG1fc3VyZmFjZTsKK30KKwordm9pZCBWaWRlb1BsdWdpbjo6ZGVzdHJveVN1cmZhY2UoKSB7CisgICAgSk5JRW52KiBlbnYgPSBOVUxMOworICAgIGlmIChtX3N1cmZhY2UgJiYgZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSA9PSBKTklfT0spIHsKKyAgICAgICAgZW52LT5EZWxldGVHbG9iYWxSZWYobV9zdXJmYWNlKTsKKyAgICAgICAgbV9zdXJmYWNlID0gTlVMTDsKKyAgICB9Cit9CisKK2ludDE2IFZpZGVvUGx1Z2luOjpoYW5kbGVFdmVudChjb25zdCBBTlBFdmVudCogZXZ0KSB7CisgICAgc3dpdGNoIChldnQtPmV2ZW50VHlwZSkgeworICAgICAgICBjYXNlIGtMaWZlY3ljbGVfQU5QRXZlbnRUeXBlOiB7CisgICAgICAgICAgICBzd2l0Y2ggKGV2dC0+ZGF0YS5saWZlY3ljbGUuYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgY2FzZSBrRW50ZXJGdWxsU2NyZWVuX0FOUExpZmVjeWNsZUFjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0gJXAgZW50ZXJpbmcgZnVsbHNjcmVlbiIsIGluc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Uga0V4aXRGdWxsU2NyZWVuX0FOUExpZmVjeWNsZUFjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0gJXAgZXhpdGluZyBmdWxsc2NyZWVuIiwgaW5zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsgLy8gZW5kIGtMaWZlY3ljbGVfQU5QRXZlbnRUeXBlCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBrRHJhd19BTlBFdmVudFR5cGU6CisgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHRoZSBwbHVnaW4gZGlkIG5vdCByZXF1ZXN0IGRyYXcgZXZlbnRzIiwgaW5zdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtUb3VjaF9BTlBFdmVudFR5cGU6CisgICAgICAgICAgICBpZiAoa0Rvd25fQU5QVG91Y2hBY3Rpb24gPT0gZXZ0LT5kYXRhLnRvdWNoLmFjdGlvbikgeworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgcmVxdWVzdGluZyBmdWxsc2NyZWVuIG1vZGUiLCBpbnN0KCkpOworICAgICAgICAgICAgICAgIGdXaW5kb3dJLnJlcXVlc3RGdWxsU2NyZWVuKGluc3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBrS2V5X0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiBkaWQgbm90IHJlcXVlc3Qga2V5IGV2ZW50cyIsIGluc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsgICAvLyB1bmtub3duIG9yIHVuaGFuZGxlZCBldmVudAorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS92aWRlby9WaWRlb1BsdWdpbi5oIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS92aWRlby9WaWRlb1BsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMWUyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3ZpZGVvL1ZpZGVvUGx1Z2luLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJQbHVnaW5PYmplY3QuaCIKKworI2lmbmRlZiB2aWRlb1BsdWdpbl9fREVGSU5FRAorI2RlZmluZSB2aWRlb1BsdWdpbl9fREVGSU5FRAorCitjbGFzcyBWaWRlb1BsdWdpbiA6IHB1YmxpYyBTdXJmYWNlU3ViUGx1Z2luIHsKK3B1YmxpYzoKKyAgICBWaWRlb1BsdWdpbihOUFAgaW5zdCk7CisgICAgdmlydHVhbCB+VmlkZW9QbHVnaW4oKTsKKyAgICB2aXJ0dWFsIGludDE2IGhhbmRsZUV2ZW50KGNvbnN0IEFOUEV2ZW50KiBldnQpOworICAgIHZpcnR1YWwgam9iamVjdCBnZXRTdXJmYWNlKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkZXN0cm95U3VyZmFjZSgpOworCisgICAgam9iamVjdCAgICAgbV9zdXJmYWNlOworfTsKKworI2VuZGlmIC8vIHZpZGVvUGx1Z2luX19ERUZJTkVECmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9CYWNrZ3JvdW5kU3VyZmFjZS5qYXZhIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vQmFja2dyb3VuZFN1cmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWY4YzhlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vQmFja2dyb3VuZFN1cmZhY2UuamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CisKK3B1YmxpYyBjbGFzcyBCYWNrZ3JvdW5kU3VyZmFjZSBleHRlbmRzIFRleHRWaWV3IHsKKworICAgIHB1YmxpYyBCYWNrZ3JvdW5kU3VyZmFjZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCk7CisKKyAgICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IuQkxBQ0spOworICAgICAgICB0aGlzLnNldFRleHRDb2xvcihDb2xvci5XSElURSk7CisgICAgICAgIHRoaXMuc2V0VGV4dCgiVGhpcyBpcyBhIGphdmEgYmFja2dyb3VuZCBwbHVnaW4iKTsKKworICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgdmlldyBzeXN0ZW0gaXMgYXdhcmUgdGhhdCB3ZSB3aWxsIGJlIGRyYXdpbmcKKyAgICAgICAgdGhpcy5zZXRXaWxsTm90RHJhdyhmYWxzZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vQmFja2dyb3VuZFRlc3QuamF2YSBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL0JhY2tncm91bmRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2YjBkNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL0JhY2tncm91bmRUZXN0LmphdmEKQEAgLTAsMCArMSwxMSBAQAorcGFja2FnZSBjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW47CisKK3B1YmxpYyBjbGFzcyBCYWNrZ3JvdW5kVGVzdCB7CisKKyAgICBwdWJsaWMgQmFja2dyb3VuZFRlc3QoKSB7fQorICAgIAorICAgIHB1YmxpYyBpbnQgYWRkSW50KGludCB4LCBpbnQgeSkgeworICAgICAgICByZXR1cm4geCArIHk7CisgICAgfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vUGFpbnRTdXJmYWNlLmphdmEgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9QYWludFN1cmZhY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTgyYmNjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vUGFpbnRTdXJmYWNlLmphdmEKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIuQ2FsbGJhY2s7CisKK3B1YmxpYyBjbGFzcyBQYWludFN1cmZhY2UgZXh0ZW5kcyBTdXJmYWNlVmlldyB7CisKKyAgICBzdGF0aWMgeworICAgICAgICAvL25lZWRlZCBmb3Igam5pIGNhbGxzCisgICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgic2FtcGxlcGx1Z2luIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbnBwOworCisgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkTlBQID0gdHJ1ZTsKKyAgICBwcml2YXRlIE9iamVjdCBucHBMb2NrID0gbmV3IE9iamVjdCgpOworCisgICAgcHVibGljIFBhaW50U3VyZmFjZShDb250ZXh0IGNvbnRleHQsIGludCBOUFAsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICBzdXBlcihjb250ZXh0KTsKKworICAgICAgICB0aGlzLm5wcCA9IE5QUDsKKworICAgICAgICB0aGlzLmdldEhvbGRlcigpLnNldEZvcm1hdChQaXhlbEZvcm1hdC5SR0JBXzg4ODgpOworICAgICAgICB0aGlzLmdldEhvbGRlcigpLmFkZENhbGxiYWNrKG5ldyBDYWxsYmFjaygpIHsKKworICAgICAgICAgICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobnBwTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWROUFApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZVN1cmZhY2VDaGFuZ2VkKG5wcCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG5wcExvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkTlBQKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVTdXJmYWNlQ3JlYXRlZChucHApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKFN1cmZhY2VIb2xkZXIgaG9sZGVyKSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChucHBMb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZE5QUCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlU3VyZmFjZURlc3Ryb3llZChucHApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBzZXRzIHRoZSBwbHVnaW4ncyBzdXJmYWNlIHRvIGEgZml4ZWQgc2l6ZQorICAgICAgICB0aGlzLmdldEhvbGRlcigpLnNldEZpeGVkU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgdmlldyBzeXN0ZW0gaXMgYXdhcmUgdGhhdCB3ZSB3aWxsIGJlIGRyYXdpbmcKKyAgICAgICAgdGhpcy5zZXRXaWxsTm90RHJhdyhmYWxzZSk7CisgICAgfQorCisgICAgLy8gY2FsbGVkIGJ5IEpOSQorICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlTlBQKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG5wcExvY2spIHsKKyAgICAgICAgICAgIHZhbGlkTlBQID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN1cmZhY2VDcmVhdGVkKGludCBucHApOworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlU3VyZmFjZUNoYW5nZWQoaW50IG5wcCwgaW50IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN1cmZhY2VEZXN0cm95ZWQoaW50IG5wcCk7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9TYW1wbGVQbHVnaW4uamF2YSBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpbi5qYXZhCmluZGV4IDliOGNlOTUuLmI1YjcyOGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpbi5qYXZhCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpbi5qYXZhCkBAIC0xLDMgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbjsKIAogaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CkBAIC0xMSw1ICszNSw0IEBACiAgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9TYW1wbGVQbHVnaW5TdHViLmphdmEgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9TYW1wbGVQbHVnaW5TdHViLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMGEwYzcuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vU2FtcGxlUGx1Z2luU3R1Yi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGl4ZWxGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIuQ2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXM7Ci1pbXBvcnQgYW5kcm9pZC53ZWJraXQuUGx1Z2luU3R1YjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5NZWRpYUNvbnRyb2xsZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVmlkZW9WaWV3OwotaW1wb3J0IGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbi5ncmFwaGljcy5DdWJlUmVuZGVyZXI7Ci0KLXB1YmxpYyBjbGFzcyBTYW1wbGVQbHVnaW5TdHViIGltcGxlbWVudHMgUGx1Z2luU3R1YiB7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICAvL25lZWRlZCBmb3Igam5pIGNhbGxzCi0gICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgic2FtcGxlcGx1Z2luIik7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBWaWV3IGdldEVtYmVkZGVkVmlldyhmaW5hbCBpbnQgbnBwLCBDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgCi0gICAgICAgIGZpbmFsIFN1cmZhY2VWaWV3IHZpZXcgPSBuZXcgU3VyZmFjZVZpZXcoY29udGV4dCk7Ci0KLSAgICAgICAgLyogWW91IGNhbiBkbyBhbGwgc29ydHMgb2YgaW50ZXJlc3Rpbmcgb3BlcmF0aW9ucyBvbiB0aGUgc3VyZmFjZSB2aWV3Ci0gICAgICAgICAqIGhlcmUuIFdlIGlsbHVzdHJhdGUgYSBmZXcgb2YgdGhlIGltcG9ydGFudCBvcGVyYXRpb25zIGJlbG93LgotICAgICAgICAgKi8KLSAgICAgICAgCi0gICAgICAgIC8vVE9ETyBnZXQgcGl4ZWwgZm9ybWF0IGZyb20gdGhlIHN1YnBsdWdpbiAodmlhIGpuaSkKLSAgICAgICAgdmlldy5nZXRIb2xkZXIoKS5zZXRGb3JtYXQoUGl4ZWxGb3JtYXQuUkdCQV84ODg4KTsKLSAgICAgICAgdmlldy5nZXRIb2xkZXIoKS5hZGRDYWxsYmFjayhuZXcgQ2FsbGJhY2soKSB7Ci0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHN1cmZhY2VDaGFuZ2VkKFN1cmZhY2VIb2xkZXIgaG9sZGVyLCBpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgICAgICBuYXRpdmVTdXJmYWNlQ2hhbmdlZChucHAsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKFN1cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0gICAgICAgICAgICAgICAgbmF0aXZlU3VyZmFjZUNyZWF0ZWQobnBwLCB2aWV3KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3llZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAgICAgICAgICAgICAgIG5hdGl2ZVN1cmZhY2VEZXN0cm95ZWQobnBwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuYXRpdmVJc0ZpeGVkU3VyZmFjZShucHApKSB7Ci0gICAgICAgICAgICAvL1RPRE8gZ2V0IHRoZSBmaXhlZCBkaW1lbnNpb25zIGZyb20gdGhlIHBsdWdpbiAKLSAgICAgICAgICAgIC8vdmlldy5nZXRIb2xkZXIoKS5zZXRGaXhlZFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB2aWV3OwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVmlldyBnZXRGdWxsU2NyZWVuVmlldyhpbnQgbnBwLCBDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgCi0gICAgICAgIC8qIFRPRE8gbWFrZSB0aGlzIGF3YXJlIG9mIHRoZSBwbHVnaW4gaW5zdGFuY2UgYW5kIGdldCB0aGUgdmlkZW8gZmlsZQotICAgICAgICAgKiBmcm9tIHRoZSBwbHVnaW4uCi0gICAgICAgICAqLwotICAgICAgICAKLSAgICAgICAgRnJhbWVMYXlvdXQgbGF5b3V0ID0gbmV3IEZyYW1lTGF5b3V0KGNvbnRleHQpOwotICAgICAgICBMYXlvdXRQYXJhbXMgZnAgPSBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKTsKLSAgICAgICAgbGF5b3V0LnNldExheW91dFBhcmFtcyhmcCk7Ci0KLSAgICAgICAgVmlkZW9WaWV3IHZpZGVvID0gbmV3IFZpZGVvVmlldyhjb250ZXh0KTsKLSAgICAgICAgTGF5b3V0UGFyYW1zIHZwID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCk7Ci0gICAgICAgIGxheW91dC5zZXRMYXlvdXRQYXJhbXModnApOwotCi0gICAgICAgIEdMU3VyZmFjZVZpZXcgZ2wgPSBuZXcgR0xTdXJmYWNlVmlldyhjb250ZXh0KTsKLSAgICAgICAgTGF5b3V0UGFyYW1zIGdwID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCk7Ci0gICAgICAgIGxheW91dC5zZXRMYXlvdXRQYXJhbXMoZ3ApOwotICAgICAgICAKLSAgICAgICAgbGF5b3V0LmFkZFZpZXcodmlkZW8pOwotICAgICAgICBsYXlvdXQuYWRkVmlldyhnbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSB3YW50IGFuIDg4ODggcGl4ZWwgZm9ybWF0IGJlY2F1c2UgdGhhdCdzIHJlcXVpcmVkIGZvciBhIHRyYW5zbHVjZW50IAotICAgICAgICAvLyB3aW5kb3cuIEFuZCB3ZSB3YW50IGEgZGVwdGggYnVmZmVyLgotICAgICAgICBnbC5zZXRFR0xDb25maWdDaG9vc2VyKDgsIDgsIDgsIDgsIDE2LCAwKTsKLSAgICAgICAgLy8gVGVsbCB0aGUgY3ViZSByZW5kZXJlciB0aGF0IHdlIHdhbnQgdG8gcmVuZGVyIGEgdHJhbnNsdWNlbnQgdmVyc2lvbgotICAgICAgICAvLyBvZiB0aGUgY3ViZToKLSAgICAgICAgZ2wuc2V0UmVuZGVyZXIobmV3IEN1YmVSZW5kZXJlcih0cnVlKSk7Ci0gICAgICAgIC8vIFVzZSBhIHN1cmZhY2UgZm9ybWF0IHdpdGggYW4gQWxwaGEgY2hhbm5lbDoKLSAgICAgICAgZ2wuZ2V0SG9sZGVyKCkuc2V0Rm9ybWF0KFBpeGVsRm9ybWF0LlRSQU5TTFVDRU5UKTsKLSAgICAgICAgZ2wuc2V0V2luZG93VHlwZShXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FQUExJQ0FUSU9OX01FRElBX09WRVJMQVkpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIHZpZGVvLnNldFZpZGVvUGF0aCgiL3NkY2FyZC90ZXN0X3ZpZGVvLjNncCIpOwotICAgICAgICB2aWRlby5zZXRNZWRpYUNvbnRyb2xsZXIobmV3IE1lZGlhQ29udHJvbGxlcihjb250ZXh0KSk7Ci0gICAgICAgIHZpZGVvLnJlcXVlc3RGb2N1cygpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGxheW91dDsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVTdXJmYWNlQ3JlYXRlZChpbnQgbnBwLCBWaWV3IHN1cmZhY2VWaWV3KTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN1cmZhY2VDaGFuZ2VkKGludCBucHAsIGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVTdXJmYWNlRGVzdHJveWVkKGludCBucHApOwotICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlSXNGaXhlZFN1cmZhY2UoaW50IG5wcCk7Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9WaWRlb1N1cmZhY2UuamF2YSBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1ZpZGVvU3VyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzgwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9WaWRlb1N1cmZhY2UuamF2YQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW47CisKK2ltcG9ydCBjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW4uZ3JhcGhpY3MuQ3ViZVJlbmRlcmVyOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5NZWRpYUNvbnRyb2xsZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVmlkZW9WaWV3OworCitwdWJsaWMgY2xhc3MgVmlkZW9TdXJmYWNlIGV4dGVuZHMgRnJhbWVMYXlvdXQgeworCisgICAgcHVibGljIFZpZGVvU3VyZmFjZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCk7CisKKyAgICAgICAgTGF5b3V0UGFyYW1zIGZwID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCk7CisgICAgICAgIHRoaXMuc2V0TGF5b3V0UGFyYW1zKGZwKTsKKworLy8gICAgICAgIFZpZGVvVmlldyB2aWRlbyA9IG5ldyBWaWRlb1ZpZXcoY29udGV4dCk7CisvLyAgICAgICAgTGF5b3V0UGFyYW1zIHZwID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCk7CisvLyAgICAgICAgdnAuc2V0TGF5b3V0UGFyYW1zKHZwKTsKKworICAgICAgICBHTFN1cmZhY2VWaWV3IGdsID0gbmV3IEdMU3VyZmFjZVZpZXcoY29udGV4dCk7CisgICAgICAgIExheW91dFBhcmFtcyBncCA9IG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULCBMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpOworICAgICAgICBnbC5zZXRMYXlvdXRQYXJhbXMoZ3ApOworCisgICAgICAgIHRoaXMuYWRkVmlldyhnbCk7CisvLyAgICAgICAgdGhpcy5hZGRWaWV3KHZpZGVvKTsKKworICAgICAgICAvLyBUZWxsIHRoZSBjdWJlIHJlbmRlcmVyIHRoYXQgd2Ugd2FudCB0byByZW5kZXIgYSB0cmFuc2x1Y2VudCB2ZXJzaW9uCisgICAgICAgIC8vIG9mIHRoZSBjdWJlOgorICAgICAgICBnbC5zZXRSZW5kZXJlcihuZXcgQ3ViZVJlbmRlcmVyKGZhbHNlKSk7CisgICAgICAgIGdsLnNldFdpbmRvd1R5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9BUFBMSUNBVElPTl9NRURJQV9PVkVSTEFZKTsKKworLy8gICAgICAgIHZpZGVvLnNldFZpZGVvUGF0aCgiL3NkY2FyZC90ZXN0X3ZpZGVvLjNncCIpOworLy8gICAgICAgIHZpZGVvLnNldE1lZGlhQ29udHJvbGxlcihuZXcgTWVkaWFDb250cm9sbGVyKGNvbnRleHQpKTsKKy8vICAgICAgICB2aWRlby5yZXF1ZXN0Rm9jdXMoKTsKKworICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgdmlldyBzeXN0ZW0gaXMgYXdhcmUgdGhhdCB3ZSB3aWxsIGJlIGRyYXdpbmcKKyAgICAgICAgdGhpcy5zZXRXaWxsTm90RHJhdyhmYWxzZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9CdXNpbmVzc0NhcmQvcmVzL2xheW91dC9idXNpbmVzc19jYXJkLnhtbCBiL3NhbXBsZXMvQnVzaW5lc3NDYXJkL3Jlcy9sYXlvdXQvYnVzaW5lc3NfY2FyZC54bWwKaW5kZXggYzdjZTcxMy4uZmZiMThkNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9CdXNpbmVzc0NhcmQvcmVzL2xheW91dC9idXNpbmVzc19jYXJkLnhtbAorKysgYi9zYW1wbGVzL0J1c2luZXNzQ2FyZC9yZXMvbGF5b3V0L2J1c2luZXNzX2NhcmQueG1sCkBAIC0xLDExICsxLDExIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFJlbGF0aXZlTGF5b3V0CiAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICA8QnV0dG9uCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGlja19jb250YWN0X2J1dHRvbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRUb3A9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTBkaXAiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvYWNjb3VudF9lbnRyeS54bWwgYi9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvYWNjb3VudF9lbnRyeS54bWwKaW5kZXggNDM1ZTczNy4uOWE0ZTE5NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2FjY291bnRfZW50cnkueG1sCisrKyBiL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9hY2NvdW50X2VudHJ5LnhtbApAQCAtMTUsMTkgKzE1LDE5IEBACiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Ij9hbmRyb2lkOmF0dHIvbGlzdFByZWZlcnJlZEl0ZW1IZWlnaHQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI2ZGlwIj4KICAgICA8SW1hZ2VWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudEljb24iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRCb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSI2ZGlwIiAvPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3NlY29uZEFjY291bnRMaW5lIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjZkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQGlkL2FjY291bnRJY29uIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEJvdHRvbT0idHJ1ZSIKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBhbmRyb2lkOmNvbG9yL3NlY29uZGFyeV90ZXh0X2xpZ2h0IiAvPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ZpcnN0QWNjb3VudExpbmUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQGlkL2FjY291bnRJY29uIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFJpZ2h0PSJ0cnVlIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfYWRkZXIueG1sIGIvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfYWRkZXIueG1sCmluZGV4IDkyZDA2ZjMuLjhmYjcyNzcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X2FkZGVyLnhtbAorKysgYi9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvY29udGFjdF9hZGRlci54bWwKQEAgLTE1LDEwICsxNSwxMCBAQAogLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgotICAgIDxUYWJsZUxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKyAgICA8VGFibGVMYXlvdXQgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgICAgICA8VGFibGVSb3c+CiAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgPC9UYWJsZVJvdz4KICAgICAgICAgPFRhYmxlUm93PgogICAgICAgICAgICAgPFNwaW5uZXIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50U3Bpbm5lciIvPgogICAgICAgICA8L1RhYmxlUm93PgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NhdmUiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGFjdFNhdmVCdXR0b24iCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+CiAgICAgICAgIDwvVGFibGVSb3c+CiAgICAgPC9UYWJsZUxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X2VudHJ5LnhtbCBiL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X2VudHJ5LnhtbAppbmRleCA5OTA5MDI1Li42MTkzZGI1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvY29udGFjdF9lbnRyeS54bWwKKysrIGIvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfZW50cnkueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICA8VGV4dFZpZXcgYW5kcm9pZDp0ZXh0PSJAK2lkL2NvbnRhY3RFbnRyeVRleHQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGFjdEVudHJ5VGV4dCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvY29udGFjdF9tYW5hZ2VyLnhtbCBiL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X21hbmFnZXIueG1sCmluZGV4IDczZjZmODEuLjhmZTE4YzUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X21hbmFnZXIueG1sCisrKyBiL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X21hbmFnZXIueG1sCkBAIC0xNiw5ICsxNiw5IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KLSAgICA8TGlzdFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CisgICAgPExpc3RWaWV3IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGFjdExpc3QiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc2hvd0ludmlzaWJsZSIKICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Nob3dJbnZpc2libGUiLz4KLSAgICA8QnV0dG9uIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICA8QnV0dG9uIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWRkQ29udGFjdEJ1dHRvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hZGRDb250YWN0QnV0dG9uTGFiZWwiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvRml4ZWRHcmlkTGF5b3V0L3Jlcy9sYXlvdXQvbWFpbi54bWwgYi9zYW1wbGVzL0ZpeGVkR3JpZExheW91dC9yZXMvbGF5b3V0L21haW4ueG1sCmluZGV4IDkzZTJkNWUuLmM2YmM1MmEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvRml4ZWRHcmlkTGF5b3V0L3Jlcy9sYXlvdXQvbWFpbi54bWwKKysrIGIvc2FtcGxlcy9GaXhlZEdyaWRMYXlvdXQvcmVzL2xheW91dC9tYWluLnhtbApAQCAtMyw4ICszLDggQEAKICAgICAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICB4bWxuczphcHA9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvY29tLmV4YW1wbGUuYW5kcm9pZC5maXhlZGdyaWRsYXlvdXQiCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZ3JpZCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYXBwOmNlbGxXaWR0aD0iODBkcCIKICAgICAgICAgYXBwOmNlbGxIZWlnaHQ9IjEwMGRwIgogICAgICAgICA+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0dsb2JhbFRpbWUvcmVzL2xheW91dC9nbG9iYWxfdGltZS54bWwgYi9zYW1wbGVzL0dsb2JhbFRpbWUvcmVzL2xheW91dC9nbG9iYWxfdGltZS54bWwKaW5kZXggMjM3MjA3Zi4uNmJiM2M3OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9HbG9iYWxUaW1lL3Jlcy9sYXlvdXQvZ2xvYmFsX3RpbWUueG1sCisrKyBiL3NhbXBsZXMvR2xvYmFsVGltZS9yZXMvbGF5b3V0L2dsb2JhbF90aW1lLnhtbApAQCAtMTUsNyArMTUsNyBAQAogLS0+CiAKIDxFZGl0VGV4dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMThzcCIKICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZ2xvYmFsX3RpbWVfdGV4dF90ZXh0IiAvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0hlbGxvQWN0aXZpdHkvcmVzL2xheW91dC9oZWxsb19hY3Rpdml0eS54bWwgYi9zYW1wbGVzL0hlbGxvQWN0aXZpdHkvcmVzL2xheW91dC9oZWxsb19hY3Rpdml0eS54bWwKaW5kZXggMmE0ZDJkZS4uYmFiOWM5YyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9IZWxsb0FjdGl2aXR5L3Jlcy9sYXlvdXQvaGVsbG9fYWN0aXZpdHkueG1sCisrKyBiL3NhbXBsZXMvSGVsbG9BY3Rpdml0eS9yZXMvbGF5b3V0L2hlbGxvX2FjdGl2aXR5LnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxFZGl0VGV4dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE4c3AiCiAgICAgYW5kcm9pZDphdXRvVGV4dD0idHJ1ZSIKICAgICBhbmRyb2lkOmNhcGl0YWxpemU9InNlbnRlbmNlcyIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0LWxhbmQvaG9tZS54bWwgYi9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC1sYW5kL2hvbWUueG1sCmluZGV4IGQ3MjNjNjkuLjhlZWNiZGIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0LWxhbmQvaG9tZS54bWwKKysrIGIvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQtbGFuZC9ob21lLnhtbApAQCAtMTcsOCArMTcsOCBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6aG9tZT0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9jb20uZXhhbXBsZS5hbmRyb2lkLmhvbWUiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSBBbGwgYXBwbGljYXRpb25zIG9uIHRoZSB0b3Agc2lkZSBvZiB0aGUgc2NyZWVuIC0tPgogICAgIDxHcmlkVmlldyBhbmRyb2lkOmlkPSJAK2lkL2FsbF9hcHBzIgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBhbmRyb2lkOnN0cmV0Y2hNb2RlPSJzcGFjaW5nV2lkdGgiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMS4wIgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpzdGFja0Zyb21Cb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iaW52aXNpYmxlIiAvPgogCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIGhvbWU6bWFyZ2luTGVmdD0iMWRpcCIKICAgICAgICAgaG9tZTptYXJnaW5SaWdodD0iMWRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIwZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNjVkaXAiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2FwcGxpY2F0aW9uX2JhY2tncm91bmQiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0LXBvcnQvaG9tZS54bWwgYi9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC1wb3J0L2hvbWUueG1sCmluZGV4IGQ3MjNjNjkuLjhlZWNiZGIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0LXBvcnQvaG9tZS54bWwKKysrIGIvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQtcG9ydC9ob21lLnhtbApAQCAtMTcsOCArMTcsOCBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6aG9tZT0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9jb20uZXhhbXBsZS5hbmRyb2lkLmhvbWUiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSBBbGwgYXBwbGljYXRpb25zIG9uIHRoZSB0b3Agc2lkZSBvZiB0aGUgc2NyZWVuIC0tPgogICAgIDxHcmlkVmlldyBhbmRyb2lkOmlkPSJAK2lkL2FsbF9hcHBzIgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICBhbmRyb2lkOnN0cmV0Y2hNb2RlPSJzcGFjaW5nV2lkdGgiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMS4wIgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpzdGFja0Zyb21Cb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iaW52aXNpYmxlIiAvPgogCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIGhvbWU6bWFyZ2luTGVmdD0iMWRpcCIKICAgICAgICAgaG9tZTptYXJnaW5SaWdodD0iMWRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIwZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNjVkaXAiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2FwcGxpY2F0aW9uX2JhY2tncm91bmQiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0L2FsbF9hcHBsaWNhdGlvbnNfYnV0dG9uLnhtbCBiL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0L2FsbF9hcHBsaWNhdGlvbnNfYnV0dG9uLnhtbAppbmRleCA4ODQzMGIzLi5iZWQ5OGRkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC9hbGxfYXBwbGljYXRpb25zX2J1dHRvbi54bWwKKysrIGIvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQvYWxsX2FwcGxpY2F0aW9uc19idXR0b24ueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc2hvd19hbGxfYXBwc19jaGVjayIKICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9ImZhbHNlIgogICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0iZmFsc2UiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2FsbF9hcHBsaWNhdGlvbnNfYmFja2dyb3VuZCIKICAgICAgICAgYW5kcm9pZDpidXR0b249IkBkcmF3YWJsZS9hbGxfYXBwbGljYXRpb25zIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQvd2FsbHBhcGVyLnhtbCBiL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0L3dhbGxwYXBlci54bWwKaW5kZXggOTJkYzY1ZS4uNzZmNWFmNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQvd2FsbHBhcGVyLnhtbAorKysgYi9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC93YWxscGFwZXIueG1sCkBAIC0xOSw4ICsxOSw4IEBACiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4gCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPiAKICAgICAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAKICAgICA8R2FsbGVyeSBhbmRyb2lkOmlkPSJAK2lkL2dhbGxlcnkiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzcwMDAwMDAwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0pldEJveS9yZXMvbGF5b3V0L21haW4ueG1sIGIvc2FtcGxlcy9KZXRCb3kvcmVzL2xheW91dC9tYWluLnhtbAppbmRleCBlYTIyNzdmLi5iMTE1NGFkIDEwMDc1NQotLS0gYS9zYW1wbGVzL0pldEJveS9yZXMvbGF5b3V0L21haW4ueG1sCisrKyBiL3NhbXBsZXMvSmV0Qm95L3Jlcy9sYXlvdXQvbWFpbi54bWwKQEAgLTEsMTEgKzEsMTEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKwlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogCTxjb20uZXhhbXBsZS5hbmRyb2lkLmpldGJveS5KZXRCb3lWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvSmV0Qm95VmlldyIKLQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IiAvPgorCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgLz4KIAogCTxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQiIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9oZWxwVGV4dCIKIAkJc3R5bGU9IkBzdHlsZS9oZWxwVGV4dCIgYW5kcm9pZDp2aXNpYmlsaXR5PSJpbnZpc2libGUiIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9MdW5hckxhbmRlci9BbmRyb2lkTWFuaWZlc3QueG1sIGIvc2FtcGxlcy9MdW5hckxhbmRlci9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDdmZGM1NzIuLjMwMTI5MWEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTHVuYXJMYW5kZXIvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9zYW1wbGVzL0x1bmFyTGFuZGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTIyLDExICsyMiwxMSBAQAogPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBwYWNrYWdlPSJjb20uZXhhbXBsZS5hbmRyb2lkLmx1bmFybGFuZGVyIj4KICAgICA8YXBwbGljYXRpb24gYW5kcm9pZDppY29uPSJAZHJhd2FibGUvYXBwX2x1bmFyX2xhbmRlciIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSI+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ikx1bmFyTGFuZGVyIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iTHVuYXJMYW5kZXIiIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotCQk8L2FjdGl2aXR5PgorICAgICAgICA8L2FjdGl2aXR5PgogICAgIDwvYXBwbGljYXRpb24+CiA8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9MdW5hckxhbmRlci9yZXMvbGF5b3V0L2x1bmFyX2xheW91dC54bWwgYi9zYW1wbGVzL0x1bmFyTGFuZGVyL3Jlcy9sYXlvdXQvbHVuYXJfbGF5b3V0LnhtbAppbmRleCA5YWQwNTM2Li5mMWE4OTkwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0x1bmFyTGFuZGVyL3Jlcy9sYXlvdXQvbHVuYXJfbGF5b3V0LnhtbAorKysgYi9zYW1wbGVzL0x1bmFyTGFuZGVyL3Jlcy9sYXlvdXQvbHVuYXJfbGF5b3V0LnhtbApAQCAtMTUsMTcgKzE1LDE3IEBACiAtLT4KIAogPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgCiAgICAgPGNvbS5leGFtcGxlLmFuZHJvaWQubHVuYXJsYW5kZXIuTHVuYXJWaWV3CiAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2x1bmFyIgotICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIvPgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ii8+CiAgICAgCiAgICAgPFJlbGF0aXZlTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIgPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgPgogICAgICAgICA8VGV4dFZpZXcKICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCiAJCSAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2x1bmFyX2xheW91dF90ZXh0X3RleHQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0x1bmFyTGFuZGVyL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2x1bmFybGFuZGVyL0x1bmFyTGFuZGVyLmphdmEgYi9zYW1wbGVzL0x1bmFyTGFuZGVyL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2x1bmFybGFuZGVyL0x1bmFyTGFuZGVyLmphdmEKaW5kZXggN2Y1NGZmNi4uYTRmZmVmNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9MdW5hckxhbmRlci9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9sdW5hcmxhbmRlci9MdW5hckxhbmRlci5qYXZhCisrKyBiL3NhbXBsZXMvTHVuYXJMYW5kZXIvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvbHVuYXJsYW5kZXIvTHVuYXJMYW5kZXIuamF2YQpAQCAtMTI0LDkgKzEyNCw2IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwogCi0gICAgICAgIC8vIHR1cm4gb2ZmIHRoZSB3aW5kb3cncyB0aXRsZSBiYXIKLSAgICAgICAgcmVxdWVzdFdpbmRvd0ZlYXR1cmUoV2luZG93LkZFQVRVUkVfTk9fVElUTEUpOwotCiAgICAgICAgIC8vIHRlbGwgc3lzdGVtIHRvIHVzZSB0aGUgbGF5b3V0IGRlZmluZWQgaW4gb3VyIFhNTCBmaWxlCiAgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lmx1bmFyX2xheW91dCk7CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uL3Jlcy9sYXlvdXQtbGFuZC9tYWluLnhtbCBiL3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uL3Jlcy9sYXlvdXQtbGFuZC9tYWluLnhtbAppbmRleCBmNzA0NDI1Li41MTUzNDlmIDEwMDY0NAotLS0gYS9zYW1wbGVzL011bHRpUmVzb2x1dGlvbi9yZXMvbGF5b3V0LWxhbmQvbWFpbi54bWwKKysrIGIvc2FtcGxlcy9NdWx0aVJlc29sdXRpb24vcmVzL2xheW91dC1sYW5kL21haW4ueG1sCkBAIC0xNiwyOCArMTYsMjggQEAKIAogPExpbmVhckxheW91dAogICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCiAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JhY2tncm91bmQiPgogCiAgIDxMaW5lYXJMYXlvdXQKICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSBOb3RpY2UgdGhhdCB3aWRnZXQgc2l6ZXMgYXJlIGV4cHJlc3NlZCBpbiBkaXAsIG9yIGRldmljZS1pbmRlcGVuZGVudAogICAgICAgICAgcGl4ZWxzLCB3aGlsZSB0ZXh0IHNpemVzIGFyZSBleHByZXNzZWQgaW4gc3AsIG9yIHNjYWxlLWluZGVwZW5kZW50CiAgICAgICAgICBwaXhlbHMsIHRvIGZhY3RvciBpbiB1c2VyLWNob3NlbiBmb250IHNpemVzLiAtLT4KICAgICA8RnJhbWVMYXlvdXQKICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2ltYWdlX2NvbnRhaW5lciIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ltYWdlX2NvbnRhaW5lciI+CiAgICAgICA8SW1hZ2VWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaW1hZ2VfdmlldyIKICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImZpdENlbnRlciIvPgogICAgICAgPFRleHRWaWV3CkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgPExpbmVhckxheW91dAogICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIxMGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9InRvcCI+CmRpZmYgLS1naXQgYS9zYW1wbGVzL011bHRpUmVzb2x1dGlvbi9yZXMvbGF5b3V0L21haW4ueG1sIGIvc2FtcGxlcy9NdWx0aVJlc29sdXRpb24vcmVzL2xheW91dC9tYWluLnhtbAppbmRleCA0YzAxZTgyLi45OTEwODQ5IDEwMDY0NAotLS0gYS9zYW1wbGVzL011bHRpUmVzb2x1dGlvbi9yZXMvbGF5b3V0L21haW4ueG1sCisrKyBiL3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uL3Jlcy9sYXlvdXQvbWFpbi54bWwKQEAgLTE2LDI3ICsxNiwyNyBAQAogCiA8TGluZWFyTGF5b3V0CiAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JhY2tncm91bmQiPgogCiAgIDxMaW5lYXJMYXlvdXQKICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSBOb3RpY2UgdGhhdCB3aWRnZXQgc2l6ZXMgYXJlIGV4cHJlc3NlZCBpbiBkaXAsIG9yIGRldmljZS1pbmRlcGVuZGVudAogICAgICAgICAgcGl4ZWxzLCB3aGlsZSB0ZXh0IHNpemVzIGFyZSBleHByZXNzZWQgaW4gc3AsIG9yIHNjYWxlLWluZGVwZW5kZW50CiAgICAgICAgICBwaXhlbHMsIHRvIGZhY3RvciBpbiB1c2VyLWNob3NlbiBmb250IHNpemVzLiAtLT4KICAgICA8RnJhbWVMYXlvdXQKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ltYWdlX2NvbnRhaW5lciIKICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2ltYWdlX2NvbnRhaW5lciI+CiAgICAgICA8SW1hZ2VWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaW1hZ2VfdmlldyIKICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImZpdENlbnRlciIvPgogICAgICAgPFRleHRWaWV3CkBAIC01NSw3ICs1NSw3IEBACiAgIDwvTGluZWFyTGF5b3V0PgogCiAgIDxMaW5lYXJMYXlvdXQKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjEwZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9hZGRfaXRlbS54bWwgYi9zYW1wbGVzL015U2FtcGxlUnNzL3Jlcy9sYXlvdXQvYWRkX2l0ZW0ueG1sCmluZGV4IDgxOTFiZjUuLjgyNjA4MmQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9hZGRfaXRlbS54bWwKKysrIGIvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L2FkZF9pdGVtLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiPgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiPgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX2xhYmVsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKQEAgLTI2LDExICsyNiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWRkX2l0ZW1fdGl0bGUiLz4KICAgICAgICAgICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC90aXRsZV90ZXh0Ym94IgogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF90b1JpZ2h0T2Y9IkBpZC90aXRsZV9sYWJlbCIvPgogICAgICAgICAgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3VybF90ZXh0Ym94IgogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3RpdGxlX3RleHRib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduTGVmdD0iQGlkL3RpdGxlX3RleHRib3giLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL015U2FtcGxlUnNzL3Jlcy9sYXlvdXQvbWFpbl9zY3JlZW4ueG1sIGIvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L21haW5fc2NyZWVuLnhtbAppbmRleCA1MjkyYmIyLi4zY2FlNDg3IDEwMDc1NQotLS0gYS9zYW1wbGVzL015U2FtcGxlUnNzL3Jlcy9sYXlvdXQvbWFpbl9zY3JlZW4ueG1sCisrKyBiL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbi54bWwKQEAgLTE1LDIxICsxNSwyMSBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgICAgICAgYW5kcm9pZDpzY3JvbGxiYXJzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcnNzTGlzdFZpZXciCiAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBweCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiMwMENDMDAiLz4KICAgICAgICAgICAgICAgICAgIAogCQkJCTxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcnNzV2ViVmlldyIKIAkJCSAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM3N0NDMDAwMCIKIAkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBweCIKLQkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQkJICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KIAogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL015U2FtcGxlUnNzL3Jlcy9sYXlvdXQvbWFpbl9zY3JlZW4yLnhtbCBiL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbjIueG1sCmluZGV4IDM2YjBhZjQuLjgyNmU1YmMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbjIueG1sCisrKyBiL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbjIueG1sCkBAIC0xNSwxOSArMTUsMTkgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIgCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiIAorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgICAgICAgYW5kcm9pZDpzY3JvbGxiYXJzPSJ2ZXJ0aWNhbCI+CiAJICAgICAgICAgICAgICAgICAKIAkgICAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcnNzTGlzdFZpZXciIAogCSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwcHgiCi0JICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogCSAgICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjOTkwMEZGMDAiLz4KICAgICAgICAgICAgICAgICAgIAogCQkJCTxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcnNzV2ViVmlldyIKIAkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBweCIKLQkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQkJICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjIiLz4KIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ob3RlUGFkL3Jlcy9sYXlvdXQvbm90ZV9lZGl0b3IueG1sIGIvc2FtcGxlcy9Ob3RlUGFkL3Jlcy9sYXlvdXQvbm90ZV9lZGl0b3IueG1sCmluZGV4IGM1NGE5NjMuLmQ3ZGE5OWUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTm90ZVBhZC9yZXMvbGF5b3V0L25vdGVfZWRpdG9yLnhtbAorKysgYi9zYW1wbGVzL05vdGVQYWQvcmVzL2xheW91dC9ub3RlX2VkaXRvci54bWwKQEAgLTE3LDggKzE3LDggQEAKIDx2aWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBjbGFzcz0iY29tLmV4YW1wbGUuYW5kcm9pZC5ub3RlcGFkLk5vdGVFZGl0b3IkTGluZWRFZGl0VGV4dCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGUiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmNvbG9yL3RyYW5zcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZz0iNWRpcCIKICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ob3RlUGFkL3Jlcy9sYXlvdXQvbm90ZXNsaXN0X2l0ZW0ueG1sIGIvc2FtcGxlcy9Ob3RlUGFkL3Jlcy9sYXlvdXQvbm90ZXNsaXN0X2l0ZW0ueG1sCmluZGV4IGIxNjc3MzQuLmUxMWM1ZWUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTm90ZVBhZC9yZXMvbGF5b3V0L25vdGVzbGlzdF9pdGVtLnhtbAorKysgYi9zYW1wbGVzL05vdGVQYWQvcmVzL2xheW91dC9ub3Rlc2xpc3RfaXRlbS54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC90ZXh0MSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Ij9hbmRyb2lkOmF0dHIvbGlzdFByZWZlcnJlZEl0ZW1IZWlnaHQiCiAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZUxhcmdlIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9SU1NSZWFkZXIvcmVzL2xheW91dC9yc3NfbGF5b3V0LnhtbCBiL3NhbXBsZXMvUlNTUmVhZGVyL3Jlcy9sYXlvdXQvcnNzX2xheW91dC54bWwKaW5kZXggODQyZjRmNy4uODM4NjU2YSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9SU1NSZWFkZXIvcmVzL2xheW91dC9yc3NfbGF5b3V0LnhtbAorKysgYi9zYW1wbGVzL1JTU1JlYWRlci9yZXMvbGF5b3V0L3Jzc19sYXlvdXQueG1sCkBAIC0xNSwxMyArMTUsMTMgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdXJsdGV4dCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIAkgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTJzcCIKIAkgICAgYW5kcm9pZDphdXRvVGV4dD0iZmFsc2UiCkBAIC0zNCw3ICszNCw3IEBACiAJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yc3NfbGF5b3V0X2Rvd25sb2FkX3RleHQiIC8+CiAJCiAJPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvc3RhdHVzdGV4dCIKLQkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIAkgICAgYW5kcm9pZDphdXRvVGV4dD0iZmFsc2UiCiAJICAgIGFuZHJvaWQ6Y2FwaXRhbGl6ZT0ibm9uZSIKQEAgLTQyLDcgKzQyLDcgQEAKIAkgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jzc19sYXlvdXRfc3RhdHVzdGV4dF90ZXh0IiAvPgogCQogCTxMaXN0VmlldyBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgotCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKIAkgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogCSAgICBhbmRyb2lkOmRyYXdTZWxlY3Rvck9uVG9wPSJmYWxzZSIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeS9yZXMvbGF5b3V0L21haW4ueG1sIGIvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeS9yZXMvbGF5b3V0L21haW4ueG1sCmluZGV4IGQwZGQ1MjIuLjY2NjQxNmQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU2VhcmNoYWJsZURpY3Rpb25hcnkvcmVzL2xheW91dC9tYWluLnhtbAorKysgYi9zYW1wbGVzL1NlYXJjaGFibGVEaWN0aW9uYXJ5L3Jlcy9sYXlvdXQvbWFpbi54bWwKQEAgLTE4LDE4ICsxOCwxOCBAQAogLS0+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICA8VGV4dFZpZXcKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dEZpZWxkIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zZWFyY2hfaW5zdHJ1Y3Rpb25zIi8+CiAKICAgICA8TGlzdFZpZXcKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbGlzdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeS9yZXMvbGF5b3V0L3dvcmQueG1sIGIvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeS9yZXMvbGF5b3V0L3dvcmQueG1sCmluZGV4IGJhMWEzZGEuLjIxYTVlZDQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU2VhcmNoYWJsZURpY3Rpb25hcnkvcmVzL2xheW91dC93b3JkLnhtbAorKysgYi9zYW1wbGVzL1NlYXJjaGFibGVEaWN0aW9uYXJ5L3Jlcy9sYXlvdXQvd29yZC54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgPFRleHRWaWV3CiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3dvcmQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTGFyZ2UiCkBAIC0zMiw3ICszMiw3IEBACiAgICAgPFRleHRWaWV3CiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RlZmluaXRpb24iCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NlYXJjaF9pbnN0cnVjdGlvbnMiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIxMGRpcCIgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvU2tlbGV0b25BcHAvcmVzL2xheW91dC9za2VsZXRvbl9hY3Rpdml0eS54bWwgYi9zYW1wbGVzL1NrZWxldG9uQXBwL3Jlcy9sYXlvdXQvc2tlbGV0b25fYWN0aXZpdHkueG1sCmluZGV4IGI4ZGNhYzcuLjFhYTQ5ZGQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU2tlbGV0b25BcHAvcmVzL2xheW91dC9za2VsZXRvbl9hY3Rpdml0eS54bWwKKysrIGIvc2FtcGxlcy9Ta2VsZXRvbkFwcC9yZXMvbGF5b3V0L3NrZWxldG9uX2FjdGl2aXR5LnhtbApAQCAtMjIsNyArMjIsNyBAQAogICAgICBhIHJvdywgaGVyZSBzZXQgdG8gYmUgdmVydGljYWwgKHNvIHRoZSBmaXJzdCBpcyBhdCB0aGUgdG9wKSAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDwhLS0gRmlyc3QgdmlldyBpcyBhIHRleHQgZWRpdG9yLiAgV2Ugd2FudCBpdCB0byB1c2UgYWxsIGF2YWlsYWJsZQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICAgaXMgYXZhaWxhYmxlIHRvIGl0LiAgTm90ZSB0aGUgdXNlIG9mIHRoZSAiaWQiIGF0dHJpYnV0ZSwgd2hpY2gKICAgICAgICAgIGFsbG93cyB1cyB0byBmaW5kIHRoaXMgb2JqZWN0IGZyb20gdGhlIEphdmEgY29kZS4gLS0+CiAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdG9yIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmF1dG9UZXh0PSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmNhcGl0YWxpemU9InNlbnRlbmNlcyIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9TbmFrZS9BbmRyb2lkTWFuaWZlc3QueG1sIGIvc2FtcGxlcy9TbmFrZS9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDE3NGU4YjQuLjM2YTk5MzkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU25ha2UvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9zYW1wbGVzL1NuYWtlL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTIzLDYgKzIzLDcgQEAKICAgICBwYWNrYWdlPSJjb20uZXhhbXBsZS5hbmRyb2lkLnNuYWtlIj4KICAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpsYWJlbD0iU25ha2Ugb24gYSBQaG9uZSI+CiAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJTbmFrZSIKKyAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTm9UaXRsZUJhciIKICAgICAgICAgYW5kcm9pZDpzY3JlZW5PcmllbnRhdGlvbj0icG9ydHJhaXQiCiAgICAgICAgIGFuZHJvaWQ6Y29uZmlnQ2hhbmdlcz0ia2V5Ym9hcmRIaWRkZW58b3JpZW50YXRpb24iPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CmRpZmYgLS1naXQgYS9zYW1wbGVzL1NuYWtlL3Jlcy9sYXlvdXQvc25ha2VfbGF5b3V0LnhtbCBiL3NhbXBsZXMvU25ha2UvcmVzL2xheW91dC9zbmFrZV9sYXlvdXQueG1sCmluZGV4IDU4M2MwYzQuLmVmOGFiZTMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvU25ha2UvcmVzL2xheW91dC9zbmFrZV9sYXlvdXQueG1sCisrKyBiL3NhbXBsZXMvU25ha2UvcmVzL2xheW91dC9zbmFrZV9sYXlvdXQueG1sCkBAIC0xNSwxOSArMTUsMTkgQEAKIC0tPgogCiA8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKwlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAkKIAk8Y29tLmV4YW1wbGUuYW5kcm9pZC5zbmFrZS5TbmFrZVZpZXcKIAkgYW5kcm9pZDppZD0iQCtpZC9zbmFrZSIKLQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgdGlsZVNpemU9IjI0IgogICAgICAgICAgICAgICAgIC8+CiAJCiAJPFJlbGF0aXZlTGF5b3V0Ci0JCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIgPgorCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgPgogCQkKIAkJPFRleHRWaWV3CiAJCSBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1NuYWtlL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3NuYWtlL1NuYWtlLmphdmEgYi9zYW1wbGVzL1NuYWtlL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3NuYWtlL1NuYWtlLmphdmEKaW5kZXggNWZkYzAyNC4uNjMwNjY5MyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9TbmFrZS9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9zbmFrZS9TbmFrZS5qYXZhCisrKyBiL3NhbXBsZXMvU25ha2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvc25ha2UvU25ha2UuamF2YQpAQCAtNDUsOSArNDUsNiBAQAogICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKIAotICAgICAgICAvLyBObyBUaXRsZSBiYXIKLSAgICAgICAgcmVxdWVzdFdpbmRvd0ZlYXR1cmUoV2luZG93LkZFQVRVUkVfTk9fVElUTEUpOwotCiAgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnNuYWtlX2xheW91dCk7CiAKICAgICAgICAgbVNuYWtlVmlldyA9IChTbmFrZVZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLnNuYWtlKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvU29mdEtleWJvYXJkL3Jlcy9sYXlvdXQvaW5wdXQueG1sIGIvc2FtcGxlcy9Tb2Z0S2V5Ym9hcmQvcmVzL2xheW91dC9pbnB1dC54bWwKaW5kZXggMWI1NzQ2OC4uZDc4YTlmMiAxMDA3NTUKLS0tIGEvc2FtcGxlcy9Tb2Z0S2V5Ym9hcmQvcmVzL2xheW91dC9pbnB1dC54bWwKKysrIGIvc2FtcGxlcy9Tb2Z0S2V5Ym9hcmQvcmVzL2xheW91dC9pbnB1dC54bWwKQEAgLTIyLDYgKzIyLDYgQEAKICAgICAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2tleWJvYXJkIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEJvdHRvbT0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UvQW5kcm9pZC5tayBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTU1YTBmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMTIgQEAKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IHNhbXBsZXMKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtc3ViZGlyLWphdmEtZmlsZXMpCisKK0xPQ0FMX1NES19WRVJTSU9OIDo9IGN1cnJlbnQKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IFZvaWNlUmVjb2duaXRpb25TZXJ2aWNlCisKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9BbmRyb2lkTWFuaWZlc3QueG1sIGIvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTI4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSw1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKy8qCisqKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKy0tPgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgcGFja2FnZT0iY29tLmV4YW1wbGUuYW5kcm9pZC52b2ljZXJlY29nbml0aW9uc2VydmljZSI+CisKKyAgICA8dXNlcy1zZGsgYW5kcm9pZDptaW5TZGtWZXJzaW9uPSJGcm95byIgLz4KKworICAgIDxhcHBsaWNhdGlvbj4KKyAgICAgICAgCisgICAgICAgIDwhLS0gVGhlIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIHZvaWNlIHJlY29nbml0aW9uLiBOb3RlIHRoYXQgYSBsYWJlbAorICAgICAgICAgICAgIGZvciB0aGUgc2VydmljZSBpcyBpbXBvcnRhbnQgdG8gcHJvdmlkZSwgYXMgdGhpcyBpcyB3aGF0IHdpbGwgc2hvdworICAgICAgICAgICAgIHRvIHVzZXJzIGlmIHRoZXkgaGF2ZSB0byBjaG9vc2UgYmV0d2VlbiBtdWx0aXBsZSByZWNvZ25pemVycyBpbgorICAgICAgICAgICAgIHN5c3RlbSBzZXR0aW5ncy4gLS0+CisgICAgICAgIDxzZXJ2aWNlIGFuZHJvaWQ6bmFtZT0iVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9zZXJ2aWNlX25hbWUiPgorCisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8IS0tIEhlcmUgd2UgaWRlbnRpZnkgdGhhdCB3ZSBhcmUgYSBSZWNvZ25pdGlvblNlcnZpY2UgYnkgc3BlY2lmeWluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICB3ZSBzYXRpc2Z5IFJlY29nbml0aW9uU2VydmljZSdzIGludGVyZmFjZSBpbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB2YWx1ZSBpcyBkZWZpbmVkIGF0IFJlY29nbml0aW9uU2VydmljZS5TRVJWSUNFX0lOVEVSRkFDRS4gLS0+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuc3BlZWNoLlJlY29nbml0aW9uU2VydmljZSIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5ERUZBVUxUIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorCisgICAgICAgICAgICA8IS0tIFRoaXMgcG9pbnRzIHRvIGEgbWV0YWRhdGEgeG1sIGZpbGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCisgICAgICAgICAgICAgICAgIFJlY29nbml0aW9uU2VydmljZSAtIHNwZWNpZmljYWxseSwgdGhlIG5hbWUgb2YgdGhlIHNldHRpbmdzIGFjdGl2aXR5IHRvCisgICAgICAgICAgICAgICAgIGV4cG9zZSBpbiBzeXN0ZW0gc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICBUaGUgY29uc3RhbnQgdmFsdWUgaXMgZGVmaW5lZCBhdCBSZWNvZ25pdGlvblNlcnZpY2UuU0VSVklDRV9NRVRBX0RBVEEuIC0tPgorICAgICAgICAgICAgPG1ldGEtZGF0YSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuc3BlZWNoIiBhbmRyb2lkOnJlc291cmNlPSJAeG1sL3JlY29nbml6ZXIiIC8+CisKKyAgICAgICAgPC9zZXJ2aWNlPgorCisgICAgICAgIDwhLS0gVGhlIHNldHRpbmdzIGFjdGl2aXR5IGZvciB0aGlzIHNhbXBsZSB2b2ljZSByZWNvZ25pemVyLiAtLT4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLlZvaWNlUmVjb2duaXRpb25TZXR0aW5ncyIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3NldHRpbmdzX25hbWUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpleHBvcnRlZD0idHJ1ZSIgLz4KKworICAgIDwvYXBwbGljYXRpb24+Cis8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9faW5kZXguaHRtbCBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UvX2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2ZjNjYgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UvX2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPHA+QSBzYW1wbGUgYXBwbGljYXRpb24gdGhhdCBkZW1vbnN0cmF0ZXMgQW5kcm9pZCdzIHBsdWdnYWJsZSB2b2ljZSByZWNvZ25pdGlvbiBmcmFtZXdvcmsuPC9wPgorCis8cD5UaGlzIGFwcGxpY2F0aW9uIGluY2x1ZGVzIGEgCis8YSBocmVmPSJzcmMvY29tL2V4YW1wbGUvYW5kcm9pZC92b2ljZXJlY29nbml0aW9uc2VydmljZS9Wb2ljZVJlY29nbml0aW9uU2VydmljZS5odG1sIj4KK3NhbXBsZSB2b2ljZSByZWNvZ25pdGlvbiBzZXJ2aWNlPC9hPiAoYSBzdWJjbGFzcyBvZiAKKzxjb2RlPjxhIGhyZWY9Ii4uLy4uLy4uL3JlZmVyZW5jZS9hbmRyb2lkL3NwZWVjaC9SZWNvZ25pdGlvblNlcnZpY2UuaHRtbCI+UmVjb2duaXRpb25TZXJ2aWNlPC9hPjwvY29kZT4pLAorYW5kIGEgPGEgaHJlZj0ic3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvdm9pY2VyZWNvZ25pdGlvbnNlcnZpY2UvVm9pY2VSZWNvZ25pdGlvblNldHRpbmdzLmh0bWwiPgorc2V0dGluZ3MgYWN0aXZpdHk8L2E+IGZvciB0aGF0IHNlcnZpY2UuIEl0IHNob3dzIHRoZSBiYXNpYyBza2VsZXRvbiBmb3Igc2V0dGluZyB1cCBhIHJlY29nbml0aW9uCitzZXJ2aWNlIGFuZCBleHBvc2luZyBpdHMgc2V0dGluZ3MgYWN0aXZpdHkgdG8gc2V0dGluZ3MuPC9wPgorCis8cD5UaGUgYmVoYXZpb3IgaXMgZXh0cmVtZWx5IHNpbXBsZSAtIGl0IGRvZXMgbm8gcmVhbCB2b2ljZSByZWNvZ25pdGlvbiwgYW5kIGp1c3QgcmV0dXJucyBhCitmaXhlZCBzZXQgb2YgcmVzdWx0cyBpbW1lZGlhdGVseS4gVGhlIHJlc3VsdHMgY2FuIGJlIGVpdGhlciBhIHNldCBvZiBsZXR0ZXJzIG9yIG51bWJlcnMsIGFzCitjaG9zZW4gYnkgdGhlIHVzZXIgaW4gdGhlIHNpbXBsaXN0aWMgc2V0dGluZ3MgYWN0aXZpdHkuPC9wPgorCis8cD5JbnN0YWxsaW5nIHRoaXMgYXBwbGljYXRpb24gb250byBhIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgdm9pY2UgcmVjb2duaXRpb24gc2VydmljZQorYXZhaWxhYmxlIHdpbGwgZXhwb3NlIGEgbmV3IG9wdGlvbiB1bmRlciAidm9pY2UgaW5wdXQgJmFtcDsgb3V0cHV0IiBzZXR0aW5ncywgdG8gbGV0IHRoZQordXNlciBjaG9vc2UgYmV0d2VlbiB0aGUgbXVsdGlwbGUgc2VydmljZXMuPC9wPgorCis8cD5Ob3RlIHRoYXQgZHVlIHRvIGl0cyBzaW1wbGljaXR5LCB0aGlzIHZvaWNlIHJlY29nbml0aW9uIHNlcnZpY2UgaXMgbm90IGNvbXBhdGlibGUgd2l0aAorZXZlcnkgYXBwbGljYXRpb24gdGhhdCB3aXNoZXMgdG8gdXNlIHZvaWNlIHJlY29nbml0aW9uLiBGb3IgZXhhbXBsZSwgYmVjYXVzZSBHb29nbGUncworVm9pY2VTZWFyY2ggYXBwbGljYXRpb24gcmVsaWVzIG9uIG1vcmUgdGhhbiBqdXN0IHNpbXBsZSB0ZXh0IHJlc3VsdHMsIGl0IG1heSBub3Qgd29yaworYXMgZXhwZWN0ZWQgaWYgdGhpcyBzYW1wbGUgcmVjb2duaXRpb24gc2VydmljZSBpcyBjaG9zZW4gaW4gc2V0dGluZ3MuIE90aGVyIHNpbXBsZXIKK2FwcGxpY2F0aW9ucywgbGlrZSB2b2ljZSBpbnB1dCBvbiB0aGUga2V5Ym9hcmQgKGUuZy4sIGluIExhdGluSU1FKSwgYXJlIG1vcmUgbGlrZWx5IHRvCit3b3JrIGFzIGV4cGVjdGVkIC0gcmV0dXJuaW5nIGp1c3QgdGhlIHZlcnkgc2ltcGxlIGxpc3Qgb2YgcmVzdWx0cyB0byB0aGUgYXBwbGljYXRpb24uPC9wPgorCQorPHA+U2VlIGFsc286PC9wPgorPHVsPgorICA8bGk+PGEgaHJlZj0iLi4vLi4vLi4vcmVmZXJlbmNlL2FuZHJvaWQvc3BlZWNoL1JlY29nbml0aW9uU2VydmljZS5odG1sIj5SZWNvZ25pdGlvblNlcnZpY2U8L2E+PC9saT4KKzwvdWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzIwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKy8qCisqKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKy0tPgorPHJlc291cmNlcyB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgCisgICAgPCEtLSBUaGUgbmFtZSBmb3IgdGhlIHJlY29nbml6ZXIgLSB0byBiZSBzaG93biBpbiBzeXN0ZW0gc2V0dGluZ3MuIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIj5TYW1wbGUgUmVjb2duaXplcjwvc3RyaW5nPgorICAgICAgICAKKyAgICA8IS0tIFRoZSBuYW1lIG9mIHRoZSBzZXR0aW5ncyBhY3Rpdml0eS4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJzZXR0aW5nc19uYW1lIj5Wb2ljZSBSZWNvZ25pdGlvbiBTZXR0aW5nczwvc3RyaW5nPgorICAgIAorICAgIDwhLS0gVGhlIHRpdGxlIG9mIHRoZSBwcmVmZXJlbmNlIGZvciB0aGUgdHlwZSBvZiByZXN1bHRzIHRvIHJldHVybiAobGV0dGVycyBvciBudW1iZXJzKS4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJyZXN1bHRzX3R5cGVfdGl0bGUiPlJlc3VsdHMgdHlwZTwvc3RyaW5nPgorICAgIAorICAgIDwhLS0gVGhlIGVudHJ5IG5hbWVzIG9mIHRoZSBwcmVmZXJlbmNlIGZvciB0aGUgdHlwZSBvZiByZXN1bHRzIHRvIHJldHVybgorICAgICAgICAgKGxldHRlcnMgb3IgbnVtYmVycykuIC0tPgorICAgIDxzdHJpbmctYXJyYXkgbmFtZT0icmVzdWx0c190eXBlX2VudHJpZXMiPgorICAgICAgICA8aXRlbT5MZXR0ZXJzPC9pdGVtPgorICAgICAgICA8aXRlbT5OdW1iZXJzPC9pdGVtPgorICAgIDwvc3RyaW5nLWFycmF5PgorICAgIAorICAgIDwhLS0gVGhlIGVudHJ5IHZhbHVlcyBvZiB0aGUgcHJlZmVyZW5jZSBmb3IgdGhlIHR5cGUgb2YgcmVzdWx0cyB0byByZXR1cm4KKyAgICAgICAgIChsZXR0ZXJzIG9yIG51bWJlcnMpLiAtLT4KKyAgICA8c3RyaW5nLWFycmF5IG5hbWU9InJlc3VsdHNfdHlwZV92YWx1ZXMiPgorICAgICAgICA8aXRlbT4wPC9pdGVtPgorICAgICAgICA8aXRlbT4xPC9pdGVtPgorICAgIDwvc3RyaW5nLWFycmF5PgorICAgIAorICAgIDwhLS0gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByZWZlcmVuY2UgZm9yIHRoZSB0eXBlIG9mIHJlc3VsdHMgdG8gcmV0dXJuCisgICAgICAgICAobGV0dGVycyBvciBudW1iZXJzKS4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJyZXN1bHRzX3R5cGVfZGVmYXVsdF92YWx1ZSI+MDwvc3RyaW5nPgorCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UvcmVzL3htbC9wcmVmZXJlbmNlcy54bWwgYi9zYW1wbGVzL1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlL3Jlcy94bWwvcHJlZmVyZW5jZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWUwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlL3Jlcy94bWwvcHJlZmVyZW5jZXMueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8UHJlZmVyZW5jZVNjcmVlbiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvc2V0dGluZ3NfbmFtZSI+CisKKyAgICA8IS0tIFRoaXMgc2V0dGluZyBsZXRzIHlvdSBjaG9vc2Ugd2hhdCBraW5kIG9mIGZha2UgcmVzdWx0cyB5b3UgZ2V0IGZyb20KKyAgICAgICAgIHRoaXMgc2FtcGxlIHJlY29nbml6ZXIuIElmIHlvdSBjaG9vc2UgImxldHRlcnMiLCB5b3UnbGwgZ2V0IGxldHRlcnMKKyAgICAgICAgIGxpa2UgImEiLCAiYiIsICJjIiBpbiB0aGUgbGlzdCBvZiByZXN1bHRzLiBJZiB5b3UgY2hvb3NlICJudW1iZXJzIiwKKyAgICAgICAgIHlvdSdsbCBnZXQgbnVtYmVycyBsaWtlICIxIiwgIjIiLCAiMyIgaW4gdGhlIGxpc3Qgb2YgcmVzdWx0cy4gLS0+CisgICAgPExpc3RQcmVmZXJlbmNlCisgICAgICAgICAgICBhbmRyb2lkOmtleT0icmVzdWx0c190eXBlIgorICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9yZXN1bHRzX3R5cGVfdGl0bGUiCisgICAgICAgICAgICBhbmRyb2lkOmVudHJpZXM9IkBhcnJheS9yZXN1bHRzX3R5cGVfZW50cmllcyIKKyAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9yZXN1bHRzX3R5cGVfdmFsdWVzIgorICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9yZXN1bHRzX3R5cGVfdGl0bGUiCisgICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9yZXN1bHRzX3R5cGVfZGVmYXVsdF92YWx1ZSIKKyAgICAvPgorCis8L1ByZWZlcmVuY2VTY3JlZW4+CmRpZmYgLS1naXQgYS9zYW1wbGVzL1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlL3Jlcy94bWwvcmVjb2duaXplci54bWwgYi9zYW1wbGVzL1ZvaWNlUmVjb2duaXRpb25TZXJ2aWNlL3Jlcy94bWwvcmVjb2duaXplci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiNWM4YQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UvcmVzL3htbC9yZWNvZ25pemVyLnhtbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCistLT4KKworPCEtLSBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIFhNTCBmaWxlIHByb3ZpZGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICAgICBmb3IgdGhlIHNhbXBsZSB2b2ljZSByZWNvZ25pemVyLiAtLT4KKworPHJlY29nbml0aW9uLXNlcnZpY2UgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOnNldHRpbmdzQWN0aXZpdHk9ImNvbS5leGFtcGxlLmFuZHJvaWQudm9pY2VyZWNvZ25pdGlvbnNlcnZpY2UuVm9pY2VSZWNvZ25pdGlvblNldHRpbmdzIgorLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvdm9pY2VyZWNvZ25pdGlvbnNlcnZpY2UvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UuamF2YSBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvdm9pY2VyZWNvZ25pdGlvbnNlcnZpY2UvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQxNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC92b2ljZXJlY29nbml0aW9uc2VydmljZS9Wb2ljZVJlY29nbml0aW9uU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQudm9pY2VyZWNvZ25pdGlvbnNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5zcGVlY2guUmVjb2duaXRpb25NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3BlZWNoLlJlY29nbml0aW9uU2VydmljZTsKKworLyoqCisgKiBBIHNhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHtAbGluayBSZWNvZ25pdGlvblNlcnZpY2V9LiBUaGlzIHZlcnkgc2ltcGxlIGltcGxlbWVudGF0aW9uIGRvZXMKKyAqIG5vIGFjdHVhbCB2b2ljZSByZWNvZ25pdGlvbi4gSXQganVzdCBpbW1lZGlhdGVseSByZXR1cm5zIGZha2UgcmVjb2duaXRpb24gcmVzdWx0cy4KKyAqIERlcGVuZGluZyBvbiB0aGUgc2V0dGluZyBjaG9zZW4gaW4ge0BsaW5rIFZvaWNlUmVjb2duaXRpb25TZXR0aW5nc30sIGl0IGVpdGhlciByZXR1cm5zIGEKKyAqIGxpc3Qgb2YgbGV0dGVycyAoImEiLCAiYiIsICJjIiksIG9yIGEgbGlzdCBvZiBudW1iZXJzICgiMSIsICIyIiwgIjMiKS4KKyAqLworcHVibGljIGNsYXNzIFZvaWNlUmVjb2duaXRpb25TZXJ2aWNlIGV4dGVuZHMgUmVjb2duaXRpb25TZXJ2aWNlIHsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ2FuY2VsKENhbGxiYWNrIGxpc3RlbmVyKSB7CisgICAgICAgIC8vIEEgcmVhbCByZWNvZ25pemVyIHdvdWxkIGRvIHNvbWV0aGluZyB0byBzaHV0IGRvd24gcmVjb2duaXRpb24gaGVyZS4KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKEludGVudCByZWNvZ25pemVySW50ZW50LCBDYWxsYmFjayBsaXN0ZW5lcikgeworICAgICAgICAvLyBBIHJlYWwgcmVjb2duaXplciB3b3VsZCBwcm9iYWJseSB1dGlsaXplIGEgbG90IG9mIHRoZSBvdGhlciBsaXN0ZW5lciBjYWxsYmFjaworICAgICAgICAvLyBtZXRob2RzLiBCdXQgd2UnbGwganVzdCBza2lwIGFsbCB0aGF0IGFuZCBwcmV0ZW5kIHdlJ3ZlIGdvdCBhIHJlc3VsdC4KKyAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICAKKyAgICAgICAgU2hhcmVkUHJlZmVyZW5jZXMgcHJlZnMgPSBnZXRTaGFyZWRQcmVmZXJlbmNlcygKKyAgICAgICAgICAgICAgICBWb2ljZVJlY29nbml0aW9uU2V0dGluZ3MuU0hBUkVEX1BSRUZFUkVOQ0VTX05BTUUsCisgICAgICAgICAgICAgICAgQ29udGV4dC5NT0RFX1BSSVZBVEUpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJlc3VsdFR5cGUgPSBwcmVmcy5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgVm9pY2VSZWNvZ25pdGlvblNldHRpbmdzLlBSRUZfS0VZX1JFU1VMVFNfVFlQRSwKKyAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihWb2ljZVJlY29nbml0aW9uU2V0dGluZ3MuUkVTVUxUX1RZUEVfTEVUVEVSUykpOworICAgICAgICBpbnQgcmVzdWx0VHlwZUludCA9IEludGVnZXIucGFyc2VJbnQocmVzdWx0VHlwZSk7CisgICAgICAgIAorICAgICAgICBpZiAocmVzdWx0VHlwZUludCA9PSBWb2ljZVJlY29nbml0aW9uU2V0dGluZ3MuUkVTVUxUX1RZUEVfTEVUVEVSUykgeworICAgICAgICAgICAgcmVzdWx0cy5hZGQoImEiKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYWRkKCJiIik7CisgICAgICAgICAgICByZXN1bHRzLmFkZCgiYyIpOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGVJbnQgPT0gVm9pY2VSZWNvZ25pdGlvblNldHRpbmdzLlJFU1VMVF9UWVBFX05VTUJFUlMpIHsKKyAgICAgICAgICAgIHJlc3VsdHMuYWRkKCIxIik7CisgICAgICAgICAgICByZXN1bHRzLmFkZCgiMiIpOworICAgICAgICAgICAgcmVzdWx0cy5hZGQoIjMiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgYnVuZGxlLnB1dFN0cmluZ0FycmF5TGlzdChSZWNvZ25pdGlvbk1hbmFnZXIuUkVTVUxUU19SRUNPR05JVElPTiwgcmVzdWx0cyk7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgbGlzdGVuZXIucmVzdWx0cyhidW5kbGUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblN0b3BMaXN0ZW5pbmcoQ2FsbGJhY2sgbGlzdGVuZXIpIHsKKyAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIC0gaW4gdGhpcyBzYW1wbGUgd2UgYXNzdW1lIHJlY29nbml0aW9uIHdvdWxkIGJlIGVuZHBvaW50ZWQKKyAgICAgICAgLy8gYXV0b21hdGljYWxseSwgdGhvdWdoIGNlcnRhaW4gYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIGV4cG9zZSBhbiBhZmZvcmRhbmNlCisgICAgICAgIC8vIGZvciBzdG9wcGluZyByZWNvcmRpbmcgbWFudWFsbHkuCisgICAgfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Wb2ljZVJlY29nbml0aW9uU2VydmljZS9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC92b2ljZXJlY29nbml0aW9uc2VydmljZS9Wb2ljZVJlY29nbml0aW9uU2V0dGluZ3MuamF2YSBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvdm9pY2VyZWNvZ25pdGlvbnNlcnZpY2UvVm9pY2VSZWNvZ25pdGlvblNldHRpbmdzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2MGNlMwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvVm9pY2VSZWNvZ25pdGlvblNlcnZpY2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvdm9pY2VyZWNvZ25pdGlvbnNlcnZpY2UvVm9pY2VSZWNvZ25pdGlvblNldHRpbmdzLmphdmEKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQudm9pY2VyZWNvZ25pdGlvbnNlcnZpY2U7CisKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZUFjdGl2aXR5OworCisvKioKKyAqIEEgc2V0dGluZ3MgYWN0aXZpdHkgZm9yIHRoZSBzYW1wbGUgdm9pY2UgcmVjb2duaXplci4KKyAqLworcHVibGljIGNsYXNzIFZvaWNlUmVjb2duaXRpb25TZXR0aW5ncyBleHRlbmRzIFByZWZlcmVuY2VBY3Rpdml0eSB7CisgICAgCisgICAgLy8gVGhlIG5hbWUgb2YgdGhlIFNoYXJlZFByZWZlcmVuY2VzIGZpbGUgd2UnbGwgc3RvcmUgcHJlZmVyZW5jZXMgaW4uCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0hBUkVEX1BSRUZFUkVOQ0VTX05BTUUgPSAiVm9pY2VSZWNvZ25pdGlvblNlcnZpY2UiOworICAgIAorICAgIC8vIFRoZSBrZXkgdG8gdGhlIHByZWZlcmVuY2UgZm9yIHRoZSB0eXBlIG9mIHJlc3VsdHMgdG8gc2hvdyAobGV0dGVycyBvciBudW1iZXJzKS4KKyAgICAvLyBJZGVudGljYWwgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBpbiByZXMvdmFsdWVzL3N0cmluZ3MueG1sLgorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZfS0VZX1JFU1VMVFNfVFlQRSA9ICJyZXN1bHRzX3R5cGUiOworICAgIAorICAgIC8vIFRoZSB2YWx1ZXMgb2YgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgdHlwZSBvZiByZXN1bHRzIHRvIHNob3cgKGxldHRlcnMgb3IgbnVtYmVycykuCisgICAgLy8gSWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGluIHJlcy92YWx1ZXMvc3RyaW5ncy54bWwuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX1RZUEVfTEVUVEVSUyA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX1RZUEVfTlVNQkVSUyA9IDE7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuc2V0U2hhcmVkUHJlZmVyZW5jZXNOYW1lKFNIQVJFRF9QUkVGRVJFTkNFU19OQU1FKTsKKyAgICAgICAgYWRkUHJlZmVyZW5jZXNGcm9tUmVzb3VyY2UoUi54bWwucHJlZmVyZW5jZXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L2Fib3V0LnhtbCBiL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L2Fib3V0LnhtbAppbmRleCAzYjI1YjMyLi43YjkwZmQ5IDEwMDY0NAotLS0gYS9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC9hYm91dC54bWwKKysrIGIvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvYWJvdXQueG1sCkBAIC0xNSwxMyArMTUsMTMgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMjBkaXAiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE2c3AiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hcHBfZGVzY3JpcCIKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2Fib3V0X2NyZWRpdHMiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE2c3AiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC9sb29rdXAueG1sIGIvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvbG9va3VwLnhtbAppbmRleCA0M2NmZmFhLi42YjdlM2VhIDEwMDY0NAotLS0gYS9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC9sb29rdXAueG1sCisrKyBiL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L2xvb2t1cC54bWwKQEAgLTE1LDEzICsxNSwxMyBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX2JhciIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiPgpAQCAtNDksNyArNDksNyBAQAogCiAgICAgPFdlYlZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC93ZWJ2aWV3IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiAvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC93aWRnZXRfbWVzc2FnZS54bWwgYi9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC93aWRnZXRfbWVzc2FnZS54bWwKaW5kZXggYmE5NDcxNC4uN2E2NzViOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvd2lkZ2V0X21lc3NhZ2UueG1sCisrKyBiL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L3dpZGdldF9tZXNzYWdlLnhtbApAQCAtMTYsMTQgKzE2LDE0IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvd2lkZ2V0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIHN0eWxlPSJAc3R5bGUvV2lkZ2V0QmFja2dyb3VuZCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tZXNzYWdlIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjEyZGlwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvd2lkZ2V0X3dvcmQueG1sIGIvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvd2lkZ2V0X3dvcmQueG1sCmluZGV4IDBlNzZmMGIuLjRhMDAzODQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L3dpZGdldF93b3JkLnhtbAorKysgYi9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC93aWRnZXRfd29yZC54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL3dpZGdldCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKICAgICBzdHlsZT0iQHN0eWxlL1dpZGdldEJhY2tncm91bmQiPgpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGVmaW5pdGlvbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC93b3JkX3RpdGxlIgogICAgICAgICBhbmRyb2lkOmxheW91dF90b1JpZ2h0T2Y9IkBpZC9idWxsZXQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUvcmVzL2xheW91dC93aWRnZXRfbWVzc2FnZS54bWwgYi9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUvcmVzL2xheW91dC93aWRnZXRfbWVzc2FnZS54bWwKaW5kZXggYmE5NDcxNC4uN2E2NzViOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9XaWt0aW9uYXJ5U2ltcGxlL3Jlcy9sYXlvdXQvd2lkZ2V0X21lc3NhZ2UueG1sCisrKyBiL3NhbXBsZXMvV2lrdGlvbmFyeVNpbXBsZS9yZXMvbGF5b3V0L3dpZGdldF9tZXNzYWdlLnhtbApAQCAtMTYsMTQgKzE2LDE0IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvd2lkZ2V0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIHN0eWxlPSJAc3R5bGUvV2lkZ2V0QmFja2dyb3VuZCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tZXNzYWdlIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjEyZGlwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9XaWt0aW9uYXJ5U2ltcGxlL3Jlcy9sYXlvdXQvd2lkZ2V0X3dvcmQueG1sIGIvc2FtcGxlcy9XaWt0aW9uYXJ5U2ltcGxlL3Jlcy9sYXlvdXQvd2lkZ2V0X3dvcmQueG1sCmluZGV4IDBlNzZmMGIuLjRhMDAzODQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvV2lrdGlvbmFyeVNpbXBsZS9yZXMvbGF5b3V0L3dpZGdldF93b3JkLnhtbAorKysgYi9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUvcmVzL2xheW91dC93aWRnZXRfd29yZC54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL3dpZGdldCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKICAgICBzdHlsZT0iQHN0eWxlL1dpZGdldEJhY2tncm91bmQiPgpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGVmaW5pdGlvbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC93b3JkX3RpdGxlIgogICAgICAgICBhbmRyb2lkOmxheW91dF90b1JpZ2h0T2Y9IkBpZC9idWxsZXQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL3NvdXJjZS5wcm9wZXJ0aWVzIGIvc2FtcGxlcy9zb3VyY2UucHJvcGVydGllcwppbmRleCA3M2MwZDc2Li42NDU1N2ExIDEwMDY0NAotLS0gYS9zYW1wbGVzL3NvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL3NhbXBsZXMvc291cmNlLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiBQa2cuVXNlclNyYz1mYWxzZQotUGxhdGZvcm0uVmVyc2lvbj0yLjEKIFBrZy5SZXZpc2lvbj0xCiBBbmRyb2lkVmVyc2lvbi5BcGlMZXZlbD03CitBbmRyb2lkVmVyc2lvbi5Db2RlTmFtZT1Gcm95bwogCmRpZmYgLS1naXQgYS9zZGsvZG9jX3NvdXJjZS5wcm9wZXJ0aWVzIGIvc2RrL2RvY19zb3VyY2UucHJvcGVydGllcwppbmRleCA3M2MwZDc2Li5jM2M3ZjgxIDEwMDY0NAotLS0gYS9zZGsvZG9jX3NvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL3Nkay9kb2Nfc291cmNlLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiBQa2cuVXNlclNyYz1mYWxzZQotUGxhdGZvcm0uVmVyc2lvbj0yLjEKIFBrZy5SZXZpc2lvbj0xCitBbmRyb2lkVmVyc2lvbi5Db2RlTmFtZT1Gcm95bwogQW5kcm9pZFZlcnNpb24uQXBpTGV2ZWw9NwogCmRpZmYgLS1naXQgYS9zZGsvcGxhdGZvcm1fc291cmNlLnByb3BlcnRpZXMgYi9zZGsvcGxhdGZvcm1fc291cmNlLnByb3BlcnRpZXMKaW5kZXggZDRmZjc5NS4uZTg3MmY5YiAxMDA2NDQKLS0tIGEvc2RrL3BsYXRmb3JtX3NvdXJjZS5wcm9wZXJ0aWVzCisrKyBiL3Nkay9wbGF0Zm9ybV9zb3VyY2UucHJvcGVydGllcwpAQCAtMSw1ICsxLDYgQEAKLVBrZy5EZXNjPUFuZHJvaWQgU0RLIFBsYXRmb3JtIDIuMV9yMQorUGtnLkRlc2M9QW5kcm9pZCBTREsgUGxhdGZvcm0gRnJveW9fcjEKIFBrZy5Vc2VyU3JjPWZhbHNlCi1QbGF0Zm9ybS5WZXJzaW9uPTIuMQorUGxhdGZvcm0uVmVyc2lvbj1Gcm95bwogUGtnLlJldmlzaW9uPTEKIEFuZHJvaWRWZXJzaW9uLkFwaUxldmVsPTcKK0FuZHJvaWRWZXJzaW9uLkNvZGVOYW1lPUZyb3lvCmRpZmYgLS1naXQgYS9zaW11bGF0b3IvYXBwL1Byb3BlcnR5U2VydmVyLmNwcCBiL3NpbXVsYXRvci9hcHAvUHJvcGVydHlTZXJ2ZXIuY3BwCmluZGV4IGM5NGFhNzUuLmViMWJmYzMgMTAwNjQ0Ci0tLSBhL3NpbXVsYXRvci9hcHAvUHJvcGVydHlTZXJ2ZXIuY3BwCisrKyBiL3NpbXVsYXRvci9hcHAvUHJvcGVydHlTZXJ2ZXIuY3BwCkBAIC0xMjEsNyArMTIxLDYgQEAKICAgICAgICAgeyAiaW5pdC5zdmMuZGJ1cyIsICJydW5uaW5nIiB9LAogICAgICAgICB7ICJpbml0LnN2Yy5wcHBkX2dwcnMiLCAicnVubmluZyIgfSwKICAgICAgICAgeyAiYWRiLmNvbm5lY3RlZCIsICIwIiB9LAotICAgICAgICAvL3sgInVzZS1hZGItbmV0d29ya2luZyIsICIxIiB9LAogICAgICAgICAvKgogICAgICAgICB7ICJzdGF0dXMuYmF0dGVyeS5zdGF0ZSIsICJTbG93IiB9LAogICAgICAgICB7ICJzdGF0dXMuYmF0dGVyeS5sZXZlbCIsICI1IiB9LApAQCAtMTQ4LDYgKzE0NywxMiBAQAogICAgICAgICB7ICJkZWJ1Zy5zZi5zaG93YmFja2dyb3VuZCIsICIwIiB9LAogICAgICAgICB7ICJkZWJ1Zy5zZi5zaG93ZnBzIiwgIjAiIH0sCiAgICAgICAgIHsgImRlZmF1bHQiLCAiZGVmYXVsdCIgfSwKKworICAgICAgICAvKiBTdGFnZWZyaWdodCBvcHRpb25zICovCisgICAgICAgIHsgIm1lZGlhLnN0YWdlZnJpZ2h0LmVuYWJsZS1wbGF5ZXIiLCAidHJ1ZSIgfSwKKyAgICAgICAgeyAibWVkaWEuc3RhZ2VmcmlnaHQuZW5hYmxlLW1ldGEiLCAidHJ1ZSIgfSwKKyAgICAgICAgeyAibWVkaWEuc3RhZ2VmcmlnaHQuZW5hYmxlLXNjYW4iLCAidHJ1ZSIgfSwKKyAgICAgICAgeyAibWVkaWEuc3RhZ2VmcmlnaHQuZW5hYmxlLWh0dHAiLCAidHJ1ZSIgfSwKICAgICB9OwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBORUxFTShwcm9wTGlzdCk7IGkrKykKZGlmZiAtLWdpdCBhL3NpbXVsYXRvci93cmFwc2ltL0FuZHJvaWQubWsgYi9zaW11bGF0b3Ivd3JhcHNpbS9BbmRyb2lkLm1rCmluZGV4IGY5YTI0MTQuLjdjMmNiZjIgMTAwNjQ0Ci0tLSBhL3NpbXVsYXRvci93cmFwc2ltL0FuZHJvaWQubWsKKysrIGIvc2ltdWxhdG9yL3dyYXBzaW0vQW5kcm9pZC5tawpAQCAtMjUsOCArMjUsNiBAQAogCVN5c1Bvd2VyLmMgXAogCVV0aWwuYwogCi1MT0NBTF9DX0lOQ0xVREVTICs9IHByZWJ1aWx0L2NvbW1vbi9lc2QKLQogTE9DQUxfTU9EVUxFIDo9IGxpYndyYXBzaW0KIAogIyBSZWx5aW5nIG9uIG90aGVyIEFuZHJvaWQgbGlicmFyaWVzIGlzIHByb2JhYmx5IGEgYmFkIGlkZWEsIHNpbmNlIGFueQpAQCAtMzYsNyArMzQsNyBAQAogaWZlcSAoJChCVUlMRF9TSU1fV0lUSE9VVF9BVURJTyksdHJ1ZSkKIExPQ0FMX0NGTEFHUyArPSAtREJVSUxEX1NJTV9XSVRIT1VUX0FVRElPPTEKIGVsc2UKLUxPQ0FMX0xETElCUyArPSAtbGVzZAorTE9DQUxfTERMSUJTICs9IC1sYXNvdW5kCiBlbmRpZgogCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9zaW11bGF0b3Ivd3JhcHNpbS9EZXZBdWRpby5jIGIvc2ltdWxhdG9yL3dyYXBzaW0vRGV2QXVkaW8uYwppbmRleCA3NTJlZTY1Li5hOGY1YzE2IDEwMDY0NAotLS0gYS9zaW11bGF0b3Ivd3JhcHNpbS9EZXZBdWRpby5jCisrKyBiL3NpbXVsYXRvci93cmFwc2ltL0RldkF1ZGlvLmMKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlc2QuaD4KKyNpbmNsdWRlIDxhbHNhL2Fzb3VuZGxpYi5oPgogCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KQEAgLTE5LDEwICsxOSw3IEBACiAgKiBJbnB1dCBldmVudCBkZXZpY2Ugc3RhdGUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEF1ZGlvU3RhdGUgewotICAgIGludCBmZDsKLSAgICBpbnQgc291cmNlSWQ7Ci0gICAgaW50IGVzZFZvbDsKLSAgICBpbnQgc3RyZWFtVHlwZTsKKyAgICBzbmRfcGNtX3QgKmhhbmRsZTsKIH0gQXVkaW9TdGF0ZTsKIAogLyoKQEAgLTMzLDQ1ICszMCwzMSBAQAogI2lmIEJVSUxEX1NJTV9XSVRIT1VUX0FVRElPCiAgICAgcmV0dXJuIDA7CiAjZWxzZQotICAgIGVzZF9wbGF5ZXJfaW5mb190ICpwaTsgCi0gICAgYXVkaW9TdGF0ZS0+ZmQgPSAtMTsKLSAgICBhdWRpb1N0YXRlLT5zb3VyY2VJZCA9IC0xOwotICAgIGF1ZGlvU3RhdGUtPmVzZFZvbCA9IC0xOwotICAgIGF1ZGlvU3RhdGUtPnN0cmVhbVR5cGUgPSAwOworICAgIGF1ZGlvU3RhdGUtPmhhbmRsZSA9IE5VTEw7CiAKLSAgICBpbnQgZm9ybWF0ID0gRVNEX0JJVFMxNiB8IEVTRF9TVEVSRU8gfCBFU0RfU1RSRUFNIHwgRVNEX1BMQVk7Ci0gICAgY2hhciBuYW1lc3RyaW5nW10gPSAiQW5kcm9pZCBBdWRpbyBYWFhYWFhYWCI7Ci0gICAgc3ByaW50ZihuYW1lc3RyaW5nLCJBbmRyb2lkIEF1ZGlvICUwOHgiLCAodW5zaWduZWQgaW50KWF1ZGlvU3RhdGUpOwotICAgIGludCBlc2RfZmQgPSBlc2RfcGxheV9zdHJlYW1fZmFsbGJhY2soZm9ybWF0LCA0NDEwMCwgTlVMTCwgbmFtZXN0cmluZyk7Ci0gICAgaWYgKGVzZF9mZCA+IDApIHsKLSAgICAgICAgLy8gZmluZCB0aGUgc291cmNlX2lkIGZvciB0aGlzIHN0cmVhbQotICAgICAgICBpbnQgbWl4ID0gZXNkX29wZW5fc291bmQoTlVMTCk7Ci0gICAgICAgIGlmIChtaXggPiAwKSB7Ci0gICAgICAgICAgICBlc2RfaW5mb190ICppbmZvID0gZXNkX2dldF9hbGxfaW5mbyhtaXgpOworICAgIHNuZF9wY21fb3BlbigmYXVkaW9TdGF0ZS0+aGFuZGxlLCAiZGVmYXVsdCIsIFNORF9QQ01fU1RSRUFNX1BMQVlCQUNLLCAwKTsKIAotICAgICAgICAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgICAgICAgICBmb3IocGkgPSBpbmZvLT5wbGF5ZXJfbGlzdDsgcGk7IHBpID0gcGktPm5leHQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoc3RyY21wKHBpLT5uYW1lLCBuYW1lc3RyaW5nKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdWRpb1N0YXRlLT5zb3VyY2VJZCA9IHBpLT5zb3VyY2VfaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlc2RfZnJlZV9hbGxfaW5mbyhpbmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVzZF9jbG9zZShtaXgpOwotICAgICAgICB9Ci0gICAgICAgIGF1ZGlvU3RhdGUtPmZkID0gZXNkX2ZkOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYXVkaW9TdGF0ZS0+aGFuZGxlKSB7CisgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtczsKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXNfbWFsbG9jKCZwYXJhbXMpOworICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc19hbnkoYXVkaW9TdGF0ZS0+aGFuZGxlLCBwYXJhbXMpOworICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc19zZXRfYWNjZXNzKGF1ZGlvU3RhdGUtPmhhbmRsZSwgcGFyYW1zLCBTTkRfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCk7CisgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX3NldF9mb3JtYXQoYXVkaW9TdGF0ZS0+aGFuZGxlLCBwYXJhbXMsIFNORF9QQ01fRk9STUFUX1MxNl9MRSk7CisgICAgICAgIHVuc2lnbmVkIGludCByYXRlID0gNDQxMDA7CisgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX3NldF9yYXRlX25lYXIoYXVkaW9TdGF0ZS0+aGFuZGxlLCBwYXJhbXMsICZyYXRlLCBOVUxMKTsKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXNfc2V0X2NoYW5uZWxzKGF1ZGlvU3RhdGUtPmhhbmRsZSwgcGFyYW1zLCAyKTsKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXMoYXVkaW9TdGF0ZS0+aGFuZGxlLCBwYXJhbXMpOworICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc19mcmVlKHBhcmFtcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd3NMb2coIkNvdWxkbid0IG9wZW4gYXVkaW8gaGFyZHdhcmUsIGZha2luZyBpdFxuIik7CiAgICAgfQotICAgIHByaW50ZigiQ291bGRuJ3Qgb3BlbiBhdWRpbyBkZXZpY2UuIEZha2luZyBpdC5cbiIpOworCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgZXZlbnQuCi0gKgotICogV2UganVzdCBwYXNzIHRoaXMgdGhyb3VnaCB0byB0aGUgcmVhbCAid3JpdGUiLCBzaW5jZSAiZmQiIGlzIHJlYWwuCisgKiBXcml0ZSBhdWRpbyBkYXRhLgogICovCiBzdGF0aWMgc3NpemVfdCB3cml0ZUF1ZGlvKEZha2VEZXYqIGRldiwgaW50IGZkLCBjb25zdCB2b2lkKiBidWYsIHNpemVfdCBjb3VudCkKIHsKQEAgLTc5LDExICs2MiwxMyBAQAogICAgIHJldHVybiAwOwogI2Vsc2UKICAgICBBdWRpb1N0YXRlICpzdGF0ZSA9IChBdWRpb1N0YXRlKilkZXYtPnN0YXRlOwotICAgIGlmIChzdGF0ZS0+ZmQgPj0gMCkKLSAgICAgICAgcmV0dXJuIF93c193cml0ZShzdGF0ZS0+ZmQsIGJ1ZiwgY291bnQpOworICAgIGlmIChzdGF0ZS0+aGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgc25kX3BjbV93cml0ZWkoc3RhdGUtPmhhbmRsZSwgYnVmLCBjb3VudCAvIDQpOworICAgICAgICByZXR1cm4gY291bnQ7CisgICAgfQogCiAgICAgLy8gZmFrZSB0aW1pbmcKLSAgICB1c2xlZXAoY291bnQgKiAxMDAwMCAvIDQ0MSAqIDQpOworICAgIHVzbGVlcChjb3VudCAqIDEwMDAwIC8gKDQ0MSAqIDQpKTsKICAgICByZXR1cm4gY291bnQ7CiAjZW5kaWYKIH0KQEAgLTEwNSw3ICs5MCw3IEBACiAgICAgcmV0dXJuIDA7CiAjZWxzZQogICAgIEF1ZGlvU3RhdGUgKnN0YXRlID0gKEF1ZGlvU3RhdGUqKWRldi0+c3RhdGU7Ci0gICAgY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBzbmRfcGNtX2Nsb3NlKHN0YXRlLT5oYW5kbGUpOwogICAgIGZyZWUoc3RhdGUpOwogICAgIGRldi0+c3RhdGUgPSBOVUxMOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc2ltdWxhdG9yL3dyYXBzaW0vUkVBRE1FLnR4dCBiL3NpbXVsYXRvci93cmFwc2ltL1JFQURNRS50eHQKaW5kZXggMzU4YzA2Yy4uMzY0ZDk2ZCAxMDA2NDQKLS0tIGEvc2ltdWxhdG9yL3dyYXBzaW0vUkVBRE1FLnR4dAorKysgYi9zaW11bGF0b3Ivd3JhcHNpbS9SRUFETUUudHh0CkBAIC0xOSwzICsxOSw2IEBACiBGb3IgbW9yZSB2ZXJib3NlIGxvZ2dpbmcsIHlvdSBjYW4gZW5hYmxlIHRoZSB2ZXJib3NlIGZvcm1zIG9mIENBTExUUkFDRQogYW5kIENBTExUUkFDRVYgaW4gSW50ZXJjZXB0LmMuCiAKK1RvIGJ1aWxkLCB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgdGhlIDMyLWJpdCBsaWJhdWRpbzIgZGV2ZWxvcG1lbnQgcGFja2FnZQoraW5zdGFsbGVkLiBPbiBVYnVudHUgSGFyZHksIGRvIHNvbWV0aGluZyBsaWtlOgorJSBzdWRvIGFwdC1nZXQgaW5zdGFsbCBsaWIzMmFzb3VuZDItZGV2CmRpZmYgLS1naXQgYS90ZXN0cnVubmVyL2NvdmVyYWdlLnB5IGIvdGVzdHJ1bm5lci9jb3ZlcmFnZS5weQppbmRleCBjOTRmYzI2Li41MmU4YThjIDEwMDc1NQotLS0gYS90ZXN0cnVubmVyL2NvdmVyYWdlLnB5CisrKyBiL3Rlc3RydW5uZXIvY292ZXJhZ2UucHkKQEAgLTg2LDcgKzg2LDggQEAKIAogICBkZWYgRXh0cmFjdFJlcG9ydChzZWxmLCB0ZXN0X3N1aXRlLAogICAgICAgICAgICAgICAgICAgICBkZXZpY2VfY292ZXJhZ2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXRoPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcXVhbGlmaWVyPU5vbmUpOgogICAgICIiIkV4dHJhY3QgcnVudGltZSBjb3ZlcmFnZSBkYXRhIGFuZCBnZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIHJlcG9ydC4KIAogICAgIEFzc3VtZXMgdGVzdCBoYXMganVzdCBiZWVuIGV4ZWN1dGVkLgpAQCAtOTQsMjUgKzk1LDMwIEBACiAgICAgICB0ZXN0X3N1aXRlOiBUZXN0U3VpdGUgdG8gZ2VuZXJhdGUgY292ZXJhZ2UgZGF0YSBmb3IKICAgICAgIGRldmljZV9jb3ZlcmFnZV9wYXRoOiBsb2NhdGlvbiBvZiBjb3ZlcmFnZSBmaWxlIG9uIGRldmljZQogICAgICAgb3V0cHV0X3BhdGg6IHBhdGggdG8gcGxhY2Ugb3V0cHV0IGZpbGVzIGluLiBJZiBOb25lIHdpbGwgdXNlCi0gICAgICAgIDxhbmRyb2lkX3Jvb3RfcGF0aD4vPF9DT1ZFUkFHRV9SRVBPUlRfUEFUSD4vPHRhcmdldD4vPHRlc3Q+CisgICAgICAgIDxhbmRyb2lkX3Jvb3RfcGF0aD4vPF9DT1ZFUkFHRV9SRVBPUlRfUEFUSD4vPHRhcmdldD4vPHRlc3RbLXF1YWxpZmllcl0+CisgICAgICB0ZXN0X3F1YWxpZmllcjogZGVzaWduYXRlcyBtb2RlIHRlc3Qgd2FzIHJ1biB3aXRoLiBlLmcgc2l6ZT1zbWFsbC4KKyAgICAgICAgSWYgbm90IE5vbmUsIHRoaXMgd2lsbCBiZSB1c2VkIHRvIGN1c3RvbWl6ZSBvdXRwdXRfcGF0aCBhcyBzaG93biBhYm92ZS4KIAogICAgIFJldHVybnM6CiAgICAgICBhYnNvbHV0ZSBmaWxlIHBhdGggc3RyaW5nIG9mIGdlbmVyYXRlZCBodG1sIHJlcG9ydCBmaWxlLgogICAgICIiIgogICAgIGlmIG91dHB1dF9wYXRoIGlzIE5vbmU6CisgICAgICByZXBvcnRfbmFtZSA9IHRlc3Rfc3VpdGUuR2V0TmFtZSgpCisgICAgICBpZiB0ZXN0X3F1YWxpZmllcjoKKyAgICAgICAgcmVwb3J0X25hbWUgPSByZXBvcnRfbmFtZSArICItIiArIHRlc3RfcXVhbGlmaWVyCiAgICAgICBvdXRwdXRfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9yb290X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9DT1ZFUkFHRV9SRVBPUlRfUEFUSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VpdGUuR2V0VGFyZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdWl0ZS5HZXROYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRfbmFtZSkKIAotICAgIGNvdmVyYWdlX2xvY2FsX25hbWUgPSAiJXMuJXMiICUgKHRlc3Rfc3VpdGUuR2V0TmFtZSgpLAorICAgIGNvdmVyYWdlX2xvY2FsX25hbWUgPSAiJXMuJXMiICUgKHJlcG9ydF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX1RFU1RfQ09WRVJBR0VfRVhUKQogICAgIGNvdmVyYWdlX2xvY2FsX3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3ZlcmFnZV9sb2NhbF9uYW1lKQogICAgIGlmIHNlbGYuX2FkYi5QdWxsKGRldmljZV9jb3ZlcmFnZV9wYXRoLCBjb3ZlcmFnZV9sb2NhbF9wYXRoKToKIAogICAgICAgcmVwb3J0X3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1aXRlLkdldE5hbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9uYW1lKQogICAgICAgdGFyZ2V0ID0gc2VsZi5fdGFyZ2V0c19tYW5pZmVzdC5HZXRUYXJnZXQodGVzdF9zdWl0ZS5HZXRUYXJnZXROYW1lKCkpCiAgICAgICBpZiB0YXJnZXQgaXMgTm9uZToKICAgICAgICAgbXNnID0gWyJFcnJvcjogdGVzdCAlcyByZWZlcmVuY2VzIHVuZGVmaW5lZCB0YXJnZXQgJXMuIgpkaWZmIC0tZ2l0IGEvdGVzdHJ1bm5lci9jb3ZlcmFnZV90YXJnZXRzLnhtbCBiL3Rlc3RydW5uZXIvY292ZXJhZ2VfdGFyZ2V0cy54bWwKaW5kZXggNWZlMTIzMy4uMDlkYTBjOCAxMDA2NDQKLS0tIGEvdGVzdHJ1bm5lci9jb3ZlcmFnZV90YXJnZXRzLnhtbAorKysgYi90ZXN0cnVubmVyL2NvdmVyYWdlX3RhcmdldHMueG1sCkBAIC01MiwxMyArNTIsOSBAQAogICAgICAgICA8c3JjIHBhdGg9IndpZmkvamF2YSIgLz4KICAgICA8L2NvdmVyYWdlX3RhcmdldD4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9ImFuZHJvaWQudGVzdC5ydW5uZXIiCi0gICAgICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0LXJ1bm5lciIgdHlwZT0iSkFWQV9MSUJSQVJJRVMiPgotICAgICAgICA8c3JjIHBhdGg9Ii4iIC8+Ci0gICAgPC9jb3ZlcmFnZV90YXJnZXQ+CisgICAgICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0LXJ1bm5lciIgdHlwZT0iSkFWQV9MSUJSQVJJRVMiIC8+CiAgICAKICAgIDwhLS0gYXBwcyAtLT4KLSAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkFsYXJtQ2xvY2siIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvQWxhcm1DbG9jayIKLSAgICAgICAgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkFwaURlbW9zIiBidWlsZF9wYXRoPSJkZXZlbG9wbWVudC9zYW1wbGVzL0FwaURlbW9zIgogICAgICAgICB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iQnJvd3NlciIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9Ccm93c2VyIgpAQCAtNzEsMTMgKzY3LDE3IEBACiAgICAgICAgIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJDb250YWN0cyIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9Db250YWN0cyIKICAgICAgICAgdHlwZT0iQVBQUyIgLz4KKyAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkRlc2tDbG9jayIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9EZXNrQ2xvY2siCisgICAgICAgIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJFbWFpbCIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9FbWFpbCIKICAgICAgICAgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IlNldHRpbmdzIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL1NldHRpbmdzIgogICAgICAgICB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iUGhvbmUiIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvUGhvbmUiCiAgICAgICAgIHR5cGU9IkFQUFMiIC8+Ci0gICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJMYXVuY2hlciIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9Ib21lIgorICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iUXVpY2tTZWFyY2hCb3giIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvUXVpY2tTZWFyY2hCb3giCisgICAgICAgIHR5cGU9IkFQUFMiIC8+CisgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJMYXVuY2hlcjIiIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvTGF1bmNoZXIyIgogICAgICAgICB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iTW1zIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL01tcyIgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9Ik11c2ljIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL011c2ljIgpAQCAtOTAsMTQgKzkwLDEwIEBACiAgICAgICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9jYWxlbmRhciIgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkNvbnRhY3RzUHJvdmlkZXIiCiAgICAgICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9Db250YWN0c1Byb3ZpZGVyIiB0eXBlPSJBUFBTIiAvPgotICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iR29vZ2xlQ29udGFjdHNQcm92aWRlciIKLSAgICAgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvcHJvdmlkZXJzL0dvb2dsZUNvbnRhY3RzUHJvdmlkZXIiIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJEb3dubG9hZFByb3ZpZGVyIgogICAgICAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9wcm92aWRlcnMvRG93bmxvYWRQcm92aWRlciIgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkRybVByb3ZpZGVyIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9wcm92aWRlcnMvZHJtIgogICAgICAgICB0eXBlPSJBUFBTIiAvPgotICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iR21haWxQcm92aWRlciIKLSAgICAgICAgYnVpbGRfcGF0aD0icGFydG5lci9nb29nbGUvcHJvdmlkZXJzL2dtYWlsIiB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iTWVkaWFQcm92aWRlciIKICAgICAgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvcHJvdmlkZXJzL01lZGlhUHJvdmlkZXIiIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJTZXR0aW5nc1Byb3ZpZGVyIgpkaWZmIC0tZ2l0IGEvdGVzdHJ1bm5lci9ydW50ZXN0LnB5IGIvdGVzdHJ1bm5lci9ydW50ZXN0LnB5CmluZGV4IGE0ZDcyMzEuLjQ5NWI2YTcgMTAwNzU1Ci0tLSBhL3Rlc3RydW5uZXIvcnVudGVzdC5weQorKysgYi90ZXN0cnVubmVyL3J1bnRlc3QucHkKQEAgLTEzOCwxMCArMTM4LDkgQEAKICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS10aW1lb3V0IiwgZGVzdD0idGltZW91dCIsCiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0zMDAsIGhlbHA9IlNldCBhIHRpbWVvdXQgbGltaXQgKGluIHNlYykgZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBuYXRpdmUgdGVzdHMgb24gYSBkZXZpY2UgKGRlZmF1bHQ6IDMwMCBzZWNzKSIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tY3RzIiwgZGVzdD0iY3RzX3Rlc3RzIiwKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXN1aXRlIiwgZGVzdD0ic3VpdGUiLAogICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJ1biBhbGwgdGVzdHMgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgImNvbXBhdGliaWxpdHkgdGVzdCBzdWl0ZSIpCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBnaXZlbiB0ZXN0IHN1aXRlIikKICAgICBncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKAogICAgICAgICBwYXJzZXIsICJUYXJnZXRzIiwgIlVzZSB0aGVzZSBvcHRpb25zIHRvIGRpcmVjdCB0ZXN0cyB0byBhIHNwZWNpZmljICIKICAgICAgICAgIkFuZHJvaWQgdGFyZ2V0IikKQEAgLTE1OCw3ICsxNTcsNyBAQAogICAgIGlmIChub3Qgc2VsZi5fb3B0aW9ucy5vbmx5X2xpc3RfdGVzdHMKICAgICAgICAgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmFsbF90ZXN0cwogICAgICAgICBhbmQgbm90IHNlbGYuX29wdGlvbnMuY29udGludW91c190ZXN0cwotICAgICAgICBhbmQgbm90IHNlbGYuX29wdGlvbnMuY3RzX3Rlc3RzCisgICAgICAgIGFuZCBub3Qgc2VsZi5fb3B0aW9ucy5zdWl0ZQogICAgICAgICBhbmQgbm90IHNlbGYuX29wdGlvbnMudGVzdF9wYXRoCiAgICAgICAgIGFuZCBsZW4oc2VsZi5fdGVzdF9hcmdzKSA8IDEpOgogICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQpAQCAtMjg1LDggKzI4NCw5IEBACiAgICAgICBzZWxmLl90ZXN0c190b19ydW4gPSBzZWxmLl9rbm93bl90ZXN0cy5HZXRUZXN0cygpCiAgICAgZWxpZiBzZWxmLl9vcHRpb25zLmNvbnRpbnVvdXNfdGVzdHM6CiAgICAgICBzZWxmLl90ZXN0c190b19ydW4gPSBzZWxmLl9rbm93bl90ZXN0cy5HZXRDb250aW51b3VzVGVzdHMoKQotICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5jdHNfdGVzdHM6Ci0gICAgICBzZWxmLl90ZXN0c190b19ydW4gPSBzZWxmLl9rbm93bl90ZXN0cy5HZXRDdHNUZXN0cygpCisgICAgZWxpZiBzZWxmLl9vcHRpb25zLnN1aXRlOgorICAgICAgc2VsZi5fdGVzdHNfdG9fcnVuID0gXAorICAgICAgICAgIHNlbGYuX2tub3duX3Rlc3RzLkdldFRlc3RzSW5TdWl0ZShzZWxmLl9vcHRpb25zLnN1aXRlKQogICAgIGVsaWYgc2VsZi5fb3B0aW9ucy50ZXN0X3BhdGg6CiAgICAgICB3YWxrZXIgPSB0ZXN0X3dhbGtlci5UZXN0V2Fsa2VyKCkKICAgICAgIHNlbGYuX3Rlc3RzX3RvX3J1biA9IHdhbGtlci5GaW5kVGVzdHMoc2VsZi5fb3B0aW9ucy50ZXN0X3BhdGgpCkBAIC0zMDMsNyArMzAzLDcgQEAKICAgZGVmIF9Jc0N0c1Rlc3RzKHNlbGYsIHRlc3RfbGlzdCk6CiAgICAgIiIiQ2hlY2sgaWYgYW55IGN0cyB0ZXN0cyBhcmUgaW5jbHVkZWQgaW4gZ2l2ZW4gbGlzdCBvZiB0ZXN0cyB0byBydW4uIiIiCiAgICAgZm9yIHRlc3QgaW4gdGVzdF9saXN0OgotICAgICAgaWYgdGVzdC5Jc0N0cygpOgorICAgICAgaWYgdGVzdC5HZXRTdWl0ZSgpID09ICdjdHMnOgogICAgICAgICByZXR1cm4gVHJ1ZQogICAgIHJldHVybiBGYWxzZQogCkBAIC0zMjAsNyArMzIwLDEwIEBACiAgICAgICAgIHNlbGYuX0RvQnVpbGQoKQogCiAgICAgICBmb3IgdGVzdF9zdWl0ZSBpbiBzZWxmLl9HZXRUZXN0c1RvUnVuKCk6Ci0gICAgICAgIHRlc3Rfc3VpdGUuUnVuKHNlbGYuX29wdGlvbnMsIHNlbGYuX2FkYikKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHRlc3Rfc3VpdGUuUnVuKHNlbGYuX29wdGlvbnMsIHNlbGYuX2FkYikKKyAgICAgICAgZXhjZXB0IGVycm9ycy5XYWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yOgorICAgICAgICAgIGxvZ2dlci5Mb2coIlRpbWVkIG91dCB3YWl0aW5nIGZvciByZXNwb25zZSIpCiAKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICBsb2dnZXIuTG9nKCJFeGl0aW5nLi4uIikKZGlmZiAtLWdpdCBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzLnhtbCBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzLnhtbAppbmRleCA2OGE2MmU0Li4zODExOTBjIDEwMDY0NAotLS0gYS90ZXN0cnVubmVyL3Rlc3RfZGVmcy54bWwKKysrIGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMueG1sCkBAIC0zMywyMSArMzMsNzYgQEAKIDx0ZXN0IG5hbWU9ImZyYW1ld29yayIKICAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvRnJhbWV3b3JrVGVzdCIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmt0ZXN0LnRlc3RzIgotICAgIGNsYXNzPSJjb20uYW5kcm9pZC5mcmFtZXdvcmt0ZXN0LkFsbFRlc3RzIgogICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgogICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CiAKIDx0ZXN0IG5hbWU9ImFuZHJvaWQiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0FuZHJvaWRUZXN0cyIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzIgotICAgIGNsYXNzPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzLkFuZHJvaWRUZXN0cyIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKICAgICBjb250aW51b3VzPSJ0cnVlIiAvPgogCis8IS0tIGZyYW1ld29ya3MgdGVzdHMgLS0+Cis8dGVzdCBuYW1lPSJmcmFtZXdvcmtzLWNvcmUiCisgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NvcmUvdGVzdHMvY29yZXRlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3MuY29yZXRlc3RzIgorICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CisKKzx0ZXN0IG5hbWU9ImZyYW1ld29ya3MtZ3JhcGhpY3MiCisgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2dyYXBoaWNzL3Rlc3RzL2dyYXBoaWNzdGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5ncmFwaGljc3Rlc3RzIgorICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CisKKzx0ZXN0IG5hbWU9ImZyYW1ld29ya3MtbG9jYXRpb24iCisgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2xvY2F0aW9uL3Rlc3RzL2xvY2F0aW9udGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5sb2NhdGlvbnRlc3RzIgorICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CisKKzx0ZXN0IG5hbWU9ImZyYW1ld29ya3Mtc2F4IgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9zYXgvdGVzdHMvc2F4dGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5zYXh0ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8dGVzdCBuYW1lPSJmcmFtZXdvcmtzLXNlcnZpY2VzIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3Muc2VydmljZXN0ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8dGVzdCBuYW1lPSJmcmFtZXdvcmtzLXRlbGVwaG9ueSIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVsZXBob255L3Rlc3RzL3RlbGVwaG9ueXRlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3MudGVsZXBob255dGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCisgICAgY29udGludW91cz0idHJ1ZSIgLz4KKworPHRlc3QgbmFtZT0iZnJhbWV3b3Jrcy10ZXN0cnVubmVyIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0LXJ1bm5lciIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmtzLnRlc3RydW5uZXIudGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJhbmRyb2lkLnRlc3QucnVubmVyIgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CisKKzx0ZXN0IG5hbWU9ImZyYW1ld29ya3MtdnBuIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS92cG4vdGVzdHMvdnBudGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy52cG50ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8IS0tICBlbmQgb2YgZnJhbWV3b3JrIHRlc3RzIC0tPgorCis8IS0tIHN1YnNldCBvZiB0aGUgYW5kcm9pZCB0ZXN0cyBmb3IganVzdCB0aGUgZGF0YWJhc2UgdGVzdHMgLS0+Cis8IS0tdGVzdCBuYW1lPSJkYXRhYmFzZSIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS90ZXN0cy9jb3JldGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5jb3JldGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8tLT4KKwogPHRlc3QgbmFtZT0iYWNjb3VudCIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvQW5kcm9pZFRlc3RzIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnVuaXRfdGVzdHMiCi0gICAgY2xhc3M9ImNvbS5hbmRyb2lkLnVuaXRfdGVzdHMuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJTZXJ2aWNlVGVzdCIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS90ZXN0cy9jb3JldGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5jb3JldGVzdHMiCisgICAgY2xhc3M9ImFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJTZXJ2aWNlVGVzdCIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KIAogPHRlc3QgbmFtZT0ic21va2UiCkBAIC01OSwxNiArMTE0LDkgQEAKIDx0ZXN0IG5hbWU9ImNvcmUiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0NvcmVUZXN0cyIKICAgICBwYWNrYWdlPSJhbmRyb2lkLmNvcmUiCi0gICAgY2xhc3M9ImFuZHJvaWQuY29yZS5Db3JlVGVzdHMiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCiAgICAgY29udGludW91cz0idHJ1ZSIgLz4KIAotPHRlc3QgbmFtZT0ibGliY29yZSIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvQ29yZVRlc3RzIgotICAgIHBhY2thZ2U9ImFuZHJvaWQuY29yZSIKLSAgICBjbGFzcz0iYW5kcm9pZC5jb3JlLkphdmFUZXN0cyIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KLQogPHRlc3QgbmFtZT0iYXBpZGVtb3MiCiAgICAgYnVpbGRfcGF0aD0iZGV2ZWxvcG1lbnQvc2FtcGxlcy9BcGlEZW1vcyIKICAgICBwYWNrYWdlPSJjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMudGVzdHMiCkBAIC04NywxMSArMTM1LDExIEBACiAgICAgY2xhc3M9ImNvbS5hbmRyb2lkLnVuaXRfdGVzdHMuSGVhcFRlc3QiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8+CiAKLTx0ZXN0IG5hbWU9ImFjdGl2aXR5IgorPCEtLXRlc3QgbmFtZT0iYWN0aXZpdHkiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0FuZHJvaWRUZXN0cyIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzIgogICAgIGNsYXNzPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzLmFjdGl2aXR5LkFjdGl2aXR5VGVzdHMiCi0gICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8+CisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8tLT4KIAogPHRlc3QgbmFtZT0ia2V5c3RvcmUtdW5pdCIKICAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2Uva2V5c3RvcmUvdGVzdHMiCkBAIC0xMDAsMTMgKzE0OCw2IEBACiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCiAgICAgY29udGludW91cz0idHJ1ZSIgLz4KIAotPHRlc3QgbmFtZT0idnBudGVzdHMiCi0gICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0FuZHJvaWRUZXN0cyIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzIgotICAgIGNsYXNzPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzLlZwblRlc3QiCi0gICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY29udGludW91cz0idHJ1ZSIgLz4KLQogPCEtLSAgb2Jzb2xldGU/CiA8dGVzdCBuYW1lPSJkZWFkbG9jayIKICAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvRGVhZGxvY2siCkBAIC0xMTYsMTUgKzE1NywxNSBAQAogCiAKIDx0ZXN0IG5hbWU9ImNvbnRlbnRwcm92aWRlcm9wZXJhdGlvbiIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvRnJhbWV3b3JrVGVzdCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmt0ZXN0LnRlc3RzIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cyIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmtzLmNvcmV0ZXN0cyIKICAgICBjbGFzcz0iYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlck9wZXJhdGlvblRlc3QiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8+CiAKIDx0ZXN0IG5hbWU9InRhYmxlbWVyZ2VyIgogICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0cy9GcmFtZXdvcmtUZXN0IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3Rlc3QudGVzdHMiCi0gICAgY2xhc3M9ImFuZHJvaWQuY29udGVudC5BYnN0cmFjdFRhYmxlTWVyZ2VyVGVzdCIKKyAgICBjbGFzcz0iY29tLmdvb2dsZS5hbmRyb2lkLmdzZi5BYnN0cmFjdFRhYmxlTWVyZ2VyVGVzdCIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KIAogPHRlc3QgbmFtZT0iaW1mIgpAQCAtMTQwLDYgKzE4MSwxMCBAQAogICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgogICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CiAKKzx0ZXN0IG5hbWU9ImNvbW1vbiIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29tbW9uL3Rlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmNvbW1vbi50ZXN0cyIgLz4KKwogPCEtLSAgY3RzIHRlc3RzIC0tPgogCiA8dGVzdCBuYW1lPSJjdHMtcGVybWlzc2lvbiIKQEAgLTE0OCw3ICsxOTMsNyBAQAogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCiAgICAgY29udGludW91cz0idHJ1ZSIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXBlcm1pc3Npb24yIgogICAgIGJ1aWxkX3BhdGg9ImN0cy90ZXN0cy90ZXN0cy9wZXJtaXNzaW9uMiIKQEAgLTE2MiwxNzMgKzIwNywxNzMgQEAKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvcHJvY2VzcyIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5jdHMucHJvY2VzcyIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLWFwaS1zaWduYXR1cmUiCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL1NpZ25hdHVyZVRlc3QiCiAgICAgcGFja2FnZT0iYW5kcm9pZC50ZXN0cy5zaWd0ZXN0IgogICAgIHJ1bm5lcj0iLkluc3RydW1lbnRhdGlvblJ1bm5lciIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLWFwaS1zaWduYXR1cmUtZnVuYyIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvU2lnbmF0dXJlVGVzdCIKICAgICBwYWNrYWdlPSJhbmRyb2lkLnRlc3RzLnNpZ3Rlc3QudGVzdHMiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1hcGlkZW1vcyIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvQXBpRGVtb3NSZWZlcmVuY2VUZXN0IgogICAgIHBhY2thZ2U9ImFuZHJvaWQuYXBpZGVtb3MuY3RzIgogICAgIGNvdmVyYWdlX3RhcmdldD0iQXBpRGVtb3MiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1hcHAiCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL3Rlc3RzL2FwcCIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5jdHMuYXBwIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1jb250ZW50IgogICAgIGJ1aWxkX3BhdGg9ImN0cy90ZXN0cy90ZXN0cy9jb250ZW50IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy5jb250ZW50IgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1kYXRhYmFzZSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvZGF0YWJhc2UiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLmRhdGFiYXNlIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1nZXN0dXJlIgogICAgIGJ1aWxkX3BhdGg9ImN0cy90ZXN0cy90ZXN0cy9nZXN0dXJlIgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy5nZXN0dXJlIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1ncmFwaGljcyIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvZ3JhcGhpY3MiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLmdyYXBoaWNzIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1oYXJkd2FyZSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvaGFyZHdhcmUiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLmhhcmR3YXJlIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1sb2NhdGlvbiIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvbG9jYXRpb24iCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLmxvY2F0aW9uIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1tZWRpYSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvbWVkaWEiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLm1lZGlhIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1uZXQiCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL3Rlc3RzL25ldCIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5jdHMubmV0IgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1vcyIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvb3MiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLm9zIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1wZXJmMSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvcGVyZm9ybWFuY2UiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLnBlcmZvcm1hbmNlIgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1wZXJmMiIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvcGVyZm9ybWFuY2UyIgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy5wZXJmb3JtYW5jZTIiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXBlcmYzIgogICAgIGJ1aWxkX3BhdGg9ImN0cy90ZXN0cy90ZXN0cy9wZXJmb3JtYW5jZTMiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLnBlcmZvcm1hbmNlMyIKICAgICBydW5uZXI9ImFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25DdHNUZXN0UnVubmVyIgotICAgIGN0cz0idHJ1ZSIgLz4KKyAgICBzdWl0ZT0iY3RzIiAvPgogCiA8dGVzdCBuYW1lPSJjdHMtcGVyZjQiCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL3Rlc3RzL3BlcmZvcm1hbmNlNCIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5jdHMucGVyZm9ybWFuY2U0IgogICAgIHJ1bm5lcj0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvbkN0c1Rlc3RSdW5uZXIiCi0gICAgY3RzPSJ0cnVlIiAvPgorICAgIHN1aXRlPSJjdHMiIC8+CiAKIDx0ZXN0IG5hbWU9ImN0cy1wZXJmNSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvcGVyZm9ybWFuY2U1IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy5wZXJmb3JtYW5jZTUiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXByb3ZpZGVyIgogICAgIGJ1aWxkX3BhdGg9ImN0cy90ZXN0cy90ZXN0cy9wcm92aWRlciIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5jdHMucHJvdmlkZXIiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXRleHQiCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL3Rlc3RzL3RleHQiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLnRleHQiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXRlbGVwaG9ueSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvdGVsZXBob255IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy50ZWxlcGhvbnkiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXV0aWwiCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL3Rlc3RzL3V0aWwiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLnV0aWwiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXZpZXciCiAgICAgYnVpbGRfcGF0aD0iY3RzL3Rlc3RzL3Rlc3RzL3ZpZXciCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuY3RzLnZpZXciCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXdlYmtpdCIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvd2Via2l0IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy53ZWJraXQiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPHRlc3QgbmFtZT0iY3RzLXdpZGdldCIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvdGVzdHMvd2lkZ2V0IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmN0cy53aWRnZXQiCiAgICAgcnVubmVyPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uQ3RzVGVzdFJ1bm5lciIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KIAogPCEtLSAgZW5kIG9mIGN0cyB0ZXN0cyAtLT4KIApAQCAtMzU0LDcgKzM5OSw4IEBACiA8dGVzdCBuYW1lPSJjYWxwcm92IgogICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9DYWxlbmRhclByb3ZpZGVyL3Rlc3RzIgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnByb3ZpZGVycy5jYWxlbmRhci50ZXN0cyIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9IkNhbGVuZGFyUHJvdmlkZXIiIC8+CisgICAgY292ZXJhZ2VfdGFyZ2V0PSJDYWxlbmRhclByb3ZpZGVyIgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CiAKIDx0ZXN0IG5hbWU9ImNhbWVyYXN0cmVzcyIKICAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0NhbWVyYSIKQEAgLTQxOCwyNCArNDY0LDYgQEAKICAgICBjbGFzcz0iY29tLmFuZHJvaWQuZW1haWwuU21hbGxUZXN0cyIKICAgICBjb3ZlcmFnZV90YXJnZXQ9IkVtYWlsIiAvPgogCi08dGVzdCBuYW1lPSJnbG9iYWxzZWFyY2giCi0gICAgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9HbG9iYWxTZWFyY2giCi0gICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZ2xvYmFsc2VhcmNoLnRlc3RzIgotICAgIGNvdmVyYWdlX3RhcmdldD0iR2xvYmFsU2VhcmNoIgotICAgIGNvbnRpbnVvdXM9InRydWUiIC8+Ci0KLTx0ZXN0IG5hbWU9Imdsb2JhbHNlYXJjaC1wZXJtaXNzaW9uIgotICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvR2xvYmFsU2VhcmNoIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmdsb2JhbHNlYXJjaC5wZXJtaXNzaW9uLnRlc3RzIgotICAgIGNvdmVyYWdlX3RhcmdldD0iR2xvYmFsU2VhcmNoIgotICAgIGNvbnRpbnVvdXM9InRydWUiIC8+Ci0KLTx0ZXN0IG5hbWU9ImltcHJvdmlkZXItcGVybWlzc2lvbiIKLSAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9wcm92aWRlcnMvSW1Qcm92aWRlci90ZXN0cy9wZXJtaXNzaW9uIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnByb3ZpZGVycy5pbS5wZXJtaXNzaW9uLnRlc3RzIgotICAgIGNvdmVyYWdlX3RhcmdldD0iSW1Qcm92aWRlciIKLSAgICBjb250aW51b3VzPSJ0cnVlIiAvPgotCiA8dGVzdCBuYW1lPSJtZWRpYSIKICAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLm1lZGlhZnJhbWV3b3JrdGVzdCIKQEAgLTUwMCwxMSArNTI4LDE4IEBACiAgICAgcnVubmVyPSJjb20uYW5kcm9pZC5tbXMuU21zTGF1bmNoUGVyZm9ybWFuY2UiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJNbXMiIC8+CiAKLTx0ZXN0IG5hbWU9InRlbGVwaG9ueS11bml0IgotICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZWxlcGhvbnkvdGVzdHMvVGVsZXBob255VGVzdCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC50ZWxlcGhvbnl0ZXN0IgotICAgIHJ1bm5lcj0iLlRlbGVwaG9ueVVuaXRUZXN0UnVubmVyIgotICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIiAvPgorPCEtLSBVbml0IHRlc3RzIGZvciB0aGUgcGhvbmUgYXBwbGljYXRpb24uIC0tPgorPHRlc3QgbmFtZT0icGhvbmUtdW5pdCIKKyAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL1Bob25lIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnBob25lLnRlc3RzIgorICAgIGNvbnRpbnVvdXM9InRydWUiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJQaG9uZSIgLz4KKworPHRlc3QgbmFtZT0icXVpY2tzZWFyY2hib3giCisgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9RdWlja1NlYXJjaEJveCIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5xdWlja3NlYXJjaGJveC50ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9IlF1aWNrU2VhcmNoQm94IgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CiAKIDwhLS0gb2Jzb2xldGU/CiA8dGVzdCBuYW1lPSJyaW5ndG9uZSIKQEAgLTUzMiwxOCArNTY3LDIzIEBACiAgICAgZGVzY3JpcHRpb249IkFuZHJvaWQgU1RMLiIKICAgICBleHRyYV9idWlsZF9hcmdzPSJBU1RMX1RFU1RTPTEiIC8+CiAKLTwhLS0gcGVuZGluZyBwYXRjaCA4MjAKKzwhLS0gR29vZ2xlIFRlc3QgLS0+CiA8dGVzdC1uYXRpdmUgbmFtZT0iZ3Rlc3QiCiAgICAgYnVpbGRfcGF0aD0iZXh0ZXJuYWwvZ3Rlc3QiCiAgICAgZGVzY3JpcHRpb249Ikdvb2dsZSB0ZXN0LiIKICAgICBleHRyYV9idWlsZF9hcmdzPSJHVEVTVF9URVNUUz0xIiAvPgotLS0+CisKIAogPCEtLSBob3N0IGphdmEgdGVzdHMgLS0+CiA8dGVzdC1ob3N0IG5hbWU9ImN0cy1hcHBzZWN1cml0eSIKICAgICBidWlsZF9wYXRoPSJjdHMvdGVzdHMvYXBwc2VjdXJpdHktdGVzdHMiCiAgICAgY2xhc3M9ImNvbS5hbmRyb2lkLmN0cy5hcHBzZWN1cml0eS5BcHBTZWN1cml0eVRlc3RzIgogICAgIGphcl9uYW1lPSJDdHNBcHBTZWN1cml0eVRlc3RzLmphciIKLSAgICBjdHM9InRydWUiIC8+CisgICAgc3VpdGU9ImN0cyIgLz4KKworPHRlc3QtaG9zdCBuYW1lPSJmcmFtZXdvcmtzLWNvcmUtaG9zdCIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS90ZXN0cy9ob3N0dGVzdHMiCisgICAgY2xhc3M9ImFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlckhvc3RUZXN0cyIKKyAgICBqYXJfbmFtZT0iRnJhbWV3b3JrQ29yZUhvc3RUZXN0cy5qYXIiIC8+CiAKIDwvdGVzdC1kZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzLnhzZCBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzLnhzZAppbmRleCA2NWMwMzJmLi43MTM0NDU5IDEwMDY0NAotLS0gYS90ZXN0cnVubmVyL3Rlc3RfZGVmcy54c2QKKysrIGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMueHNkCkBAIC00OCw5ICs0OCw4IEBACiAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGludW91cyIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIKICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIiAvPgogCi0gICAgICAgIDwhLS0gSW5jbHVkZSB0ZXN0IGluIGNvbXBhdGliaWxpdHkgdGVzdCBzdWl0ZS4gLS0+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY3RzIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIgotICAgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiIC8+CisgICAgICAgIDwhLS0gSW5jbHVkZSB0ZXN0IGFzIHBhcnQgb2YgbmFtZWQgc3VpdGUuIC0tPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1aXRlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+CiAKICAgICAgICAgPCEtLSAgU2hvcnQgZGVzY3JpcHRpb24gKHR5cGljYWxseSBsZXNzIHRoYW4gNjAgY2hhcmFjdGVycykgYWJvdXQgdGhpcwogICAgICAgICB0ZXN0LiAtLT4KZGlmZiAtLWdpdCBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzL2luc3RydW1lbnRhdGlvbl90ZXN0LnB5IGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMvaW5zdHJ1bWVudGF0aW9uX3Rlc3QucHkKaW5kZXggNDAxYTk4MC4uYzkzMmEwYiAxMDA2NDQKLS0tIGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMvaW5zdHJ1bWVudGF0aW9uX3Rlc3QucHkKKysrIGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMvaW5zdHJ1bWVudGF0aW9uX3Rlc3QucHkKQEAgLTE2MCw3ICsxNjAsOCBAQAogICAgICAgICBsb2dnZXIuTG9nKCJFcnJvcjogY291bGQgbm90IGZpbmQgY292ZXJhZ2UgZGF0YSBvbiBkZXZpY2UiKQogICAgICAgICByZXR1cm4KIAotICAgICAgY292ZXJhZ2VfZmlsZSA9IGNvdmVyYWdlX2dlbi5FeHRyYWN0UmVwb3J0KHNlbGYsIGRldmljZV9jb3ZlcmFnZV9wYXRoKQorICAgICAgY292ZXJhZ2VfZmlsZSA9IGNvdmVyYWdlX2dlbi5FeHRyYWN0UmVwb3J0KAorICAgICAgICAgIHNlbGYsIGRldmljZV9jb3ZlcmFnZV9wYXRoLCB0ZXN0X3F1YWxpZmllcj1vcHRpb25zLnRlc3Rfc2l6ZSkKICAgICAgIGlmIGNvdmVyYWdlX2ZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgIGxvZ2dlci5Mb2coIkNvdmVyYWdlIHJlcG9ydCBnZW5lcmF0ZWQgYXQgJXMiICUgY292ZXJhZ2VfZmlsZSkKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMvbmF0aXZlX3Rlc3QucHkgYi90ZXN0cnVubmVyL3Rlc3RfZGVmcy9uYXRpdmVfdGVzdC5weQppbmRleCBlNjkxN2M5Li5kYzI2YzczIDEwMDY0NAotLS0gYS90ZXN0cnVubmVyL3Rlc3RfZGVmcy9uYXRpdmVfdGVzdC5weQorKysgYi90ZXN0cnVubmVyL3Rlc3RfZGVmcy9uYXRpdmVfdGVzdC5weQpAQCAtODYsNyArODYsNyBAQAogCiAgICAgICAjIFNpbmdsZSBxdW90ZXMgYXJlIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBzaGVsbCBzcGxpdHRpbmcgaXQuCiAgICAgICBvdXRwdXQgPSBhZGIuU2VuZFNoZWxsQ29tbWFuZCgiJyVzIDI+JjE7ZWNobyAtbiBleGl0IGNvZGU6JD8nIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGNkIC9zZGNhcmQ7JXMpIiAlIGZ1bGxfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludChvcHRpb25zLnRpbWVvdXQpKQogICAgICAgc3VjY2VzcyA9IG91dHB1dC5lbmRzd2l0aCgiZXhpdCBjb2RlOjAiKQogICAgICAgbG9nZ2VyLkxvZygiJXMuLi4gJXMiICUgKGYsIHN1Y2Nlc3MgYW5kICJvayIgb3IgImZhaWxlZCIpKQpkaWZmIC0tZ2l0IGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMvdGVzdF9kZWZzLnB5IGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMvdGVzdF9kZWZzLnB5CmluZGV4IDZkODg1ZmEuLmMzMDU2MjAgMTAwNjQ0Ci0tLSBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzL3Rlc3RfZGVmcy5weQorKysgYi90ZXN0cnVubmVyL3Rlc3RfZGVmcy90ZXN0X2RlZnMucHkKQEAgLTEwOSwxMyArMTA5LDkgQEAKICAgICAgICAgY29uX3Rlc3RzLmFwcGVuZCh0ZXN0KQogICAgIHJldHVybiBjb25fdGVzdHMKIAotICBkZWYgR2V0Q3RzVGVzdHMoc2VsZik6Ci0gICAgIiIiUmV0dXJuIGxpc3Qgb2YgY3RzIHRlc3RzLiIiIgotICAgIGN0c190ZXN0cyA9IFtdCi0gICAgZm9yIHRlc3QgaW4gc2VsZi5HZXRUZXN0cygpOgotICAgICAgaWYgdGVzdC5Jc0N0cygpOgotICAgICAgICBjdHNfdGVzdHMuYXBwZW5kKHRlc3QpCi0gICAgcmV0dXJuIGN0c190ZXN0cworICBkZWYgR2V0VGVzdHNJblN1aXRlKHNlbGYsIHN1aXRlKToKKyAgICAiIiJSZXR1cm4gbGlzdCBvZiB0ZXN0cyBpbiBnaXZlbiBzdWl0ZS4iIiIKKyAgICByZXR1cm4gW3QgZm9yIHQgaW4gc2VsZi5HZXRUZXN0cygpIGlmIHQuR2V0U3VpdGUoKSA9PSBzdWl0ZV0KIAogICBkZWYgR2V0VGVzdChzZWxmLCBuYW1lKToKICAgICByZXR1cm4gc2VsZi5fdGVzdG5hbWVfbWFwLmdldChuYW1lLCBOb25lKQpkaWZmIC0tZ2l0IGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMvdGVzdF9zdWl0ZS5weSBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzL3Rlc3Rfc3VpdGUucHkKaW5kZXggNDJhMGRlMS4uOTBkNTc5MiAxMDA2NDQKLS0tIGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMvdGVzdF9zdWl0ZS5weQorKysgYi90ZXN0cnVubmVyL3Rlc3RfZGVmcy90ZXN0X3N1aXRlLnB5CkBAIC0xOSwxNCArMTksMTcgQEAKIAogCiBjbGFzcyBBYnN0cmFjdFRlc3RTdWl0ZShvYmplY3QpOgotICAiIiJSZXByZXNlbnRzIGEgZ2VuZXJpYyB0ZXN0IHN1aXRlIGRlZmluaXRpb24uIiIiCisgICIiIlJlcHJlc2VudHMgYSBnZW5lcmljIHRlc3Qgc3VpdGUgZGVmaW5pdGlvbi4KKworICBUT0RPOiByZW5hbWUgdGhpcyBhcyBBYnN0cmFjdFRlc3REZWYuCisgICIiIgogCiAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICBzZWxmLl9uYW1lID0gTm9uZQogICAgIHNlbGYuX2J1aWxkX3BhdGggPSBOb25lCiAgICAgc2VsZi5fYnVpbGRfZGVwZW5kZW5jaWVzID0gW10KICAgICBzZWxmLl9pc19jb250aW51b3VzID0gRmFsc2UKLSAgICBzZWxmLl9pc19jdHMgPSBGYWxzZQorICAgIHNlbGYuX3N1aXRlID0gTm9uZQogICAgIHNlbGYuX2Rlc2NyaXB0aW9uID0gJycKICAgICBzZWxmLl9leHRyYV9idWlsZF9hcmdzID0gJycKIApAQCAtNjEsMTIgKzY0LDEyIEBACiAgICAgc2VsZi5faXNfY29udGludW91cyA9IGNvbnRpbnVvdXMKICAgICByZXR1cm4gc2VsZi5faXNfY29udGludW91cwogCi0gIGRlZiBJc0N0cyhzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRydWUgaWYgdGVzdCBpcyBwYXJ0IG9mIHRoZSBjb21wYXRpYmlsaXR5IHRlc3Qgc3VpdGUiIiIKLSAgICByZXR1cm4gc2VsZi5faXNfY3RzCisgIGRlZiBHZXRTdWl0ZShzZWxmKToKKyAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRlc3QnIHN1aXRlLCBvciBOb25lLiIiIgorICAgIHJldHVybiBzZWxmLl9zdWl0ZQogCi0gIGRlZiBTZXRDdHMoc2VsZiwgY3RzKToKLSAgICBzZWxmLl9pc19jdHMgPSBjdHMKKyAgZGVmIFNldFN1aXRlKHNlbGYsIHN1aXRlKToKKyAgICBzZWxmLl9zdWl0ZSA9IHN1aXRlCiAgICAgcmV0dXJuIHNlbGYKIAogICBkZWYgR2V0RGVzY3JpcHRpb24oc2VsZik6CmRpZmYgLS1naXQgYS90ZXN0cnVubmVyL3Rlc3RfZGVmcy90ZXN0X3dhbGtlci5weSBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzL3Rlc3Rfd2Fsa2VyLnB5CmluZGV4IDk3M2NhYzEuLjgzNGIzZDIgMTAwNzU1Ci0tLSBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzL3Rlc3Rfd2Fsa2VyLnB5CisrKyBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzL3Rlc3Rfd2Fsa2VyLnB5CkBAIC0yOTAsNyArMjkwLDggQEAKICAgICAgICMgcGFja2FnZSBuYW1lLCB0aGlzIGlzIGEgY3RzIHRlc3QKICAgICAgICMgdGhpcyBsb2dpYyBjYW4gYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIHdoZW4gY3RzIHRlc3RzIG5vIGxvbmdlciByZXF1aXJlCiAgICAgICAjIGN1c3RvbSBidWlsZCBzdGVwcwotICAgICAgc3VpdGUuU2V0Q3RzKHN1aXRlLkdldFBhY2thZ2VOYW1lKCkuc3RhcnRzd2l0aCgnY29tLmFuZHJvaWQuY3RzJykpCisgICAgICBpZiBzdWl0ZS5HZXRQYWNrYWdlTmFtZSgpLnN0YXJ0c3dpdGgoJ2NvbS5hbmRyb2lkLmN0cycpOgorICAgICAgICBzdWl0ZS5TZXRTdWl0ZSgnY3RzJykKICAgICAgIHRlc3RzLmFwcGVuZChzdWl0ZSkKICAgICByZXR1cm4gdGVzdHMKIApkaWZmIC0tZ2l0IGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMveG1sX3N1aXRlX2hlbHBlci5weSBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzL3htbF9zdWl0ZV9oZWxwZXIucHkKaW5kZXggYzJlZDFkZC4uYjdlZDgzYiAxMDA2NDQKLS0tIGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMveG1sX3N1aXRlX2hlbHBlci5weQorKysgYi90ZXN0cnVubmVyL3Rlc3RfZGVmcy94bWxfc3VpdGVfaGVscGVyLnB5CkBAIC0zNiw3ICszNiw3IEBACiAgIF9OQU1FX0FUVFIgPSAnbmFtZScKICAgX0JVSUxEX0FUVFIgPSAnYnVpbGRfcGF0aCcKICAgX0NPTlRJTlVPVVNfQVRUUiA9ICdjb250aW51b3VzJwotICBfQ1RTX0FUVFIgPSAnY3RzJworICBfU1VJVEVfQVRUUiA9ICdzdWl0ZScKICAgX0RFU0NSSVBUSU9OX0FUVFIgPSAnZGVzY3JpcHRpb24nCiAgIF9FWFRSQV9CVUlMRF9BUkdTX0FUVFIgPSAnZXh0cmFfYnVpbGRfYXJncycKIApAQCAtNzEsOCArNzEsOCBAQAogICAgIHRlc3Rfc3VpdGUuU2V0Q29udGludW91cyhzZWxmLl9QYXJzZUF0dHJpYnV0ZShzdWl0ZV9lbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9DT05USU5VT1VTX0FUVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBkZWZhdWx0X3ZhbHVlPUZhbHNlKSkKLSAgICB0ZXN0X3N1aXRlLlNldEN0cyhzZWxmLl9QYXJzZUF0dHJpYnV0ZShzdWl0ZV9lbGVtZW50LCBzZWxmLl9DVFNfQVRUUiwgRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZT1GYWxzZSkpCisgICAgdGVzdF9zdWl0ZS5TZXRTdWl0ZShzZWxmLl9QYXJzZUF0dHJpYnV0ZShzdWl0ZV9lbGVtZW50LCBzZWxmLl9TVUlURV9BVFRSLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlPU5vbmUpKQogICAgIHRlc3Rfc3VpdGUuU2V0RGVzY3JpcHRpb24oc2VsZi5fUGFyc2VBdHRyaWJ1dGUoc3VpdGVfZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX0RFU0NSSVBUSU9OX0FUVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fwa2NoZWNrL0FuZHJvaWQubWsgYi90b29scy9hcGtjaGVjay9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODg5MzkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hcGtjaGVjay9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworIyBXZSB1c2UgY29weS1maWxlLXRvLW5ldy10YXJnZXQgc28gdGhhdCB0aGUgaW5zdGFsbGVkCisjIHNjcmlwdCBmaWxlJ3MgdGltZXN0YW1wIGlzIGF0IGxlYXN0IGFzIG5ldyBhcyB0aGUKKyMgLmphciBmaWxlIGl0IHdyYXBzLgorCisjIHRoZSBleGVjdXRpb24gc2NyaXB0CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9JU19IT1NUX01PRFVMRSA6PSB0cnVlCitMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVhFQ1VUQUJMRVMKK0xPQ0FMX01PRFVMRSA6PSBhcGtjaGVjaworCitpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCisKKyQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChIT1NUX09VVF9KQVZBX0xJQlJBUklFUykvYXBrY2hlY2skKENPTU1PTl9KQVZBX1BBQ0tBR0VfU1VGRklYKQorJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2V0Yy9hcGtjaGVjayB8ICQoQUNQKQorCUBlY2hvICJDb3B5OiAkKFBSSVZBVEVfTU9EVUxFKSAoJEApIgorCSQoY29weS1maWxlLXRvLW5ldy10YXJnZXQpCisJJChoaWRlKSBjaG1vZCA3NTUgJEAKKworIyB0aGUgb3RoZXIgc3R1ZmYKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdWJkaXJzIDo9ICQoYWRkcHJlZml4ICQoTE9DQUxfUEFUSCkvLCQoYWRkc3VmZml4IC9BbmRyb2lkLm1rLCBcCisJCXNyYyBcCisJKSkKKworaW5jbHVkZSAkKHN1YmRpcnMpCmRpZmYgLS1naXQgYS90b29scy9hcGtjaGVjay9SRUFETUUudHh0IGIvdG9vbHMvYXBrY2hlY2svUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGRjZDlhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYXBrY2hlY2svUkVBRE1FLnR4dApAQCAtMCwwICsxLDE3OSBAQAorQW5kcm9pZCBBUEsgQ2hlY2tlcgorCitUaGlzIGNvbXBhcmVzIHRoZSBzZXQgb2YgY2xhc3NlcywgZmllbGRzLCBhbmQgbWV0aG9kcyB1c2VkIGJ5IGFuIEFuZHJvaWQKK2FwcGxpY2F0aW9uIGFnYWluc3QgdGhlIHB1Ymxpc2hlZCBBUEkuICBJdCBpZGVudGlmaWVzIGFuZCByZXBvcnRzIHRoZQordXNlIG9mIGFueSB1bnB1Ymxpc2hlZCBtZW1iZXJzIG9yIG1ldGhvZHMuCisKK1RoZSBwdWJsaWMgQVBJIGRlc2NyaXB0aW9uIGZpbGVzIGxpdmUgaW4gdGhlIHNvdXJjZSB0cmVlLCBpbgorZnJhbWV3b3Jrcy9iYXNlL2FwaS8uICBUaGUgdGlwLW9mLXRyZWUgdmVyc2lvbiBpcyBpbiAiY3VycmVudC54bWwiLAorYW5kIGVhY2ggb2ZmaWNpYWxseSByZWxlYXNlZCBBUEkgaGFzIGEgbnVtYmVyZWQgZmlsZSAoZS5nLiAiNi54bWwiKS4KK1RoZXkncmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNvdXJjZXMsIGFuZCBjYW4gdGFrZSBpbnRvIGFjb3VudCBqYXZhZG9jCithbm5vdGF0aW9ucyBsaWtlICJAaGlkZSIgaW4gY29tbWVudHMuCisKK1RoZSBkZXBlbmRlbmN5IHNldCBmb3IgYW4gQVBLIGNhbiBiZSBnZW5lcmF0ZWQgd2l0aCAiZGV4ZGVwcyIuICBJdCBmaW5kcworYWxsIGNsYXNzZXMsIGZpZWxkcywgYW5kIG1ldGhvZHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBjbGFzc2VzLmRleCBidXQgbm90CitkZWZpbmVkIGxvY2FsbHkuICBUaGUgdG9vbCBjYW4ndCBlYXNpbHkgdGVsbCBhbnl0aGluZyBhYm91dCBhIGRlcGVuZGVuY3kKK2JleW9uZCB0aGUgbmFtZSAoZS5nLiB3aGV0aGVyIGEgY2xhc3MgaXMgYSBzdGF0aWMgb3Igbm9uLXN0YXRpYyBpbm5lcgorY2xhc3MpLCBzbyB3aGlsZSB0aGUgb3V0cHV0IGZyb20gZGV4ZGVwcyBpcyBzaW1pbGFyIGluIHN0cnVjdHVyZSB0byB0aGUKK0FQSSBYTUwgZmlsZSwgaXQgaGFzIG11Y2ggbGVzcyBkZXRhaWwuCisKKworPT09PSBVc2FnZSA9PT09CisKKyUgYXBrY2hlY2sgW29wdGlvbnNdIHB1YmxpYy1hcGkueG1sIGFwazEueG1sIC4uLgorCitQcm92aWRlIHRoZSBwdWJsaWMgQVBJIGRhdGEgZmlsZSBvZiBjaG9pY2UsIGFuZCBvbmUgb3IgbW9yZSBYTUwgZmlsZXMKK2dlbmVyYXRlZCBieSBkZXhkZXBzLiAgVGhlIHRpbWUgcmVxdWlyZWQgdG8gcGFyc2UgYW5kIG1hbmlwdWxhdGUgdGhlCitwdWJsaWMgQVBJIFhNTCBmaWxlIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSB0aW1lIHJlcXVpcmVkIHRvCithbmFseXplIHRoZSBBUEssIHNvIGlmIHlvdSBoYXZlIGEgbGFyZ2Ugc2V0IG9mIEFQS3MgaXQncyBiZXN0IHRvIHJ1biB0aGVtCit0aHJvdWdoIGluIGxhcmdlIGJhdGNoZXMuCisKK09wdGlvbnM6CisKKyAgLS1oZWxwCisgICAgU2hvdyBvcHRpb25zIHN1bW1hcnkuCisKKyAgLS11c2VzLWxpYnJhcnk9PGxpYi54bWw+CisgICAgTG9hZCBhZGRpdGlvbmFsIHB1YmxpYyBBUEkgbGlzdC4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIEFQS3MgdGhhdAorICAgIHVzZSAidXNlcy1saWJyYXJ5IiBkaXJlY3RpdmVzIHRvIHB1bGwgaW4gZXh0ZXJuYWwgbGlicmFyaWVzLiAgU2luY2UKKyAgICB0aGUgZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgdGhlaXIgdXNlCisgICAgd291bGQgb3RoZXJ3aXNlIGJlIGZsYWdnZWQgYXMgaWxsZWdhbCBieSBhcGtjaGVjay4KKworICAtLWlnbm9yZS1wYWNrYWdlPTxwYWNrYWdlLW5hbWU+CisgICAgSWdub3JlIGVycm9ycyBnZW5lcmF0ZWQgYnkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZWQgcGFja2FnZSAoZS5nLgorICAgICJjb20uZ29vZ2xlLmFuZHJvaWQubWFwcyIpLiAgV2FybmluZ3Mgd2lsbCBiZSBnZW5lcmF0ZWQgaW5zdGVhZC4KKyAgICBVc2VmdWwgZm9yIGlnbm9yaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkIGxpYnJhcnkgY29udGVudCB3aGVuCisgICAgWE1MIEFQSSBkYXRhIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgLS1bbm8tXXdhcm4KKyAgICBFbmFibGUgb3IgZGlzYWJsZSB3YXJuaW5nIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKKyAgLS1bbm8tXWVycm9yCisgICAgRW5hYmxlIG9yIGRpc2FibGUgZXJyb3IgbWVzc2FnZXMuICBUaGVzZSBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiAgSWYKKyAgICB5b3UgZGlzYWJsZSBib3RoIHdhcm5pbmdzIGFuZCBlcnJvcnMgeW91IHdpbGwgb25seSBzZWUgYSBzdW1tYXJ5LgorCitJbiBzb21lIGNhc2VzIGludm9sdmluZyBnZW5lcmljIHNpZ25hdHVyZXMgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZQordG8gYWNjdXJhdGVseSByZWNvbnN0cnVjdCB0aGUgcHVibGljIEFQSS4gIFNvbWUgcG9wdWxhciBjYXNlcyBoYXZlCitiZWVuIGhhcmQtY29kZWQgaW50byB0aGUgcHJvZ3JhbS4gIFRoZXkgY2FuIGJlIGluY2x1ZGVkIGJ5IHNwZWNpZnlpbmcKKyItLXVzZXMtbGlicmFyeT1CVUlMVElOIi4KKworRXhhbXBsZSB1c2U6CisKKyUgZGV4ZGVwcyBvdXQvdGFyZ2V0L3Byb2R1Y3Qvc2FwcGhpcmUvc3lzdGVtL2FwcC9HbWFpbC5hcGsgPiBHbWFpbC5hcGsueG1sCislIGFwa2NoZWNrIC0tdXNlcy1saWJyYXJ5PUJVSUxUSU4gZnJhbWV3b3Jrcy9iYXNlL2FwaS9jdXJyZW50LnhtbCBHbWFpbC5hcGsueG1sCitHbWFpbC5hcGsueG1sOiBzdW1tYXJ5OiAwIGVycm9ycywgMTUgd2FybmluZ3MKKworCis9PT09IExpbWl0YXRpb25zID09PT0KKworVGhlIEFQSSBYTUwgZmlsZXMgaGF2ZSBzb21lIGFtYmlndW91cyBlbnRyaWVzIGFuZCBhcmUgbWlzc2luZyBpbXBvcnRhbnQKK3BpZWNlcy4gIEEgc3VtbWFyeSBvZiB0aGUgaXNzdWVzIGZvbGxvd3MuCisKKygxKSBDbGFzcyBuYW1lcyBhcmUgbm90IGluIGJpbmFyeSBmb3JtCisKK0V4YW1wbGU6CisKKyB0eXBlPSJhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvciIKKworVGhpcyBjb3VsZCBiZSBhIENyZWF0b3IgY2xhc3MgaW4gdGhlIHBhY2thZ2UgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLAorb3IgUGFyY2VsYWJsZS5DcmVhdG9yIGluIHRoZSBwYWNrYWdlIGFuZHJvaWQub3MuICBXZSBjYW4gZ3Vlc3MgYmFzZWQgb24KK2NhcGl0YWxpemF0aW9uLCBidXQgdGhhdCdzIHVucmVsaWFibGUuCisKK1RoZSBBUEkgWE1MIGRvZXMgc3BlY2lmeSBlYWNoIHBhY2thZ2UgaW4gYSA8cGFja2FnZT4gdGFnLCBzbyB3ZSBzaG91bGQgaGF2ZQordGhlIGZ1bGwgc2V0IG9mIHBhY2thZ2VzIGF2YWlsYWJsZS4gIEZyb20gdGhpcyB3ZSBjYW4gcmVtb3ZlIG9uZSBlbGVtZW50CithdCBhIHRpbWUgZnJvbSB0aGUgcmlnaHQgdW50aWwgd2UgbWF0Y2ggYSBrbm93biBwYWNrYWdlLiAgVGhpcyB3aWxsIHdvcmsKK3VubGVzcyAiYW5kcm9pZC5vcyIgYW5kICJhbmRyb2lkLm9zLlBhcmNlbGFibGUiIGFyZSBib3RoIHZhbGlkIHBhY2thZ2VzLgorCisKKygyKSBQdWJsaWMgZW51bXMgYXJlIG5vdCBlbnVtZXJhdGVkCisKK0VudW1lcmF0aW9uIGNsYXNzZXMgYXJlIGluY2x1ZGVkLCBhbmQgYWx3YXlzIGhhdmUgdHdvIG1ldGhvZHMgKCJ2YWx1ZU9mIgorYW5kICJ2YWx1ZXMiKS4gIFdoYXQgaXNuJ3QgaW5jbHVkZWQgYXJlIGVudHJpZXMgZm9yIHRoZSBmaWVsZHMgcmVwcmVzZW50aW5nCit0aGUgZW51bWVyYXRpb24gdmFsdWVzLiAgVGhpcyBtYWtlcyBpdCBsb29rIGxpa2UgYW4gQVBLIGlzIHJlZmVycmluZwordG8gbm9uLXB1YmxpYyBmaWVsZHMgaW4gdGhlIGNsYXNzLgorCitJZiBhcGtjaGVjayBzZWVzIGEgcmVmZXJlbmNlIHRvIGFuIHVua25vd24gZmllbGQsIGFuZCB0aGUgZmllbGQncyBkZWZpbmluZworY2xhc3MgYXBwZWFycyB0byBiZSBhbiBFbnVtICh0aGUgc3VwZXJjbGFzcyBpcyBqYXZhLmxhbmcuRW51bSksIHdlIGVtaXQKK2Egd2FybmluZyBpbnN0ZWFkIG9mIGFuIGVycm9yLgorCisKKygzKSBQdWJsaWMgYW5ub3RhdGlvbiBtZXRob2RzIGFyZSBub3QgbGlzdGVkCisKK0Fubm90YXRpb24gY2xhc3NlcyBoYXZlIHRyaXZpYWwgZW50cmllcyB0aGF0IHNob3cgb25seSB0aGUgY2xhc3MgbmFtZQorYW5kICJpbXBsZW1lbnRzIGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24iLiAgSXQgaXMgbm90IHBvc3NpYmxlCit0byB2ZXJpZnkgdGhhdCBhIG1ldGhvZCBjYWxsIG9uIGFuIGFubm90YXRpb24gaXMgdmFsaWQuCisKK0lmIGFwa2NoZWNrIHNlZXMgYSBtZXRob2QgY2FsbCB0byBhbiB1bmtub3duIG1ldGhvZCwgYW5kIHRoZSBjbGFzcyBhcHBlYXJzCit0byBiZSBhbiBhbm5vdGF0aW9uIChleHRlbmRzIE9iamVjdCwgaW1wbGVtZW50cyBBbm5vdGF0aW9uLCBkZWZpbmVzIG5vCitmaWVsZHMgb3IgbWV0aG9kcyksIHdlIGVtaXQgYSB3YXJuaW5nIGluc3RlYWQgb2YgYW4gZXJyb3IuCisKKworKDQpIENvdmFyaWFudCByZXR1cm4gdHlwZXMKKworU3VwcG9zZSBhIGNsYXNzIGRlZmluZXMgYSBtZXRob2QgInB1YmxpYyBGb28gZ2ltbWVGb28oKSIuICBBbnkgc3ViY2xhc3MKK3RoYXQgb3ZlcnJpZGVzIHRoYXQgbWV0aG9kIG11c3QgYWxzbyByZXR1cm4gRm9vLCBzbyBpdCB3b3VsZCBzZWVtIHRoYXQKK3RoZXJlJ3Mgbm8gbmVlZCB0byBlbWl0IGEgbWV0aG9kIGVudHJ5IGZvciBnaW1tZUZvbygpIGluIHRoZSBzdWJjbGFzc2VzLgorCitIb3dldmVyLCBpdCdzIHBvc3NpYmxlIHRvIG92ZXJyaWRlIGdpbW1lRm9vIHdpdGggInB1YmxpYyBNZWdhRm9vCitnaW1tZUZvbygpIiBzbyBsb25nIGFzIE1lZ2FGb28gaXMgYW4gaW5zdGFuY2Ugb2YgRm9vLiAgSW4gdGhhdCBjYXNlIGl0CitpcyBuZWNlc3NhcnkgdG8gZW1pdCBhIG5ldyBtZXRob2QgZW50cnksIGJ1dCB0aGUgcHVibGljIEFQSSBYTUwgZ2VuZXJhdG9yCitkb2VzIG5vdC4KKworSWYgYXBrY2hlY2sgY2FuJ3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgYSBtZXRob2QgcmVmZXJlbmNlLCBidXQgY2FuCitmaW5kIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcyBvbiBldmVyeXRoaW5nIGJ1dCB0aGUgcmV0dXJuIHR5cGUsIGl0IHdpbGwKK2VtaXQgYSB3YXJuaW5nIGluc3RlYWQgb2YgYW4gZXJyb3IuICAoV2UgY291bGQgYmUgbW9yZSB0aG9yb3VnaCBhbmQgdHJ5Cit0byB2ZXJpZnkgdGhhdCB0aGUgcmV0dXJuIHR5cGVzIGFyZSByZWxhdGVkLCBidXQgdGhhdCdzIG1vcmUgdHJvdWJsZSB0aGFuCitpdCdzIHdvcnRoLikKKworCisoNSkgR2VuZXJpYyBzaWduYXR1cmVzCisKK1doZW4gZ2VuZXJpYyBzaWduYXR1cmVzIGFyZSB1c2VkLCB0aGUgcHVibGljIEFQSSBmaWxlIHdpbGwgY29udGFpbgorZW50cmllcyBsaWtlIHRoZXNlOgorCisgPHBhcmFtZXRlciBuYW1lPSJrZXkiIHR5cGU9IksiPgorIDxwYXJhbWV0ZXIgbmFtZT0ib3RoZXJzIiB0eXBlPSJFLi4uIj4KKyA8cGFyYW1ldGVyIG5hbWU9Im1hcCIgdHlwZT0iamF2YS51dGlsLk1hcCZsdDs/IGV4dGVuZHMgSywgPyBleHRlbmRzIFYmZ3Q7Ij4KKworVGhlIGdlbmVyaWMgdHlwZXMgYXJlIGdlbmVyYWxseSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGNsYXNzZXMgaW4gdGhlCitkZWZhdWx0IHBhY2thZ2UgKGkuZS4gdGhhdCBoYXZlIG5vIHBhY2thZ2UgbmFtZSkuICBJbiBtb3N0IGNhc2VzIHRoZXkncmUKK2Egc2luZ2xlIGxldHRlciwgc28gYXBrY2hlY2sgaW5jbHVkZXMgYSBrbHVnZSB0aGF0IGNvbnZlcnRzIHNpbmdsZS1sZXR0ZXIKK2NsYXNzIG5hbWVzIHRvIGphdmEubGFuZy5PYmplY3QuCisKK1RoaXMgb2Z0ZW4gd29ya3MsIGJ1dCBmYWxscyBhcGFydCBpbiBhIGZldyBjYXNlcy4gIEZvciBleGFtcGxlOgorCisgcHVibGljIDxUIGV4dGVuZHMgUGFyY2VsYWJsZT4gVCBnZXRQYXJjZWxhYmxlRXh0cmEoU3RyaW5nIG5hbWUpIHsKKyAgICAgcmV0dXJuIG1FeHRyYXMgPT0gbnVsbCA/IG51bGwgOiBtRXh0cmFzLjxUPmdldFBhcmNlbGFibGUobmFtZSk7CisgfQorCitUaGlzIGlzIGVtaXR0ZWQgYXM6CisKKyA8bWV0aG9kIG5hbWU9ImdldFBhcmNlbGFibGVFeHRyYSIgcmV0dXJuPSJUIj4KKword2hpY2ggZ2V0cyBjb252ZXJ0ZWQgdG8gamF2YS5sYW5nLk9iamVjdC4gIFVuZm9ydHVuYXRlbHkgdGhlIEFQSyB3YW50cworYSBtZXRob2Qgd2l0aCBhIG1vcmUgc3BlY2lmaWMgcmV0dXJuIHR5cGUgKGFuZHJvaWQub3MuUGFyY2VsYWJsZSksIHNvCit0aGUgbG9va3VwIGZhaWxzLgorCitUaGVyZSBpcyBubyB3YXkgdG8gcmVjb3ZlciB0aGUgYWN0dWFsIHR5cGUsIGJlY2F1c2UgdGhlIGdlbmVyaWMgc2lnbmF0dXJlCitkZXRhaWxzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgWE1MLiAgVGhpcyBwYXJ0aWN1bGFyIGNhc2Ugd2lsbCBiZSBoYW5kbGVkCithcyBhIGNvdmFyaWFudCByZXR1cm4gdHlwZS4gIFdoZW4gdGhlIGdlbmVyaWMgdHlwZSBpcyBpbiB0aGUgcGFyYW1ldGVyCitsaXN0LCB0aG91Z2gsIHRoaXMgaXNuJ3QgaGFuZGxlZCBzbyBlYXNpbHkuCisKK1RoZXNlIGNhc2VzIGFyZSByZWxhdGl2ZWx5IGZldywgc28gdGhleSB3ZXJlIGhhbmRsZWQgYnkgYmFraW5nIHRoZQorc2lnbmF0dXJlcyBpbnRvIHRoZSBjb2RlICgtLXVzZXMtbGlicmFyeT1CVUlMVElOKS4gIChBdCBzb21lIHBvaW50IGl0CittYXkgYmUgd29ydGh3aGlsZSB0byB0cnkgYSBsaXR0bGUgaGFyZGVyIGhlcmUuKQorCisKKyg2KSBVc2Ugb2Ygb3BhcXVlIG5vbi1wdWJsaWMgdHlwZXMKKworU29tZSBjbGFzc2VzIGFyZSBub3QgbWVhbnQgZm9yIHB1YmxpYyBjb25zdW1wdGlvbiwgYnV0IGFyZSBzdGlsbCByZWZlcnJlZAordG8gYnkgYXBwbGljYXRpb24gY29kZS4gIEZvciBleGFtcGxlLCBhbiBvcGFxdWUgdHlwZSBtaWdodCBiZSBwYXNzZWQgdG8KK3RoZSBhcHAgYXMgYSBjb29raWUuCisKK0Fub3RoZXIgZXhhbXBsZSBpcyB0aGUgRGFsdmlrIGFubm90YXRpb24gY2xhc3NlcywgbGlrZQorZGFsdmlrLmFubm90YXRpb24uSW5uZXJDbGFzcy4gIFRoZXNlIGFyZSBlbWl0dGVkIGJ5ICJkeCIsIGFuZCByZWZlcmVuY2VkCitmcm9tIHRoZSBERVggZmlsZSwgYnV0IG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9uIGNvZGUuCisKK0lmIGFuIEFQSyByZWZlcnMgdG8gYSBub24tcHVibGljIGNsYXNzLCBidXQgZG9lc24ndCBhY2Nlc3MgYW55IGZpZWxkcworb3IgbWV0aG9kcywgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgaW5zdGVhZCBvZiBhbiBlcnJvci4KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svZXRjL2Fwa2NoZWNrIGIvdG9vbHMvYXBrY2hlY2svZXRjL2Fwa2NoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YWY5M2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hcGtjaGVjay9ldGMvYXBrY2hlY2sKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgU2V0IHVwIHByb2cgdG8gYmUgdGhlIHBhdGggb2YgdGhpcyBzY3JpcHQsIGluY2x1ZGluZyBmb2xsb3dpbmcgc3ltbGlua3MsCisjIGFuZCBzZXQgdXAgcHJvZ2RpciB0byBiZSB0aGUgZnVsbHktcXVhbGlmaWVkIHBhdGhuYW1lIG9mIGl0cyBkaXJlY3RvcnkuCitwcm9nPSIkMCIKK3doaWxlIFsgLWggIiR7cHJvZ30iIF07IGRvCisgICAgbmV3UHJvZz1gL2Jpbi9scyAtbGQgIiR7cHJvZ30iYAorICAgIG5ld1Byb2c9YGV4cHIgIiR7bmV3UHJvZ30iIDogIi4qIC0+IFwoLipcKSQiYAorICAgIGlmIGV4cHIgIngke25ld1Byb2d9IiA6ICd4LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBwcm9nPSIke25ld1Byb2d9IgorICAgIGVsc2UKKyAgICAgICAgcHJvZ2Rpcj1gZGlybmFtZSAiJHtwcm9nfSJgCisgICAgICAgIHByb2c9IiR7cHJvZ2Rpcn0vJHtuZXdQcm9nfSIKKyAgICBmaQorZG9uZQorb2xkd2Q9YHB3ZGAKK3Byb2dkaXI9YGRpcm5hbWUgIiR7cHJvZ30iYAorY2QgIiR7cHJvZ2Rpcn0iCitwcm9nZGlyPWBwd2RgCitwcm9nPSIke3Byb2dkaXJ9Ii9gYmFzZW5hbWUgIiR7cHJvZ30iYAorY2QgIiR7b2xkd2R9IgorCitsaWJkaXI9YGRpcm5hbWUgJHByb2dkaXJgL2ZyYW1ld29yaworCitqYXZhT3B0cz0iIgord2hpbGUgZXhwciAieCQxIiA6ICd4LUonID4vZGV2L251bGw7IGRvCisgICAgb3B0PWBleHByICIkMSIgOiAnLUpcKC4qXCknYAorICAgIGphdmFPcHRzPSIke2phdmFPcHRzfSAtJHtvcHR9IgorICAgIHNoaWZ0Citkb25lCisKK2V4ZWMgamF2YSAkamF2YU9wdHMgLWphciAkbGliZGlyL2Fwa2NoZWNrLmphciAiJEAiCmRpZmYgLS1naXQgYS90b29scy9hcGtjaGVjay9ldGMvbWFuaWZlc3QudHh0IGIvdG9vbHMvYXBrY2hlY2svZXRjL21hbmlmZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRmZWYyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYXBrY2hlY2svZXRjL21hbmlmZXN0LnR4dApAQCAtMCwwICsxLDIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorTWFpbi1DbGFzczogY29tLmFuZHJvaWQuYXBrY2hlY2suQXBrQ2hlY2sKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fwa2NoZWNrL3NyYy9BbmRyb2lkLm1rIGIvdG9vbHMvYXBrY2hlY2svc3JjL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjODEzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMjggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworCisjIGFwa2NoZWNrIGphdmEgbGlicmFyeQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKK0xPQ0FMX0pBUl9NQU5JRkVTVCA6PSAuLi9ldGMvbWFuaWZlc3QudHh0CisKK0xPQ0FMX01PRFVMRTo9IGFwa2NoZWNrCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0pBVkFfTElCUkFSWSkKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0FwaURlc2NySGFuZGxlci5qYXZhIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0FwaURlc2NySGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyN2EyMGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svQXBpRGVzY3JIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmFwa2NoZWNrOworCitpbXBvcnQgb3JnLnhtbC5zYXguKjsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLio7CitpbXBvcnQgamF2YS5pby4qOworCisKKy8qKgorICogUHJvdmlkZXMgaW1wbGVtZW50YXRpb24gZm9yIFNBWCBwYXJzZXIuCisgKi8KK2NsYXNzIEFwaURlc2NySGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKKyAgICAvKgorICAgICAqIFViZXItY29udGFpbmVyLgorICAgICAqLworICAgIHByaXZhdGUgQXBpTGlzdCBtQXBpTGlzdDsKKworICAgIC8qCisgICAgICogVGVtcG9yYXJ5IG9iamVjdHMsIHVzZWQgYXMgY29udGFpbmVycyB3aGlsZSB3ZSBhY2N1bXVsYXRlIHRoZQorICAgICAqIGlubmFyZHMuCisgICAgICovCisgICAgcHJpdmF0ZSBQYWNrYWdlSW5mbyBtQ3VycmVudFBhY2thZ2UgPSBudWxsOworICAgIHByaXZhdGUgQ2xhc3NJbmZvIG1DdXJyZW50Q2xhc3MgPSBudWxsOworICAgIHByaXZhdGUgTWV0aG9kSW5mbyBtQ3VycmVudE1ldGhvZCA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIEFwaURlc2NySGFuZGxlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmaWxlTmFtZSBTb3VyY2UgZmlsZSBuYW1lLCB1c2VkIGZvciBkZWJ1Z2dpbmcuCisgICAgICovCisgICAgcHVibGljIEFwaURlc2NySGFuZGxlcihBcGlMaXN0IGFwaUxpc3QpIHsKKyAgICAgICAgbUFwaUxpc3QgPSBhcGlMaXN0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIEFwaUxpc3QgaW4gaXRzIGN1cnJlbnQgc3RhdGUuICBHZW5lcmFsbHkgb25seQorICAgICAqIG1ha2VzIHNlbnNlIHRvIGNhbGwgaGVyZSBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXBpTGlzdCBnZXRBcGlMaXN0KCkgeworICAgICAgICByZXR1cm4gbUFwaUxpc3Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvY2Vzc2VzIHN0YXJ0IHRhZ3MuICBJZiB0aGUgZmlsZSBpcyBtYWxmb3JtZWQgd2Ugd2lsbCBsaWtlbHkKKyAgICAgKiBOUEUsIGJ1dCB0aGlzIGlzIGNhcHR1cmVkIGJ5IHRoZSBjYWxsZXIuCisgICAgICoKKyAgICAgKiBXZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgcGFja2FnZXMgYW5kIGNsYXNzZXMgb25seSBhcHBlYXIgb25jZSwKKyAgICAgKiBzbyBhbGwgY2xhc3NlcyBhc3NvY2lhdGVkIHdpdGggYSBwYWNrYWdlIGFyZSB3cmFwcGVkIGluIGEgc2luZ3VsYXIKKyAgICAgKiBpbnN0YW5jZSBvZiAmbHQ7cGFja2FnZSZndDsuICBXZSBtYXkgd2FudCB0byByZW1vdmUgdGhpcyBhc3N1bXB0aW9uCisgICAgICogYnkgYXR0ZW1wdGluZyB0byBmaW5kIGFuIGV4aXN0aW5nIHBhY2thZ2UvY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsCisgICAgICAgICAgICBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKKworICAgICAgICBpZiAocU5hbWUuZXF1YWxzKCJwYWNrYWdlIikpIHsKKyAgICAgICAgICAgIC8qIHRvcC1tb3N0IGVsZW1lbnQgKi8KKyAgICAgICAgICAgIG1DdXJyZW50UGFja2FnZSA9IG1BcGlMaXN0LmdldE9yQ3JlYXRlUGFja2FnZSgKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZSgibmFtZSIpKTsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoImNsYXNzIikgfHwgcU5hbWUuZXF1YWxzKCJpbnRlcmZhY2UiKSkgeworICAgICAgICAgICAgLyogZ2V0IGNsYXNzLCBnYXRoZXIgZmllbGRzL21ldGhvZHMgYW5kIGludGVyZmFjZXMgKi8KKyAgICAgICAgICAgIG1DdXJyZW50Q2xhc3MgPSBtQ3VycmVudFBhY2thZ2UuZ2V0T3JDcmVhdGVDbGFzcygKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5nZXRWYWx1ZSgibmFtZSIpLAorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmdldFZhbHVlKCJleHRlbmRzIiksCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoInN0YXRpYyIpKTsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoImltcGxlbWVudHMiKSkgeworICAgICAgICAgICAgLyogYWRkIG5hbWUgb2YgaW50ZXJmYWNlIHRvIGN1cnJlbnQgY2xhc3MgKi8KKyAgICAgICAgICAgIG1DdXJyZW50Q2xhc3MuYWRkSW50ZXJmYWNlKGF0dHJpYnV0ZXMuZ2V0VmFsdWUoIm5hbWUiKSk7CisgICAgICAgIH0gZWxzZSBpZiAocU5hbWUuZXF1YWxzKCJtZXRob2QiKSkgeworICAgICAgICAgICAgLyogaG9sZCBvYmplY3Qgd2hpbGUgd2UgZ2F0aGVyIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgIG1DdXJyZW50TWV0aG9kID0gbmV3IE1ldGhvZEluZm8oYXR0cmlidXRlcy5nZXRWYWx1ZSgibmFtZSIpLAorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoInJldHVybiIpKTsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoImNvbnN0cnVjdG9yIikpIHsKKyAgICAgICAgICAgIC8qIGxpa2UgIm1ldGhvZCIsIGJ1dCBoYXMgbm8gbmFtZSBvciByZXR1cm4gdHlwZSAqLworICAgICAgICAgICAgbUN1cnJlbnRNZXRob2QgPSBuZXcgTWV0aG9kSW5mbygiPGluaXQ+IiwgInZvaWQiKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYSBub24tc3RhdGljIGlubmVyIGNsYXNzLCB3ZSB3YW50IHRvIGFkZCB0aGUKKyAgICAgICAgICAgICAqICJoaWRkZW4iIG91dGVyIGNsYXNzIHBhcmFtZXRlciBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLgorICAgICAgICAgICAgICogV2UgY2FuIHRlbGwgaWYgaXQncyBhbiBpbm5lciBjbGFzcyBiZWNhdXNlIHRoZSBjbGFzcyBuYW1lCisgICAgICAgICAgICAgKiB3aWxsIGluY2x1ZGUgYSAnJCcgKGl0IGhhcyBiZWVuIG5vcm1hbGl6ZWQgYWxyZWFkeSkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFN0cmluZyBzdGF0aWNDbGFzcyA9IG1DdXJyZW50Q2xhc3MuZ2V0U3RhdGljKCk7CisgICAgICAgICAgICBpZiAoc3RhdGljQ2xhc3MgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogV2UncmUgcGFyc2luZyBhbiBBUEsgZmlsZSwgd2hpY2ggbWVhbnMgd2UgY2FuJ3Qga25vdworICAgICAgICAgICAgICAgICAqIGlmIHRoZSBjbGFzcyB3ZSdyZSByZWZlcmVuY2luZyBpcyBzdGF0aWMgb3Igbm90LiAgV2UKKyAgICAgICAgICAgICAgICAgKiBhbHNvIGFscmVhZHkgaGF2ZSB0aGUgInNlY3JldCIgZmlyc3QgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgICogcmVwcmVzZW50ZWQgaW4gdGhlIG1ldGhvZCBwYXJhbWV0ZXIgbGlzdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAgKiBuZWVkIHRvIGluc2VydCBpdCBoZXJlLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfSBlbHNlIGlmICgiZmFsc2UiLmVxdWFscyhzdGF0aWNDbGFzcykpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gbUN1cnJlbnRDbGFzcy5nZXROYW1lKCk7CisgICAgICAgICAgICAgICAgaW50IGRvbGxhckluZGV4ID0gY2xhc3NOYW1lLmluZGV4T2YoJyQnKTsKKyAgICAgICAgICAgICAgICBpZiAoZG9sbGFySW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3V0ZXJDbGFzcyA9IGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgZG9sbGFySW5kZXgpOworICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiLS0tIGluc2VydGluZyAiICsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgbUN1cnJlbnRQYWNrYWdlLmdldE5hbWUoKSArICIuIiArIG91dGVyQ2xhc3MgKworICAgICAgICAgICAgICAgICAgICAvLyAgICAiIGludG8gY29uc3RydWN0b3IgZm9yICIgKyBjbGFzc05hbWUpOworICAgICAgICAgICAgICAgICAgICBtQ3VycmVudE1ldGhvZC5hZGRQYXJhbWV0ZXIobUN1cnJlbnRQYWNrYWdlLmdldE5hbWUoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAiLiIgKyBvdXRlckNsYXNzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocU5hbWUuZXF1YWxzKCJmaWVsZCIpKSB7CisgICAgICAgICAgICAvKiBhZGQgdG8gY3VycmVudCBjbGFzcyAqLworICAgICAgICAgICAgRmllbGRJbmZvIGZJbmZvID0gbmV3IEZpZWxkSW5mbyhhdHRyaWJ1dGVzLmdldFZhbHVlKCJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuZ2V0VmFsdWUoInR5cGUiKSk7CisgICAgICAgICAgICBtQ3VycmVudENsYXNzLmFkZEZpZWxkKGZJbmZvKTsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoInBhcmFtZXRlciIpKSB7CisgICAgICAgICAgICAvKiBhZGQgdG8gY3VycmVudCBtZXRob2QgKi8KKyAgICAgICAgICAgIG1DdXJyZW50TWV0aG9kLmFkZFBhcmFtZXRlcihhdHRyaWJ1dGVzLmdldFZhbHVlKCJ0eXBlIikpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvY2Vzc2VzIGVuZCB0YWdzLiAgR2VuZXJhbGx5IHRoZXNlIGFkZCB0aGUgdW5kZXItY29uc3RydWN0aW9uCisgICAgICogaXRlbSB0byB0aGUgYXBwcm9wcmlhdGUgY29udGFpbmVyLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lKSB7CisgICAgICAgIGlmIChxTmFtZS5lcXVhbHMoIm1ldGhvZCIpIHx8IHFOYW1lLmVxdWFscygiY29uc3RydWN0b3IiKSkgeworICAgICAgICAgICAgLyogYWRkIG1ldGhvZCB0byBjbGFzcyAqLworICAgICAgICAgICAgbUN1cnJlbnRDbGFzcy5hZGRNZXRob2QobUN1cnJlbnRNZXRob2QpOworICAgICAgICAgICAgbUN1cnJlbnRNZXRob2QgPSBudWxsOworICAgICAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscygiY2xhc3MiKSB8fCBxTmFtZS5lcXVhbHMoImludGVyZmFjZSIpKSB7CisgICAgICAgICAgICBtQ3VycmVudENsYXNzID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlmIChxTmFtZS5lcXVhbHMoInBhY2thZ2UiKSkgeworICAgICAgICAgICAgbUN1cnJlbnRQYWNrYWdlID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0FwaUxpc3QuamF2YSBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9BcGlMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViNzAwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9BcGlMaXN0LmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmFwa2NoZWNrOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCisvKioKKyAqIEhvbGRzIGEgbGlzdCBvZiBBUEkgbWVtYmVycywgaW5jbHVkaW5nIGNsYXNzZXMsIGZpZWxkcywgYW5kIG1ldGhvZHMuCisgKi8KK3B1YmxpYyBjbGFzcyBBcGlMaXN0IHsKKyAgICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLFBhY2thZ2VJbmZvPiBtUGFja2FnZUxpc3Q7CisgICAgcHJpdmF0ZSBTdHJpbmcgbURlYnVnU3RyaW5nOworICAgIHByaXZhdGUgaW50IG1XYXJuaW5ncywgbUVycm9yczsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gQXBpTGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkZWJ1Z1N0cmluZyBJZGVudGlmaWNhdGlvbiBzdHJpbmcgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisgICAgICovCisgICAgcHVibGljIEFwaUxpc3QoU3RyaW5nIGRlYnVnU3RyaW5nKSB7CisgICAgICAgIG1QYWNrYWdlTGlzdCA9IG5ldyBIYXNoTWFwPFN0cmluZyxQYWNrYWdlSW5mbz4oKTsKKyAgICAgICAgbURlYnVnU3RyaW5nID0gZGVidWdTdHJpbmc7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgc291cmNlIGZpbGVuYW1lLiAgVXNlZnVsIGZvciBkZWJ1ZyBtZXNzYWdlcyBvbmx5LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVidWdTdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBtRGVidWdTdHJpbmc7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5jcmVtZW50IHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVBJIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW5jcldhcm5pbmdzKCkgeworICAgICAgICBtV2FybmluZ3MrKzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmNyZW1lbnQgdGhlIGVycm9ycyBvZiB3YXJuaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBUEkgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbmNyRXJyb3JzKCkgeworICAgICAgICBtRXJyb3JzKys7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdhcm5pbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFQSSBsaXN0LgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0V2FybmluZ0NvdW50KCkgeworICAgICAgICByZXR1cm4gbVdhcm5pbmdzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVBJIGxpc3QuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRFcnJvckNvdW50KCkgeworICAgICAgICByZXR1cm4gbUVycm9yczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIG5hbWVkIHBhY2thZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBwYWNrYWdlLCBvciBudWxsIGlmIG5vIG1hdGNoIHdhcyBmb3VuZAorICAgICAqLworICAgIHB1YmxpYyBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHJldHVybiBtUGFja2FnZUxpc3QuZ2V0KG5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgbmFtZWQgcGFja2FnZSwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndCBhbHJlYWR5CisgICAgICogZXhpc3QuCisgICAgICovCisgICAgcHVibGljIFBhY2thZ2VJbmZvIGdldE9yQ3JlYXRlUGFja2FnZShTdHJpbmcgbmFtZSkgeworICAgICAgICBQYWNrYWdlSW5mbyBwa2dJbmZvID0gbVBhY2thZ2VMaXN0LmdldChuYW1lKTsKKyAgICAgICAgaWYgKHBrZ0luZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgcGtnSW5mbyA9IG5ldyBQYWNrYWdlSW5mbyhuYW1lKTsKKyAgICAgICAgICAgIG1QYWNrYWdlTGlzdC5wdXQobmFtZSwgcGtnSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBrZ0luZm87CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgdGhlIHNldCBvZiBrbm93biBwYWNrYWdlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgSXRlcmF0b3I8UGFja2FnZUluZm8+IGdldFBhY2thZ2VJdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIG1QYWNrYWdlTGlzdC52YWx1ZXMoKS5pdGVyYXRvcigpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0Fwa0NoZWNrLmphdmEgYi90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svQXBrQ2hlY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQ4Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0Fwa0NoZWNrLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmFwa2NoZWNrOworCitpbXBvcnQgb3JnLnhtbC5zYXguKjsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLio7CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKKworLyoqCisgKiBDaGVja3MgYW4gQVBLJ3MgZGVwZW5kZW5jaWVzIGFnYWluc3QgdGhlIHB1Ymxpc2hlZCBBUEkgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBXZSBuZWVkIHRvIHJlYWQgdHdvIFhNTCBmaWxlcyAoc3BlYyBhbmQgQVBLKSBhbmQgcGVyZm9ybSBzb21lIG9wZXJhdGlvbnMKKyAqIG9uIHRoZSBlbGVtZW50cy4gIFRoZSBmaWxlIGZvcm1hdHMgYXJlIHNpbWlsYXIgYnV0IG5vdCBpZGVudGljYWwsIHNvCisgKiB3ZSBkaXN0aWxsIGl0IGRvd24gdG8gY29tbW9uIGVsZW1lbnRzLgorICoKKyAqIFdlIG1heSBhbHNvIHdhbnQgdG8gcmVhZCBzb21lIGFkZGl0aW9uYWwgQVBJIGxpc3RzIHJlcHJlc2VudGluZworICogbGlicmFyaWVzIHRoYXQgd291bGQgYmUgaW5jbHVkZWQgd2l0aCBhICJ1c2VzLWxpYnJhcnkiIGRpcmVjdGl2ZS4KKyAqCisgKiBGb3IgcGVyZm9ybWFuY2Ugd2Ugd2FudCB0byBhbGxvdyBwcm9jZXNzaW5nIG9mIG11bHRpcGxlIEFQS3Mgc28KKyAqIHdlIGRvbid0IGhhdmUgdG8gcmUtcGFyc2UgdGhlIHNwZWMgZmlsZSBlYWNoIHRpbWUuCisgKi8KK3B1YmxpYyBjbGFzcyBBcGtDaGVjayB7CisgICAgLyoga2VlcCB0cmFjayBvZiBjdXJyZW50IEFQSyBmaWxlIG5hbWUsIGZvciBlcnJvciBtZXNzYWdlcyAqLworICAgIHByaXZhdGUgc3RhdGljIEFwaUxpc3Qgc0N1cnJlbnRBcGs7CisKKyAgICAvKiBzaG93IHdhcm5pbmdzPyAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc1Nob3dXYXJuaW5ncyA9IGZhbHNlOworICAgIC8qIHNob3cgZXJyb3JzPyAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc1Nob3dFcnJvcnMgPSB0cnVlOworCisgICAgLyogbmFtZXMgb2YgcGFja2FnZXMgd2UncmUgYWxsb3dlZCB0byBpZ25vcmUgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gc0lnbm9yYWJsZVBhY2thZ2VzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCisKKyAgICAvKioKKyAgICAgKiBQcm9ncmFtIGVudHJ5IHBvaW50LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgQXBpTGlzdCBhcGlEZXNjciA9IG5ldyBBcGlMaXN0KCJwdWJsaWMtYXBpIik7CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikgeworICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHByb2Nlc3MgYXJncyAqLworICAgICAgICBpbnQgaWR4OworICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGFyZ3MubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgICAgaWYgKGFyZ3NbaWR4XS5lcXVhbHMoIi0taGVscCIpKSB7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaWR4XS5zdGFydHNXaXRoKCItLXVzZXMtbGlicmFyeT0iKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBsaWJOYW1lID0gYXJnc1tpZHhdLnN1YnN0cmluZyhhcmdzW2lkeF0uaW5kZXhPZignPScpKzEpOworICAgICAgICAgICAgICAgIGlmICgiQlVJTFRJTiIuZXF1YWxzKGxpYk5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlYWRlciByZWFkZXIgPSBCdWlsdGluLmdldFJlYWRlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlWG1sKGFwaURlc2NyLCByZWFkZXIsICJCVUlMVElOIikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUFwaURlc2NyKGFwaURlc2NyLCBsaWJOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaWR4XS5zdGFydHNXaXRoKCItLWlnbm9yZS1wYWNrYWdlPSIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHBrZ05hbWUgPSBhcmdzW2lkeF0uc3Vic3RyaW5nKGFyZ3NbaWR4XS5pbmRleE9mKCc9JykrMSk7CisgICAgICAgICAgICAgICAgc0lnbm9yYWJsZVBhY2thZ2VzLmFkZChwa2dOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1tpZHhdLmVxdWFscygiLS13YXJuIikpIHsKKyAgICAgICAgICAgICAgICBzU2hvd1dhcm5pbmdzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1tpZHhdLmVxdWFscygiLS1uby13YXJuIikpIHsKKyAgICAgICAgICAgICAgICBzU2hvd1dhcm5pbmdzID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaWR4XS5lcXVhbHMoIi0tZXJyb3IiKSkgeworICAgICAgICAgICAgICAgIHNTaG93RXJyb3JzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1tpZHhdLmVxdWFscygiLS1uby1lcnJvciIpKSB7CisgICAgICAgICAgICAgICAgc1Nob3dFcnJvcnMgPSBmYWxzZTsKKworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzW2lkeF0uc3RhcnRzV2l0aCgiLS0iKSkgeworICAgICAgICAgICAgICAgIGlmIChhcmdzW2lkeF0uZXF1YWxzKCItLSIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlbWFpbmRlciBhcmUgZmlsZW5hbWVzLCBldmVuIGlmIHRoZXkgc3RhcnQgd2l0aCAiLS0iCisgICAgICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyB1bmtub3duIG9wdGlvbiBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogdW5rbm93biBvcHRpb24gIiArCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2lkeF0gKyAiICh1c2UgXCItLWhlbHBcIiBmb3IgdXNhZ2UgaW5mbykiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkeCA+IGFyZ3MubGVuZ3RoIC0gMikgeworICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHBhcnNlIGJhc2UgQVBJIGRlc2NyaXB0aW9uICovCisgICAgICAgIGlmICghcGFyc2VBcGlEZXNjcihhcGlEZXNjciwgYXJnc1tpZHgrK10pKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8qICJmbGF0dGVuIiBzdXBlcmNsYXNzZXMgYW5kIGludGVyZmFjZXMgKi8KKyAgICAgICAgc0N1cnJlbnRBcGsgPSBhcGlEZXNjcjsKKyAgICAgICAgZmxhdHRlbkluaGVyaXRlZChhcGlEZXNjcik7CisKKyAgICAgICAgLyogd2FsayB0aHJvdWdoIGxpc3Qgb2YgbGlicyB3ZSB3YW50IHRvIHNjYW4gKi8KKyAgICAgICAgZm9yICggOyBpZHggPCBhcmdzLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgIEFwaUxpc3QgYXBrRGVzY3IgPSBuZXcgQXBpTGlzdChhcmdzW2lkeF0pOworICAgICAgICAgICAgc0N1cnJlbnRBcGsgPSBhcGtEZXNjcjsKKyAgICAgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHBhcnNlQXBpRGVzY3IoYXBrRGVzY3IsIGFyZ3NbaWR4XSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoaWR4IDwgYXJncy5sZW5ndGgtMSkKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJTa2lwcGluZy4uLiIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGVjayhhcGlEZXNjciwgYXBrRGVzY3IpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFyZ3NbaWR4XSArICI6IHN1bW1hcnk6ICIgKworICAgICAgICAgICAgICAgIGFwa0Rlc2NyLmdldEVycm9yQ291bnQoKSArICIgZXJyb3JzLCAiICsKKyAgICAgICAgICAgICAgICBhcGtEZXNjci5nZXRXYXJuaW5nQ291bnQoKSArICIgd2FybmluZ3NcbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJpbnRzIHVzYWdlIHN0YXRlbWVudC4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCB1c2FnZSgpIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJBbmRyb2lkIEFQSyBjaGVja2VyIHYxLjAiKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdFxuIik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IGFwa2NoZWNrIFtvcHRpb25zXSBwdWJsaWMtYXBpLnhtbCBhcGsxLnhtbCAuLi5cbiIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk9wdGlvbnM6Iik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAtLWhlbHAgICAgICAgICAgICAgICAgICBzaG93IHRoaXMgbWVzc2FnZSIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgLS11c2VzLWxpYnJhcnk9bGliLnhtbCAgbG9hZCBhZGRpdGlvbmFsIHB1YmxpYyBBUEkgbGlzdCIpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgLS1pZ25vcmUtcGFja2FnZT1wa2cgICAgZG9uJ3Qgc2hvdyBlcnJvcnMgZm9yIHJlZmVyZW5jZXMgdG8gdGhpcyBwYWNrYWdlIik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAtLVtuby1dd2FybiAgICAgICAgICAgICBlbmFibGUgb3IgZGlzYWJsZSBkaXNwbGF5IG9mIHdhcm5pbmdzIik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAtLVtuby1dZXJyb3IgICAgICAgICAgICBlbmFibGUgb3IgZGlzYWJsZSBkaXNwbGF5IG9mIGVycm9ycyIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW5zIHRoZSBmaWxlIGFuZCBwYXNzZXMgaXQgdG8gcGFyc2VYbWwuCisgICAgICoKKyAgICAgKiBUT0RPOiBhbGxvdyAnLScgYXMgYW4gYWxpYXMgZm9yIHN0ZGluPworICAgICAqLworICAgIHN0YXRpYyBib29sZWFuIHBhcnNlQXBpRGVzY3IoQXBpTGlzdCBhcGlMaXN0LCBTdHJpbmcgZmlsZU5hbWUpIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZmlsZU5hbWUpOworICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VYbWwoYXBpTGlzdCwgZmlsZVJlYWRlciwgZmlsZU5hbWUpOworICAgICAgICAgICAgZmlsZVJlYWRlci5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3Igb3BlbmluZyAiICsgZmlsZU5hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2VzIGFuIFhNTCBmaWxlIGhvbGRpbmcgYW4gQVBJIGRlc2NyaXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGZpbGVSZWFkZXIgRGF0YSBzb3VyY2UuCisgICAgICogQHBhcmFtIGFwaUxpc3QgQ29udGFpbmVyIHRvIGFkZCBzdHVmZiB0by4KKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgSW5wdXQgZmlsZSBuYW1lLCBvbmx5IHVzZWQgZm9yIGRlYnVnIG1lc3NhZ2VzLgorICAgICAqLworICAgIHN0YXRpYyBib29sZWFuIHBhcnNlWG1sKEFwaUxpc3QgYXBpTGlzdCwgUmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiLS0tIHBhcnNpbmcgIiArIGZpbGVOYW1lKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFhNTFJlYWRlciB4bWxSZWFkZXIgPSBYTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcigpOworICAgICAgICAgICAgQXBpRGVzY3JIYW5kbGVyIGhhbmRsZXIgPSBuZXcgQXBpRGVzY3JIYW5kbGVyKGFwaUxpc3QpOworICAgICAgICAgICAgeG1sUmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGhhbmRsZXIpOworICAgICAgICAgICAgeG1sUmVhZGVyLnNldEVycm9ySGFuZGxlcihoYW5kbGVyKTsKKyAgICAgICAgICAgIHhtbFJlYWRlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UocmVhZGVyKSk7CisKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCItLS0gcGFyc2luZyBjb21wbGV0ZSIpOworICAgICAgICAgICAgLy9kdW1wQXBpKGFwaUxpc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKFNBWFBhcnNlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHBhcnNpbmcgIiArIGZpbGVOYW1lICsgIiBsaW5lICIgKworICAgICAgICAgICAgICAgIGV4LmdldExpbmVOdW1iZXIoKSArICI6ICIgKyBleC5nZXRNZXNzYWdlKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3Igd2hpbGUgcmVhZGluZyAiICsgZmlsZU5hbWUgKyAiOiAiICsKKyAgICAgICAgICAgICAgICBleC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBmYWlsZWQKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEV4cGFuZHMgbGlzdHMgb2YgZmllbGRzIGFuZCBtZXRob2RzIHRvIHJlY3Vyc2l2ZWx5IGluY2x1ZGUgc3VwZXJjbGFzcworICAgICAqIGFuZCBpbnRlcmZhY2UgZW50cmllcy4KKyAgICAgKgorICAgICAqIFRoZSBBUEkgZGVzY3JpcHRpb24gZmlsZXMgaGF2ZSBlbnRyaWVzIGZvciBldmVyeSBtZXRob2QgYSBjbGFzcworICAgICAqIGRlY2xhcmVzLCBldmVuIGlmIGl0J3MgcHJlc2VudCBpbiB0aGUgc3VwZXJjbGFzcyAoZS5nLiB0b1N0cmluZygpKS4KKyAgICAgKiBSZW1vdmFsIG9mIG9uZSBvZiB0aGVzZSBtZXRob2RzIGRvZXNuJ3QgY29uc3RpdHV0ZSBhbiBBUEkgY2hhbmdlLAorICAgICAqIHRob3VnaCwgc28gaWYgd2UgZG9uJ3QgZmluZCBhIG1ldGhvZCBpbiBhIGNsYXNzIHdlIG5lZWQgdG8gaHVudAorICAgICAqIHRocm91Z2ggaXRzIHN1cGVyY2xhc3Nlcy4KKyAgICAgKgorICAgICAqIFdlIGNhbiB3YWxrIHVwIHRoZSBoaWVyYXJjaHkgd2hpbGUgYW5hbHl6aW5nIHRoZSB0YXJnZXQgQVBLLAorICAgICAqIG9yIHdlIGNhbiAiZmxhdHRlbiIgdGhlIG1ldGhvZHMgZGVjbGFyZWQgYnkgdGhlIHN1cGVyY2xhc3NlcyBhbmQKKyAgICAgKiBpbnRlcmZhY2VzIGJlZm9yZSB3ZSBiZWdpbiB0aGUgYW5hbHlzaXMuICBFeHBhbmRpbmcgdXAgZnJvbnQgY2FuIGJlCisgICAgICogYmVuZWZpY2lhbCBpZiB3ZSdyZSBhbmFseXppbmcgbG90cyBvZiBBUEtzIGluIG9uZSBnbywgYnV0IGRldHJpbWVudGFsCisgICAgICogdG8gc3RhcnR1cCB0aW1lIGlmIHdlIGp1c3Qgd2FudCB0byBsb29rIGF0IG9uZSBzbWFsbCBBUEsuCisgICAgICoKKyAgICAgKiBJdCBhbHNvIG1lYW5zIGZpbGxpbmcgdGhlIGZpZWxkL21ldGhvZCBoYXNoIHRhYmxlcyB3aXRoIGxvdHMgb2YKKyAgICAgKiBlbnRyaWVzIHRoYXQgbmV2ZXIgZ2V0IHVzZWQsIHBvc3NpYmx5IHdvcnNlbmluZyB0aGUgaGFzaCB0YWJsZQorICAgICAqIGhpdCByYXRlLgorICAgICAqCisgICAgICogV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgZm9yIHRoZSBwdWJsaWMgQVBJIGxpc3QuICBUaGUgZGV4ZGVwcyBvdXRwdXQKKyAgICAgKiBkb2Vzbid0IGhhdmUgdGhpcyBzb3J0IG9mIGluZm9ybWF0aW9uIGFueXdheS4KKyAgICAgKi8KKyAgICBzdGF0aWMgdm9pZCBmbGF0dGVuSW5oZXJpdGVkKEFwaUxpc3QgcHViTGlzdCkgeworICAgICAgICBJdGVyYXRvcjxQYWNrYWdlSW5mbz4gcGtnSXRlciA9IHB1Ykxpc3QuZ2V0UGFja2FnZUl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChwa2dJdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgUGFja2FnZUluZm8gcHViUGtnSW5mbyA9IHBrZ0l0ZXIubmV4dCgpOworCisgICAgICAgICAgICBJdGVyYXRvcjxDbGFzc0luZm8+IGNsYXNzSXRlciA9IHB1YlBrZ0luZm8uZ2V0Q2xhc3NJdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGNsYXNzSXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBDbGFzc0luZm8gcHViQ2xhc3NJbmZvID0gY2xhc3NJdGVyLm5leHQoKTsKKworICAgICAgICAgICAgICAgIHB1YkNsYXNzSW5mby5mbGF0dGVuQ2xhc3MocHViTGlzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIEFQSyBhZ2FpbnN0IHRoZSBwdWJsaWMgQVBJLgorICAgICAqCisgICAgICogUnVuIHRocm91Z2ggYW5kIGZpbmQgdGhlIG1pc21hdGNoZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgYWxsIGlzIHdlbGwKKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbGVhbiBjaGVjayhBcGlMaXN0IHB1Ykxpc3QsIEFwaUxpc3QgYXBrRGVzY3IpIHsKKworICAgICAgICBJdGVyYXRvcjxQYWNrYWdlSW5mbz4gcGtnSXRlciA9IGFwa0Rlc2NyLmdldFBhY2thZ2VJdGVyYXRvcigpOworICAgICAgICB3aGlsZSAocGtnSXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIFBhY2thZ2VJbmZvIGFwa1BrZ0luZm8gPSBwa2dJdGVyLm5leHQoKTsKKyAgICAgICAgICAgIFBhY2thZ2VJbmZvIHB1YlBrZ0luZm8gPSBwdWJMaXN0LmdldFBhY2thZ2UoYXBrUGtnSW5mby5nZXROYW1lKCkpOworICAgICAgICAgICAgYm9vbGVhbiBiYWRQYWNrYWdlID0gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChwdWJQa2dJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyAiaWxsZWdhbCBwYWNrYWdlIiBub3QgYSB0cmVtZW5kb3VzbHkgdXNlZnVsIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAvL2Fwa0Vycm9yKCJJbGxlZ2FsIHBhY2thZ2UgcmVmOiAiICsgYXBrUGtnSW5mby5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJhZFBhY2thZ2UgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJdGVyYXRvcjxDbGFzc0luZm8+IGNsYXNzSXRlciA9IGFwa1BrZ0luZm8uZ2V0Q2xhc3NJdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGNsYXNzSXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBDbGFzc0luZm8gYXBrQ2xhc3NJbmZvID0gY2xhc3NJdGVyLm5leHQoKTsKKworICAgICAgICAgICAgICAgIGlmIChiYWRQYWNrYWdlKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFRoZSBwYWNrYWdlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBwdWJsaWMgQVBJIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAqIGJ1dCBzaW1wbHkgc2F5aW5nICJiYWQgcGFja2FnZSIgaXNuJ3QgYWxsIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICogdXNlZnVsLCBzbyB3ZSBlbWl0IHRoZSBuYW1lcyBvZiBlYWNoIG9mIHRoZSBjbGFzc2VzLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSWdub3JhYmxlKGFwa1BrZ0luZm8pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcGtXYXJuaW5nKCJJZ25vcmluZyBjbGFzcyByZWY6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwa1BrZ0luZm8uZ2V0TmFtZSgpICsgIi4iICsgYXBrQ2xhc3NJbmZvLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcGtFcnJvcigiSWxsZWdhbCBjbGFzcyByZWY6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwa1BrZ0luZm8uZ2V0TmFtZSgpICsgIi4iICsgYXBrQ2xhc3NJbmZvLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaGVja0NsYXNzKHB1YlBrZ0luZm8sIGFwa0NsYXNzSW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBjbGFzcyBhZ2FpbnN0IHRoZSBwdWJsaWMgQVBJLiAgV2UgY2hlY2sgdGhlIGNsYXNzCisgICAgICogaXRzZWxmIGFuZCB0aGVuIGFueSBmaWVsZHMgYW5kIG1ldGhvZHMuCisgICAgICovCisgICAgc3RhdGljIGJvb2xlYW4gY2hlY2tDbGFzcyhQYWNrYWdlSW5mbyBwdWJQa2dJbmZvLCBDbGFzc0luZm8gY2xhc3NJbmZvKSB7CisKKyAgICAgICAgQ2xhc3NJbmZvIHB1YkNsYXNzSW5mbyA9IHB1YlBrZ0luZm8uZ2V0Q2xhc3MoY2xhc3NJbmZvLmdldE5hbWUoKSk7CisKKyAgICAgICAgaWYgKHB1YkNsYXNzSW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAoaXNJZ25vcmFibGUocHViUGtnSW5mbykpIHsKKyAgICAgICAgICAgICAgICBhcGtXYXJuaW5nKCJJZ25vcmluZyBjbGFzcyByZWY6ICIgKworICAgICAgICAgICAgICAgICAgICBwdWJQa2dJbmZvLmdldE5hbWUoKSArICIuIiArIGNsYXNzSW5mby5nZXROYW1lKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc0luZm8uaGFzTm9GaWVsZE1ldGhvZCgpKSB7CisgICAgICAgICAgICAgICAgYXBrV2FybmluZygiSGlkZGVuIGNsYXNzIHJlZmVyZW5jZWQ6ICIgKworICAgICAgICAgICAgICAgICAgICBwdWJQa2dJbmZvLmdldE5hbWUoKSArICIuIiArIGNsYXNzSW5mby5nZXROYW1lKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhcGtFcnJvcigiSWxsZWdhbCBjbGFzcyByZWY6ICIgKworICAgICAgICAgICAgICAgICAgICBwdWJQa2dJbmZvLmdldE5hbWUoKSArICIuIiArIGNsYXNzSW5mby5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIC8vIGNvdWxkIGxpc3Qgc3BlY2lmaWMgZmllbGRzL21ldGhvZHMgdXNlZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgdGhlIGNvbnRlbnRzIG9mIGNsYXNzSW5mbyBhZ2FpbnN0IHB1YkNsYXNzSW5mby4KKyAgICAgICAgICovCisgICAgICAgIEl0ZXJhdG9yPEZpZWxkSW5mbz4gZmllbGRJdGVyID0gY2xhc3NJbmZvLmdldEZpZWxkSXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGZpZWxkSXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIEZpZWxkSW5mbyBhcGtGaWVsZEluZm8gPSBmaWVsZEl0ZXIubmV4dCgpOworICAgICAgICAgICAgU3RyaW5nIG5hbWVBbmRUeXBlID0gYXBrRmllbGRJbmZvLmdldE5hbWVBbmRUeXBlKCk7CisgICAgICAgICAgICBGaWVsZEluZm8gcHViRmllbGRJbmZvID0gcHViQ2xhc3NJbmZvLmdldEZpZWxkKG5hbWVBbmRUeXBlKTsKKyAgICAgICAgICAgIGlmIChwdWJGaWVsZEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChwdWJDbGFzc0luZm8uaXNFbnVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBrV2FybmluZygiRW51bSBmaWVsZCByZWY6ICIgKyBwdWJQa2dJbmZvLmdldE5hbWUoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAiLiIgKyBjbGFzc0luZm8uZ2V0TmFtZSgpICsgIi4iICsgbmFtZUFuZFR5cGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFwa0Vycm9yKCJJbGxlZ2FsIGZpZWxkIHJlZjogIiArIHB1YlBrZ0luZm8uZ2V0TmFtZSgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIuIiArIGNsYXNzSW5mby5nZXROYW1lKCkgKyAiLiIgKyBuYW1lQW5kVHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3I8TWV0aG9kSW5mbz4gbWV0aG9kSXRlciA9IGNsYXNzSW5mby5nZXRNZXRob2RJdGVyYXRvcigpOworICAgICAgICB3aGlsZSAobWV0aG9kSXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE1ldGhvZEluZm8gYXBrTWV0aG9kSW5mbyA9IG1ldGhvZEl0ZXIubmV4dCgpOworICAgICAgICAgICAgU3RyaW5nIG5hbWVBbmREZXNjciA9IGFwa01ldGhvZEluZm8uZ2V0TmFtZUFuZERlc2NyaXB0b3IoKTsKKyAgICAgICAgICAgIE1ldGhvZEluZm8gcHViTWV0aG9kSW5mbyA9IHB1YkNsYXNzSW5mby5nZXRNZXRob2QobmFtZUFuZERlc2NyKTsKKyAgICAgICAgICAgIGlmIChwdWJNZXRob2RJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwdWJNZXRob2RJbmZvID0gcHViQ2xhc3NJbmZvLmdldE1ldGhvZElnbm9yaW5nUmV0dXJuKG5hbWVBbmREZXNjcik7CisgICAgICAgICAgICAgICAgaWYgKHB1Yk1ldGhvZEluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHViQ2xhc3NJbmZvLmlzQW5ub3RhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcGtXYXJuaW5nKCJBbm5vdGF0aW9uIG1ldGhvZCByZWY6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YlBrZ0luZm8uZ2V0TmFtZSgpICsgIi4iICsgY2xhc3NJbmZvLmdldE5hbWUoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iICsgbmFtZUFuZERlc2NyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwa0Vycm9yKCJJbGxlZ2FsIG1ldGhvZCByZWY6ICIgKyBwdWJQa2dJbmZvLmdldE5hbWUoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iICsgY2xhc3NJbmZvLmdldE5hbWUoKSArICIuIiArIG5hbWVBbmREZXNjcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcGtXYXJuaW5nKCJQb3NzaWJseSBjb3ZhcmlhbnQgbWV0aG9kIHJlZjogIiArCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJQa2dJbmZvLmdldE5hbWUoKSArICIuIiArIGNsYXNzSW5mby5nZXROYW1lKCkgKworICAgICAgICAgICAgICAgICAgICAgICAgIi4iICsgbmFtZUFuZERlc2NyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFja2FnZSBpcyBpbiB0aGUgImlnbm9yZWQiIGxpc3QuCisgICAgICovCisgICAgc3RhdGljIGJvb2xlYW4gaXNJZ25vcmFibGUoUGFja2FnZUluZm8gcGtnSW5mbykgeworICAgICAgICByZXR1cm4gc0lnbm9yYWJsZVBhY2thZ2VzLmNvbnRhaW5zKHBrZ0luZm8uZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgYW4gQVBLIHByb2JsZW0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFwa1dhcm5pbmcoU3RyaW5nIG1zZykgeworICAgICAgICBpZiAoc1Nob3dXYXJuaW5ncykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIod2FybikgIiArIHNDdXJyZW50QXBrLmdldERlYnVnU3RyaW5nKCkgKworICAgICAgICAgICAgICAgICI6ICIgKyBtc2cpOworICAgICAgICB9CisgICAgICAgIHNDdXJyZW50QXBrLmluY3JXYXJuaW5ncygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByaW50cyBhbiBlcnJvciBtZXNzYWdlIGFib3V0IGFuIEFQSyBwcm9ibGVtLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhcGtFcnJvcihTdHJpbmcgbXNnKSB7CisgICAgICAgIGlmIChzU2hvd0Vycm9ycykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHNDdXJyZW50QXBrLmdldERlYnVnU3RyaW5nKCkgKyAiOiAiICsgbXNnKTsKKyAgICAgICAgfQorICAgICAgICBzQ3VycmVudEFway5pbmNyRXJyb3JzKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVjdXJzaXZlbHkgZHVtcHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBBUEkuICBTb3J0IG9yZGVyIGlzIG5vdAorICAgICAqIHNwZWNpZmllZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBBcGkoQXBpTGlzdCBhcGlMaXN0KSB7CisgICAgICAgIEl0ZXJhdG9yPFBhY2thZ2VJbmZvPiBpdGVyID0gYXBpTGlzdC5nZXRQYWNrYWdlSXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBQYWNrYWdlSW5mbyBwa2dJbmZvID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICBkdW1wUGFja2FnZShwa2dJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZHVtcFBhY2thZ2UoUGFja2FnZUluZm8gcGtnSW5mbykgeworICAgICAgICBJdGVyYXRvcjxDbGFzc0luZm8+IGl0ZXIgPSBwa2dJbmZvLmdldENsYXNzSXRlcmF0b3IoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQUNLQUdFICIgKyBwa2dJbmZvLmdldE5hbWUoKSk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgQ2xhc3NJbmZvIGNsYXNzSW5mbyA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgZHVtcENsYXNzKGNsYXNzSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBDbGFzcyhDbGFzc0luZm8gY2xhc3NJbmZvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIENMQVNTICIgKyBjbGFzc0luZm8uZ2V0TmFtZSgpKTsKKyAgICAgICAgSXRlcmF0b3I8RmllbGRJbmZvPiBmaWVsZEl0ZXIgPSBjbGFzc0luZm8uZ2V0RmllbGRJdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoZmllbGRJdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgRmllbGRJbmZvIGZpZWxkSW5mbyA9IGZpZWxkSXRlci5uZXh0KCk7CisgICAgICAgICAgICBkdW1wRmllbGQoZmllbGRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBJdGVyYXRvcjxNZXRob2RJbmZvPiBtZXRoSXRlciA9IGNsYXNzSW5mby5nZXRNZXRob2RJdGVyYXRvcigpOworICAgICAgICB3aGlsZSAobWV0aEl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBNZXRob2RJbmZvIG1ldGhJbmZvID0gbWV0aEl0ZXIubmV4dCgpOworICAgICAgICAgICAgZHVtcE1ldGhvZChtZXRoSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBNZXRob2QoTWV0aG9kSW5mbyBtZXRoSW5mbykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgTUVUSE9EICIgKyBtZXRoSW5mby5nZXROYW1lQW5kRGVzY3JpcHRvcigpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBGaWVsZChGaWVsZEluZm8gZmllbGRJbmZvKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBGSUVMRCAiICsgZmllbGRJbmZvLmdldE5hbWVBbmRUeXBlKCkpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0J1aWx0aW4uamF2YSBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9CdWlsdGluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzYjE5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9CdWlsdGluLmphdmEKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmFwa2NoZWNrOworCitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CisKKy8qKgorICogQ2xhc3MgY29udGFpbmluZyAiYnVpbHQtaW4iIEFQSSBkZXNjcmlwdGlvbiBlbnRyaWVzLgorICoKKyAqIFRoZXJlIGFyZSBzb21lIGJ1Z3MgaW4gdGhlIEFQSSBkZXNjcmlwdGlvbiBmaWxlIHRoYXQgd2UgY2FuJ3Qgd29yayBhcm91bmQKKyAqIChub3RhYmx5IHNvbWUgYW1iaWd1aXR5IHdpdGggZ2VuZXJpYyB0eXBlcykuICBUaGUgZWFzaWVzdCB3YXkgdG8gY29wZQorICogaXMgdG8gc3VwcGx5IHRoZSBjb3JyZWN0IGRlZmluaXRpb25zIGluIGFuIGFkZC1vbiBmaWxlLiAgUmF0aGVyIHRoYW4KKyAqIGNhcnQgYXJvdW5kIGFuIGV4dHJhIGZpbGUsIHdlIGJha2UgdGhlbSBpbiBoZXJlLgorICovCitwdWJsaWMgY2xhc3MgQnVpbHRpbiB7CisgICAgcHJpdmF0ZSBCdWlsdGluKCkge30KKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVUlMVElOID0KKyAgICAgICAgIjxhcGk+XG4iICsKKyAgICAgICAgIiA8cGFja2FnZSBuYW1lPVwiamF2YS51dGlsXCI+XG4iICsKKyAgICAgICAgIiAgPGNsYXNzIG5hbWU9XCJFbnVtU2V0XCJcbiIgKworICAgICAgICAiICAgZXh0ZW5kcz1cImphdmEudXRpbC5BYnN0cmFjdFNldFwiPlxuIiArCisgICAgICAgICIgICA8bWV0aG9kIG5hbWU9XCJvZlwiIHJldHVybj1cImphdmEudXRpbC5FbnVtU2V0XCI+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJlXCIgdHlwZT1cImphdmEubGFuZy5FbnVtXCIvPlxuIiArCisgICAgICAgICIgICA8L21ldGhvZD5cbiIgKworICAgICAgICAiICAgPG1ldGhvZCBuYW1lPVwib2ZcIiByZXR1cm49XCJqYXZhLnV0aWwuRW51bVNldFwiPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwiZTFcIiB0eXBlPVwiamF2YS5sYW5nLkVudW1cIi8+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJlMlwiIHR5cGU9XCJqYXZhLmxhbmcuRW51bVwiLz5cbiIgKworICAgICAgICAiICAgPC9tZXRob2Q+XG4iICsKKyAgICAgICAgIiAgIDxtZXRob2QgbmFtZT1cIm9mXCIgcmV0dXJuPVwiamF2YS51dGlsLkVudW1TZXRcIj5cbiIgKworICAgICAgICAiICAgIDxwYXJhbWV0ZXIgbmFtZT1cImUxXCIgdHlwZT1cImphdmEubGFuZy5FbnVtXCIvPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwiZTJcIiB0eXBlPVwiamF2YS5sYW5nLkVudW1cIi8+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJlM1wiIHR5cGU9XCJqYXZhLmxhbmcuRW51bVwiLz5cbiIgKworICAgICAgICAiICAgPC9tZXRob2Q+XG4iICsKKyAgICAgICAgIiAgIDxtZXRob2QgbmFtZT1cIm9mXCIgcmV0dXJuPVwiamF2YS51dGlsLkVudW1TZXRcIj5cbiIgKworICAgICAgICAiICAgIDxwYXJhbWV0ZXIgbmFtZT1cImUxXCIgdHlwZT1cImphdmEubGFuZy5FbnVtXCIvPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwiZTJcIiB0eXBlPVwiamF2YS5sYW5nLkVudW1cIi8+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJlM1wiIHR5cGU9XCJqYXZhLmxhbmcuRW51bVwiLz5cbiIgKworICAgICAgICAiICAgIDxwYXJhbWV0ZXIgbmFtZT1cImU0XCIgdHlwZT1cImphdmEubGFuZy5FbnVtXCIvPlxuIiArCisgICAgICAgICIgICA8L21ldGhvZD5cbiIgKworICAgICAgICAiICAgPG1ldGhvZCBuYW1lPVwib2ZcIiByZXR1cm49XCJqYXZhLnV0aWwuRW51bVNldFwiPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwiZTFcIiB0eXBlPVwiamF2YS5sYW5nLkVudW1cIi8+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJlMlwiIHR5cGU9XCJqYXZhLmxhbmcuRW51bVwiLz5cbiIgKworICAgICAgICAiICAgIDxwYXJhbWV0ZXIgbmFtZT1cImUzXCIgdHlwZT1cImphdmEubGFuZy5FbnVtXCIvPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwiZTRcIiB0eXBlPVwiamF2YS5sYW5nLkVudW1cIi8+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJlNVwiIHR5cGU9XCJqYXZhLmxhbmcuRW51bVwiLz5cbiIgKworICAgICAgICAiICAgPC9tZXRob2Q+XG4iICsKKyAgICAgICAgIiAgPC9jbGFzcz5cbiIgKworCisgICAgICAgICIgPC9wYWNrYWdlPlxuIiArCisgICAgICAgICIgPHBhY2thZ2UgbmFtZT1cImFuZHJvaWQub3NcIj5cbiIgKworCisgICAgICAgICIgIDxjbGFzcyBuYW1lPVwiUmVtb3RlQ2FsbGJhY2tMaXN0XCJcbiIgKworICAgICAgICAiICAgZXh0ZW5kcz1cImphdmEubGFuZy5PYmplY3RcIj5cbiIgKworICAgICAgICAiICAgPG1ldGhvZCBuYW1lPVwicmVnaXN0ZXJcIiByZXR1cm49XCJib29sZWFuXCI+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJjYWxsYmFja1wiIHR5cGU9XCJhbmRyb2lkLm9zLklJbnRlcmZhY2VcIi8+XG4iICsKKyAgICAgICAgIiAgIDwvbWV0aG9kPlxuIiArCisgICAgICAgICIgICA8bWV0aG9kIG5hbWU9XCJ1bnJlZ2lzdGVyXCIgcmV0dXJuPVwiYm9vbGVhblwiPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwiY2FsbGJhY2tcIiB0eXBlPVwiYW5kcm9pZC5vcy5JSW50ZXJmYWNlXCIvPlxuIiArCisgICAgICAgICIgICA8L21ldGhvZD5cbiIgKworICAgICAgICAiICA8L2NsYXNzPlxuIiArCisKKyAgICAgICAgIiAgPGNsYXNzIG5hbWU9XCJBc3luY1Rhc2tcIlxuIiArCisgICAgICAgICIgICBleHRlbmRzPVwiamF2YS5sYW5nLk9iamVjdFwiPlxuIiArCisgICAgICAgICIgICA8bWV0aG9kIG5hbWU9XCJvblBvc3RFeGVjdXRlXCIgcmV0dXJuPVwidm9pZFwiPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwicmVzdWx0XCIgdHlwZT1cImphdmEubGFuZy5PYmplY3RcIi8+XG4iICsKKyAgICAgICAgIiAgIDwvbWV0aG9kPlxuIiArCisgICAgICAgICIgICA8bWV0aG9kIG5hbWU9XCJvblByb2dyZXNzVXBkYXRlXCIgcmV0dXJuPVwidm9pZFwiPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwidmFsdWVzXCIgdHlwZT1cImphdmEubGFuZy5PYmplY3RbXVwiLz5cbiIgKworICAgICAgICAiICAgPC9tZXRob2Q+XG4iICsKKyAgICAgICAgIiAgIDxtZXRob2QgbmFtZT1cImV4ZWN1dGVcIiByZXR1cm49XCJhbmRyb2lkLm9zLkFzeW5jVGFza1wiPlxuIiArCisgICAgICAgICIgICAgPHBhcmFtZXRlciBuYW1lPVwicGFyYW1zXCIgdHlwZT1cImphdmEubGFuZy5PYmplY3RbXVwiLz5cbiIgKworICAgICAgICAiICAgPC9tZXRob2Q+XG4iICsKKyAgICAgICAgIiAgPC9jbGFzcz5cbiIgKworCisgICAgICAgICIgPC9wYWNrYWdlPlxuIiArCisgICAgICAgICIgPHBhY2thZ2UgbmFtZT1cImFuZHJvaWQud2lkZ2V0XCI+XG4iICsKKworICAgICAgICAiICA8Y2xhc3MgbmFtZT1cIkF1dG9Db21wbGV0ZVRleHRWaWV3XCJcbiIgKworICAgICAgICAiICAgZXh0ZW5kcz1cImFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0XCI+XG4iICsKKyAgICAgICAgIiAgIDxtZXRob2QgbmFtZT1cInNldEFkYXB0ZXJcIiByZXR1cm49XCJ2b2lkXCI+XG4iICsKKyAgICAgICAgIiAgICA8cGFyYW1ldGVyIG5hbWU9XCJhZGFwdGVyXCIgdHlwZT1cImFuZHJvaWQud2lkZ2V0Lkxpc3RBZGFwdGVyXCIvPlxuIiArCisgICAgICAgICIgICA8L21ldGhvZD5cbiIgKworICAgICAgICAiICA8L2NsYXNzPlxuIiArCisKKyAgICAgICAgIiA8L3BhY2thZ2U+XG4iICsKKyAgICAgICAgIjwvYXBpPlxuIgorICAgICAgICA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBidWlsdC1pbiBkZWZpbml0aW9uICJmaWxlIi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1JlYWRlciBnZXRSZWFkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nUmVhZGVyKEJVSUxUSU4pOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0NsYXNzSW5mby5qYXZhIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0NsYXNzSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMmMxYjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svQ2xhc3NJbmZvLmphdmEKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmFwa2NoZWNrOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBDb250YWluZXIgcmVwcmVzZW50aW5nIGEgY2xhc3Mgb3IgaW50ZXJmYWNlIHdpdGggZmllbGRzIGFuZCBtZXRob2RzLgorICovCitwdWJsaWMgY2xhc3MgQ2xhc3NJbmZvIHsKKyAgICBwcml2YXRlIFN0cmluZyBtTmFtZTsKKyAgICAvLyBtZXRob2RzIGFyZSBoYXNoZWQgb24gbmFtZTpkZXNjcmlwdG9yCisgICAgcHJpdmF0ZSBIYXNoTWFwPFN0cmluZyxNZXRob2RJbmZvPiBtTWV0aG9kTGlzdDsKKyAgICAvLyBmaWVsZHMgYXJlIGhhc2hlZCBvbiBuYW1lOnR5cGUKKyAgICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLEZpZWxkSW5mbz4gbUZpZWxkTGlzdDsKKworICAgIHByaXZhdGUgU3RyaW5nIG1TdXBlcmNsYXNzTmFtZTsKKworICAgIC8vIGlzIHRoaXMgYSBzdGF0aWMgaW5uZXIgY2xhc3M/CisgICAgcHJpdmF0ZSBTdHJpbmcgbUlzU3RhdGljOworCisgICAgLy8gaG9sZHMgdGhlIG5hbWUgb2YgdGhlIHN1cGVyY2xhc3MgYW5kIGFsbCBkZWNsYXJlZCBpbnRlcmZhY2VzCisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtU3VwZXJOYW1lczsKKworICAgIC8vIGlzIHRoaXMgYW4gZW51bWVyYXRlZCB0eXBlPworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNFbnVtOworICAgIC8vIGlzIHRoaXMgYW4gYW5ub3RhdGlvbiB0eXBlPworICAgIHByaXZhdGUgYm9vbGVhbiBtSXNBbm5vdGF0aW9uOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1GbGF0dGVuaW5nID0gZmFsc2U7CisgICAgcHJpdmF0ZSBib29sZWFuIG1GbGF0dGVuZWQgPSBmYWxzZTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQ2xhc3NJbmZvIHdpdGggdGhlIHByb3ZpZGVkIGNsYXNzIG5hbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIEJpbmFyeSBjbGFzcyBuYW1lIHdpdGhvdXQgdGhlIHBhY2thZ2UgbmFtZSwKKyAgICAgKiAgICAgIGUuZy4gIkFsZXJ0RGlhbG9nJEJ1aWxkZXIiLgorICAgICAqIEBwYXJhbSBzdXBlcmNsYXNzTmFtZSBGdWxseS1xdWFsaWZpZWQgYmluYXJ5IG9yIG5vbi1iaW5hcnkgc3VwZXJjbGFzcworICAgICAqICAgICAgbmFtZSAoZS5nLiAiamF2YS5sYW5nLkVudW0iKS4KKyAgICAgKiBAcGFyYW0gaXNTdGF0aWMgQ2xhc3Mgc3RhdGljIGF0dHJpYnV0ZSwgbWF5IGJlICJ0cnVlIiwgImZhbHNlIiwgb3IgbnVsbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2xhc3NJbmZvKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBzdXBlcmNsYXNzTmFtZSwgU3RyaW5nIGlzU3RhdGljKSB7CisgICAgICAgIG1OYW1lID0gY2xhc3NOYW1lOworICAgICAgICBtTWV0aG9kTGlzdCA9IG5ldyBIYXNoTWFwPFN0cmluZyxNZXRob2RJbmZvPigpOworICAgICAgICBtRmllbGRMaXN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLEZpZWxkSW5mbz4oKTsKKyAgICAgICAgbVN1cGVyTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgbUlzU3RhdGljID0gaXNTdGF0aWM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVjb3JkIHRoZSBzdXBlcmNsYXNzIG5hbWUsIGFuZCBhZGQgaXQgdG8gdGhlIGludGVyZmFjZSBsaXN0CisgICAgICAgICAqIHNpbmNlIHdlJ2xsIG5lZWQgdG8gZG8gdGhlIHNhbWUgImZsYXR0ZW5pbmciIHdvcmsgb24gaXQuCisgICAgICAgICAqCisgICAgICAgICAqIEludGVyZmFjZXMgYW5kIGphdmEubGFuZy5PYmplY3QgaGF2ZSBhIG51bGwgdmFsdWUuCisgICAgICAgICAqLworICAgICAgICBpZiAoc3VwZXJjbGFzc05hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgbVN1cGVyY2xhc3NOYW1lID0gc3VwZXJjbGFzc05hbWU7CisgICAgICAgICAgICBtU3VwZXJOYW1lcy5hZGQoc3VwZXJjbGFzc05hbWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbU5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgc3VwZXJjbGFzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFN1cGVyY2xhc3NOYW1lKCkgeworICAgICAgICByZXR1cm4gbVN1cGVyY2xhc3NOYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlICJzdGF0aWMiIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIFRoaXMgaXMgYWN0dWFsbHkgdHJpLXN0YXRlOgorICAgICAqICAgInRydWUiIG1lYW5zIGl0IGlzIHN0YXRpYworICAgICAqICAgImZhbHNlIiBtZWFucyBpdCdzIG5vdCBzdGF0aWMKKyAgICAgKiAgIG51bGwgbWVhbnMgaXQncyB1bmtub3duCisgICAgICoKKyAgICAgKiBUaGUgInVua25vd24iIHN0YXRlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQVBLIGlucHV0LCB3aGlsZSB0aGUKKyAgICAgKiBrbm93biBzdGF0ZXMgYXJlIGZyb20gdGhlIHB1YmxpYyBBUEkgZGVmaW5pdGlvbi4KKyAgICAgKgorICAgICAqIFRoaXMgcmVsYXRlcyB0byB0aGUgaGFuZGxpbmcgb2YgdGhlICJzZWNyZXQiIGZpcnN0IHBhcmFtZXRlciB0bworICAgICAqIGNvbnN0cnVjdG9ycyBvZiBub24tc3RhdGljIGlubmVyIGNsYXNzZXMuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRTdGF0aWMoKSB7CisgICAgICAgIHJldHVybiBtSXNTdGF0aWM7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNsYXNzIGlzIGFuIGVudW1lcmF0ZWQgdHlwZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VudW0oKSB7CisgICAgICAgIGFzc2VydCBtRmxhdHRlbmVkOworICAgICAgICByZXR1cm4gbUlzRW51bTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoaXMgY2xhc3MgaXMgYW4gYW5ub3RhdGlvbiB0eXBlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQW5ub3RhdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0IG1GbGF0dGVuZWQ7CisgICAgICAgIHJldHVybiBtSXNBbm5vdGF0aW9uOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgYSBmaWVsZCB0byB0aGUgbGlzdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRGaWVsZChGaWVsZEluZm8gZmllbGRJbmZvKSB7CisgICAgICAgIG1GaWVsZExpc3QucHV0KGZpZWxkSW5mby5nZXROYW1lQW5kVHlwZSgpLCBmaWVsZEluZm8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpdmVzIGEgZmllbGQgZnJvbSB0aGUgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lQW5kVHlwZSBmaWVsZE5hbWU6dHlwZQorICAgICAqLworICAgIHB1YmxpYyBGaWVsZEluZm8gZ2V0RmllbGQoU3RyaW5nIG5hbWVBbmRUeXBlKSB7CisgICAgICAgIHJldHVybiBtRmllbGRMaXN0LmdldChuYW1lQW5kVHlwZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrbm93biBmaWVsZHMuCisgICAgICovCisgICAgcHVibGljIEl0ZXJhdG9yPEZpZWxkSW5mbz4gZ2V0RmllbGRJdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIG1GaWVsZExpc3QudmFsdWVzKCkuaXRlcmF0b3IoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgbWV0aG9kIHRvIHRoZSBsaXN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZE1ldGhvZChNZXRob2RJbmZvIG1ldGhJbmZvKSB7CisgICAgICAgIG1NZXRob2RMaXN0LnB1dChtZXRoSW5mby5nZXROYW1lQW5kRGVzY3JpcHRvcigpLCBtZXRoSW5mbyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrbm93biBtZXRob2RzLgorICAgICAqLworICAgIHB1YmxpYyBJdGVyYXRvcjxNZXRob2RJbmZvPiBnZXRNZXRob2RJdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIG1NZXRob2RMaXN0LnZhbHVlcygpLml0ZXJhdG9yKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmVzIGEgbWV0aG9kIGZyb20gdGhlIGxpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZUFuZERlc2NyIG1ldGhvZE5hbWU6ZGVzY3JpcHRvcgorICAgICAqLworICAgIHB1YmxpYyBNZXRob2RJbmZvIGdldE1ldGhvZChTdHJpbmcgbmFtZUFuZERlc2NyKSB7CisgICAgICAgIHJldHVybiBtTWV0aG9kTGlzdC5nZXQobmFtZUFuZERlc2NyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgYSBtZXRob2QgZnJvbSB0aGUgbGlzdCwgbWF0Y2hpbmcgb24gdGhlIHBhcnQgb2YgdGhlIGtleQorICAgICAqIGJlZm9yZSB0aGUgcmV0dXJuIHR5cGUuCisgICAgICoKKyAgICAgKiBUaGUgQVBJIGZpbGUgZG9lc24ndCBpbmNsdWRlIGFuIGVudHJ5IGZvciBhIG1ldGhvZCB0aGF0IG92ZXJyaWRlcworICAgICAqIGEgbWV0aG9kIGluIHRoZSBzdXBlcmNsYXNzLiAgT3JkaW5hcmlseSB0aGlzIGlzIGEgZ29vZCB0aGluZywgYnV0CisgICAgICogaWYgdGhlIG92ZXJyaWRlIHVzZXMgYSBjb3ZhcmlhbnQgcmV0dXJuIHR5cGUgdGhlbiB0aGUgcmVmZXJlbmNlCisgICAgICogdG8gaXQgaW4gdGhlIEFQSyB3b24ndCBtYXRjaC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lQW5kRGVzY3IgbWV0aG9kTmFtZTpkZXNjcmlwdG9yCisgICAgICovCisgICAgcHVibGljIE1ldGhvZEluZm8gZ2V0TWV0aG9kSWdub3JpbmdSZXR1cm4oU3RyaW5nIG5hbWVBbmREZXNjcikgeworICAgICAgICBTdHJpbmcgc2hvcnRLZXkgPSBuYW1lQW5kRGVzY3Iuc3Vic3RyaW5nKDAsIG5hbWVBbmREZXNjci5pbmRleE9mKCcpJykrMSk7CisKKyAgICAgICAgSXRlcmF0b3I8TWV0aG9kSW5mbz4gaXRlciA9IGdldE1ldGhvZEl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgTWV0aG9kSW5mbyBtZXRoSW5mbyA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgU3RyaW5nIG5hZCA9IG1ldGhJbmZvLmdldE5hbWVBbmREZXNjcmlwdG9yKCk7CisgICAgICAgICAgICBpZiAobmFkLnN0YXJ0c1dpdGgoc2hvcnRLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtZXRoSW5mbzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0aG9kIGFuZCBmaWVsZCBsaXN0cyBhcmUgZW1wdHkuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzTm9GaWVsZE1ldGhvZCgpIHsKKyAgICAgICAgcmV0dXJuIG1NZXRob2RMaXN0LnNpemUoKSA9PSAwICYmIG1GaWVsZExpc3Quc2l6ZSgpID09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGxpc3Qgb2YgY2xhc3NlcyBpbXBsZW1lbnRlZCBieSB0aGlzIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEludGVyZmFjZShTdHJpbmcgaW50ZXJmYWNlTmFtZSkgeworICAgICAgICBtU3VwZXJOYW1lcy5hZGQoaW50ZXJmYWNlTmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmxhdHRlbnMgYSBjbGFzcy4gIFRoaXMgaW52b2x2ZXMgY29weWluZyBhbGwgbWV0aG9kcyBhbmQgZmllbGRzCisgICAgICogZGVjbGFyZWQgYnkgdGhlIHN1cGVyY2xhc3MgYW5kIGludGVyZmFjZXMgKGFuZCwgcmVjdXJzaXZlbHksIHRoZWlyCisgICAgICogc3VwZXJjbGFzc2VzIGFuZCBpbnRlcmZhY2VzKSBpbnRvIHRoZSBsb2NhbCBzdHJ1Y3R1cmUuCisgICAgICoKKyAgICAgKiBUaGUgcHVibGljIEFQSSBmaWxlIG11c3QgYmUgZnVsbHkgcGFyc2VkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCisgICAgICoKKyAgICAgKiBUaGlzIGFsc28gZGV0ZWN0cyBpZiB3ZSdyZSBhbiBFbnVtIG9yIEFubm90YXRpb24uCisgICAgICovCisgICAgcHVibGljIHZvaWQgZmxhdHRlbkNsYXNzKEFwaUxpc3QgYXBpTGlzdCkgeworICAgICAgICBpZiAobUZsYXR0ZW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvKgorICAgICAgICAgKiBSZWN1cnNpdmUgY2xhc3MgZGVmaW5pdGlvbnMgYXJlbid0IGFsbG93ZWQgaW4gSmF2YSBjb2RlLCBidXQKKyAgICAgICAgICogdGhlcmUgY291bGQgYmUgb25lIGluIHRoZSBBUEkgZGVmaW5pdGlvbiBmaWxlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG1GbGF0dGVuaW5nKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUmVjdXJzaXZlIGludm9rZTsgY3VycmVudCBjbGFzcyBpcyAiCisgICAgICAgICAgICAgICAgKyBtTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgbUZsYXR0ZW5pbmcgPSB0cnVlOworCisgICAgICAgIC8qCisgICAgICAgICAqIE5vcm1hbGl6ZSB0aGUgYW1iaWd1b3VzIHR5cGVzLiAgVGhpcyByZXF1aXJlcyByZWdlbmVyYXRpbmcgdGhlCisgICAgICAgICAqIGZpZWxkIGFuZCBtZXRob2QgbGlzdHMsIGJlY2F1c2UgdGhlIHNpZ25hdHVyZSBpcyB1c2VkIGFzIHRoZQorICAgICAgICAgKiBoYXNoIHRhYmxlIGtleS4KKyAgICAgICAgICovCisgICAgICAgIG5vcm1hbGl6ZVR5cGVzKGFwaUxpc3QpOworCisgICAgICAgIC8qCisgICAgICAgICAqIEZpZ3VyZSBvdXQgaWYgdGhpcyBjbGFzcyBpcyBhbiBlbnVtZXJhdGVkIHR5cGUuCisgICAgICAgICAqLworICAgICAgICBtSXNFbnVtID0gImphdmEubGFuZy5FbnVtIi5lcXVhbHMobVN1cGVyY2xhc3NOYW1lKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGaWd1cmUgb3V0IGlmIHRoaXMgY2xhc3MgaXMgYW4gYW5ub3RhdGlvbiB0eXBlLiAgV2UgZXhwZWN0IGl0CisgICAgICAgICAqIHRvIGV4dGVuZCBPYmplY3QsIGltcGxlbWVudCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uLAorICAgICAgICAgKiBhbmQgZGVjbGFyZSBubyBmaWVsZHMgb3IgbWV0aG9kcy4gIChJZiB0aGUgQVBJIFhNTCBmaWxlIGlzCisgICAgICAgICAqIGZpeGVkLCBpdCB3aWxsIGRlY2xhcmUgbWV0aG9kczsgYnV0IGF0IHRoYXQgcG9pbnQgaGF2aW5nIHNwZWNpYWwKKyAgICAgICAgICogaGFuZGxpbmcgZm9yIGFubm90YXRpb25zIHdpbGwgYmUgdW5uZWNlc3NhcnkuKQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCJqYXZhLmxhbmcuT2JqZWN0Ii5lcXVhbHMobVN1cGVyY2xhc3NOYW1lKSAmJgorICAgICAgICAgICAgbVN1cGVyTmFtZXMuY29udGFpbnMoImphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb24iKSAmJgorICAgICAgICAgICAgaGFzTm9GaWVsZE1ldGhvZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtSXNBbm5vdGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEZsYXR0ZW4gb3VyIHN1cGVyY2xhc3MgYW5kIGludGVyZmFjZXMuCisgICAgICAgICAqLworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1TdXBlck5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIGNvbnRlbnRzIG9mIG1TdXBlck5hbWVzIGFyZSBpbiBhbiBhbWJpZ3VvdXMgZm9ybS4KKyAgICAgICAgICAgICAqIE5vcm1hbGl6ZSBpdCB0byBiaW5hcnkgZm9ybSBiZWZvcmUgd29ya2luZyB3aXRoIGl0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBTdHJpbmcgaW50ZXJmYWNlTmFtZSA9IFR5cGVVdGlscy5hbWJpZ3VvdXNUb0JpbmFyeU5hbWUobVN1cGVyTmFtZXMuZ2V0KGkpLAorICAgICAgICAgICAgICAgICAgICBhcGlMaXN0KTsKKyAgICAgICAgICAgIENsYXNzSW5mbyBjbGFzc0luZm8gPSBsb29rdXBDbGFzcyhpbnRlcmZhY2VOYW1lLCBhcGlMaXN0KTsKKyAgICAgICAgICAgIGlmIChjbGFzc0luZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIEFwa0NoZWNrLmFwa1dhcm5pbmcoIkNsYXNzICIgKyBpbnRlcmZhY2VOYW1lICsKKyAgICAgICAgICAgICAgICAgICAgIiBub3QgZm91bmQgKHN1cGVyIG9mICIgKyBtTmFtZSArICIpIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGZsYXR0ZW4gaXQgKi8KKyAgICAgICAgICAgIGNsYXNzSW5mby5mbGF0dGVuQ2xhc3MoYXBpTGlzdCk7CisKKyAgICAgICAgICAgIC8qIGNvcHkgZXZlcnl0aGluZyBmcm9tIGl0IGluIGhlcmUgKi8KKyAgICAgICAgICAgIG1lcmdlRnJvbShjbGFzc0luZm8pOworICAgICAgICB9CisKKyAgICAgICAgbUZsYXR0ZW5lZCA9IHRydWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm9ybWFsaXplcyB0aGUgdHlwZSBuYW1lcyB1c2VkIGluIGZpZWxkIGFuZCBtZXRob2QgZGVzY3JpcHRvcnMuCisgICAgICoKKyAgICAgKiBXZSBjYWxsIHRoZSBmaWVsZC9tZXRob2Qgbm9ybWFsaXphdGlvbiBmdW5jdGlvbiwgd2hpY2ggdXBkYXRlcyBob3cKKyAgICAgKiBpdCB0aGlua3Mgb2YgaXRzZWxmIChhbmQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmcm9tIGRpZmZlcmVudAorICAgICAqIGNsYXNzZXMpLiAgV2UgdGhlbiBoYXZlIHRvIHJlLWFkZCBpdCB0byB0aGUgaGFzaCBtYXAgYmVjYXVzZSB0aGUKKyAgICAgKiBrZXkgbWF5IGhhdmUgY2hhbmdlZC4gIChXZSdyZSB1c2luZyBhbiBpdGVyYXRvciwgc28gd2UgY3JlYXRlIGEKKyAgICAgKiBuZXcgaGFzaG1hcCBhbmQgcmVwbGFjZSB0aGUgb2xkLikKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgbm9ybWFsaXplVHlwZXMoQXBpTGlzdCBhcGlMaXN0KSB7CisgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4ga2V5SXRlcjsKKworICAgICAgICBIYXNoTWFwPFN0cmluZyxGaWVsZEluZm8+IHRtcEZpZWxkTGlzdCA9IG5ldyBIYXNoTWFwPFN0cmluZyxGaWVsZEluZm8+KCk7CisgICAgICAgIGtleUl0ZXIgPSBtRmllbGRMaXN0LmtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9IGtleUl0ZXIubmV4dCgpOworICAgICAgICAgICAgRmllbGRJbmZvIGZpZWxkSW5mbyA9IG1GaWVsZExpc3QuZ2V0KGtleSk7CisgICAgICAgICAgICBmaWVsZEluZm8ubm9ybWFsaXplVHlwZShhcGlMaXN0KTsKKyAgICAgICAgICAgIHRtcEZpZWxkTGlzdC5wdXQoZmllbGRJbmZvLmdldE5hbWVBbmRUeXBlKCksIGZpZWxkSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgbUZpZWxkTGlzdCA9IHRtcEZpZWxkTGlzdDsKKworICAgICAgICBIYXNoTWFwPFN0cmluZyxNZXRob2RJbmZvPiB0bXBNZXRob2RMaXN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLE1ldGhvZEluZm8+KCk7CisgICAgICAgIGtleUl0ZXIgPSBtTWV0aG9kTGlzdC5rZXlTZXQoKS5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBrZXlJdGVyLm5leHQoKTsKKyAgICAgICAgICAgIE1ldGhvZEluZm8gbWV0aG9kSW5mbyA9IG1NZXRob2RMaXN0LmdldChrZXkpOworICAgICAgICAgICAgbWV0aG9kSW5mby5ub3JtYWxpemVUeXBlcyhhcGlMaXN0KTsKKyAgICAgICAgICAgIHRtcE1ldGhvZExpc3QucHV0KG1ldGhvZEluZm8uZ2V0TmFtZUFuZERlc2NyaXB0b3IoKSwgbWV0aG9kSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgbU1ldGhvZExpc3QgPSB0bXBNZXRob2RMaXN0OworICAgIH0KKworICAgIC8qKgorICAgICAqIE1lcmdlcyB0aGUgZmllbGRzIGFuZCBtZXRob2RzIGZyb20gIm90aGVyQ2xhc3MiIGludG8gdGhpcyBjbGFzcy4KKyAgICAgKgorICAgICAqIFJlZHVuZGFudCBlbnRyaWVzIHdpbGwgYmUgbWVyZ2VkLiAgV2UgZG9uJ3Qgc3BlY2lmeSB3aG8gdGhlIHdpbm5lcgorICAgICAqIHdpbGwgYmUuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIG1lcmdlRnJvbShDbGFzc0luZm8gb3RoZXJDbGFzcykgeworICAgICAgICAvKlN5c3RlbS5vdXQucHJpbnRsbigibWVyZ2luZyBpbnRvICIgKyBnZXROYW1lKCkgKyAiOiBmaWVsZHM9IiArCisgICAgICAgICAgICBtRmllbGRMaXN0LnNpemUoKSArICIvIiArIG90aGVyQ2xhc3MubUZpZWxkTGlzdC5zaXplKCkgKworICAgICAgICAgICAgIiwgbWV0aG9kcz0iICsKKyAgICAgICAgICAgIG1NZXRob2RMaXN0LnNpemUoKSArICIvIiArIG90aGVyQ2xhc3MubU1ldGhvZExpc3Quc2l6ZSgpKTsqLworCisgICAgICAgIG1GaWVsZExpc3QucHV0QWxsKG90aGVyQ2xhc3MubUZpZWxkTGlzdCk7CisgICAgICAgIG1NZXRob2RMaXN0LnB1dEFsbChvdGhlckNsYXNzLm1NZXRob2RMaXN0KTsKKworICAgICAgICAvKlN5c3RlbS5vdXQucHJpbnRsbigiICBub3cgZmllbGRzPSIgKyBtRmllbGRMaXN0LnNpemUoKSArCisgICAgICAgICAgICAiLCBtZXRob2RzPSIgKyBtTWV0aG9kTGlzdC5zaXplKCkpOyovCisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBGaW5kcyB0aGUgbmFtZWQgY2xhc3MgaW4gdGhlIEFwaUxpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIEZ1bGx5LXF1YWxpZmllZCBkb3Qgbm90YXRpb24gKGUuZy4gImphdmEubGFuZy5TdHJpbmciKQorICAgICAqIEBwYXJhbSBhcGlMaXN0IFRoZSBoaWVyYXJjaHkgdG8gc2VhcmNoIGluLgorICAgICAqIEByZXR1cm4gVGhlIGNsYXNzIG9yIG51bGwgaWYgbm90IGZvdW5kLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIENsYXNzSW5mbyBsb29rdXBDbGFzcyhTdHJpbmcgZnVsbG5hbWUsIEFwaUxpc3QgYXBpTGlzdCkgeworICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBUeXBlVXRpbHMucGFja2FnZU5hbWVPbmx5KGZ1bGxuYW1lKTsKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IFR5cGVVdGlscy5jbGFzc05hbWVPbmx5KGZ1bGxuYW1lKTsKKworICAgICAgICBQYWNrYWdlSW5mbyBwa2cgPSBhcGlMaXN0LmdldFBhY2thZ2UocGFja2FnZU5hbWUpOworICAgICAgICBpZiAocGtnID09IG51bGwpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIHBrZy5nZXRDbGFzcyhjbGFzc05hbWUpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0ZpZWxkSW5mby5qYXZhIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL0ZpZWxkSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjA2NjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svRmllbGRJbmZvLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuYXBrY2hlY2s7CisKKy8qKgorICogQ29udGFpbmVyIHJlcHJlc2VudGluZyBhIG1ldGhvZCB3aXRoIHBhcmFtZXRlcnMuCisgKi8KK3B1YmxpYyBjbGFzcyBGaWVsZEluZm8geworICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOworICAgIHByaXZhdGUgU3RyaW5nIG1UeXBlOworICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lQW5kVHlwZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVR5cGVOb3JtYWxpemVkOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIEZpZWxkSW5mby4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIEZpZWxkIG5hbWUuCisgICAgICogQHBhcmFtIHR5cGUgRnVsbHktcXVhbGlmaWVkIGJpbmFyeSBvciBub24tYmluYXJ5IHR5cGUgbmFtZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRmllbGRJbmZvKFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZSkgeworICAgICAgICBtTmFtZSA9IG5hbWU7CisgICAgICAgIG1UeXBlID0gdHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjb21iaW5lZCBuYW1lIGFuZCB0eXBlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGFzIGEgaGFzaAorICAgICAqIHRhYmxlIGtleS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVBbmRUeXBlKCkgeworICAgICAgICBpZiAobU5hbWVBbmRUeXBlID09IG51bGwpCisgICAgICAgICAgICBtTmFtZUFuZFR5cGUgPSBtTmFtZSArICI6IiArIFR5cGVVdGlscy50eXBlVG9EZXNjcmlwdG9yKG1UeXBlKTsKKyAgICAgICAgcmV0dXJuIG1OYW1lQW5kVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3JtYWxpemUgdGhlIHR5cGUgdXNlZCBpbiBmaWVsZHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgbm9ybWFsaXplVHlwZShBcGlMaXN0IGFwaUxpc3QpIHsKKyAgICAgICAgaWYgKCFtVHlwZU5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gVHlwZVV0aWxzLmFtYmlndW91c1RvQmluYXJ5TmFtZShtVHlwZSwgYXBpTGlzdCk7CisgICAgICAgICAgICBpZiAoIXR5cGUuZXF1YWxzKG1UeXBlKSkgeworICAgICAgICAgICAgICAgIC8qIG5hbWUgY2hhbmdlZCwgZm9yY2UgcmVnZW4gb24gbmFtZSt0eXBlICovCisgICAgICAgICAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAgICAgICAgICAgIG1OYW1lQW5kVHlwZSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtVHlwZU5vcm1hbGl6ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svTWV0aG9kSW5mby5qYXZhIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL01ldGhvZEluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWU0Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL01ldGhvZEluZm8uamF2YQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5hcGtjaGVjazsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CisKKy8qKgorICogQ29udGFpbmVyIHJlcHJlc2VudGluZyBhIG1ldGhvZCB3aXRoIHBhcmFtZXRlcnMuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXRob2RJbmZvIHsKKyAgICBwcml2YXRlIFN0cmluZyBtTmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBtUmV0dXJuOworICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lQW5kRGVzY3JpcHRvcjsKKyAgICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IG1QYXJhbWV0ZXJzOworICAgIHByaXZhdGUgYm9vbGVhbiBtUGFyYW1ldGVyc05vcm1hbGl6ZWQ7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIE1ldGhvZEluZm8uICBUdWNrIHRoZSBtZXRob2QgcmV0dXJuIHR5cGUgYXdheSBmb3IKKyAgICAgKiBsYXRlciBjb25zdHJ1Y3Rpb24gb2YgdGhlIHNpZ25hdHVyZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgTWV0aG9kSW5mbyhTdHJpbmcgbmFtZSwgU3RyaW5nIHJldHVyblR5cGUpIHsKKyAgICAgICAgbU5hbWUgPSBuYW1lOworICAgICAgICBtUmV0dXJuID0gcmV0dXJuVHlwZTsKKyAgICAgICAgbVBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBtZXRob2Qgc2lnbmF0dXJlLiAgVGhpcyBpcyBnZW5lcmF0ZWQgd2hlbiBuZWVkZWQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lQW5kRGVzY3JpcHRvcigpIHsKKyAgICAgICAgaWYgKG1OYW1lQW5kRGVzY3JpcHRvciA9PSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIG5ld1NpZyA9IG5ldyBTdHJpbmdCdWlsZGVyKG1OYW1lKTsKKyAgICAgICAgICAgIG5ld1NpZy5hcHBlbmQoIjooIik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1QYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGh1bWFuVHlwZSA9IG1QYXJhbWV0ZXJzLmdldChpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2lnVHlwZSA9IFR5cGVVdGlscy50eXBlVG9EZXNjcmlwdG9yKGh1bWFuVHlwZSk7CisgICAgICAgICAgICAgICAgbmV3U2lnLmFwcGVuZChzaWdUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld1NpZy5hcHBlbmQoIikiKTsKKyAgICAgICAgICAgIG5ld1NpZy5hcHBlbmQoVHlwZVV0aWxzLnR5cGVUb0Rlc2NyaXB0b3IobVJldHVybikpOworICAgICAgICAgICAgbU5hbWVBbmREZXNjcmlwdG9yID0gbmV3U2lnLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1OYW1lQW5kRGVzY3JpcHRvcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEgcGFyYW1ldGVyIHRvIHRoZSBtZXRob2QuICBUaGUgInR5cGUiIGlzIGEgcHJpbWl0aXZlIG9yCisgICAgICogb2JqZWN0IHR5cGUsIGZvcm1hdHRlZCBpbiBodW1hbi1jZW50cmljIGZvcm0uICBGb3Igbm93IHdlIGp1c3QKKyAgICAgKiBzdG9yZSBpdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoU3RyaW5nIHR5cGUpIHsKKyAgICAgICAgbVBhcmFtZXRlcnMuYWRkKHR5cGUpOworICAgICAgICBpZiAobU5hbWVBbmREZXNjcmlwdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV0FSTklORzogbGF0ZSBhZGQgb2YgcGFyYW1zIHRvIG1ldGhvZCIpOworICAgICAgICAgICAgbU5hbWVBbmREZXNjcmlwdG9yID0gbnVsbDsgICAgICAvLyBmb3JjZSByZWdlbgorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTm9ybWFsaXplcyB0aGUgdHlwZXMgaW4gcGFyYW1ldGVyIGxpc3RzIHRvIHVuYW1iaWd1b3VzIGJpbmFyeSBmb3JtLgorICAgICAqCisgICAgICogVGhlIHB1YmxpYyBBUEkgZmlsZSBtdXN0IGJlIGZ1bGx5IHBhcnNlZCBiZWZvcmUgY2FsbGluZyBoZXJlLAorICAgICAqIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZnVsbCBzZXQgb2YgcGFja2FnZSBuYW1lcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBub3JtYWxpemVUeXBlcyhBcGlMaXN0IGFwaUxpc3QpIHsKKyAgICAgICAgaWYgKCFtUGFyYW1ldGVyc05vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgIG1SZXR1cm4gPSBUeXBlVXRpbHMuYW1iaWd1b3VzVG9CaW5hcnlOYW1lKG1SZXR1cm4sIGFwaUxpc3QpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1QYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpeGVkID0gVHlwZVV0aWxzLmFtYmlndW91c1RvQmluYXJ5TmFtZShtUGFyYW1ldGVycy5nZXQoaSksCisgICAgICAgICAgICAgICAgICAgICAgICBhcGlMaXN0KTsKKyAgICAgICAgICAgICAgICBtUGFyYW1ldGVycy5zZXQoaSwgZml4ZWQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTmFtZUFuZERlc2NyaXB0b3IgPSBudWxsOyAgICAgIC8vIGZvcmNlIHJlZ2VuCisgICAgICAgICAgICBtUGFyYW1ldGVyc05vcm1hbGl6ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svUGFja2FnZUluZm8uamF2YSBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9QYWNrYWdlSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2Y5MTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hcGtjaGVjay9zcmMvY29tL2FuZHJvaWQvYXBrY2hlY2svUGFja2FnZUluZm8uamF2YQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5hcGtjaGVjazsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworLyoqCisgKiBDb250YWluZXIgcmVwcmVzZW50aW5nIGEgcGFja2FnZSBvZiBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzLgorICovCitwdWJsaWMgY2xhc3MgUGFja2FnZUluZm8geworICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOworICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsQ2xhc3NJbmZvPiBtQ2xhc3NMaXN0OworCisgICAgcHVibGljIFBhY2thZ2VJbmZvKFN0cmluZyBuYW1lKSB7CisgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICAgICAgbUNsYXNzTGlzdCA9IG5ldyBIYXNoTWFwPFN0cmluZyxDbGFzc0luZm8+KCk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbU5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmVzIHRoZSBuYW1lZCBjbGFzcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHBhY2thZ2UsIG9yIG51bGwgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kCisgICAgICovCisgICAgcHVibGljIENsYXNzSW5mbyBnZXRDbGFzcyhTdHJpbmcgbmFtZSkgeworICAgICAgICByZXR1cm4gbUNsYXNzTGlzdC5nZXQobmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0cmlldmVzIHRoZSBuYW1lZCBjbGFzcywgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndCBhbHJlYWR5CisgICAgICogZXhpc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIEJpbmFyeSBvciBub24tYmluYXJ5IGNsYXNzIG5hbWUgd2l0aG91dCB0aGUKKyAgICAgKiAgICAgIHBhY2thZ2UgbmFtZSwgZS5nLiAiQWxlcnREaWFsb2cuQnVpbGRlciIuCisgICAgICogQHBhcmFtIHN1cGVyY2xhc3NOYW1lIEZ1bGx5LXF1YWxpZmllZCBiaW5hcnkgb3Igbm9uLWJpbmFyeSBzdXBlcmNsYXNzCisgICAgICogICAgICBuYW1lIChlLmcuICJqYXZhLmxhbmcuRW51bSIpLgorICAgICAqIEBwYXJhbSBpc1N0YXRpYyBDbGFzcyBzdGF0aWMgYXR0cmlidXRlLCBtYXkgYmUgInRydWUiLCAiZmFsc2UiLCBvciBudWxsLgorICAgICAqLworICAgIHB1YmxpYyBDbGFzc0luZm8gZ2V0T3JDcmVhdGVDbGFzcyhTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgc3VwZXJjbGFzc05hbWUsCisgICAgICAgICAgICBTdHJpbmcgaXNTdGF0aWMpIHsKKyAgICAgICAgU3RyaW5nIGZpeGVkTmFtZSA9IFR5cGVVdGlscy5zaW1wbGVDbGFzc05hbWVUb0JpbmFyeShjbGFzc05hbWUpOworICAgICAgICBDbGFzc0luZm8gY2xhc3NJbmZvID0gbUNsYXNzTGlzdC5nZXQoZml4ZWROYW1lKTsKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiLS0tIGNyZWF0aW5nIGVudHJ5IGZvciBjbGFzcyAiICsgZml4ZWROYW1lICsKKyAgICAgICAgICAgIC8vICAgICIgKHN1cGVyPSIgKyBzdXBlcmNsYXNzTmFtZSArICIpIik7CisgICAgICAgICAgICBjbGFzc0luZm8gPSBuZXcgQ2xhc3NJbmZvKGZpeGVkTmFtZSwgc3VwZXJjbGFzc05hbWUsIGlzU3RhdGljKTsKKyAgICAgICAgICAgIG1DbGFzc0xpc3QucHV0KGZpeGVkTmFtZSwgY2xhc3NJbmZvKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCItLS0gcmV0dXJuaW5nIGV4aXN0aW5nIGNsYXNzICIgKyBuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xhc3NJbmZvOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gaXRlcmF0b3IgZm9yIHRoZSBzZXQgb2YgY2xhc3NlcyBpbiB0aGlzIHBhY2thZ2UuCisgICAgICovCisgICAgcHVibGljIEl0ZXJhdG9yPENsYXNzSW5mbz4gZ2V0Q2xhc3NJdGVyYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIG1DbGFzc0xpc3QudmFsdWVzKCkuaXRlcmF0b3IoKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9UeXBlVXRpbHMuamF2YSBiL3Rvb2xzL2Fwa2NoZWNrL3NyYy9jb20vYW5kcm9pZC9hcGtjaGVjay9UeXBlVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2ZlMDMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYXBrY2hlY2svc3JjL2NvbS9hbmRyb2lkL2Fwa2NoZWNrL1R5cGVVdGlscy5qYXZhCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5hcGtjaGVjazsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworCitwdWJsaWMgY2xhc3MgVHlwZVV0aWxzIHsKKyAgICBwcml2YXRlIHZvaWQgVHlwZVV0aWxzKCkge30KKworICAgIC8qCisgICAgICogQ29udmVyc2lvbnMgZm9yIHRoZSBwcmltaXRpdmUgdHlwZXMsIGFzIHdlbGwgYXMgYSBmZXcgdGhpbmdzCisgICAgICogdGhhdCBzaG93IHVwIGEgbG90IHNvIHdlIGNhbiBhdm9pZCB0aGUgc3RyaW5nIG1hbmlwdWxhdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNoTWFwPFN0cmluZyxTdHJpbmc+IHNRdWlja0NvbnZlcnQ7CisgICAgc3RhdGljIHsKKyAgICAgICAgc1F1aWNrQ29udmVydCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7CisKKyAgICAgICAgc1F1aWNrQ29udmVydC5wdXQoImJvb2xlYW4iLCAiWiIpOworICAgICAgICBzUXVpY2tDb252ZXJ0LnB1dCgiYnl0ZSIsICJCIik7CisgICAgICAgIHNRdWlja0NvbnZlcnQucHV0KCJjaGFyIiwgIkMiKTsKKyAgICAgICAgc1F1aWNrQ29udmVydC5wdXQoInNob3J0IiwgIlMiKTsKKyAgICAgICAgc1F1aWNrQ29udmVydC5wdXQoImludCIsICJJIik7CisgICAgICAgIHNRdWlja0NvbnZlcnQucHV0KCJmbG9hdCIsICJGIik7CisgICAgICAgIHNRdWlja0NvbnZlcnQucHV0KCJsb25nIiwgIkoiKTsKKyAgICAgICAgc1F1aWNrQ29udmVydC5wdXQoImRvdWJsZSIsICJEIik7CisgICAgICAgIHNRdWlja0NvbnZlcnQucHV0KCJ2b2lkIiwgIlYiKTsKKyAgICAgICAgc1F1aWNrQ29udmVydC5wdXQoImphdmEubGFuZy5PYmplY3QiLCAiTGphdmEvbGFuZy9PYmplY3Q7Iik7CisgICAgICAgIHNRdWlja0NvbnZlcnQucHV0KCJqYXZhLmxhbmcuU3RyaW5nIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOworICAgICAgICBzUXVpY2tDb252ZXJ0LnB1dCgiamF2YS51dGlsLkFycmF5TGlzdCIsICJMamF2YS91dGlsL0FycmF5TGlzdDsiKTsKKyAgICAgICAgc1F1aWNrQ29udmVydC5wdXQoImphdmEudXRpbC5IYXNoTWFwIiwgIkxqYXZhL3V0aWwvSGFzaE1hcDsiKTsKKyAgICB9OworCisgICAgLyoKKyAgICAgKiBDb252ZXJ0IGEgaHVtYW4tY2VudHJpYyB0eXBlIGludG8gc29tZXRoaW5nIHN1aXRhYmxlIGZvciBhIG1ldGhvZAorICAgICAqIHNpZ25hdHVyZS4gIEV4YW1wbGVzOgorICAgICAqCisgICAgICogICBpbnQgLS0+IEkKKyAgICAgKiAgIGZsb2F0W10gLS0+IFtGCisgICAgICogICBqYXZhLmxhbmcuU3RyaW5nIC0tPiBMamF2YS9sYW5nL1N0cmluZzsKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0eXBlVG9EZXNjcmlwdG9yKFN0cmluZyB0eXBlKSB7CisgICAgICAgIFN0cmluZyBxdWljayA9IHNRdWlja0NvbnZlcnQuZ2V0KHR5cGUpOworICAgICAgICBpZiAocXVpY2sgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBxdWljazsKKworICAgICAgICBpbnQgYXJyYXlEZXB0aCA9IDA7CisgICAgICAgIGludCBmaXJzdFBvc24gPSAtMTsKKyAgICAgICAgaW50IHBvc24gPSAtMTsKKyAgICAgICAgd2hpbGUgKChwb3NuID0gdHlwZS5pbmRleE9mKCdbJywgcG9zbisxKSkgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFBvc24gPT0gLTEpCisgICAgICAgICAgICAgICAgZmlyc3RQb3NuID0gcG9zbjsKKyAgICAgICAgICAgIGFycmF5RGVwdGgrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGlmIHdlIGZvdW5kIGFuIGFycmF5LCBzdHJpcCB0aGUgYnJhY2tldHMgb2ZmICovCisgICAgICAgIGlmIChmaXJzdFBvc24gIT0gLTEpCisgICAgICAgICAgICB0eXBlID0gdHlwZS5zdWJzdHJpbmcoMCwgZmlyc3RQb3NuKTsKKworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICB3aGlsZSAoYXJyYXlEZXB0aC0tID4gMCkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJbIik7CisKKyAgICAgICAgLyogcmV0cnkgcXVpY2sgY29udmVydCAqLworICAgICAgICBxdWljayA9IHNRdWlja0NvbnZlcnQuZ2V0KHR5cGUpOworICAgICAgICBpZiAocXVpY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocXVpY2spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIkwiKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHR5cGUucmVwbGFjZSgnLicsICcvJykpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjsiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29udmVydHMgYSAic2ltcGxlIiBjbGFzcyBuYW1lIGludG8gYSAiYmluYXJ5IiBjbGFzcyBuYW1lLiAgRm9yCisgICAgICogZXhhbXBsZToKKyAgICAgKgorICAgICAqICAgU2hhcmVkUHJlZmVyZW5jZXMuRWRpdG9yIC0tJmd0OyBTaGFyZWRQcmVmZXJlbmNlcyRFZGl0b3IKKyAgICAgKgorICAgICAqIERvIG5vdCB1c2UgdGhpcyBvbiBmdWxseS1xdWFsaWZpZWQgY2xhc3MgbmFtZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgc2ltcGxlQ2xhc3NOYW1lVG9CaW5hcnkoU3RyaW5nIGNsYXNzTmFtZSkgeworICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnJlcGxhY2UoJy4nLCAnJCcpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG5hbWUgcG9ydGlvbiBvZiBhIGZ1bGx5LXF1YWxpZmllZCBiaW5hcnkgY2xhc3MgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZU9ubHkoU3RyaW5nIHR5cGVOYW1lKSB7CisgICAgICAgIGludCBzdGFydCA9IHR5cGVOYW1lLmxhc3RJbmRleE9mKCIuIik7CisgICAgICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlTmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlTmFtZS5zdWJzdHJpbmcoc3RhcnQrMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHBvcnRpb24gb2YgYSBmdWxseS1xdWFsaWZpZWQgYmluYXJ5IGNsYXNzIG5hbWUuCisgICAgICovCisgICAgc3RhdGljIFN0cmluZyBwYWNrYWdlTmFtZU9ubHkoU3RyaW5nIHR5cGVOYW1lKSB7CisgICAgICAgIGludCBlbmQgPSB0eXBlTmFtZS5sYXN0SW5kZXhPZigiLiIpOworICAgICAgICBpZiAoZW5kIDwgMCkgeworICAgICAgICAgICAgLyogbGl2ZXMgaW4gZGVmYXVsdCBwYWNrYWdlICovCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZU5hbWUuc3Vic3RyaW5nKDAsIGVuZCk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIE5vcm1hbGl6ZXMgYSBmdWxsIGNsYXNzIG5hbWUgdG8gYmluYXJ5IGZvcm0uCisgICAgICoKKyAgICAgKiBGb3IgZXhhbXBsZSwgImFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lciIgY291bGQgYmUgaW4KKyAgICAgKiB0aGUgImFuZHJvaWQudmlldyIgcGFja2FnZSBvciB0aGUgImFuZHJvaWQudmlldy5WaWV3IiBwYWNrYWdlLgorICAgICAqIENoZWNraW5nIGNhcGl0YWxpemF0aW9uIGlzIHVucmVsaWFibGUuICBXZSBkbyBoYXZlIGEgZnVsbCBsaXN0CisgICAgICogb2YgcGFja2FnZSBuYW1lcyBmcm9tIHRoZSBmaWxlIHRob3VnaCwgc28gdGhlcmUncyBhbiBleGNlbGxlbnQKKyAgICAgKiBjaGFuY2UgdGhhdCB3ZSBjYW4gaWRlbnRpZnkgdGhlIHBhY2thZ2UgdGhhdCB3YXkuICAoT2YgY291cnNlLCB3ZQorICAgICAqIGNhbiBvbmx5IGRvIHRoaXMgYWZ0ZXIgd2UgaGF2ZSBmaW5pc2hlZCBwYXJzaW5nIHRoZSBmaWxlLikKKyAgICAgKgorICAgICAqIElmIHRoZSBuYW1lIGhhcyB0d28gb3IgbW9yZSBkb3RzLCB3ZSBuZWVkIHRvIGNvbXBhcmUgc3VjY2Vzc2l2ZWx5CisgICAgICogc2hvcnRlciBzdHJpbmdzIHVudGlsIHdlIGZpbmQgYSBtYXRjaCBpbiB0aGUgcGFja2FnZSBsaXN0LgorICAgICAqCisgICAgICogRG8gbm90IGNhbGwgdGhpcyBvbiBwcmV2aW91c2x5LXJldHVybmVkIG91dHB1dCwgYXMgdGhhdCBtYXkKKyAgICAgKiBjb25mdXNlIHRoZSBjb2RlIHRoYXQgZGVhbHMgd2l0aCBnZW5lcmljIHNpZ25hdHVyZXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYW1iaWd1b3VzVG9CaW5hcnlOYW1lKFN0cmluZyB0eXBlTmFtZSwgQXBpTGlzdCBhcGlMaXN0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluIHNvbWUgY2FzZXMgdGhpcyBjYW4gYmUgYSBnZW5lcmljIHNpZ25hdHVyZToKKyAgICAgICAgICogICA8cGFyYW1ldGVyIG5hbWU9ImNvbGxlY3Rpb24iIHR5cGU9ImphdmEudXRpbC5Db2xsZWN0aW9uJmx0Oz8gZXh0ZW5kcyBFJmd0OyI+CisgICAgICAgICAqICAgPHBhcmFtZXRlciBuYW1lPSJpbnRlcmZhY2VzIiB0eXBlPSJqYXZhLmxhbmcuQ2xhc3MmbHQ7PyZndDtbXSI+CisgICAgICAgICAqICAgPHBhcmFtZXRlciBuYW1lPSJvYmplY3QiIHR5cGU9IkUiPgorICAgICAgICAgKgorICAgICAgICAgKiBJZiB3ZSBzZWUgYSAnPCcsIHN0cmlwIG91dCBldmVyeXRoaW5nIGZyb20gaXQgdG8gdGhlICc+Jy4gIFRoYXQKKyAgICAgICAgICogZG9lcyBwcmV0dHkgbXVjaCB0aGUgcmlnaHQgdGhpbmcsIHRob3VnaCB3ZSBoYXZlIHRvIGRlYWwgd2l0aAorICAgICAgICAgKiBuZXN0ZWQgc3R1ZmYgbGlrZSAiPD8gZXh0ZW5kcyBNYXA8U3RyaW5nPj4iLgorICAgICAgICAgKgorICAgICAgICAgKiBIYW5kbGluZyB0aGUgdGhpcmQgaXRlbSBpcyB1Z2x5LiAgSWYgdGhlIHN0cmluZyBpcyBhIHNpbmdsZQorICAgICAgICAgKiBjaGFyYWN0ZXIsIGNoYW5nZSBpdCB0byBqYXZhLmxhbmcuT2JqZWN0LiAgVGhpcyBpcyBnZW5lcmFsbHkKKyAgICAgICAgICogaW5zdWZmaWNpZW50IGFuZCBhbHNvIGFtYmlndW91cyB3aXRoIHJlc3BlY3QgdG8gY2xhc3NlcyBpbiB0aGUKKyAgICAgICAgICogZGVmYXVsdCBwYWNrYWdlLCBidXQgd2UgZG9uJ3QgaGF2ZSBtdWNoIGNob2ljZSBoZXJlLCBhbmQgaXQgZ2V0cworICAgICAgICAgKiB1cyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBjb2xsZWN0aW9uIGNsYXNzZXMuICBOb3RlIHRoaXMgaXMgcmlza3kKKyAgICAgICAgICogaWYgc29tZWJvZHkgdHJpZXMgdG8gbm9ybWFsaXplIGEgc3RyaW5nIHR3aWNlLCBzaW5jZSB3ZSBjb3VsZCBiZQorICAgICAgICAgKiAicHJvbW90aW5nIiBhIHByaW1pdGl2ZSB0eXBlLgorICAgICAgICAgKi8KKyAgICAgICAgdHlwZU5hbWUgPSBzdHJpcEFuZ2xlQnJhY2tldHModHlwZU5hbWUpOworICAgICAgICBpZiAodHlwZU5hbWUubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImNvbnZlcnRpbmcgWCB0byBPYmplY3Q6ICIgKyB0eXBlTmFtZSk7CisgICAgICAgICAgICB0eXBlTmFtZSA9ICJqYXZhLmxhbmcuT2JqZWN0IjsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlTmFtZS5sZW5ndGgoKSA9PSAzICYmCisgICAgICAgICAgICAgICAgICAgdHlwZU5hbWUuc3Vic3RyaW5nKDEsIDMpLmVxdWFscygiW10iKSkgeworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImNvbnZlcnRpbmcgWFtdIHRvIE9iamVjdFtdOiAiICsgdHlwZU5hbWUpOworICAgICAgICAgICAgdHlwZU5hbWUgPSAiamF2YS5sYW5nLk9iamVjdFtdIjsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlTmFtZS5sZW5ndGgoKSA9PSA0ICYmCisgICAgICAgICAgICAgICAgICAgdHlwZU5hbWUuc3Vic3RyaW5nKDEsIDQpLmVxdWFscygiLi4uIikpIHsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJjb252ZXJ0aW5nIFguLi4gdG8gT2JqZWN0W106ICIgKyB0eXBlTmFtZSk7CisgICAgICAgICAgICB0eXBlTmFtZSA9ICJqYXZhLmxhbmcuT2JqZWN0W10iOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2F0Y2gtYWxsIGZvciB2YXJhcmdzLCB3aGljaCBjb21lIGluIGRpZmZlcmVudCB2YXJpZXRpZXM6CisgICAgICAgICAqICBqYXZhLmxhbmcuT2JqZWN0Li4uCisgICAgICAgICAqICBqYXZhLmxhbmcuQ2xhc3MuLi4KKyAgICAgICAgICogIGphdmEubGFuZy5DaGFyU2VxdWVuY2UuLi4KKyAgICAgICAgICogIGludC4uLgorICAgICAgICAgKiAgUHJvZ3Jlc3MuLi4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlIGxhdHRlciBpcyBhIGdlbmVyaWMgdHlwZSB0aGF0IHdlIGRpZG4ndCBjYXRjaCBhYm92ZSBiZWNhdXNlCisgICAgICAgICAqIGl0J3Mgbm90IHVzaW5nIGEgc2luZ2xlLWNoYXJhY3RlciBkZXNjcmlwdG9yLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgbWV0aG9kIHJlZmVyZW5jZSBmb3IgImphdmEubGFuZy5DbGFzcy4uLiIgd2lsbCBiZSBsb29raW5nCisgICAgICAgICAqIGZvciBqYXZhLmxhbmcuQ2xhc3NbXSwgbm90IGphdmEubGFuZy5PYmplY3RbXSwgc28gd2UgZG9uJ3Qgd2FudAorICAgICAgICAgKiB0byBkbyBhIGJsYW5rZXQgY29udmVyc2lvbi4gIFNpbWlsYXJseSwgImludC4uLiIgdHVybnMgaW50byBpbnRbXS4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gd2l0aCAiUHJvZ3Jlc3MuLi4iLCB1bmxlc3Mgd2Ugd2FudAorICAgICAgICAgKiB0byB3cml0ZSBvZmYgdGhlIGRlZmF1bHQgcGFja2FnZSBhbmQgZmlsdGVyIG91dCBwcmltaXRpdmUgdHlwZXMuCisgICAgICAgICAqIFByb2JhYmx5IGVhc2llciB0byBmaXggaXQgdXAgZWxzZXdoZXJlLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGVsbGlwc2lzSW5kZXggPSB0eXBlTmFtZS5pbmRleE9mKCIuLi4iKTsKKyAgICAgICAgaWYgKGVsbGlwc2lzSW5kZXggPj0gMCkgeworICAgICAgICAgICAgU3RyaW5nIG5ld1R5cGVOYW1lID0gdHlwZU5hbWUuc3Vic3RyaW5nKDAsIGVsbGlwc2lzSW5kZXgpICsgIltdIjsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJ2YXJhcmcgIiArIHR5cGVOYW1lICsgIiAtLT4gIiArIG5ld1R5cGVOYW1lKTsKKyAgICAgICAgICAgIHR5cGVOYW1lID0gbmV3VHlwZU5hbWU7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBJdCdzIHBvc3NpYmxlIHRoZSBjb2RlIHRoYXQgZ2VuZXJhdGVzIEFQSSBkZWZpbml0aW9uIGZpbGVzCisgICAgICAgICAqIGhhcyBiZWVuIGZpeGVkLiAgSWYgd2Ugc2VlIGEgJyQnLCBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwuCisgICAgICAgICAqLworICAgICAgICBpZiAodHlwZU5hbWUuaW5kZXhPZignJCcpID49IDApCisgICAgICAgICAgICByZXR1cm4gdHlwZU5hbWU7CisKKyAgICAgICAgaW50IGxhc3REb3QgPSB0eXBlTmFtZS5sYXN0SW5kZXhPZignLicpOworICAgICAgICBpZiAobGFzdERvdCA8IDApCisgICAgICAgICAgICByZXR1cm4gdHlwZU5hbWU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogV2hhdCB3ZSBoYXZlIGxvb2tzIGxpa2Ugc29tZSB2YXJpYXRpb24gb2YgdGhlc2U6CisgICAgICAgICAqICAgcGFja2FnZS5DbGFzcworICAgICAgICAgKiAgIENsYXNzLklubmVyQ2xhc3MKKyAgICAgICAgICogICBsb25nLnBhY2thZ2UubmFtZS5DbGFzcworICAgICAgICAgKiAgIGxvbmcucGFja2FnZS5uYW1lLkNsYXNzLklubmVyQ2xhc3MKKyAgICAgICAgICoKKyAgICAgICAgICogV2UgY3V0IGl0IG9mZiBhdCB0aGUgbGFzdCAnLicgYW5kIHRlc3QgdG8gc2VlIGlmIGl0J3MgYSBrbm93bgorICAgICAgICAgKiBwYWNrYWdlIG5hbWUuICBJZiBub3QsIGtlZXAgbW92aW5nIGxlZnQgdW50aWwgd2UgcnVuIG91dCBvZiBkb3RzLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IG5leHREb3QgPSBsYXN0RG90OworICAgICAgICB3aGlsZSAobmV4dERvdCA+PSAwKSB7CisgICAgICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSB0eXBlTmFtZS5zdWJzdHJpbmcoMCwgbmV4dERvdCk7CisgICAgICAgICAgICBpZiAoYXBpTGlzdC5nZXRQYWNrYWdlKHRlc3ROYW1lKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5leHREb3QgPSB0eXBlTmFtZS5sYXN0SW5kZXhPZignLicsIG5leHREb3QtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV4dERvdCA8IDApIHsKKyAgICAgICAgICAgIC8qIG5vIHBhY2thZ2UgbmFtZSBmb3VuZCwgY29udmVydCBhbGwgZG90cyAqLworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysgbm8gcGtnIG5hbWUgZm91bmQgb24gIiArIHR5cGVOYW1lICsgdHlwZU5hbWUubGVuZ3RoKCkpOworICAgICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKCcuJywgJyQnKTsKKyAgICAgICAgfSBlbHNlIGlmIChuZXh0RG90ID09IGxhc3REb3QpIHsKKyAgICAgICAgICAgIC8qIGNsYXNzIG5hbWUgaXMgbGFzdCBlbGVtZW50OyBvcmlnaW5hbCBzdHJpbmcgaXMgZmluZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogaW4gdGhlIG1pZGRsZTsgemFwIHRoZSBkb3RzIGluIHRoZSBpbm5lciBjbGFzcyBuYW1lICovCisgICAgICAgICAgICBTdHJpbmcgb2xkQ2xhc3NOYW1lID0gdHlwZU5hbWU7CisgICAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lLnN1YnN0cmluZygwLCBuZXh0RG90KzEpICsKKyAgICAgICAgICAgICAgICB0eXBlTmFtZS5zdWJzdHJpbmcobmV4dERvdCsxKS5yZXBsYWNlKCcuJywgJyQnKTsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIrKysgIiArIG9sZENsYXNzTmFtZSArICIgLS0+ICIgKyB0eXBlTmFtZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHlwZU5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RyaXBzIG91dCBldmVyeXRoaW5nIGJldHdlZW4gJzwnIGFuZCAnPicuICBUaGlzIHdpbGwgaGFuZGxlCisgICAgICogbmVzdGVkIGJyYWNrZXRzLCBidXQgd2UncmUgbm90IGV4cGVjdGluZyB0byBzZWUgbXVsdGlwbGUgaW5zdGFuY2VzCisgICAgICogaW4gc2VyaWVzIChpLmUuICImbHQ7Zm9vJmx0O2JhciZndDsmZ3Q7IiBpcyBleHBlY3RlZCwgYnV0CisgICAgICogIiZsdDtmb28mZ3Q7U1RVRkYmbHQ7YmFyJmd0OyBpcyBub3QpLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgc3RyaXBwZWQgc3RyaW5nCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0cmlwQW5nbGVCcmFja2V0cyhTdHJpbmcgc3RyKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFNpbmNlIHdlIG9ubHkgZXhwZWN0IHRvIHNlZSBvbmUgInJ1biIsIHdlIGNhbiBqdXN0IGZpbmQgdGhlCisgICAgICAgICAqIGZpcnN0ICc8JyBhbmQgdGhlIGxhc3QgJz4nLiAgSWRlYWxseSB3ZSdkIHZlcmlmeSB0aGF0IHRoZXkncmUKKyAgICAgICAgICogbm90IG1pc21hdGNoZWQsIGJ1dCB3ZSdyZSBhc3N1bWluZyB0aGUgaW5wdXQgZmlsZSBpcyBnZW5lcmFsbHkKKyAgICAgICAgICogY29ycmVjdC4KKyAgICAgICAgICovCisgICAgICAgIGludCBsdEluZGV4ID0gc3RyLmluZGV4T2YoJzwnKTsKKyAgICAgICAgaWYgKGx0SW5kZXggPCAwKQorICAgICAgICAgICAgcmV0dXJuIHN0cjsKKworICAgICAgICBpbnQgZ3RJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignPicpOworICAgICAgICBpZiAoZ3RJbmRleCA8IDApIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6IGZvdW5kICc8JyB3aXRob3V0ICc+JzogIiArIHN0cik7CisgICAgICAgICAgICByZXR1cm4gc3RyOyAgICAgLy8gbm90IG11Y2ggd2UgY2FuIGRvCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBsdEluZGV4KSArIHN0ci5zdWJzdHJpbmcoZ3RJbmRleCsxKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL2V0YzF0b29sL2V0YzF0b29sLmNwcCBiL3Rvb2xzL2V0YzF0b29sL2V0YzF0b29sLmNwcAppbmRleCBlY2Y5NmVjLi40Y2MwMjAyIDEwMDY0NAotLS0gYS90b29scy9ldGMxdG9vbC9ldGMxdG9vbC5jcHAKKysrIGIvdG9vbHMvZXRjMXRvb2wvZXRjMXRvb2wuY3BwCkBAIC0xNDIsOSArMTQyLDkgQEAKICAgICBwbmdfYnl0ZXAqIHJvd19wb2ludGVycyA9IE5VTEw7IC8vIERvZXMgbm90IG5lZWQgdG8gYmUgZGVhbGxvY2F0ZWQuCiAgICAgcG5nX3VpbnRfMzIgd2lkdGggPSAwOwogICAgIHBuZ191aW50XzMyIGhlaWdodCA9IDA7CisgICAgcG5nX3VpbnRfMzIgc3RyaWRlID0gMDsKICAgICBpbnQgcmVzdWx0ID0gLTE7CiAgICAgZXRjMV9ieXRlKiBwU291cmNlSW1hZ2UgPSAwOwotICAgIHBuZ191aW50XzMyIHN0cmlkZSA9IDA7CiAKICAgICBpZiAoKHBJbiA9IGZvcGVuKHBJbnB1dCwgInJiIikpID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlICVzIGZvciByZWFkaW5nOiAlZFxuIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmR1bnVzZWQvZmluZHVudXNlZHJlc291cmNlcyBiL3Rvb2xzL2ZpbmR1bnVzZWQvZmluZHVudXNlZHJlc291cmNlcwppbmRleCA1NGIxNTk2Li4wNzM3NjNlIDEwMDc1NQotLS0gYS90b29scy9maW5kdW51c2VkL2ZpbmR1bnVzZWRyZXNvdXJjZXMKKysrIGIvdG9vbHMvZmluZHVudXNlZC9maW5kdW51c2VkcmVzb3VyY2VzCkBAIC0xLDUgKzEsNyBAQAogIyEvYmluL3NoCiAKK0xBTkc9QworCiBpZiBbICIkMSIgPT0gIi1oIiBdCiB0aGVuCiAgICAgY2F0IDw8LSBFT0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmR1bnVzZWQvZmluZHVudXNlZHN0cmluZ3MgYi90b29scy9maW5kdW51c2VkL2ZpbmR1bnVzZWRzdHJpbmdzCmluZGV4IGE1NGIwNjAuLjk2MTVhYmMgMTAwNzU1Ci0tLSBhL3Rvb2xzL2ZpbmR1bnVzZWQvZmluZHVudXNlZHN0cmluZ3MKKysrIGIvdG9vbHMvZmluZHVudXNlZC9maW5kdW51c2Vkc3RyaW5ncwpAQCAtMjgsOSArMjgsMTAgQEAKICAgICBpZiBbIC1kICRhcHAvcmVzIF0KICAgICB0aGVuCiAgICAgICAgIHB1c2hkICRhcHAgPiAvZGV2L251bGwKLSAgICAgICAgZm9yIGkgaW4gJChncmVwIC1SICJcKHN0cmluZ1x8cGx1cmFsc1wpIG5hbWU9IiByZXMgfCBzZWQgJ3MvLio8XChzdHJpbmdcfHBsdXJhbHNcKSBuYW1lPSIvLyd8c2VkICdzLyIuKiQvLyd8c29ydCAtdSkKKyAgICAgICAgIyBUd28gc2VkJ3Mgd2VyZSBuZWVkZWQgYmVjYXVzZSB0aGUgfCBvcGVyYXRvciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBtYWMKKyAgICAgICAgZm9yIGkgaW4gJChncmVwIC1ScyAiXChzdHJpbmdcfHBsdXJhbHNcKSBuYW1lPSIgcmVzIHwgc2VkICdzLy4qc3RyaW5nIG5hbWU9XCIvLycgfCBzZWQgJ3MvLipwbHVyYWxzIG5hbWU9XCIvLyd8c2VkICdzLyIuKiQvLyd8c29ydCAtdSkKICAgICAgICAgZG8KLSAgICAgICAgICAgIGVjaG8gJGkgJChncmVwIC1SdyBSLnBsdXJhbHMuJGlcXFx8Ui5zdHJpbmcuJGlcXFx8QHN0cmluZy8kaSAufHdjIC1sKQorICAgICAgICAgICAgZWNobyAkaSAkKGdyZXAgLVJ3cyBSLnBsdXJhbHMuJGlcXFx8Ui5zdHJpbmcuJGlcXFx8QHN0cmluZy8kaSAufHdjIC1sKQogICAgICAgICBkb25lIHwgZ3JlcCAnIDAkJyB8IHsKICAgICAgICAgICAgIGlmIFsgIiRzaG93YWxsIiA9PSAieWVzIiBdCiAgICAgICAgICAgICB0aGVuCmRpZmYgLS1naXQgYS90b29scy9ob3N0dGVzdGxpYi9zcmMvY29tL2FuZHJvaWQvaG9zdHRlc3QvRGV2aWNlQ29ubmVjdG9yLmphdmEgYi90b29scy9ob3N0dGVzdGxpYi9zcmMvY29tL2FuZHJvaWQvaG9zdHRlc3QvRGV2aWNlQ29ubmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NGQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2hvc3R0ZXN0bGliL3NyYy9jb20vYW5kcm9pZC9ob3N0dGVzdC9EZXZpY2VDb25uZWN0b3IuamF2YQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmhvc3R0ZXN0OworCitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLkFuZHJvaWREZWJ1Z0JyaWRnZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuSURldmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQW5kcm9pZERlYnVnQnJpZGdlLklEZXZpY2VDaGFuZ2VMaXN0ZW5lcjsKKworCisvKioKKyAqIEEgaGVscGVyIGNsYXNzIHRoYXQgY2FuIGNvbm5lY3QgdG8gYSBkZG1saWIge0BsaW5rIElEZXZpY2V9CisgKi8KK3B1YmxpYyBjbGFzcyBEZXZpY2VDb25uZWN0b3IgeworCisgICAgLyoqCisgICAgICogVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIGRldmljZSB0byBiZSBjb25uZWN0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9XQUlUX0RFVklDRV9USU1FID0gNTAwMDsKKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVzIERETVMgbGlicmFyeSwgYW5kIGNvbm5lY3RzIHRvIHNwZWNpZmllZCBBbmRyb2lkIGRldmljZQorICAgICAqCisgICAgICogQHBhcmFtIGRldmljZVNlcmlhbCB0aGUgZGV2aWNlIHNlcmlhbCB0byBjb25uZWN0IHRvLiBJZiA8Y29kZT5udWxsPC9jb2RlPiBjb25uZWN0IHRvIGZpcnN0CisgICAgICogZGlzY292ZXJlZCBkZXZpY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSURldmljZX0gZm91bmQKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBubyBkZXZpY2UgY2Fubm90IGJlIGZvdW5kLgorICAgICAqLworICAgIHB1YmxpYyBJRGV2aWNlIGNvbm5lY3RUb0RldmljZShTdHJpbmcgZGV2aWNlU2VyaWFsKSB7CisgICAgICAgIC8vIGluaXRpYWxpemUgRERNUyB3aXRoIG5vIGNsaWVudFN1cHBvcnQgYWthIGRlYnVnZ2VyIHN1cHBvcnQKKyAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlLmluaXQoZmFsc2UgLyogY2xpZW50U3VwcG9ydCAqLyk7CisgICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZSBhZGJCcmlkZ2UgPSBBbmRyb2lkRGVidWdCcmlkZ2UuY3JlYXRlQnJpZGdlKCk7CisgICAgICAgIGZvciAoSURldmljZSBkZXZpY2UgOiBhZGJCcmlkZ2UuZ2V0RGV2aWNlcygpKSB7CisgICAgICAgICAgICBpZiAoZGV2aWNlU2VyaWFsID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChkZXZpY2VTZXJpYWwuZXF1YWxzKGRldmljZS5nZXRTZXJpYWxOdW1iZXIoKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IGdldCBzb21lIHNvcnQgb2YgbG9nZ2VyIGludGVyZmFjZSBhcyBwYXJhbSBpbnN0ZWFkCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgZGV2aWNlLi4uIik7CisgICAgICAgIE5ld0RldmljZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE5ld0RldmljZUxpc3RlbmVyKGRldmljZVNlcmlhbCk7CisgICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZS5hZGREZXZpY2VDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIElEZXZpY2UgZGV2aWNlID0gbGlzdGVuZXIud2FpdEZvckRldmljZShNQVhfV0FJVF9ERVZJQ0VfVElNRSk7CisgICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZS5yZW1vdmVEZXZpY2VDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIGlmIChkZXZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ291bGQgbm90IGNvbm5lY3QgdG8gZGV2aWNlIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiQ29ubmVjdGVkIHRvICVzIiwgZGV2aWNlLmdldFNlcmlhbE51bWJlcigpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRldmljZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMaXN0ZW5lciBmb3IgbmV3IEFuZHJvaWQgZGV2aWNlcworICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5ld0RldmljZUxpc3RlbmVyIGltcGxlbWVudHMgSURldmljZUNoYW5nZUxpc3RlbmVyIHsKKyAgICAgICAgcHJpdmF0ZSBJRGV2aWNlIG1EZXZpY2U7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIG1TZXJpYWw7CisKKyAgICAgICAgcHVibGljIE5ld0RldmljZUxpc3RlbmVyKFN0cmluZyBzZXJpYWwpIHsKKyAgICAgICAgICAgIG1TZXJpYWwgPSBzZXJpYWw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VDaGFuZ2VkKElEZXZpY2UgZGV2aWNlLCBpbnQgY2hhbmdlTWFzaykgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZGV2aWNlQ29ubmVjdGVkKElEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgICAgICBpZiAobVNlcmlhbCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2V0RGV2aWNlKGRldmljZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1TZXJpYWwuZXF1YWxzKGRldmljZS5nZXRTZXJpYWxOdW1iZXIoKSkpIHsKKyAgICAgICAgICAgICAgICBzZXREZXZpY2UoZGV2aWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgc2V0RGV2aWNlKElEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgICAgICBtRGV2aWNlID0gZGV2aWNlOworICAgICAgICAgICAgbm90aWZ5KCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoSURldmljZSBkZXZpY2UpIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJRGV2aWNlIHdhaXRGb3JEZXZpY2UobG9uZyB3YWl0VGltZSkgeworICAgICAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobURldmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3YWl0KHdhaXRUaW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBkZXZpY2UgaW50ZXJydXB0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtRGV2aWNlOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaG9zdHRlc3RsaWIvc3JjL2NvbS9hbmRyb2lkL2hvc3R0ZXN0L0RldmljZVRlc3RSdW5uZXIuamF2YSBiL3Rvb2xzL2hvc3R0ZXN0bGliL3NyYy9jb20vYW5kcm9pZC9ob3N0dGVzdC9EZXZpY2VUZXN0UnVubmVyLmphdmEKaW5kZXggYWI0Y2U1Zi4uMzFiYTMxYyAxMDA2NDQKLS0tIGEvdG9vbHMvaG9zdHRlc3RsaWIvc3JjL2NvbS9hbmRyb2lkL2hvc3R0ZXN0L0RldmljZVRlc3RSdW5uZXIuamF2YQorKysgYi90b29scy9ob3N0dGVzdGxpYi9zcmMvY29tL2FuZHJvaWQvaG9zdHRlc3QvRGV2aWNlVGVzdFJ1bm5lci5qYXZhCkBAIC03MSw3ICs3MSw4IEBACiAgICAgICAgICAgICAgICAgcGFyZW50QXJncy5hZGQoYXJnc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbURldmljZSA9IGNvbm5lY3RUb0RldmljZShtRGV2aWNlU2VyaWFsKTsKKyAgICAgICAgRGV2aWNlQ29ubmVjdG9yIGNvbm5lY3RvciA9IG5ldyBEZXZpY2VDb25uZWN0b3IoKTsKKyAgICAgICAgbURldmljZSA9IGNvbm5lY3Rvci5jb25uZWN0VG9EZXZpY2UobURldmljZVNlcmlhbCk7CiAgICAgICAgIHJldHVybiBzdXBlci5zdGFydChwYXJlbnRBcmdzLnRvQXJyYXkobmV3IFN0cmluZ1twYXJlbnRBcmdzLnNpemUoKV0pKTsKICAgICB9CiAKQEAgLTgzLDc3ICs4NCw2IEBACiAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplcyBERE1TIGxpYnJhcnksIGFuZCBjb25uZWN0cyB0byBzcGVjaWZpZWQgQW5kcm9pZCBkZXZpY2UKLSAgICAgKiBAcGFyYW0gZGV2aWNlU2VyaWFsCi0gICAgICogQHJldHVybiB7QGxpbmsgSURldmljZX0KLSAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBzcGVjaWZpZWQgZGV2aWNlIGNhbm5vdCBiZSBmb3VuZAotICAgICAqLwotICAgIHByaXZhdGUgSURldmljZSBjb25uZWN0VG9EZXZpY2UoU3RyaW5nIGRldmljZVNlcmlhbCkgewotICAgICAgICAvLyBpbml0aWFsaXplIERETVMgd2l0aCBubyBjbGllbnRTdXBwb3J0IGFrYSBkZWJ1Z2dlciBzdXBwb3J0Ci0gICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZS5pbml0KGZhbHNlIC8qIGNsaWVudFN1cHBvcnQgKi8pOwotICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UgYWRiQnJpZGdlID0gQW5kcm9pZERlYnVnQnJpZGdlLmNyZWF0ZUJyaWRnZSgpOwotICAgICAgICBmb3IgKElEZXZpY2UgZGV2aWNlIDogYWRiQnJpZGdlLmdldERldmljZXMoKSkgewotICAgICAgICAgICAgaWYgKGRldmljZVNlcmlhbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlU2VyaWFsLmVxdWFscyhkZXZpY2UuZ2V0U2VyaWFsTnVtYmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIGRldmljZS4uLiIpOwotICAgICAgICBOZXdEZXZpY2VMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBOZXdEZXZpY2VMaXN0ZW5lcihkZXZpY2VTZXJpYWwpOwotICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UuYWRkRGV2aWNlQ2hhbmdlTGlzdGVuZXIobGlzdGVuZXIpOwotICAgICAgICBJRGV2aWNlIGRldmljZSA9IGxpc3RlbmVyLndhaXRGb3JEZXZpY2UoNTAwMCk7Ci0gICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZS5yZW1vdmVEZXZpY2VDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gICAgICAgIGlmIChkZXZpY2UgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ291bGQgbm90IGNvbm5lY3QgdG8gZGV2aWNlIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRldmljZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMaXN0ZW5lciBmb3IgbmV3IEFuZHJvaWQgZGV2aWNlcwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5ld0RldmljZUxpc3RlbmVyIGltcGxlbWVudHMgSURldmljZUNoYW5nZUxpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBJRGV2aWNlIG1EZXZpY2U7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIG1TZXJpYWw7Ci0KLSAgICAgICAgcHVibGljIE5ld0RldmljZUxpc3RlbmVyKFN0cmluZyBzZXJpYWwpIHsKLSAgICAgICAgICAgIG1TZXJpYWwgPSBzZXJpYWw7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VDaGFuZ2VkKElEZXZpY2UgZGV2aWNlLCBpbnQgY2hhbmdlTWFzaykgewotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZGV2aWNlQ29ubmVjdGVkKElEZXZpY2UgZGV2aWNlKSB7Ci0gICAgICAgICAgICBpZiAobVNlcmlhbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2V0RGV2aWNlKGRldmljZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1TZXJpYWwuZXF1YWxzKGRldmljZS5nZXRTZXJpYWxOdW1iZXIoKSkpIHsKLSAgICAgICAgICAgICAgICBzZXREZXZpY2UoZGV2aWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgc2V0RGV2aWNlKElEZXZpY2UgZGV2aWNlKSB7Ci0gICAgICAgICAgICBtRGV2aWNlID0gZGV2aWNlOwotICAgICAgICAgICAgbm90aWZ5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoSURldmljZSBkZXZpY2UpIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBJRGV2aWNlIHdhaXRGb3JEZXZpY2UobG9uZyB3YWl0VGltZSkgewotICAgICAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKLSAgICAgICAgICAgICAgICBpZiAobURldmljZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YWl0KHdhaXRUaW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBkZXZpY2UgaW50ZXJydXB0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtRGV2aWNlOwotICAgICAgICB9Ci0gICAgfQogCiAgICAgLyoqCiAgICAgICogTWFpbiBlbnRyeSBwb2ludC4KQEAgLTIwMiw2ICsxMzIsNyBAQAogICAgIC8qKgogICAgICAqIE92ZXJyaWRlIHBhcmVudCB0byBjcmVhdGUgRGV2aWNlVGVzdFN1aXRlIHdyYXBwZXIsIGluc3RlYWQgb2YgVGVzdFN1aXRlCiAgICAgICovCisgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIFRlc3RSZXN1bHQgcnVuU2luZ2xlTWV0aG9kKFN0cmluZyB0ZXN0Q2FzZSwgU3RyaW5nIG1ldGhvZCwgYm9vbGVhbiB3YWl0KQogICAgIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvdG9vbHMvbWFrZV9rZXkgYi90b29scy9tYWtlX2tleQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzAyZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbWFrZV9rZXkKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgR2VuZXJhdGVzIGEgcHVibGljL3ByaXZhdGUga2V5IHBhaXIgc3VpdGFibGUgZm9yIHVzZSBpbiBzaWduaW5nCisjIGFuZHJvaWQgLmFwa3MgYW5kIE9UQSB1cGRhdGUgcGFja2FnZXMuCisKK2lmIFsgIiQjIiAtbmUgMiBdOyB0aGVuCisgIGNhdCA8PEVPRgorVXNhZ2U6ICQwIDxuYW1lPiA8c3ViamVjdD4KKworQ3JlYXRlcyA8bmFtZT4ucGs4IGtleSBhbmQgPG5hbWU+Lng1MDkucGVtIGNlcnQuICBDZXJ0IGNvbnRhaW5zIHRoZQorZ2l2ZW4gPHN1YmplY3Q+LgorRU9GCisgIGV4aXQgMgorZmkKKworaWYgW1sgLWUgJDEucGs4IHx8IC1lICQxLng1MDkucGVtIF1dOyB0aGVuCisgIGVjaG8gIiQxLnBrOCBhbmQvb3IgJDEueDUwOS5wZW0gYWxyZWFkeSBleGlzdDsgcGxlYXNlIGRlbGV0ZSB0aGVtIGZpcnN0IgorICBlY2hvICJpZiB5b3Ugd2FudCB0byByZXBsYWNlIHRoZW0uIgorICBleGl0IDEKK2ZpCisKKyMgVXNlIG5hbWVkIHBpcGVzIHRvIGNvbm5lY3QgZ2V0IHRoZSByYXcgUlNBIHByaXZhdGUga2V5IHRvIHRoZSBjZXJ0LQorIyBhbmQgLnBrOC1jcmVhdGluZyBwcm9ncmFtcywgdG8gYXZvaWQgaGF2aW5nIHRoZSBwcml2YXRlIGtleSBldmVyCisjIHRvdWNoIHRoZSBkaXNrLgorCit0bXBkaXI9JChta3RlbXAgLWQpCit0cmFwICdybSAtcmYgJHt0bXBkaXJ9OyBlY2hvOyBleGl0IDEnIEVYSVQgSU5UIFFVSVQKKworb25lPSR7dG1wZGlyfS9vbmUKK3R3bz0ke3RtcGRpcn0vdHdvCitta25vZCAke29uZX0gcAorbWtub2QgJHt0d299IHAKK2NobW9kIDA2MDAgJHtvbmV9ICR7dHdvfQorCityZWFkIC1wICJFbnRlciBwYXNzd29yZCBmb3IgJyQxJyAoYmxhbmsgZm9yIG5vbmU7IHBhc3N3b3JkIHdpbGwgYmUgdmlzaWJsZSk6ICIgXAorICBwYXNzd29yZAorCisoIG9wZW5zc2wgZ2VucnNhIC0zIDIwNDggfCB0ZWUgJHtvbmV9ID4gJHt0d299ICkgJgorCitvcGVuc3NsIHJlcSAtbmV3IC14NTA5IC1zaGExIC1rZXkgJHt0d299IC1vdXQgJDEueDUwOS5wZW0gXAorICAtZGF5cyAxMDAwMCAtc3ViaiAiJDIiICYKKworaWYgWyAiJHtwYXNzd29yZH0iID09ICIiIF07IHRoZW4KKyAgZWNobyAiY3JlYXRpbmcgJHsxfS5wazggd2l0aCBubyBwYXNzd29yZCIKKyAgb3BlbnNzbCBwa2NzOCAtaW4gJHtvbmV9IC10b3BrOCAtb3V0Zm9ybSBERVIgLW91dCAkMS5wazggLW5vY3J5cHQKK2Vsc2UKKyAgZWNobyAiY3JlYXRpbmcgJHsxfS5wazggd2l0aCBwYXNzd29yZCBbJHtwYXNzd29yZH1dIgorICBlY2hvICRwYXNzd29yZCB8IG9wZW5zc2wgcGtjczggLWluICR7b25lfSAtdG9wazggLW91dGZvcm0gREVSIC1vdXQgJDEucGs4IFwKKyAgICAtcGFzc291dCBzdGRpbgorZmkKKword2FpdAord2FpdApkaWZmIC0tZ2l0IGEvdG9vbHMvbW9ua2V5cnVubmVyL3NyYy9jb20vYW5kcm9pZC9tb25rZXlydW5uZXIvTW9ua2V5UmVjb3JkZXIuamF2YSBiL3Rvb2xzL21vbmtleXJ1bm5lci9zcmMvY29tL2FuZHJvaWQvbW9ua2V5cnVubmVyL01vbmtleVJlY29yZGVyLmphdmEKaW5kZXggZWZjMDAyYi4uZjA2ZWFmZCAxMDA2NDQKLS0tIGEvdG9vbHMvbW9ua2V5cnVubmVyL3NyYy9jb20vYW5kcm9pZC9tb25rZXlydW5uZXIvTW9ua2V5UmVjb3JkZXIuamF2YQorKysgYi90b29scy9tb25rZXlydW5uZXIvc3JjL2NvbS9hbmRyb2lkL21vbmtleXJ1bm5lci9Nb25rZXlSZWNvcmRlci5qYXZhCkBAIC01MiwxMiArNTIsMTEgQEAKICAqICAgIG1yLmNsb3NlKCk7CiAgKgogICogIFdpdGggTW9ua2V5UnVubmVyIHRoaXMgc2hvdWxkIG91dHB1dCBhbiB4bWwgZmlsZSwgPHNjcmlwdF9uYW1lPi15eXl5TU1kZC1ISDptbTpzcy54bWwsIGludG8gdGhlCi0gKiAgZGlyZWN0b3J5IG91dC88c2NyaXB0X25hbWU+LXl5eXlNTWRkLUhIOm1tOnNzIHdpdGggdGhlIGNvbnRlbnRzOgorICogIGRpcmVjdG9yeSBvdXQvPHNjcmlwdF9uYW1lPi15eXl5TU1kZC1ISDptbTpzcyB3aXRoIHRoZSBjb250ZW50cyBsaWtlOgogICoKICAqICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdVVEYtOCc/PgotICogIDxzY3JpcHRfcnVuPgotICogICAgc2NyaXB0X25hbWU9ImZpbGVuYW1lIgotICogICAgbW9ua2V5UnVubmVyVmVyc2lvbj0iMC4yIgorICogIDwhLS0gTW9ua2V5IFNjcmlwdCBSZXN1bHRzIC0tPgorICogIDxzY3JpcHRfcnVuIHNjcmlwdF9uYW1lPSJmaWxlbmFtZSIgbW9ua2V5UnVubmVyVmVyc2lvbj0iMC4yIj4KICAqICAgIDwhLS0gRGV2aWNlIHNwZWNpZmljIHZhcmlhYmxlcyAtLT4KICAqICAgIDxkZXZpY2VfdmFyIHZhcl9uYW1lPSJuYW1lIiB2YXJfdmFsdWU9InZhbHVlIiAvPgogICogICAgPGRldmljZV92YXIgbmFtZT0iYnVpbGQuZGlzcGxheSIgdmFsdWU9Im9wYWwtdXNlcmRlYnVnIDEuNiBEUkM3OSAxNDIwNyB0ZXN0LWtleXMiLz4KQEAgLTk1LDE0ICs5NCwxNSBAQAogICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9ESVIgPSAib3V0IjsKICAgCiAgIC8vIGZvciBnZXR0aW5nIHRoZSBkYXRlIGFuZCB0aW1lIGluIG5vdygpCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgU0lNUExFX0RBVEVfVElNRV9GT1JNQVQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eU1NZGQtSEg6bW06c3MiKTsKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCBTSU1QTEVfREFURV9USU1FX0ZPUk1BVCA9CisgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eU1NZGQtSEg6bW06c3MiKTsKICAgCiAgIC8qKgogICAgKiBDcmVhdGUgYSBuZXcgTW9ua2V5UmVjb3JkZXIgdGhhdCByZWNvcmRzIGNvbW1hbmRzIGFuZCB6aXBzIHVwIHNjcmVlbnNob3RzIGZvciBzdWJtaXR0YWwKICAgICogCiAgICAqIEBwYXJhbSBzY3JpcHROYW1lIGZpbGVwYXRoIG9mIHRoZSBtb25rZXkgc2NyaXB0IHdlIGFyZSBydW5uaW5nCiAgICAqLwotICBwdWJsaWMgTW9ua2V5UmVjb3JkZXIoU3RyaW5nIHNjcmlwdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgIHB1YmxpYyBNb25rZXlSZWNvcmRlcihTdHJpbmcgc2NyaXB0TmFtZSwgU3RyaW5nIHZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgLy8gQ3JlYXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gc3RvcmUgeG1sIGZpbGUsIGltYWdlcyBhbmQgemlwcwogICAgIEZpbGUgc2NyaXB0RmlsZSA9IG5ldyBGaWxlKHNjcmlwdE5hbWUpOwogICAgIHNjcmlwdE5hbWUgPSBzY3JpcHRGaWxlLmdldE5hbWUoKTsgIC8vIEdldCByaWQgb2YgcGF0aApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSB4bWwgZmlsZQogICAgIG1YbWxGaWxlbmFtZSA9IHN0YW1wRmlsZW5hbWUoc3RyaXBUeXBlKHNjcmlwdE5hbWUpICsgIi54bWwiKTsKLSAgICBpbml0WG1sRmlsZShzY3JpcHROYW1lKTsKKyAgICBpbml0WG1sRmlsZShzY3JpcHROYW1lLCB2ZXJzaW9uKTsKICAgfQogCiAgIC8vIEdldCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGluIGEgc2ltcGxlIHN0cmluZyBmb3JtYXQgKHVzZWQgZm9yIHRpbWVzdGFtcGluZyBmaWxlbmFtZXMpCkBAIC0xMjMsMTQgKzEyMywxNiBAQAogICAgKiBJbml0aWFsaXplIHRoZSB4bWwgZmlsZSB3cml0ZXIKICAgICogCiAgICAqIEBwYXJhbSBzY3JpcHROYW1lIGZpbGVuYW1lIChub3QgcGF0aCkgb2YgdGhlIG1vbmtleSBzY3JpcHQsIHN0b3JlZCBhcyBhdHRyaWJ1dGUgaW4gdGhlIHhtbCBmaWxlCisgICAqIEBwYXJhbSB2ZXJzaW9uIG9mIHRoZSBtb25rZXkgcnVubmVyIHRlc3Qgc3lzdGVtCiAgICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRYbWxGaWxlKFN0cmluZyBzY3JpcHROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRYbWxGaWxlKFN0cmluZyBzY3JpcHROYW1lLCBTdHJpbmcgdmVyc2lvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbXSB7ICJzY3JpcHRfbmFtZSIsICJtb25rZXlSdW5uZXJWZXJzaW9uIiB9OworICAgIFN0cmluZ1tdIHZhbHVlcyA9IG5ldyBTdHJpbmdbXSB7IHNjcmlwdE5hbWUsIHZlcnNpb24gfTsKICAgICBtWG1sRmlsZSA9IG5ldyBGaWxlV3JpdGVyKG1EaXJuYW1lICsgIi8iICsgbVhtbEZpbGVuYW1lKTsKICAgICBtWG1sV3JpdGVyID0gbmV3IFhNTFdyaXRlcihtWG1sRmlsZSk7CiAgICAgbVhtbFdyaXRlci5iZWdpbigpOwogICAgIG1YbWxXcml0ZXIuY29tbWVudCgiTW9ua2V5IFNjcmlwdCBSZXN1bHRzIik7Ci0gICAgbVhtbFdyaXRlci5zdGFydCgic2NyaXB0X3J1biIpOwotICAgIG1YbWxXcml0ZXIuYWRkQXR0cmlidXRlKCJzY3JpcHRfbmFtZSIsIHNjcmlwdE5hbWUpOworICAgIG1YbWxXcml0ZXIuc3RhcnQoInNjcmlwdF9ydW4iLCBuYW1lcywgdmFsdWVzLCBuYW1lcy5sZW5ndGgpOwogICB9CiAgIAogICAvKioKQEAgLTE0Niw4ICsxNDgsNyBAQAogICAgKiBCZWdpbiB3cml0aW5nIGEgY29tbWFuZCB4bWwgZWxlbWVudAogICAgKi8KICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXJ0Q29tbWFuZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgbVhtbFdyaXRlci5zdGFydCgiY29tbWFuZCIpOwotICAgIG1YbWxXcml0ZXIuYWRkQXR0cmlidXRlKCJkYXRlVGltZSIsIG5vdygpKTsKKyAgICBtWG1sV3JpdGVyLnN0YXJ0KCJjb21tYW5kIiwgImRhdGVUaW1lIiwgbm93KCkpOwogICB9CiAgIAogICAvKioKQEAgLTE4Nyw3ICsxODgsNyBAQAogICB9CiAgIAogICAvKioKLSAgICogQWRkIGFuIGF0dHJpYnV0IHRvIGFuIHhtbCBlbGVtZW50LiBuYW1lPSJlc2NhcGVkX3ZhbHVlIgorICAgKiBBZGQgYW4gYXR0cmlidXQgdG8gYW4gb3BlbiB4bWwgZWxlbWVudC4gbmFtZT0iZXNjYXBlZF92YWx1ZSIKICAgICogCiAgICAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQogICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQpAQCAtMjUzLDIwICsyNTQsNiBAQAogICAgICAgcmV0dXJuIGZpbGVuYW1lOwogICAgIHJldHVybiBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgdHlwZUluZGV4KTsKICAgfQotICAKLSAgIC8qKgotICAgKiBBZGQgYSBzaWduYXR1cmUgZWxlbWVudAotICAgKgotICAgKiBAcGFyYW0gZmlsZW5hbWUgcGF0aCBvZiBmaWxlIHRvIGJlIHNpZ25hdHVyZWQKLSAgICovCi0gICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZE1ENVNpZ25hdHVyZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBTdHJpbmcgc2lnbmF0dXJlID0gIiI7Ci0gICAgICAvLyBmaW5kIHNpZ25hdHVyZS4uLiBNRDUgc2lnID0gbmV3IE1ENShmaWxlbmFtZSk7IHNpZ25hdHVyZSA9IHNpZy50b1N0cmluZygpOwotICAgICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW10geyAidHlwZSIsICJmaWxlbmFtZSIsICJzaWduYXR1cmUiIH07Ci0gICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBuZXcgU3RyaW5nW10geyAibWQ1IiwgZmlsZW5hbWUsIHNpZ25hdHVyZSB9OwotICAgICAgbVhtbFdyaXRlci50YWcoIlNpZ25hdHVyZSIsIG5hbWVzLCB2YWx1ZXMsIHZhbHVlcy5sZW5ndGgpOwotICAgfQotIAogCiAgIC8qKgogICAgKiBDbG9zZSB0aGUgbW9ua2V5UmVjb3JkZXIgYnkgY2xvc2luZyB0aGUgeG1sIGZpbGUgYW5kIHppcHBpbmcgaXQgdXAgd2l0aCB0aGUgc2NyZWVuc2hvdHMuCmRpZmYgLS1naXQgYS90b29scy9tb25rZXlydW5uZXIvc3JjL2NvbS9hbmRyb2lkL21vbmtleXJ1bm5lci9Nb25rZXlSdW5uZXIuamF2YSBiL3Rvb2xzL21vbmtleXJ1bm5lci9zcmMvY29tL2FuZHJvaWQvbW9ua2V5cnVubmVyL01vbmtleVJ1bm5lci5qYXZhCmluZGV4IDA3YTQ3MzkuLjQ3MzRiYTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21vbmtleXJ1bm5lci9zcmMvY29tL2FuZHJvaWQvbW9ua2V5cnVubmVyL01vbmtleVJ1bm5lci5qYXZhCisrKyBiL3Rvb2xzL21vbmtleXJ1bm5lci9zcmMvY29tL2FuZHJvaWQvbW9ua2V5cnVubmVyL01vbmtleVJ1bm5lci5qYXZhCkBAIC02OSw3ICs2OSw3IEBACiAgIGZpbmFsIHN0YXRpYyBpbnQgS0VZX0lOUFVUX0RFTEFZID0gMTAwMDsKICAgCiAgIC8vIHZlcnNpb24gb2YgbW9ua2V5IHJ1bm5lcgotICBmaW5hbCBzdGF0aWMgU3RyaW5nIG1vbmtleVJ1bm5lclZlcnNpb24gPSAiMC4zMSI7CisgIGZpbmFsIHN0YXRpYyBTdHJpbmcgbW9ua2V5UnVubmVyVmVyc2lvbiA9ICIwLjQiOwogCiAgIC8vIFRPRE86IGludGVyZmFjZSBjbWQ7IGNsYXNzIHhtbCB0YWdzOyBmaXggbG9nZ2VyOyB0ZXN0IGNsYXNzL3NjcmlwdAogCkBAIC0yMjIsMTAgKzIyMiw5IEBACiAgICAgcHJlc3MoImhvbWUiLCBmYWxzZSk7CiAgICAgCiAgICAgLy8gU3RhcnQgcmVjb3JkaW5nIHRoZSBzY3JpcHQgb3V0cHV0LCBtaWdodCB3YW50IG1kNSBzaWduYXR1cmUgb2YgZmlsZSBmb3IgY29tcGxldGVuZXNzCi0gICAgbW9ua2V5UmVjb3JkZXIgPSBuZXcgTW9ua2V5UmVjb3JkZXIoc2NyaXB0TmFtZSk7CisgICAgbW9ua2V5UmVjb3JkZXIgPSBuZXcgTW9ua2V5UmVjb3JkZXIoc2NyaXB0TmFtZSwgbW9ua2V5UnVubmVyVmVyc2lvbik7CiAKLSAgICAvLyBSZWNvcmQgd2hhdCBkZXZpY2UgYW5kIHZlcnNpb24gb2Ygc29mdHdhcmUgd2UgYXJlIHJ1bm5pbmcgb24KLSAgICBtb25rZXlSZWNvcmRlci5hZGRBdHRyaWJ1dGUoIm1vbmtleVJ1bm5lclZlcnNpb24iLCBtb25rZXlSdW5uZXJWZXJzaW9uKTsKKyAgICAvLyBSZWNvcmQgd2hhdCBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgb24KICAgICBhZGREZXZpY2VWYXJzKCk7CiAgICAgbW9ua2V5UmVjb3JkZXIuYWRkQ29tbWVudCgiU2NyaXB0IGNvbW1hbmRzIik7CiAgIH0KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvQW5kcm9pZC5tayBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGJlYjJjCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKKyMgT25seSBidWlsZCBhcGsgaWYgdGhpcyBwYWNrYWdlIGlzIGFkZGVkIHRvIENVU1RPTV9NT0RMVUVTIGluIGJ1aWxkc3BlYy5taworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworIyBPbmx5IGNvbXBpbGUgc291cmNlIGphdmEgZmlsZXMgaW4gdGhpcyBhcGsuCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpCisKK0xPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBOb3RlcGFkdjEKKworIyBNYWtlIHRoZSBhcHAgYnVpbGQgYWdhaW5zdCB0aGUgY3VycmVudCBTREsKK0xPQ0FMX1NES19WRVJTSU9OIDo9IGN1cnJlbnQKKworaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkwMjNmZQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQxIj4KKyAgICA8YXBwbGljYXRpb24gYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNvbiI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5Ob3RlcGFkdjEiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorICAgIDwvYXBwbGljYXRpb24+Cis8L21hbmlmZXN0PiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3Jlcy9kcmF3YWJsZS9pY29uLnBuZyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL2RyYXdhYmxlL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0ZTM2MDEKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3Jlcy9sYXlvdXQvbm90ZXBhZF9saXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL2xheW91dC9ub3RlcGFkX2xpc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1NDg4OGQKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3Jlcy9sYXlvdXQvbm90ZXBhZF9saXN0LnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY5ODk2MQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8cmVzb3VyY2VzPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPk5vdGVwYWQgdjE8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX25vdGVzIj5ObyBOb3RlcyBZZXQ8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3RlcGFkdjEuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXBhZHYxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY3M2Y0MgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXBhZHYxLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDE7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CisKK3B1YmxpYyBjbGFzcyBOb3RlcGFkdjEgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBpbnQgbU5vdGVOdW1iZXIgPSAxOworCisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlvbnNNZW51KE1lbnUgbWVudSkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBzdXBlci5vbkNyZWF0ZU9wdGlvbnNNZW51KG1lbnUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uT3B0aW9uc0l0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uT3B0aW9uc0l0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVzRGJBZGFwdGVyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVzRGJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTMyOTVkNgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXNEYkFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQxOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5TUUxFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2U7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlT3BlbkhlbHBlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisvKioKKyAqIFNpbXBsZSBub3RlcyBkYXRhYmFzZSBhY2Nlc3MgaGVscGVyIGNsYXNzLiBEZWZpbmVzIHRoZSBiYXNpYyBDUlVEIG9wZXJhdGlvbnMKKyAqIGZvciB0aGUgbm90ZXBhZCBleGFtcGxlLCBhbmQgZ2l2ZXMgdGhlIGFiaWxpdHkgdG8gbGlzdCBhbGwgbm90ZXMgYXMgd2VsbCBhcworICogcmV0cmlldmUgb3IgbW9kaWZ5IGEgc3BlY2lmaWMgbm90ZS4KKyAqIAorICogVGhpcyBoYXMgYmVlbiBpbXByb3ZlZCBmcm9tIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoaXMgdHV0b3JpYWwgdGhyb3VnaCB0aGUKKyAqIGFkZGl0aW9uIG9mIGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgYWxzbyB1c2luZyByZXR1cm5pbmcgYSBDdXJzb3IgaW5zdGVhZAorICogb2YgdXNpbmcgYSBjb2xsZWN0aW9uIG9mIGlubmVyIGNsYXNzZXMgKHdoaWNoIGlzIGxlc3Mgc2NhbGFibGUgYW5kIG5vdAorICogcmVjb21tZW5kZWQpLgorICovCitwdWJsaWMgY2xhc3MgTm90ZXNEYkFkYXB0ZXIgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1RJVExFID0gInRpdGxlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQk9EWSA9ICJib2R5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUk9XSUQgPSAiX2lkIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTm90ZXNEYkFkYXB0ZXIiOworICAgIHByaXZhdGUgRGF0YWJhc2VIZWxwZXIgbURiSGVscGVyOworICAgIHByaXZhdGUgU1FMaXRlRGF0YWJhc2UgbURiOworCisgICAgLyoqCisgICAgICogRGF0YWJhc2UgY3JlYXRpb24gc3FsIHN0YXRlbWVudAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9DUkVBVEUgPQorICAgICAgICAiY3JlYXRlIHRhYmxlIG5vdGVzIChfaWQgaW50ZWdlciBwcmltYXJ5IGtleSBhdXRvaW5jcmVtZW50LCAiCisgICAgICAgICsgInRpdGxlIHRleHQgbm90IG51bGwsIGJvZHkgdGV4dCBub3QgbnVsbCk7IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9OQU1FID0gImRhdGEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9UQUJMRSA9ICJub3RlcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFX1ZFUlNJT04gPSAyOworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1DdHg7CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEYXRhYmFzZUhlbHBlciBleHRlbmRzIFNRTGl0ZU9wZW5IZWxwZXIgeworCisgICAgICAgIERhdGFiYXNlSGVscGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgREFUQUJBU0VfTkFNRSwgbnVsbCwgREFUQUJBU0VfVkVSU0lPTik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoU1FMaXRlRGF0YWJhc2UgZGIpIHsKKworICAgICAgICAgICAgZGIuZXhlY1NRTChEQVRBQkFTRV9DUkVBVEUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uVXBncmFkZShTUUxpdGVEYXRhYmFzZSBkYiwgaW50IG9sZFZlcnNpb24sIGludCBuZXdWZXJzaW9uKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJVcGdyYWRpbmcgZGF0YWJhc2UgZnJvbSB2ZXJzaW9uICIgKyBvbGRWZXJzaW9uICsgIiB0byAiCisgICAgICAgICAgICAgICAgICAgICsgbmV3VmVyc2lvbiArICIsIHdoaWNoIHdpbGwgZGVzdHJveSBhbGwgb2xkIGRhdGEiKTsKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIG5vdGVzIik7CisgICAgICAgICAgICBvbkNyZWF0ZShkYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciAtIHRha2VzIHRoZSBjb250ZXh0IHRvIGFsbG93IHRoZSBkYXRhYmFzZSB0byBiZQorICAgICAqIG9wZW5lZC9jcmVhdGVkCisgICAgICogCisgICAgICogQHBhcmFtIGN0eCB0aGUgQ29udGV4dCB3aXRoaW4gd2hpY2ggdG8gd29yaworICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlcihDb250ZXh0IGN0eCkgeworICAgICAgICB0aGlzLm1DdHggPSBjdHg7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbiB0aGUgbm90ZXMgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBvcGVuZWQsIHRyeSB0byBjcmVhdGUgYSBuZXcKKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBjcmVhdGVkLCB0aHJvdyBhbiBleGNlcHRpb24gdG8KKyAgICAgKiBzaWduYWwgdGhlIGZhaWx1cmUKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoaXMgKHNlbGYgcmVmZXJlbmNlLCBhbGxvd2luZyB0aGlzIHRvIGJlIGNoYWluZWQgaW4gYW4KKyAgICAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uIGNhbGwpCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgdGhlIGRhdGFiYXNlIGNvdWxkIGJlIG5laXRoZXIgb3BlbmVkIG9yIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIgb3BlbigpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgRGF0YWJhc2VIZWxwZXIobUN0eCk7CisgICAgICAgIG1EYiA9IG1EYkhlbHBlci5nZXRXcml0YWJsZURhdGFiYXNlKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBtRGJIZWxwZXIuY2xvc2UoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBub3RlIHVzaW5nIHRoZSB0aXRsZSBhbmQgYm9keSBwcm92aWRlZC4gSWYgdGhlIG5vdGUgaXMKKyAgICAgKiBzdWNjZXNzZnVsbHkgY3JlYXRlZCByZXR1cm4gdGhlIG5ldyByb3dJZCBmb3IgdGhhdCBub3RlLCBvdGhlcndpc2UgcmV0dXJuCisgICAgICogYSAtMSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorICAgICAqIAorICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIG5vdGUKKyAgICAgKiBAcGFyYW0gYm9keSB0aGUgYm9keSBvZiB0aGUgbm90ZQorICAgICAqIEByZXR1cm4gcm93SWQgb3IgLTEgaWYgZmFpbGVkCisgICAgICovCisgICAgcHVibGljIGxvbmcgY3JlYXRlTm90ZShTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgaW5pdGlhbFZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi5pbnNlcnQoREFUQUJBU0VfVEFCTEUsIG51bGwsIGluaXRpYWxWYWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlbGV0ZSB0aGUgbm90ZSB3aXRoIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIGRlbGV0ZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkZWxldGVOb3RlKGxvbmcgcm93SWQpIHsKKworICAgICAgICByZXR1cm4gbURiLmRlbGV0ZShEQVRBQkFTRV9UQUJMRSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3Igb3ZlciB0aGUgbGlzdCBvZiBhbGwgbm90ZXMgaW4gdGhlIGRhdGFiYXNlCisgICAgICogCisgICAgICogQHJldHVybiBDdXJzb3Igb3ZlciBhbGwgbm90ZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoQWxsTm90ZXMoKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5xdWVyeShEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsIEtFWV9USVRMRSwKKyAgICAgICAgICAgICAgICBLRVlfQk9EWX0sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBwb3NpdGlvbmVkIGF0IHRoZSBub3RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byByZXRyaWV2ZQorICAgICAqIEByZXR1cm4gQ3Vyc29yIHBvc2l0aW9uZWQgdG8gbWF0Y2hpbmcgbm90ZSwgaWYgZm91bmQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiBub3RlIGNvdWxkIG5vdCBiZSBmb3VuZC9yZXRyaWV2ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoTm90ZShsb25nIHJvd0lkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKworICAgICAgICBDdXJzb3IgbUN1cnNvciA9CisKKyAgICAgICAgICAgIG1EYi5xdWVyeSh0cnVlLCBEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsCisgICAgICAgICAgICAgICAgICAgIEtFWV9USVRMRSwgS0VZX0JPRFl9LCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGlmIChtQ3Vyc29yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUN1cnNvcjsKKworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgbm90ZSB1c2luZyB0aGUgZGV0YWlscyBwcm92aWRlZC4gVGhlIG5vdGUgdG8gYmUgdXBkYXRlZCBpcworICAgICAqIHNwZWNpZmllZCB1c2luZyB0aGUgcm93SWQsIGFuZCBpdCBpcyBhbHRlcmVkIHRvIHVzZSB0aGUgdGl0bGUgYW5kIGJvZHkKKyAgICAgKiB2YWx1ZXMgcGFzc2VkIGluCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHRpdGxlIHZhbHVlIHRvIHNldCBub3RlIHRpdGxlIHRvCisgICAgICogQHBhcmFtIGJvZHkgdmFsdWUgdG8gc2V0IG5vdGUgYm9keSB0bworICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbm90ZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZU5vdGUobG9uZyByb3dJZCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGFyZ3MgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBhcmdzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIudXBkYXRlKERBVEFCQVNFX1RBQkxFLCBhcmdzLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9BbmRyb2lkLm1rIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViYzU3NwotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKKyMgT25seSBidWlsZCBhcGsgaWYgdGhpcyBwYWNrYWdlIGlzIGFkZGVkIHRvIENVU1RPTV9NT0RMVUVTIGluIGJ1aWxkc3BlYy5taworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworIyBPbmx5IGNvbXBpbGUgc291cmNlIGphdmEgZmlsZXMgaW4gdGhpcyBhcGsuCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpCisKK0xPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBOb3RlcGFkdjFTb2x1dGlvbgorCisjIE1ha2UgdGhlIGFwcCBidWlsZCBhZ2FpbnN0IHRoZSBjdXJyZW50IFNESworTE9DQUxfU0RLX1ZFUlNJT04gOj0gY3VycmVudAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkwMjNmZQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDEiPgorICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY29uIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLk5vdGVwYWR2MSIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisgICAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvZHJhd2FibGUvaWNvbi5wbmcgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0ZTM2MDEKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVwYWRfbGlzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2xheW91dC9ub3RlcGFkX2xpc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjOGRiYWIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2xheW91dC9ub3RlcGFkX2xpc3QueG1sCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCisJPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkBpZC9hbmRyb2lkOmxpc3QiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CisgIAk8VGV4dFZpZXcgYW5kcm9pZDppZD0iQGlkL2FuZHJvaWQ6ZW1wdHkiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fbm90ZXMiLz4KKyAgICAgICAgCis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDA1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90ZXh0MSIKKyAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjViYzYyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5Ob3RlcGFkIHYxPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19ub3RlcyI+Tm8gTm90ZXMgWWV0PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2luc2VydCI+QWRkIEl0ZW08L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVwYWR2MS5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVwYWR2MS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExODE5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXBhZHYxLmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDE7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5MaXN0QWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNpbXBsZUN1cnNvckFkYXB0ZXI7CisKK3B1YmxpYyBjbGFzcyBOb3RlcGFkdjEgZXh0ZW5kcyBMaXN0QWN0aXZpdHkgeworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU0VSVF9JRCA9IE1lbnUuRklSU1Q7CisJCisJcHJpdmF0ZSBpbnQgbU5vdGVOdW1iZXIgPSAxOworCXByaXZhdGUgTm90ZXNEYkFkYXB0ZXIgbURiSGVscGVyOworICAgIAorICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgYWN0aXZpdHkgaXMgZmlyc3QgY3JlYXRlZC4gKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm5vdGVwYWRfbGlzdCk7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBOb3Rlc0RiQWRhcHRlcih0aGlzKTsKKyAgICAgICAgbURiSGVscGVyLm9wZW4oKTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlvbnNNZW51KE1lbnUgbWVudSkgeworICAgIAlib29sZWFuIHJlc3VsdCA9IHN1cGVyLm9uQ3JlYXRlT3B0aW9uc01lbnUobWVudSk7CisgICAgICAgIG1lbnUuYWRkKDAsIElOU0VSVF9JRCwgMCwgUi5zdHJpbmcubWVudV9pbnNlcnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uT3B0aW9uc0l0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7CisgICAgCXN3aXRjaCAoaXRlbS5nZXRJdGVtSWQoKSkgeworICAgICAgICBjYXNlIElOU0VSVF9JRDoKKyAgICAgICAgICAgIGNyZWF0ZU5vdGUoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5vbk9wdGlvbnNJdGVtU2VsZWN0ZWQoaXRlbSk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBjcmVhdGVOb3RlKCkgeworICAgICAgICBTdHJpbmcgbm90ZU5hbWUgPSAiTm90ZSAiICsgbU5vdGVOdW1iZXIrKzsKKyAgICAgICAgbURiSGVscGVyLmNyZWF0ZU5vdGUobm90ZU5hbWUsICIiKTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGZpbGxEYXRhKCkgeworICAgICAgICAvLyBHZXQgYWxsIG9mIHRoZSBub3RlcyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgY3JlYXRlIHRoZSBpdGVtIGxpc3QKKyAgICAgICAgQ3Vyc29yIGMgPSBtRGJIZWxwZXIuZmV0Y2hBbGxOb3RlcygpOworICAgICAgICBzdGFydE1hbmFnaW5nQ3Vyc29yKGMpOworCisgICAgICAgIFN0cmluZ1tdIGZyb20gPSBuZXcgU3RyaW5nW10geyBOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUgfTsKKyAgICAgICAgaW50W10gdG8gPSBuZXcgaW50W10geyBSLmlkLnRleHQxIH07CisgICAgICAgIAorICAgICAgICAvLyBOb3cgY3JlYXRlIGFuIGFycmF5IGFkYXB0ZXIgYW5kIHNldCBpdCB0byBkaXNwbGF5IHVzaW5nIG91ciByb3cKKyAgICAgICAgU2ltcGxlQ3Vyc29yQWRhcHRlciBub3RlcyA9CisgICAgICAgICAgICBuZXcgU2ltcGxlQ3Vyc29yQWRhcHRlcih0aGlzLCBSLmxheW91dC5ub3Rlc19yb3csIGMsIGZyb20sIHRvKTsKKyAgICAgICAgc2V0TGlzdEFkYXB0ZXIobm90ZXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3Rlc0RiQWRhcHRlci5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVzRGJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTMyOTVkNgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3Rlc0RiQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDE7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVPcGVuSGVscGVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKKy8qKgorICogU2ltcGxlIG5vdGVzIGRhdGFiYXNlIGFjY2VzcyBoZWxwZXIgY2xhc3MuIERlZmluZXMgdGhlIGJhc2ljIENSVUQgb3BlcmF0aW9ucworICogZm9yIHRoZSBub3RlcGFkIGV4YW1wbGUsIGFuZCBnaXZlcyB0aGUgYWJpbGl0eSB0byBsaXN0IGFsbCBub3RlcyBhcyB3ZWxsIGFzCisgKiByZXRyaWV2ZSBvciBtb2RpZnkgYSBzcGVjaWZpYyBub3RlLgorICogCisgKiBUaGlzIGhhcyBiZWVuIGltcHJvdmVkIGZyb20gdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhpcyB0dXRvcmlhbCB0aHJvdWdoIHRoZQorICogYWRkaXRpb24gb2YgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBhbHNvIHVzaW5nIHJldHVybmluZyBhIEN1cnNvciBpbnN0ZWFkCisgKiBvZiB1c2luZyBhIGNvbGxlY3Rpb24gb2YgaW5uZXIgY2xhc3NlcyAod2hpY2ggaXMgbGVzcyBzY2FsYWJsZSBhbmQgbm90CisgKiByZWNvbW1lbmRlZCkuCisgKi8KK3B1YmxpYyBjbGFzcyBOb3Rlc0RiQWRhcHRlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVElUTEUgPSAidGl0bGUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9CT0RZID0gImJvZHkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ST1dJRCA9ICJfaWQiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOb3Rlc0RiQWRhcHRlciI7CisgICAgcHJpdmF0ZSBEYXRhYmFzZUhlbHBlciBtRGJIZWxwZXI7CisgICAgcHJpdmF0ZSBTUUxpdGVEYXRhYmFzZSBtRGI7CisKKyAgICAvKioKKyAgICAgKiBEYXRhYmFzZSBjcmVhdGlvbiBzcWwgc3RhdGVtZW50CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX0NSRUFURSA9CisgICAgICAgICJjcmVhdGUgdGFibGUgbm90ZXMgKF9pZCBpbnRlZ2VyIHByaW1hcnkga2V5IGF1dG9pbmNyZW1lbnQsICIKKyAgICAgICAgKyAidGl0bGUgdGV4dCBub3QgbnVsbCwgYm9keSB0ZXh0IG5vdCBudWxsKTsiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX05BTUUgPSAiZGF0YSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX1RBQkxFID0gIm5vdGVzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VfVkVSU0lPTiA9IDI7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUN0eDsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERhdGFiYXNlSGVscGVyIGV4dGVuZHMgU1FMaXRlT3BlbkhlbHBlciB7CisKKyAgICAgICAgRGF0YWJhc2VIZWxwZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBEQVRBQkFTRV9OQU1FLCBudWxsLCBEQVRBQkFTRV9WRVJTSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShTUUxpdGVEYXRhYmFzZSBkYikgeworCisgICAgICAgICAgICBkYi5leGVjU1FMKERBVEFCQVNFX0NSRUFURSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25VcGdyYWRlKFNRTGl0ZURhdGFiYXNlIGRiLCBpbnQgb2xkVmVyc2lvbiwgaW50IG5ld1ZlcnNpb24pIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIlVwZ3JhZGluZyBkYXRhYmFzZSBmcm9tIHZlcnNpb24gIiArIG9sZFZlcnNpb24gKyAiIHRvICIKKyAgICAgICAgICAgICAgICAgICAgKyBuZXdWZXJzaW9uICsgIiwgd2hpY2ggd2lsbCBkZXN0cm95IGFsbCBvbGQgZGF0YSIpOworICAgICAgICAgICAgZGIuZXhlY1NRTCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgbm90ZXMiKTsKKyAgICAgICAgICAgIG9uQ3JlYXRlKGRiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIC0gdGFrZXMgdGhlIGNvbnRleHQgdG8gYWxsb3cgdGhlIGRhdGFiYXNlIHRvIGJlCisgICAgICogb3BlbmVkL2NyZWF0ZWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gY3R4IHRoZSBDb250ZXh0IHdpdGhpbiB3aGljaCB0byB3b3JrCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyKENvbnRleHQgY3R4KSB7CisgICAgICAgIHRoaXMubUN0eCA9IGN0eDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPcGVuIHRoZSBub3RlcyBkYXRhYmFzZS4gSWYgaXQgY2Fubm90IGJlIG9wZW5lZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldworICAgICAqIGluc3RhbmNlIG9mIHRoZSBkYXRhYmFzZS4gSWYgaXQgY2Fubm90IGJlIGNyZWF0ZWQsIHRocm93IGFuIGV4Y2VwdGlvbiB0bworICAgICAqIHNpZ25hbCB0aGUgZmFpbHVyZQorICAgICAqIAorICAgICAqIEByZXR1cm4gdGhpcyAoc2VsZiByZWZlcmVuY2UsIGFsbG93aW5nIHRoaXMgdG8gYmUgY2hhaW5lZCBpbiBhbgorICAgICAqICAgICAgICAgaW5pdGlhbGl6YXRpb24gY2FsbCkKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiB0aGUgZGF0YWJhc2UgY291bGQgYmUgbmVpdGhlciBvcGVuZWQgb3IgY3JlYXRlZAorICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlciBvcGVuKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBEYXRhYmFzZUhlbHBlcihtQ3R4KTsKKyAgICAgICAgbURiID0gbURiSGVscGVyLmdldFdyaXRhYmxlRGF0YWJhc2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG1EYkhlbHBlci5jbG9zZSgpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IG5vdGUgdXNpbmcgdGhlIHRpdGxlIGFuZCBib2R5IHByb3ZpZGVkLiBJZiB0aGUgbm90ZSBpcworICAgICAqIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIHJldHVybiB0aGUgbmV3IHJvd0lkIGZvciB0aGF0IG5vdGUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgKiBhIC0xIHRvIGluZGljYXRlIGZhaWx1cmUuCisgICAgICogCisgICAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgbm90ZQorICAgICAqIEBwYXJhbSBib2R5IHRoZSBib2R5IG9mIHRoZSBub3RlCisgICAgICogQHJldHVybiByb3dJZCBvciAtMSBpZiBmYWlsZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBjcmVhdGVOb3RlKFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBpbml0aWFsVmFsdWVzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLmluc2VydChEQVRBQkFTRV9UQUJMRSwgbnVsbCwgaW5pdGlhbFZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVsZXRlIHRoZSBub3RlIHdpdGggdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gZGVsZXRlCisgICAgICogQHJldHVybiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGRlbGV0ZU5vdGUobG9uZyByb3dJZCkgeworCisgICAgICAgIHJldHVybiBtRGIuZGVsZXRlKERBVEFCQVNFX1RBQkxFLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBvdmVyIHRoZSBsaXN0IG9mIGFsbCBub3RlcyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBvdmVyIGFsbCBub3RlcworICAgICAqLworICAgIHB1YmxpYyBDdXJzb3IgZmV0Y2hBbGxOb3RlcygpIHsKKworICAgICAgICByZXR1cm4gbURiLnF1ZXJ5KERBVEFCQVNFX1RBQkxFLCBuZXcgU3RyaW5nW10ge0tFWV9ST1dJRCwgS0VZX1RJVExFLAorICAgICAgICAgICAgICAgIEtFWV9CT0RZfSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIHBvc2l0aW9uZWQgYXQgdGhlIG5vdGUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHJldHJpZXZlCisgICAgICogQHJldHVybiBDdXJzb3IgcG9zaXRpb25lZCB0byBtYXRjaGluZyBub3RlLCBpZiBmb3VuZAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIG5vdGUgY291bGQgbm90IGJlIGZvdW5kL3JldHJpZXZlZAorICAgICAqLworICAgIHB1YmxpYyBDdXJzb3IgZmV0Y2hOb3RlKGxvbmcgcm93SWQpIHRocm93cyBTUUxFeGNlcHRpb24geworCisgICAgICAgIEN1cnNvciBtQ3Vyc29yID0KKworICAgICAgICAgICAgbURiLnF1ZXJ5KHRydWUsIERBVEFCQVNFX1RBQkxFLCBuZXcgU3RyaW5nW10ge0tFWV9ST1dJRCwKKyAgICAgICAgICAgICAgICAgICAgS0VZX1RJVExFLCBLRVlfQk9EWX0sIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsLAorICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgaWYgKG1DdXJzb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUN1cnNvci5tb3ZlVG9GaXJzdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQ3Vyc29yOworCisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBub3RlIHVzaW5nIHRoZSBkZXRhaWxzIHByb3ZpZGVkLiBUaGUgbm90ZSB0byBiZSB1cGRhdGVkIGlzCisgICAgICogc3BlY2lmaWVkIHVzaW5nIHRoZSByb3dJZCwgYW5kIGl0IGlzIGFsdGVyZWQgdG8gdXNlIHRoZSB0aXRsZSBhbmQgYm9keQorICAgICAqIHZhbHVlcyBwYXNzZWQgaW4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gdGl0bGUgdmFsdWUgdG8gc2V0IG5vdGUgdGl0bGUgdG8KKyAgICAgKiBAcGFyYW0gYm9keSB2YWx1ZSB0byBzZXQgbm90ZSBib2R5IHRvCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBub3RlIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlTm90ZShsb25nIHJvd0lkLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgYXJncyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBhcmdzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi51cGRhdGUoREFUQUJBU0VfVEFCTEUsIGFyZ3MsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9BbmRyb2lkLm1rIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YTJiNDcKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL0FuZHJvaWQubWsKQEAgLTAsMCArMSwzMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworIyBPbmx5IGJ1aWxkIGFwayBpZiB0aGlzIHBhY2thZ2UgaXMgYWRkZWQgdG8gQ1VTVE9NX01PRExVRVMgaW4gYnVpbGRzcGVjLm1rCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCisjIE9ubHkgY29tcGlsZSBzb3VyY2UgamF2YSBmaWxlcyBpbiB0aGlzIGFway4KK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IE5vdGVwYWR2MgorCisjIE1ha2UgdGhlIGFwcCBidWlsZCBhZ2FpbnN0IHRoZSBjdXJyZW50IFNESworTE9DQUxfU0RLX1ZFUlNJT04gOj0gY3VycmVudAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzhmYjJhCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDIiPgorICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY29uIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLk5vdGVwYWR2MiIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisgICAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2RyYXdhYmxlL2ljb24ucG5nIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvZHJhd2FibGUvaWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjRlMzYwMQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2RyYXdhYmxlL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2xheW91dC9ub3RlX2VkaXQueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGFmOTc1NAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2xheW91dC9ub3RlX2VkaXQueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKwkKKwk8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworCQk8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy90aXRsZSIgLz4KKwkJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiIAorCQkgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KKwk8L0xpbmVhckxheW91dD4KKworCTxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ib2R5IiAvPgorCTxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2JvZHkiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisJCWFuZHJvaWQ6c2Nyb2xsYmFycz0idmVydGljYWwiIC8+CisJCisJPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NvbmZpcm0iIAorCSAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbmZpcm0iCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorCis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFlMDQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgCisgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDpsaXN0IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgorICAJPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDplbXB0eSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fbm90ZXMiLz4KKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjhhNDFiCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dDEiIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjcwYzNmOAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5Ob3RlcGFkIHYyPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19ub3RlcyI+Tm8gTm90ZXMgWWV0PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2luc2VydCI+QWRkIE5vdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIj5EZWxldGUgTm90ZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGUiPlRpdGxlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJib2R5Ij5Cb2R5PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maXJtIj5Db25maXJtPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0X25vdGUiPkVkaXQgTm90ZTwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVwYWR2Mi5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3RlcGFkdjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDM4MTgwCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3RlcGFkdjIuamF2YQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDI7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5MaXN0QWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudS5Db250ZXh0TWVudUluZm87CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2ltcGxlQ3Vyc29yQWRhcHRlcjsKKworcHVibGljIGNsYXNzIE5vdGVwYWR2MiBleHRlbmRzIExpc3RBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElWSVRZX0NSRUFURT0wOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJVklUWV9FRElUPTE7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOU0VSVF9JRCA9IE1lbnUuRklSU1Q7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFTEVURV9JRCA9IE1lbnUuRklSU1QgKyAxOworCisgICAgcHJpdmF0ZSBOb3Rlc0RiQWRhcHRlciBtRGJIZWxwZXI7CisgICAgcHJpdmF0ZSBDdXJzb3IgbU5vdGVzQ3Vyc29yOworICAgIAorICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgYWN0aXZpdHkgaXMgZmlyc3QgY3JlYXRlZC4gKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm5vdGVzX2xpc3QpOworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgTm90ZXNEYkFkYXB0ZXIodGhpcyk7CisgICAgICAgIG1EYkhlbHBlci5vcGVuKCk7CisgICAgICAgIGZpbGxEYXRhKCk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCBmaWxsRGF0YSgpIHsKKyAgICAgICAgLy8gR2V0IGFsbCBvZiB0aGUgcm93cyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgY3JlYXRlIHRoZSBpdGVtIGxpc3QKKyAgICAgICAgbU5vdGVzQ3Vyc29yID0gbURiSGVscGVyLmZldGNoQWxsTm90ZXMoKTsKKyAgICAgICAgc3RhcnRNYW5hZ2luZ0N1cnNvcihtTm90ZXNDdXJzb3IpOworICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRvIHNwZWNpZnkgdGhlIGZpZWxkcyB3ZSB3YW50IHRvIGRpc3BsYXkgaW4gdGhlIGxpc3QgKG9ubHkgVElUTEUpCisgICAgICAgIFN0cmluZ1tdIGZyb20gPSBuZXcgU3RyaW5nW117Tm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFfTsKKyAgICAgICAgCisgICAgICAgIC8vIGFuZCBhbiBhcnJheSBvZiB0aGUgZmllbGRzIHdlIHdhbnQgdG8gYmluZCB0aG9zZSBmaWVsZHMgdG8gKGluIHRoaXMgY2FzZSBqdXN0IHRleHQxKQorICAgICAgICBpbnRbXSB0byA9IG5ldyBpbnRbXXtSLmlkLnRleHQxfTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjcmVhdGUgYSBzaW1wbGUgY3Vyc29yIGFkYXB0ZXIgYW5kIHNldCBpdCB0byBkaXNwbGF5CisgICAgICAgIFNpbXBsZUN1cnNvckFkYXB0ZXIgbm90ZXMgPSAKKyAgICAgICAgCSAgICBuZXcgU2ltcGxlQ3Vyc29yQWRhcHRlcih0aGlzLCBSLmxheW91dC5ub3Rlc19yb3csIG1Ob3Rlc0N1cnNvciwgZnJvbSwgdG8pOworICAgICAgICBzZXRMaXN0QWRhcHRlcihub3Rlcyk7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUoTWVudSBtZW51KSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlT3B0aW9uc01lbnUobWVudSk7CisgICAgICAgIG1lbnUuYWRkKDAsIElOU0VSVF9JRCwwLCBSLnN0cmluZy5tZW51X2luc2VydCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1TZWxlY3RlZChpbnQgZmVhdHVyZUlkLCBNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgIGNhc2UgSU5TRVJUX0lEOgorICAgICAgICAgICAgY3JlYXRlTm90ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdXBlci5vbk1lbnVJdGVtU2VsZWN0ZWQoZmVhdHVyZUlkLCBpdGVtKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBvbkNyZWF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51IG1lbnUsIFZpZXcgdiwKKwkJCUNvbnRleHRNZW51SW5mbyBtZW51SW5mbykgeworCQlzdXBlci5vbkNyZWF0ZUNvbnRleHRNZW51KG1lbnUsIHYsIG1lbnVJbmZvKTsKKwkJCisgICAgICAgIC8vIFRPRE86IGZpbGwgaW4gcmVzdCBvZiBtZXRob2QKKwl9CisKKyAgICBAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBvbkNvbnRleHRJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgeworCQlyZXR1cm4gc3VwZXIub25Db250ZXh0SXRlbVNlbGVjdGVkKGl0ZW0pOworCQkKKyAgICAgICAgLy8gVE9ETzogZmlsbCBpbiByZXN0IG9mIG1ldGhvZAorCX0KKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVOb3RlKCkgeworICAgICAgICAvLyBUT0RPOiBmaWxsIGluIGltcGxlbWVudGF0aW9uCisKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25MaXN0SXRlbUNsaWNrKExpc3RWaWV3IGwsIFZpZXcgdiwgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgIHN1cGVyLm9uTGlzdEl0ZW1DbGljayhsLCB2LCBwb3NpdGlvbiwgaWQpOworCisgICAgICAgIC8vIFRPRE86IGZpbGwgaW4gcmVzdCBvZiBtZXRob2QKKyAgICAgICAgCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHN1cGVyLm9uQWN0aXZpdHlSZXN1bHQocmVxdWVzdENvZGUsIHJlc3VsdENvZGUsIGludGVudCk7CisgICAgICAgIAorICAgICAgICAvLyBUT0RPOiBmaWxsIGluIHJlc3Qgb2YgbWV0aG9kCisgICAgICAgIAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3Rlc0RiQWRhcHRlci5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3Rlc0RiQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwOTk0YWUKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVzRGJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuU1FMRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZU9wZW5IZWxwZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworLyoqCisgKiBTaW1wbGUgbm90ZXMgZGF0YWJhc2UgYWNjZXNzIGhlbHBlciBjbGFzcy4gRGVmaW5lcyB0aGUgYmFzaWMgQ1JVRCBvcGVyYXRpb25zCisgKiBmb3IgdGhlIG5vdGVwYWQgZXhhbXBsZSwgYW5kIGdpdmVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIG5vdGVzIGFzIHdlbGwgYXMKKyAqIHJldHJpZXZlIG9yIG1vZGlmeSBhIHNwZWNpZmljIG5vdGUuCisgKiAKKyAqIFRoaXMgaGFzIGJlZW4gaW1wcm92ZWQgZnJvbSB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGlzIHR1dG9yaWFsIHRocm91Z2ggdGhlCisgKiBhZGRpdGlvbiBvZiBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGFsc28gdXNpbmcgcmV0dXJuaW5nIGEgQ3Vyc29yIGluc3RlYWQKKyAqIG9mIHVzaW5nIGEgY29sbGVjdGlvbiBvZiBpbm5lciBjbGFzc2VzICh3aGljaCBpcyBsZXNzIHNjYWxhYmxlIGFuZCBub3QKKyAqIHJlY29tbWVuZGVkKS4KKyAqLworcHVibGljIGNsYXNzIE5vdGVzRGJBZGFwdGVyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USVRMRSA9ICJ0aXRsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0JPRFkgPSAiYm9keSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1JPV0lEID0gIl9pZCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5vdGVzRGJBZGFwdGVyIjsKKyAgICBwcml2YXRlIERhdGFiYXNlSGVscGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIFNRTGl0ZURhdGFiYXNlIG1EYjsKKworICAgIC8qKgorICAgICAqIERhdGFiYXNlIGNyZWF0aW9uIHNxbCBzdGF0ZW1lbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfQ1JFQVRFID0KKyAgICAgICAgImNyZWF0ZSB0YWJsZSBub3RlcyAoX2lkIGludGVnZXIgcHJpbWFyeSBrZXkgYXV0b2luY3JlbWVudCwgIgorICAgICAgICArICJ0aXRsZSB0ZXh0IG5vdCBudWxsLCBib2R5IHRleHQgbm90IG51bGwpOyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfTkFNRSA9ICJkYXRhIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfVEFCTEUgPSAibm90ZXMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRV9WRVJTSU9OID0gMjsKKworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ3R4OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0YWJhc2VIZWxwZXIgZXh0ZW5kcyBTUUxpdGVPcGVuSGVscGVyIHsKKworICAgICAgICBEYXRhYmFzZUhlbHBlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIERBVEFCQVNFX05BTUUsIG51bGwsIERBVEFCQVNFX1ZFUlNJT04pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKFNRTGl0ZURhdGFiYXNlIGRiKSB7CisKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoREFUQUJBU0VfQ1JFQVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblVwZ3JhZGUoU1FMaXRlRGF0YWJhc2UgZGIsIGludCBvbGRWZXJzaW9uLCBpbnQgbmV3VmVyc2lvbikgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiVXBncmFkaW5nIGRhdGFiYXNlIGZyb20gdmVyc2lvbiAiICsgb2xkVmVyc2lvbiArICIgdG8gIgorICAgICAgICAgICAgICAgICAgICArIG5ld1ZlcnNpb24gKyAiLCB3aGljaCB3aWxsIGRlc3Ryb3kgYWxsIG9sZCBkYXRhIik7CisgICAgICAgICAgICBkYi5leGVjU1FMKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBub3RlcyIpOworICAgICAgICAgICAgb25DcmVhdGUoZGIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgLSB0YWtlcyB0aGUgY29udGV4dCB0byBhbGxvdyB0aGUgZGF0YWJhc2UgdG8gYmUKKyAgICAgKiBvcGVuZWQvY3JlYXRlZAorICAgICAqIAorICAgICAqIEBwYXJhbSBjdHggdGhlIENvbnRleHQgd2l0aGluIHdoaWNoIHRvIHdvcmsKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgdGhpcy5tQ3R4ID0gY3R4OworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW4gdGhlIG5vdGVzIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgb3BlbmVkLCB0cnkgdG8gY3JlYXRlIGEgbmV3CisgICAgICogaW5zdGFuY2Ugb2YgdGhlIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgY3JlYXRlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIHRvCisgICAgICogc2lnbmFsIHRoZSBmYWlsdXJlCisgICAgICogCisgICAgICogQHJldHVybiB0aGlzIChzZWxmIHJlZmVyZW5jZSwgYWxsb3dpbmcgdGhpcyB0byBiZSBjaGFpbmVkIGluIGFuCisgICAgICogICAgICAgICBpbml0aWFsaXphdGlvbiBjYWxsKQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIHRoZSBkYXRhYmFzZSBjb3VsZCBiZSBuZWl0aGVyIG9wZW5lZCBvciBjcmVhdGVkCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyIG9wZW4oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IERhdGFiYXNlSGVscGVyKG1DdHgpOworICAgICAgICBtRGIgPSBtRGJIZWxwZXIuZ2V0V3JpdGFibGVEYXRhYmFzZSgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgbURiSGVscGVyLmNsb3NlKCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbm90ZSB1c2luZyB0aGUgdGl0bGUgYW5kIGJvZHkgcHJvdmlkZWQuIElmIHRoZSBub3RlIGlzCisgICAgICogc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgcmV0dXJuIHRoZSBuZXcgcm93SWQgZm9yIHRoYXQgbm90ZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAqIGEgLTEgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBub3RlCisgICAgICogQHBhcmFtIGJvZHkgdGhlIGJvZHkgb2YgdGhlIG5vdGUKKyAgICAgKiBAcmV0dXJuIHJvd0lkIG9yIC0xIGlmIGZhaWxlZAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGNyZWF0ZU5vdGUoU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGluaXRpYWxWYWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIuaW5zZXJ0KERBVEFCQVNFX1RBQkxFLCBudWxsLCBpbml0aWFsVmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgdGhlIG5vdGUgd2l0aCB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byBkZWxldGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlTm90ZShsb25nIHJvd0lkKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5kZWxldGUoREFUQUJBU0VfVEFCTEUsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIG92ZXIgdGhlIGxpc3Qgb2YgYWxsIG5vdGVzIGluIHRoZSBkYXRhYmFzZQorICAgICAqIAorICAgICAqIEByZXR1cm4gQ3Vyc29yIG92ZXIgYWxsIG5vdGVzCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaEFsbE5vdGVzKCkgeworCisgICAgICAgIHJldHVybiBtRGIucXVlcnkoREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELCBLRVlfVElUTEUsCisgICAgICAgICAgICAgICAgS0VZX0JPRFl9LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3IgcG9zaXRpb25lZCBhdCB0aGUgbm90ZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBwb3NpdGlvbmVkIHRvIG1hdGNoaW5nIG5vdGUsIGlmIGZvdW5kCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgbm90ZSBjb3VsZCBub3QgYmUgZm91bmQvcmV0cmlldmVkCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaE5vdGUobG9uZyByb3dJZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisKKyAgICAgICAgQ3Vyc29yIG1DdXJzb3IgPQorCisgICAgICAgICAgICBtRGIucXVlcnkodHJ1ZSwgREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELAorICAgICAgICAgICAgICAgICAgICBLRVlfVElUTEUsIEtFWV9CT0RZfSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBpZiAobUN1cnNvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ3Vyc29yLm1vdmVUb0ZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DdXJzb3I7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIG5vdGUgdXNpbmcgdGhlIGRldGFpbHMgcHJvdmlkZWQuIFRoZSBub3RlIHRvIGJlIHVwZGF0ZWQgaXMKKyAgICAgKiBzcGVjaWZpZWQgdXNpbmcgdGhlIHJvd0lkLCBhbmQgaXQgaXMgYWx0ZXJlZCB0byB1c2UgdGhlIHRpdGxlIGFuZCBib2R5CisgICAgICogdmFsdWVzIHBhc3NlZCBpbgorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSB0aXRsZSB2YWx1ZSB0byBzZXQgbm90ZSB0aXRsZSB0bworICAgICAqIEBwYXJhbSBib2R5IHZhbHVlIHRvIHNldCBub3RlIGJvZHkgdG8KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vdGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVOb3RlKGxvbmcgcm93SWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBhcmdzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLnVwZGF0ZShEQVRBQkFTRV9UQUJMRSwgYXJncywgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vQW5kcm9pZC5tayBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTYxYTMKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vQW5kcm9pZC5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCisjIE9ubHkgYnVpbGQgYXBrIGlmIHRoaXMgcGFja2FnZSBpcyBhZGRlZCB0byBDVVNUT01fTU9ETFVFUyBpbiBidWlsZHNwZWMubWsKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKKyMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgYXBrLgorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQorCitMT0NBTF9QQUNLQUdFX05BTUUgOj0gTm90ZXBhZHYyU29sdXRpb24KKworIyBNYWtlIHRoZSBhcHAgYnVpbGQgYWdhaW5zdCB0aGUgY3VycmVudCBTREsKK0xPQ0FMX1NES19WRVJTSU9OIDo9IGN1cnJlbnQKKworaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4NmE3NDEKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgcGFja2FnZT0iY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMiI+CisgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljb24iPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZXBhZHYyIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLk5vdGVFZGl0IiAvPgorICAgIDwvYXBwbGljYXRpb24+Cis8L21hbmlmZXN0PiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGUzNjAxCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3RlX2VkaXQueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZV9lZGl0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWY5NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZV9lZGl0LnhtbApAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKwlhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKwlhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CisJCisJPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKwkJPFRleHRWaWV3IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCQlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGl0bGUiIC8+CisJCTxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlIiAKKwkJICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCQkJYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+CisJPC9MaW5lYXJMYXlvdXQ+CisKKwk8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCQlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYm9keSIgLz4KKwk8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9ib2R5IiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKwkJYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorCQlhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIiAvPgorCQorCTxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9jb25maXJtIiAKKwkgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb25maXJtIgorCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKworPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YWUwNDcyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgIAorICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FuZHJvaWQ6bGlzdCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KKyAgCTxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FuZHJvaWQ6ZW1wdHkiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vX25vdGVzIi8+Cis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyOGE0MWIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQxIiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzBjM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXNvdXJjZXM+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+Tm90ZXBhZCB2Mjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fbm90ZXMiPk5vIE5vdGVzIFlldDwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9pbnNlcnQiPkFkZCBOb3RlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSI+RGVsZXRlIE5vdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlIj5UaXRsZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYm9keSI+Qm9keTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlybSI+Q29uZmlybTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWRpdF9ub3RlIj5FZGl0IE5vdGU8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVFZGl0LmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZUVkaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzlkY2NjCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVFZGl0LmphdmEKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDI7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKKworcHVibGljIGNsYXNzIE5vdGVFZGl0IGV4dGVuZHMgQWN0aXZpdHkgeworCisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtVGl0bGVUZXh0OworICAgIHByaXZhdGUgRWRpdFRleHQgbUJvZHlUZXh0OworICAgIHByaXZhdGUgTG9uZyBtUm93SWQ7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm5vdGVfZWRpdCk7CisKKyAgICAgICAgbVRpdGxlVGV4dCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQudGl0bGUpOworICAgICAgICBtQm9keVRleHQgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLmJvZHkpOworCisgICAgICAgIEJ1dHRvbiBjb25maXJtQnV0dG9uID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuY29uZmlybSk7CisKKyAgICAgICAgbVJvd0lkID0gbnVsbDsKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IGdldEludGVudCgpLmdldEV4dHJhcygpOworICAgICAgICBpZiAoZXh0cmFzICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IGV4dHJhcy5nZXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFKTsKKyAgICAgICAgICAgIFN0cmluZyBib2R5ID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSk7CisgICAgICAgICAgICBtUm93SWQgPSBleHRyYXMuZ2V0TG9uZyhOb3Rlc0RiQWRhcHRlci5LRVlfUk9XSUQpOworCisgICAgICAgICAgICBpZiAodGl0bGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1UaXRsZVRleHQuc2V0VGV4dCh0aXRsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYm9keSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUJvZHlUZXh0LnNldFRleHQoYm9keSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25maXJtQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7CisgICAgICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG5ldyBCdW5kbGUoKTsKKworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFLCBtVGl0bGVUZXh0LmdldFRleHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBidW5kbGUucHV0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZLCBtQm9keVRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGlmIChtUm93SWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBidW5kbGUucHV0TG9uZyhOb3Rlc0RiQWRhcHRlci5LRVlfUk9XSUQsIG1Sb3dJZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSW50ZW50IG1JbnRlbnQgPSBuZXcgSW50ZW50KCk7CisgICAgICAgICAgICAgICAgbUludGVudC5wdXRFeHRyYXMoYnVuZGxlKTsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQoUkVTVUxUX09LLCBtSW50ZW50KTsKKyAgICAgICAgICAgICAgICBmaW5pc2goKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZXBhZHYyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZXBhZHYyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzY1ODA2YgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3RlcGFkdjIuamF2YQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDI7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5MaXN0QWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudS5Db250ZXh0TWVudUluZm87CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2ltcGxlQ3Vyc29yQWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5BZGFwdGVyQ29udGV4dE1lbnVJbmZvOworCitwdWJsaWMgY2xhc3MgTm90ZXBhZHYyIGV4dGVuZHMgTGlzdEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfQ1JFQVRFPTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElWSVRZX0VESVQ9MTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlNFUlRfSUQgPSBNZW51LkZJUlNUOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUxFVEVfSUQgPSBNZW51LkZJUlNUICsgMTsKKworICAgIHByaXZhdGUgTm90ZXNEYkFkYXB0ZXIgbURiSGVscGVyOworICAgIHByaXZhdGUgQ3Vyc29yIG1Ob3Rlc0N1cnNvcjsKKworICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgYWN0aXZpdHkgaXMgZmlyc3QgY3JlYXRlZC4gKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm5vdGVzX2xpc3QpOworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgTm90ZXNEYkFkYXB0ZXIodGhpcyk7CisgICAgICAgIG1EYkhlbHBlci5vcGVuKCk7CisgICAgICAgIGZpbGxEYXRhKCk7CisgICAgICAgIHJlZ2lzdGVyRm9yQ29udGV4dE1lbnUoZ2V0TGlzdFZpZXcoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGZpbGxEYXRhKCkgeworICAgICAgICAvLyBHZXQgYWxsIG9mIHRoZSByb3dzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBjcmVhdGUgdGhlIGl0ZW0gbGlzdAorICAgICAgICBtTm90ZXNDdXJzb3IgPSBtRGJIZWxwZXIuZmV0Y2hBbGxOb3RlcygpOworICAgICAgICBzdGFydE1hbmFnaW5nQ3Vyc29yKG1Ob3Rlc0N1cnNvcik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRvIHNwZWNpZnkgdGhlIGZpZWxkcyB3ZSB3YW50IHRvIGRpc3BsYXkgaW4gdGhlIGxpc3QgKG9ubHkgVElUTEUpCisgICAgICAgIFN0cmluZ1tdIGZyb20gPSBuZXcgU3RyaW5nW117Tm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFfTsKKworICAgICAgICAvLyBhbmQgYW4gYXJyYXkgb2YgdGhlIGZpZWxkcyB3ZSB3YW50IHRvIGJpbmQgdGhvc2UgZmllbGRzIHRvIChpbiB0aGlzIGNhc2UganVzdCB0ZXh0MSkKKyAgICAgICAgaW50W10gdG8gPSBuZXcgaW50W117Ui5pZC50ZXh0MX07CisKKyAgICAgICAgLy8gTm93IGNyZWF0ZSBhIHNpbXBsZSBjdXJzb3IgYWRhcHRlciBhbmQgc2V0IGl0IHRvIGRpc3BsYXkKKyAgICAgICAgU2ltcGxlQ3Vyc29yQWRhcHRlciBub3RlcyA9IAorICAgICAgICAgICAgbmV3IFNpbXBsZUN1cnNvckFkYXB0ZXIodGhpcywgUi5sYXlvdXQubm90ZXNfcm93LCBtTm90ZXNDdXJzb3IsIGZyb20sIHRvKTsKKyAgICAgICAgc2V0TGlzdEFkYXB0ZXIobm90ZXMpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUoTWVudSBtZW51KSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlT3B0aW9uc01lbnUobWVudSk7CisgICAgICAgIG1lbnUuYWRkKDAsIElOU0VSVF9JRCwgMCwgUi5zdHJpbmcubWVudV9pbnNlcnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbk1lbnVJdGVtU2VsZWN0ZWQoaW50IGZlYXR1cmVJZCwgTWVudUl0ZW0gaXRlbSkgeworICAgICAgICBzd2l0Y2goaXRlbS5nZXRJdGVtSWQoKSkgeworICAgICAgICAgICAgY2FzZSBJTlNFUlRfSUQ6CisgICAgICAgICAgICAgICAgY3JlYXRlTm90ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uTWVudUl0ZW1TZWxlY3RlZChmZWF0dXJlSWQsIGl0ZW0pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUgbWVudSwgVmlldyB2LAorICAgICAgICAgICAgQ29udGV4dE1lbnVJbmZvIG1lbnVJbmZvKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlQ29udGV4dE1lbnUobWVudSwgdiwgbWVudUluZm8pOworICAgICAgICBtZW51LmFkZCgwLCBERUxFVEVfSUQsIDAsIFIuc3RyaW5nLm1lbnVfZGVsZXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbkNvbnRleHRJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgeworICAgICAgICBzd2l0Y2goaXRlbS5nZXRJdGVtSWQoKSkgeworICAgICAgICAgICAgY2FzZSBERUxFVEVfSUQ6CisgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHRNZW51SW5mbyBpbmZvID0gKEFkYXB0ZXJDb250ZXh0TWVudUluZm8pIGl0ZW0uZ2V0TWVudUluZm8oKTsKKyAgICAgICAgICAgICAgICBtRGJIZWxwZXIuZGVsZXRlTm90ZShpbmZvLmlkKTsKKyAgICAgICAgICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5vbkNvbnRleHRJdGVtU2VsZWN0ZWQoaXRlbSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU5vdGUoKSB7CisgICAgICAgIEludGVudCBpID0gbmV3IEludGVudCh0aGlzLCBOb3RlRWRpdC5jbGFzcyk7CisgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaSwgQUNUSVZJVFlfQ1JFQVRFKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkxpc3RJdGVtQ2xpY2soTGlzdFZpZXcgbCwgVmlldyB2LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgc3VwZXIub25MaXN0SXRlbUNsaWNrKGwsIHYsIHBvc2l0aW9uLCBpZCk7CisgICAgICAgIEN1cnNvciBjID0gbU5vdGVzQ3Vyc29yOworICAgICAgICBjLm1vdmVUb1Bvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgSW50ZW50IGkgPSBuZXcgSW50ZW50KHRoaXMsIE5vdGVFZGl0LmNsYXNzKTsKKyAgICAgICAgaS5wdXRFeHRyYShOb3Rlc0RiQWRhcHRlci5LRVlfUk9XSUQsIGlkKTsKKyAgICAgICAgaS5wdXRFeHRyYShOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUsIGMuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIGMuZ2V0Q29sdW1uSW5kZXhPclRocm93KE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSkpKTsKKyAgICAgICAgaS5wdXRFeHRyYShOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSwgYy5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgYy5nZXRDb2x1bW5JbmRleE9yVGhyb3coTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFkpKSk7CisgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaSwgQUNUSVZJVFlfRURJVCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHN1cGVyLm9uQWN0aXZpdHlSZXN1bHQocmVxdWVzdENvZGUsIHJlc3VsdENvZGUsIGludGVudCk7CisgICAgICAgIEJ1bmRsZSBleHRyYXMgPSBpbnRlbnQuZ2V0RXh0cmFzKCk7CisgICAgICAgIHN3aXRjaChyZXF1ZXN0Q29kZSkgeworICAgICAgICAgICAgY2FzZSBBQ1RJVklUWV9DUkVBVEU6CisgICAgICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUpOworICAgICAgICAgICAgICAgIFN0cmluZyBib2R5ID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSk7CisgICAgICAgICAgICAgICAgbURiSGVscGVyLmNyZWF0ZU5vdGUodGl0bGUsIGJvZHkpOworICAgICAgICAgICAgICAgIGZpbGxEYXRhKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFDVElWSVRZX0VESVQ6CisgICAgICAgICAgICAgICAgTG9uZyByb3dJZCA9IGV4dHJhcy5nZXRMb25nKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCk7CisgICAgICAgICAgICAgICAgaWYgKHJvd0lkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVkaXRUaXRsZSA9IGV4dHJhcy5nZXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVkaXRCb2R5ID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSk7CisgICAgICAgICAgICAgICAgICAgIG1EYkhlbHBlci51cGRhdGVOb3RlKHJvd0lkLCBlZGl0VGl0bGUsIGVkaXRCb2R5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3Rlc0RiQWRhcHRlci5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVzRGJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTA5OTRhZQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3Rlc0RiQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDI7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVPcGVuSGVscGVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKKy8qKgorICogU2ltcGxlIG5vdGVzIGRhdGFiYXNlIGFjY2VzcyBoZWxwZXIgY2xhc3MuIERlZmluZXMgdGhlIGJhc2ljIENSVUQgb3BlcmF0aW9ucworICogZm9yIHRoZSBub3RlcGFkIGV4YW1wbGUsIGFuZCBnaXZlcyB0aGUgYWJpbGl0eSB0byBsaXN0IGFsbCBub3RlcyBhcyB3ZWxsIGFzCisgKiByZXRyaWV2ZSBvciBtb2RpZnkgYSBzcGVjaWZpYyBub3RlLgorICogCisgKiBUaGlzIGhhcyBiZWVuIGltcHJvdmVkIGZyb20gdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhpcyB0dXRvcmlhbCB0aHJvdWdoIHRoZQorICogYWRkaXRpb24gb2YgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBhbHNvIHVzaW5nIHJldHVybmluZyBhIEN1cnNvciBpbnN0ZWFkCisgKiBvZiB1c2luZyBhIGNvbGxlY3Rpb24gb2YgaW5uZXIgY2xhc3NlcyAod2hpY2ggaXMgbGVzcyBzY2FsYWJsZSBhbmQgbm90CisgKiByZWNvbW1lbmRlZCkuCisgKi8KK3B1YmxpYyBjbGFzcyBOb3Rlc0RiQWRhcHRlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVElUTEUgPSAidGl0bGUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9CT0RZID0gImJvZHkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ST1dJRCA9ICJfaWQiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOb3Rlc0RiQWRhcHRlciI7CisgICAgcHJpdmF0ZSBEYXRhYmFzZUhlbHBlciBtRGJIZWxwZXI7CisgICAgcHJpdmF0ZSBTUUxpdGVEYXRhYmFzZSBtRGI7CisKKyAgICAvKioKKyAgICAgKiBEYXRhYmFzZSBjcmVhdGlvbiBzcWwgc3RhdGVtZW50CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX0NSRUFURSA9CisgICAgICAgICJjcmVhdGUgdGFibGUgbm90ZXMgKF9pZCBpbnRlZ2VyIHByaW1hcnkga2V5IGF1dG9pbmNyZW1lbnQsICIKKyAgICAgICAgKyAidGl0bGUgdGV4dCBub3QgbnVsbCwgYm9keSB0ZXh0IG5vdCBudWxsKTsiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX05BTUUgPSAiZGF0YSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX1RBQkxFID0gIm5vdGVzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VfVkVSU0lPTiA9IDI7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUN0eDsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERhdGFiYXNlSGVscGVyIGV4dGVuZHMgU1FMaXRlT3BlbkhlbHBlciB7CisKKyAgICAgICAgRGF0YWJhc2VIZWxwZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBEQVRBQkFTRV9OQU1FLCBudWxsLCBEQVRBQkFTRV9WRVJTSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShTUUxpdGVEYXRhYmFzZSBkYikgeworCisgICAgICAgICAgICBkYi5leGVjU1FMKERBVEFCQVNFX0NSRUFURSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25VcGdyYWRlKFNRTGl0ZURhdGFiYXNlIGRiLCBpbnQgb2xkVmVyc2lvbiwgaW50IG5ld1ZlcnNpb24pIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIlVwZ3JhZGluZyBkYXRhYmFzZSBmcm9tIHZlcnNpb24gIiArIG9sZFZlcnNpb24gKyAiIHRvICIKKyAgICAgICAgICAgICAgICAgICAgKyBuZXdWZXJzaW9uICsgIiwgd2hpY2ggd2lsbCBkZXN0cm95IGFsbCBvbGQgZGF0YSIpOworICAgICAgICAgICAgZGIuZXhlY1NRTCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgbm90ZXMiKTsKKyAgICAgICAgICAgIG9uQ3JlYXRlKGRiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIC0gdGFrZXMgdGhlIGNvbnRleHQgdG8gYWxsb3cgdGhlIGRhdGFiYXNlIHRvIGJlCisgICAgICogb3BlbmVkL2NyZWF0ZWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gY3R4IHRoZSBDb250ZXh0IHdpdGhpbiB3aGljaCB0byB3b3JrCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyKENvbnRleHQgY3R4KSB7CisgICAgICAgIHRoaXMubUN0eCA9IGN0eDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPcGVuIHRoZSBub3RlcyBkYXRhYmFzZS4gSWYgaXQgY2Fubm90IGJlIG9wZW5lZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldworICAgICAqIGluc3RhbmNlIG9mIHRoZSBkYXRhYmFzZS4gSWYgaXQgY2Fubm90IGJlIGNyZWF0ZWQsIHRocm93IGFuIGV4Y2VwdGlvbiB0bworICAgICAqIHNpZ25hbCB0aGUgZmFpbHVyZQorICAgICAqIAorICAgICAqIEByZXR1cm4gdGhpcyAoc2VsZiByZWZlcmVuY2UsIGFsbG93aW5nIHRoaXMgdG8gYmUgY2hhaW5lZCBpbiBhbgorICAgICAqICAgICAgICAgaW5pdGlhbGl6YXRpb24gY2FsbCkKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiB0aGUgZGF0YWJhc2UgY291bGQgYmUgbmVpdGhlciBvcGVuZWQgb3IgY3JlYXRlZAorICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlciBvcGVuKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBEYXRhYmFzZUhlbHBlcihtQ3R4KTsKKyAgICAgICAgbURiID0gbURiSGVscGVyLmdldFdyaXRhYmxlRGF0YWJhc2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG1EYkhlbHBlci5jbG9zZSgpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IG5vdGUgdXNpbmcgdGhlIHRpdGxlIGFuZCBib2R5IHByb3ZpZGVkLiBJZiB0aGUgbm90ZSBpcworICAgICAqIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIHJldHVybiB0aGUgbmV3IHJvd0lkIGZvciB0aGF0IG5vdGUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgKiBhIC0xIHRvIGluZGljYXRlIGZhaWx1cmUuCisgICAgICogCisgICAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgbm90ZQorICAgICAqIEBwYXJhbSBib2R5IHRoZSBib2R5IG9mIHRoZSBub3RlCisgICAgICogQHJldHVybiByb3dJZCBvciAtMSBpZiBmYWlsZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBjcmVhdGVOb3RlKFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBpbml0aWFsVmFsdWVzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLmluc2VydChEQVRBQkFTRV9UQUJMRSwgbnVsbCwgaW5pdGlhbFZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVsZXRlIHRoZSBub3RlIHdpdGggdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gZGVsZXRlCisgICAgICogQHJldHVybiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGRlbGV0ZU5vdGUobG9uZyByb3dJZCkgeworCisgICAgICAgIHJldHVybiBtRGIuZGVsZXRlKERBVEFCQVNFX1RBQkxFLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBvdmVyIHRoZSBsaXN0IG9mIGFsbCBub3RlcyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBvdmVyIGFsbCBub3RlcworICAgICAqLworICAgIHB1YmxpYyBDdXJzb3IgZmV0Y2hBbGxOb3RlcygpIHsKKworICAgICAgICByZXR1cm4gbURiLnF1ZXJ5KERBVEFCQVNFX1RBQkxFLCBuZXcgU3RyaW5nW10ge0tFWV9ST1dJRCwgS0VZX1RJVExFLAorICAgICAgICAgICAgICAgIEtFWV9CT0RZfSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIHBvc2l0aW9uZWQgYXQgdGhlIG5vdGUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHJldHJpZXZlCisgICAgICogQHJldHVybiBDdXJzb3IgcG9zaXRpb25lZCB0byBtYXRjaGluZyBub3RlLCBpZiBmb3VuZAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIG5vdGUgY291bGQgbm90IGJlIGZvdW5kL3JldHJpZXZlZAorICAgICAqLworICAgIHB1YmxpYyBDdXJzb3IgZmV0Y2hOb3RlKGxvbmcgcm93SWQpIHRocm93cyBTUUxFeGNlcHRpb24geworCisgICAgICAgIEN1cnNvciBtQ3Vyc29yID0KKworICAgICAgICAgICAgbURiLnF1ZXJ5KHRydWUsIERBVEFCQVNFX1RBQkxFLCBuZXcgU3RyaW5nW10ge0tFWV9ST1dJRCwKKyAgICAgICAgICAgICAgICAgICAgS0VZX1RJVExFLCBLRVlfQk9EWX0sIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsLAorICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgaWYgKG1DdXJzb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUN1cnNvci5tb3ZlVG9GaXJzdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQ3Vyc29yOworCisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBub3RlIHVzaW5nIHRoZSBkZXRhaWxzIHByb3ZpZGVkLiBUaGUgbm90ZSB0byBiZSB1cGRhdGVkIGlzCisgICAgICogc3BlY2lmaWVkIHVzaW5nIHRoZSByb3dJZCwgYW5kIGl0IGlzIGFsdGVyZWQgdG8gdXNlIHRoZSB0aXRsZSBhbmQgYm9keQorICAgICAqIHZhbHVlcyBwYXNzZWQgaW4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gdGl0bGUgdmFsdWUgdG8gc2V0IG5vdGUgdGl0bGUgdG8KKyAgICAgKiBAcGFyYW0gYm9keSB2YWx1ZSB0byBzZXQgbm90ZSBib2R5IHRvCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBub3RlIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlTm90ZShsb25nIHJvd0lkLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgYXJncyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBhcmdzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi51cGRhdGUoREFUQUJBU0VfVEFCTEUsIGFyZ3MsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9BbmRyb2lkLm1rIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjMxOWUKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL0FuZHJvaWQubWsKQEAgLTAsMCArMSwzMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworIyBPbmx5IGJ1aWxkIGFwayBpZiB0aGlzIHBhY2thZ2UgaXMgYWRkZWQgdG8gQ1VTVE9NX01PRExVRVMgaW4gYnVpbGRzcGVjLm1rCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCisjIE9ubHkgY29tcGlsZSBzb3VyY2UgamF2YSBmaWxlcyBpbiB0aGlzIGFway4KK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IE5vdGVwYWR2MworCisjIE1ha2UgdGhlIGFwcCBidWlsZCBhZ2FpbnN0IHRoZSBjdXJyZW50IFNESworTE9DQUxfU0RLX1ZFUlNJT04gOj0gY3VycmVudAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNmUxNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBwYWNrYWdlPSJjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzIj4KKyAgICA8YXBwbGljYXRpb24gYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNvbiI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5Ob3RlcGFkdjMiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZUVkaXQiIC8+CisgICAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2RyYXdhYmxlL2ljb24ucG5nIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvZHJhd2FibGUvaWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjRlMzYwMQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2RyYXdhYmxlL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2xheW91dC9ub3RlX2VkaXQueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGFmOTc1NAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2xheW91dC9ub3RlX2VkaXQueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKwkKKwk8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworCQk8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy90aXRsZSIgLz4KKwkJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiIAorCQkgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KKwk8L0xpbmVhckxheW91dD4KKworCTxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ib2R5IiAvPgorCTxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2JvZHkiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisJCWFuZHJvaWQ6c2Nyb2xsYmFycz0idmVydGljYWwiIC8+CisJCisJPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NvbmZpcm0iIAorCSAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbmZpcm0iCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorCis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFlMDQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgCisgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDpsaXN0IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgorICAJPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDplbXB0eSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fbm90ZXMiLz4KKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjhhNDFiCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dDEiIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWU2M2I4MwotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5Ob3RlcGFkIHYzPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19ub3RlcyI+Tm8gTm90ZXMgWWV0PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2luc2VydCI+QWRkIE5vdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIj5EZWxldGUgTm90ZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGUiPlRpdGxlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJib2R5Ij5Cb2R5PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maXJtIj5Db25maXJtPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0X25vdGUiPkVkaXQgTm90ZTwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVFZGl0LmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVFZGl0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGVlN2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZUVkaXQuamF2YQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMzsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworCitwdWJsaWMgY2xhc3MgTm90ZUVkaXQgZXh0ZW5kcyBBY3Rpdml0eSB7CisKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1UaXRsZVRleHQ7CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtQm9keVRleHQ7CisgICAgcHJpdmF0ZSBMb25nIG1Sb3dJZDsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZV9lZGl0KTsKKworICAgICAgICBtVGl0bGVUZXh0ID0gKEVkaXRUZXh0KSBmaW5kVmlld0J5SWQoUi5pZC50aXRsZSk7CisgICAgICAgIG1Cb2R5VGV4dCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQuYm9keSk7CisKKyAgICAgICAgQnV0dG9uIGNvbmZpcm1CdXR0b24gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5jb25maXJtKTsKKworICAgICAgICBtUm93SWQgPSBudWxsOworICAgICAgICBCdW5kbGUgZXh0cmFzID0gZ2V0SW50ZW50KCkuZ2V0RXh0cmFzKCk7CisgICAgICAgIGlmIChleHRyYXMgIT0gbnVsbCkgeworICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUpOworICAgICAgICAgICAgU3RyaW5nIGJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKTsKKyAgICAgICAgICAgIG1Sb3dJZCA9IGV4dHJhcy5nZXRMb25nKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCk7CisKKyAgICAgICAgICAgIGlmICh0aXRsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVRpdGxlVGV4dC5zZXRUZXh0KHRpdGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChib2R5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQm9keVRleHQuc2V0VGV4dChib2R5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbmZpcm1CdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKKyAgICAgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gbmV3IEJ1bmRsZSgpOworCisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUsIG1UaXRsZVRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFksIG1Cb2R5VGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1Sb3dJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRMb25nKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCwgbVJvd0lkKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBJbnRlbnQgbUludGVudCA9IG5ldyBJbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBtSW50ZW50LnB1dEV4dHJhcyhidW5kbGUpOworICAgICAgICAgICAgICAgIHNldFJlc3VsdChSRVNVTFRfT0ssIG1JbnRlbnQpOworICAgICAgICAgICAgICAgIGZpbmlzaCgpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXBhZHYzLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVwYWR2My5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBlZDhlZDYKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVwYWR2My5qYXZhCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMzsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVDdXJzb3JBZGFwdGVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm87CisKK3B1YmxpYyBjbGFzcyBOb3RlcGFkdjMgZXh0ZW5kcyBMaXN0QWN0aXZpdHkgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJVklUWV9DUkVBVEU9MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfRURJVD0xOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOU0VSVF9JRCA9IE1lbnUuRklSU1Q7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFTEVURV9JRCA9IE1lbnUuRklSU1QgKyAxOworCisgICAgcHJpdmF0ZSBOb3Rlc0RiQWRhcHRlciBtRGJIZWxwZXI7CisgICAgcHJpdmF0ZSBDdXJzb3IgbU5vdGVzQ3Vyc29yOworCisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZXNfbGlzdCk7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBOb3Rlc0RiQWRhcHRlcih0aGlzKTsKKyAgICAgICAgbURiSGVscGVyLm9wZW4oKTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgcmVnaXN0ZXJGb3JDb250ZXh0TWVudShnZXRMaXN0VmlldygpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZmlsbERhdGEoKSB7CisgICAgICAgIC8vIEdldCBhbGwgb2YgdGhlIHJvd3MgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSB0aGUgaXRlbSBsaXN0CisgICAgICAgIG1Ob3Rlc0N1cnNvciA9IG1EYkhlbHBlci5mZXRjaEFsbE5vdGVzKCk7CisgICAgICAgIHN0YXJ0TWFuYWdpbmdDdXJzb3IobU5vdGVzQ3Vyc29yKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdG8gc3BlY2lmeSB0aGUgZmllbGRzIHdlIHdhbnQgdG8gZGlzcGxheSBpbiB0aGUgbGlzdCAob25seSBUSVRMRSkKKyAgICAgICAgU3RyaW5nW10gZnJvbSA9IG5ldyBTdHJpbmdbXXtOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEV9OworCisgICAgICAgIC8vIGFuZCBhbiBhcnJheSBvZiB0aGUgZmllbGRzIHdlIHdhbnQgdG8gYmluZCB0aG9zZSBmaWVsZHMgdG8gKGluIHRoaXMgY2FzZSBqdXN0IHRleHQxKQorICAgICAgICBpbnRbXSB0byA9IG5ldyBpbnRbXXtSLmlkLnRleHQxfTsKKworICAgICAgICAvLyBOb3cgY3JlYXRlIGEgc2ltcGxlIGN1cnNvciBhZGFwdGVyIGFuZCBzZXQgaXQgdG8gZGlzcGxheQorICAgICAgICBTaW1wbGVDdXJzb3JBZGFwdGVyIG5vdGVzID0gCisgICAgICAgICAgICBuZXcgU2ltcGxlQ3Vyc29yQWRhcHRlcih0aGlzLCBSLmxheW91dC5ub3Rlc19yb3csIG1Ob3Rlc0N1cnNvciwgZnJvbSwgdG8pOworICAgICAgICBzZXRMaXN0QWRhcHRlcihub3Rlcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKKyAgICAgICAgbWVudS5hZGQoMCwgSU5TRVJUX0lELCAwLCBSLnN0cmluZy5tZW51X2luc2VydCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1TZWxlY3RlZChpbnQgZmVhdHVyZUlkLCBNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgICAgICBjYXNlIElOU0VSVF9JRDoKKyAgICAgICAgICAgICAgICBjcmVhdGVOb3RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIub25NZW51SXRlbVNlbGVjdGVkKGZlYXR1cmVJZCwgaXRlbSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51LCBWaWV3IHYsCisgICAgICAgICAgICBDb250ZXh0TWVudUluZm8gbWVudUluZm8pIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVDb250ZXh0TWVudShtZW51LCB2LCBtZW51SW5mbyk7CisgICAgICAgIG1lbnUuYWRkKDAsIERFTEVURV9JRCwgMCwgUi5zdHJpbmcubWVudV9kZWxldGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ29udGV4dEl0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgICAgICBjYXNlIERFTEVURV9JRDoKKyAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dE1lbnVJbmZvIGluZm8gPSAoQWRhcHRlckNvbnRleHRNZW51SW5mbykgaXRlbS5nZXRNZW51SW5mbygpOworICAgICAgICAgICAgICAgIG1EYkhlbHBlci5kZWxldGVOb3RlKGluZm8uaWQpOworICAgICAgICAgICAgICAgIGZpbGxEYXRhKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uQ29udGV4dEl0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlTm90ZSgpIHsKKyAgICAgICAgSW50ZW50IGkgPSBuZXcgSW50ZW50KHRoaXMsIE5vdGVFZGl0LmNsYXNzKTsKKyAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpLCBBQ1RJVklUWV9DUkVBVEUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uTGlzdEl0ZW1DbGljayhMaXN0VmlldyBsLCBWaWV3IHYsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgeworICAgICAgICBzdXBlci5vbkxpc3RJdGVtQ2xpY2sobCwgdiwgcG9zaXRpb24sIGlkKTsKKyAgICAgICAgQ3Vyc29yIGMgPSBtTm90ZXNDdXJzb3I7CisgICAgICAgIGMubW92ZVRvUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBJbnRlbnQgaSA9IG5ldyBJbnRlbnQodGhpcywgTm90ZUVkaXQuY2xhc3MpOworICAgICAgICBpLnB1dEV4dHJhKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCwgaWQpOworICAgICAgICBpLnB1dEV4dHJhKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSwgYy5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgYy5nZXRDb2x1bW5JbmRleE9yVGhyb3coTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFKSkpOworICAgICAgICBpLnB1dEV4dHJhKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZLCBjLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjLmdldENvbHVtbkluZGV4T3JUaHJvdyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSkpKTsKKyAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpLCBBQ1RJVklUWV9FRElUKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc3VwZXIub25BY3Rpdml0eVJlc3VsdChyZXF1ZXN0Q29kZSwgcmVzdWx0Q29kZSwgaW50ZW50KTsKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IGludGVudC5nZXRFeHRyYXMoKTsKKyAgICAgICAgc3dpdGNoKHJlcXVlc3RDb2RlKSB7CisgICAgICAgICAgICBjYXNlIEFDVElWSVRZX0NSRUFURToKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKTsKKyAgICAgICAgICAgICAgICBtRGJIZWxwZXIuY3JlYXRlTm90ZSh0aXRsZSwgYm9keSk7CisgICAgICAgICAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUNUSVZJVFlfRURJVDoKKyAgICAgICAgICAgICAgICBMb25nIHJvd0lkID0gZXh0cmFzLmdldExvbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lEKTsKKyAgICAgICAgICAgICAgICBpZiAocm93SWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWRpdFRpdGxlID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWRpdEJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKTsKKyAgICAgICAgICAgICAgICAgICAgbURiSGVscGVyLnVwZGF0ZU5vdGUocm93SWQsIGVkaXRUaXRsZSwgZWRpdEJvZHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3Rlc0RiQWRhcHRlci5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3Rlc0RiQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ZWUxYzAKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVzRGJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMzsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuU1FMRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZU9wZW5IZWxwZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworLyoqCisgKiBTaW1wbGUgbm90ZXMgZGF0YWJhc2UgYWNjZXNzIGhlbHBlciBjbGFzcy4gRGVmaW5lcyB0aGUgYmFzaWMgQ1JVRCBvcGVyYXRpb25zCisgKiBmb3IgdGhlIG5vdGVwYWQgZXhhbXBsZSwgYW5kIGdpdmVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIG5vdGVzIGFzIHdlbGwgYXMKKyAqIHJldHJpZXZlIG9yIG1vZGlmeSBhIHNwZWNpZmljIG5vdGUuCisgKiAKKyAqIFRoaXMgaGFzIGJlZW4gaW1wcm92ZWQgZnJvbSB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGlzIHR1dG9yaWFsIHRocm91Z2ggdGhlCisgKiBhZGRpdGlvbiBvZiBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGFsc28gdXNpbmcgcmV0dXJuaW5nIGEgQ3Vyc29yIGluc3RlYWQKKyAqIG9mIHVzaW5nIGEgY29sbGVjdGlvbiBvZiBpbm5lciBjbGFzc2VzICh3aGljaCBpcyBsZXNzIHNjYWxhYmxlIGFuZCBub3QKKyAqIHJlY29tbWVuZGVkKS4KKyAqLworcHVibGljIGNsYXNzIE5vdGVzRGJBZGFwdGVyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USVRMRSA9ICJ0aXRsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0JPRFkgPSAiYm9keSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1JPV0lEID0gIl9pZCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5vdGVzRGJBZGFwdGVyIjsKKyAgICBwcml2YXRlIERhdGFiYXNlSGVscGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIFNRTGl0ZURhdGFiYXNlIG1EYjsKKworICAgIC8qKgorICAgICAqIERhdGFiYXNlIGNyZWF0aW9uIHNxbCBzdGF0ZW1lbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfQ1JFQVRFID0KKyAgICAgICAgImNyZWF0ZSB0YWJsZSBub3RlcyAoX2lkIGludGVnZXIgcHJpbWFyeSBrZXkgYXV0b2luY3JlbWVudCwgIgorICAgICAgICArICJ0aXRsZSB0ZXh0IG5vdCBudWxsLCBib2R5IHRleHQgbm90IG51bGwpOyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfTkFNRSA9ICJkYXRhIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfVEFCTEUgPSAibm90ZXMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRV9WRVJTSU9OID0gMjsKKworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ3R4OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0YWJhc2VIZWxwZXIgZXh0ZW5kcyBTUUxpdGVPcGVuSGVscGVyIHsKKworICAgICAgICBEYXRhYmFzZUhlbHBlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIERBVEFCQVNFX05BTUUsIG51bGwsIERBVEFCQVNFX1ZFUlNJT04pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKFNRTGl0ZURhdGFiYXNlIGRiKSB7CisKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoREFUQUJBU0VfQ1JFQVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblVwZ3JhZGUoU1FMaXRlRGF0YWJhc2UgZGIsIGludCBvbGRWZXJzaW9uLCBpbnQgbmV3VmVyc2lvbikgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiVXBncmFkaW5nIGRhdGFiYXNlIGZyb20gdmVyc2lvbiAiICsgb2xkVmVyc2lvbiArICIgdG8gIgorICAgICAgICAgICAgICAgICAgICArIG5ld1ZlcnNpb24gKyAiLCB3aGljaCB3aWxsIGRlc3Ryb3kgYWxsIG9sZCBkYXRhIik7CisgICAgICAgICAgICBkYi5leGVjU1FMKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBub3RlcyIpOworICAgICAgICAgICAgb25DcmVhdGUoZGIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgLSB0YWtlcyB0aGUgY29udGV4dCB0byBhbGxvdyB0aGUgZGF0YWJhc2UgdG8gYmUKKyAgICAgKiBvcGVuZWQvY3JlYXRlZAorICAgICAqIAorICAgICAqIEBwYXJhbSBjdHggdGhlIENvbnRleHQgd2l0aGluIHdoaWNoIHRvIHdvcmsKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgdGhpcy5tQ3R4ID0gY3R4OworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW4gdGhlIG5vdGVzIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgb3BlbmVkLCB0cnkgdG8gY3JlYXRlIGEgbmV3CisgICAgICogaW5zdGFuY2Ugb2YgdGhlIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgY3JlYXRlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIHRvCisgICAgICogc2lnbmFsIHRoZSBmYWlsdXJlCisgICAgICogCisgICAgICogQHJldHVybiB0aGlzIChzZWxmIHJlZmVyZW5jZSwgYWxsb3dpbmcgdGhpcyB0byBiZSBjaGFpbmVkIGluIGFuCisgICAgICogICAgICAgICBpbml0aWFsaXphdGlvbiBjYWxsKQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIHRoZSBkYXRhYmFzZSBjb3VsZCBiZSBuZWl0aGVyIG9wZW5lZCBvciBjcmVhdGVkCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyIG9wZW4oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IERhdGFiYXNlSGVscGVyKG1DdHgpOworICAgICAgICBtRGIgPSBtRGJIZWxwZXIuZ2V0V3JpdGFibGVEYXRhYmFzZSgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgbURiSGVscGVyLmNsb3NlKCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbm90ZSB1c2luZyB0aGUgdGl0bGUgYW5kIGJvZHkgcHJvdmlkZWQuIElmIHRoZSBub3RlIGlzCisgICAgICogc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgcmV0dXJuIHRoZSBuZXcgcm93SWQgZm9yIHRoYXQgbm90ZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAqIGEgLTEgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBub3RlCisgICAgICogQHBhcmFtIGJvZHkgdGhlIGJvZHkgb2YgdGhlIG5vdGUKKyAgICAgKiBAcmV0dXJuIHJvd0lkIG9yIC0xIGlmIGZhaWxlZAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGNyZWF0ZU5vdGUoU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGluaXRpYWxWYWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIuaW5zZXJ0KERBVEFCQVNFX1RBQkxFLCBudWxsLCBpbml0aWFsVmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgdGhlIG5vdGUgd2l0aCB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byBkZWxldGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlTm90ZShsb25nIHJvd0lkKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5kZWxldGUoREFUQUJBU0VfVEFCTEUsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIG92ZXIgdGhlIGxpc3Qgb2YgYWxsIG5vdGVzIGluIHRoZSBkYXRhYmFzZQorICAgICAqIAorICAgICAqIEByZXR1cm4gQ3Vyc29yIG92ZXIgYWxsIG5vdGVzCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaEFsbE5vdGVzKCkgeworCisgICAgICAgIHJldHVybiBtRGIucXVlcnkoREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELCBLRVlfVElUTEUsCisgICAgICAgICAgICAgICAgS0VZX0JPRFl9LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3IgcG9zaXRpb25lZCBhdCB0aGUgbm90ZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBwb3NpdGlvbmVkIHRvIG1hdGNoaW5nIG5vdGUsIGlmIGZvdW5kCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgbm90ZSBjb3VsZCBub3QgYmUgZm91bmQvcmV0cmlldmVkCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaE5vdGUobG9uZyByb3dJZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisKKyAgICAgICAgQ3Vyc29yIG1DdXJzb3IgPQorCisgICAgICAgICAgICBtRGIucXVlcnkodHJ1ZSwgREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELAorICAgICAgICAgICAgICAgICAgICBLRVlfVElUTEUsIEtFWV9CT0RZfSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBpZiAobUN1cnNvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ3Vyc29yLm1vdmVUb0ZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DdXJzb3I7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIG5vdGUgdXNpbmcgdGhlIGRldGFpbHMgcHJvdmlkZWQuIFRoZSBub3RlIHRvIGJlIHVwZGF0ZWQgaXMKKyAgICAgKiBzcGVjaWZpZWQgdXNpbmcgdGhlIHJvd0lkLCBhbmQgaXQgaXMgYWx0ZXJlZCB0byB1c2UgdGhlIHRpdGxlIGFuZCBib2R5CisgICAgICogdmFsdWVzIHBhc3NlZCBpbgorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSB0aXRsZSB2YWx1ZSB0byBzZXQgbm90ZSB0aXRsZSB0bworICAgICAqIEBwYXJhbSBib2R5IHZhbHVlIHRvIHNldCBub3RlIGJvZHkgdG8KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vdGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVOb3RlKGxvbmcgcm93SWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBhcmdzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLnVwZGF0ZShEQVRBQkFTRV9UQUJMRSwgYXJncywgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vQW5kcm9pZC5tayBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vQW5kcm9pZC5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCisjIE9ubHkgYnVpbGQgYXBrIGlmIHRoaXMgcGFja2FnZSBpcyBhZGRlZCB0byBDVVNUT01fTU9ETFVFUyBpbiBidWlsZHNwZWMubWsKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKKyMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgYXBrLgorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQorCitMT0NBTF9QQUNLQUdFX05BTUUgOj0gTm90ZXBhZHYzU29sdXRpb24KKworIyBNYWtlIHRoZSBhcHAgYnVpbGQgYWdhaW5zdCB0aGUgY3VycmVudCBTREsKK0xPQ0FMX1NES19WRVJTSU9OIDo9IGN1cnJlbnQKKworaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZTE2NDUKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgcGFja2FnZT0iY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMyI+CisgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljb24iPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZXBhZHYzIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLk5vdGVFZGl0IiAvPgorICAgIDwvYXBwbGljYXRpb24+Cis8L21hbmlmZXN0PiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGUzNjAxCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3RlX2VkaXQueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZV9lZGl0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWY5NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZV9lZGl0LnhtbApAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorCis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKwlhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKwlhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CisJCisJPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKwkJPFRleHRWaWV3IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCQlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGl0bGUiIC8+CisJCTxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlIiAKKwkJICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCQkJYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIi8+CisJPC9MaW5lYXJMYXlvdXQ+CisKKwk8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCQlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYm9keSIgLz4KKwk8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9ib2R5IiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKwkJYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorCQlhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIiAvPgorCQorCTxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9jb25maXJtIiAKKwkgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb25maXJtIgorCQlhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KKworPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YWUwNDcyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfbGlzdC54bWwKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgIAorICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FuZHJvaWQ6bGlzdCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KKyAgCTxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FuZHJvaWQ6ZW1wdHkiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vX25vdGVzIi8+Cis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyOGE0MWIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQxIiB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTYzYjgzCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXNvdXJjZXM+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+Tm90ZXBhZCB2Mzwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fbm90ZXMiPk5vIE5vdGVzIFlldDwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9pbnNlcnQiPkFkZCBOb3RlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZSI+RGVsZXRlIE5vdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlIj5UaXRsZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYm9keSI+Qm9keTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlybSI+Q29uZmlybTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWRpdF9ub3RlIj5FZGl0IE5vdGU8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVFZGl0LmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZUVkaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iODY0Nzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVFZGl0LmphdmEKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworCitwdWJsaWMgY2xhc3MgTm90ZUVkaXQgZXh0ZW5kcyBBY3Rpdml0eSB7CisKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1UaXRsZVRleHQ7CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtQm9keVRleHQ7CisgICAgcHJpdmF0ZSBMb25nIG1Sb3dJZDsKKyAgICBwcml2YXRlIE5vdGVzRGJBZGFwdGVyIG1EYkhlbHBlcjsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IE5vdGVzRGJBZGFwdGVyKHRoaXMpOworICAgICAgICBtRGJIZWxwZXIub3BlbigpOworCisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lm5vdGVfZWRpdCk7CisKKyAgICAgICAgbVRpdGxlVGV4dCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQudGl0bGUpOworICAgICAgICBtQm9keVRleHQgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLmJvZHkpOworCisgICAgICAgIEJ1dHRvbiBjb25maXJtQnV0dG9uID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuY29uZmlybSk7CisKKyAgICAgICAgbVJvd0lkID0gKHNhdmVkSW5zdGFuY2VTdGF0ZSA9PSBudWxsKSA/IG51bGwgOgorICAgICAgICAgICAgKExvbmcpIHNhdmVkSW5zdGFuY2VTdGF0ZS5nZXRTZXJpYWxpemFibGUoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lEKTsKKwkJaWYgKG1Sb3dJZCA9PSBudWxsKSB7CisJCQlCdW5kbGUgZXh0cmFzID0gZ2V0SW50ZW50KCkuZ2V0RXh0cmFzKCk7CisJCQltUm93SWQgPSBleHRyYXMgIT0gbnVsbCA/IGV4dHJhcy5nZXRMb25nKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCkKKwkJCQkJCQkJCTogbnVsbDsKKwkJfQorCisJCXBvcHVsYXRlRmllbGRzKCk7CisKKyAgICAgICAgY29uZmlybUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgeworICAgICAgICAgICAgICAgIHNldFJlc3VsdChSRVNVTFRfT0spOworICAgICAgICAgICAgICAgIGZpbmlzaCgpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwb3B1bGF0ZUZpZWxkcygpIHsKKyAgICAgICAgaWYgKG1Sb3dJZCAhPSBudWxsKSB7CisgICAgICAgICAgICBDdXJzb3Igbm90ZSA9IG1EYkhlbHBlci5mZXRjaE5vdGUobVJvd0lkKTsKKyAgICAgICAgICAgIHN0YXJ0TWFuYWdpbmdDdXJzb3Iobm90ZSk7CisgICAgICAgICAgICBtVGl0bGVUZXh0LnNldFRleHQobm90ZS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIG5vdGUuZ2V0Q29sdW1uSW5kZXhPclRocm93KE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSkpKTsKKyAgICAgICAgICAgIG1Cb2R5VGV4dC5zZXRUZXh0KG5vdGUuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBub3RlLmdldENvbHVtbkluZGV4T3JUaHJvdyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uU2F2ZUluc3RhbmNlU3RhdGUoQnVuZGxlIG91dFN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uU2F2ZUluc3RhbmNlU3RhdGUob3V0U3RhdGUpOworICAgICAgICBzYXZlU3RhdGUoKTsKKyAgICAgICAgb3V0U3RhdGUucHV0U2VyaWFsaXphYmxlKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCwgbVJvd0lkKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgeworICAgICAgICBzdXBlci5vblBhdXNlKCk7CisgICAgICAgIHNhdmVTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBwb3B1bGF0ZUZpZWxkcygpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzYXZlU3RhdGUoKSB7CisgICAgICAgIFN0cmluZyB0aXRsZSA9IG1UaXRsZVRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyBib2R5ID0gbUJvZHlUZXh0LmdldFRleHQoKS50b1N0cmluZygpOworCisgICAgICAgIGlmIChtUm93SWQgPT0gbnVsbCkgeworICAgICAgICAgICAgbG9uZyBpZCA9IG1EYkhlbHBlci5jcmVhdGVOb3RlKHRpdGxlLCBib2R5KTsKKyAgICAgICAgICAgIGlmIChpZCA+IDApIHsKKyAgICAgICAgICAgICAgICBtUm93SWQgPSBpZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1EYkhlbHBlci51cGRhdGVOb3RlKG1Sb3dJZCwgdGl0bGUsIGJvZHkpOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXBhZHYzLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXBhZHYzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWUxNTY5NAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3RlcGFkdjMuamF2YQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDM7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5MaXN0QWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudS5Db250ZXh0TWVudUluZm87CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2ltcGxlQ3Vyc29yQWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5BZGFwdGVyQ29udGV4dE1lbnVJbmZvOworCitwdWJsaWMgY2xhc3MgTm90ZXBhZHYzIGV4dGVuZHMgTGlzdEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfQ1JFQVRFPTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElWSVRZX0VESVQ9MTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlNFUlRfSUQgPSBNZW51LkZJUlNUOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUxFVEVfSUQgPSBNZW51LkZJUlNUICsgMTsKKworICAgIHByaXZhdGUgTm90ZXNEYkFkYXB0ZXIgbURiSGVscGVyOworCisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZXNfbGlzdCk7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBOb3Rlc0RiQWRhcHRlcih0aGlzKTsKKyAgICAgICAgbURiSGVscGVyLm9wZW4oKTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgcmVnaXN0ZXJGb3JDb250ZXh0TWVudShnZXRMaXN0VmlldygpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZmlsbERhdGEoKSB7CisgICAgICAgIEN1cnNvciBub3Rlc0N1cnNvciA9IG1EYkhlbHBlci5mZXRjaEFsbE5vdGVzKCk7CisgICAgICAgIHN0YXJ0TWFuYWdpbmdDdXJzb3Iobm90ZXNDdXJzb3IpOworCisgICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSB0byBzcGVjaWZ5IHRoZSBmaWVsZHMgd2Ugd2FudCB0byBkaXNwbGF5IGluIHRoZSBsaXN0IChvbmx5IFRJVExFKQorICAgICAgICBTdHJpbmdbXSBmcm9tID0gbmV3IFN0cmluZ1tde05vdGVzRGJBZGFwdGVyLktFWV9USVRMRX07CisKKyAgICAgICAgLy8gYW5kIGFuIGFycmF5IG9mIHRoZSBmaWVsZHMgd2Ugd2FudCB0byBiaW5kIHRob3NlIGZpZWxkcyB0byAoaW4gdGhpcyBjYXNlIGp1c3QgdGV4dDEpCisgICAgICAgIGludFtdIHRvID0gbmV3IGludFtde1IuaWQudGV4dDF9OworCisgICAgICAgIC8vIE5vdyBjcmVhdGUgYSBzaW1wbGUgY3Vyc29yIGFkYXB0ZXIgYW5kIHNldCBpdCB0byBkaXNwbGF5CisgICAgICAgIFNpbXBsZUN1cnNvckFkYXB0ZXIgbm90ZXMgPSAKKyAgICAgICAgICAgIG5ldyBTaW1wbGVDdXJzb3JBZGFwdGVyKHRoaXMsIFIubGF5b3V0Lm5vdGVzX3Jvdywgbm90ZXNDdXJzb3IsIGZyb20sIHRvKTsKKyAgICAgICAgc2V0TGlzdEFkYXB0ZXIobm90ZXMpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUoTWVudSBtZW51KSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlT3B0aW9uc01lbnUobWVudSk7CisgICAgICAgIG1lbnUuYWRkKDAsIElOU0VSVF9JRCwgMCwgUi5zdHJpbmcubWVudV9pbnNlcnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbk1lbnVJdGVtU2VsZWN0ZWQoaW50IGZlYXR1cmVJZCwgTWVudUl0ZW0gaXRlbSkgeworICAgICAgICBzd2l0Y2goaXRlbS5nZXRJdGVtSWQoKSkgeworICAgICAgICAgICAgY2FzZSBJTlNFUlRfSUQ6CisgICAgICAgICAgICAgICAgY3JlYXRlTm90ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uTWVudUl0ZW1TZWxlY3RlZChmZWF0dXJlSWQsIGl0ZW0pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUgbWVudSwgVmlldyB2LAorICAgICAgICAgICAgQ29udGV4dE1lbnVJbmZvIG1lbnVJbmZvKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlQ29udGV4dE1lbnUobWVudSwgdiwgbWVudUluZm8pOworICAgICAgICBtZW51LmFkZCgwLCBERUxFVEVfSUQsIDAsIFIuc3RyaW5nLm1lbnVfZGVsZXRlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbkNvbnRleHRJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgeworICAgICAgICBzd2l0Y2goaXRlbS5nZXRJdGVtSWQoKSkgeworICAgICAgICAgICAgY2FzZSBERUxFVEVfSUQ6CisgICAgICAgICAgICAgICAgQWRhcHRlckNvbnRleHRNZW51SW5mbyBpbmZvID0gKEFkYXB0ZXJDb250ZXh0TWVudUluZm8pIGl0ZW0uZ2V0TWVudUluZm8oKTsKKyAgICAgICAgICAgICAgICBtRGJIZWxwZXIuZGVsZXRlTm90ZShpbmZvLmlkKTsKKyAgICAgICAgICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5vbkNvbnRleHRJdGVtU2VsZWN0ZWQoaXRlbSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU5vdGUoKSB7CisgICAgICAgIEludGVudCBpID0gbmV3IEludGVudCh0aGlzLCBOb3RlRWRpdC5jbGFzcyk7CisgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaSwgQUNUSVZJVFlfQ1JFQVRFKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkxpc3RJdGVtQ2xpY2soTGlzdFZpZXcgbCwgVmlldyB2LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgc3VwZXIub25MaXN0SXRlbUNsaWNrKGwsIHYsIHBvc2l0aW9uLCBpZCk7CisgICAgICAgIEludGVudCBpID0gbmV3IEludGVudCh0aGlzLCBOb3RlRWRpdC5jbGFzcyk7CisgICAgICAgIGkucHV0RXh0cmEoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lELCBpZCk7CisgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaSwgQUNUSVZJVFlfRURJVCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHN1cGVyLm9uQWN0aXZpdHlSZXN1bHQocmVxdWVzdENvZGUsIHJlc3VsdENvZGUsIGludGVudCk7CisgICAgICAgIGZpbGxEYXRhKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVzRGJBZGFwdGVyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXNEYkFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGVlMWMwCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVzRGJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMzsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuU1FMRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZU9wZW5IZWxwZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworLyoqCisgKiBTaW1wbGUgbm90ZXMgZGF0YWJhc2UgYWNjZXNzIGhlbHBlciBjbGFzcy4gRGVmaW5lcyB0aGUgYmFzaWMgQ1JVRCBvcGVyYXRpb25zCisgKiBmb3IgdGhlIG5vdGVwYWQgZXhhbXBsZSwgYW5kIGdpdmVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIG5vdGVzIGFzIHdlbGwgYXMKKyAqIHJldHJpZXZlIG9yIG1vZGlmeSBhIHNwZWNpZmljIG5vdGUuCisgKiAKKyAqIFRoaXMgaGFzIGJlZW4gaW1wcm92ZWQgZnJvbSB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGlzIHR1dG9yaWFsIHRocm91Z2ggdGhlCisgKiBhZGRpdGlvbiBvZiBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGFsc28gdXNpbmcgcmV0dXJuaW5nIGEgQ3Vyc29yIGluc3RlYWQKKyAqIG9mIHVzaW5nIGEgY29sbGVjdGlvbiBvZiBpbm5lciBjbGFzc2VzICh3aGljaCBpcyBsZXNzIHNjYWxhYmxlIGFuZCBub3QKKyAqIHJlY29tbWVuZGVkKS4KKyAqLworcHVibGljIGNsYXNzIE5vdGVzRGJBZGFwdGVyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USVRMRSA9ICJ0aXRsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0JPRFkgPSAiYm9keSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1JPV0lEID0gIl9pZCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5vdGVzRGJBZGFwdGVyIjsKKyAgICBwcml2YXRlIERhdGFiYXNlSGVscGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIFNRTGl0ZURhdGFiYXNlIG1EYjsKKworICAgIC8qKgorICAgICAqIERhdGFiYXNlIGNyZWF0aW9uIHNxbCBzdGF0ZW1lbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfQ1JFQVRFID0KKyAgICAgICAgImNyZWF0ZSB0YWJsZSBub3RlcyAoX2lkIGludGVnZXIgcHJpbWFyeSBrZXkgYXV0b2luY3JlbWVudCwgIgorICAgICAgICArICJ0aXRsZSB0ZXh0IG5vdCBudWxsLCBib2R5IHRleHQgbm90IG51bGwpOyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfTkFNRSA9ICJkYXRhIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfVEFCTEUgPSAibm90ZXMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRV9WRVJTSU9OID0gMjsKKworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ3R4OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0YWJhc2VIZWxwZXIgZXh0ZW5kcyBTUUxpdGVPcGVuSGVscGVyIHsKKworICAgICAgICBEYXRhYmFzZUhlbHBlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIERBVEFCQVNFX05BTUUsIG51bGwsIERBVEFCQVNFX1ZFUlNJT04pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKFNRTGl0ZURhdGFiYXNlIGRiKSB7CisKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoREFUQUJBU0VfQ1JFQVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblVwZ3JhZGUoU1FMaXRlRGF0YWJhc2UgZGIsIGludCBvbGRWZXJzaW9uLCBpbnQgbmV3VmVyc2lvbikgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiVXBncmFkaW5nIGRhdGFiYXNlIGZyb20gdmVyc2lvbiAiICsgb2xkVmVyc2lvbiArICIgdG8gIgorICAgICAgICAgICAgICAgICAgICArIG5ld1ZlcnNpb24gKyAiLCB3aGljaCB3aWxsIGRlc3Ryb3kgYWxsIG9sZCBkYXRhIik7CisgICAgICAgICAgICBkYi5leGVjU1FMKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBub3RlcyIpOworICAgICAgICAgICAgb25DcmVhdGUoZGIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgLSB0YWtlcyB0aGUgY29udGV4dCB0byBhbGxvdyB0aGUgZGF0YWJhc2UgdG8gYmUKKyAgICAgKiBvcGVuZWQvY3JlYXRlZAorICAgICAqIAorICAgICAqIEBwYXJhbSBjdHggdGhlIENvbnRleHQgd2l0aGluIHdoaWNoIHRvIHdvcmsKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgdGhpcy5tQ3R4ID0gY3R4OworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW4gdGhlIG5vdGVzIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgb3BlbmVkLCB0cnkgdG8gY3JlYXRlIGEgbmV3CisgICAgICogaW5zdGFuY2Ugb2YgdGhlIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgY3JlYXRlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIHRvCisgICAgICogc2lnbmFsIHRoZSBmYWlsdXJlCisgICAgICogCisgICAgICogQHJldHVybiB0aGlzIChzZWxmIHJlZmVyZW5jZSwgYWxsb3dpbmcgdGhpcyB0byBiZSBjaGFpbmVkIGluIGFuCisgICAgICogICAgICAgICBpbml0aWFsaXphdGlvbiBjYWxsKQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIHRoZSBkYXRhYmFzZSBjb3VsZCBiZSBuZWl0aGVyIG9wZW5lZCBvciBjcmVhdGVkCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyIG9wZW4oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IERhdGFiYXNlSGVscGVyKG1DdHgpOworICAgICAgICBtRGIgPSBtRGJIZWxwZXIuZ2V0V3JpdGFibGVEYXRhYmFzZSgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgbURiSGVscGVyLmNsb3NlKCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbm90ZSB1c2luZyB0aGUgdGl0bGUgYW5kIGJvZHkgcHJvdmlkZWQuIElmIHRoZSBub3RlIGlzCisgICAgICogc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgcmV0dXJuIHRoZSBuZXcgcm93SWQgZm9yIHRoYXQgbm90ZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAqIGEgLTEgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBub3RlCisgICAgICogQHBhcmFtIGJvZHkgdGhlIGJvZHkgb2YgdGhlIG5vdGUKKyAgICAgKiBAcmV0dXJuIHJvd0lkIG9yIC0xIGlmIGZhaWxlZAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGNyZWF0ZU5vdGUoU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGluaXRpYWxWYWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIuaW5zZXJ0KERBVEFCQVNFX1RBQkxFLCBudWxsLCBpbml0aWFsVmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgdGhlIG5vdGUgd2l0aCB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byBkZWxldGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlTm90ZShsb25nIHJvd0lkKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5kZWxldGUoREFUQUJBU0VfVEFCTEUsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIG92ZXIgdGhlIGxpc3Qgb2YgYWxsIG5vdGVzIGluIHRoZSBkYXRhYmFzZQorICAgICAqIAorICAgICAqIEByZXR1cm4gQ3Vyc29yIG92ZXIgYWxsIG5vdGVzCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaEFsbE5vdGVzKCkgeworCisgICAgICAgIHJldHVybiBtRGIucXVlcnkoREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELCBLRVlfVElUTEUsCisgICAgICAgICAgICAgICAgS0VZX0JPRFl9LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3IgcG9zaXRpb25lZCBhdCB0aGUgbm90ZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBwb3NpdGlvbmVkIHRvIG1hdGNoaW5nIG5vdGUsIGlmIGZvdW5kCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgbm90ZSBjb3VsZCBub3QgYmUgZm91bmQvcmV0cmlldmVkCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaE5vdGUobG9uZyByb3dJZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisKKyAgICAgICAgQ3Vyc29yIG1DdXJzb3IgPQorCisgICAgICAgICAgICBtRGIucXVlcnkodHJ1ZSwgREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELAorICAgICAgICAgICAgICAgICAgICBLRVlfVElUTEUsIEtFWV9CT0RZfSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBpZiAobUN1cnNvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ3Vyc29yLm1vdmVUb0ZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DdXJzb3I7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIG5vdGUgdXNpbmcgdGhlIGRldGFpbHMgcHJvdmlkZWQuIFRoZSBub3RlIHRvIGJlIHVwZGF0ZWQgaXMKKyAgICAgKiBzcGVjaWZpZWQgdXNpbmcgdGhlIHJvd0lkLCBhbmQgaXQgaXMgYWx0ZXJlZCB0byB1c2UgdGhlIHRpdGxlIGFuZCBib2R5CisgICAgICogdmFsdWVzIHBhc3NlZCBpbgorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSB0aXRsZSB2YWx1ZSB0byBzZXQgbm90ZSB0aXRsZSB0bworICAgICAqIEBwYXJhbSBib2R5IHZhbHVlIHRvIHNldCBub3RlIGJvZHkgdG8KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vdGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVOb3RlKGxvbmcgcm93SWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBhcmdzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLnVwZGF0ZShEQVRBQkFTRV9UQUJMRSwgYXJncywgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9Cit9Cg==