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+CiAgICAgICAgIDxCdXR0b24KICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWRkX2FuZF9zZWxlY3QiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWRkX3NlbGVjdF9idXR0b24iIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIvPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9BbmRyb2lkLm1rIGIvYXBwcy9EZXZlbG9wbWVudC9BbmRyb2lkLm1rCmluZGV4IGE2NjZkN2YuLjFjZWY1NDggMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvQW5kcm9pZC5taworKysgYi9hcHBzL0RldmVsb3BtZW50L0FuZHJvaWQubWsKQEAgLTQsNyArNCw2IEBACiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBlbmcKIAogTE9DQUxfSkFWQV9MSUJSQVJJRVMgOj0gYW5kcm9pZC50ZXN0LnJ1bm5lcgotTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGdvb2dsZWxvZ2luLWNsaWVudAogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykgXAogICAgICAgICAgICAgICAgIHNyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9JUmVtb3RlU2VydmljZS5haWRsIFwKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCA3ZjBmNTk0Li4zYzc1YTYzIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0xNywyMyArMTcsMjkgQEAKIDxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmRldmVsb3BtZW50IgogICAgICAgICBhbmRyb2lkOnZlcnNpb25Db2RlPSIxIiBhbmRyb2lkOnZlcnNpb25OYW1lPSIxLjAiPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfU0VUVElOR1MiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfV0lGSV9TVEFURSIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkNIQU5HRV9ORVRXT1JLX1NUQVRFIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfU1RBVEUiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5ERVZJQ0VfUE9XRVIiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX1BSRUZFUlJFRF9BUFBMSUNBVElPTlMiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRVNUQVJUX1BBQ0tBR0VTIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0FOSU1BVElPTl9TQ0FMRSIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9QUk9DRVNTX0xJTUlUIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0FMV0FZU19GSU5JU0giIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5TRVRfREVCVUdfQVBQIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FDQ09VTlRTIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uSEFSRFdBUkVfVEVTVCIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLklOVEVSTkVUIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uTUFOQUdFX0FDQ09VTlRTIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUkVCT09UIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uS0lMTF9CQUNLR1JPVU5EX1BST0NFU1NFUyIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTFdBWVNfRklOSVNIIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0FOSU1BVElPTl9TQ0FMRSIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9ERUJVR19BUFAiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5TRVRfUFJFRkVSUkVEX0FQUExJQ0FUSU9OUyIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9QUk9DRVNTX0xJTUlUIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uVVNFX0NSRURFTlRJQUxTIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uV0FLRV9MT0NLIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfU0VUVElOR1MiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLnBlcm1pc3Npb24uQUNDRVNTX0dPT0dMRV9QQVNTV09SRCIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iY29tLmdvb2dsZS5hbmRyb2lkLmdvb2dsZWFwcHMucGVybWlzc2lvbi5HT09HTEVfQVVUSCIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iY29tLmdvb2dsZS5hbmRyb2lkLmdvb2dsZWFwcHMucGVybWlzc2lvbi5HT09HTEVfQVVUSC5BTExfU0VSVklDRVMiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLnBlcm1pc3Npb24uR09PR0xFX0FVVEguWW91VHViZVVzZXIiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLnBlcm1pc3Npb24uQUNDRVNTX0dPT0dMRV9QQVNTV09SRCIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkdFVF9BQ0NPVU5UUyIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlVTRV9DUkVERU5USUFMUyIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk1BTkFHRV9BQ0NPVU5UUyIgLz4KIAogICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmxhYmVsPSJEZXYgVG9vbHMiCiAgICAgICAgICAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY19sYXVuY2hlcl9kZXZ0b29scyI+CkBAIC01MywxMyArNTksNiBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlRFU1QiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkV4Y2VwdGlvbkJyb3dzZXIiIGFuZHJvaWQ6bGFiZWw9IkV4Y2VwdGlvbiBCcm93c2VyIj4KLSAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgotICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5URVNUIiAvPgotICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJTdGFja3RyYWNlVmlld2VyIiBhbmRyb2lkOmxhYmVsPSJTdGFja3RyYWNlIFZpZXdlciIvPgogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJQYWNrYWdlU3VtbWFyeSIgYW5kcm9pZDpsYWJlbD0iUGFja2FnZSBTdW1tYXJ5Ij4KICAgICAgICAgPC9hY3Rpdml0eT4KICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iU2hvd0FjdGl2aXR5IiBhbmRyb2lkOmxhYmVsPSJBY3Rpdml0eSI+CkBAIC05Niw2ICs5NSwxMiBAQAogICAgICAgICA8L2FjdGl2aXR5PgogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJEZXRhaWxzIj4KICAgICAgICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQ29ubmVjdGl2aXR5IiBhbmRyb2lkOmxhYmVsPSJDb25uZWN0aXZpdHkiID4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5URVNUIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJEZXZlbG9wbWVudFNldHRpbmdzIiBhbmRyb2lkOmxhYmVsPSJEZXZlbG9wbWVudCBTZXR0aW5ncyIgPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgpAQCAtMTE3LDQ0ICsxMjIsNTcgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAotICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkdMU1Rlc3RlciIgYW5kcm9pZDpsYWJlbD0iR29vZ2xlIExvZ2luIFNlcnZpY2UiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJHTFNUZXN0ZXIiIGFuZHJvaWQ6bGFiZWw9Ikdvb2dsZSBMb2dpbiBTZXJ2aWNlIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5URVNUIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgogCi0gICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUnVubmluZ1Byb2Nlc3NlcyIgYW5kcm9pZDpsYWJlbD0iUnVubmluZyBwcm9jZXNzZXMiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJSdW5uaW5nUHJvY2Vzc2VzIiBhbmRyb2lkOmxhYmVsPSJSdW5uaW5nIHByb2Nlc3NlcyI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuVEVTVCIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJQcm9jZXNzSW5mbyIgYW5kcm9pZDpsYWJlbD0iUHJvY2VzcyBJbmZvcm1hdGlvbiI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlByb2Nlc3NJbmZvIiBhbmRyb2lkOmxhYmVsPSJQcm9jZXNzIEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5ERUZBVUxUIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgIDwvYWN0aXZpdHk+CisgICAgICAgIDwvYWN0aXZpdHk+CiAgICAgPCEtLQotICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkFwcEh3Q29uZmlnTGlzdCIgYW5kcm9pZDpsYWJlbD0iQXBwbGljYXRpb25zIEh3IENvbmZpZ3VyYXRpb24iPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJBcHBId0NvbmZpZ0xpc3QiIGFuZHJvaWQ6bGFiZWw9IkFwcGxpY2F0aW9ucyBIdyBDb25maWd1cmF0aW9uIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5URVNUIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgIDwvYWN0aXZpdHk+CisgICAgICAgIDwvYWN0aXZpdHk+CiAgICAgLS0+Ci0gICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQXBwSHdQcmVmIiBhbmRyb2lkOmxhYmVsPSJBcHBsaWNhdGlvbnMgSGFyZHdhcmUgUHJlZmVyZW5jZXMiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJBcHBId1ByZWYiIGFuZHJvaWQ6bGFiZWw9IkFwcGxpY2F0aW9ucyBIYXJkd2FyZSBQcmVmZXJlbmNlcyI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVciIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuREVGQVVMVCIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICA8L2FjdGl2aXR5PgotICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlBlcm1pc3Npb25EZXRhaWxzIiBhbmRyb2lkOmxhYmVsPSJQZXJtaXNzaW9uIEluZm8iPgorICAgICAgICA8L2FjdGl2aXR5PgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJQZXJtaXNzaW9uRGV0YWlscyIgYW5kcm9pZDpsYWJlbD0iUGVybWlzc2lvbiBJbmZvIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5kZXZlbG9wbWVudC5WSUVXX1BFUk1JU1NJT04iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuREVGQVVMVCIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICA8L2FjdGl2aXR5PgorICAgICAgICA8L2FjdGl2aXR5PgorCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkJhZEJlaGF2aW9yQWN0aXZpdHkiIGFuZHJvaWQ6bGFiZWw9IkJhZCBCZWhhdmlvciI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuVEVTVCIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICAgICAgPHJlY2VpdmVyIGFuZHJvaWQ6bmFtZT0iQmFkQmVoYXZpb3JBY3Rpdml0eSRCYWRSZWNlaXZlciI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQuQkFEX0JFSEFWSU9SIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L3JlY2VpdmVyPgorICAgICAgICA8c2VydmljZSBhbmRyb2lkOm5hbWU9IkJhZEJlaGF2aW9yQWN0aXZpdHkkQmFkU2VydmljZSIgLz4KICAgICA8L2FwcGxpY2F0aW9uPgogPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50X2xpc3RfY29udGV4dF9tZW51LnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50X2xpc3RfY29udGV4dF9tZW51LnhtbAppbmRleCA1MGU3Y2ExLi44OWY4MjQxIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudF9saXN0X2NvbnRleHRfbWVudS54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRfbGlzdF9jb250ZXh0X21lbnUueG1sCkBAIC0yMiw2ICsyMiw5IEBACiAgICAgPGl0ZW0gYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfZ2V0X2F1dGhfdG9rZW4iCiAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvYWNjb3VudHNfdGVzdGVyX2dldF9hdXRoX3Rva2VuIiAvPgogCisgICAgPGl0ZW0gYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfdGVzdF9oYXNfZmVhdHVyZXMiCisgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvYWNjb3VudHNfdGVzdGVyX3Rlc3RfaGFzX2ZlYXR1cmVzIiAvPgorCiAgICAgPGl0ZW0gYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfaW52YWxpZGF0ZV9hdXRoX3Rva2VuIgogICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2FjY291bnRzX3Rlc3Rlcl9pbnZhbGlkYXRlX2F1dGhfdG9rZW4iIC8+CiAKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50X2xpc3Rfdmlldy54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudF9saXN0X3ZpZXcueG1sCmluZGV4IGQyNTU2NzIuLjQ3NDg0ZWQgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hY2NvdW50X2xpc3Rfdmlldy54bWwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRfbGlzdF92aWV3LnhtbApAQCAtMTYsNSArMTYsNSBAQAogCiA8TGlzdFZpZXcKICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiLz4KKyAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FjY291bnRzX3Rlc3Rlci54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudHNfdGVzdGVyLnhtbAppbmRleCBlNjlmNTA1Li5lM2RlZTUzIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudHNfdGVzdGVyLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYWNjb3VudHNfdGVzdGVyLnhtbApAQCAtMTcsMjAgKzE3LDIwIEBACiA8TGluZWFyTGF5b3V0CiAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2F1dGhlbnRpY2F0b3JzX2xpc3QiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIvPgorICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIvPgogCiAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRzX3Rlc3Rlcl9hY2NvdW50X3R5cGVzX3NwaW5uZXJfbGFiZWwiCkBAIC00NSwxMSArNDUsMTEgQEAKIAogICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgIDxCdXR0b24KICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2dldF9hY2NvdW50c19ieV90eXBlIgpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfZGVzaXJlZEZlYXR1cmVzIgogICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpAQCAtODksNyArODksNyBAQAogICAgICAgICAgIDwvTGluZWFyTGF5b3V0PgogICAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYWNjb3VudHNfdGVzdGVyX2Rlc2lyZWRGZWF0dXJlcyIKICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTEwNiwxMSArMTA2LDExIEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50c190ZXN0ZXJfYWNjb3VudHNfbGlzdCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ii8+CisgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ii8+CiAKICAgICA8L0xpbmVhckxheW91dD4KIApkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FwcGxpY2F0aW9uX2h3X3ByZWYueG1sIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2FwcGxpY2F0aW9uX2h3X3ByZWYueG1sCmluZGV4IGMzOGEwY2IuLmMwMDExZTUgMTAwNzU1Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9hcHBsaWNhdGlvbl9od19wcmVmLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYXBwbGljYXRpb25faHdfcHJlZi54bWwKQEAgLTE1LDc1ICsxNSw3NSBAQAogLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiID4KICAgICAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9wYWNrYWdlX2xhYmVsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3BhY2thZ2VfbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgLz4KICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9wYWNrYWdlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl90b3VjaHNjcmVlbl9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90b3VjaHNjcmVlbl9sYWJlbCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiAvPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hdHRyX3RvdWNoc2NyZWVuIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9pbnB1dF9tZXRob2RfbGFiZWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW5wdXRfbWV0aG9kX2xhYmVsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfaW5wdXRfbWV0aG9kIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9oYXJkX2tleWJvYXJkX2xhYmVsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2hhcmRfa2V5Ym9hcmRfbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgLz4KICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9oYXJkX2tleWJvYXJkIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9uYXZpZ2F0aW9uX2xhYmVsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25hdmlnYXRpb25fbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0iYm9sZCIgLz4KICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9uYXZpZ2F0aW9uIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYXR0cl9maXZlX3dheV9uYXZfbGFiZWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZml2ZV93YXlfbmF2X2xhYmVsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiIC8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfZml2ZV93YXlfbmF2IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2F0dHJfZ2xlc192ZXJzaW9uX2xhYmVsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2dsZXNfdmVyc2lvbl9sYWJlbCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIiAvPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hdHRyX2dsZXNfdmVyc2lvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogICAgIDwvTGluZWFyTGF5b3V0PgogPC9TY3JvbGxWaWV3PgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2F1dGhlbnRpY2F0b3JzX2xpc3RfaXRlbS54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYXV0aGVudGljYXRvcnNfbGlzdF9pdGVtLnhtbAppbmRleCAzMDlhODE4Li4yNWUxZGFlIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYXV0aGVudGljYXRvcnNfbGlzdF9pdGVtLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYXV0aGVudGljYXRvcnNfbGlzdF9pdGVtLnhtbApAQCAtMTksNyArMTksNyBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSI/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0IgogICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMWRpcCIKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRzX3Rlc3Rlcl9hdXRoZW50aWNhdG9yX2xhYmVsIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCiAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VMYXJnZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX2hvcml6b250YWx8Y2VudGVyX3ZlcnRpY2FsIiAvPgpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2JhZF9iZWhhdmlvci54bWwgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvYmFkX2JlaGF2aW9yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NjNmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2JhZF9iZWhhdmlvci54bWwKQEAgLTAsMCArMSw2NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmFkX2JlaGF2aW9yX2NyYXNoX3N5c3RlbSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYWRfYmVoYXZpb3JfY3Jhc2hfc3lzdGVtX2xhYmVsIiAvPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl9jcmFzaF9tYWluIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9jcmFzaF9tYWluX2xhYmVsIiAvPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl9jcmFzaF90aHJlYWQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmFkX2JlaGF2aW9yX2NyYXNoX3RocmVhZF9sYWJlbCIgLz4KKworICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9iYWRfYmVoYXZpb3JfY3Jhc2hfbmF0aXZlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9jcmFzaF9uYXRpdmVfbGFiZWwiIC8+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmFkX2JlaGF2aW9yX3d0ZiIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYWRfYmVoYXZpb3Jfd3RmX2xhYmVsIiAvPgorCisgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2JhZF9iZWhhdmlvcl9hbnIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmFkX2JlaGF2aW9yX2Fucl9sYWJlbCIgLz4KKworICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9iYWRfYmVoYXZpb3JfYW5yX2FjdGl2aXR5IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9hbnJfYWN0aXZpdHlfbGFiZWwiIC8+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmFkX2JlaGF2aW9yX2Fucl9icm9hZGNhc3QiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmFkX2JlaGF2aW9yX2Fucl9icm9hZGNhc3RfbGFiZWwiIC8+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYmFkX2JlaGF2aW9yX2Fucl9zZXJ2aWNlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JhZF9iZWhhdmlvcl9hbnJfc2VydmljZV9sYWJlbCIgLz4KKworPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvY29ubmVjdGl2aXR5LnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9jb25uZWN0aXZpdHkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMjMwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvY29ubmVjdGl2aXR5LnhtbApAQCAtMCwwICsxLDIwNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKy8qIC8vZGV2aWNlL2FwcHMvU2V0dGluZ3MvYXNzZXRzL3Jlcy9hbnkvbGF5b3V0L2tleWJvYXJkX3ZlcnNpb24ueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCistLT4KKzxMaW5lYXJMYXlvdXQKKyAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgorCisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9lbmFibGVXaWZpIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2VuYWJsZV93aWZpIiAvPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZGlzYWJsZVdpZmkiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZGlzYWJsZV93aWZpIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPCEtLSBkaXZpZGVyIGxpbmUgLS0+CisgICAgPFZpZXcgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjRkZGRkZGRkYiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzZGlwIiAvPgorCisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdGFydERlbGF5ZWRDeWNsZSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdGFydF90b2dnbGluZyIgLz4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3N0b3BEZWxheWVkQ3ljbGUiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RvcF90b2dnbGluZyIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy93aWZpX29uX2R1cmF0aW9uIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9kY193aWZpX29uX2R1cmF0aW9uIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDptaW5FbXM9IjE1IiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3dpZmlfb2ZmX2R1cmF0aW9uIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9kY193aWZpX29mZl9kdXJhdGlvbiIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bWluRW1zPSIxNSIvPgorICAgIDwvTGluZWFyTGF5b3V0PgorCisgICAgPExpbmVhckxheW91dAorICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3dpZmlfY3ljbGVzX2RvbmUiIC8+CisgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2RjX3dpZmlfY3ljbGVzX2RvbmUiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOm1pbkVtcz0iMTUiLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDwhLS0gZGl2aWRlciBsaW5lIC0tPgorICAgIDxWaWV3IGFuZHJvaWQ6YmFja2dyb3VuZD0iI0ZGRkZGRkZGIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iM2RpcCIgLz4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjRkaXAiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc3RhcnRTY3JlZW5DeWNsZSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdGFydF9zY3JlZW5fdG9nZ2xpbmciIC8+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdG9wU2NyZWVuQ3ljbGUiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RvcF9zY3JlZW5fdG9nZ2xpbmciIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvd2lmaV9vbl9kdXJhdGlvbiIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvc2Nfd2lmaV9vbl9kdXJhdGlvbiIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bWluRW1zPSIxNSIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy93aWZpX29mZl9kdXJhdGlvbiIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvc2Nfd2lmaV9vZmZfZHVyYXRpb24iCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOm1pbkVtcz0iMTUiLz4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy93aWZpX2N5Y2xlc19kb25lIiAvPgorICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9zY193aWZpX2N5Y2xlc19kb25lIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDptaW5FbXM9IjE1Ii8+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8IS0tIGRpdmlkZXIgbGluZSAtLT4KKyAgICA8VmlldyBhbmRyb2lkOmJhY2tncm91bmQ9IiNGRkZGRkZGRiIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjNkaXAiIC8+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI0ZGlwIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3N0YXJ0X21tcyIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdGFydF9tbXMiIC8+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdG9wX21tcyIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdG9wX21tcyIgLz4KKyAgICA8L0xpbmVhckxheW91dD4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3N0YXJ0X2hpcHJpIgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0YXJ0X2hpcHJpIiAvPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc3RvcF9oaXByaSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zdG9wX2hpcHJpIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvY3Jhc2giCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY3Jhc2giIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+Cis8L0xpbmVhckxheW91dD4KKwpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2RldmVsb3BtZW50X3NldHRpbmdzLnhtbCBiL2FwcHMvRGV2ZWxvcG1lbnQvcmVzL2xheW91dC9kZXZlbG9wbWVudF9zZXR0aW5ncy54bWwKaW5kZXggN2JhZDNiYi4uOWMwNGY1ZCAxMDA2NDQKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9yZXMvbGF5b3V0L2RldmVsb3BtZW50X3NldHRpbmdzLnhtbAorKysgYi9hcHBzL0RldmVsb3BtZW50L3Jlcy9sYXlvdXQvZGV2ZWxvcG1lbnRfc2V0dGluZ3MueG1sCkBAIC0xOCwxMiArMTgsMTIgQEAKICovCiAtLT4KIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8UmVsYXRpdmVMYXlvdXQgCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9kZWJ1Z19hcHBfbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RldmVsb3BtZW50X3NldHRpbmdzX2NvbXBhdGliaWxpdHlfbW9kZV90ZXh0IiAvPgogCiAgICAgICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvbWF4X3Byb2NzIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC9jb21wYXRpYmlsaXR5X21vZGUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiIC8+CkBAIC0xMjMsMjEgKzEyMywyMSBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2RldmVsb3BtZW50X3NldHRpbmdzX3Nob3dfc2xlZXBfdGV4dCIgLz4KICAgICAgICAgICAgIAogICAgICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3dpbmRvd19hbmltYXRpb25fc2NhbGUiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3Nob3dfc2xlZXAiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiPgogICAgICAgICA8L1NwaW5uZXI+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+IGZ1dHVyZSkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0JhZEJlaGF2aW9yQWN0aXZpdHkuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0JhZEJlaGF2aW9yQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTU5ZmJjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQmFkQmVoYXZpb3JBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZXZlbG9wbWVudDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JUG93ZXJNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworCitwdWJsaWMgY2xhc3MgQmFkQmVoYXZpb3JBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkJhZEJlaGF2aW9yQWN0aXZpdHkiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQmFkQmVoYXZpb3JFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgQmFkQmVoYXZpb3JFeGNlcHRpb24oKSB7CisgICAgICAgICAgICBzdXBlcigiV2hhdGNoYSBnb25uYSBkbywgd2hhdGNoYSBnb25uYSBkbyIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldoZW4gdGhleSBjb21lIGZvciB5b3UiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJhZFJlY2VpdmVyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgTG9nLmkoVEFHLCAiaW4gQmFkUmVjZWl2ZXIub25SZWNlaXZlKCkgLS0gYWJvdXQgdG8gaGFuZyIpOworICAgICAgICAgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDIwMDAwKTsgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeyBMb2cud3RmKFRBRywgZSk7IH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJhZFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJQmluZGVyIG9uQmluZChJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IG9uU3RhcnRDb21tYW5kKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IGlkKSB7CisgICAgICAgICAgICBMb2cuaShUQUcsICJpbiBCYWRTZXJ2aWNlLm9uU3RhcnRDb21tYW5kKCkgLS0gYWJvdXQgdG8gaGFuZyIpOworICAgICAgICAgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDMwMDAwKTsgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeyBMb2cud3RmKFRBRywgZSk7IH0KKyAgICAgICAgICAgIHN0b3BTZWxmKCk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfTk9UX1NUSUNLWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKKworICAgICAgICBpZiAoZ2V0SW50ZW50KCkuZ2V0Qm9vbGVhbkV4dHJhKCJhbnIiLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgImluIEFOUiBhY3Rpdml0eSAtLSBhYm91dCB0byBoYW5nIik7CisgICAgICAgICAgICB0cnkgeyBUaHJlYWQuc2xlZXAoMjAwMDApOyB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7IExvZy53dGYoVEFHLCBlKTsgfQorICAgICAgICAgICAgZmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5iYWRfYmVoYXZpb3IpOworCisgICAgICAgIEJ1dHRvbiBjcmFzaF9zeXN0ZW0gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfY3Jhc2hfc3lzdGVtKTsKKyAgICAgICAgY3Jhc2hfc3lzdGVtLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIElCaW5kZXIgYiA9IFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoUE9XRVJfU0VSVklDRSk7CisgICAgICAgICAgICAgICAgICAgIElQb3dlck1hbmFnZXIgcG0gPSBJUG93ZXJNYW5hZ2VyLlN0dWIuYXNJbnRlcmZhY2UoYik7CisgICAgICAgICAgICAgICAgICAgIHBtLmNyYXNoKCJDcmFzaGVkIGJ5IEJhZEJlaGF2aW9yQWN0aXZpdHkiKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDYW4ndCBjYWxsIElQb3dlck1hbmFnZXIuY3Jhc2goKSIsIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQnV0dG9uIGNyYXNoX21haW4gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfY3Jhc2hfbWFpbik7CisgICAgICAgIGNyYXNoX21haW4uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7IHRocm93IG5ldyBCYWRCZWhhdmlvckV4Y2VwdGlvbigpOyB9CisgICAgICAgIH0pOworCisgICAgICAgIEJ1dHRvbiBjcmFzaF90aHJlYWQgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfY3Jhc2hfdGhyZWFkKTsKKyAgICAgICAgY3Jhc2hfdGhyZWFkLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIG5ldyBUaHJlYWQoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7IHRocm93IG5ldyBCYWRCZWhhdmlvckV4Y2VwdGlvbigpOyB9CisgICAgICAgICAgICAgICAgfS5zdGFydCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBCdXR0b24gY3Jhc2hfbmF0aXZlID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuYmFkX2JlaGF2aW9yX2NyYXNoX25hdGl2ZSk7CisgICAgICAgIGNyYXNoX25hdGl2ZS5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBGb3Igc29tZSByZWFzb24sIHRoZSBKVk0gbmVlZHMgdHdvIG9mIHRoZXNlIHRvIGdldCB0aGUgaGludAorICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIk5hdGl2ZSBjcmFzaCBwcmVzc2VkIC0tIGFib3V0IHRvIGtpbGwgLTExIHNlbGYiKTsKKyAgICAgICAgICAgICAgICBQcm9jZXNzLnNlbmRTaWduYWwoUHJvY2Vzcy5teVBpZCgpLCAxMSk7CisgICAgICAgICAgICAgICAgUHJvY2Vzcy5zZW5kU2lnbmFsKFByb2Nlc3MubXlQaWQoKSwgMTEpOworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkZpbmlzaGVkIGtpbGwgLTExLCBzaG91bGQgYmUgZGVhZCBvciBkeWluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBCdXR0b24gd3RmID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuYmFkX2JlaGF2aW9yX3d0Zik7CisgICAgICAgIHd0Zi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsgTG9nLnd0ZihUQUcsICJBcHBzIEJlaGF2aW5nIEJhZGx5Iik7IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQnV0dG9uIGFuciA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmJhZF9iZWhhdmlvcl9hbnIpOworICAgICAgICBhbnIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQU5SIHByZXNzZWQgLS0gYWJvdXQgdG8gaGFuZyIpOworICAgICAgICAgICAgICAgIHRyeSB7IFRocmVhZC5zbGVlcCgyMDAwMCk7IH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsgTG9nLnd0ZihUQUcsIGUpOyB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEJ1dHRvbiBhbnJfYWN0aXZpdHkgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfYW5yX2FjdGl2aXR5KTsKKyAgICAgICAgYW5yX2FjdGl2aXR5LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEJhZEJlaGF2aW9yQWN0aXZpdHkudGhpcywgQmFkQmVoYXZpb3JBY3Rpdml0eS5jbGFzcyk7CisgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQU5SIGFjdGl2aXR5IHByZXNzZWQgLS0gYWJvdXQgdG8gbGF1bmNoIik7CisgICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQucHV0RXh0cmEoImFuciIsIHRydWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQnV0dG9uIGFucl9icm9hZGNhc3QgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5iYWRfYmVoYXZpb3JfYW5yX2Jyb2FkY2FzdCk7CisgICAgICAgIGFucl9icm9hZGNhc3Quc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQU5SIGJyb2FkY2FzdCBwcmVzc2VkIC0tIGFib3V0IHRvIHNlbmQiKTsKKyAgICAgICAgICAgICAgICBzZW5kT3JkZXJlZEJyb2FkY2FzdChuZXcgSW50ZW50KCJjb20uYW5kcm9pZC5kZXZlbG9wbWVudC5CQURfQkVIQVZJT1IiKSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEJ1dHRvbiBhbnJfc2VydmljZSA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmJhZF9iZWhhdmlvcl9hbnJfc2VydmljZSk7CisgICAgICAgIGFucl9zZXJ2aWNlLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIkFOUiBzZXJ2aWNlIHByZXNzZWQgLS0gYWJvdXQgdG8gc3RhcnQiKTsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChCYWRCZWhhdmlvckFjdGl2aXR5LnRoaXMsIEJhZFNlcnZpY2UuY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQ29ubmVjdGl2aXR5LmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9Db25uZWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTE1N2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvQ29ubmVjdGl2aXR5LmphdmEKQEAgLTAsMCArMSwzNTEgQEAKKy8qIC8vZGV2aWNlL2FwcHMvU2V0dGluZ3Mvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzL0tleWd1YXJkLmphdmEKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZXZlbG9wbWVudDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOworaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlci5XYWtlTG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXJOYXRpdmU7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQ2hlY2tCb3g7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQ29tcG91bmRCdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlBob25lOworCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBDb25uZWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb25uZWN0aXZpdHkiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1RPR0dMRV9XSUZJID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfVE9HR0xFX1NDUkVFTiA9IDI7CisKKyAgICBwcml2YXRlIEJ1dHRvbiBtRW5hYmxlV2lmaUJ1dHRvbjsKKyAgICBwcml2YXRlIEJ1dHRvbiBtRGlzYWJsZVdpZmlCdXR0b247CisKKyAgICBwcml2YXRlIEJ1dHRvbiBtU3RhcnREZWxheWVkQ3ljbGVCdXR0b247CisgICAgcHJpdmF0ZSBCdXR0b24gbVN0b3BEZWxheWVkQ3ljbGVCdXR0b247CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtRENPbkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1EQ09mZkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIFRleHRWaWV3IG1EQ0N5Y2xlQ291bnRWaWV3OworICAgIHByaXZhdGUgbG9uZyBtRENPbkR1cmF0aW9uID0gMTIwMDAwOworICAgIHByaXZhdGUgbG9uZyBtRENPZmZEdXJhdGlvbiA9IDEyMDAwMDsKKyAgICBwcml2YXRlIGludCBtRENDeWNsZUNvdW50ID0gMDsKKworICAgIHByaXZhdGUgQnV0dG9uIG1TdGFydFNjcmVlbkN5Y2xlQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wU2NyZWVuQ3ljbGVCdXR0b247CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtU0NPbkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1TQ09mZkR1cmF0aW9uRWRpdDsKKyAgICBwcml2YXRlIFRleHRWaWV3IG1TQ0N5Y2xlQ291bnRWaWV3OworICAgIHByaXZhdGUgbG9uZyBtU0NPbkR1cmF0aW9uID0gMTIwMDAwOworICAgIHByaXZhdGUgbG9uZyBtU0NPZmZEdXJhdGlvbiA9IDEyMDAwOworICAgIHByaXZhdGUgaW50IG1TQ0N5Y2xlQ291bnQgPSAwOworCisgICAgcHJpdmF0ZSBCdXR0b24gbVN0YXJ0TW1zQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wTW1zQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdGFydEhpUHJpQnV0dG9uOworICAgIHByaXZhdGUgQnV0dG9uIG1TdG9wSGlQcmlCdXR0b247CisgICAgcHJpdmF0ZSBCdXR0b24gbUNyYXNoQnV0dG9uOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1EZWxheWVkQ3ljbGVTdGFydGVkID0gZmFsc2U7CisKKyAgICBwcml2YXRlIFdpZmlNYW5hZ2VyIG1XbTsKKyAgICBwcml2YXRlIFBvd2VyTWFuYWdlciBtUG07CisgICAgcHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyIG1DbTsKKworICAgIHByaXZhdGUgV2FrZUxvY2sgbVdha2VMb2NrID0gbnVsbDsKKyAgICBwcml2YXRlIFdha2VMb2NrIG1TY3JlZW5vbldha2VMb2NrID0gbnVsbDsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtU2NyZWVuT2ZmVG9nZ2xlUnVubmluZyA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2NyZWVuT2ZmID0gZmFsc2U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVElWSVRZX1RFU1RfQUxBUk0gPQorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmRldmVsb3BtZW50LkNPTk5FQ1RJVklUWV9URVNUX0FMQVJNIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9BTEFSTV9FWFRSQSA9ICJDT05ORUNUSVZJVFlfVEVTVF9FWFRSQSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfQUxBUk1fT05fRVhUUkEgPSAiQ09OTkVDVElWSVRZX1RFU1RfT05fRVhUUkEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0FMQVJNX09GRl9FWFRSQSA9ICJDT05ORUNUSVZJVFlfVEVTVF9PRkZfRVhUUkEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0FMQVJNX0NZQ0xFX0VYVFJBID0gIkNPTk5FQ1RJVklUWV9URVNUX0NZQ0xFX0VYVFJBIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NSRUVOX09OID0gIlNDUkVFTl9PTiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDUkVFTl9PRkYgPSAiU0NSRUVOX09GRiI7CisgICAgcHVibGljIEJyb2FkY2FzdFJlY2VpdmVyIG1SZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgaWYgKGludGVudC5nZXRBY3Rpb24oKS5lcXVhbHMoQ09OTkVDVElWSVRZX1RFU1RfQUxBUk0pKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4dHJhID0gKFN0cmluZylpbnRlbnQuZ2V0RXh0cmEoVEVTVF9BTEFSTV9FWFRSQSk7CisgICAgICAgICAgICAgICAgUG93ZXJNYW5hZ2VyIHBtID0gKFBvd2VyTWFuYWdlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5QT1dFUl9TRVJWSUNFKTsKKyAgICAgICAgICAgICAgICBMb25nIG9uID0gbmV3IExvbmcoMTIwMDAwKTsKKyAgICAgICAgICAgICAgICBMb25nIG9mZiA9IG5ldyBMb25nKDEyMDAwMCk7CisgICAgICAgICAgICAgICAgaW50IGN5Y2xlID0gMDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBvbiA9IExvbmcucGFyc2VMb25nKChTdHJpbmcpaW50ZW50LmdldEV4dHJhKFRFU1RfQUxBUk1fT05fRVhUUkEpKTsKKyAgICAgICAgICAgICAgICAgICAgb2ZmID0gTG9uZy5wYXJzZUxvbmcoKFN0cmluZylpbnRlbnQuZ2V0RXh0cmEoVEVTVF9BTEFSTV9PRkZfRVhUUkEpKTsKKyAgICAgICAgICAgICAgICAgICAgY3ljbGUgPSBJbnRlZ2VyLnBhcnNlSW50KChTdHJpbmcpaW50ZW50LmdldEV4dHJhKFRFU1RfQUxBUk1fQ1lDTEVfRVhUUkEpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKworICAgICAgICAgICAgICAgIGlmIChleHRyYS5lcXVhbHMoU0NSRUVOX09OKSkgeworICAgICAgICAgICAgICAgICAgICBtU2NyZWVub25XYWtlTG9jayA9IG1QbS5uZXdXYWtlTG9jayhQb3dlck1hbmFnZXIuRlVMTF9XQUtFX0xPQ0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyTWFuYWdlci5BQ1FVSVJFX0NBVVNFU19XQUtFVVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpdml0eVRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgbVNjcmVlbm9uV2FrZUxvY2suYWNxdWlyZSgpOworCisgICAgICAgICAgICAgICAgICAgIG1TQ0N5Y2xlQ291bnQgPSBjeWNsZSsxOworICAgICAgICAgICAgICAgICAgICBtU0NPbkR1cmF0aW9uID0gb247CisgICAgICAgICAgICAgICAgICAgIG1TQ09mZkR1cmF0aW9uID0gb2ZmOworICAgICAgICAgICAgICAgICAgICBtU0NDeWNsZUNvdW50Vmlldy5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcobVNDQ3ljbGVDb3VudCkpOworCisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlQWxhcm0obVNDT25EdXJhdGlvbiwgU0NSRUVOX09GRik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5lcXVhbHMoU0NSRUVOX09GRikpIHsKKworICAgICAgICAgICAgICAgICAgICBtU0NDeWNsZUNvdW50ID0gY3ljbGU7CisgICAgICAgICAgICAgICAgICAgIG1TQ09uRHVyYXRpb24gPSBvbjsKKyAgICAgICAgICAgICAgICAgICAgbVNDT2ZmRHVyYXRpb24gPSBvZmY7CisKKyAgICAgICAgICAgICAgICAgICAgbVNjcmVlbm9uV2FrZUxvY2sucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBtU2NyZWVub25XYWtlTG9jayA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlQWxhcm0obVNDT2ZmRHVyYXRpb24sIFNDUkVFTl9PTik7CisgICAgICAgICAgICAgICAgICAgIHBtLmdvVG9TbGVlcChTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHB1YmxpYyBIYW5kbGVyIG1IYW5kbGVyMiA9IG5ldyBIYW5kbGVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgICAgICBzd2l0Y2gobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEVWRU5UX1RPR0dMRV9XSUZJOgorICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJFVkVOVF9UT0dHTEVfV0lGSSIpOworICAgICAgICAgICAgICAgICAgICBpZiAobURlbGF5ZWRDeWNsZVN0YXJ0ZWQgJiYgbVdtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVsYXk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1XbS5nZXRXaWZpU3RhdGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9FTkFCTEVEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgV2lmaU1hbmFnZXIuV0lGSV9TVEFURV9FTkFCTElORzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdtLnNldFdpZmlFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBtRENPZmZEdXJhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVdtLnNldFdpZmlFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheSA9IG1EQ09uRHVyYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EQ0N5Y2xlQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURDQ3ljbGVDb3VudFZpZXcuc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKG1EQ0N5Y2xlQ291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChvYnRhaW5NZXNzYWdlKEVWRU5UX1RPR0dMRV9XSUZJKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKKworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5jb25uZWN0aXZpdHkpOworCisgICAgICAgIG1XbSA9IChXaWZpTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9TRVJWSUNFKTsKKyAgICAgICAgbVBtID0gKFBvd2VyTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuUE9XRVJfU0VSVklDRSk7CisgICAgICAgIG1DbSA9IChDb25uZWN0aXZpdHlNYW5hZ2VyKSBnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOworCisgICAgICAgIG1FbmFibGVXaWZpQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5lbmFibGVXaWZpKTsKKyAgICAgICAgbUVuYWJsZVdpZmlCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1FbmFibGVXaWZpQ2xpY2tlZCk7CisgICAgICAgIG1EaXNhYmxlV2lmaUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZGlzYWJsZVdpZmkpOworICAgICAgICBtRGlzYWJsZVdpZmlCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1EaXNhYmxlV2lmaUNsaWNrZWQpOworCisgICAgICAgIG1TdGFydERlbGF5ZWRDeWNsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnREZWxheWVkQ3ljbGUpOworICAgICAgICBtU3RhcnREZWxheWVkQ3ljbGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydERlbGF5ZWRDeWNsZUNsaWNrZWQpOworICAgICAgICBtU3RvcERlbGF5ZWRDeWNsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RvcERlbGF5ZWRDeWNsZSk7CisgICAgICAgIG1TdG9wRGVsYXllZEN5Y2xlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RvcERlbGF5ZWRDeWNsZUNsaWNrZWQpOworICAgICAgICBtRENPbkR1cmF0aW9uRWRpdCA9IChFZGl0VGV4dClmaW5kVmlld0J5SWQoUi5pZC5kY193aWZpX29uX2R1cmF0aW9uKTsKKyAgICAgICAgbURDT25EdXJhdGlvbkVkaXQuc2V0VGV4dChMb25nLnRvU3RyaW5nKG1EQ09uRHVyYXRpb24pKTsKKyAgICAgICAgbURDT2ZmRHVyYXRpb25FZGl0ID0gKEVkaXRUZXh0KWZpbmRWaWV3QnlJZChSLmlkLmRjX3dpZmlfb2ZmX2R1cmF0aW9uKTsKKyAgICAgICAgbURDT2ZmRHVyYXRpb25FZGl0LnNldFRleHQoTG9uZy50b1N0cmluZyhtRENPZmZEdXJhdGlvbikpOworICAgICAgICBtRENDeWNsZUNvdW50VmlldyA9IChUZXh0VmlldylmaW5kVmlld0J5SWQoUi5pZC5kY193aWZpX2N5Y2xlc19kb25lKTsKKyAgICAgICAgbURDQ3ljbGVDb3VudFZpZXcuc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKG1EQ0N5Y2xlQ291bnQpKTsKKworICAgICAgICBtU3RhcnRTY3JlZW5DeWNsZUJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRTY3JlZW5DeWNsZSk7CisgICAgICAgIG1TdGFydFNjcmVlbkN5Y2xlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRTY3JlZW5DeWNsZUNsaWNrZWQpOworICAgICAgICBtU3RvcFNjcmVlbkN5Y2xlQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wU2NyZWVuQ3ljbGUpOworICAgICAgICBtU3RvcFNjcmVlbkN5Y2xlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RvcFNjcmVlbkN5Y2xlQ2xpY2tlZCk7CisgICAgICAgIG1TQ09uRHVyYXRpb25FZGl0ID0gKEVkaXRUZXh0KWZpbmRWaWV3QnlJZChSLmlkLnNjX3dpZmlfb25fZHVyYXRpb24pOworICAgICAgICBtU0NPbkR1cmF0aW9uRWRpdC5zZXRUZXh0KExvbmcudG9TdHJpbmcobVNDT25EdXJhdGlvbikpOworICAgICAgICBtU0NPZmZEdXJhdGlvbkVkaXQgPSAoRWRpdFRleHQpZmluZFZpZXdCeUlkKFIuaWQuc2Nfd2lmaV9vZmZfZHVyYXRpb24pOworICAgICAgICBtU0NPZmZEdXJhdGlvbkVkaXQuc2V0VGV4dChMb25nLnRvU3RyaW5nKG1TQ09mZkR1cmF0aW9uKSk7CisgICAgICAgIG1TQ0N5Y2xlQ291bnRWaWV3ID0gKFRleHRWaWV3KWZpbmRWaWV3QnlJZChSLmlkLnNjX3dpZmlfY3ljbGVzX2RvbmUpOworICAgICAgICBtU0NDeWNsZUNvdW50Vmlldy5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcobVNDQ3ljbGVDb3VudCkpOworCisgICAgICAgIG1TdGFydE1tc0J1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRfbW1zKTsKKyAgICAgICAgbVN0YXJ0TW1zQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRNbXNDbGlja2VkKTsKKyAgICAgICAgbVN0b3BNbXNCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3BfbW1zKTsKKyAgICAgICAgbVN0b3BNbXNCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdG9wTW1zQ2xpY2tlZCk7CisgICAgICAgIG1TdGFydEhpUHJpQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydF9oaXByaSk7CisgICAgICAgIG1TdGFydEhpUHJpQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRIaVByaUNsaWNrZWQpOworICAgICAgICBtU3RvcEhpUHJpQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wX2hpcHJpKTsKKyAgICAgICAgbVN0b3BIaVByaUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BIaVByaUNsaWNrZWQpOworICAgICAgICBtQ3Jhc2hCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmNyYXNoKTsKKyAgICAgICAgbUNyYXNoQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtQ3Jhc2hDbGlja2VkKTsKKworICAgICAgICByZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlciwgbmV3IEludGVudEZpbHRlcihDT05ORUNUSVZJVFlfVEVTVF9BTEFSTSkpOworICAgIH0KKworCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblJlc3VtZSgpIHsKKyAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdGFydERlbGF5ZWRDeWNsZUNsaWNrZWQgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICBpZiAoIW1EZWxheWVkQ3ljbGVTdGFydGVkKSB7CisgICAgICAgICAgICAgICAgbURlbGF5ZWRDeWNsZVN0YXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1EQ09uRHVyYXRpb24gPSBMb25nLnBhcnNlTG9uZyhtRENPbkR1cmF0aW9uRWRpdC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIG1EQ09mZkR1cmF0aW9uID0gTG9uZy5wYXJzZUxvbmcobURDT2ZmRHVyYXRpb25FZGl0LmdldFRleHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9OworICAgICAgICAgICAgICAgIG1EQ0N5Y2xlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgbVdha2VMb2NrID0gbVBtLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5GVUxMX1dBS0VfTE9DSywgIkNvbm5lY3Rpdml0eVRlc3QiKTsKKyAgICAgICAgICAgICAgICBtV2FrZUxvY2suYWNxdWlyZSgpOworICAgICAgICAgICAgICAgIG1IYW5kbGVyMi5zZW5kTWVzc2FnZShtSGFuZGxlcjIub2J0YWluTWVzc2FnZShFVkVOVF9UT0dHTEVfV0lGSSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdG9wRGVsYXllZEN5Y2xlQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIGlmIChtRGVsYXllZEN5Y2xlU3RhcnRlZCkgeworICAgICAgICAgICAgICAgIG1EZWxheWVkQ3ljbGVTdGFydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbVdha2VMb2NrLnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBtV2FrZUxvY2sgPSBudWxsOworICAgICAgICAgICAgICAgIGlmKG1IYW5kbGVyMi5oYXNNZXNzYWdlcyhFVkVOVF9UT0dHTEVfV0lGSSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIyLnJlbW92ZU1lc3NhZ2VzKEVWRU5UX1RPR0dMRV9XSUZJKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtRW5hYmxlV2lmaUNsaWNrZWQgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICBtV20uc2V0V2lmaUVuYWJsZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIHByaXZhdGUgVmlldy5PbkNsaWNrTGlzdGVuZXIgbURpc2FibGVXaWZpQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1XbS5zZXRXaWZpRW5hYmxlZChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtU3RhcnRTY3JlZW5DeWNsZUNsaWNrZWQgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNDT25EdXJhdGlvbiA9IExvbmcucGFyc2VMb25nKG1TQ09uRHVyYXRpb25FZGl0LmdldFRleHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBtU0NPZmZEdXJhdGlvbiA9IExvbmcucGFyc2VMb25nKG1TQ09mZkR1cmF0aW9uRWRpdC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9OworICAgICAgICAgICAgbVNDQ3ljbGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgIG1TY3JlZW5vbldha2VMb2NrID0gbVBtLm5ld1dha2VMb2NrKFBvd2VyTWFuYWdlci5GVUxMX1dBS0VfTE9DSywKKyAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpdml0eVRlc3QiKTsKKyAgICAgICAgICAgIG1TY3JlZW5vbldha2VMb2NrLmFjcXVpcmUoKTsKKworICAgICAgICAgICAgc2NoZWR1bGVBbGFybSgxMCwgU0NSRUVOX09GRik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSB2b2lkIHNjaGVkdWxlQWxhcm0obG9uZyBkZWxheU1zLCBTdHJpbmcgZXZlbnRUeXBlKSB7CisgICAgICAgIEFsYXJtTWFuYWdlciBhbSA9IChBbGFybU1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFMQVJNX1NFUlZJQ0UpOworICAgICAgICBJbnRlbnQgaSA9IG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX1RFU1RfQUxBUk0pOworCisgICAgICAgIGkucHV0RXh0cmEoVEVTVF9BTEFSTV9FWFRSQSwgZXZlbnRUeXBlKTsKKyAgICAgICAgaS5wdXRFeHRyYShURVNUX0FMQVJNX09OX0VYVFJBLCBMb25nLnRvU3RyaW5nKG1TQ09uRHVyYXRpb24pKTsKKyAgICAgICAgaS5wdXRFeHRyYShURVNUX0FMQVJNX09GRl9FWFRSQSwgTG9uZy50b1N0cmluZyhtU0NPZmZEdXJhdGlvbikpOworICAgICAgICBpLnB1dEV4dHJhKFRFU1RfQUxBUk1fQ1lDTEVfRVhUUkEsIEludGVnZXIudG9TdHJpbmcobVNDQ3ljbGVDb3VudCkpOworCisgICAgICAgIFBlbmRpbmdJbnRlbnQgcCA9IFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KHRoaXMsIDAsIGksIFBlbmRpbmdJbnRlbnQuRkxBR19VUERBVEVfQ1VSUkVOVCk7CisKKyAgICAgICAgYW0uc2V0KEFsYXJtTWFuYWdlci5FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUCwgU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgKyBkZWxheU1zLCBwKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdG9wU2NyZWVuQ3ljbGVDbGlja2VkID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgVmlldy5PbkNsaWNrTGlzdGVuZXIgbVN0YXJ0TW1zQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1DbS5zdGFydFVzaW5nTmV0d29ya0ZlYXR1cmUoQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX01PQklMRSwgUGhvbmUuRkVBVFVSRV9FTkFCTEVfTU1TKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBwcml2YXRlIFZpZXcuT25DbGlja0xpc3RlbmVyIG1TdG9wTW1zQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1DbS5zdG9wVXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLCBQaG9uZS5GRUFUVVJFX0VOQUJMRV9NTVMpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgVmlldy5PbkNsaWNrTGlzdGVuZXIgbVN0YXJ0SGlQcmlDbGlja2VkID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgbUNtLnN0YXJ0VXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLAorICAgICAgICAgICAgICAgICAgICBQaG9uZS5GRUFUVVJFX0VOQUJMRV9ISVBSSSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtU3RvcEhpUHJpQ2xpY2tlZCA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgIG1DbS5zdG9wVXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLAorICAgICAgICAgICAgICAgICAgICBQaG9uZS5GRUFUVVJFX0VOQUJMRV9ISVBSSSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBtQ3Jhc2hDbGlja2VkID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgQ29ubmVjdGl2aXR5TWFuYWdlciBmb28gPSBudWxsOworICAgICAgICAgICAgZm9vLnN0YXJ0VXNpbmdOZXR3b3JrRmVhdHVyZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFLAorICAgICAgICAgICAgICAgICAgICBQaG9uZS5GRUFUVVJFX0VOQUJMRV9NTVMpOworICAgICAgICB9CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0RldGFpbHMuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0RldGFpbHMuamF2YQppbmRleCAxNjcyMmEzLi5lMGRhOTYxIDEwMDY0NAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9EZXRhaWxzLmphdmEKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvRGV0YWlscy5qYXZhCkBAIC0yNyw3ICsyNyw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiAKQEAgLTc1LDggKzc0LDggQEAKICAgICAgICAgfQogICAgICAgICBtTGluZWFyTGF5b3V0ID0gbmV3IExpbmVhckxheW91dCh0aGlzKTsKICAgICAgICAgbVNjcm9sbFZpZXcuYWRkVmlldyhtTGluZWFyTGF5b3V0LCBuZXcgVmlld0dyb3VwLkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkpOwogICAgICAgICBtTGluZWFyTGF5b3V0LnNldE9yaWVudGF0aW9uKExpbmVhckxheW91dC5WRVJUSUNBTCk7CiAKICAgICAgICAgLy8gSGVyZSBpbiBvblN0YXJ0LCB3ZSdyZSBnaXZlbiBkYXRhLiAgV2UgdXNlIHRoYXQgYmVjYXVzZSBzb21lCkBAIC0xMDksNyArMTA4LDcgQEAKICAgICAKICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxhenkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgIHJldHVybiBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5ULCAwKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0V4Y2VwdGlvbkJyb3dzZXIuamF2YSBiL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L0V4Y2VwdGlvbkJyb3dzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMyNzBhYS4uMDAwMDAwMAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9FeGNlcHRpb25Ccm93c2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSoqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQ7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5MaXN0QWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkNvbnRlbnRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkRhdGFTZXRPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5DaGVja2luOwotaW1wb3J0IGFuZHJvaWQuc2VydmVyLmRhdGEuQ3Jhc2hEYXRhOwotaW1wb3J0IGFuZHJvaWQuc2VydmVyLmRhdGEuVGhyb3dhYmxlRGF0YTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC4qOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLmJpbmFyeS5CYXNlNjQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLS8qKgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGNlcHRpb25Ccm93c2VyIGV4dGVuZHMgTGlzdEFjdGl2aXR5IHsKLSAgICAvKiogTG9nZ2luZyBpZGVudGlmaWVyLiAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRXhjZXB0aW9uQnJvd3NlciI7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgaWNpY2xlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKGljaWNsZSk7Ci0KLSAgICAgICAgQ3Vyc29yIGN1cnNvciA9IGdldENvbnRlbnRSZXNvbHZlcigpLnF1ZXJ5KAotICAgICAgICAgICAgICAgIENoZWNraW4uQ3Jhc2hlcy5DT05URU5UX1VSSSwKLSAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyBDaGVja2luLkNyYXNoZXMuX0lELCBDaGVja2luLkNyYXNoZXMuREFUQSB9LAotICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwpOwotCi0gICAgICAgIGlmIChjdXJzb3IgIT0gbnVsbCkgewotICAgICAgICAgICAgc3RhcnRNYW5hZ2luZ0N1cnNvcihjdXJzb3IpOwotCi0gICAgICAgICAgICBzZXRMaXN0QWRhcHRlcihuZXcgQ3Vyc29yQWRhcHRlcih0aGlzLCBjdXJzb3IsIHRydWUpIHsKLSAgICAgICAgICAgICAgICBwdWJsaWMgVmlldyBuZXdWaWV3KENvbnRleHQgY29udGV4dCwgQ3Vyc29yIGMsIFZpZXdHcm91cCB2KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ3Jhc2hMaXN0SXRlbShjb250ZXh0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBiaW5kVmlldyhWaWV3IHZpZXcsIENvbnRleHQgYywgQ3Vyc29yIGN1cnNvcikgewotICAgICAgICAgICAgICAgICAgICBDcmFzaExpc3RJdGVtIGl0ZW0gPSAoQ3Jhc2hMaXN0SXRlbSkgdmlldzsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhID0gY3Vyc29yLmdldFN0cmluZygxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENyYXNoRGF0YSBjcmFzaCA9IG5ldyBDcmFzaERhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGFJbnB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZTY0LmRlY29kZUJhc2U2NChkYXRhLmdldEJ5dGVzKCkpKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBUaHJvd2FibGVEYXRhIGV4YyA9IGNyYXNoLmdldFRocm93YWJsZURhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGV4dChleGMuZ2V0VHlwZSgpICsgIjogIiArIGV4Yy5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRDcmFzaERhdGEoY3Jhc2gpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFRleHQoIkludmFsaWQgY3Jhc2g6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgY3Jhc2giLCBlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm8gZGF0YWJhc2UsIG5vIGV4Y2VwdGlvbnMsIGVtcHR5IGxpc3QuCi0gICAgICAgICAgICBzZXRMaXN0QWRhcHRlcihuZXcgQmFzZUFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgcHVibGljIGludCBnZXRDb3VudCgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHVibGljIE9iamVjdCBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdWJsaWMgbG9uZyBnZXRJdGVtSWQoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBWaWV3IGdldFZpZXcoaW50IHBvc2l0aW9uLCBWaWV3IGNvbnZlcnRWaWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgVmlld0dyb3VwIHBhcmVudCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBVUExPQURfSUQgPSBNZW51LkZJUlNUOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDTEVBUl9JRCA9IE1lbnUuRklSU1QgKyAxOwotCi0gICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKLQotICAgICAgICBtZW51LmFkZCgwLCBVUExPQURfSUQsIDAsIFIuc3RyaW5nLm1lbnVfdXBsb2FkX2V4Y2VwdGlvbnMpOwotICAgICAgICBtZW51LmFkZCgwLCBDTEVBUl9JRCwgMCwgUi5zdHJpbmcubWVudV9jbGVhcl9leGNlcHRpb25zKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uT3B0aW9uc0l0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7Ci0gICAgICAgIC8vIEhhbmRsZSBhbGwgb2YgdGhlIHBvc3NpYmxlIG1lbnUgYWN0aW9ucy4KLSAgICAgICAgc3dpdGNoIChpdGVtLmdldEl0ZW1JZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFVQTE9BRF9JRDoKLSAgICAgICAgICAgICAgICBzZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ2hlY2tpbi5UcmlnZ2VySW50ZW50LkFDVElPTikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDTEVBUl9JRDoKLSAgICAgICAgICAgICAgICBnZXRDb250ZW50UmVzb2x2ZXIoKS5kZWxldGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBDaGVja2luLkNyYXNoZXMuQ09OVEVOVF9VUkksIG51bGwsIG51bGwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdXBlci5vbk9wdGlvbnNJdGVtU2VsZWN0ZWQoaXRlbSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIENyYXNoTGlzdEl0ZW0gZXh0ZW5kcyBUZXh0VmlldyB7Ci0gICAgICAgIENyYXNoRGF0YSBjcmFzaERhdGEgPSBudWxsOwotCi0gICAgICAgIHB1YmxpYyBDcmFzaExpc3RJdGVtKENvbnRleHQgY29udGV4dCkgewotICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBzZXRUZXh0U2l6ZSgxMCk7Ci0gICAgICAgICAgICBzZXRUeXBlZmFjZShUeXBlZmFjZS5NT05PU1BBQ0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIENyYXNoRGF0YSBnZXRDcmFzaERhdGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gY3Jhc2hEYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Q3Jhc2hEYXRhKENyYXNoRGF0YSBjcmFzaERhdGEpIHsKLSAgICAgICAgICAgIHRoaXMuY3Jhc2hEYXRhID0gY3Jhc2hEYXRhOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25MaXN0SXRlbUNsaWNrKExpc3RWaWV3IGwsIFZpZXcgdmlldywgaW50IHBvcywgbG9uZyBpZCkgewotICAgICAgICAvLyBUT0RPOiBVc2UgYSBnZW5lcmljIFZJRVcgYWN0aW9uIG9uIHRoZSBjcmFzaCdzIGNvbnRlbnQgVVJJLgotICAgICAgICBDcmFzaERhdGEgY3Jhc2ggPSAoKENyYXNoTGlzdEl0ZW0pIHZpZXcpLmdldENyYXNoRGF0YSgpOwotICAgICAgICBpZiAoY3Jhc2ggIT0gbnVsbCkgewotICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKTsKLSAgICAgICAgICAgIGludGVudC5zZXRDbGFzcyh0aGlzLCBTdGFja3RyYWNlVmlld2VyLmNsYXNzKTsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYSgKLSAgICAgICAgICAgICAgICAgICAgQ3Jhc2hEYXRhLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgY3Jhc2guZ2V0VGhyb3dhYmxlRGF0YSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvR0xTVGVzdGVyLmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9HTFNUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk5NWI0ZC4uMDAwMDAwMAotLS0gYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9HTFNUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5kZXZlbG9wbWVudDsKLQotaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLkdvb2dsZUxvZ2luQ3JlZGVudGlhbHNSZXN1bHQ7Ci1pbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmdvb2dsZWxvZ2luLkdvb2dsZUxvZ2luU2VydmljZUNvbnN0YW50czsKLWltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuZ29vZ2xlYXBwcy5JR29vZ2xlTG9naW5TZXJ2aWNlOwotaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5nb29nbGVhcHBzLkxvZ2luRGF0YTsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5DaGVja0JveDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5TcGlubmVyOwotCi0vKioKLSAqIFVzaW5nIGEgTG9nVGV4dEJveCB0byBkaXNwbGF5IGEgc2Nyb2xsYWJsZSB0ZXh0IGFyZWEKLSAqIHRvIHdoaWNoIHRleHQgaXMgYXBwZW5kZWQuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgR0xTVGVzdGVyIGV4dGVuZHMgQWN0aXZpdHkgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJHTFNUZXN0ZXIiOwotCi0gICAgcHJpdmF0ZSBMb2dUZXh0Qm94IG1UZXh0OwotCi0gICAgcHJpdmF0ZSBJR29vZ2xlTG9naW5TZXJ2aWNlIG1HbHMgPSBudWxsOwotICAgIHByaXZhdGUgU2VydmljZUNvbm5lY3Rpb24gbUNvbm5lY3Rpb24gPSBudWxsOwotCi0gICAgQ2hlY2tCb3ggbURvTm90aWZ5ID0gbnVsbDsKLSAgICBDaGVja0JveCBtUnVuSW50ZW50ID0gbnVsbDsKLSAgICBTcGlubmVyIG1TZXJ2aWNlID0gbnVsbDsKLSAgICBFZGl0VGV4dCBtVXNlcm5hbWVFZGl0ID0gbnVsbDsKLQotICAgIHByaXZhdGUgY2xhc3MgTGlzdGVuZXIgaW1wbGVtZW50cyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciB7Ci0gICAgICAgIHB1YmxpYyBMaXN0ZW5lcigpIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBpZiAobUdscyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJtR2xzIGlzIG51bGxcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2UgPSAoU3RyaW5nKSBtU2VydmljZS5nZXRTZWxlY3RlZEl0ZW0oKTsKLSAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoInNlcnZpY2U6ICIgKyBzZXJ2aWNlICsgIlxuIik7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgYWNjb3VudCA9IG1Vc2VybmFtZUVkaXQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjY291bnQubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhY2NvdW50ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJhY2NvdW50OiAiICsgYWNjb3VudCArICJcbiIpOwotICAgICAgICAgICAgICAgIEdvb2dsZUxvZ2luQ3JlZGVudGlhbHNSZXN1bHQgcmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgICAgbUdscy5ibG9ja2luZ0dldENyZWRlbnRpYWxzKGFjY291bnQsIHNlcnZpY2UsIG1Eb05vdGlmeS5pc0NoZWNrZWQoKSk7Ci0gICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJyZXN1bHQgYWNjb3VudDogIiArIHJlc3VsdC5nZXRBY2NvdW50KCkgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoInJlc3VsdCBzdHJpbmc6ICIgKyByZXN1bHQuZ2V0Q3JlZGVudGlhbHNTdHJpbmcoKSArICJcbiIpOwotICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSByZXN1bHQuZ2V0Q3JlZGVudGlhbHNJbnRlbnQoKTsKLSAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoInJlc3VsdCBpbnRlbnQ6ICIgKyBpbnRlbnQgKyAiXG4iKTsKLQotICAgICAgICAgICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCAmJiBtUnVuSW50ZW50LmlzQ2hlY2tlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiY2F1Z2h0IGV4Y2VwdGlvbiAiICsgZSArICJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgZGF0YSkgewotICAgICAgICBtVGV4dC5hcHBlbmQoInJlc3VsdENvZGU6ICIgKyByZXN1bHRDb2RlICsgIlxuIik7Ci0gICAgICAgIGlmIChkYXRhICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiYWNjb3VudDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXRTdHJpbmdFeHRyYShHb29nbGVMb2dpblNlcnZpY2VDb25zdGFudHMuQVVUSF9BQ0NPVU5UX0tFWSkgKyAiXG4iKTsKLSAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiYXV0aHRva2VuOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmdldFN0cmluZ0V4dHJhKEdvb2dsZUxvZ2luU2VydmljZUNvbnN0YW50cy5BVVRIVE9LRU5fS0VZKSArICJcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJpbnRlbnQgaXMgbnVsbCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIC8vIE9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSBHb29nbGUgTG9naW4gU2VydmljZS4gIFJldHVybiB0aGUgYWNjb3VudC4KLSAgICAgICAgbUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbUdscyA9IElHb29nbGVMb2dpblNlcnZpY2UuU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1HbHMgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgYmluZFNlcnZpY2UoR29vZ2xlTG9naW5TZXJ2aWNlQ29uc3RhbnRzLlNFUlZJQ0VfSU5URU5ULAotICAgICAgICAgICAgICAgICAgICBtQ29ubmVjdGlvbiwgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFKTsKLQotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5nbHNfdGVzdGVyKTsKLQotICAgICAgICBtVGV4dCA9IChMb2dUZXh0Qm94KSBmaW5kVmlld0J5SWQoUi5pZC50ZXh0KTsKLSAgICAgICAgbVRleHQuYXBwZW5kKCJIZWxsbywgd29ybGQhXG4iKTsKLSAgICAgICAgTG9nLnYoVEFHLCAiaGVsbG8sIHdvcmxkISIpOwotCi0gICAgICAgIG1Eb05vdGlmeSA9IChDaGVja0JveCkgZmluZFZpZXdCeUlkKFIuaWQuZG9fbm90aWZpY2F0aW9uKTsKLSAgICAgICAgbVJ1bkludGVudCA9IChDaGVja0JveCkgZmluZFZpZXdCeUlkKFIuaWQucnVuX2ludGVudCk7Ci0gICAgICAgIG1SdW5JbnRlbnQuc2V0Q2hlY2tlZCh0cnVlKTsKLQotICAgICAgICBtU2VydmljZSA9IChTcGlubmVyKSBmaW5kVmlld0J5SWQoUi5pZC5zZXJ2aWNlX3NwaW5uZXIpOwotCi0gICAgICAgIG1Vc2VybmFtZUVkaXQgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLnVzZXJuYW1lX2VkaXQpOwotCi0gICAgICAgIEJ1dHRvbiBiOwotICAgICAgICBiID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQucmVxdWlyZV9nb29nbGUpOwotICAgICAgICBiLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBhY2NvdW50ID0gbUdscy5nZXRBY2NvdW50KEdvb2dsZUxvZ2luU2VydmljZUNvbnN0YW50cy5SRVFVSVJFX0dPT0dMRSk7Ci0gICAgICAgICAgICAgICAgICAgIG1UZXh0LmFwcGVuZCgiUkVRVUlSRV9HT09HTEUgZ2F2ZTogIiArIGFjY291bnQgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbVVzZXJuYW1lRWRpdC5zZXRUZXh0KGFjY291bnQgPT0gbnVsbCA/ICIiIDogYWNjb3VudCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJleGNlcHRpb246ICIgKyBlICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB9KTsKLQotICAgICAgICBiID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQucHJlZmVyX2hvc3RlZCk7Ci0gICAgICAgIGIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFjY291bnQgPSBtR2xzLmdldEFjY291bnQoR29vZ2xlTG9naW5TZXJ2aWNlQ29uc3RhbnRzLlBSRUZFUl9IT1NURUQpOwotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoIlBSRUZFUl9IT1NURUQgZ2F2ZTogIiArIGFjY291bnQgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbVVzZXJuYW1lRWRpdC5zZXRUZXh0KGFjY291bnQgPT0gbnVsbCA/ICIiIDogYWNjb3VudCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJleGNlcHRpb246ICIgKyBlICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB9KTsKLQotCi0gICAgICAgIGIgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5nZXRfYWNjb3VudHMpOwotICAgICAgICBiLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGFjY291bnRzID0gbUdscy5nZXRBY2NvdW50cygpOwotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImFjY291bnQgbGlzdDogKCIgKyBhY2NvdW50cy5sZW5ndGggKyAiIGVudHJpZXMpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgdXNlcm5hbWU6IGFjY291bnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoIiAgIiArIHVzZXJuYW1lICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoImV4Y2VwdGlvbjogIiArIGUgKyAiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IH0pOwotCi0gICAgICAgIGIgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5jbGVhcik7Ci0gICAgICAgIGIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgbVRleHQuc2V0VGV4dCgiIik7Ci0gICAgICAgICAgICB9IH0pOwotCi0gICAgICAgIGIgPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5nbyk7Ci0gICAgICAgIGIuc2V0T25DbGlja0xpc3RlbmVyKG5ldyBMaXN0ZW5lcigpKTsKLQotICAgICAgICBiID0gKEJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQud2lwZV9wYXNzd29yZHMpOwotICAgICAgICBiLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgICAgIG1UZXh0LnNldFRleHQoIndpcGluZyBwYXNzd29yZHM6XG4iKTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBhY2NvdW50cyA9IG1HbHMuZ2V0QWNjb3VudHMoKTsKLSAgICAgICAgICAgICAgICAgICAgTG9naW5EYXRhIGxkID0gbmV3IExvZ2luRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyB1c2VybmFtZTogYWNjb3VudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxkLm1Vc2VybmFtZSA9IHVzZXJuYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgbUdscy51cGRhdGVQYXNzd29yZChsZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVGV4dC5hcHBlbmQoIiAgIiArIHVzZXJuYW1lICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJkb25lLlxuIik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbVRleHQuYXBwZW5kKCJjYXVnaHQgZXhjZXB0aW9uICIgKyBlICsgIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB9KTsKLQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGVzdHJveSgpIHsKLSAgICAgICAgc3VwZXIub25EZXN0cm95KCk7Ci0gICAgICAgIHVuYmluZFNlcnZpY2UobUNvbm5lY3Rpb24pOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L1BhY2thZ2VTdW1tYXJ5LmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9QYWNrYWdlU3VtbWFyeS5qYXZhCmluZGV4IDU2MTA1NTkuLjU4YWIwZjcgMTAwNjQ0Ci0tLSBhL2FwcHMvRGV2ZWxvcG1lbnQvc3JjL2NvbS9hbmRyb2lkL2RldmVsb3BtZW50L1BhY2thZ2VTdW1tYXJ5LmphdmEKKysrIGIvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvUGFja2FnZVN1bW1hcnkuamF2YQpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICBtUmVzdGFydC5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJlc3RhcnRQYWNrYWdlKG1QYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLmtpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzKG1QYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9TdGFja3RyYWNlVmlld2VyLmphdmEgYi9hcHBzL0RldmVsb3BtZW50L3NyYy9jb20vYW5kcm9pZC9kZXZlbG9wbWVudC9TdGFja3RyYWNlVmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YjA1MjEuLjAwMDAwMDAKLS0tIGEvYXBwcy9EZXZlbG9wbWVudC9zcmMvY29tL2FuZHJvaWQvZGV2ZWxvcG1lbnQvU3RhY2t0cmFjZVZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSoqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuZGV2ZWxvcG1lbnQ7Ci0KLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGFuZHJvaWQudGV4dC5tZXRob2QuU2Nyb2xsaW5nTW92ZW1lbnRNZXRob2Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5DcmFzaERhdGE7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5UaHJvd2FibGVEYXRhOwotaW1wb3J0IGFuZHJvaWQuc2VydmVyLmRhdGEuU3RhY2tUcmFjZUVsZW1lbnREYXRhOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2U7Ci0KLS8qKgotICogVmlld3MgYSBzaW5nbGUgc3RhY2sgdHJhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdGFja3RyYWNlVmlld2VyIGV4dGVuZHMgQWN0aXZpdHkgewotCi0gICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5sb2dfdmlld2VyKTsKLQotICAgICAgICBUZXh0VmlldyB0ZXh0ID0gKFRleHRWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC50ZXh0KTsKLSAgICAgICAgdGV4dC5zZXRUZXh0U2l6ZSgxMCk7Ci0gICAgICAgIHRleHQuc2V0SG9yaXpvbnRhbGx5U2Nyb2xsaW5nKHRydWUpOwotICAgICAgICB0ZXh0LnNldFR5cGVmYWNlKFR5cGVmYWNlLk1PTk9TUEFDRSk7Ci0gICAgICAgIHRleHQuc2V0TW92ZW1lbnRNZXRob2QoU2Nyb2xsaW5nTW92ZW1lbnRNZXRob2QuZ2V0SW5zdGFuY2UoKSk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc3RhY2t0cmFjZSA9IGdldEludGVudCgpLmdldEV4dHJhcygpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBDcmFzaERhdGEuY2xhc3MuZ2V0TmFtZSgpKTsKLQotICAgICAgICB0ZXh0LnNldFRleHQoc3RhY2t0cmFjZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvYXBwcy9GYWxsYmFjay9BbmRyb2lkLm1rIGIvYXBwcy9GYWxsYmFjay9BbmRyb2lkLm1rCmluZGV4IDBhN2Y1Y2YuLmNiNGZmYzQgMTAwNjQ0Ci0tLSBhL2FwcHMvRmFsbGJhY2svQW5kcm9pZC5taworKysgYi9hcHBzL0ZhbGxiYWNrL0FuZHJvaWQubWsKQEAgLTEsNyArMSw3IEBACiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB1c2VyCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKIApkaWZmIC0tZ2l0IGEvYXBwcy9Gb250TGFiL3Jlcy9sYXlvdXQvZm9udF9sYWIueG1sIGIvYXBwcy9Gb250TGFiL3Jlcy9sYXlvdXQvZm9udF9sYWIueG1sCmluZGV4IDFhNzlhZGQuLmZmOWRiMzEgMTAwNjQ0Ci0tLSBhL2FwcHMvRm9udExhYi9yZXMvbGF5b3V0L2ZvbnRfbGFiLnhtbAorKysgYi9hcHBzL0ZvbnRMYWIvcmVzL2xheW91dC9mb250X2xhYi54bWwKQEAgLTE2LDE0ICsxNiwxNCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAK2lkL2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjRkaXAiIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSI0ZGlwIgogICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iNGRpcCIgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIj4KICAgICAgICAgCi0gICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvY29sdW1uMSIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9jb2x1bW4xIiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSI4ZGlwIiAvPgotICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2NvbHVtbjIiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIiBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+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+CiAgICAgICAgICAgICAKICAgICAgICAgICAgIDxyZXF1ZXN0Rm9jdXMvPgpkaWZmIC0tZ2l0IGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXkuamF2YSBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5LmphdmEKaW5kZXggNzk1NDhkNC4uYjFjNzVmMSAxMDA2NDQKLS0tIGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXkuamF2YQorKysgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleS5qYXZhCkBAIC0yMywyNSArMjMsMjggQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5EZWJ1ZzsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2ZXIuZGF0YS5DcmFzaERhdGE7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5zZWN1cml0eS5TZWN1cmVSYW5kb207CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogLyoqCiAgKiBBcHBsaWNhdGlvbiB0aGF0IGluamVjdHMgcmFuZG9tIGtleSBldmVudHMgYW5kIG90aGVyIGFjdGlvbnMgaW50byB0aGUgc3lzdGVtLgpAQCAtMTE4LDkgKzEyMSwxOCBAQAogICAgIC8qKiBHZW5lcmF0ZSBocHJvZiByZXBvcnRzIGJlZm9yZS9hZnRlciBtb25rZXkgcnVucyAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBtR2VuZXJhdGVIcHJvZjsKIAorICAgIC8qKiBQYWNrYWdlIGJsYWNrbGlzdCBmaWxlLiAqLworICAgIHByaXZhdGUgU3RyaW5nIG1Qa2dCbGFja2xpc3RGaWxlOworCisgICAgLyoqIFBhY2thZ2Ugd2hpdGVsaXN0IGZpbGUuICovCisgICAgcHJpdmF0ZSBTdHJpbmcgbVBrZ1doaXRlbGlzdEZpbGU7CisKICAgICAvKiogUGFja2FnZXMgd2UgYXJlIGFsbG93ZWQgdG8gcnVuLCBvciBlbXB0eSBpZiBubyByZXN0cmljdGlvbi4gKi8KICAgICBwcml2YXRlIEhhc2hTZXQ8U3RyaW5nPiBtVmFsaWRQYWNrYWdlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKIAorICAgIC8qKiBQYWNrYWdlcyB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcnVuLiAqLworICAgIHByaXZhdGUgSGFzaFNldDxTdHJpbmc+IG1JbnZhbGlkUGFja2FnZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKICAgICAvKiogQ2F0ZWdvcmllcyB3ZSBhcmUgYWxsb3dlZCB0byBsYXVuY2ggKiovCiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtTWFpbkNhdGVnb3JpZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKIApAQCAtMTMwLDEyICsxNDIsMTggQEAKICAgICAvKiogVGhlIGRlbGF5IGJldHdlZW4gZXZlbnQgaW5wdXRzICoqLwogICAgIGxvbmcgbVRocm90dGxlID0gMDsKIAorICAgIC8qKiBXaGV0aGVyIHRvIHJhbmRvbWl6ZSBlYWNoIHRocm90dGxlICgwLW1UaHJvdHRsZSBtcykgaW5zZXJ0ZWQgYmV0d2VlbiBldmVudHMuICovCisgICAgYm9vbGVhbiBtUmFuZG9taXplVGhyb3R0bGUgPSBmYWxzZTsKKwogICAgIC8qKiBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgKiovCiAgICAgaW50IG1Db3VudCA9IDEwMDA7CiAKICAgICAvKiogVGhlIHJhbmRvbSBudW1iZXIgc2VlZCAqKi8KICAgICBsb25nIG1TZWVkID0gMDsKIAorICAgIC8qKiBUaGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKiovCisgICAgUmFuZG9tIG1SYW5kb20gPSBudWxsOworCiAgICAgLyoqIERyb3BwZWQtZXZlbnQgc3RhdGlzdGljcyAqKi8KICAgICBsb25nIG1Ecm9wcGVkS2V5RXZlbnRzID0gMDsKIApAQCAtMTcwLDYgKzE4OCwyNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGN1cnJlbnRQYWNrYWdlOwogCiAgICAgLyoqCisgICAgICogQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgcnVuIGFnYWluc3QgdGhlIGdpdm4gcGFja2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwa2cgVGhlIHBhY2thZ2UgbmFtZS4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgcnVuIGFnYWluc3QgcGtnLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0VudGVyaW5nUGFja2FnZShTdHJpbmcgcGtnKSB7CisgICAgICAgIGlmIChtSW52YWxpZFBhY2thZ2VzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIGlmIChtSW52YWxpZFBhY2thZ2VzLmNvbnRhaW5zKHBrZykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobVZhbGlkUGFja2FnZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgaWYgKCFtVmFsaWRQYWNrYWdlcy5jb250YWlucyhwa2cpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgogICAgICAqIE1vbml0b3Igb3BlcmF0aW9ucyBoYXBwZW5pbmcgaW4gdGhlIHN5c3RlbS4KICAgICAgKi8KICAgICBwcml2YXRlIGNsYXNzIEFjdGl2aXR5Q29udHJvbGxlciBleHRlbmRzIElBY3Rpdml0eUNvbnRyb2xsZXIuU3R1YiB7CkBAIC0xOTcsMzkgKzIzNCwxNiBAQAogICAgICAgICAgICAgcmV0dXJuIGFsbG93OwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrRW50ZXJpbmdQYWNrYWdlKFN0cmluZyBwa2cpIHsKLSAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gcHJlZmxpZ2h0IHRoZSBoYXNoIGxvb2t1cCB0byBhdm9pZCB0aGUgY29zdCBvZiBoYXNoIGtleQotICAgICAgICAgICAgLy8gZ2VuZXJhdGlvbgotICAgICAgICAgICAgaWYgKG1WYWxpZFBhY2thZ2VzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBtVmFsaWRQYWNrYWdlcy5jb250YWlucyhwa2cpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gYXBwQ3Jhc2hlZChTdHJpbmcgcHJvY2Vzc05hbWUsIGludCBwaWQsIFN0cmluZyBzaG9ydE1zZywgU3RyaW5nIGxvbmdNc2csCi0gICAgICAgICAgICAgICAgYnl0ZVtdIGNyYXNoRGF0YSkgeworICAgICAgICBwdWJsaWMgYm9vbGVhbiBhcHBDcmFzaGVkKFN0cmluZyBwcm9jZXNzTmFtZSwgaW50IHBpZCwKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRNc2csIFN0cmluZyBsb25nTXNnLAorICAgICAgICAgICAgICAgIGxvbmcgdGltZU1pbGxpcywgU3RyaW5nIHN0YWNrVHJhY2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gQ1JBU0g6ICIgKyBwcm9jZXNzTmFtZSArICIgKHBpZCAiICsgcGlkICsgIikiKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gU2hvcnQgTXNnOiAiICsgc2hvcnRNc2cpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBMb25nIE1zZzogIiArIGxvbmdNc2cpOwotICAgICAgICAgICAgaWYgKGNyYXNoRGF0YSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgQ3Jhc2hEYXRhIGNkID0gbmV3IENyYXNoRGF0YShuZXcgRGF0YUlucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFzaERhdGEpKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gQnVpbGQgTGFiZWw6ICIgKyBjZC5nZXRCdWlsZERhdGEoKS5nZXRGaW5nZXJwcmludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBCdWlsZCBDaGFuZ2VsaXN0OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjZC5nZXRCdWlsZERhdGEoKS5nZXRJbmNyZW1lbnRhbFZlcnNpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gQnVpbGQgVGltZTogIiArIGNkLmdldEJ1aWxkRGF0YSgpLmdldFRpbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gSUQ6ICIgKyBjZC5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBUYWc6ICIgKyBjZC5nZXRBY3Rpdml0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGNkLmdldFRocm93YWJsZURhdGEoKS50b1N0cmluZygiLy8gIikpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBCQUQgU1RBQ0sgQ1JBV0wiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIi8vIEJ1aWxkIExhYmVsOiAiICsgQnVpbGQuRklOR0VSUFJJTlQpOworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIvLyBCdWlsZCBDaGFuZ2VsaXN0OiAiICsgQnVpbGQuVkVSU0lPTi5JTkNSRU1FTlRBTCk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIi8vIEJ1aWxkIFRpbWU6ICIgKyBCdWlsZC5USU1FKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiLy8gIiArIHN0YWNrVHJhY2UucmVwbGFjZSgiXG4iLCAiXG4vLyAiKSk7CiAKICAgICAgICAgICAgIGlmICghbUlnbm9yZUNyYXNoZXMpIHsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKE1vbmtleS50aGlzKSB7CkBAIC0zNzEsNiArMzg1LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoIWxvYWRQYWNrYWdlTGlzdHMoKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKICAgICAgICAgLy8gbm93IHNldCB1cCBhZGRpdGlvbmFsIGRhdGEgaW4gcHJlcGFyYXRpb24gZm9yIGxhdW5jaAogICAgICAgICBpZiAobU1haW5DYXRlZ29yaWVzLnNpemUoKSA9PSAwKSB7CiAgICAgICAgICAgICBtTWFpbkNhdGVnb3JpZXMuYWRkKEludGVudC5DQVRFR09SWV9MQVVOQ0hFUik7CkBAIC0zODUsNiArNDAzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiOkFsbG93UGFja2FnZTogIiArIGl0Lm5leHQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1JbnZhbGlkUGFja2FnZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXQgPSBtSW52YWxpZFBhY2thZ2VzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjpEaXNhbGxvd1BhY2thZ2U6ICIgKyBpdC5uZXh0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtTWFpbkNhdGVnb3JpZXMuc2l6ZSgpICE9IDApIHsKICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ID0gbU1haW5DYXRlZ29yaWVzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewpAQCAtNDA1LDE5ICs0MjksMjQgQEAKICAgICAgICAgICAgIHJldHVybiAtNDsKICAgICAgICAgfQogCisgICAgICAgIG1SYW5kb20gPSBuZXcgU2VjdXJlUmFuZG9tKCk7CisgICAgICAgIG1SYW5kb20uc2V0U2VlZCgobVNlZWQgPT0gMCkgPyAtMSA6IG1TZWVkKTsKKwogICAgICAgICBpZiAobVNjcmlwdEZpbGVOYW1lcyAhPSBudWxsICYmIG1TY3JpcHRGaWxlTmFtZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgIC8vIHNjcmlwdCBtb2RlLCBpZ25vcmUgb3RoZXIgb3B0aW9ucwotICAgICAgICAgICAgbUV2ZW50U291cmNlID0gbmV3IE1vbmtleVNvdXJjZVNjcmlwdChtU2NyaXB0RmlsZU5hbWVzLmdldCgwKSwgbVRocm90dGxlKTsKKyAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VTY3JpcHQobVJhbmRvbSwgbVNjcmlwdEZpbGVOYW1lcy5nZXQoMCksIG1UaHJvdHRsZSwKKyAgICAgICAgICAgICAgICAgICAgbVJhbmRvbWl6ZVRocm90dGxlKTsKICAgICAgICAgICAgIG1FdmVudFNvdXJjZS5zZXRWZXJib3NlKG1WZXJib3NlKTsKIAogICAgICAgICAgICAgbUNvdW50RXZlbnRzID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAobVNjcmlwdEZpbGVOYW1lcyAhPSBudWxsICYmIG1TY3JpcHRGaWxlTmFtZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgaWYgKG1TZXR1cEZpbGVOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtRXZlbnRTb3VyY2UgPSBuZXcgTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0KG1TZXR1cEZpbGVOYW1lLCBtU2NyaXB0RmlsZU5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgbVRocm90dGxlLCBtU2VlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtVGhyb3R0bGUsIG1SYW5kb21pemVUaHJvdHRsZSwgbVJhbmRvbSk7CiAgICAgICAgICAgICAgICAgbUNvdW50Kys7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VSYW5kb21TY3JpcHQobVNjcmlwdEZpbGVOYW1lcywgbVRocm90dGxlLCBtU2VlZCk7CisgICAgICAgICAgICAgICAgbUV2ZW50U291cmNlID0gbmV3IE1vbmtleVNvdXJjZVJhbmRvbVNjcmlwdChtU2NyaXB0RmlsZU5hbWVzLCBtVGhyb3R0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBtUmFuZG9taXplVGhyb3R0bGUsIG1SYW5kb20pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbUV2ZW50U291cmNlLnNldFZlcmJvc2UobVZlcmJvc2UpOwogICAgICAgICAgICAgbUNvdW50RXZlbnRzID0gZmFsc2U7CkBAIC00MzQsNyArNDYzLDcgQEAKICAgICAgICAgICAgIGlmIChtVmVyYm9zZSA+PSAyKSB7IC8vIGNoZWNrIHNlZWRpbmcgcGVyZm9ybWFuY2UKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi8vIFNlZWRlZDogIiArIG1TZWVkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VSYW5kb20obVNlZWQsIG1NYWluQXBwcywgbVRocm90dGxlKTsKKyAgICAgICAgICAgIG1FdmVudFNvdXJjZSA9IG5ldyBNb25rZXlTb3VyY2VSYW5kb20obVJhbmRvbSwgbU1haW5BcHBzLCBtVGhyb3R0bGUsIG1SYW5kb21pemVUaHJvdHRsZSk7CiAgICAgICAgICAgICBtRXZlbnRTb3VyY2Uuc2V0VmVyYm9zZShtVmVyYm9zZSk7CiAgICAgICAgICAgICAvLyBzZXQgYW55IG9mIHRoZSBmYWN0b3JzIHRoYXQgaGFzIGJlZW4gc2V0CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1vbmtleVNvdXJjZVJhbmRvbS5GQUNUT1JaX0NPVU5UOyBpKyspIHsKQEAgLTU3Nyw4ICs2MDYsMTQgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHMoIi0tcGN0LWFueWV2ZW50IikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBNb25rZXlTb3VyY2VSYW5kb20uRkFDVE9SX0FOWVRISU5HOwogICAgICAgICAgICAgICAgICAgICBtRmFjdG9yc1tpXSA9IC1uZXh0T3B0aW9uTG9uZygiYW55IGV2ZW50cyBwZXJjZW50YWdlIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLXBrZy1ibGFja2xpc3QtZmlsZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1Qa2dCbGFja2xpc3RGaWxlID0gbmV4dE9wdGlvbkRhdGEoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5lcXVhbHMoIi0tcGtnLXdoaXRlbGlzdC1maWxlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbVBrZ1doaXRlbGlzdEZpbGUgPSBuZXh0T3B0aW9uRGF0YSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0LmVxdWFscygiLS10aHJvdHRsZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1UaHJvdHRsZSA9IG5leHRPcHRpb25Mb25nKCJkZWxheSAoaW4gbWlsbGlzZWNvbmRzKSB0byB3YWl0IGJldHdlZW4gZXZlbnRzIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLXJhbmRvbWl6ZS10aHJvdHRsZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1SYW5kb21pemVUaHJvdHRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLXdhaXQtZGJnIikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyAtIGl0J3MgY2F1Z2h0IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHJ1bigpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZXF1YWxzKCItLWRiZy1uby1ldmVudHMiKSkgewpAQCAtNjI3LDYgKzY2Miw2MiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIExvYWQgYSBsaXN0IG9mIHBhY2thZ2UgbmFtZXMgZnJvbSBhIGZpbGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZmlsZU5hbWUgVGhlIGZpbGUgbmFtZSwgd2l0aCBwYWNrYWdlIG5hbWVzIHNlcGFyYXRlZCBieSBuZXcgbGluZS4KKyAgICAgKiBAcGFyYW0gbGlzdCBUaGUgZGVzdGluYXRpb24gbGlzdC4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgZmFsc2UgaWYgYW55IGVycm9yIG9jY3Vycy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGxvYWRQYWNrYWdlTGlzdEZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSwgSGFzaFNldDxTdHJpbmc+IGxpc3QpIHsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlTmFtZSkpOworICAgICAgICAgICAgU3RyaW5nIHM7CisgICAgICAgICAgICB3aGlsZSAoKHMgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHMgPSBzLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoKHMubGVuZ3RoKCkgPiAwKSAmJiAoIXMuc3RhcnRzV2l0aCgiIyIpKSkgeworICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZChzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWQgcGFja2FnZSBibGFja2xpc3Qgb3Igd2hpdGVsaXN0IChpZiBzcGVjaWZpZWQpLgorICAgICAqCisgICAgICogQHJldHVybiBSZXR1cm5zIGZhbHNlIGlmIGFueSBlcnJvciBvY2N1cnMuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGxvYWRQYWNrYWdlTGlzdHMoKSB7CisgICAgICAgIGlmICgoKG1Qa2dXaGl0ZWxpc3RGaWxlICE9IG51bGwpIHx8IChtVmFsaWRQYWNrYWdlcy5zaXplKCkgPiAwKSkKKyAgICAgICAgICAgICAgICAmJiAobVBrZ0JsYWNrbGlzdEZpbGUgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiKiogRXJyb3I6IHlvdSBjYW4gbm90IHNwZWNpZnkgYSBwYWNrYWdlIGJsYWNrbGlzdCAiCisgICAgICAgICAgICAgICAgICAgICsgInRvZ2V0aGVyIHdpdGggYSB3aGl0ZWxpc3Qgb3IgaW5kaXZpZHVhbCBwYWNrYWdlcyAodmlhIC1wKS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1Qa2dXaGl0ZWxpc3RGaWxlICE9IG51bGwpCisgICAgICAgICAgICAgICAgJiYgKCFsb2FkUGFja2FnZUxpc3RGcm9tRmlsZShtUGtnV2hpdGVsaXN0RmlsZSwgbVZhbGlkUGFja2FnZXMpKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICgobVBrZ0JsYWNrbGlzdEZpbGUgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAmJiAoIWxvYWRQYWNrYWdlTGlzdEZyb21GaWxlKG1Qa2dCbGFja2xpc3RGaWxlLCBtSW52YWxpZFBhY2thZ2VzKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDaGVjayBmb3IgYW55IGludGVybmFsIGNvbmZpZ3VyYXRpb24gKHByaW1hcmlseSBidWlsZC10aW1lKSBlcnJvcnMuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiByZWFkeSB0byByb2NrLgpAQCAtNzEyLDIwICs4MDMsMTcgQEAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTkEgPSBtYWluQXBwcy5zaXplKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgYSA9IDA7IGEgPCBOQTsgYSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVJbmZvIHIgPSBtYWluQXBwcy5nZXQoYSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtVmFsaWRQYWNrYWdlcy5zaXplKCkgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1WYWxpZFBhY2thZ2VzLmNvbnRhaW5zKHIuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5wYWNrYWdlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gci5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tFbnRlcmluZ1BhY2thZ2UocGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVZlcmJvc2UgPj0gMikgeyAvLyB2ZXJ5IHZlcmJvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi8vICAgKyBVc2luZyBtYWluIGFjdGl2aXR5ICIgKyByLmFjdGl2aXR5SW5mby5uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgKGZyb20gcGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHIuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5wYWNrYWdlTmFtZSArICIpIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgKGZyb20gcGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbU1haW5BcHBzLmFkZChuZXcgQ29tcG9uZW50TmFtZShyLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuYWN0aXZpdHlJbmZvLm5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1NYWluQXBwcy5hZGQobmV3IENvbXBvbmVudE5hbWUocGFja2FnZU5hbWUsIHIuYWN0aXZpdHlJbmZvLm5hbWUpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVmVyYm9zZSA+PSAzKSB7IC8vIHZlcnkgdmVyeSB2ZXJib3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIvLyAgIC0gTk9UIFVTSU5HIG1haW4gYWN0aXZpdHkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByLmFjdGl2aXR5SW5mby5uYW1lICsgIiAoZnJvbSBwYWNrYWdlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgci5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lICsgIikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgci5hY3Rpdml0eUluZm8ubmFtZSArICIgKGZyb20gcGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNzUyLDcgKzg0MCw2IEBACiAgICAgICogICAgICAgICBlcnJvcnMgZGV0ZWN0ZWQuCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgcnVuTW9ua2V5Q3ljbGVzKCkgewotCiAgICAgICAgIGludCBldmVudENvdW50ZXIgPSAwOwogICAgICAgICBpbnQgY3ljbGVDb3VudGVyID0gMDsKIApAQCAtNzk4LDcgKzg4NSw2IEBACiAKICAgICAgICAgICAgIE1vbmtleUV2ZW50IGV2ID0gbUV2ZW50U291cmNlLmdldE5leHRFdmVudCgpOwogICAgICAgICAgICAgaWYgKGV2ICE9IG51bGwpIHsKLQogICAgICAgICAgICAgICAgIGludCBpbmplY3RDb2RlID0gZXYuaW5qZWN0RXZlbnQobVdtLCBtQW0sIG1WZXJib3NlKTsKICAgICAgICAgICAgICAgICBpZiAoaW5qZWN0Q29kZSA9PSBNb25rZXlFdmVudC5JTkpFQ1RfRkFJTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBNb25rZXlLZXlFdmVudCkgewpAQCAtODI5LDEzICs5MTUsMTEgQEAKICAgICAgICAgICAgICAgICBpZiAoIW1Db3VudEV2ZW50cykgewogICAgICAgICAgICAgICAgICAgICBjeWNsZUNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIioqIEVycm9yOiBFdmVudCBzb3VyY2UgZXhoYXVzdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAvLyBFdmVudCBTb3VyY2UgaGFzIHNpZ25hbGVkIHRoYXQgd2UgaGF2ZSBubyBtb3JlIGV2ZW50cyB0byBwcm9jZXNzCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciwgd2Ugc3VjY2VlZGVkIQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV2ZW50cyBpbmplY3RlZDogIiArIGV2ZW50Q291bnRlcik7CiAgICAgICAgIHJldHVybiBldmVudENvdW50ZXI7CiAgICAgfQpAQCAtOTk0LDEwICsxMDc4LDEzIEBACiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wY3QtbmF2IFBFUkNFTlRdIFstLXBjdC1tYWpvcm5hdiBQRVJDRU5UXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wY3QtYXBwc3dpdGNoIFBFUkNFTlRdIFstLXBjdC1mbGlwIFBFUkNFTlRdXG4iKTsKICAgICAgICAgdXNhZ2UuYXBwZW5kKCIgICAgICAgICAgICAgIFstLXBjdC1hbnlldmVudCBQRVJDRU5UXVxuIik7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wa2ctYmxhY2tsaXN0LWZpbGUgUEFDS0FHRV9CTEFDS0xJU1RfRklMRV1cbiIpOworICAgICAgICB1c2FnZS5hcHBlbmQoIiAgICAgICAgICAgICAgWy0tcGtnLXdoaXRlbGlzdC1maWxlIFBBQ0tBR0VfV0hJVEVMSVNUX0ZJTEVdXG4iKTsKICAgICAgICAgdXNhZ2UuYXBwZW5kKCIgICAgICAgICAgICAgIFstLXdhaXQtZGJnXSBbLS1kYmctbm8tZXZlbnRzXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1zZXR1cCBzY3JpcHRmaWxlXSBbLWYgc2NyaXB0ZmlsZSBbLWYgc2NyaXB0ZmlsZV0gLi4uXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS1wb3J0IHBvcnRdXG4iKTsKLSAgICAgICAgdXNhZ2UuYXBwZW5kKCIgICAgICAgICAgICAgIFstcyBTRUVEXSBbLXYgWy12XSAuLi5dIFstLXRocm90dGxlIE1JTExJU0VDXVxuIik7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLXMgU0VFRF0gWy12IFstdl0gLi4uXVxuIik7CisgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBbLS10aHJvdHRsZSBNSUxMSVNFQ10gWy0tcmFuZG9taXplLXRocm90dGxlXVxuIik7CiAgICAgICAgIHVzYWdlLmFwcGVuZCgiICAgICAgICAgICAgICBDT1VOVCIpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4odXNhZ2UudG9TdHJpbmcoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlFdmVudFF1ZXVlLmphdmEgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleUV2ZW50UXVldWUuamF2YQppbmRleCBkZmUzODlhLi4wMGU0NmI3IDEwMDY0NAotLS0gYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleUV2ZW50UXVldWUuamF2YQorKysgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleUV2ZW50UXVldWUuamF2YQpAQCAtMTcsMjUgKzE3LDM5IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmNvbW1hbmRzLm1vbmtleTsKIAogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CiAKIC8qKgogICogY2xhc3MgZm9yIGtlZXBpbmcgYSBtb25rZXkgZXZlbnQgcXVldWUKICAqLwogQFN1cHByZXNzV2FybmluZ3MoInNlcmlhbCIpCi1wdWJsaWMgY2xhc3MgTW9ua2V5RXZlbnRRdWV1ZSBleHRlbmRzIExpbmtlZExpc3Q8TW9ua2V5RXZlbnQ+IHsgICAKK3B1YmxpYyBjbGFzcyBNb25rZXlFdmVudFF1ZXVlIGV4dGVuZHMgTGlua2VkTGlzdDxNb25rZXlFdmVudD4gewogCisgICAgcHJpdmF0ZSBSYW5kb20gbVJhbmRvbTsKICAgICBwcml2YXRlIGxvbmcgbVRocm90dGxlOwotICAgIAotICAgIHB1YmxpYyBNb25rZXlFdmVudFF1ZXVlKGxvbmcgdGhyb3R0bGUpIHsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVJhbmRvbWl6ZVRocm90dGxlOworCisgICAgcHVibGljIE1vbmtleUV2ZW50UXVldWUoUmFuZG9tIHJhbmRvbSwgbG9uZyB0aHJvdHRsZSwgYm9vbGVhbiByYW5kb21pemVUaHJvdHRsZSkgewogICAgICAgICBzdXBlcigpOworICAgICAgICBtUmFuZG9tID0gcmFuZG9tOwogICAgICAgICBtVGhyb3R0bGUgPSB0aHJvdHRsZTsKKyAgICAgICAgbVJhbmRvbWl6ZVRocm90dGxlID0gcmFuZG9taXplVGhyb3R0bGU7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgYWRkTGFzdChNb25rZXlFdmVudCBlKSB7CiAgICAgICAgIHN1cGVyLmFkZChlKTsKICAgICAgICAgaWYgKGUuaXNUaHJvdHRsYWJsZSgpKSB7Ci0gICAgICAgICAgICBzdXBlci5hZGQobmV3IE1vbmtleVRocm90dGxlRXZlbnQobVRocm90dGxlKSk7CisgICAgICAgICAgICBsb25nIHRocm90dGxlID0gbVRocm90dGxlOworICAgICAgICAgICAgaWYgKG1SYW5kb21pemVUaHJvdHRsZSAmJiAobVRocm90dGxlID4gMCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdHRsZSA9IG1SYW5kb20ubmV4dExvbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhyb3R0bGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm90dGxlID0gLXRocm90dGxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aHJvdHRsZSAlPSBtVGhyb3R0bGU7CisgICAgICAgICAgICAgICAgKyt0aHJvdHRsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLmFkZChuZXcgTW9ua2V5VGhyb3R0bGVFdmVudCh0aHJvdHRsZSkpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VSYW5kb20uamF2YSBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5U291cmNlUmFuZG9tLmphdmEKaW5kZXggNWM3ZmRiYy4uNmZhMDI5ZSAxMDA2NDQKLS0tIGEvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VSYW5kb20uamF2YQorKysgYi9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVJhbmRvbS5qYXZhCkBAIC0yMyw5ICsyMyw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VySW1wbDsKIAotaW1wb3J0IGphdmEuc2VjdXJpdHkuU2VjdXJlUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogLyoqCkBAIC0yMDIsNyArMjAwLDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHB1YmxpYyBNb25rZXlTb3VyY2VSYW5kb20obG9uZyBzZWVkLCBBcnJheUxpc3Q8Q29tcG9uZW50TmFtZT4gTWFpbkFwcHMsIGxvbmcgdGhyb3R0bGUpIHsKKyAgICBwdWJsaWMgTW9ua2V5U291cmNlUmFuZG9tKFJhbmRvbSByYW5kb20sIEFycmF5TGlzdDxDb21wb25lbnROYW1lPiBNYWluQXBwcywKKyAgICAgICAgICAgIGxvbmcgdGhyb3R0bGUsIGJvb2xlYW4gcmFuZG9taXplVGhyb3R0bGUpIHsKICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIHJhbmRvbSBkaXN0cmlidXRpb25zCiAgICAgICAgIC8vIG5vdGUsIHRoZXNlIGFyZSBzdHJhaWdodCBwZXJjZW50YWdlcywgdG8gbWF0Y2ggdXNlciBpbnB1dCAoY21kIGxpbmUgYXJncykKICAgICAgICAgLy8gYnV0IHRoZXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gMC4uMSB2YWx1ZXMgYmVmb3JlIHRoZSBtYWluIGxvb3AgcnVucy4KQEAgLTIxNiwxMCArMjE1LDkgQEAKICAgICAgICAgbUZhY3RvcnNbRkFDVE9SX0ZMSVBdID0gMS4wZjsKICAgICAgICAgbUZhY3RvcnNbRkFDVE9SX0FOWVRISU5HXSA9IDE1LjBmOwogCi0gICAgICAgIG1SYW5kb20gPSBuZXcgU2VjdXJlUmFuZG9tKCk7Ci0gICAgICAgIG1SYW5kb20uc2V0U2VlZCgoc2VlZCA9PSAwKSA/IC0xIDogc2VlZCk7CisgICAgICAgIG1SYW5kb20gPSByYW5kb207CiAgICAgICAgIG1NYWluQXBwcyA9IE1haW5BcHBzOwotICAgICAgICBtUSA9IG5ldyBNb25rZXlFdmVudFF1ZXVlKHRocm90dGxlKTsKKyAgICAgICAgbVEgPSBuZXcgTW9ua2V5RXZlbnRRdWV1ZShyYW5kb20sIHRocm90dGxlLCByYW5kb21pemVUaHJvdHRsZSk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVJhbmRvbVNjcmlwdC5qYXZhIGIvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VSYW5kb21TY3JpcHQuamF2YQppbmRleCBhOTM3Mzk4Li5mYjYwYzkzIDEwMDY0NAotLS0gYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVJhbmRvbVNjcmlwdC5qYXZhCisrKyBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0LmphdmEKQEAgLTE2LDggKzE2LDggQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5jb21tYW5kcy5tb25rZXk7CiAKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CiAKIC8qKgogICogQ2xhc3MgZm9yIGdlbmVyYXRpbmcgTW9ua2V5RXZlbnRzIGZyb20gbXVsdGlwbGUgc2NyaXB0cy4KQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIE1vbmtleVNvdXJjZVNjcmlwdCBtQ3VycmVudFNvdXJjZSA9IG51bGw7CiAKICAgICAvKiogVGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCi0gICAgcHJpdmF0ZSBTZWN1cmVSYW5kb20gbVJhbmRvbTsKKyAgICBwcml2YXRlIFJhbmRvbSBtUmFuZG9tOwogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIE1vbmtleVNvdXJjZVJhbmRvbVNjcmlwdCBpbnN0YW5jZSB3aXRoIGFuIGFkZGl0aW9uYWwgc2V0dXAgc2NyaXB0LgpAQCAtNDQsMjEgKzQ0LDIzIEBACiAgICAgICogQHBhcmFtIHNldHVwRmlsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNldHVwIHNjcmlwdCBmaWxlIG9uIHRoZSBkZXZpY2UuCiAgICAgICogQHBhcmFtIHNjcmlwdEZpbGVOYW1lcyBBbiBBcnJheUxpc3Qgb2YgdGhlIG5hbWVzIG9mIHRoZSBzY3JpcHQgZmlsZXMgdG8gYmUgcnVuIHJhbmRvbWx5LgogICAgICAqIEBwYXJhbSB0aHJvdHRsZSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gc2xlZXAgaW4gbXMgYmV0d2VlbiBldmVudHMuCi0gICAgICogQHBhcmFtIHNlZWQgVGhlIHNlZWQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAqIEBwYXJhbSByYW5kb21pemVUaHJvdHRsZSBXaGV0aGVyIHRvIHJhbmRvbWl6ZSB0aHJvdHRsZS4KKyAgICAgKiBAcGFyYW0gcmFuZG9tIFRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAgICAgKi8KICAgICBwdWJsaWMgTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0KFN0cmluZyBzZXR1cEZpbGVOYW1lLCBBcnJheUxpc3Q8U3RyaW5nPiBzY3JpcHRGaWxlTmFtZXMsCi0gICAgICAgICAgICBsb25nIHRocm90dGxlLCBsb25nIHNlZWQpIHsKKyAgICAgICAgICAgIGxvbmcgdGhyb3R0bGUsIGJvb2xlYW4gcmFuZG9taXplVGhyb3R0bGUsIFJhbmRvbSByYW5kb20pIHsKICAgICAgICAgaWYgKHNldHVwRmlsZU5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgbVNldHVwU291cmNlID0gbmV3IE1vbmtleVNvdXJjZVNjcmlwdChzZXR1cEZpbGVOYW1lLCB0aHJvdHRsZSk7CisgICAgICAgICAgICBtU2V0dXBTb3VyY2UgPSBuZXcgTW9ua2V5U291cmNlU2NyaXB0KHJhbmRvbSwgc2V0dXBGaWxlTmFtZSwgdGhyb3R0bGUsCisgICAgICAgICAgICAgICAgICAgIHJhbmRvbWl6ZVRocm90dGxlKTsKICAgICAgICAgICAgIG1DdXJyZW50U291cmNlID0gbVNldHVwU291cmNlOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChTdHJpbmcgZmlsZU5hbWU6IHNjcmlwdEZpbGVOYW1lcykgewotICAgICAgICAgICAgbVNjcmlwdFNvdXJjZXMuYWRkKG5ldyBNb25rZXlTb3VyY2VTY3JpcHQoZmlsZU5hbWUsIHRocm90dGxlKSk7CisgICAgICAgICAgICBtU2NyaXB0U291cmNlcy5hZGQobmV3IE1vbmtleVNvdXJjZVNjcmlwdChyYW5kb20sIGZpbGVOYW1lLCB0aHJvdHRsZSwKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21pemVUaHJvdHRsZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgbVJhbmRvbSA9IG5ldyBTZWN1cmVSYW5kb20oKTsKLSAgICAgICAgbVJhbmRvbS5zZXRTZWVkKChzZWVkID09IDApID8gLTEgOiBzZWVkKTsKKyAgICAgICAgbVJhbmRvbSA9IHJhbmRvbTsKICAgICB9CiAKICAgICAvKioKQEAgLTY2LDEwICs2OCwxMiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHNjcmlwdEZpbGVOYW1lcyBBbiBBcnJheUxpc3Qgb2YgdGhlIG5hbWVzIG9mIHRoZSBzY3JpcHQgZmlsZXMgdG8gYmUgcnVuIHJhbmRvbWx5LgogICAgICAqIEBwYXJhbSB0aHJvdHRsZSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gc2xlZXAgaW4gbXMgYmV0d2VlbiBldmVudHMuCi0gICAgICogQHBhcmFtIHNlZWQgVGhlIHNlZWQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAqIEBwYXJhbSByYW5kb21pemVUaHJvdHRsZSBXaGV0aGVyIHRvIHJhbmRvbWl6ZSB0aHJvdHRsZS4KKyAgICAgKiBAcGFyYW0gcmFuZG9tIFRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAgICAgKi8KLSAgICBwdWJsaWMgTW9ua2V5U291cmNlUmFuZG9tU2NyaXB0KEFycmF5TGlzdDxTdHJpbmc+IHNjcmlwdEZpbGVOYW1lcywgbG9uZyB0aHJvdHRsZSwgbG9uZyBzZWVkKSB7Ci0gICAgICAgIHRoaXMobnVsbCwgc2NyaXB0RmlsZU5hbWVzLCB0aHJvdHRsZSwgc2VlZCk7CisgICAgcHVibGljIE1vbmtleVNvdXJjZVJhbmRvbVNjcmlwdChBcnJheUxpc3Q8U3RyaW5nPiBzY3JpcHRGaWxlTmFtZXMsIGxvbmcgdGhyb3R0bGUsCisgICAgICAgICAgICBib29sZWFuIHJhbmRvbWl6ZVRocm90dGxlLCBSYW5kb20gcmFuZG9tKSB7CisgICAgICAgIHRoaXMobnVsbCwgc2NyaXB0RmlsZU5hbWVzLCB0aHJvdHRsZSwgcmFuZG9taXplVGhyb3R0bGUsIHJhbmRvbSk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVNjcmlwdC5qYXZhIGIvY21kcy9tb25rZXkvc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL21vbmtleS9Nb25rZXlTb3VyY2VTY3JpcHQuamF2YQppbmRleCBlMzcyMzg1Li43MzEyMzNjIDEwMDY0NAotLS0gYS9jbWRzL21vbmtleS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvbW9ua2V5L01vbmtleVNvdXJjZVNjcmlwdC5qYXZhCisrKyBiL2NtZHMvbW9ua2V5L3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9tb25rZXkvTW9ua2V5U291cmNlU2NyaXB0LmphdmEKQEAgLTI2LDYgKzI2LDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CiBpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKIAogLyoqCiAgKiBtb25rZXkgZXZlbnQgcXVldWUuIEl0IHRha2VzIGEgc2NyaXB0IHRvIHByb2R1Y2UgZXZlbnRzIHNhbXBsZSBzY3JpcHQgZm9ybWF0OgpAQCAtMTE1LDkgKzExNiwxMCBAQAogICAgICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZW5hbWUgb2YgdGhlIHNjcmlwdCAob24gdGhlIGRldmljZSkuCiAgICAgICogQHBhcmFtIHRocm90dGxlIFRoZSBhbW91bnQgb2YgdGltZSBpbiBtcyB0byBzbGVlcCBiZXR3ZWVuIGV2ZW50cy4KICAgICAgKi8KLSAgICBwdWJsaWMgTW9ua2V5U291cmNlU2NyaXB0KFN0cmluZyBmaWxlbmFtZSwgbG9uZyB0aHJvdHRsZSkgeworICAgIHB1YmxpYyBNb25rZXlTb3VyY2VTY3JpcHQoUmFuZG9tIHJhbmRvbSwgU3RyaW5nIGZpbGVuYW1lLCBsb25nIHRocm90dGxlLAorICAgICAgICAgICAgYm9vbGVhbiByYW5kb21pemVUaHJvdHRsZSkgewogICAgICAgICBtU2NyaXB0RmlsZU5hbWUgPSBmaWxlbmFtZTsKLSAgICAgICAgbVEgPSBuZXcgTW9ua2V5RXZlbnRRdWV1ZSh0aHJvdHRsZSk7CisgICAgICAgIG1RID0gbmV3IE1vbmtleUV2ZW50UXVldWUocmFuZG9tLCB0aHJvdHRsZSwgcmFuZG9taXplVGhyb3R0bGUpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2FzbS50eHQgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYXNtLnR4dAppbmRleCA5NWE5MDIyLi5kYTAzZjQ3IDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYXNtLnR4dAorKysgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYXNtLnR4dApAQCAtMSw0ICsxLDQgQEAKLTsgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzsgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIDsKIDsgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiA7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9iYXNoLnR4dCBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9iYXNoLnR4dAppbmRleCBlY2Y1MTBlLi43YTBjYmQ0IDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYmFzaC50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2Jhc2gudHh0CkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL2Jhc2gKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9ic2QvYy50eHQgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYnNkL2MudHh0CmluZGV4IGM1NzRiNGEuLjU2ZTUyOTQgMTAwNjQ0Ci0tLSBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9ic2QvYy50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2JzZC9jLnR4dApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYy50eHQgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvYy50eHQKaW5kZXggN2NkNzA4My4uZTNkZDVlZSAxMDA2NDQKLS0tIGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2MudHh0CisrKyBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9jLnR4dApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9qYXZhLnR4dCBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9qYXZhLnR4dAppbmRleCA3Y2Q3MDgzLi5lM2RkNWVlIDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvamF2YS50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL2phdmEudHh0CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL21ha2UudHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL21ha2UudHh0CmluZGV4IGU0YjM3NmUuLjAxYTBmZjMgMTAwNjQ0Ci0tLSBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9tYWtlLnR4dAorKysgYi9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvbWFrZS50eHQKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvcGxhaW4udHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3BsYWluLnR4dAppbmRleCA0NTQ5ZWNiLi5kYTk3ZDI5IDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvcGxhaW4udHh0CisrKyBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9wbGFpbi50eHQKQEAgLTEsNCArMSw0IEBACi1Db3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvc2gudHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3NoLnR4dAppbmRleCBlNTMxMzdkLi5mYmU5ZDVlIDEwMDY0NAotLS0gYS9kb2NzL2NvcHlyaWdodC10ZW1wbGF0ZXMvc2gudHh0CisrKyBiL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy9zaC50eHQKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvY29weXJpZ2h0LXRlbXBsYXRlcy94bWwudHh0IGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3htbC50eHQKaW5kZXggMmE5ZDJiNi4uYjQ3OTY1NCAxMDA2NDQKLS0tIGEvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3htbC50eHQKKysrIGIvZG9jcy9jb3B5cmlnaHQtdGVtcGxhdGVzL3htbC50eHQKQEAgLTEsMTIgKzEsMTIgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAKICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAorCiAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIAorCiAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCmRpZmYgLS1naXQgYS9ob3N0L3dpbmRvd3MvdXNiL2FuZHJvaWRfd2ludXNiLmluZiBiL2hvc3Qvd2luZG93cy91c2IvYW5kcm9pZF93aW51c2IuaW5mCmluZGV4IGMxZWYzZWYuLmIyZGFmODkgMTAwNzU1Ci0tLSBhL2hvc3Qvd2luZG93cy91c2IvYW5kcm9pZF93aW51c2IuaW5mCisrKyBiL2hvc3Qvd2luZG93cy91c2IvYW5kcm9pZF93aW51c2IuaW5mCkBAIC00Miw2ICs0Miw3IEBACiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF8xOEQxJlBJRF8wRDAyJk1JXzAxDQogJVNpbmdsZUFkYkludGVyZmFjZSUgICAgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUxMQogJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUxMiZNSV8wMQorJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUyMiZNSV8wMQ0KIDsKIDsgRGVsbCdzIE1pbmk1CiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF80MTNDJlBJRF9CMDA3Jk1JXzAxCkBAIC02Myw2ICs2NCw3IEBACiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF8xOEQxJlBJRF8wRDAyJk1JXzAxCiAlU2luZ2xlQWRiSW50ZXJmYWNlJSAgICAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF8xOEQxJlBJRF80RTExDQogJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUxMiZNSV8wMQorJUNvbXBvc2l0ZUFkYkludGVyZmFjZSUgICAgID0gVVNCX0luc3RhbGwsIFVTQlxWSURfMThEMSZQSURfNEUyMiZNSV8wMQ0KIDsKIDsgRGVsbCdzIE1pbmk1CiAlQ29tcG9zaXRlQWRiSW50ZXJmYWNlJSAgICAgPSBVU0JfSW5zdGFsbCwgVVNCXFZJRF80MTNDJlBJRF9CMDA3Jk1JXzAxCmRpZmYgLS1naXQgYS9pZGUvZWNsaXBzZS8uY2xhc3NwYXRoIGIvaWRlL2VjbGlwc2UvLmNsYXNzcGF0aAppbmRleCAxNmY1YjQ0Li42OTNjYmZkIDEwMDY0NAotLS0gYS9pZGUvZWNsaXBzZS8uY2xhc3NwYXRoCisrKyBiL2lkZS9lY2xpcHNlLy5jbGFzc3BhdGgKQEAgLTcsMTcgKzcsMTcgQEAKIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL0NhbWVyYS9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL0NvbnRhY3RzL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvRW1haWwvc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9Hb29nbGVTZWFyY2gvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9IVE1MVmlld2VyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvTGF1bmNoZXIvc3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9MYXVuY2hlcjIvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9NdXNpYy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL01tcy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL1BhY2thZ2VJbnN0YWxsZXIvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9QaG9uZS9zcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL1F1aWNrU2VhcmNoQm94L3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvU2V0dGluZ3Mvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icGFja2FnZXMvYXBwcy9Tb3VuZFJlY29yZGVyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvU3RrL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL2FwcHMvVXBkYXRlci9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJwYWNrYWdlcy9hcHBzL1ZvaWNlRGlhbGVyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9DYWxlbmRhclByb3ZpZGVyL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9Db250YWN0c1Byb3ZpZGVyL3NyYyIvPgpAQCAtMzAsMjQgKzMwLDIxIEBACiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NtZHMvaW5wdXQvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NtZHMvcG0vc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2NtZHMvc3ZjL3NyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9jb21tb24vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS9jb25maWcvc2RrIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2dyYXBoaWNzL2phdmEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvaW0vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9rZXlzdG9yZS9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL2xvY2F0aW9uL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvbWVkaWEvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9vcGVuZ2wvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS9wYWNrYWdlcy9TdWJzY3JpYmVkRmVlZHNQcm92aWRlci9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvc2F4L2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvc2VydmljZXMvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90ZWxlcGhvbnkvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0LXJ1bm5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS90dHMvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS92cG4vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImZyYW1ld29ya3MvYmFzZS93aWZpL2phdmEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdnBuL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJmcmFtZXdvcmtzL3BvbGljaWVzL2Jhc2UvcGhvbmUiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJkZXZlbG9wbWVudC9zYW1wbGVzL0FwaURlbW9zL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImRldmVsb3BtZW50L3NhbXBsZXMvQXBpRGVtb3MvdGVzdHMvc3JjIi8+CkBAIC05MiwyNSArODksMjQgQEAKIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJkYWx2aWsvbGliY29yZS94LW5ldC9zcmMvbWFpbi9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZGFsdmlrL2xpYmNvcmUveG1sL3NyYy9tYWluL2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9BcGlEZW1vc19pbnRlcm1lZGlhdGVzL3NyYy9zcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9Ccm93c2VyX2ludGVybWVkaWF0ZXMvc3JjL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9BUFBTL0VtYWlsX2ludGVybWVkaWF0ZXMvc3JjL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9BUFBTL011c2ljX2ludGVybWVkaWF0ZXMvc3JjL3NyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9BUFBTL1Bob25lX2ludGVybWVkaWF0ZXMvc3JjL3NyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9jb20uYW5kcm9pZC5pbS5wbHVnaW5faW50ZXJtZWRpYXRlcy9zcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovQVBQUy9RdWlja1NlYXJjaEJveF9pbnRlcm1lZGlhdGVzL3NyYy9zcmMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvc3JjL2NvcmUvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmtfaW50ZXJtZWRpYXRlcy9zcmMvbG9jYXRpb24vamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmtfaW50ZXJtZWRpYXRlcy9zcmMvbWVkaWEvamF2YSIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9mcmFtZXdvcmtfaW50ZXJtZWRpYXRlcy9zcmMvdGVsZXBob255L2phdmEiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvc3JjL3Zwbi9qYXZhIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2ZyYW1ld29ya19pbnRlcm1lZGlhdGVzL3NyYy93aWZpL2phdmEiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZnJhbWV3b3JrX2ludGVybWVkaWF0ZXMvc3JjL3Zwbi9qYXZhIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL3NlcnZpY2VzX2ludGVybWVkaWF0ZXMvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vUiIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImV4dGVybmFsL3RhZ3NvdXAvc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZXh0ZXJuYWwvcHJvdG9idWYvc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZXh0ZXJuYWwvZ2RhdGEvc3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iZXh0ZXJuYWwvYXBhY2hlLWh0dHAvc3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iZXh0ZXJuYWwvZ29vZ2xlY2xpZW50L2dvb2dsZWNsaWVudC1saWIuamFyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2dvb2dsZS1mcmFtZXdvcmtfaW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9nb29nbGVsb2dpbi1jbGllbnRfaW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9InBhY2thZ2VzL2FwcHMvQ2FsY3VsYXRvci9hcml0eS0xLjMuMy5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJvdXQvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvZ29vZ2xlLWNvbW1vbl9pbnRlcm1lZGlhdGVzL2phdmFsaWIuamFyIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2dzZi1jbGllbnRfaW50ZXJtZWRpYXRlcy9qYXZhbGliLmphciIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9Im91dC90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9tbXMtY29tbW9uX2ludGVybWVkaWF0ZXMvamF2YWxpYi5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJwYWNrYWdlcy9hcHBzL0NhbGN1bGF0b3IvYXJpdHktMi4wLjIuamFyIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0ib3V0L3RhcmdldC9jb21tb24vb2JqL0pBVkFfTElCUkFSSUVTL2FuZHJvaWRfc3R1YnNfY3VycmVudF9pbnRlcm1lZGlhdGVzL2NsYXNzZXMiLz4KIDwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvaWRlL2VtYWNzL2FuZHJvaWQtY29tbW9uLmVsIGIvaWRlL2VtYWNzL2FuZHJvaWQtY29tbW9uLmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmQwODcKLS0tIC9kZXYvbnVsbAorKysgYi9pZGUvZW1hY3MvYW5kcm9pZC1jb21tb24uZWwKQEAgLTAsMCArMSwxODEgQEAKKzs7OyBhbmRyb2lkLWNvbW1vbi5lbCAtLS0gQ29tbW9uIGZ1bmN0aW9ucy92YXJpYWJsZXMgdG8gZGV2IEFuZHJvaWQgaW4gRW1hY3MuCis7OworOzsgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzs7Cis7OyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKzs7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKzs7IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorOzsKKzs7ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCis7OworOzsgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorOzsgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKzs7IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorOzsgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorOzsgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKzs7OyBDb21tZW50YXJ5OgorOzsKKzs7IFZhcmlhYmxlcyB0byBjdXN0b21pemUgYW5kIGNvbW1vbiBmdW5jdGlvbnMgZm9yIHRoZSBBbmRyb2lkIGJ1aWxkCis7OyBzdXBwb3J0IGluIEVtYWNzLgorOzsgVGhlcmUgc2hvdWxkIGJlIG5vIGludGVyYWN0aXZlIGZ1bmN0aW9uIGluIHRoaXMgbW9kdWxlLgorOzsKKzs7IFlvdSBuZWVkIHRvIGhhdmUgYSBwcm9wZXIgYnVpbGRzcGVjLm1rIGZpbGUgaW4geW91ciByb290IGRpcmVjdG9yeQorOzsgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgKHNlZSAkVE9QL2J1aWxkL2J1aWxkc3BlYy5tay5kZWZhdWx0KS4KKzs7IElmIHRoZSBwYXRoIHRoZSBwcm9kdWN0J3MgZmlsZXMvaW1hZ2UgdXNlcyBhbiBhIHByb2R1Y3QgYWxpYXMsIHlvdQorOzsgbmVlZCB0byBhZGQgYSBtYXBwaW5nIGluIGBhbmRyb2lkLXByb2R1Y3QtYWxpYXMtbWFwJy4gRm9yIGluc3RhbmNlCis7OyBpZiBUQVJHRVRfUFJPRFVDVCBpcyBmb28gYnV0IHRoZSBidWlsZCBkaXJlY3RvcnkgaXMgb3V0L3RhcmdldC9wcm9kdWN0L2JhciwKKzs7IHlvdSBuZWVkIHRvIGFkZCBhIG1hcHBpbmcgVGFyZ2V0OmZvbyAtPiBBbGlhczpiYXIKKzs7CisKKzs7OyBDb2RlOgorCisoZGVmZ3JvdXAgYW5kcm9pZCBuaWwKKyAgIlN1cHBvcnQgZm9yIGFuZHJvaWQgZGV2ZWxvcG1lbnQgaW4gRW1hY3MuIgorICA6cHJlZml4ICJhbmRyb2lkLSIgICAgICAgICAgICAgICAgICAgIDsgQ3VycmVudGx5IHVudXNlZC4KKyAgOnRhZyAgICAiQW5kcm9pZCIKKyAgOmdyb3VwICAndG9vbHMpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmY3VzdG9tIGFuZHJvaWQtY29tcGlsYXRpb24tam9icyAyCisgICJOdW1iZXIgb2Ygam9icyB1c2VkIHRvIGRvIGEgY29tcGlsYXRpb24gKC1qIG9wdGlvbiBvZiBtYWtlKS4iCisgIDp0eXBlICdpbnRlZ2VyCisgIDpncm91cCAnYW5kcm9pZCkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZjdXN0b20gYW5kcm9pZC1jb21waWxhdGlvbi1uby1idWlsZGVudi13YXJuaW5nIHQKKyAgIklmIG5vdCBuaWwsIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIGJ1aWxkIGVudiAoTWFrZWZpbGUsCitiYXNoKSBmcm9tIHRoZSBjb21waWxhdGlvbiBvdXRwdXQgc2luY2UgdGhleSBpbnRlcmZlcmUgd2l0aAorYG5leHQtZXJyb3InLiIKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAgOmdyb3VwICdhbmRyb2lkKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZmN1c3RvbSBhbmRyb2lkLXByb2R1Y3QtYWxpYXMtbWFwIG5pbAorICAiQWxpc3QgYmV0d2VlbiBwcm9kdWN0IHRhcmdldHMgKGRlY2xhcmVkIGluIGJ1aWxkc3BlYy5taykgYW5kIGFjdHVhbAorIHByb2R1Y3QgYnVpbGQgZGlyZWN0b3J5IHVzZWQgYnkgYGFuZHJvaWQtcHJvZHVjdCcuCisKK0ZvciBpbnN0YW5jZSBpZiBUQVJHRVRfUFJPRFVDVCBpcyAnZm9vJyBidXQgdGhlIGJ1aWxkIGRpcmVjdG9yeQorIGlzICdvdXQvdGFyZ2V0L3Byb2R1Y3QvYmFyJywgeW91IG5lZWQgdG8gYWRkIGEgbWFwcGluZyBUYXJnZXQ6Zm9vIC0+IEFsaWFzOmJhci4iCisgIDp0eXBlICcocmVwZWF0IChsaXN0IChzdHJpbmcgOnRhZyAiVGFyZ2V0IikKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZyA6dGFnICJBbGlhcyIpKSkKKyAgOmdyb3VwICdhbmRyb2lkKQorCisoZGVmY29uc3QgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUgIipBbmRyb2lkIE91dHB1dCoiCisgICJOYW1lIG9mIHRoZSBkZWZhdWx0IGJ1ZmZlciBmb3IgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZHMuCitUaGVyZSBpcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiBzdWNoIGEgYnVmZmVyLiIpCisKKyhkZWZ1biBhbmRyb2lkLWZpbmQtYnVpbGQtdHJlZS1yb290ICgpCisgICJBc2NlbmQgdGhlIGN1cnJlbnQgcGF0aCB1bnRpbCB0aGUgcm9vdCBvZiB0aGUgYW5kcm9pZCBidWlsZCB0cmVlIGlzIGZvdW5kLgorU2ltaWxhcmx5IHRvIHRoZSBzaGVsbCBmdW5jdGlvbnMgaW4gZW52c2V0dXAuc2gsIGZvciB0aGUgcm9vdCBib3RoIC4vTWFrZWZpbGUKK2FuZCAuL2J1aWxkL2NvcmUvZW52c2V0dXAubWsgYXJlIGV4aXRpbmcgZmlsZXMuCitSZXR1cm4gdGhlIHJvb3Qgb2YgdGhlIGJ1aWxkIHRyZWUuICBTaWduYWwgYW4gZXJyb3IgaWYgbm90IGZvdW5kLiIKKyAgKGxldCAoKGRlZmF1bHQtZGlyZWN0b3J5IGRlZmF1bHQtZGlyZWN0b3J5KSkKKyAgICAod2hpbGUgKGFuZCAoPiAobGVuZ3RoIGRlZmF1bHQtZGlyZWN0b3J5KSAyKQorICAgICAgICAgICAgICAgIChub3QgKGZpbGUtZXhpc3RzLXAgKGNvbmNhdCBkZWZhdWx0LWRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZWZpbGUiKSkpCisgICAgICAgICAgICAgICAgKG5vdCAoZmlsZS1leGlzdHMtcCAoY29uY2F0IGRlZmF1bHQtZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWlsZC9jb3JlL2VudnNldHVwLm1rIikpKSkKKyAgICAgIChzZXRxIGRlZmF1bHQtZGlyZWN0b3J5CisgICAgICAgICAgICAoc3Vic3RyaW5nIGRlZmF1bHQtZGlyZWN0b3J5IDAKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAiW14vXSsvJCIgZGVmYXVsdC1kaXJlY3RvcnkpKSkpCisgICAgKGlmICg+IChsZW5ndGggZGVmYXVsdC1kaXJlY3RvcnkpIDIpCisgICAgICAgIGRlZmF1bHQtZGlyZWN0b3J5CisgICAgICAoZXJyb3IgIk5vdCBpbiBhIHZhbGlkIGFuZHJvaWQgdHJlZSIpKSkpCisKKyhkZWZ1biBhbmRyb2lkLXByb2plY3QtcCAoKQorICAiUmV0dXJuIG5pbCBpZiBub3QgaW4gYW4gYW5kcm9pZCBidWlsZCB0cmVlLiIKKyAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAgKGFuZHJvaWQtZmluZC1idWlsZC10cmVlLXJvb3QpCisgICAgKGVycm9yIG5pbCkpKQorCisoZGVmdW4gYW5kcm9pZC1ob3N0ICgpCisgICJSZXR1cm4gdGhlIDxzeXN0ZW0+LTxhcmNoPiBzdHJpbmcgKGUuZyBsaW51eC14ODYpLgorT25seSBsaW51eCBhbmQgZGFyd2luIG9uIHg4NiBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQuIgorICAob3IgKHN0cmluZy1tYXRjaCAieDg2IiBzeXN0ZW0tY29uZmlndXJhdGlvbikKKyAgICAgIChzdHJpbmctbWF0Y2ggImkzODYiIHN5c3RlbS1jb25maWd1cmF0aW9uKQorICAgICAgKGVycm9yICJVbmtub3duIGFyY2giKSkKKyAgKG9yIChhbmQgKHN0cmluZy1tYXRjaCAiZGFyd2luIiBzeXN0ZW0tY29uZmlndXJhdGlvbikgImRhcndpbi14ODYiKQorICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoICJsaW51eCIgc3lzdGVtLWNvbmZpZ3VyYXRpb24pICJsaW51eC14ODYiKQorICAgICAgKGVycm9yICJVbmtub3duIHN5c3RlbSIpKSkKKworKGRlZnVuIGFuZHJvaWQtcHJvZHVjdCAoKQorICAiUmV0dXJuIHRoZSBwcm9kdWN0IGJ1aWx0IGFjY29yZGluZyB0byB0aGUgYnVpbGRzcGVjLm1rLgorWW91IG11c3QgaGF2ZSBidWlsZHNwZWMubWsgZmlsZSBpbiB0aGUgdG9wIGRpcmVjdG9yeS4KKworQWRkaXRpb25hbCBwcm9kdWN0IGFsaWFzZXMgY2FuIGJlIGxpc3RlZCBpbiBgYW5kcm9pZC1wcm9kdWN0LWFsaWFzLW1hcCcKK2lmIHRoZSBwcm9kdWN0IGFjdHVhbGx5IGJ1aWx0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgbGlzdGVkCitpbiBidWlsZHNwZWMubWsiCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChsZXQqICgoYnVpbGRzcGVjIChjb25jYXQgKGFuZHJvaWQtZmluZC1idWlsZC10cmVlLXJvb3QpICJidWlsZHNwZWMubWsiKSkKKyAgICAgICAgICAgKHByb2R1Y3QgKHdpdGgtY3VycmVudC1idWZmZXIgKGZpbmQtZmlsZS1ub3NlbGVjdCBidWlsZHNwZWMpCisgICAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgICAgICAgICAgICAgICAoc2VhcmNoLWZvcndhcmQgIlRBUkdFVF9QUk9EVUNUOj0iKQorICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKHBvaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjYW4tc2V4cHMgKHBvaW50KSAxKSkpKQorICAgICAgICAgICAoYWxpYXMgKGFzc29jIHByb2R1Y3QgYW5kcm9pZC1wcm9kdWN0LWFsaWFzLW1hcCkpKQorICAgICAgOyBQb3N0IHByb2Nlc3NpbmcsIGFkanVzdCB0aGUgbmFtZXMuCisgICAgICAoaWYgKG5vdCBhbGlhcykKKyAgICAgICAgICBwcm9kdWN0CisgICAgICAgIChudGggMSBhbGlhcykpKSkpCisKKyhkZWZ1biBhbmRyb2lkLXByb2R1Y3QtcGF0aCAoKQorICAiUmV0dXJuIHRoZSBmdWxsIHBhdGggdG8gdGhlIHByb2R1Y3QgZGlyZWN0b3J5LgorCitBZGRpdGlvbmFsIHByb2R1Y3QgYWxpYXNlcyBjYW4gYmUgYWRkZWQgaW4gYGFuZHJvaWQtcHJvZHVjdC1hbGlhcy1tYXAnCitpZiB0aGUgcHJvZHVjdCBhY3R1YWxseSBidWlsdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGxpc3RlZAoraW4gYnVpbGRzcGVjLm1rIgorICAobGV0ICgocGF0aCAoY29uY2F0IChhbmRyb2lkLWZpbmQtYnVpbGQtdHJlZS1yb290KSAib3V0L3RhcmdldC9wcm9kdWN0LyIKKyAgICAgICAgICAgICAgICAgICAgICAoYW5kcm9pZC1wcm9kdWN0KSkpKQorICAgICh3aGVuIChub3QgKGZpbGUtZXhpc3RzLXAgcGF0aCkpCisgICAgICAoZXJyb3IgKGZvcm1hdCAiJXMgZG9lcyBub3QgZXhpc3QuIElmIHByb2R1Y3QgJXMgbWFwcyB0byBhbm90aGVyIG9uZSwKK2FkZCBhbiBlbnRyeSB0byBhbmRyb2lkLXByb2R1Y3QtbWFwLiIgcGF0aCAoYW5kcm9pZC1wcm9kdWN0KSkpKQorICAgIHBhdGgpKQorCisoZGVmdW4gYW5kcm9pZC1maW5kLWhvc3QtYmluIChiaW5hcnkpCisgICJSZXR1cm4gdGhlIGZ1bGwgcGF0aCB0byB0aGUgaG9zdCBCSU5BUlkuCitCaW5hcmllcyBkb24ndCBkZXBlbmQgb24gdGhlIGRldmljZSwganVzdCBvbiB0aGUgaG9zdCB0eXBlLgorVHJ5IGZpcnN0IHRvIGxvY2F0ZSBCSU5BUlkgaW4gdGhlIG91dC9ob3N0IHRyZWUuICBGYWxsYmFjayB1c2luZwordGhlIHNoZWxsIGV4ZWMgUEFUSCBzZXR1cC4iCisgIChpZiAoYW5kcm9pZC1wcm9qZWN0LXApCisgICAgICAobGV0ICgocGF0aCAoY29uY2F0IChhbmRyb2lkLWZpbmQtYnVpbGQtdHJlZS1yb290KSAib3V0L2hvc3QvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kcm9pZC1ob3N0KSAiL2Jpbi8iIGJpbmFyeSkpKQorICAgICAgICAoaWYgKGZpbGUtZXhpc3RzLXAgcGF0aCkKKyAgICAgICAgICAgIHBhdGgKKyAgICAgICAgICAoZXJyb3IgKGNvbmNhdCBiaW5hcnkgIiBpcyBtaXNzaW5nLiIpKSkpCisgICAgKGV4ZWN1dGFibGUtZmluZCBiaW5hcnkpKSkKKworKGRlZnVuIGFuZHJvaWQtYWRiICgpCisgICJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGFkYiBleGVjdXRhYmxlLgorSWYgbm90IGluIHRoZSBidWlsZCB0cmVlIHVzZSB0aGUgUEFUSCBlbnYgdmFyaWFibGUuIgorICAoYW5kcm9pZC1maW5kLWhvc3QtYmluICJhZGIiKSkKKworKGRlZnVuIGFuZHJvaWQtZmFzdGJvb3QgKCkKKyAgIlJldHVybiB0aGUgcGF0aCB0byB0aGUgZmFzdGJvb3QgZXhlY3V0YWJsZS4KK0lmIG5vdCBpbiB0aGUgYnVpbGQgdHJlZSB1c2UgdGhlIFBBVEggZW52IHZhcmlhYmxlLiIKKyAgOyBGb3IgZmFzdGJvb3QgLXAgaXMgdGhlIG5hbWUgb2YgdGhlIHByb2R1Y3QsICpub3QqIHRoZSBmdWxsIHBhdGggdG8KKyAgOyBpdHMgZGlyZWN0b3J5IGxpa2UgYWRiIHJlcXVlc3RzIHNvbWV0aW1lcy4KKyAgKGNvbmNhdCAoYW5kcm9pZC1maW5kLWhvc3QtYmluICJmYXN0Ym9vdCIpICIgLXAgIiAoYW5kcm9pZC1wcm9kdWN0KSkpCisKKyhkZWZ1biBhbmRyb2lkLWFkYi1jb21tYW5kIChjb21tYW5kICZvcHRpb25hbCBwcm9kdWN0KQorICAiRXhlY3V0ZSAnYWRiIENPTU1BTkQnLgorSWYgdGhlIG9wdGlvbmFsIFBST0RVQ1QgaXMgbm90IG5pbCwgLXAgKGFuZHJvaWQtcHJvZHVjdC1wYXRoKSBpcyB1c2VkCit3aGVuIGFkYiBpcyBpbnZva2VkLiIKKyAgKHdoZW4gKGdldC1idWZmZXIgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUKKyAgICAgIChlcmFzZS1idWZmZXIpKSkKKyAgKGlmIHByb2R1Y3QKKyAgICAgIChzaGVsbC1jb21tYW5kIChjb25jYXQgKGFuZHJvaWQtYWRiKSAiIC1wICIgKGFuZHJvaWQtcHJvZHVjdC1wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgY29tbWFuZCkKKyAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQtb3V0cHV0LWJ1ZmZlci1uYW1lKQorICAgIChzaGVsbC1jb21tYW5kIChjb25jYXQgKGFuZHJvaWQtYWRiKSAiICIgY29tbWFuZCkKKyAgICAgICAgICAgICAgICAgICBhbmRyb2lkLW91dHB1dC1idWZmZXItbmFtZSkpKQorCisoZGVmdW4gYW5kcm9pZC1hZGItc2hlbGwtY29tbWFuZCAoY29tbWFuZCkKKyAgIkV4ZWN1dGUgJ2FkYiBzaGVsbCBDT01NQU5EJy4iCisgIChhbmRyb2lkLWFkYi1jb21tYW5kIChjb25jYXQgIiBzaGVsbCAiIGNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQtb3V0cHV0LWJ1ZmZlci1uYW1lKSkKKworKHByb3ZpZGUgJ2FuZHJvaWQtY29tbW9uKQorCis7OzsgYW5kcm9pZC1jb21tb24uZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9pZGUvZW1hY3MvYW5kcm9pZC1jb21waWxlLmVsIGIvaWRlL2VtYWNzL2FuZHJvaWQtY29tcGlsZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdiYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvaWRlL2VtYWNzL2FuZHJvaWQtY29tcGlsZS5lbApAQCAtMCwwICsxLDE2NiBAQAorOzs7IGFuZHJvaWQtY29tcGlsZS5lbCAtLS0gQ29tcGlsZSB0aGUgQW5kcm9pZCBzb3VyY2UgdHJlZS4KKzs7Cis7OyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorOzsKKzs7IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworOzsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorOzsgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cis7OworOzsgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKzs7Cis7OyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCis7OyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorOzsgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCis7OyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCis7OyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworOzs7IENvbW1lbnRhcnk6Cis7OworOzsgSGVscGVyIGZ1bmN0aW9ucyB0byBjb21waWxlIEFuZHJvaWQgZmlsZSB3aXRoaW4gZW1hY3MuCis7OyBUaGlzIG1vZHVsZSBpZ25vcmVzICdidWlsZC9lbnZzZXR1cC5zaCcgYW5kIGFueSBlbnZpcm9tZW50IHNldCBieSB0aGUKKzs7ICdsdW5jaCcgc2hlbGwgZnVuY3Rpb24uCis7OyBJbnN0ZWFkIGl0IHJlbGllcyBzb2xlbHkgb24gJ2J1aWxkc3BlYy5taycsIHJlbWVtYmVyIHRoYXQgd2hlbiB5b3UKKzs7IHN3aXRjaCBjb25maWd1cmF0aW9uLgorOzsKKzs7IFRoZSBvbmx5IGludGVyYWN0aXZlIGZ1bmN0aW9uIGlzICdhbmRyb2lkLWNvbXBpbGUnLgorOzsgSW4geW91ciAuZW1hY3MgbG9hZCB0aGlzIGZpbGUgKGUuZyAocmVxdWlyZSAnYW5kcm9pZC1jb21waWxlKSkgdGhlbjoKKzs7Cis7OyAgIChhZGQtaG9vayAnYysrLW1vZGUtaG9vayAnYW5kcm9pZC1jb21waWxlKQorOzsgICAoYWRkLWhvb2sgJ2phdmEtbW9kZS1ob29rICdhbmRyb2lkLWNvbXBpbGUpCis7OyBhbmQvb3IKKzs7ICAgKGdsb2JhbC1zZXQta2V5IFtmOV0gJ2FuZHJvaWQtY29tcGlsZSkKKzs7Cis7OworOzsgVE9ETzogTWF5YmUgd2UgY291bGQgY2FjaGUgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGlsZSBmdW5jdGlvbiBpbgorOzsgYnVmZmVyIGxvY2FsIHZhcnMuCisKKzs7OyBDb2RlOgorCisocmVxdWlyZSAnY29tcGlsZSkKKyhyZXF1aXJlICdhbmRyb2lkLWNvbW1vbikKKworOzsgTm8gbmVlZCB0byBiZSBjdXN0b21pemVkLgorKGRlZnZhciBhbmRyb2lkLWNvbXBpbGUtaWdub3JlLXJlCisgICJcXCheXFwoXFxzd1xcfFsvX11cXCkrXFwoTWFrZWZpbGVcXHxcXC5ta1xcKTpbMC05XSs6Lip3YXJuaW5nXFwpXFx8XFwoXi9iaW4vYmFzaFxcKSIKKyAgIlJFIHRvIG1hdGNoIGxpbmUgdG8gc3VwcHJlc3MgZHVyaW5nIGEgY29tcGlsYXRpb24uCitEdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgbGluZSBtYXRjaGluZyB0aGUgYWJvdmUgd2lsbCBiZQorc3VwcHJlc3NlZCBpZiBgYW5kcm9pZC1jb21waWxhdGlvbi1uby1idWlsZGVudi13YXJuaW5nJyBpcyBub24gbmlsLiIpCisKKyhkZWZ1biBhbmRyb2lkLW1ha2VmaWxlLWV4aXN0cy1wIChkaXJlY3RvcnkpCisgICJSZXR1cm4gdCBpZiBhbiBBbmRyb2lkIG1ha2VmaWxlIGV4aXN0cyBpbiBESVJFQ1RPUlkuIgorICA7IFRlc3QgZm9yIEFuZHJvaWQubWsgZmlyc3Q6IG1vcmUgbGlrZWx5LgorICAob3IgKGZpbGUtZXhpc3RzLXAgKGNvbmNhdCBkaXJlY3RvcnkgIkFuZHJvaWQubWsiKSkKKyAgICAgIChmaWxlLWV4aXN0cy1wIChjb25jYXQgZGlyZWN0b3J5ICJNYWtlZmlsZSIpKSkpCisKKyhkZWZ1biBhbmRyb2lkLWZpbmQtbWFrZWZpbGUgKHRvcGRpcikKKyAgIkFzY2VuZCB0aGUgY3VycmVudCBwYXRoIHVudGlsIGFuIEFuZHJvaWQgbWFrZWZpbGUgaXMgZm91bmQuCitNYWtlZmlsZXMgYXJlIG5hbWVkIEFuZHJvaWQubWsgZXhjZXB0IGluIHRoZSByb290IGRpcmVjdG9yeSB3aGVyZQordGhlIGZpbGUgaXMgbmFtZWQgTWFrZWZpbGUuCitUT1BESVIgaXMgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBidWlsZC4KK1JldHVybiBhIGxpc3Qgd2l0aCAyIGVsZW1lbnRzIChNQUtFRklMRV9QQVRIIElTX1JPT1RfTUFLRUZJTEUpLgorTUFLRUZJTEVfUEFUSCBpcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgbWFrZWZpbGUgd3J0IFRPUERJUi4KK1NpZ25hbCBhbiBlcnJvciBpZiBubyBNYWtlZmlsZSB3YXMgZm91bmQuIgorICA7OyBUT0RPOiBDb3VsZCBjaGVjayB0aGF0IHRvcGRpciBpcyB0aGUgc3RhcnQgb2YgZGVmYXVsdC1kaXJlY3RvcnkuCisgICh1bmxlc3MgKD4gKGxlbmd0aCB0b3BkaXIpIDIpCisgICAgKGVycm9yICJUb3BkaXIgaW52YWxpZCAlcyBmb3IgY3VycmVudCBkaXIgJXMiIHRvcGRpciBkZWZhdWx0LWRpcmVjdG9yeSkpCisgIChsZXQgKChkZWZhdWx0LWRpcmVjdG9yeSBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgICAgICAgZmlsZSkKKyAgICA7OyBBc2NlbmQgdGhlIHBhdGguCisgICAgKHdoaWxlIChhbmQgKD4gKGxlbmd0aCBkZWZhdWx0LWRpcmVjdG9yeSkgKGxlbmd0aCB0b3BkaXIpKQorICAgICAgICAgICAgICAgIChub3QgKGFuZHJvaWQtbWFrZWZpbGUtZXhpc3RzLXAgZGVmYXVsdC1kaXJlY3RvcnkpKSkKKyAgICAgIChzZXRxIGRlZmF1bHQtZGlyZWN0b3J5CisgICAgICAgICAgICAoc3Vic3RyaW5nIGRlZmF1bHQtZGlyZWN0b3J5IDAKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAiW14vXSsvJCIgZGVmYXVsdC1kaXJlY3RvcnkpKSkpCisKKyAgICAod2hlbiAobm90IChhbmRyb2lkLW1ha2VmaWxlLWV4aXN0cy1wIGRlZmF1bHQtZGlyZWN0b3J5KSkKKyAgICAgIChlcnJvciAiTm90IGluIGEgdmFsaWQgYW5kcm9pZCB0cmVlIikpCisKKyAgICAoaWYgKHN0cmluZz0gZGVmYXVsdC1kaXJlY3RvcnkgdG9wZGlyKQorICAgICAgICAobGlzdCAiTWFrZWZpbGUiIHQpCisgICAgICA7OyBSZW1vdmUgdGhlIHJvb3QgZGlyIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZW5hbWUKKyAgICAgIChzZXRxIGRlZmF1bHQtZGlyZWN0b3J5IChzdWJzdHJpbmcgZGVmYXVsdC1kaXJlY3RvcnkgKGxlbmd0aCB0b3BkaXIpIG5pbCkpCisgICAgICAoc2V0cSBmaWxlIChjb25jYXQgZGVmYXVsdC1kaXJlY3RvcnkgIkFuZHJvaWQubWsiKSkKKyAgICAgIChsaXN0IGZpbGUgbmlsKSkpKQorCis7OyBUaGlzIGZpbHRlciBpcyByZWdpc3RlcmVkIGFzIGEgYGNvbXBpbGF0aW9uLWZpbHRlci1ob29rJyBhbmQgaXMKKzs7IGNhbGxlZCB3aGVuIG5ldyBkYXRhIGhhcyBiZWVuIGluc2VydGVkIGluIHRoZSBjb21waWxlIGJ1ZmZlci4gRG9uJ3QKKzs7IGFzc3VtZSB0aGF0IG9ubHkgb25lIGxpbmUgaGFzIGJlZW4gaW5zZXJ0ZWQsIHR5cGljYWxseSBtb3JlIHRoYW4KKzs7IG9uZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIGR1ZSB0byBzdGRvdXQgYnVmZmVyaW5nLgorOzsKKzs7IFdlIHN0b3JlIGluIGEgYnVmZmVyIGxvY2FsIHZhcmlhYmxlIGBhbmRyb2lkLWNvbXBpbGUtY29udGV4dCcgYQorOzsgbGlzdCB3aXRoIDIgZWxlbWVudHMsIHRoZSBwcm9jZXNzIGFuZCBwb2ludCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mCis7OyB0aGUgbGFzdCBpbnZvY2F0aW9uLiBUaGUgcHJvY2VzcyBpcyB1c2VkIHRvIGRldGVjdCBhIG5ldworOzsgY29tcGlsYXRpb24uIFRoZSBwb2ludCBwb3NpdGlvbiBpcyB1c2VkIHRvIGxpbWl0IG91ciBzZWFyY2guCis7OworOzsgT24gZW50cnkgKHBvaW50KSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGJsb2NrIGluc2VydGVkLgorKGRlZnVuIGFuZHJvaWQtY29tcGlsZS1maWx0ZXIgKCkKKyAgIkZpbHRlciB0byBkaXNjYXJkIHVud2FudGVkIGxpbmVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGJ1ZmZlci4KKworVGhpcyBmaWx0ZXIgaXMgcmVnaXN0ZXJlZCBhcyBhIGBjb21waWxhdGlvbi1maWx0ZXItaG9vaycgYW5kIGlzCitjYWxsZWQgd2hlbiBuZXcgZGF0YSBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgY29tcGlsZSBidWZmZXIuCisKK0hhcyBlZmZlY3Qgb25seSBpZiBgYW5kcm9pZC1jb21waWxhdGlvbi1uby1idWlsZGVudi13YXJuaW5nJyBpcworbm90IG5pbC4iCisgIDs7IEN1cnJlbnRseSB3ZSBhcmUgbG9va2luZyBvbmx5IGZvciBjb21waWxhdGlvbiB3YXJuaW5ncyBmcm9tIHRoZQorICA7OyBidWlsZCBlbnYuIE1vdmUgdGhpcyB0ZXN0IGxvd2VyLCBuZWFyIHRoZSB3aGlsZSBsb29wIGlmIHdlCisgIDs7IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjYXRlZ29yeSBvZiByZWdleHAuCisgICh3aGVuIGFuZHJvaWQtY29tcGlsYXRpb24tbm8tYnVpbGRlbnYtd2FybmluZworCisgICAgOzsgQ2hlY2sgaWYgYW5kcm9pZC1jb21waWxlLWNvbnRleHQgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlCisgICAgOzsgcHJvY2VzcyBoYXMgY2hhbmdlZDogbmV3IGNvbXBpbGF0aW9uLgorICAgIChsZXQgKChwcm9jIChnZXQtYnVmZmVyLXByb2Nlc3MgKGN1cnJlbnQtYnVmZmVyKSkpKQorICAgICAgKHVubGVzcyAoYW5kIChsb2NhbC12YXJpYWJsZS1wICdhbmRyb2lkLWNvbXBpbGUtY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAoZXEgcHJvYyAoY2FkciBhbmRyb2lkLWNvbXBpbGUtY29udGV4dCkpKQorICAgICAgICAoc2V0cSBhbmRyb2lkLWNvbXBpbGUtY29udGV4dCAobGlzdCAocG9pbnQtbWluKSBwcm9jKSkKKyAgICAgICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2FuZHJvaWQtY29tcGlsZS1jb250ZXh0KSkpCisKKyAgICAobGV0ICgoYmVnIChjYXIgYW5kcm9pZC1jb21waWxlLWNvbnRleHQpKQorICAgICAgICAgIChlbmQgKHBvaW50KSkpCisgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgKGdvdG8tY2hhciBiZWcpCisgICAgICAgIDs7IE5lZWQgdG8gZ28gYmFjayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIGJlZm9yZSB3ZQorICAgICAgICA7OyBzdGFydCB0aGUgc2VhcmNoOiBiZWNhdXNlIG9mIHRoZSBidWZmZXJpbmcsIHRoZSBwcmV2aW91cworICAgICAgICA7OyBibG9jayBpbnNlcnRlZCBtYXkgaGF2ZSBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZQorICAgICAgICA7OyBleHByZXNzaW9uIHdlIGFyZSB0cnlpbmcgdG8gbWF0Y2guIEFzIHJlc3VsdCB3ZSBtaXNzZWQgaXQKKyAgICAgICAgOzsgbGFzdCB0aW1lIGFuZCB3ZSB3b3VsZCBtaXNzIGl0IGFnYWluIGlmIHdlIHN0YXJ0ZWQganVzdAorICAgICAgICA7OyB3aGVyZSB3ZSBsZWZ0IG9mLiBCeSBwcm9jZXNzaW5nIHRoZSBsaW5lIGZyb20gdGhlIHN0YXJ0IHdlCisgICAgICAgIDs7IGFyZSBjYXRjaGluZyB0aGF0IGNhc2UuCisgICAgICAgIChmb3J3YXJkLWxpbmUgMCkKKyAgICAgICAgKHdoaWxlIChzZWFyY2gtZm9yd2FyZC1yZWdleHAgYW5kcm9pZC1jb21waWxlLWlnbm9yZS1yZSBlbmQgdCkKKyAgICAgICAgICA7OyBOdWtlIHRoZSBsaW5lCisgICAgICAgICAgKGxldCAoKGJvbCAocG9pbnQtYXQtYm9sKSkpCisgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpCisgICAgICAgICAgICAoZGVsZXRlLXJlZ2lvbiBib2wgKHBvaW50KSkpKSkKKyAgICAgIDs7IFJlbWVtYmVyIHRoZSBuZXcgZW5kIGZvciBuZXh0IHRpbWUgYXJvdW5kLgorICAgICAgKHNldGNhciBhbmRyb2lkLWNvbXBpbGUtY29udGV4dCAocG9pbnQpKSkpKQorCisoZGVmdW4gYW5kcm9pZC1jb21waWxlICgpCisgICJFbGlzcCBlcXVpdmFsZW50IG9mIG1tIHNoZWxsIGZ1bmN0aW9uLgorV2FsayB1cCB0aGUgcGF0aCB1bnRpbCBhIG1ha2VmaWxlIGlzIGZvdW5kIGFuZCBidWlsZCBpdC4KK1lvdSBuZWVkIHRvIGhhdmUgYSBwcm9wZXIgYnVpbGRzcGVjLm1rIGluIHlvdXIgdG9wIGRpci4KKworVXNlIGBhbmRyb2lkLWNvbXBpbGF0aW9uLWpvYnMnIHRvIGNvbnRyb2wgdGhlIG51bWJlciBvZiBqb2JzIHVzZWQKK2luIGEgY29tcGlsYXRpb24uIgorICAoaW50ZXJhY3RpdmUpCisgIChpZiAoYW5kcm9pZC1wcm9qZWN0LXApCisgICAgICAobGV0KiAoKHRvcGRpciAoYW5kcm9pZC1maW5kLWJ1aWxkLXRyZWUtcm9vdCkpCisgICAgICAgICAgICAgKG1ha2VmaWxlIChhbmRyb2lkLWZpbmQtbWFrZWZpbGUgdG9wZGlyKSkKKyAgICAgICAgICAgICAob3B0aW9ucworICAgICAgICAgICAgICAoY29uY2F0ICIgLWogIiAobnVtYmVyLXRvLXN0cmluZyBhbmRyb2lkLWNvbXBpbGF0aW9uLWpvYnMpKSkpCisgICAgICAgICh1bmxlc3MgKGZpbGUtZXhpc3RzLXAgKGNvbmNhdCB0b3BkaXIgImJ1aWxkc3BlYy5tayIpKQorICAgICAgICAgIChlcnJvciAiYnVpbGRzcGVjLm1rIG1pc3NpbmcgaW4gJXMuIiB0b3BkaXIpKQorICAgICAgICA7OyBBZGQtaG9vayBkbyBub3QgcmUtYWRkIGlmIGFscmVhZHkgcHJlc2VudC4gVGhlIGNvbXBpbGUKKyAgICAgICAgOzsgZmlsdGVyIGhvb2tzIHJ1biBhZnRlciB0aGUgY29taW50IGNsZWFudXAgKF5NKS4KKyAgICAgICAgKGFkZC1ob29rICdjb21waWxhdGlvbi1maWx0ZXItaG9vayAnYW5kcm9pZC1jb21waWxlLWZpbHRlcikKKyAgICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tcGlsZS1jb21tYW5kKQorICAgICAgICAgICAgIChpZiAoY2FkciBtYWtlZmlsZSkKKyAgICAgICAgICAgICAgICAgOzsgVGhlIHJvb3QgTWFrZWZpbGUgaXMgbm90IGludm9rZWQgdXNpbmcgT05FX1NIT1RfTUFLRUZJTEUuCisgICAgICAgICAgICAgICAgIChjb25jYXQgIm1ha2UgLUMgIiB0b3BkaXIgb3B0aW9ucykgOyBCdWlsZCB0aGUgd2hvbGUgaW1hZ2UuCisgICAgICAgICAgICAgICAoY29uY2F0ICJPTkVfU0hPVF9NQUtFRklMRT0iIChjYXIgbWFrZWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICIgbWFrZSAtQyAiIHRvcGRpciBvcHRpb25zICIgZmlsZXMgIikpKQorICAgICAgICAoaWYgKGludGVyYWN0aXZlLXApCisgICAgICAgICAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdjb21waWxlKSkpKSkKKworKHByb3ZpZGUgJ2FuZHJvaWQtY29tcGlsZSkKKworOzs7IGFuZHJvaWQtY29tcGlsZS5lbCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2lkZS9lbWFjcy9hbmRyb2lkLWhvc3QuZWwgYi9pZGUvZW1hY3MvYW5kcm9pZC1ob3N0LmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YjMyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pZGUvZW1hY3MvYW5kcm9pZC1ob3N0LmVsCkBAIC0wLDAgKzEsMTIyIEBACis7OzsgYW5kcm9pZC1ob3N0LmVsIC0tLSBNb2R1bGUgdG8gdXNlIGhvc3QgYmluYXJpZXMgZnJvbSBhbiBBbmRyb2lkIGRldiB0cmVlLgorOzsKKzs7IENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cis7OworOzsgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cis7OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCis7OyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKzs7Cis7OyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorOzsKKzs7IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKzs7IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCis7OyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKzs7IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKzs7IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCis7OzsgQ29tbWVudGFyeToKKzs7Cis7OyBUaGlzIG1vZHVsZSBkZWZpbmVzIGludGVyYWN0aXZlIGZ1bmN0aW9ucyB0byBzZW5kIHRoZSBtb3N0IGNvbW1vbgorOzsgY29tbWFuZHMgdG8gYSBkZXZpY2UuCis7OworOzsgQ3VycmVudGx5IG9ubHkgb25lIGRldmljZSBpcyBzdXBwb3J0ZWQuCis7OworOzsgSW4geW91ciAuZW1hY3MgbG9hZCB0aGlzIGZpbGUgKGUuZyAocmVxdWlyZSAnYW5kcm9pZC1ob3N0KSkgdGhlbgorOzsgeW91IGNhbiBlaXRoZXIgY3JlYXRlIG5ldyBzaG9ydGN1dHMgZS5nOgorOzsKKzs7ICAgKGdsb2JhbC1zZXQta2V5IFtmOF0gJ2FuZHJvaWQtYWRiLXN5bmMpCis7OworOzsgb3IgcmVseSBvbiBhdXRvY29tcGxldGlvbiBNLXggYW5kLXN5bmMgd2lsbCBleHBhbmQgdG8KKzs7IE0teCAgYW5kcm9pZC1hZGItc3luYworOzsKKzs7IEJ5IGRlZmF1bHQgdGhlIGZvbGxvd2luZyBrZXkgYmluZGluZ3MgYXJlIGFjdGl2ZToKKzs7IEMteCBhIGEgYW5kcm9pZC1hZGItcm9vdAorOzsgQy14IGEgciBhbmRyb2lkLWFkYi1yZW1vdW50Cis7OyBDLXggYSBzIGFuZHJvaWQtYWRiLXN5bmMKKzs7IEMteCBhIGIgYW5kcm9pZC1hZGItc2hlbGwtcmVib290LWJvb3Rsb2FkZXIKKzs7IEMteCBhIGYgYW5kcm9pZC1mYXN0Ym9vdC1mbGFzaGFsbAorOzsKKzs7IGFuZHJvaWQtZmFzdGJvb3QtZmxhc2hhbGwgaXMgc3RpbGwgd29yayBpbiBwcm9ncmVzcywgY2hlY2sgdGhlCis7OyBhc3NvY2lhdGVkIGJ1ZmZlciAoKkFuZHJvaWQgT3V0cHV0KikgZm9yIGVycm9ycyB3aGVuIHlvdSB1c2UgaXQuCisKKzs7OyBDb2RlOgorCisocmVxdWlyZSAnYW5kcm9pZC1jb21tb24pCisKKyhkZWZ2YXIgYW5kcm9pZC1ob3N0LWNvbW1hbmQtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKQorCisoZGVmdW4gYW5kcm9pZC1ob3N0LWtleS1wcmVmaXgtc2V0ICh2YXIgdmFsKQorICAiQmluZCB0aGUga2V5cyBzaG9ydGN1dHMgdG8gdGhlIGZ1bmN0aW9ucy5pIgorICA7OyBUT0RPOiBUaGlzIHNob3VsZCBnbyBpbiBhIG1pbm9yIG1vZGUga2V5bWFwIGluc3RlYWQgb2YKKyAgOzsgbWVzc2luZyB3aXRoIHRoZSBnbG9iYWwgb25lLgorICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIChyZWFkLWtiZC1tYWNybyB2YWwpIGFuZHJvaWQtaG9zdC1jb21tYW5kLW1hcCkKKyAgKGN1c3RvbS1zZXQtZGVmYXVsdCB2YXIgdmFsKSkKKworKGxldCAoKG1hcCBhbmRyb2lkLWhvc3QtY29tbWFuZC1tYXApKQorICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiYSIpICdhbmRyb2lkLWFkYi1yb290KQorICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiciIpICdhbmRyb2lkLWFkYi1yZW1vdW50KQorICAoZGVmaW5lLWtleSBtYXAgKGtiZCAicyIpICdhbmRyb2lkLWFkYi1zeW5jKQorICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiYiIpICdhbmRyb2lkLWFkYi1zaGVsbC1yZWJvb3QtYm9vdGxvYWRlcikKKyAgKGRlZmluZS1rZXkgbWFwIChrYmQgImYiKSAnYW5kcm9pZC1mYXN0Ym9vdC1mbGFzaGFsbCkpCisKKyhkZWZjdXN0b20gYW5kcm9pZC1ob3N0LWtleS1wcmVmaXggIkMteCBhIgorICAiUHJlZml4IGtleXN0cm9rZXMgZm9yIEFuZHJvaWQgY29tbWFuZHMuIgorICA6Z3JvdXAgJ2FuZHJvaWQKKyAgOnR5cGUgJ3N0cmluZworICA6c2V0ICdhbmRyb2lkLWhvc3Qta2V5LXByZWZpeC1zZXQpCisKKyhkZWZ1biBhbmRyb2lkLWFkYi1yZW1vdW50ICgpCisgICJFeGVjdXRlICdhZGIgcmVtb3VudCcuIgorICAoaW50ZXJhY3RpdmUpCisgIChhbmRyb2lkLWFkYi1jb21tYW5kICJyZW1vdW50IikpCisKKyhkZWZ1biBhbmRyb2lkLWFkYi1yb290ICgpCisgICJFeGVjdXRlICdhZGIgcm9vdCcuIgorICAoaW50ZXJhY3RpdmUpCisgIChhbmRyb2lkLWFkYi1jb21tYW5kICJyb290IikpCisKKyhkZWZ1biBhbmRyb2lkLWFkYi1zaGVsbC1yZWJvb3QtYm9vdGxvYWRlciAoKQorICAiRXhlY3V0ZSAnYWRiIHNoZWxsIHJlYm9vdCBib290bG9hZGVyJy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGFuZHJvaWQtYWRiLXNoZWxsLWNvbW1hbmQgInJlYm9vdCBib290bG9hZGVyIikpCisKKyhkZWZ1biBhbmRyb2lkLWFkYi1zeW5jICgpCisgICJFeGVjdXRlICdhZGIgc3luYycuIgorICAoaW50ZXJhY3RpdmUpCisgIDs7IEFsd2F5cyBmb3JjZSByb290IGFuZCByZW1vdW50LCB0aGlzIHdheSBzeW5jIGFsd2F5cyB3b3JrcyBldmVuIG9uCisgIDs7IGEgZGV2aWNlIHRoYXQgaGFzIGp1c3QgcmVib290ZWQgb3IgdGhhdCBydW5zIGEgdXNlcmRlYnVnIGJ1aWxkLgorICAoYW5kcm9pZC1hZGItcm9vdCkKKyAgKGFuZHJvaWQtYWRiLXJlbW91bnQpCisgIChhbmRyb2lkLWFkYi1jb21tYW5kICJzeW5jIiAncCkpCisKKyhkZWZ1biBhbmRyb2lkLWZhc3Rib290LXNlbnRpbmVsIChwcm9jZXNzIGV2ZW50KQorICAiQ2FsbGVkIHdoZW4gdGhlIGZhc3Rib290IHByb2Nlc3MgaXMgZG9uZS4iCisgIDs7IFRPRE86IFNob3VsZCBiYXJmIGlmIHRoZSBsYXN0IGxpbmVzIGFyZSBub3Q6CisgIDs7ICAgT0tBWQorICA7OyAgIHJlYm9vdGluZy4uLgorICAocHJpbmMKKyAgIChmb3JtYXQgIlByb2Nlc3M6ICVzIGhhZCB0aGUgZXZlbnQgYCVzJyIgcHJvY2VzcyBldmVudCkpKQorCisoZGVmdW4gYW5kcm9pZC1mYXN0Ym9vdC1mbGFzaGFsbCAoYXJnKQorICAiRXhlY3V0ZSAnZmFzdGJvb3QgLXAgPHByb2R1Y3Q+IGZsYXNoYWxsJy4KKworV2l0aCBubyBBUkcsIGRvbid0IHdpcGUgdGhlIHVzZXIgZGF0YS4KK1dpdGggQVJHLCB3aXBlIHRoZSB1c2VyIGRhdGEuIgorICAoaW50ZXJhY3RpdmUgIlAiKQorICAod2hlbiAoZ2V0LWJ1ZmZlciBhbmRyb2lkLW91dHB1dC1idWZmZXItbmFtZSkKKyAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBhbmRyb2lkLW91dHB1dC1idWZmZXItbmFtZQorICAgICAgKGVyYXNlLWJ1ZmZlcikpKQorICAobGV0ICgocHJvYworICAgICAgICAgKGlmIGFyZworICAgICAgICAgICAgIChzdGFydC1wcm9jZXNzLXNoZWxsLWNvbW1hbmQKKyAgICAgICAgICAgICAgImZhc3Rib290IgorICAgICAgICAgICAgICBhbmRyb2lkLW91dHB1dC1idWZmZXItbmFtZQorICAgICAgICAgICAgICAoY29uY2F0IChhbmRyb2lkLWZhc3Rib290KSAiIGZsYXNoYWxsIC13IikpCisgICAgICAgICAgIChzdGFydC1wcm9jZXNzLXNoZWxsLWNvbW1hbmQKKyAgICAgICAgICAgICJmYXN0Ym9vdCIgYW5kcm9pZC1vdXRwdXQtYnVmZmVyLW5hbWUKKyAgICAgICAgICAgIChjb25jYXQgKGFuZHJvaWQtZmFzdGJvb3QpICIgZmxhc2hhbGwiKSkpKSkKKyAgICAoc2V0LXByb2Nlc3Mtc2VudGluZWwgcHJvYyAnYW5kcm9pZC1mYXN0Ym9vdC1zZW50aW5lbCkpKQorCisKKyhwcm92aWRlICdhbmRyb2lkLWhvc3QpCis7OzsgYW5kcm9pZC1ob3N0LmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbmRrL2FwcHMvc2FuLWFuZ2VsZXMvcHJvamVjdC9yZXMvbGF5b3V0L21haW4ueG1sIGIvbmRrL2FwcHMvc2FuLWFuZ2VsZXMvcHJvamVjdC9yZXMvbGF5b3V0L21haW4ueG1sCmluZGV4IDI1ZGJmNmQuLmNhMTlhMTggMTAwNjQ0Ci0tLSBhL25kay9hcHBzL3Nhbi1hbmdlbGVzL3Byb2plY3QvcmVzL2xheW91dC9tYWluLnhtbAorKysgYi9uZGsvYXBwcy9zYW4tYW5nZWxlcy9wcm9qZWN0L3Jlcy9sYXlvdXQvbWFpbi54bWwKQEAgLTEsMTEgKzEsMTEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgID4KIDxUZXh0VmlldyAgCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCiAgICAgYW5kcm9pZDp0ZXh0PSJIZWxsbyBXb3JsZCwgRGVtb0FjdGl2aXR5IgogICAgIC8+CmRpZmYgLS1naXQgYS9wZGsvUGRrLm1rIGIvcGRrL1Bkay5tawppbmRleCA1MjY4Mzg0Li5kMTliMzQyIDEwMDY0NAotLS0gYS9wZGsvUGRrLm1rCisrKyBiL3Bkay9QZGsubWsKQEAgLTU0LDcgKzU0LDcgQEAKIHBka19jYW1lcmFfZGlyIDo9IGZyYW1ld29ya3MvYmFzZS9pbmNsdWRlL3VpCiAKICMgRGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBkb2NzICh0ZW1wbGF0ZXMgKyBkb3h5Z2VuYXRlZCBoZWFkZXJzKQotcGRrX2RvY3NfZGVzdF9kaXIgOj0gJChwZGtfZG9jc19pbnRlcm1lZGlhdGVzKS9kb2NzL2d1aWRlCitwZGtfZG9jc19kZXN0X2RpciA6PSAkKHBka19kb2NzX2ludGVybWVkaWF0ZXMpL2RvY3MvcG9ydGluZwogcGRrX2FwcF9lbmdfcm9vdCA6PSAkKHBka19kb2NzX2ludGVybWVkaWF0ZXMpL2RvY3MKIAogIyBXb3JraW5nIGRpcmVjdG9yeSBmb3Igc291cmNlIHRvIGJlIGRveHlnZW5hdGVkCkBAIC0xODgsMTIgKzE4OCwxMiBAQAogTE9DQUxfTU9EVUxFIDo9IG9ubGluZS1wZGsKIAogTE9DQUxfRFJPSURET0NfT1BUSU9OUzo9IFwKLQkJLXRvcm9vdCAvb25saW5lLXBkay8gXAorCQktdG9yb290IC8gXAogCQktaGRmIGFuZHJvaWQud2hpY2hkb2Mgb25saW5lIFwKIAkJLWhkZiBhbmRyb2lkLndoaWNobW9kdWxlICQoTE9DQUxfTU9EVUxFKQogCiBMT0NBTF9EUk9JRERPQ19DVVNUT01fVEVNUExBVEVfRElSIDo9IGJ1aWxkL3Rvb2xzL2Ryb2lkZG9jL3RlbXBsYXRlcy1wZGsKLUxPQ0FMX0RST0lERE9DX0NVU1RPTV9BU1NFVF9ESVIgOj0gYXNzZXRzLXBkaworTE9DQUxfRFJPSURET0NfQ1VTVE9NX0FTU0VUX0RJUiA6PSBhc3NldHMKIAogaW5jbHVkZSAkKEJVSUxEX0RST0lERE9DKQogCkBAIC0yMDUsMTAgKzIwNSw2IEBACiAJQGVjaG8gIlBESzogJEAiCiAJJChjb3B5LWZpbGUtdG8tdGFyZ2V0LXdpdGgtY3ApCiAKLSQoT1VUX0RPQ1MpL3Bkay5weTogJChwZGtfaG9zdGluZ19kaXIpL3Bkay5weQotCUBlY2hvICJQREs6ICRAIgotCSQoY29weS1maWxlLXRvLXRhcmdldC13aXRoLWNwKQotCiAjIE5hbWUgdGhlIHRhciBmaWxlcwogbmFtZSA6PSBhbmRyb2lkX3Bka19kb2NzLSQoUkVRVUVTVEVEX1BST0RVQ1QpCiBpZmVxICgkKFRBUkdFVF9CVUlMRF9UWVBFKSxkZWJ1ZykKQEAgLTIzMiwxMSArMjI4LDExIEBACiAJJChoaWRlKSBnemlwIC1jZiAkPCA+ICRACiAKICMgdGFyIHVwIGFsbCB0aGUgZmlsZXMgdG8gbWFrZSB0aGUgcGRrIGRvY3MuCi0kKHBka19kb2NzX3RhcmZpbGUpOiAkKERPQ1NfT1VUX0RJUiktdGltZXN0YW1wICQoT1VUX0RPQ1MpL2FwcC55YW1sICQoT1VUX0RPQ1MpL3Bkay5weQorJChwZGtfZG9jc190YXJmaWxlKTogJChET0NTX09VVF9ESVIpLXRpbWVzdGFtcCAkKE9VVF9ET0NTKS9hcHAueWFtbAogCUBlY2hvICJQREsgZG9jczogJEAiCiAJQG1rZGlyIC1wICQoZGlyICRAKQogCUBybSAtZiAkQAotCSQoaGlkZSkgdGFyIHJmICRAIC1DICQoT1VUX0RPQ1MpICQoTE9DQUxfTU9EVUxFKSBwZGsucHkgIGFwcC55YW1sCisJJChoaWRlKSB0YXIgcmYgJEAgLUMgJChPVVRfRE9DUykgJChMT0NBTF9NT0RVTEUpIGFwcC55YW1sCiAKICMgRGVidWdnaW5nIHJlcG9ydGluZyBjYW4gZ28gaGVyZSwgYWRkIGl0IGFzIGEgdGFyZ2V0IHRvIGdldCBvdXRwdXQuCiBwZGtfZGVidWc6CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9DSEFOR0VfSElTVE9SWS5UWFQgYi9wZGsvZG9jcy9DSEFOR0VfSElTVE9SWS5UWFQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM3OWFhZGUuLjAwMDAwMDAKLS0tIGEvcGRrL2RvY3MvQ0hBTkdFX0hJU1RPUlkuVFhUCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotViAwLjkgTVdSIEFwciA2LCAyMDA5Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotKiBOZXcgZmlsZXMgZm9yIG5ldyBjc3MgZmlsZXMgdXNpbmcgZHJvaWRkb2MvY2xlYXJzaWx2ZXIKLQotViAwLjMgLSBKdW5lIDksIDIwMDgNCi0jIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLSogQXJjaGl0ZWN0dXJhbCBkaWFncmFtcyBub3cgaW5jbHVkZSBhIGxlZ2VuZCB0aGF0IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZSANCi0gIGJldHdlZW4gc29saWQgYW5kIGRhc2hlZCBlbGVtZW50cw0KLQ0KLSogUmVtb3ZlZCBQdXBwZXRtYXN0ZXIgZG9jdW1lbnQNCi0NCi0qIFJlbW92ZWQgZXh0ZXJuYWwgbGluayB0byBBbmRyb2lkIEFyY2hpdGVjdHVyZSBmcm9tIHRoZSBsZWZ0IG5hdmlnYXRpb24gYmFyDQotDQotKiBzbWFsbCBjaGFuZ2VzIHRvIFJhZGlvIExheWVyIEludGVyZmFjZQ0KLQ0KLSogVXBkYXRlZCBIb3N0IFN5c3RlbSBTZXR1cCAoc291cmNlX3NldHVwX2d1aWRlLmh0bWwpIHRvIGluY2x1ZGUgbWVudGlvbiBvZiBMaW51eCA4LjA0IGFuZCBDeWd3aW4uDQotDQotKiBVcGRhdGVkIEJ1aWxkIFN5c3RlbSAoYnVpbGRfc3lzdGVtLmh0bWwpOiBTd2l0Y2hlZCBEZXZpY2UgY29kZSBvcHRpb25zIDEgJiAyIHRvIGVtcGhhc2l6ZSB0aGF0IA0KLSAgdGhlIG5ldyBmaXJzdCBvcHRpb24geWllbGRzIG1vcmUgY29uc2lzdGVudCByZXN1bHRzLiANCi0NCi0qIFVwZGF0ZWQgQnJpbmcgVXAgKGJyaW5nX3VwLmh0bWwpOiByZW1vdmVkICJob3RwbHVnZCIgZnJvbSBzdGVwIDcuCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9SRUFETUUgYi9wZGsvZG9jcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzZDgzYQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL1JFQURNRQpAQCAtMCwwICsxLDE1IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc291cmNlIGZvciB0aGUgc291cmNlLmFuZHJvaWQuY29tIHNpdGUgY29udGVudHMuCitUaGUgUGxhdGZvcm0gRGV2ZWxvcG1lbnQgS2l0IChQREssIGEgc2V0IG9mIHRvb2xzIGZvciB0aGUgY29udmVuaWVuY2Ugb2YKK2VuZ2luZWVycyBkb2luZyBidWlsZGluZyBkZXZpY2VzKSBpcyBhbHNvIGJ1aWx0IGFzIHBhcnQgb2YgdGhlIHNpdGUgYnVpbGQuCisKK1N1YmRpcmVjdG9yaWVzIGluY2x1ZGU6CisgIGFib3V0IC0tIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICBjb21tdW5pdHkgLS0gaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFPU1AgbWFpbGluZyBsaXN0cworICBjb21wYXRpYmlsaXR5IC0tIGluZm9ybWF0aW9uIGFib3V0IGJ1aWxkaW5nIGNvbXBhdGlibGUgZGV2aWNlcworICBkb3dubG9hZHMgLS0gbGlua3MgdG8gZG93bmxvYWQgZmlsZXMgb2YgaW50ZXJlc3QKKyAgaW1hZ2VzIC0tIGltYWdlcyB1c2VkIGluIGRvY3M7IG5vdGU6IHRoaXMgaXMgTk9UIGZvciBVSSBhc3NldHMvc2tpbnMKKyAgcG9ydGluZyAtLSB0aXBzICYgZ3VpZGVzIGZvciBwb3J0aW5nIHRoZSBBbmRyb2lkIHNvdXJjZSB0byBoYXJkd2FyZQorICBzb3VyY2UgLS0gaG93IHRvIGFjY2VzcyAmIHVzZSB0aGUgQW5kcm9pZCBzb3VyY2UKKworVGhpcyBkaXJlY3Rvcnkgb3JpZ2luYXRlZCBhcyB0aGUgUERLIGhvbWUgKGhlbmNlIHRoZSBuYW1lKSBhbmQgZ3JldyB0bworZW5jb21wYXNzIHNvdXJjZS5hbmRyb2lkLmNvbS4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2Fib3V0L2Fib3V0X3RvYy5jcyBiL3Bkay9kb2NzL2Fib3V0L2Fib3V0X3RvYy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc2YWNlCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvYWJvdXQvYWJvdXRfdG9jLmNzCkBAIC0wLDAgKzEsMTggQEAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Cis8IS0tCitmdW5jdGlvbiBub3RoaW5nKCkge30KKy0tPgorPC9zY3JpcHQ+CisKKzx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+YWJvdXQvcGhpbG9zb3BoeS5odG1sIj5Qcm9qZWN0IFBoaWxvc29waHk8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL2luZGV4Lmh0bWwiPkdldHRpbmcgSW52b2x2ZWQ8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Y29tcGF0aWJpbGl0eS9pbmRleC5odG1sIj5Db21wYXRpYmlsaXR5PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9saWNlbnNlcy5odG1sIj5MaWNlbnNpbmcgSW5mb3JtYXRpb248L2E+PC9saT4KKzwvdWw+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKzwhLS0KKyAgICBidWlsZFRvZ2dsZUxpc3RzKCk7CisvLy0tPgorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9hYm91dC9pbmRleC5qZCBiL3Bkay9kb2NzL2Fib3V0L2luZGV4LmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOThiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9hYm91dC9pbmRleC5qZApAQCAtMCwwICsxLDIwIEBACitwYWdlLnRpdGxlPUFib3V0IHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK2RvYy50eXBlPWFib3V0Citkb2MuaGlkZW5hdj10cnVlCitAamQ6Ym9keQorPHA+QW5kcm9pZCBpcyBhbiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBzdGFjayBjcmVhdGVkIGZvciBtb2JpbGUgcGhvbmVzIGFuZAorb3RoZXIgZGV2aWNlcy4gIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKEFPU1ApIGlzIHRhc2tlZCB3aXRoIHRoZQorbWFpbnRlbmFuY2UgYW5kIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgb2YgQW5kcm9pZC4gTWFueSBkZXZpY2UgbWFudWZhY3R1cmVycyBoYXZlCiticm91Z2h0IHRvIG1hcmtldCBkZXZpY2VzIHJ1bm5pbmcgQW5kcm9pZCwgYW5kIHRoZXkgYXJlIHJlYWRpYmx5IGF2YWlsYWJsZQorYXJvdW5kIHRoZSB3b3JsZC48L3A+Cis8cD5PdXIgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGJ1aWxkIGFuIGV4Y2VsbGVudCBzb2Z0d2FyZSBwbGF0Zm9ybSBmb3IgZXZlcnlkYXkKK3VzZXJzLiBBIG51bWJlciBvZiBjb21wYW5pZXMgaGF2ZSBjb21taXR0ZWQgbWFueSBlbmdpbmVlcnMgdG8gYWNoaWV2ZSB0aGlzCitnb2FsLCBhbmQgdGhlIHJlc3VsdCBpcyBhIGZ1bGwgcHJvZHVjdGlvbiBxdWFsaXR5IGNvbnN1bWVyIHByb2R1Y3Qgd2hvc2UKK3NvdXJjZSBpcyBvcGVuIGZvciBjdXN0b21pemF0aW9uIGFuZCBwb3J0aW5nLjwvcD4KKzxwPllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFuZHJvaWQgZnJvbSB0aGVzZSBwYWdlczo8L3A+Cis8dWw+CisgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9YWJvdXQvcGhpbG9zb3BoeS5odG1sIj5PdXIgUHJvamVjdCBQaGlsb3NvcGh5IGFuZCBHb2FsczwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9pbmRleC5odG1sIj5JbnRlcmFjdGluZyB3aXRoIHRoZSBQcm9qZWN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9Y29tcGF0aWJpbGl0eS9pbmRleC5odG1sIj5BbmRyb2lkIENvbXBhdGliaWxpdHk8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvbGljZW5zZXMuaHRtbCI+TGljZW5zaW5nIEluZm9ybWF0aW9uPC9hPjwvbGk+Cis8L3VsPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvYWJvdXQvcGhpbG9zb3BoeS5qZCBiL3Bkay9kb2NzL2Fib3V0L3BoaWxvc29waHkuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhMWNjZgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2Fib3V0L3BoaWxvc29waHkuamQKQEAgLTAsMCArMSw3MyBAQAorcGFnZS50aXRsZT1QaGlsb3NvcGh5IGFuZCBHb2FscworZG9jLnR5cGU9YWJvdXQKK2RvYy5oaWRlbmF2PXRydWUKK0BqZDpib2R5Cis8cD5BbmRyb2lkIGlzIGFuIG9wZW4tc291cmNlIHNvZnR3YXJlIHN0YWNrIGZvciBtb2JpbGUgcGhvbmVzIGFuZCBzaW1pbGFyCitkZXZpY2VzLjwvcD4KKzxoMj5PcmlnaW4gYW5kIEdvYWw8L2gyPgorPHA+QW5kcm9pZCB3YXMgb3JpZ2luYXRlZCBieSBhIGdyb3VwIG9mIGNvbXBhbmllcyBrbm93biBhcyB0aGUgT3BlbiBIYW5kc2V0CitBbGxpYW5jZSwgbGVkIGJ5IEdvb2dsZS4gVG9kYXksIG1hbnkgY29tcGFuaWVzIC0tIGJvdGggb3JpZ2luYWwgbWVtYmVycyBvZiB0aGUKK09IQSBhbmQgb3RoZXJzIC0tIGhhdmUgaW52ZXN0ZWQgaGVhdmlseSBpbiBBbmRyb2lkLCB0eXBpY2FsbHkgaW4gdGhlIGZvcm0gb2YKK2FsbG9jYXRpbmcgc2lnbmlmaWNhbnQgZW5naW5lZXJpbmcgcmVzb3VyY2VzIHRvIGltcHJvdmUgQW5kcm9pZCBhbmQgYnJpbmcKK0FuZHJvaWQgZGV2aWNlcyB0byBNYXJrZXQuPC9wPgorPHA+V2UgY3JlYXRlZCBBbmRyb2lkIGluIHJlc3BvbnNlIHRvIG91ciBvd24gZXhwZXJpZW5jZXMgbGF1bmNoaW5nIG1vYmlsZQorYXBwcy4gV2Ugd2FudGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIHdvdWxkIGFsd2F5cyBiZSBhbiBvcGVuIHBsYXRmb3JtCithdmFpbGFibGUgZm9yIGNhcnJpZXJzLCBPRU1zLCBhbmQgZGV2ZWxvcGVycyB0byB1c2UgdG8gbWFrZSB0aGVpciBpbm5vdmF0aXZlCitpZGVhcyBhIHJlYWxpdHkuIFdlIHdhbnRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSB3YXMgbm8gY2VudHJhbCBwb2ludCBvZgorZmFpbHVyZSwgd2hlcmUgb25lIGluZHVzdHJ5IHBsYXllciBjb3VsZCByZXN0cmljdCBvciBjb250cm9sIHRoZSBpbm5vdmF0aW9ucworb2YgYW55IG90aGVyLiBUaGUgc29sdXRpb24gd2UgY2hvc2Ugd2FzIGFuIG9wZW4gYW5kIG9wZW4tc291cmNlIHBsYXRmb3JtLjwvcD4KKzxwPkJ1dCB0aGUgdWx0aW1hdGUgZ29hbCwgb2YgY291cnNlLCBpcyB0byBpbXByb3ZlIHRoZSBtb2JpbGUgZXhwZXJpZW5jZSBmb3IKK3JlYWwgdXNlcnMgYnkgZmFjaWxpdGF0aW5nIGlubm92YXRpb24uIEFjY29yZGluZ2x5LCB0aGUgcHJpbWFyeSBnb2FsIG9mIHRoZQorQU9TUCBpcyB0byBtYWtlIHN1cmUgQW5kcm9pZCBpcyBhIHN1Y2Nlc3MgYXMgYW4gZW5kIHVzZXIgcHJvZHVjdC48L3A+Cis8aDI+R292ZXJuYW5jZSBQaGlsb3NvcGh5PC9oMj4KKzxwPlRoZSBjb21wYW5pZXMgdGhhdCBoYXZlIGludmVzdGVkIGluIEFuZHJvaWQgaGF2ZSBkb25lIHNvIG9uIGl0cyBtZXJpdHMsCitiZWNhdXNlIHdlIGNvbGxlY3RpdmVseSBiZWxpZXZlIHRoYXQgYW4gb3BlbiBwbGF0Zm9ybSBpcyBuZWNlc3NhcnkuIEFuZHJvaWQgaXMKK2ludGVudGlvbmFsbHkgYW5kIGV4cGxpY2l0bHkgYW4gb3Blbi1zb3VyY2UgLS0gYXMgb3Bwb3NlZCB0byBmcmVlIHNvZnR3YXJlIC0tCitlZmZvcnQ6IGEgZ3JvdXAgb2Ygb3JnYW5pemF0aW9ucyB3aXRoIHNoYXJlZCBuZWVkcyBoYXMgcG9vbGVkCityZXNvdXJjZXMgdG8gY29sbGFib3JhdGUgb24gYSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgYSBzaGFyZWQgcHJvZHVjdC4gCitUaGUgQW5kcm9pZCBwaGlsb3NvcGh5IGlzIHByYWdtYXRpYywgZmlyc3QgYW5kIGZvcmVtb3N0LiBUaGUgb2JqZWN0aXZlIGlzCithIHNoYXJlZCBwcm9kdWN0IHRoYXQgZWFjaCBjb250cmlidXRvciBjYW4gdGFpbG9yIGFuZCBjdXN0b21pemUuPC9wPgorPHA+VW5jb250cm9sbGVkIGN1c3RvbWl6YXRpb24gY2FuLCBvZiBjb3Vyc2UsIGxlYWQgdG8gaW5jb21wYXRpYmxlCitpbXBsZW1lbnRhdGlvbnMuIFRvIHByZXZlbnQgdGhpcywgdGhlIEFPU1AgYWxzbyBtYWludGFpbnMgdGhlIEFuZHJvaWQKK0NvbXBhdGliaWxpdHkgUHJvZ3JhbSwgd2hpY2ggc3BlbGxzIG91dCB3aGF0IGl0IG1lYW5zIHRvIGJlICJBbmRyb2lkCitjb21wYXRpYmxlIiwgYW5kIHdoYXQgaXMgcmVxdWlyZWQgb2YgZGV2aWNlIGJ1aWxkZXJzIHRvIGFjaGlldmUgdGhhdCBzdGF0dXMuCitBbnlvbmUgY2FuIChhbmQgd2lsbCEpIHVzZSB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBmb3IgYW55IHB1cnBvc2UsIGFuZCB3ZQord2VsY29tZSBhbGwgc3VjaCB1c2VzLiBIb3dldmVyLCBpbiBvcmRlciB0byB0YWtlIHBhcnQgaW4gdGhlIHNoYXJlZAorZWNvc3lzdGVtIG9mIGFwcGxpY2F0aW9ucyB0aGF0IHdlIGFyZSBidWlsZGluZyBhcm91bmQgQW5kcm9pZCwgZGV2aWNlIGJ1aWxkZXJzCitjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIENvbXBhdGliaWxpdHkgUHJvZ3JhbS48L3A+Cis8cD5UaG91Z2ggQW5kcm9pZCBjb25zaXN0cyBvZiBtdWx0aXBsZSBzdWItcHJvamVjdHMsIHRoaXMgaXMgc3RyaWN0bHkgYQorcHJvamVjdC1tYW5hZ2VtZW50IHRlY2huaXF1ZS4gV2UgdmlldyBhbmQgbWFuYWdlIEFuZHJvaWQgYXMgYSBzaW5nbGUsCitob2xpc3RpYyBzb2Z0d2FyZSBwcm9kdWN0LCBub3QgYSAiZGlzdHJpYnV0aW9uIiwgc3BlY2lmaWNhdGlvbiwgb3IgY29sbGVjdGlvbgorb2YgcmVwbGFjZWFibGUgcGFydHMuIENvbmNlcHR1YWxseSwgb3VyIG5vdGlvbiBpcyB0aGF0IGRldmljZSBidWlsZGVycyBwb3J0CitBbmRyb2lkIHRvIGEgZGV2aWNlOyB0aGV5IGRvbid0IGltcGxlbWVudCBhIHNwZWNpZmljYXRpb24gb3IgY3VyYXRlIGEKK2Rpc3RyaWJ1dGlvbi48L3A+Cis8aDI+SG93IFdlIFdvcms8L2gyPgorPHA+V2Uga25vdyB0aGF0IHF1YWxpdHkgZG9lcyBub3QgY29tZSB3aXRob3V0IGhhcmQgd29yay4gQWxvbmcgd2l0aCBtYW55CitwYXJ0bmVycywgR29vZ2xlIGhhcyBjb250cmlidXRlZCBmdWxsLXRpbWUgZW5naW5lZXJzLCBwcm9kdWN0IG1hbmFnZXJzLCBVSQorZGVzaWduZXJzLCBRdWFsaXR5IEFzc3VyYW5jZSwgYW5kIGFsbCB0aGUgb3RoZXIgcm9sZXMgcmVxdWlyZWQgdG8gYnJpbmcKK21vZGVybiBkZXZpY2VzIHRvIG1hcmtldC4gIFdlIGludGVncmF0ZSB0aGUgb3BlbiBzb3VyY2UgYWRtaW5pc3RyYXRpb24gYW5kCittYWludGVuYW5jZSBpbnRvIHRoZSBsYXJnZXIgcHJvZHVjdCBkZXZlbG9wbWVudCBjeWNsZS48L3A+Cis8cD5JbiBhIG51dHNoZWxsOjwvcD4KKzx1bD4KKzxsaT5BdCBhbnkgZ2l2ZW4gbW9tZW50LCB0aGVyZSBpcyBhIGN1cnJlbnQgbGF0ZXN0IHJlbGVhc2Ugb2YgdGhlIEFuZHJvaWQKK3BsYXRmb3JtLiBUaGlzIHR5cGljYWxseSB0YWtlcyB0aGUgZm9ybSBvZiBhIGJyYW5jaCBpbiB0aGUgdHJlZS48L2xpPgorPGxpPkRldmljZSBidWlsZGVycyBhbmQgQ29udHJpYnV0b3JzIHdvcmsgd2l0aCB0aGUgY3VycmVudAorbGF0ZXN0IHJlbGVhc2UsIGZpeGluZyBidWdzLCBsYXVuY2hpbmcgbmV3IGRldmljZXMsIGV4cGVyaW1lbnRpbmcgd2l0aCBuZXcKK2ZlYXR1cmVzLCBhbmQgc28gb24uPC9saT4KKzxsaT5JbiBwYXJhbGxlbCwgR29vZ2xlIHdvcmtzIGludGVybmFsbHkgb24gdGhlIG5leHQgdmVyc2lvbiBvZiB0aGUKK0FuZHJvaWQgcGxhdGZvcm0gYW5kIGZyYW1ld29yaywgd29ya2luZyBhY2NvcmRpbmcgdG8gdGhlIHByb2R1Y3QncyBuZWVkcyBhbmQKK2dvYWxzLiBTb21lIG9mIHRoZSB3b3JrIGZyb20gdGhlIGN1cnJlbnQgbGF0ZXN0IHRyZWUgd2lsbCBwcm9tb3RlZCBpbnRvIHRoZXNlCityZWxlYXNlcy48L2xpPgorPGxpPldoZW4gdGhlICJuKzEidGggdmVyc2lvbiBpcyBkZXRlcm1pbmVkIHRvIGJlIG5lYXJpbmcgY29tcGxldGlvbiwgaXQgd2lsbAorYmUgcHVibGlzaGVkIHRvIHRoZSBwdWJsaWMgc291cmNlIHRyZWUsIGFuZCBiZWNvbWUgdGhlIG5ldyBsYXRlc3QKK3JlbGVhc2UuPC9saT4KKzxsaT5TaW5jZSBBbmRyb2lkIGlzIG9wZW4gc291cmNlLCBub3RoaW5nIHByZXZlbnRzIGRldmljZSBpbXBsZW1lbnRlcnMgZnJvbQorc2hpcHBpbmcgZGV2aWNlcyBvbiBvbGRlciAob2Jzb2xldGUpIEFuZHJvaWQgYnVpbGRzLiBIb3dldmVyLCBhY3RpdmUgd29yayB3aWxsCitiZSBmb2N1c2VkIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtIHJlbGVhc2UuPC9saT4KKzwvdWw+Cis8cD5UbyBtZWV0IG91ciBnb2FscywgQW5kcm9pZCBuZWVkcyB0byBhY2hpZXZlIHdpZGVzcHJlYWQsIGNvbXBhdGlibGUKK2Fkb3B0aW9uLiBXZSBiZWxpZXZlIHRoYXQgdGhlIGJlc3Qgd2F5IHRvIGFjY29tcGxpc2ggdGhhdCBpcyB0byBtYWtlIHN1cmUgdGhhdAord2Ugc2hpcCBoaWdoLXF1YWxpdHksIGZsYWdzaGlwIGRldmljZXMgd2l0aCBhbiBpbnRlbnNlIHByb2R1Y3QgYW5kIGVuZC11c2VyCitmb2N1cy4gVGhlICJuZXh0IHJlbGVhc2UiIG9mIEFuZHJvaWQgaXMgZHJpdmVuIGJ5IHRoZSBwcm9kdWN0IG5lZWRzIGZvciB0aGUgbmV4dAorZ2VuZXJhdGlvbiBvZiBtb2JpbGUgZGV2aWNlczsgdGhlIHJlc3VsdGluZyBleGNlbGxlbnQgcHJvZHVjdCBpcyB0aGVuIHJlbGVhc2VkCit0byBvcGVuIHNvdXJjZSBhbmQgYmVjb21lcyB0aGUgbmV3IGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcGxhdGZvcm0uPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvY29tbXVuaXR5L2NvbW11bml0eV90b2MuY3MgYi9wZGsvZG9jcy9jb21tdW5pdHkvY29tbXVuaXR5X3RvYy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzFhYWUwCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvY29tbXVuaXR5L2NvbW11bml0eV90b2MuY3MKQEAgLTAsMCArMSwyNCBAQAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKzwhLS0KK2Z1bmN0aW9uIG5vdGhpbmcoKSB7fQorLS0+Cis8L3NjcmlwdD4KKzx1bD4KKyAgPGxpPjxoMj5EaXNjdXNzaW9uIEdyb3VwczwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1wbGF0Zm9ybSI+YW5kcm9pZC1wbGF0Zm9ybTwvYT4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogNzUlOyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHMiPltvZmYtc2l0ZV08L3NwYW4+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQtcG9ydGluZyI+YW5kcm9pZC1wb3J0aW5nPC9hPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA3NSU7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyI+W29mZi1zaXRlXTwvc3Bhbj48L2xpPgorICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1rZXJuZWwiPmFuZHJvaWQta2VybmVsPC9hPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA3NSU7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyI+W29mZi1zaXRlXTwvc3Bhbj48L2xpPgorICAgIDxsaT48YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvcmVwby1kaXNjdXNzIj5yZXBvLWRpc2N1c3M8L2E+IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDc1JTsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzIj5bb2ZmLXNpdGVdPC9zcGFuPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLWZyYW1ld29yayI+YW5kcm9pZC1mcmFtZXdvcms8L2E+IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDc1JTsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzIj5bb2ZmLXNpdGVdPC9zcGFuPjwvbGk+CisgIDwvdWw+PC9saT4KKyAgPGxpPjxoMj5PdGhlciBMaW5rczwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5jb21tdW5pdHkvZ3JvdXBzLWNoYXJ0ZXIuaHRtbCI+R3JvdXBzIENoYXJ0ZXI8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9jb21tdW5pdHkvaW5kZXguaHRtbCI+QXBwIERldmVsb3BlciBHcm91cHM8L2E+IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDc1JTsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzIj5bb2ZmLXNpdGVdPC9zcGFuPjwvbGk+CisgIDwvdWw+PC9saT4KKzwvdWw+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cis8IS0tCisgICAgYnVpbGRUb2dnbGVMaXN0cygpOworLy8tLT4KKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21tdW5pdHkvZ3JvdXBzLWNoYXJ0ZXIuamQgYi9wZGsvZG9jcy9jb21tdW5pdHkvZ3JvdXBzLWNoYXJ0ZXIuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1YjUwMQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2NvbW11bml0eS9ncm91cHMtY2hhcnRlci5qZApAQCAtMCwwICsxLDMxIEBACitwYWdlLnRpdGxlPUFuZHJvaWQgRGlzY3Vzc2lvbiBHcm91cHMgQ2hhcnRlcgorZG9jLnR5cGU9Y29tbXVuaXR5CitAamQ6Ym9keQorPGgyPgorQXVkaWVuY2UKKzwvaDI+Cis8cD5UaGVzZSBkaXNjdXNzaW9uIGdyb3VwcyBhcmUgaW50ZW5kZWQgZm9yIGRldmVsb3BlcnMgd29ya2luZyB3aXRoIHRoZSBBbmRyb2lkIHBsYXRmb3JtLiBFdmVyeW9uZSBpcyB3ZWxjb21lIHRvIGpvaW4gaW4sIHByb3ZpZGVkIHlvdSBmb2xsb3cgb3VyIGNvbW11bml0eSdzIHBvbGljaWVzIGRlc2NyaWJlZCBiZWxvdy4gT3VyIHVzZXJzIGhlbHAgZWFjaCBvdGhlciwgYW5kIG1hbnkgZXhwZXJ0cyBwb3N0IHRvIHRoZXNlIGdyb3VwcywgaW5jbHVkaW5nIG1lbWJlcnMgb2YgdGhlIE9wZW4gSGFuZHNldCBBbGxpYW5jZS4KKzwvcD4KKzxwPk5vIHRvcGljIGlzIG9mZi1saW1pdHMsIHByb3ZpZGVkIGl0IHJlbGF0ZXMgdG8gQW5kcm9pZCBpbiBzb21lIHdheS4gSG93ZXZlciwgc2luY2UgdGhlc2UgYXJlIHZlcnkgYnVzeSBsaXN0cywgc2VhcmNoIHRoZSBhcmNoaXZlcyBiZWZvcmUgcG9zdGluZyB5b3VyIHF1ZXN0aW9uOyB5b3UgbWF5IGZpbmQgeW91ciBxdWVzdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFuc3dlcmVkLgorPC9wPgorPGgyPgorTWFpbGluZyBsaXN0IHJ1bGVzCis8L2gyPgorPHA+V2UgbG92ZSBzaW1wbGljaXR5IGFuZCBoYXRlIHJlc3RyaWN0aW9ucywgc28gd2Uga2VlcCBvdXIgcG9saWNpZXMgbWluaW1hbC4gVGhlIHJ1bGVzIGJlbG93IGRlc2NyaWJlIHdoYXQncyBleHBlY3RlZCBvZiBzdWJzY3JpYmVycyB0byB0aGUgQW5kcm9pZCBtYWlsaW5nIGxpc3RzLgorPC9wPgorPHVsPjxsaT48Yj5QbGVhc2UgYmUgZnJpZW5kbHk8L2I+Cis8YnI+U2hvd2luZyBjb3VydGVzeSBhbmQgcmVzcGVjdCB0byBvdGhlcnMgaXMgYSB2aXRhbCBwYXJ0IG9mIHRoZSBBbmRyb2lkIGN1bHR1cmUsIGFuZCB3ZSBleHBlY3QgZXZlcnlvbmUgcGFydGljaXBhdGluZyBpbiB0aGUgQW5kcm9pZCBjb21tdW5pdHkgdG8gam9pbiB1cyBpbiBhY2NlcHRpbmcgbm90aGluZyBsZXNzLiBCZWluZyBjb3VydGVvdXMgZG9lcyBub3QgbWVhbiB3ZSBjYW4ndCBjb25zdHJ1Y3RpdmVseSBkaXNhZ3JlZSB3aXRoIGVhY2ggb3RoZXIsIGJ1dCBpdCBkb2VzIG1lYW4gdGhhdCB3ZSBtdXN0IGJlIHBvbGl0ZSB3aGVuIHdlIGRvIHNvLiBUaGVyZSdzIG5ldmVyIGEgcmVhc29uIHRvIGJlIGFudGFnb25pc3RpYyBvciBkaXNtaXNzaXZlIHRvd2FyZCBhbnlvbmU7IGlmIHlvdSB0aGluayB0aGVyZSBpcywgdGhpbmsgYWdhaW4gYmVmb3JlIHlvdSBwb3N0Ljxicj48YnI+TW9iaWxlIGRldmVsb3BtZW50IGlzIHNlcmlvdXMgYnVzaW5lc3MsIGJ1dCBpdCdzIGFsc28gYSBsb3Qgb2YgZnVuLiBMZXQncyBrZWVwIGl0IHRoYXQgd2F5LiBMZXQncyBzdHJpdmUgdG8gYmUgb25lIG9mIHRoZSBmcmllbmRsaWVzdCBjb21tdW5pdGllcyBpbiBhbGwgb2Ygb3BlbiBzb3VyY2UuPGJyPjxicj48L2xpPgorPGxpPjxiPkFsbG93ZWQgZGlzY3Vzc2lvbiB0b3BpY3M8L2I+Cis8YnI+TW9zdCB0b3BpY3MgYXJlIHRlY2huaWNhbCBkaXNjdXNzaW9ucyBvZiBBbmRyb2lkIG9yIHVzZXJzIGhlbHBpbmcgZWFjaCBvdGhlciwgYnV0IHRoaXMgZ3JvdXAgaXMgaW50ZW5kZWQgZm9yIGRpc2N1c3Npb25zIG9mPGk+ZXZlcnl0aGluZzwvaT4KK2luIHRoZSB3b3JsZCBvZiBBbmRyb2lkLiBXZSB3ZWxjb21lIGFubm91bmNlbWVudHMgYW5kIGRpc2N1c3Npb24gb2YgcHJvZHVjdHMsIGxpYnJhcmllcywgcHVibGljYXRpb25zLCBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgQW5kcm9pZC1yZWxhdGVkIG5ld3MuIFdlIGV2ZW4gd2VsY29tZSAocG9saXRlISkgZGlzY3Vzc2lvbiBvZiBhcnRpY2xlcyBhbmQgaWRlYXMgY3JpdGljYWwgb2YgQW5kcm9pZC0tYWZ0ZXIgYWxsLCB3ZSBjYW4ndCBpbXByb3ZlIGlmIHdlIGRvbid0IGxpc3Rlbi4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB0aGUgc3ViamVjdCBtYXR0ZXIsIGFuZCB3ZSBkb24ndCBleGNsdWRlIGRpc2N1c3Npb25zIG9mIGNvbW1lcmNpYWwgcHJvZHVjdHMgaWYgdXNlcnMgYXJlIGludGVyZXN0ZWQgaW4gdGFsa2luZyBhYm91dCB0aGVtLjxicj48YnI+SG93ZXZlciwgd2UgaGF0ZSBzcGFtIGFsbW9zdCBhcyBwYXNzaW9uYXRlbHkgYXMgd2UgbG92ZSBjb3VydGVzeSBhbmQgcmVzcGVjdCwgc28gd2UgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gbGltaXQgZGlzY3Vzc2lvbnMgdGhhdCBhbW91bnQgdG8gc3BhbS4gT3V0cmlnaHQgc3BhbSB3aWxsIHJlc3VsdCBpbiB0aGUgc3BhbW1lciBiZWluZyBpbW1lZGlhdGVseSBhbmQgcGVybWFuZW50bHkgYmFubmVkIGZyb20gdGhlIGxpc3QuCis8L2xpPgorPC91bD4KKzxwPlRoZSBtb3N0IGltcG9ydGFudCBydWxlIGlzIGZyaWVuZGxpbmVzcy4gUmVtZW1iZXI6IGRpc3Jlc3BlY3QgYW5kIHJ1ZGVuZXNzIGFyZSBub3Qgd2VsY29tZSBpbiBvdXIgY29tbXVuaXR5IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLiBXZSBkb24ndCBoYXZlIGEgZm9ybWFsIHBvbGljeSBvbiBkZWFsaW5nIHdpdGggdHJvdWJsZW1ha2VycywgYW5kIHdlIGhvcGUgd2UgbmV2ZXIgbmVlZCBvbmUuVGhhdCBzYWlkLCB3ZSBkbyBwbGVkZ2UgdG8gZG8gb3VyIGJlc3QgdG8gYmUgZmFpciwgYW5kIHdlIHdpbGwgYWx3YXlzIHRyeSB0byB3YXJuIHNvbWVvbmUgYmVmb3JlIGJhbm5pbmcgaGltIG9yIGhlci4KKzwvcD4KKzxoMj4KK0NvbnRhY3RpbmcgdGhlIG1vZGVyYXRvcnMKKzwvaDI+Cis8cD5JZiB5b3Ugc2VlIGFueW9uZSBiZWluZyBydWRlLCBjYWxsIHRoZW0gb3V0IG9uIGl0LiBUaGlzIGlzIHlvdXIgZ3JvdXAgdG9vLCBhbmQgeW91IGRvbid0IGhhdmUgdG8gYWNjZXB0IHNvbWVvbmUgZWxzZSBiZWluZyBkaXNyZXNwZWN0ZnVsIGp1c3QgYmVjYXVzZSBpdCB3YXNuJ3QgZGlyZWN0ZWQgYXQgeW91LiBKdXN0IHJlbWVtYmVyIHRvIGJlIHBvbGl0ZSBhbmQgY291cnRlb3VzIHlvdXJzZWxmISBEb24ndCBhZGQgZnVlbCB0byB0aGUgZmlyZS4KKzwvcD4KKzxwPkJ1dCBpZiB5b3Ugc2VlIGFuIG91dHJhZ2VvdXMgdmlvbGF0aW9uLCB3YW50IHRvIHJlcG9ydCBzcGFtLCBmZWVsIHZlcnkgc3Ryb25nbHkgYWJvdXQgc29tZXRoaW5nLCBvciBldmVuIGlmIHlvdSBqdXN0IHdhbnQgdG8gY2hhdCwgdGhlbiBjb250YWN0IHRoZSBtYWlsaW5nIGxpc3QncyBvd25lcnMuIEl0J3Mgd2hhdCB3ZSdyZSBoZXJlIGZvciEKKzwvcD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2NvbW11bml0eS9pbmRleC5qZCBiL3Bkay9kb2NzL2NvbW11bml0eS9pbmRleC5qZAppbmRleCBiYzA0ZWVlLi42ZTZmNTllIDEwMDY0NAotLS0gYS9wZGsvZG9jcy9jb21tdW5pdHkvaW5kZXguamQKKysrIGIvcGRrL2RvY3MvY29tbXVuaXR5L2luZGV4LmpkCkBAIC0xLDYgKzEsMTE0IEBACi1ob21lPXRydWUKK3BhZ2UudGl0bGU9Q29tbXVuaXR5Citkb2MudHlwZT1jb21tdW5pdHkKIEBqZDpib2R5Cis8aDE+QW5kcm9pZCBDb21tdW5pdHk8L2gxPgorPHA+V2VsY29tZSB0byB0aGUgQW5kcm9pZCBjb21tdW5pdHkhPC9wPgorPHA+VGhlIGtleSB0byBhbnkgY29tbXVuaXR5IGlzLCBvYnZpb3VzbHksIGNvbW11bmljYXRpb24uIExpa2UgbW9zdCBwcm9qZWN0cywKK0FuZHJvaWQgY29tbXVuaWNhdGVzIHZpYSBtYWlsaW5nIGxpc3RzLiBCZWNhdXNlIEFuZHJvaWQgaXMgYW4gZXh0cmVtZWx5IGxhcmdlCitwcm9qZWN0IHdpdGggbWFueSBjb21wb25lbnRzLCB3ZSBoYXZlIG1hbnkgZGlzY3Vzc2lvbiBmb3J1bXMsIGVhY2ggZm9jdXNpbmcgb24KK2EgZGlmZmVyZW50IHRvcGljLjwvcD4KKzxwPlBsZWFzZSBjaGVjayBvdXQgdGhlIGdyb3VwcyBiZWxvdywgYW5kIGpvaW4gYW55IHRoYXQgc2VlbSBpbnRlcmVzdGluZyB0bworeW91LiBOb3RlIHRoYXQgaWYgeW91J3JlIGEgdXNlciBsb29raW5nIGZvciBoZWxwIHdpdGggeW91ciBBbmRyb2lkIGRldmljZSwKK3RoaXMgcGFnZSBwcm9iYWJseSBpc24ndCBmb3IgeW91OyB5b3Ugc2hvdWxkIGNvbnRhY3QgeW91ciBjYXJyaWVyIG9yIHJldGFpbGVyCitmb3IgaGVscCB3aXRoIHlvdXIgcGhvbmUuPC9wPgorPHA+UGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UncmUgbG9va2luZyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYnVpbGRpbmcKK2FwcGxpY2F0aW9ucyBmb3IgQW5kcm9pZCwgeW91IGNhbiBmaW5kIGEgc2VwYXJhdGUgc2V0IG9mIGdyb3VwcyBmb3IgdGhvc2UgYXQKK291ciBzaXN0ZXIgc2l0ZSwgZGV2ZWxvcGVyLmFuZHJvaWQuY29tOiA8YQoraHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9jb21tdW5pdHkvaW5kZXguaHRtbCI+aHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9jb21tdW5pdHkvaW5kZXguaHRtbDwvYT48L3A+CiAKLTxwPgotICBTb21lIGNvbW11bml0eSBpbmZvcm1hdGlvbiBoZXJlCi08L3A+Cis8aDI+R2V0dGluZyB0aGUgTW9zdCBmcm9tIE91ciBMaXN0czwvaDI+Cis8cD5QbGVhc2UgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBiZWZvcmUgeW91IHBvc3QgdG8gb3VyIGxpc3RzLjwvcD4KKzxvbD4KKyAgPGxpPjxiPlJlYWQgdGhlIDxhCisgIGhyZWY9IntAZG9jUm9vdH1jb21tdW5pdHkvZ3JvdXBzLWNoYXJ0ZXIuaHRtbCI+Q2hhcnRlcgorICBmb3Igb3VyIGZvcnVtcy48L2E+PC9iPiBUaGlzIGV4cGxhaW5zIHRoZSAoZmV3KSBydWxlcyBhbmQgZ3VpZGVsaW5lcyBmb3Igb3VyCisgIGNvbW11bml0eS48YnI+PC9saT4KKyAgPGxpPjxiPlNlYXJjaCB0aGUgZ3JvdXAgYXJjaGl2ZXMgdG8gc2VlIHdoZXRoZXIgeW91ciBxdWVzdGlvbnMgaGF2ZSBhbHJlYWR5CisgIGJlZW4gZGlzY3Vzc2VkLjwvYj48L2xpPiBUaGlzIGF2b2lkcyB0aW1lLXdhc3RpbmcgcmVkdW5kYW50IGRpc2N1c3Npb25zLgorICA8bGk+PGI+VXNlIGEgY2xlYXIsIHJlbGV2YW50IG1lc3NhZ2Ugc3ViamVjdC48L2I+IFRoaXMgaGVscHMgZXZlcnlvbmUsCisgIGJvdGggdGhvc2UgdHJ5aW5nIHRvIGFuc3dlciB5b3VyIHF1ZXN0aW9uIGFzIHdlbGwgYXMgdGhvc2Ugd2hvIG1heSBiZQorICBsb29raW5nIGZvciBpbmZvcm1hdGlvbiBpbiB0aGUgZnV0dXJlLjwvbGk+CisgIDxsaT48Yj5HaXZlIHBsZW50eSBvZiBkZXRhaWxzIGluIHlvdXIgcG9zdC48L2I+IENvZGUgb3IgbG9nIHNuaXBwZXRzLAorICBwb2ludGVycyB0byBzY3JlZW5zaG90cywgYW5kIHNpbWlsYXIgZGV0YWlscyB3aWxsIGdldCBiZXR0ZXIgcmVzdWx0cyBhbmQKKyAgbWFrZSBmb3IgYmV0dGVyIGRpc2N1c3Npb25zLiBGb3IgYSBncmVhdCBndWlkZSB0byBwaHJhc2luZyB5b3VyIHF1ZXN0aW9ucywKKyAgcmVhZCA8YSBocmVmPSJodHRwOi8vd3d3LmNhdGIub3JnLyU3RWVzci9mYXFzL3NtYXJ0LXF1ZXN0aW9ucy5odG1sIj5Ib3cgVG8KKyAgQXNrIFF1ZXN0aW9ucyBUaGUgU21hcnQgV2F5PC9hPi48L2xpPgorPC9vbD4KKworPGgyPk9wZW4gU291cmNlIFByb2plY3QgZGlzY3Vzc2lvbnM8L2gyPgorPHVsPgorPGxpPjxiPmFuZHJvaWQtYnVpbGRpbmc8L2I+PGJyLz4KK1N1YnNjcmliZSB0byB0aGlzIGxpc3QgZm9yIGRpc2N1c3Npb24gYW5kIGhlbHAgb24gYnVpbGRpbmcgdGhlIEFuZHJvaWQgc291cmNlCitjb2RlLCBhbmQgb24gdGhlIGJ1aWxkIHN5c3RlbS4gSWYgeW91J3ZlIGp1c3QgY2hlY2tlZCBvdXQgdGhlIHNvdXJjZSBjb2RlIGFuZAoraGF2ZSBxdWVzdGlvbnMgYWJvdXQgaG93IHRvIHR1cm4gaXQgaW50byBiaW5hcmllcywgc3RhcnQgaGVyZS48YnIvPjxici8+CitTdWJzY3JpYmUgdXNpbmcgR29vZ2xlIEdyb3VwczogPGEKK2hyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLWJ1aWxkaW5nIj5hbmRyb2lkLWJ1aWxkaW5nPC9hPjxici8+CitTdWJzY3JpYmUgdmlhIGVtYWlsOiA8YSBocmVmPSJtYWlsdG86YW5kcm9pZC1idWlsZGluZytzdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbSI+YW5kcm9pZC1idWlsZGluZytzdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4KKzwvbGk+CisKKzxsaT48Yj5hbmRyb2lkLXBvcnRpbmc8L2I+PGJyLz4KK1RoaXMgbGlzdCBpcyBmb3IgZGV2ZWxvcGVycyB3aG8gd2FudCB0byBwb3J0IEFuZHJvaWQgdG8gYSBuZXcgZGV2aWNlLiBJZgoreW91J3JlIHdvbmRlcmluZyBob3cgdG8gY29tYmluZSB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSB3aXRoIHlvdXIgaGFyZHdhcmUsCit0aGlzIGlzIHRoZSByaWdodCBncm91cCBmb3IgeW91LiBEaXNjdXNzIGhlcmUgdGhlIHNwZWNpZmljcyBvZiBwb3J0aW5nIEFuZHJvaWQKK3RvIGluZGl2aWR1YWwgZGV2aWNlcywgZnJvbSBvYnRhaW5pbmcgdG9vbGNoYWlucyBhbmQgbWVyZ2luZyBrZXJuZWwgZHJpdmVycworYWxsIHRoZSB3YXkgdG8gY29uZmlndXJpbmcgb3IgbW9kaWZ5aW5nIGFwcGxpY2F0aW9ucyBmb3IgeW91ciBzcGVjaWZpYworY29uZmlndXJhdGlvbi48YnIvPjxici8+CitTdWJzY3JpYmUgdXNpbmcgR29vZ2xlIEdyb3VwczogPGEKK2hyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLXBvcnRpbmciPmFuZHJvaWQtcG9ydGluZzwvYT48YnIvPgorU3Vic2NyaWJlIHZpYSBlbWFpbDogPGEgaHJlZj0ibWFpbHRvOmFuZHJvaWQtcG9ydGluZytzdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbSI+YW5kcm9pZC1wb3J0aW5nK3N1YnNjcmliZUBnb29nbGVncm91cHMuY29tPC9hPgorPC9saT4KKworPGxpPjxiPmFuZHJvaWQtcGxhdGZvcm08L2I+PGJyLz4KK1RoaXMgbGlzdCBpcyBmb3IgZGV2ZWxvcGVycyB3aG8gd2FudCB0byBjb250cmlidXRlIGNvZGUgdG8gdGhlIEFuZHJvaWQKK3VzZXItc3BhY2UgcHJvamVjdHMsIHN1Y2ggYXMgdGhlIGNvcmUgc3lzdGVtIGxpYnJhcmllcywgdGhlIEFuZHJvaWQKK3NlcnZpY2VzLCB0aGUgcHVibGljIEFQSXMsIG9yIHRoZSBidWlsdC1pbiBhcHBsaWNhdGlvbnMuIE5vdGU6IGNvbnRyaWJ1dG9ycwordG8gdGhlIEFuZHJvaWQga2VybmVsIHNob3VsZCBnbyB0byB0aGUgYW5kcm9pZC1rZXJuZWwgbGlzdCwgYmVsb3cuPGJyLz48YnIvPgorU3Vic2NyaWJlIHVzaW5nIEdvb2dsZSBHcm91cHM6IDxhCitocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYW5kcm9pZC1wbGF0Zm9ybSI+YW5kcm9pZC1wbGF0Zm9ybTwvYT48YnIvPgorU3Vic2NyaWJlIHZpYSBlbWFpbDogPGEgaHJlZj0ibWFpbHRvOmFuZHJvaWQtcGxhdGZvcm0rc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb20iPmFuZHJvaWQtcGxhdGZvcm0rc3Vic2NyaWJlQGdvb2dsZWdyb3Vwcy5jb208L2E+Cis8L2xpPgorCis8bGk+PGI+YW5kcm9pZC1rZXJuZWw8L2I+PGJyLz4KK1RoaXMgbGlzdCBpcyBmb3IgZGV2ZW9wZXJzIHdobyB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gdGhlIExpbnV4IGtlcm5lbCB0aGF0CitBbmRyb2lkIGRldmljZXMgdXNlLiBJZiB5b3UndmUgZG93bmxvYWRlZCB0aGUga2VybmVsIGNvZGUsIGlmIHlvdSBrbm93IGhvdyB0bworY29tcGlsZSBpdCwgaWYgeW91IHdhbnQgdG8gd3JpdGUga2VybmVsIGNvZGUgdG8gc3BlY2lmaWNhbGx5IHN1cHBvcnQgQW5kcm9pZCwKK3RoaXMgaXMgeW91ciBwbGFjZS4gVGhpcyBncm91cCBpc24ndCBmb3IgdXNlci1zcGFjZSB0b3BpY3MgKHNlZQorYW5kcm9pZC1wbGF0Zm9ybSBmb3IgdGhhdCksIGFuZCBwZW9wbGUgd2lsbCBzaGFrZSB0aGVpciBmaW5nZXJzIGF0IHlvdSBhbmQKK2NhbGwgeW91IG5hdWdodHkgaWYgeW91IGFzayB1c2VyLXNwYWNlIHF1ZXN0aW9ucyBoZXJlLjxici8+PGJyLz4KK1N1YnNjcmliZSB1c2luZyBHb29nbGUgR3JvdXBzOiA8YQoraHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQta2VybmVsIj5hbmRyb2lkLWtlcm5lbDwvYT48YnIvPgorU3Vic2NyaWJlIHZpYSBlbWFpbDogPGEgaHJlZj0ibWFpbHRvOmFuZHJvaWQta2VybmVsK3N1YnNjcmliZUBnb29nbGVncm91cHMuY29tIj5hbmRyb2lkLWtlcm5lbCtzdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4KKzwvbGk+Cis8L3VsPgorCis8aDI+VXNpbmcgZW1haWwgd2l0aCBHb29nbGUgR3JvdXBzPC9oMj4KKzxwPkluc3RlYWQgb2YgdXNpbmcgdGhlIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS8iPkdvb2dsZSBHcm91cHM8L2E+CitzaXRlLCB5b3UgY2FuIHVzZSB5b3VyIGVtYWlsIGNsaWVudCBvZiBjaG9pY2UgdG8gcGFydGljaXBhdGUgaW4gdGhlIG1haWxpbmcgbGlzdHMuPC9wPgorPHA+VG8gc3Vic2NyaWJlIHRvIGEgZ3JvdXAgd2l0aG91dCB1c2luZyB0aGUgR29vZ2xlIEdyb3VwcyBzaXRlLCB1c2UgdGhlIGxpbmsKK3VuZGVyICJzdWJzY3JpYmUgdmlhIGVtYWlsIiBpbiB0aGUgbGlzdHMgYWJvdmUuPC9wPgorPHA+VG8gc2V0IHVwIGhvdyB5b3UgcmVjZWl2ZSBtYWlsaW5nIGxpc3QgcG9zdGluZ3MgYnkgZW1haWw6PC9wPgorPG9sPgorPGxpPlNpZ24gaW50byB0aGUgZ3JvdXAgdmlhIHRoZSBHb29nbGUgR3JvdXBzIHNpdGUuIEZvciBleGFtcGxlLCBmb3IgdGhlIGFuZHJvaWQtZnJhbWV3b3JrIGdyb3VwIHlvdSB3b3VsZAordmlzaXQgPGEKK2hyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9hbmRyb2lkLWZyYW1ld29yayI+aHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQtZnJhbWV3b3JrPC9hPi48L2xpPgorPGxpPkNsaWNrICJFZGl0IG15IG1lbWJlcnNoaXAiIG9uIHRoZSByaWdodCBzaWRlLjwvbGk+Cis8bGk+VW5kZXIgIkhvdyBkbyB5b3Ugd2FudCB0byByZWFkIHRoaXMgZ3JvdXA/IiBzZWxlY3Qgb25lIG9mIHRoZSBlbWFpbCBvcHRpb25zLjwvbGk+Cis8L29sPgorCis8aDI+QW5kcm9pZCBvbiBJUkM8L2gyPgorPHA+V2UgYWxzbyBoYXZlIGEgcHJlc2VuY2Ugb24gSVJDIHZpYSBGcmVlbm9kZS4gV2UgbWFpbnRhaW4gdHdvIG9mZmljaWFsIElSQworY2hhbm5lbHMgb24gaXJjLmZyZWVub2RlLm5ldDo8L3A+Cis8dWw+Cis8bGk+PGI+I2FuZHJvaWQ8L2I+IC0gZGVkaWNhdGVkIHRvIGdlbmVyYWwgQW5kcm9pZCBkaXNjdXNzaW9uIGFuZCBwb3J0aW5nIGNvbmNlcm5zPC9saT4KKzxsaT48Yj4jYW5kcm9pZC1kZXY8L2I+IC0gZGVkaWNhdGVkIHRvIGRpc2N1c3Npb24gYWJvdXQgd3JpdGluZyBBbmRyb2lkIGFwcGxpY2F0aW9uczwvbGk+Cis8L3VsPgorPHA+VGhlIGNoYW5uZWxzIGFib3ZlIGFyZSBvZmZpY2lhbC4gVGhlcmUgYXJlIGEgZmV3IG90aGVyIGNoYW5uZWxzIHRoZQorY29tbXVuaXR5IGlzIHVzaW5nLCBidXQgYXJlIG5vdCBvZmZpY2lhbC4gVGhlc2UgYXJlbid0IG9mZmljaWFsIG9yIG9mZmljaWFsbHkKK21vZGVyYXRlZC9tYW5hZ2VkLCBzbyB5b3UgdXNlIHRoZSBjaGFubmVscyBiZWxvdyBhdCB5b3VyIG93biByaXNrLiBUaGUgT3BlbgorSGFuZHNldCBBbGxpYW5jZSBkb2Vzbid0IGVuZG9yc2UgdGhlc2UgY2hhbm5lbHMsIHRoZXJlJ3Mgbm8gd2FycmFudHkgZXhwcmVzcworb3IgaW1wbGllZCwgYW5kIHNvIG9uLiBUaGVyZSBtYXkgYmUgbW9yZS48L3A+Cis8dWw+Cis8bGk+PGI+I2FuZHJvaWQtb2ZmdG9waWM8L2I+IC0gZm9yLCB3ZWxsLCBvZmYtdG9waWMgZGlzY3Vzc2lvbnM8L2xpPgorPGxpPjxiPiNhbmRyb2lkLXJvb3Q8L2I+IC0gZm9yIGRpc2N1c3Npb24gcmVsYXRlZCB0byBvZmYtbGFiZWwgdXNlcyBvZiBoYXJkd2FyZTwvbGk+Cis8bGk+PGI+I2FuZHJvaWRmcmE8L2I+IC0gcG91ciBkaXNjdXRlciBkJ0FuZHJvaWQgZW4gZnJhbsOnYWlzPC9saT4KKzwvdWw+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2NvbXBhdGliaWxpdHlfdG9jLmNzIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9jb21wYXRpYmlsaXR5X3RvYy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg4ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9jb21wYXRpYmlsaXR5X3RvYy5jcwpAQCAtMCwwICsxLDI1IEBACis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorPCEtLQorZnVuY3Rpb24gbm90aGluZygpIHt9CistLT4KKzwvc2NyaXB0PgorCis8dWw+CisgIDxsaT48aDI+R2V0dGluZyBTdGFydGVkPC9oMj48dWw+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PmNvbXBhdGliaWxpdHkvb3ZlcnZpZXcuaHRtbCI+Q29tcGF0aWJpbGl0eSBPdmVydmlldzwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIiPkN1cnJlbnQgQ0REPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PmNvbXBhdGliaWxpdHkvY3RzLWludHJvLmh0bWwiPkNUUyBJbnRyb2R1Y3Rpb248L2E+PC9saT4KKyAgPC91bD48L2xpPgorCisgIDxsaT48aDI+TW9yZSBJbmZvcm1hdGlvbjwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5kb3dubG9hZHMvaW5kZXguaHRtbCI+RG93bmxvYWRzPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PmZhcXMuaHRtbCNjb21wYXRpYmlsaXR5Ij5GQVFzPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PmNvbXBhdGliaWxpdHkvY29udGFjdC11cy5odG1sIj5Db250YWN0IFVzPC9hPjwvbGk+CisgIDwvdWw+PC9saT4KKzwvdWw+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKzwhLS0KKyAgICBidWlsZFRvZ2dsZUxpc3RzKCk7CisvLy0tPgorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2NvbnRhY3QtdXMuamQgYi9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2NvbnRhY3QtdXMuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0ZTg4NwotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvY29udGFjdC11cy5qZApAQCAtMCwwICsxLDMxIEBACitwYWdlLnRpdGxlPUNvbnRhY3QgVXMKK2RvYy50eXBlPWNvbXBhdGliaWxpdHkKK0BqZDpib2R5Cis8cD5UaGFua3MgZm9yIHlvdXIgaW50ZXJlc3QgaW4gQW5kcm9pZCBjb21wYXRpYmlsaXR5ITwvcD4KKzxwPklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBhYm91dCBBbmRyb2lkIGNvbXBhdGliaWxpdHkgdGhhdCBhcmVuJ3QgY292ZXJlZCBpbgordGhpcyBzaXRlLCB5b3UgY2FuIHJlYWNoIHVzIGluIG9uZSBvZiBhIGZldyBkaWZmZXJlbnQgd2F5cy4gVG8gZ2V0IHRoZSBtb3N0CitvdXQgb2YgYW55IG9mIHRoZXNlIG9wdGlvbnMsIHBsZWFzZSBmaXJzdCByZWFkICJHZXR0aW5nIHRoZSBNb3N0IGZyb20gT3VyCitMaXN0cyIgb24gdGhlIDxhIGhyZWY9IntAZG9jUm9vdH1jb21tdW5pdHkvaW5kZXguaHRtbCI+Q29tbXVuaXR5IHBhZ2UuPC9hPjwvcD4KKworPGgzPkRpc2N1c3Npb24gR3JvdXA8L2gzPgorPHA+VGhlIHByZWZlcnJlZCB3YXkgdG8gcmVhY2ggdXMgaXMgdmlhIHRoZSA8YQoraHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2FuZHJvaWQtY29tcGF0aWJpbGl0eSI+YW5kcm9pZC1jb21wYXRpYmlsaXR5CittYWlsaW5nIGxpc3Q8L2E+LiBVc2UgdGhpcyBsaXN0IGZvciBhbGwgeW91ciBjb21wYXRpYmlsaXR5LXJlbGF0ZWQgcXVlc3Rpb25zLgorUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhpcyBpcyBhIHB1YmxpYyBmb3J1bS48L3A+CisKKzxoMz5DVFMgVGVjaG5pY2FsIFF1ZXN0aW9uczwvaDM+Cis8cD5JZiB5b3UgaGF2ZSBzcGVjaWZpYyBpc3N1ZXMgd2l0aCB0aGUgQ29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlIHRoYXQgcmVxdWlyZQoreW91IHRvIGRpc2Nsb3NlIGluZm9ybWF0aW9uIHlvdSdkIHByZWZlciBub3QgdG8gYmUgcHVibGljLCB5b3UgY2FuIGNvbnRhY3QgYW4KK2VtYWlsIGFkZHJlc3Mgd2UndmUgc2V0IHVwIHNwZWNpZmljYWxseSB0aGlzIHB1cnBvc2U6IDxhCitocmVmPSJtYWlsdG86Y3RzQGFuZHJvaWQuY29tIj5jdHNAYW5kcm9pZC5jb208L2E+LiBUaGlzIGVtYWlsIGFkZHJlc3MgaXMgZm9yCitjYXNlcyB0aGF0IHJlcXVpcmUgZGlzY2xvc3VyZSBvZiBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb25seSwgc28gZ2VuZXJhbAorcXVlc3Rpb25zIHdpbGwgYmUgZGlyZWN0ZWQgYmFjayB0byB0aGUgcHVibGljIGFuZHJvaWQtY29tcGF0aWJpbGl0eQorbGlzdC4gTm90ZSBhbHNvIHRoYXQgdGhpcyBsaXN0IGlzIGZvciBzcGVjaWZpYyB0ZWNobmljYWwgcXVlc3Rpb25zOyBnZW5lcmFsCitpbnF1aXJpZXMgd2lsbCBhbHNvIGJlIGRpcmVjdGVkIGJhY2sgdG8gdGhlIGFuZHJvaWQtY29tcGF0aWJpbGl0eSBsaXN0LjwvcD4KKworPGgzPlByaXZhdGUgSW5xdWlyaWVzPC9oMz4KKzxwPkZpbmFsbHksIGJ1c2luZXNzIGlucXVpcmllcyBhYm91dCB0aGUgY29tcGF0aWJpbGl0eSBwcm9ncmFtLCBpbmNsdWRpbmcKK3JlcXVlc3RzIHRvIHVzZSBicmFuZGluZyBlbGVtZW50cyBhbmQgc28gb24sIGNhbiBiZSBzZW50IHRvIHRoZSBhZGRyZXNzIDxhCitocmVmPSJtYWlsdG86Y29tcGF0aWJpbGl0eUBhbmRyb2lkLmNvbSI+Y29tcGF0aWJpbGl0eUBhbmRyb2lkLmNvbTwvYT4uIExpa2UKK3RoZSBDVFMgYWRkcmVzcywgdGhpcyBhZGRyZXNzIGlzIGZvciBzcGVjaWZpYywgcHJpdmF0ZSBpbnF1aXJpZXM7IGdlbmVyYWwKK3F1ZXN0aW9ucyB3aWxsIGJlIGRpcmVjdGVkIGJhY2sgdG8gdGhlIGFuZHJvaWQtY29tcGF0aWJpbGl0eSBsaXN0LjwvcD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvY3RzLWludHJvLmpkIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9jdHMtaW50cm8uamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkMjM1OQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvY3RzLWludHJvLmpkCkBAIC0wLDAgKzEsODkgQEAKK3BhZ2UudGl0bGU9Q29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlCitkb2MudHlwZT1jb21wYXRpYmlsaXR5CitAamQ6Ym9keQorPGgzPkhvdyBkb2VzIHRoZSBDVFMgd29yaz88L2gzPgorPGRpdj48aW1nIHNyYz0ie0Bkb2NSb290fWltYWdlcy9jdHMtMC5wbmciPjwvZGl2PgorPGRpdj5UaGUgQ1RTIGlzIGFuIGF1dG9tYXRlZCB0ZXN0aW5nIGhhcm5lc3MgdGhhdCBpbmNsdWRlcyB0d28gbWFqb3Igc29mdHdhcmUgY29tcG9uZW50czo8L2Rpdj4KKzx1bD4KKzxsaT5UaGUgQ1RTIHRlc3QgaGFybmVzcyBydW5zIG9uIHlvdXIgZGVza3RvcCBtYWNoaW5lIGFuZCBtYW5hZ2VzIHRlc3QgZXhlY3V0aW9uLjwvbGk+Cis8bGk+SW5kaXZpZHVhbCB0ZXN0IGNhc2VzIGFyZSBleGVjdXRlZCBvbiBhdHRhY2hlZCBtb2JpbGUgZGV2aWNlcyBvciBvbiBhbgorZW11bGF0b3IuIFRoZSB0ZXN0IGNhc2VzIGFyZSB3cml0dGVuIGluIEphdmEgYXMgSlVuaXQgdGVzdHMgYW5kIHBhY2thZ2VkIGFzCitBbmRyb2lkIC5hcGsgZmlsZXMgdG8gcnVuIG9uIHRoZSBhY3R1YWwgZGV2aWNlIHRhcmdldC48L2xpPgorPC91bD4KKworPGgzPldvcmtmbG93PC9oMz4KKzxvbD4KKzxsaT5PYnRhaW4gdGhlIENUUyBzb3VyY2UgY29kZS4gVGhlIENUUyBpcyBpbmNsdWRlZCBpbiB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBhdmFpbGFibGUgZnJvbSB0aGUgQW5kcm9pZAorT3BlbiBTb3VyY2UgUHJvamVjdC4gKFRvIGdldCBhIGNvcHkgb2YgdGhhdCBzb3VyY2UgY29kZSwgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+cmVhZCB0aGlzIHBhZ2UuPC9hPjwvbGk+Cis8bGk+QXR0YWNoIGF0IGxlYXN0IG9uZSBkZXZpY2UgKG9yIGVtdWxhdG9yKSB0byB5b3VyIG1hY2hpbmUuPC9saT4KKzxsaT5MYXVuY2ggdGhlIENUUy4gVGhlIENUUyB0ZXN0IGhhcm5lc3MgbG9hZHMgdGhlIHRlc3QgcGxhbiBvbnRvIHRoZSBhdHRhY2hlZCBkZXZpY2VzLiBGb3IgZWFjaCB0ZXN0IGluIHRoZSB0ZXN0IGhhcm5lc3M6CisgICAgPHVsPgorICAgIDxsaT5UaGUgdGVzdCBoYXJuZXNzIHB1c2hlcyBhIC5hcGsgZmlsZSB0byBlYWNoIGRldmljZSwgZXhlY3V0ZXMgdGhlIHRlc3QgdGhyb3VnaCBpbnN0cnVtZW50YXRpb24sIGFuZCByZWNvcmRzIHRlc3QgcmVzdWx0cy48L2xpPgorICAgIDxsaT5UaGUgdGVzdCBoYXJuZXNzIHJlbW92ZXMgdGhlIC5hcGsgZmlsZSBmcm9tIGVhY2ggZGV2aWNlLjwvbGk+CisgICAgPC91bD4KKzwvbGk+Cis8bGk+T25jZSBhbGwgdGhlIHRlc3RzIGFyZSBleGVjdXRlZCwgeW91IGNhbiB2aWV3IHRoZSB0ZXN0IHJlc3VsdHMgaW4geW91ciBicm93c2VyIGFuZCB1c2UgdGhlIHJlc3VsdHMgdG8gYWRqdXN0IHlvdXIgZGVzaWduLiBZb3UgY2FuIGNvbnRpbnVlIHRvIHJ1biB0aGUgQ1RTIHRocm91Z2hvdXQgeW91ciBkZXZlbG9wbWVudCBwcm9jZXNzLjwvbGk+Cis8L29sPgorPGRpdj5XaGVuIHlvdSBhcmUgcmVhZHksIHlvdSBjYW4gc3VibWl0IHRoZSByZXBvcnQgZ2VuZXJhdGVkIGJ5IHRoZSBDVFMgdG8gY3RzQGFuZHJvaWQuY29tLiBUaGUgcmVwb3J0IGlzIGEgLnppcCBhcmNoaXZlZCBmaWxlIHRoYXQgY29udGFpbnMgWE1MIHJlc3VsdHMgYW5kIHN1cHBsZW1lbnRhbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNjcmVlbiBjYXB0dXJlcy48L2Rpdj4KKworPGgzPlR5cGVzIG9mIHRlc3QgY2FzZXM8L2gzPgorVGhlIENUUyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIHRlc3QgY2FzZXM6Cis8dWw+Cis8bGk+PGk+VW5pdCB0ZXN0czwvaT4gdGVzdCBhdG9taWMgdW5pdHMgb2YgY29kZSB3aXRoaW4gdGhlIEFuZHJvaWQgcGxhdGZvcm07IGUuZy4gYSBzaW5nbGUgY2xhc3MsIHN1Y2ggYXMgamF2YS51dGlsLkhhc2hNYXAuPC9saT4KKzxsaT48aT5GdW5jdGlvbmFsIHRlc3RzPC9pPiB0ZXN0IGEgY29tYmluYXRpb24gb2YgQVBJcyB0b2dldGhlciBpbiBhIGhpZ2hlci1sZXZlbCB1c2UtY2FzZS48L2xpPgorPGxpPjxpPlJlZmVyZW5jZSBhcHBsaWNhdGlvbiB0ZXN0czwvaT4gaW5zdHJ1bWVudCBhIGNvbXBsZXRlIHNhbXBsZSBhcHBsaWNhdGlvbiB0byBleGVyY2lzZSBhIGZ1bGwgc2V0IG9mIEFQSXMgYW5kIEFuZHJvaWQgcnVudGltZSBzZXJ2aWNlczwvbGk+Cis8L3VsPgorPGRpdj5GdXR1cmUgdmVyc2lvbnMgb2YgdGhlIENUUyB3aWxsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiB0ZXN0IGNhc2VzOjwvZGl2PgorPHVsPgorPGxpPjxpPlJvYnVzdG5lc3MgdGVzdHM8L2k+IHRlc3QgdGhlIGR1cmFiaWxpdHkgb2YgdGhlIHN5c3RlbSB1bmRlciBzdHJlc3MuPC9saT4KKzxsaT48aT5QZXJmb3JtYW5jZSB0ZXN0czwvaT4gdGVzdCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHN5c3RlbSBhZ2FpbnN0IGRlZmluZWQgYmVuY2htYXJrcywgZm9yIGV4YW1wbGUgcmVuZGVyaW5nIGZyYW1lcyBwZXIgc2Vjb25kLjwvbGk+Cis8L3VsPgorCis8aDM+QXJlYXMgQ292ZXJlZDwvaDM+CitUaGUgdW5pdCB0ZXN0IGNhc2VzIGNvdmVyIHRoZSBmb2xsb3dpbmcgYXJlYXMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgPGJyPgorPHRhYmxlPjx0Ym9keT4KKzx0cj48dGQ+QXJlYTwvdGQ+PHRkPkRlc2NyaXB0aW9uIDxicj48L3RkPjwvdHI+Cis8dHI+PHRkPlNpZ25hdHVyZSB0ZXN0czwvdGQ+Cis8dGQ+Rm9yIGVhY2ggQW5kcm9pZCByZWxlYXNlLCB0aGVyZSBhcmUgWE1MIGZpbGVzIGRlc2NyaWJpbmcgdGhlIHNpZ25hdHVyZXMgb2YgYWxsIHB1YmxpYyBBUElzIGNvbnRhaW5lZCBpbiB0aGUgcmVsZWFzZS4gVGhlIENUUyBjb250YWlucyBhIHV0aWxpdHkgdG8gY2hlY2sgdGhvc2UgQVBJIHNpZ25hdHVyZXMgYWdhaW5zdCB0aGUgQVBJcyBhdmFpbGFibGUgb24gdGhlIGRldmljZS4gVGhlIHJlc3VsdHMgZnJvbSBzaWduYXR1cmUgY2hlY2tpbmcgYXJlIHJlY29yZGVkIGluIHRoZSB0ZXN0IHJlc3VsdCBYTUwgZmlsZS4KKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5QbGF0Zm9ybSBBUEkgVGVzdHM8L3RkPgorPHRkPlRlc3QgdGhlIHBsYXRmb3JtIChjb3JlIGxpYnJhcmllcyBhbmQgQW5kcm9pZCBBcHBsaWNhdGlvbiBGcmFtZXdvcmspIEFQSXMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgU0RLIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYW5kcm9pZC9yZWZlcmVuY2UvY2xhc3Nlcy5odG1sIj5DbGFzcyBJbmRleDwvYT4KK3RvIGVuc3VyZSBBUEkgY29ycmVjdG5lc3M6Cis8dWw+Cis8bGk+Y29ycmVjdCBjbGFzcywgYXR0cmlidXRlIGFuZCBtZXRob2Qgc2lnbmF0dXJlczwvbGk+Cis8bGk+Y29ycmVjdCBtZXRob2QgYmVoYXZpb3I8L2xpPgorPGxpPm5lZ2F0aXZlIHRlc3RzIHRvIGVuc3VyZSBleHBlY3RlZCBiZWhhdmlvciBmb3IgaW5jb3JyZWN0IHBhcmFtZXRlciBoYW5kbGluZzwvbGk+Cis8L3VsPgorPC90ZD48L3RyPgorPHRyPjx0ZD5EYWx2aWsgVk0gVGVzdHM8L3RkPjx0ZD5UaGUgdGVzdHMgZm9jdXMgb24gdGVzdGluZyB0aGUgRGFsdmlrIFZNPC90ZD48L3RyPgorPHRyPjx0ZD5QbGF0Zm9ybSBEYXRhIE1vZGVsPC90ZD4KKzx0ZD5UaGUgQ1RTIHRlc3RzIHRoZSBjb3JlIHBsYXRmb3JtIGRhdGEgbW9kZWwgYXMgZXhwb3NlZCB0byBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRocm91Z2ggY29udGVudCBwcm92aWRlcnMsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIFNESyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2FuZHJvaWQvcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPmFuZHJvaWQucHJvdmlkZXI8L2E+CitwYWNrYWdlOgorPHVsPgorPGxpPmNvbnRhY3RzPC9saT4KKzxsaT5icm93c2VyPC9saT4KKzxsaT5zZXR0aW5nczwvbGk+Cis8bGk+bW9yZS4uLjwvbGk+Cis8L3VsPgorPC90ZD48L3RyPgorPHRyPjx0ZD5QbGF0Zm9ybSBJbnRlbnRzPC90ZD4KKzx0ZD5UaGUgQ1RTIHRlc3RzIHRoZSBjb3JlIHBsYXRmb3JtIGludGVudHMsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIFNESyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2FuZHJvaWQvcmVmZXJlbmNlL2F2YWlsYWJsZS1pbnRlbnRzLmh0bWwiPkF2YWlsYWJsZSBJbnRlbnRzPC9hPi48L3RkPgorPC90cj4KKzx0cj48dGQ+UGxhdGZvcm0gUGVybWlzc2lvbnM8L3RkPgorPHRkPlRoZSBDVFMgdGVzdHMgdGhlIGNvcmUgcGxhdGZvcm0gcGVybWlzc2lvbnMsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIFNESyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL2FuZHJvaWQvcmVmZXJlbmNlL2FuZHJvaWQvTWFuaWZlc3QucGVybWlzc2lvbi5odG1sIj5BdmFpbGFibGUgUGVybWlzc2lvbnM8L2E+LjwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5QbGF0Zm9ybSBSZXNvdXJjZXMgPGJyPjwvdGQ+Cis8dGQ+VGhlIENUUyB0ZXN0cyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgY29yZSBwbGF0Zm9ybSByZXNvdXJjZSB0eXBlcywgYXMgZG9jdW1lbnRlZCBpbiB0aGUgU0RLIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYW5kcm9pZC9yZWZlcmVuY2UvYXZhaWxhYmxlLXJlc291cmNlcy5odG1sIj5BdmFpbGFibGUgUmVzb3VyY2UgVHlwZXM8L2E+CisuIFRoaXMgaW5jbHVkZXMgdGVzdHMgZm9yOgorPHVsPgorPGxpPnNpbXBsZSB2YWx1ZXM8L2xpPgorPGxpPmRyYXdhYmxlczwvbGk+Cis8bGk+bmluZS1wYXRjaDwvbGk+Cis8bGk+YW5pbWF0aW9uczwvbGk+Cis8bGk+bGF5b3V0czwvbGk+Cis8bGk+c3R5bGVzIGFuZCB0aGVtZXM8L2xpPgorPGxpPmxvYWRpbmcgYWx0ZXJuYXRlIHJlc291cmNlczwvbGk+Cis8L3VsPjwvdGQ+PC90cj4KKzwvdGJvZHk+PC90YWJsZT4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2NvbXBhdGliaWxpdHkvaW5kZXguamQgYi9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2luZGV4LmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzlhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L2luZGV4LmpkCkBAIC0wLDAgKzEsNjcgQEAKK3BhZ2UudGl0bGU9QW5kcm9pZCBDb21wYXRpYmlsaXR5Citkb2MudHlwZT1jb21wYXRpYmlsaXR5CitAamQ6Ym9keQorPHA+QW5kcm9pZCBpcyBhbiBvcGVuIHNvdXJjZSBwcm9kdWN0LCBhbmQgYW55b25lIGNhbiB1c2UgdGhlIHNvdXJjZSBjb2RlIHRvIGJ1aWxkCitkZXZpY2VzLiBUaGUgcHVycG9zZSBvZiB0aGUgQW5kcm9pZCBjb21wYXRpYmlsaXR5IHByb2dyYW0gaXMgdG8gaGVscCBBbmRyb2lkCitkZXZpY2UgaW1wbGVtZW50YXRpb25zIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggYWxsIGFwcHMuPC9wPgorPHA+QSBkZXZpY2UgaXMgY29uc2lkZXJlZCBjb21wYXRpYmxlIGlmIGV4aXN0aW5nIGFuZCBuZXcgdGhpcmQtcGFydHkKK2FwcGxpY2F0aW9ucyBydW4gY29ycmVjdGx5IG9uIGl0LiBQb29yIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjaGFuZ2UgQVBJcworb3IgYWx0ZXIgYmVoYXZpb3JzIHdpbGwgYnJlYWsgdGhlc2UgYXBwcyBhbmQgc28gYXJlIG5vdCBjb21wYXRpYmxlLiBUaGUKK0FuZHJvaWQgY29tcGF0aWJpbGl0eSBwcm9ncmFtJ3MgYWltIGlzIHRvIGVuc3VyZSB0aGF0IHRoZXNlIEFQSXMgYXJlCitjb25zaXN0ZW50bHkgaW1wbGVtZW50ZWQgYWNyb3NzIGRldmljZXMuPC9wPgorPHA+VGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlIGFuZCBjb21wYXRpYmlsaXR5IHByb2dyYW0gaXMKKzEuNiwgd2hpY2ggcm91Z2hseSBjb3JyZXNwb25kZWQgdG8gdGhlIERvbnV0IGJyYW5jaC4gIFRoZSBjb21wYXRpYmlsaXR5Citwcm9ncmFtIGZvciBBbmRyb2lkIDIueCAoY29ycmVzcG9uZGluZyB0byBFY2xhaXIpIGlzIGNvbWluZyBzb29uLjwvcD4KKzxoMj5XaHkgYnVpbGQgY29tcGF0aWJsZSBBbmRyb2lkIGRldmljZXM/PC9oMj4KKzxoMz5Vc2VycyB3YW50IGEgY3VzdG9taXphYmxlIGRldmljZS48L2gzPgorPHA+QSBtb2JpbGUgcGhvbmUgaXMgYSBoaWdobHkgcGVyc29uYWwsIGFsd2F5cy1vbiwgYWx3YXlzLXByZXNlbnQgZ2F0ZXdheSB0bwordGhlIEludGVybmV0LiBXZSBoYXZlbid0IG1ldCBhIHVzZXIgeWV0IHdobyBkaWRuJ3Qgd2FudCB0byBjdXN0b21pemUgaXQgYnkKK2V4dGVuZGluZyBpdHMgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIHdoeSBBbmRyb2lkIHdhcyBkZXNpZ25lZCBhcyBhIHJvYnVzdAorcGxhdGZvcm0gZm9yIHJ1bm5pbmcgYWZ0ZXItbWFya2V0IGFwcGxpY2F0aW9ucy48L3A+CisKKzxoMz5EZXZlbG9wZXJzIG91dG51bWJlciB1cyBhbGwuPC9oMz4KKzxwPk5vIGRldmljZSBtYW51ZmFjdHVyZXIgY2FuIGhvcGUgdG8gd3JpdGUgYWxsIHRoZSBzb2Z0d2FyZSB0aGF0IGFueW9uZSBjb3VsZAorY29uY2VpdmFibHkgbmVlZC4gV2UgbmVlZCB0aGlyZC1wYXJ0eSBkZXZlbG9wZXJzIHRvIHdyaXRlIHRoZSBhcHBzIHVzZXJzIHdhbnQsCitzbyB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGFpbXMgdG8gbWFrZSBpdCBhcyBlYXN5IGFuZCBvcGVuIGFzCitwb3NzaWJsZSBmb3IgZGV2ZWxvcGVycyB0byBidWlsZCBhcHBzLjwvcD4KKworPGgzPkV2ZXJ5b25lIG5lZWRzIGEgY29tbW9uIGVjb3N5c3RlbS48L2gzPgorPHA+RXZlcnkgbGluZSBvZiBjb2RlIGRldmVsb3BlcnMgd3JpdGUgdG8gd29yayBhcm91bmQgYSBwYXJ0aWN1bGFyIHBob25lJ3MgYnVnCitpcyBhIGxpbmUgb2YgY29kZSB0aGF0IGRpZG4ndCBhZGQgYSBuZXcgZmVhdHVyZS4gVGhlIG1vcmUgY29tcGF0aWJsZSBwaG9uZXMKK3RoZXJlIGFyZSwgdGhlIG1vcmUgYXBwcyB0aGVyZSB3aWxsIGJlLiBCeSBidWlsZGluZyBhIGZ1bGx5IGNvbXBhdGlibGUgQW5kcm9pZAorZGV2aWNlLCB5b3UgYmVuZWZpdCBmcm9tIHRoZSBodWdlIHBvb2wgb2YgYXBwcyB3cml0dGVuIGZvciBBbmRyb2lkLCB3aGlsZQoraW5jcmVhc2luZyB0aGUgaW5jZW50aXZlIGZvciBkZXZlbG9wZXJzIHRvIGJ1aWxkIG1vcmUgb2YgdGhvc2UgYXBwcy48L3A+CisKKworPGgyPkFuZHJvaWQgY29tcGF0aWJpbGl0eSBpcyBmcmVlLCBhbmQgaXQncyBlYXN5LjwvaDI+Cis8cD5JZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbW9iaWxlIGRldmljZSwgeW91IGNhbiBmb2xsb3cgdGhlc2Ugc3RlcHMgdG8gbWFrZQorc3VyZSB5b3VyIGRldmljZSBpcyBjb21wYXRpYmxlIHdpdGggQW5kcm9pZC4gRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUKK0FuZHJvaWQgY29tcGF0aWJpbGl0eSBwcm9ncmFtIGluIGdlbmVyYWwsIHNlZSA8YQoraHJlZj0ie0Bkb2NSb290fWNvbXBhdGliaWxpdHkvb3ZlcnZpZXcuaHRtbCI+dGhlIHByb2dyYW0gb3ZlcnZpZXc8L2E+LjwvcD4KKzxwPkJ1aWxkaW5nIGEgY29tcGF0aWJsZSBkZXZpY2UgaXMgYSBmb3VyLXN0ZXAgcHJvY2Vzczo8L3A+Cis8b2w+CisgIDxsaT48Yj5PYnRhaW4gdGhlIEFuZHJvaWQgc29mdHdhcmUgc3RhY2sgc291cmNlIGNvZGU8L2I+PHA+VGhpcyBpcyB0aGUKKyAgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9pbmRleC5odG1sIj5zb3VyY2UgY29kZSBmb3IgdGhlIEFuZHJvaWQKKyAgcGxhdGZvcm08L2E+LCB0aGF0IHlvdSBwb3J0IHRvIHlvdXIgaGFyZHdhcmUuPC9wPjwvbGk+CisgIDxsaT48Yj5Db21wbHkgd2l0aCBBbmRyb2lkIENvbXBhdGliaWxpdHkgRGVmaW5pdGlvbiBEb2N1bWVudDwvYj48cD4KKyAgVGhpcyBkb2N1bWVudCBlbnVtZXJhdGVzIHRoZSBzb2Z0d2FyZSBhbmQgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIG9mCisgIGEgY29tcGF0aWJsZSBBbmRyb2lkIGRldmljZS48L3A+PC9saT4KKyAgPGxpPjxiPlBhc3MgdGhlIENvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZSAoQ1RTKTwvYj48cD5Zb3UgY2FuIHVzZSB0aGUgQ1RTCisgIChpbmNsdWRlZCBpbiB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSkgYXMgYW4gb25nb2luZyBhaWQgdG8gY29tcGF0aWJpbGl0eQorICBkdXJpbmcgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuPC9wPjwvbGk+CisgIDxsaT48Yj5TdWJtaXQgQ1RTIHJlcG9ydDwvYj48cD5bT3B0aW9uYWxdIFlvdSBjYW4gYWxzbyBzdWJtaXQgeW91ciBDVFMgcmVwb3J0LAorICBzbyB0aGF0IGl0IGNhbiBiZSB2YWxpZGF0ZWQgYW5kIHJlY29yZGVkLjwvcD48cD48aT5Ob3RlOgorICB0aGUgc3VibWlzc2lvbiBzeXN0ZW0gaXMgY3VycmVudGx5IHVuZGVyIGNvbnN0cnVjaXRvbiwgYW5kIGlzIG5vdCBjdXJyZW50bHkKKyAgYXZhaWxhYmxlLjwvaT48L3A+PC9saT4KKzwvb2w+CisKKzxoMj5CZW5lZml0cyBvZiBjb21wYXRpYmlsaXR5PC9oMj4KKzxwPkJ5IHN1Ym1pdHRpbmcgYSB2YWxpZGF0ZWQgQ1RTIHJlcG9ydCwgeW91IHJlY2VpdmUgcHVibGljIHJlY29nbml0aW9uIG9mCit5b3VyIGRldmljZSdzIGNvbXBhdGliaWxpdHkuIFRoaXMgYWxzbyBvcGVucyB1cCBhZGRpdGlvbmFsIG9wdGlvbnMgeW91IGNhbgorcHVyc3VlIHN1Y2ggYXMgdXNlIG9mIHRoZSBBbmRyb2lkIGJyYW5kaW5nLCBhY2Nlc3MgdG8gQW5kcm9pZCBNYXJrZXQsIGFuZAorbW9yZS48L3A+Cis8cD5BcyBhIGNvbnNlcXVlbmNlIG9mIHNvbWUgbGVnYWwgcXVpcmtzLCB3ZSBhcmVuJ3QgYWJsZSB0byBvZmZlciBhdXRvbWF0aWMKK2xpY2Vuc2luZyBvZiBlaXRoZXIgdGhlIEFuZHJvaWQgTWFya2V0IG9yIGJyYW5kaW5nLiBUbyBhY3R1YWxseSBvYnRhaW4gYWNjZXNzCit0byB0aGVzZSBwcm9ncmFtcywgeW91IHdpbGwgbmVlZCB0byA8YQoraHJlZj0ie0Bkb2NSb290fWNvbXBhdGliaWxpdHkvY29udGFjdC11cy5odG1sIj5jb250YWN0IHVzPC9hPiB0byBvYnRhaW4gYQorbGljZW5zZS48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9jb21wYXRpYmlsaXR5L292ZXJ2aWV3LmpkIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9vdmVydmlldy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzllMmMyCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvY29tcGF0aWJpbGl0eS9vdmVydmlldy5qZApAQCAtMCwwICsxLDg4IEBACitwYWdlLnRpdGxlPUNvbXBhdGliaWxpdHkgUHJvZ3JhbSBPdmVydmlldworZG9jLnR5cGU9Y29tcGF0aWJpbGl0eQorQGpkOmJvZHkKKzxwPlRoZSBBbmRyb2lkIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSBtYWtlcyBpdCBlYXN5IGZvciBtb2JpbGUgZGV2aWNlCittYW51ZmFjdHVyZXJzIHRvIGRldmVsb3AgY29tcGF0aWJsZSBBbmRyb2lkIGRldmljZXMuPC9wPgorPGgzPlByb2dyYW0gZ29hbHM8L2gzPgorPHA+VGhlIEFuZHJvaWQgY29tcGF0aWJpbGl0eSBwcm9ncmFtIHdvcmtzIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgZW50aXJlCitBbmRyb2lkIGNvbW11bml0eSwgaW5jbHVkaW5nIHVzZXJzLCBkZXZlbG9wZXJzLCBhbmQgZGV2aWNlIG1hbnVmYWN0dXJlcnMuPC9wPgorPHA+RWFjaCBncm91cCBkZXBlbmRzIG9uIHRoZSBvdGhlcnMuIFVzZXJzIHdhbnQgYSB3aWRlIHNlbGVjdGlvbiBvZiBkZXZpY2VzCithbmQgZ3JlYXQgYXBwczsgZ3JlYXQgYXBwcyBjb21lIGZyb20gZGV2ZWxvcGVycyBtb3RpdmF0ZWQgYnkgYSBsYXJnZSBtYXJrZXQKK2ZvciB0aGVpciBhcHBzIHdpdGggbWFueSBkZXZpY2VzIGluIHVzZXJzJyBoYW5kczsgZGV2aWNlIG1hbnVmYWN0dXJlcnMgcmVseQorb24gYSB3aWRlIHZhcmlldHkgb2YgZ3JlYXQgYXBwcyB0byBpbmNyZWFzZSB0aGVpciBwcm9kdWN0cycgdmFsdWUgZm9yCitjb25zdW1lcnMuPC9wPgorPHA+T3VyIGdvYWxzIHdlcmUgZGVzaWduZWQgdG8gYmVuZWZpdCBlYWNoIG9mIHRoZXNlIGdyb3Vwczo8L3A+Cis8dWw+Cis8bGk+PGI+UHJvdmlkZSBhIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gYW5kIGhhcmR3YXJlIGVudmlyb25tZW50IHRvIGFwcGxpY2F0aW9uCitkZXZlbG9wZXJzLjwvYj48cD5XaXRob3V0IGEgc3Ryb25nIGNvbXBhdGliaWxpdHkgc3RhbmRhcmQsIGRldmljZXMgY2FuIHZhcnkgc28KK2dyZWF0bHkgdGhhdCBkZXZlbG9wZXJzIG11c3QgZGVzaWduIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGVpciBhcHBsaWNhdGlvbnMKK2ZvciBkaWZmZXJlbnQgZGV2aWNlcy4gVGhlIGNvbXBhdGliaWxpdHkgcHJvZ3JhbSBwcm92aWRlcyBhIHByZWNpc2UgZGVmaW5pdGlvbgorb2Ygd2hhdCBkZXZlbG9wZXJzIGNhbiBleHBlY3QgZnJvbSBhIGNvbXBhdGlibGUgZGV2aWNlIGluIHRlcm1zIG9mIEFQSXMgYW5kCitjYXBhYmlsaXRpZXMuIERldmVsb3BlcnMgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIG1ha2UgZ29vZCBkZXNpZ24KK2RlY2lzaW9ucywgYW5kIGJlIGNvbmZpZGVudCB0aGF0IHRoZWlyIGFwcHMgd2lsbCBydW4gd2VsbCBvbiBhbnkgY29tcGF0aWJsZQorZGV2aWNlLjwvcD48L2xpPgorPGxpPjxiPkVuYWJsZSBhIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gZXhwZXJpZW5jZSBmb3IgY29uc3VtZXJzLjwvYj48cD5JZiBhbgorYXBwbGljYXRpb24gcnVucyB3ZWxsIG9uIG9uZSBjb21wYXRpYmxlIEFuZHJvaWQgZGV2aWNlLCBpdCBzaG91bGQgcnVuIHdlbGwgb24KK2FueSBvdGhlciBkZXZpY2UgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHNhbWUgQW5kcm9pZCBwbGF0Zm9ybSB2ZXJzaW9uLgorQW5kcm9pZCBkZXZpY2VzIHdpbGwgZGlmZmVyIGluIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBjYXBhYmlsaXRpZXMsIHNvIHRoZQorY29tcGF0aWJpbGl0eSBwcm9ncmFtIGFsc28gcHJvdmlkZXMgdGhlIHRvb2xzIG5lZWRlZCBmb3IgZGlzdHJpYnV0aW9uIHN5c3RlbXMKK3N1Y2ggYXMgQW5kcm9pZCBNYXJrZXQgdG8gaW1wbGVtZW50IGFwcHJvcHJpYXRlIGZpbHRlcmluZy4gVGhpcyBtZWFucyB0aGF0Cit1c2VycyBjYW4gb25seSBzZWUgYXBwbGljYXRpb25zIHdoaWNoIHRoZXkgY2FuIGFjdHVhbGx5IHJ1bi48L3A+PC9saT4KKzxsaT48Yj5FbmFibGUgZGV2aWNlIG1hbnVmYWN0dXJlcnMgdG8gZGlmZmVyZW50aWF0ZSB3aGlsZSBiZWluZworY29tcGF0aWJsZS48L2I+PHA+VGhlIEFuZHJvaWQgY29tcGF0aWJpbGl0eSBwcm9ncmFtIGZvY3VzZXMgb24gdGhlIGFzcGVjdHMgb2YKK0FuZHJvaWQgcmVsZXZhbnQgdG8gcnVubmluZyB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMsIHdoaWNoIGFsbG93cyBkZXZpY2UKK21hbnVmYWN0dXJlcnMgdGhlIGZsZXhpYmlsaXR5IHRvIGNyZWF0ZSB1bmlxdWUgZGV2aWNlcyB0aGF0IGFyZSBub25ldGhlbGVzcworY29tcGF0aWJsZS48L3A+PC9saT4KKzxsaT48Yj5NaW5pbWl6ZSBjb3N0cyBhbmQgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoCitjb21wYXRpYmlsaXR5LjwvYj48cD5FbnN1cmluZyBjb21wYXRpYmlsaXR5IHNob3VsZCBiZSBlYXN5IGFuZCBpbmV4cGVuc2l2ZSB0bworZGV2aWNlIG1hbnVmYWN0dXJlcnMuIFRoZSB0ZXN0aW5nIHRvb2wgKENUUykgaXMgZnJlZSBhbmQgd2lsbCBzb29uIGJlIGF2YWlsYWJsZQoraW4gb3BlbiBzb3VyY2UuIENUUyBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGZvciBjb250aW51b3VzIHNlbGYtdGVzdGluZyBkdXJpbmcKK3RoZSBkZXZpY2UgZGV2ZWxvcG1lbnQgcHJvY2VzcyB0byBlbGltaW5hdGUgdGhlIGNvc3Qgb2YgY2hhbmdpbmcgeW91ciB3b3JrZmxvdworb3Igc2VuZGluZyB5b3VyIGRldmljZSB0byBhIHRoaXJkIHBhcnR5IGZvciB0ZXN0aW5nLiBNZWFud2hpbGUsIHRoZXJlIGFyZSBubworcmVxdWlyZWQgY2VydGlmaWNhdGlvbnMsIGFuZCB0aHVzIG5vIGNvcnJlc3BvbmRpbmcgY29zdHMgYW5kIGZlZXMuPC9wPjwvbGk+Cis8L3VsPgorPHA+VGhlIEFuZHJvaWQgY29tcGF0aWJpbGl0eSBwcm9ncmFtIGNvbnNpc3RzIG9mIHRocmVlIGtleSBjb21wb25lbnRzOjwvcD4KKzx1bD4KKzxsaT5UaGUgc291cmNlIGNvZGUgdG8gdGhlIEFuZHJvaWQgc29mdHdhcmUgc3RhY2s8L2xpPgorPGxpPlRoZSBDb21wYXRpbGJpbGl0eSBEZWZpbml0aW9uIERvY3VtZW50LCByZXByZXNlbnRpbmcgdGhlICJwb2xpY3kiCithc3BlY3Qgb2YgY29tcGF0aWJpbGl0eTwvbGk+Cis8bGk+VGhlIENvbXBhdGlsYmlsaXR5IFRlc3QgU3VpdGUsIHJlcHJlc2VudGluZyB0aGUgIm1lY2hhbmlzbSIgb2YgY29tcGF0aWJpbGl0eTwvbGk+Cis8L3VsPgorPHA+SnVzdCBhcyBlYWNoIHZlcnNpb24gb2YgdGhlIEFuZHJvaWQgcGxhdGZvcm0gZXhpc3RzIGluIGEgc2VwYXJhdGUgYnJhbmNoIGluCit0aGUgc291cmNlIGNvZGUgdHJlZSwgdGhlcmUgaXMgYSBzZXBhcmF0ZSBDVFMgYW5kIENERCBmb3IgZWFjaCB2ZXJzaW9uIGFzCit3ZWxsLiBUaGUgQ0RELCBDVFMsIGFuZCBzb3VyY2UgY29kZSBhcmUgLS0gYWxvbmcgd2l0aCB5b3VyIGhhcmR3YXJlIGFuZCB5b3VyCitzb2Z0d2FyZSBjdXN0b21pemF0aW9ucyAtLSBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIGNvbXBhdGlibGUgZGV2aWNlLjwvcD4KKworPGgzPkNvbXBhdGliaWxpdHkgRGVmaW5pdGlvbiBEb2N1bWVudCAoQ0REKTwvaDM+Cis8cD5Gb3IgZWFjaCByZWxlYXNlIG9mIHRoZSBBbmRyb2lkIHBsYXRmb3JtLCBhIGRldGFpbGVkIENvbXBhdGliaWxpdHkKK0RlZmluaXRpb24gRG9jdW1lbnQgKENERCkgd2lsbCBiZSBwcm92aWRlZC4gVGhlIENERCByZXByZXNlbnRzIHRoZSAicG9saWN5IgorYXNwZWN0IG9mIEFuZHJvaWQgY29tcGF0aWJpbGl0eS48L3A+Cis8cD5ObyB0ZXN0IHN1aXRlLCBpbmNsdWRpbmcgQ1RTLCBjYW4gdHJ1bHkgYmUgY29tcHJlaGVuc2l2ZS4gRm9yIGluc3RhbmNlLCB0aGUKK0NUUyBpbmNsdWRlcyBhIHRlc3QgdGhhdCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBhbmQgY29ycmVjdCBiZWhhdmlvciBvZgorT3BlbkdMIGdyYXBoaWNzIEFQSXMsIGJ1dCBubyBzb2Z0d2FyZSB0ZXN0IGNhbiB2ZXJpZnkgdGhhdCB0aGUgZ3JhcGhpY3MKK2FjdHVhbGx5IGFwcGVhciBjb3JyZWN0bHkgb24gdGhlIHNjcmVlbi4gTW9yZSBnZW5lcmFsbHksIGl0J3MgaW1wb3NzaWJsZSB0bwordGVzdCB0aGUgcHJlc2VuY2Ugb2YgaGFyZHdhcmUgZmVhdHVyZXMgc3VjaCBhcyBrZXlib2FyZHMsIGRpc3BsYXkgZGVuc2l0eSwKK1dpRmksIGFuZCBCbHVldG9vdGguPC9wPgorPHA+VGhlIENERCdzIHJvbGUgaXMgdG8gY29kaWZ5IGFuZCBjbGFyaWZ5IHNwZWNpZmljIHJlcXVpcmVtZW50cywgYW5kCitlbGltaW5hdGUgYW1iaWd1aXR5LiAgVGhlIENERCBkb2VzIG5vdCBhdHRlbXB0IHRvIGJlIGNvbXByZWhlbnNpdmUuIFNpbmNlCitBbmRyb2lkIGlzIGEgc2luZ2xlIGNvcnB1cyBvZiBvcGVuLXNvdXJjZSBjb2RlLCB0aGUgY29kZSBpdHNlbGYgaXMgdGhlCitjb21wcmVoZW5zaXZlICJzcGVjaWZpY2F0aW9uIiBvZiB0aGUgcGxhdGZvcm0gYW5kIGl0cyBBUElzLiBUaGUgQ0REIGFjdHMgYXMgYQorImh1YiIsIHJlZmVyZW5jaW5nIG90aGVyIGNvbnRlbnQgKHN1Y2ggYXMgU0RLIEFQSSBkb2N1bWVudGF0aW9uKSB0aGF0IHByb3ZpZGVzCithIGZyYW1ld29yayBpbiB3aGljaCB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBtYXkgYmUgdXNlZCBzbyB0aGF0IHRoZSBlbmQKK3Jlc3VsdCBpcyBhIGNvbXBhdGlibGUgc3lzdGVtLjwvcD4KKzxwPklmIHlvdSB3YW50IHRvIGJ1aWxkIGEgZGV2aWNlIGNvbXBhdGlibGUgd2l0aCBhIGdpdmVuIEFuZHJvaWQgdmVyc2lvbiwKK3N0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgc291cmNlIGNvZGUgZm9yIHRoYXQgdmVyc2lvbiwgYW5kIHRoZW4gcmVhZCB0aGUKK2NvcnJlc3BvbmRpbmcgQ0REIGFuZCBzdGF5IHdpdGhpbiBpdHMgZ3VpZGVsaW5lcy4gRm9yIGFkZGl0aW9uYWwgZGV0YWlscywKK3NpbXBseSBleGFtaW5lIDxhIGhyZWY9IiI+dGhlIGxhdGVzdCBDREQ8L2E+LjwvcD4KKworPGgzPkNvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZSAoQ1RTKTwvaDM+Cis8cD5UaGUgQ1RTIGlzIGEgZnJlZSwgY29tbWVyY2lhbC1ncmFkZSB0ZXN0IHN1aXRlLCBhdmFpbGFibGUgYWxvbmcgd2l0aCB0aGUKK0FuZHJvaWQgc291cmNlIGNvZGUuIFRoZSBDVFMgcmVwcmVzZW50cyB0aGUgIm1lY2hhbmlzbSIgb2YgY29tcGF0aWJpbGl0eS48L3A+Cis8cD5UaGUgQ1RTIHJ1bnMgb24gYSBkZXNrdG9wIG1hY2hpbmUgYW5kIGV4ZWN1dGVzIHRlc3QgY2FzZXMgZGlyZWN0bHkgb24KK2F0dGFjaGVkIGRldmljZXMgb3IgYW4gZW11bGF0b3IuIFRoZSBDVFMgaXMgYSBzZXQgb2YgdW5pdCB0ZXN0cyBkZXNpZ25lZCB0byBiZQoraW50ZWdyYXRlZCBpbnRvIHRoZSBkYWlseSB3b3JrZmxvdyAoc3VjaCBhcyB2aWEgYSBjb250aW51b3VzIGJ1aWxkIHN5c3RlbSkgb2YKK3RoZSBlbmdpbmVlcnMgYnVpbGRpbmcgYSBkZXZpY2UuIEl0cyBpbnRlbnQgaXMgdG8gcmV2ZWFsIGluY29tcGF0aWJpbGl0aWVzCitlYXJseSBvbiwgYW5kIGVuc3VyZSB0aGF0IHRoZSBzb2Z0d2FyZSByZW1haW5zIGNvbXBhdGlibGUgdGhyb3VnaG91dCB0aGUKK2RldmVsb3BtZW50IHByb2Nlc3MuPC9wPgorPHA+Rm9yIGRldGFpbHMgb24gdGhlIENUUywgY29uc3VsdCB0aGUgPGEKK2hyZWY9IntAZG9jUm9vdH1jb21wYXRpYmlsaXR5L2N0cy1pbnRyby5odG1sIj5DVFMgaW50cm9kdWN0aW9uPC9hPi48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9kb3dubG9hZHMvZG93bmxvYWRzX3RvYy5jcyBiL3Bkay9kb2NzL2Rvd25sb2Fkcy9kb3dubG9hZHNfdG9jLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjQzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9kb3dubG9hZHMvZG93bmxvYWRzX3RvYy5jcwpAQCAtMCwwICsxLDIxIEBACis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorPCEtLQorZnVuY3Rpb24gbm90aGluZygpIHt9CistLT4KKzwvc2NyaXB0PgorCis8dWw+CisgIDxsaT48aDI+UERLPC9oMj48dWw+CisgICAgPGxpPjxhIGhyZWY9IiI+UERLIDEuNjwvYT48L2xpPgorICA8L3VsPjwvbGk+CisKKyAgPGxpPjxoMj5Db21wYXRpYmlsaXR5PC9oMj48dWw+CisgICAgPGxpPjxhIGhyZWY9IiI+QW5kcm9pZCAxLjY8L2E+PC9saT4KKyAgPC91bD48L2xpPgorPC91bD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorPCEtLQorICAgIGJ1aWxkVG9nZ2xlTGlzdHMoKTsKKy8vLS0+Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2Rvd25sb2Fkcy9pbmRleC5qZCBiL3Bkay9kb2NzL2Rvd25sb2Fkcy9pbmRleC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmY1YTJmCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvZG93bmxvYWRzL2luZGV4LmpkCkBAIC0wLDAgKzEsNDQgQEAKK3BhZ2UudGl0bGU9RG93bmxvYWRzCitkb2MudHlwZT1kb3dubG9hZHMKK2RvYy5oaWRlbmF2PXRydWUKK0BqZDpib2R5Cis8cD5UaGlzIHBhZ2UgcHJvdmlkZXMgYWNjZXNzIHRvIHZhcmlvdXMgZG93bmxvYWRzLiBOb3RlIHRoYXQgaWYgeW91J3JlIGxvb2tpbmcKK2ZvciB0aGUgQW5kcm9pZCBTREsgKGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzKSwgeW91IHNob3VsZCB2aXNpdCA8YQoraHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zZGsvaW5kZXguaHRtbCI+ZGV2ZWxvcGVyLmFuZHJvaWQuY29tPC9hPi48L3A+CisKKzxoMj5Db21wYXRpYmlsaXR5PC9oMj4KKzxwPlRoZSBDb21wYXRpYmlsaXR5IERlZmluaXRpb24gRG9jdW1lbnQgY2FuIGJlIGRvd25sb2FkZWQgYmVsb3cuIFRoZQorQ29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlIGlzIGF2YWlsYWJsZSBpbiB0aGUgb3Blbi1zb3VyY2UgdHJlZS48L3A+Cis8dGFibGUgY2xhc3M9ImRvd25sb2FkIj4gCisgIDx0cj4gCisgICAgICA8dGg+SXRlbTwvdGg+IAorICAgICAgPHRoPkZpbGU8L3RoPiAKKyAgICAgIDx0aD5TaXplPC90aD4gCisgIDwvdHI+IAorICA8dHI+IAorICAgIDx0ZD5BbmRyb2lkIENERCAyLjE8L3RkPiAKKyAgICA8dGQ+PGEgaHJlZj0iIj5hbmRyb2lkLWNkZC0yLjEucGRmPC9hPjwvdGQ+IAorICAgIDx0ZD4yMzA3MDgwNSBieXRlczwvdGQ+IAorICA8L3RyPiAKKyAgPHRyIGNsYXNzPSJhbHQtY29sb3IiPiAKKyAgICA8dGQ+QW5kcm9pZCBDVFMgMi4xIE1hbnVhbDwvdGQ+IAorICAgIDx0ZD48YSBocmVmPSIiPmFuZHJvaWQtY3RzLW1hbnVhbC0yLjEuMC5wZGY8L2E+PC90ZD4gCisgICAgPHRkPjIzMDcwODA1IGJ5dGVzPC90ZD4gCisgIDwvdHI+IAorICA8dHI+IAorICAgIDx0ZD5BbmRyb2lkIENERCAxLjY8L3RkPiAKKyAgICA8dGQ+PGEgaHJlZj0iIj5hbmRyb2lkLWNkZC0xLjYucGRmPC9hPjwvdGQ+IAorICAgIDx0ZD4yMzA3MDgwNSBieXRlczwvdGQ+IAorICA8L3RyPiAKKyAgPHRyIGNsYXNzPSJhbHQtY29sb3IiPiAKKyAgICA8dGQ+QW5kcm9pZCBDVFMgMS42IE1hbnVhbDwvdGQ+IAorICAgIDx0ZD48YSBocmVmPSIiPmFuZHJvaWQtY3RzLW1hbnVhbC0xLjYuNC5wZGY8L2E+PC90ZD4gCisgICAgPHRkPjIzMDcwODA1IGJ5dGVzPC90ZD4gCisgIDwvdHI+IAorPC90YWJsZT4gCis8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnVpbGQgYW4gQW5kcm9pZC1jb21wYXRpYmxlIGRldmljZSwgc2VlIHRoZQorPGEgaHJlZj0ie0Bkb2NSb290fWNvbXBhdGliaWxpdHkvaW5kZXguaHRtbCI+Q29tcGF0aWJpbGl0eTwvYT4gcGFnZS4gTm90ZSB0aGF0Cit0aGVyZSBpcyBubyBjb21wYXRpYmlsaXR5IHByb2dyYW0gZm9yIEFuZHJvaWQgMS41IGFuZCBlYXJsaWVyLiBOb3RlIGFsc28gdGhhdAordGhlcmUgaXMgbm8gY29tcGF0aWJpbGl0eSBwcm9ncmFtIGZvciBBbmRyb2lkIDIuMCwgc2luY2UgaXQgd2FzIHN1cGVyY2VkZWQgYnkKK0FuZHJvaWQgMi4xIGFmdGVyIG9ubHkgYSBmZXcgd2Vla3MuCis8L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9mYXFzLmpkIGIvcGRrL2RvY3MvZmFxcy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTVkMzgwCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvZmFxcy5qZApAQCAtMCwwICsxLDMyNSBAQAorcGFnZS50aXRsZT1GcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworZG9jLmhpZGVuYXY9dHJ1ZQorQGpkOmJvZHkKKzxhIG5hbWU9ImFvc3AiPjwvYT48aDI+T3BlbiBTb3VyY2U8L2gyPgorPGgzPldoYXQgaXMgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdD88L2gzPgorPHA+V2UgdXNlIHRoZSBwaHJhc2UgIkFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIgb3IgIkFPU1AiIHRvIHJlZmVyIHRvIHRoZQorICBwZW9wbGUsIHRoZSBwcm9jZXNzZXMsIGFuZCB0aGUgc291cmNlIGNvZGUgdGhhdCBtYWtlIHVwIEFuZHJvaWQuPC9wPgorPHA+VGhlIHBlb3BsZSBvdmVyc2VlIHRoZSBwcm9qZWN0IGFuZCBkZXZlbG9wIHRoZSBhY3R1YWwgc291cmNlIGNvZGUuIFRoZQorICBwcm9jZXNzZXMgcmVmZXIgdG8gdGhlIHRvb2xzIGFuZCBwcm9jZWR1cmVzIHdlIHVzZSB0byBtYW5hZ2UgdGhlIGRldmVsb3BtZW50CisgIG9mIHRoZSBzb2Z0d2FyZS4gVGhlIG5ldCByZXN1bHQgaXMgdGhlIHNvdXJjZSBjb2RlIHRoYXQgeW91IGNhbiB1c2UgdG8gYnVpbGQKKyAgY2VsbCBwaG9uZSBhbmQgb3RoZXIgZGV2aWNlcy48L3A+CisKKzxoMz5XaHkgZGlkIHdlIG9wZW4gdGhlIEFuZHJvaWQgc291cmNlIGNvZGU/PC9oMz4KKzxwPkdvb2dsZSBzdGFydGVkIHRoZSBBbmRyb2lkIHByb2plY3QgaW4gcmVzcG9uc2UgdG8gb3VyIG93biBleHBlcmllbmNlcworbGF1bmNoaW5nIG1vYmlsZSBhcHBzLiBXZSB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgd291bGQgYWx3YXlzIGJlIGFuCitvcGVuIHBsYXRmb3JtIGF2YWlsYWJsZSBmb3IgY2FycmllcnMsIE9FTXMsIGFuZCBkZXZlbG9wZXJzIHRvIHVzZSB0byBtYWtlCit0aGVpciBpbm5vdmF0aXZlIGlkZWFzIGEgcmVhbGl0eS4gV2UgYWxzbyB3YW50ZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgd2FzIG5vCitjZW50cmFsIHBvaW50IG9mIGZhaWx1cmUsIHNvIHRoYXQgbm8gc2luZ2xlIGluZHVzdHJ5IHBsYXllciBjb3VsZCByZXN0cmljdCBvciBjb250cm9sCit0aGUgaW5ub3ZhdGlvbnMgb2YgYW55IG90aGVyLiAgVGhlIHNpbmdsZSBtb3N0IGltcG9ydGFudCBnb2FsIG9mIHRoZSBBbmRyb2lkCitPcGVuLVNvdXJjZSBQcm9qZWN0IChBT1NQKSBpcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb3Blbi1zb3VyY2UgQW5kcm9pZAorc29mdHdhcmUgaXMgaW1wbGVtZW50ZWQgYXMgd2lkZWx5IGFuZCBjb21wYXRpYmx5IGFzIHBvc3NpYmxlLCB0byBldmVyeW9uZSdzCitiZW5lZml0LjwvcD4KKzxwPllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMgYXQgb3VyIFByb2plY3QgUGhpbG9zb3BoeSBwYWdlLjwvcD4KKworPGgzPldoYXQga2luZCBvZiBvcGVuLXNvdXJjZSBwcm9qZWN0IGlzIEFuZHJvaWQ/PC9oMz4KKzxwPkdvb2dsZSBvdmVyc2VlcyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIGNvcmUgQW5kcm9pZCBvcGVuLXNvdXJjZSBwbGF0Zm9ybSwKKyAgYW5kIHdvcmtzIHRvIGNyZWF0ZSByb2J1c3QgZGV2ZWxvcGVyIGFuZCB1c2VyIGNvbW11bml0aWVzLiBGb3IgdGhlIG1vc3QgcGFydAorICB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgcGVybWlzc2l2ZSBBcGFjaGUgU29mdHdhcmUKKyAgTGljZW5zZSAyLjAsIHJhdGhlciB0aGFuIGEgImNvcHlsZWZ0IiBsaWNlbnNlLiBUaGUgbWFpbiByZWFzb24gZm9yIHRoaXMgaXMKKyAgYmVjYXVzZSBvdXIgbW9zdCBpbXBvcnRhbnQgZ29hbCBpcyB3aWRlc3ByZWFkIGFkb3B0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgYW5kCisgIHdlIGJlbGlldmUgdGhhdCB0aGUgQVNMMi4wIGxpY2Vuc2UgYmVzdCBhY2hpZXZlcyB0aGF0IGdvYWwuPC9wPgorPHA+WW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYyBhdCBvdXIgUHJvamVjdCBQaGlsb3NvcGh5IGFuZAorICBMaWNlbnNpbmcgcGFnZXMuIDwvcD4KKworPGgzPldoeSBpcyBHb29nbGUgaW4gY2hhcmdlIG9mIEFuZHJvaWQ/PC9oMz4KKzxwPkxhdW5jaGluZyBhIHNvZnR3YXJlIHBsYXRmb3JtIGlzIGNvbXBsZXguIE9wZW5uZXNzIGlzIHZpdGFsIHRvIHRoZQorICBsb25nLXRlcm0gc3VjY2VzcyBvZiBhIHBsYXRmb3JtLCBzaW5jZSBvcGVubmVzcyBpcyByZXF1aXJlZCB0byBhdHRyYWN0CisgIGludmVzdG1lbnQgZnJvbSBkZXZlbG9wZXJzIGFuZCBlbnN1cmUgYSBsZXZlbCBwbGF5aW5nIGZpZWxkLiBIb3dldmVyLCB0aGUKKyAgcGxhdGZvcm0gaXRzZWxmIG11c3QgYWxzbyBiZSBhIGNvbXBlbGxpbmcgcHJvZHVjdCB0byBlbmQgdXNlcnMuPC9wPgorPHA+VGhhdCdzIHdoeSBHb29nbGUgaGFzIGNvbW1pdHRlZCB0aGUgcHJvZmVzc2lvbmFsIGVuZ2luZWVyaW5nIHJlc291cmNlcworICBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgQW5kcm9pZCBpcyBhIGZ1bGx5IGNvbXBldGl0aXZlIHNvZnR3YXJlIHBsYXRmb3JtLgorICBHb29nbGUgdHJlYXRzIHRoZSBBbmRyb2lkIHByb2plY3QgYXMgYSBmdWxsLXNjYWxlIHByb2R1Y3QgZGV2ZWxvcG1lbnQKKyAgb3BlcmF0aW9uLCBhbmQgc3RyaWtlcyB0aGUgYnVzaW5lc3MgZGVhbHMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IGdyZWF0CisgIGRldmljZXMgcnVubmluZyBBbmRyb2lkIGFjdHVhbGx5IG1ha2UgaXQgdG8gbWFya2V0LjwvcD4KKzxwPkJ5IG1ha2luZyBzdXJlIHRoYXQgQW5kcm9pZCBpcyBhIHN1Y2Nlc3Mgd2l0aCBlbmQgdXNlcnMsIHdlIGhlbHAgZW5zdXJlIHRoZQorICB2aXRhbGl0eSBvZiBBbmRyb2lkIGFzIGEgcGxhdGZvcm0sIGFuZCBhcyBhbiBvcGVuLXNvdXJjZSBwcm9qZWN0LiBBZnRlciBhbGwsCisgIHdobyB3YW50cyB0aGUgc291cmNlIGNvZGUgdG8gYW4gdW5zdWNjZXNzZnVsIHByb2R1Y3Q/PC9wPgorPHA+R29vZ2xlJ3MgZ29hbCBpcyB0byBlbnN1cmUgYSBzdWNjZXNzZnVsIGVjb3N5c3RlbSBhcm91bmQgQW5kcm9pZCwgYnV0IG5vCisgIG9uZSBpcyByZXF1aXJlZCB0byBwYXJ0aWNpcGF0ZSwgb2YgY291cnNlLiBXZSBvcGVuZWQgdGhlIEFuZHJvaWQgc291cmNlIGNvZGUKKyAgc28gYW55b25lIGNhbiBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIHRvIG1lZXQgdGhlaXIgb3duIG5lZWRzLjwvcD4KKworPGgzPldoYXQgaXMgR29vZ2xlJ3Mgb3ZlcmFsbCBzdHJhdGVneSBmb3IgQW5kcm9pZCBwcm9kdWN0IGRldmVsb3BtZW50PzwvaDM+Cis8cD5XZSBmb2N1cyBvbiByZWxlYXNpbmcgZ3JlYXQgZGV2aWNlcyBpbnRvIGEgY29tcGV0aXRpdmUgbWFya2V0cGxhY2UsIGFuZAorICB0aGVuIGluY29ycG9yYXRlIHRoZSBpbm5vdmF0aW9ucyBhbmQgZW5oYW5jZW1lbnRzIHdlIG1hZGUgaW50byB0aGUgY29yZQorICBwbGF0Zm9ybSwgYXMgdGhlIG5leHQgdmVyc2lvbi48L3A+Cis8cD5JbiBwcmFjdGljZSwgdGhpcyBtZWFucyB0aGF0IHRoZSBBbmRyb2lkIGVuZ2luZWVyaW5nIHRlYW0gdHlwaWNhbGx5IGZvY3VzZXMKKyAgb24gYSBzbWFsbCBudW1iZXIgb2YgImZsYWdzaGlwIiBkZXZpY2VzLCBhbmQgZGV2ZWxvcHMgdGhlIG5leHQgdmVyc2lvbiBvZgorICB0aGUgQW5kcm9pZCBzb2Z0d2FyZSB0byBzdXBwb3J0IHRob3NlIHByb2R1Y3QgbGF1bmNoZXMuIFRoZXNlIGZsYWdzaGlwCisgIGRldmljZXMgYWJzb3JiIG11Y2ggb2YgdGhlIHByb2R1Y3QgcmlzayBhbmQgYmxhemUgYSB0cmFpbCBmb3IgdGhlIGJyb2FkIE9FTQorICBjb21tdW5pdHksIHdobyBmb2xsb3cgdXAgd2l0aCBtYW55IG1vcmUgZGV2aWNlcyB0aGF0IHRha2UgYWR2YW50YWdlIG9mIHRoZQorICBuZXcgZmVhdHVyZXMuIEluIHRoaXMgd2F5LCB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgQW5kcm9pZCBwbGF0Zm9ybSBldm9sdmVzCisgIGFjY29yZGluZyB0byB0aGUgYWN0dWFsIG5lZWRzIG9mIHJlYWwtd29ybGQgZGV2aWNlcy48L3A+CisKKzxoMz5Ib3cgaXMgdGhlIEFuZHJvaWQgc29mdHdhcmUgZGV2ZWxvcGVkPzwvaDM+Cis8cD5FYWNoIHBsYXRmb3JtIHZlcnNpb24gb2YgQW5kcm9pZCAoc3VjaCBhcyAxLjUsIDEuNiwgYW5kIHNvIG9uKSBoYXMgYQorICBjb3JyZXNwb25kaW5nIGJyYW5jaCBpbiB0aGUgb3Blbi1zb3VyY2UgdHJlZS4gQXQgYW55IGdpdmVuIG1vbWVudCwgdGhlIG1vc3QKKyAgcmVjZW50IHN1Y2ggYnJhbmNoIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgImN1cnJlbnQgc3RhYmxlIiBicmFuY2ggdmVyc2lvbi4KKyAgVGhpcyBjdXJyZW50IHN0YWJsZSBicmFuY2ggaXMgdGhlIG9uZSB0aGF0IG1hbnVmYWN0dXJlcnMgcG9ydCB0byB0aGVpcgorICBkZXZpY2VzLiBUaGlzIGJyYW5jaCBpcyBrZXB0IHN1aXRhYmxlIGZvciByZWxlYXNlIGF0IGFsbCB0aW1lcy48L3A+Cis8cD5TaW11bHRhbmVvdXNseSwgdGhlcmUgaXMgYWxzbyBhICJjdXJyZW50IGV4cGVyaW1lbnRhbCIgYnJhbmNoLCB3aGljaCBpcworICB3aGVyZSBzcGVjdWxhdGl2ZSBjb250cmlidXRpb25zLCBzdWNoIGFzIGxhcmdlIG5leHQtZ2VuZXJhdGlvbiBmZWF0dXJlcywgYXJlCisgIGRldmVsb3BlZC4gQnVnIGZpeGVzIGFuZCBvdGhlciBjb250cmlidXRpb25zIGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgY3VycmVudAorICBzdGFibGUgYnJhbmNoIGZyb20gdGhlIGV4cGVyaW1lbnRhbCBicmFuY2ggYXMgYXBwcm9wcmlhdGUuPC9wPgorPHA+RmluYWxseSwgR29vZ2xlIHdvcmtzIG9uIHRoZSBuZXh0IHZlcnNpb24gb2YgdGhlIEFuZHJvaWQgcGxhdGZvcm0gaW4gdGFuZGVtCisgIHdpdGggZGV2ZWxvcGluZyBhIGZsYWdzaGlwIGRldmljZS4gVGhpcyBicmFuY2ggcHVsbHMgaW4gY2hhbmdlcyBmcm9tIHRoZQorICBleHBlcmltZW50YWwgYW5kIHN0YWJsZSBicmFuY2hlcyBhcyBhcHByb3ByaWF0ZS48L3A+Cis8cD5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljIGF0IG91ciBCcmFuY2hlcyBSZWxlYXNlcworICBwYWdlLjwvcD4KKworPGgzPldoeSBhcmUgcGFydHMgb2YgQW5kcm9pZCBkZXZlbG9wZWQgaW4gcHJpdmF0ZT88L2gzPgorPHA+SXQgdHlwaWNhbGx5IHRha2VzIG92ZXIgYSB5ZWFyIHRvIGJyaW5nIGEgZGV2aWNlIHRvIG1hcmtldCwgYnV0IG9mIGNvdXJzZQorICBkZXZpY2UgbWFudWZhY3R1cmVycyB3YW50IHRvIHNoaXAgdGhlIGxhdGVzdCBzb2Z0d2FyZSB0aGV5IGNhbi4gRGV2ZWxvcGVycywKKyAgbWVhbndoaWxlLCBkb24ndCB3YW50IHRvIGhhdmUgdG8gY29uc3RhbnRseSB0cmFjayBuZXcgdmVyc2lvbnMgb2YgdGhlCisgIHBsYXRmb3JtIHdoZW4gd3JpdGluZyBhcHBzLiBCb3RoIGdyb3VwcyBleHBlcmllbmNlIGEgdGVuc2lvbiBiZXR3ZWVuCisgIHNoaXBwaW5nIHByb2R1Y3RzLCBhbmQgbm90IHdhbnRpbmcgdG8gZmFsbCBiZWhpbmQuPC9wPgorPHA+VG8gYWRkcmVzcyB0aGlzLCBzb21lIHBhcnRzIG9mIHRoZSBuZXh0IHZlcnNpb24gb2YgQW5kcm9pZCBpbmNsdWRpbmcgdGhlCisgIGNvcmUgcGxhdGZvcm0gQVBJcyBhcmUgZGV2ZWxvcGVkIGluIGEgcHJpdmF0ZSBicmFuY2guIFRoZXNlIEFQSXMgY29uc3RpdHV0ZQorICB0aGUgbmV4dCB2ZXJzaW9uIG9mIEFuZHJvaWQuIE91ciBhaW0gaXMgdG8gZm9jdXMgYXR0ZW50aW9uIG9uIHRoZSBjdXJyZW50CisgIHN0YWJsZSB2ZXJzaW9uIG9mIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlLCB3aGlsZSB3ZSByZWZpbmUgdGhlIG5leHQgdmVyc2lvbgorICBvZiB0aGUgcGxhdGZvcm0gdXNpbmcgdGhlIGZsYWdzaGlwIEFuZHJvaWQgZGV2aWNlcy4gVGhpcyBhbGxvd3MgZGV2ZWxvcGVycworICBhbmQgT0VNcyB0byBmb2N1cyBvbiBhIHNpbmdsZSB2ZXJzaW9uIHdpdGhvdXQgaGF2aW5nIHRvIHRyYWNrIHVuZmluaXNoZWQKKyAgZnV0dXJlIHdvcmsganVzdCB0byBrZWVwIHVwLk90aGVyIHBhcnRzIG9mIHRoZSBBbmRyb2lkIHN5c3RlbSB0aGF0IGFyZW4ndAorICByZWxhdGVkIHRvIGFwcGxpY2F0aW9uIGNvbXBhdGliaWxpdHkgYXJlIGRldmVsb3BlZCBpbiB0aGUgb3BlbiwgaG93ZXZlci4KKyAgSXQncyBvdXIgaW50ZW50aW9uIHRvIG1vdmUgbW9yZSBvZiB0aGVzZSBwYXJ0cyB0byBvcGVuIGRldmVsb3BtZW50IG92ZXIKKyAgdGltZS48L3A+CisKKzxoMz5XaGVuIGFyZSBzb3VyY2UgY29kZSByZWxlYXNlcyBtYWRlPzwvaDM+Cis8cD5XaGVuIHRoZXkgYXJlIHJlYWR5LiBTb21lIHBhcnRzIG9mIEFuZHJvaWQgYXJlIGRldmVsb3BlZCBpbiB0aGUgb3BlbiwgYW5kCisgIHNvIHRoYXQgc291cmNlIGNvZGUgaXMgYWx3YXlzIGF2YWlsYWJsZS4gT3RoZXIgcGFydHMgYXJlIGRldmVsb3BlZCBmaXJzdCBpbgorICBhIHByaXZhdGUgdHJlZSwgYW5kIHRoYXQgc291cmNlIGNvZGUgaXMgcmVsZWFzZWQgd2hlbiB0aGUgbmV4dCBwbGF0Zm9ybQorICB2ZXJzaW9uIGlzIHJlYWR5LjwvcD4KKzxwPkluIHNvbWUgcmVsZWFzZXMsIGNvcmUgcGxhdGZvcm0gQVBJcyB3aWxsIGJlIHJlYWR5IGZhciBlbm91Z2ggaW4gYWR2YW5jZQorICB0aGF0IHdlIGNhbiBwdXNoIHRoZSBzb3VyY2UgY29kZSBvdXQgZm9yIGFuIGVhcmx5IGxvb2sgaW4gYWR2YW5jZSBvZiB0aGUKKyAgZGV2aWNlJ3MgcmVsZWFzZTsgaG93ZXZlciBpbiBvdGhlcnMsIHRoaXMgaXNuJ3QgcG9zc2libGUuIEluIGFsbCBjYXNlcywgd2UKKyAgcmVsZWFzZSB0aGUgcGxhdGZvcm0gc291cmNlIHdoZW4gd2UgZmVlbCB0aGUgdmVyc2lvbiBoYXMgc3RhYmlsaXplZCBlbm91Z2gsCisgIGFuZCB3aGVuIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIHBlcm1pdHMuIFJlbGVhc2luZyB0aGUgc291cmNlIGNvZGUgaXMgYQorICBmYWlybHkgY29tcGxleCBwcm9jZXNzLjwvcD4KKworPGgzPldoYXQgaXMgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYSBuZXcgQW5kcm9pZCB2ZXJzaW9uPzwvaDM+Cis8cD5SZWxlYXNpbmcgdGhlIHNvdXJjZSBjb2RlIGZvciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBbmRyb2lkIHBsYXRmb3JtIGlzIGEKKyAgc2lnbmlmaWNhbnQgcHJvY2Vzcy4gRmlyc3QsIHRoZSBzb2Z0d2FyZSBnZXRzIGJ1aWx0IGludG8gYSBzeXN0ZW0gaW1hZ2UgZm9yCisgIGEgZGV2aWNlLCBhbmQgcHV0IHRocm91Z2ggdmFyaW91cyBmb3JtcyBvZiBjZXJ0aWZpY2F0aW9uLCBpbmNsdWRpbmcKKyAgZ292ZXJubWVudCByZWd1bGF0b3J5IGNlcnRpZmljYXRpb24gZm9yIHRoZSByZWdpb25zIHRoZSBwaG9uZXMgd2lsbCBiZQorICBkZXBsb3llZC4gSXQgYWxzbyBnb2VzIHRocm91Z2ggb3BlcmF0b3IgdGVzdGluZy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcGhhc2UKKyAgb2YgdGhlIHByb2Nlc3MsIHNpbmNlIGl0IGhlbHBzIHNoYWtlIG91dCBhIGxvdCBvZiBzb2Z0d2FyZSBidWdzLjwvcD4KKzxwPk9uY2UgdGhlIHJlbGVhc2UgaXMgYXBwcm92ZWQgYnkgdGhlIHJlZ3VsYXRvcnMgYW5kIG9wZXJhdG9ycywgdGhlCisgIG1hbnVmYWN0dXJlciBiZWdpbnMgbWFzcyBwcm9kdWNpbmcgZGV2aWNlcywgYW5kIHdlIHR1cm4gdG8gcmVsZWFzaW5nIHRoZQorICBzb3VyY2UgY29kZS48L3A+Cis8cD5TaW11bHRhbmVvdXMgdG8gbWFzcyBwcm9kdWN0aW9uIHRoZSBHb29nbGUgdGVhbSBraWNrcyBvZmYgc2V2ZXJhbCBlZmZvcnRzCisgIHRvIHByZXBhcmUgdGhlIG9wZW4gc291cmNlIHJlbGVhc2UuIFRoZXNlIGVmZm9ydHMgaW5jbHVkZSBmaW5hbCBBUEkgY2hhbmdlcworICBhbmQgZG9jdW1lbnRhdGlvbiAodG8gcmVmbGVjdCBhbnkgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBkdXJpbmcKKyAgcXVhbGlmaWNhdGlvbiB0ZXN0aW5nLCBmb3IgZXhhbXBsZSksIHByZXBhcmluZyBhbiBTREsgZm9yIHRoZSBuZXcgdmVyc2lvbiwKKyAgYW5kIGxhdW5jaGluZyB0aGUgcGxhdGZvcm0gY29tcGF0aWJpbGl0eSBpbmZvcm1hdGlvbi48L3A+Cis8cD5BbHNvIGluY2x1ZGVkIGlzIGEgZmluYWwgbGVnYWwgc2lnbi1vZmYgdG8gcmVsZWFzZSB0aGUgY29kZSBpbnRvIG9wZW4KKyAgc291cmNlLiBKdXN0IGFzIG9wZW4gc291cmNlIGNvbnRyaWJ1dG9ycyBhcmUgcmVxdWlyZWQgdG8gc2lnbiBhIENvbnRyaWJ1dG9ycworICBMaWNlbnNlIEFncmVlbWVudCBhdHRlc3RpbmcgdG8gdGhlaXIgSVAgb3duZXJzaGlwIG9mIHRoZWlyIGNvbnRyaWJ1dGlvbiwKKyAgR29vZ2xlIHRvbyBtdXN0IHZlcmlmeSB0aGF0IGl0IGlzIGNsZWFyIHRvIG1ha2UgY29udHJpYnV0aW9ucy48L3A+Cis8cD5TdGFydGluZyBhdCB0aGUgdGltZSBtYXNzIHByb2R1Y3Rpb24gYmVnaW5zLCB0aGUgc29mdHdhcmUgcmVsZWFzZSBwcm9jZXNzCisgIHVzdWFsbHkgdGFrZXMgYXJvdW5kIGEgbW9udGgsIHdoaWNoIG9mdGVuIHJvdWdobHkgcGxhY2VzIHNvdXJjZSBjb2RlCisgIHJlbGVhc2VzIGFyb3VuZCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhlIGRldmljZXMgcmVhY2ggdXNlcnMuPC9wPgorCis8aDM+SG93IGRvZXMgdGhlIEFPU1AgcmVsYXRlIHRvIHRoZSBBbmRyb2lkIENvbXBhdGliaWxpdHkgUHJvZ3JhbT88L2gzPgorPHA+VGhlIEFuZHJvaWQgT3Blbi1Tb3VyY2UgUHJvamVjdCBtYWludGFpbnMgdGhlIEFuZHJvaWQgc29mdHdhcmUsIGFuZAorICBkZXZlbG9wcyBuZXcgdmVyc2lvbnMuIFNpbmNlIGl0J3Mgb3Blbi1zb3VyY2UsIHRoaXMgc29mdHdhcmUgY2FuIGJlIHVzZWQgZm9yCisgIGFueSBwdXJwb3NlLCBpbmNsdWRpbmcgdG8gc2hpcCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggb3RoZXIKKyAgZGV2aWNlcyBiYXNlZCBvbiB0aGUgc2FtZSBzb3VyY2UuPC9wPgorPHA+VGhlIGZ1bmN0aW9uIG9mIHRoZSBBbmRyb2lkIENvbXBhdGliaWxpdHkgUHJvZ3JhbSBpcyB0byBkZWZpbmUgYSBiYXNlbGluZQorICBpbXBsZW1lbnRhdGlvbiBvZiBBbmRyb2lkIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXJkLXBhcnR5IGFwcHMgd3JpdHRlbgorICBieSBkZXZlbG9wZXJzLiBEZXZpY2VzIHRoYXQgYXJlICJBbmRyb2lkIGNvbXBhdGlibGUiIG1heSBwYXJ0aWNpcGF0ZSBpbiB0aGUKKyAgQW5kcm9pZCBlY29zeXN0ZW0sIGluY2x1ZGluZyBBbmRyb2lkIE1hcmtldDsgZGV2aWNlcyB0aGF0IGRvbid0IG1lZXQgdGhlCisgIGNvbXBhdGliaWxpdHkgcmVxdWlyZW1lbnRzIGV4aXN0IG91dHNpZGUgdGhhdCBlY29zeXN0ZW0uPC9wPgorPHA+SW4gb3RoZXIgd29yZHMsIHRoZSBBbmRyb2lkIENvbXBhdGliaWxpdHkgUHJvZ3JhbSBpcyBob3cgd2Ugc2VwYXJhdGUKKyAgIkFuZHJvaWQgY29tcGF0aWJsZSBkZXZpY2VzIiBmcm9tIGRldmljZXMgdGhhdCBtZXJlbHkgcnVuIGRlcml2YXRpdmVzIG9mIHRoZQorICBzb3VyY2UgY29kZS4gV2Ugd2VsY29tZSBhbGwgdXNlcyBvZiB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSwgYnV0IG9ubHkKKyAgQW5kcm9pZCBjb21wYXRpYmxlIGRldmljZXMgLS0gYXMgZGVmaW5lZCBhbmQgdGVzdGVkIGJ5IHRoZSBBbmRyb2lkCisgIENvbXBhdGliaWxpdHkgUHJvZ3JhbSAtLSBtYXkgY2FsbCB0aGVtc2VsdmVzICJBbmRyb2lkIiBhbmQgcGFydGljaXBhdGUgaW4KKyAgdGhlIEFuZHJvaWQgZWNvc3lzdGVtLjwvcD4KKworPGgzPkhvdyBjYW4gSSBjb250cmlidXRlIHRvIEFuZHJvaWQ/PC9oMz4KKzxwPlRoZXJlIGFyZSBhIG51bWJlciBvZiB3YXlzIHlvdSBjYW4gY29udHJpYnV0ZSB0byBBbmRyb2lkLiBZb3UgY2FuIHJlcG9ydAorICBidWdzLCB3cml0ZSBhcHBzIGZvciBBbmRyb2lkLCBvciBjb250cmlidXRlIHNvdXJjZSBjb2RlIHRvIHRoZSBBbmRyb2lkCisgIE9wZW4tU291cmNlIFByb2plY3QuPC9wPgorPHA+VGhlcmUgYXJlIHNvbWUgbGltaXRzIG9uIHRoZSBraW5kcyBvZiBjb2RlIGNvbnRyaWJ1dGlvbnMgd2UgYXJlIHdpbGxpbmcgb3IKKyAgYWJsZSB0byBhY2NlcHQuIEZvciBpbnN0YW5jZSwgc29tZW9uZSBtaWdodCB3YW50IHRvIGNvbnRyaWJ1dGUgYW4KKyAgYWx0ZXJuYXRpdmUgYXBwbGljYXRpb24gQVBJLCBzdWNoIGFzIGEgZnVsbCBDKystYmFzZWQgZW52aXJvbm1lbnQuIFdlIHdvdWxkCisgIGRlY2xpbmUgdGhhdCBjb250cmlidXRpb24sIHNpbmNlIEFuZHJvaWQgaXMgZm9jdXNlZCBvbiBhcHBsaWNhdGlvbnMgdGhhdCBydW4KKyAgaW4gdGhlIERhbHZpayBWTS4gQWx0ZXJuYXRpdmVseSwgd2Ugd29uJ3QgYWNjZXB0IGNvbnRyaWJ1dGlvbnMgc3VjaCBhcyBHUEwKKyAgb3IgTEdQTCBsaWJyYXJpZXMgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3VyIGxpY2Vuc2luZyBnb2Fscy48L3A+Cis8cD5XZSBlbmNvdXJhZ2UgdGhvc2UgaW50ZXJlc3RlZCBpbiBjb250cmlidXRpbmcgc291cmNlIGNvZGUgdG8gY29udGFjdCB1cyB2aWEKKyAgdGhlIEFPU1AgQ29tbXVuaXR5IHBhZ2UgcHJpb3IgdG8gYmVnaW5uaW5nIGFueSB3b3JrLiBZb3UgY2FuIGZpbmQgbW9yZQorICBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljIGF0IHRoZSBHZXR0aW5nIEludm9sdmVkIHBhZ2UuPC9wPgorCis8aDM+SG93IGRvIEkgYmVjb21lIGFuIEFuZHJvaWQgY29tbWl0dGVyPzwvaDM+Cis8cD5UaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSBub3Rpb24gb2YgYQorICAiY29tbWl0dGVyIi4gQWxsIGNvbnRyaWJ1dGlvbnMgLS0gaW5jbHVkaW5nIHRob3NlIGF1dGhvcmVkIGJ5IEdvb2dsZQorICBlbXBsb3llZXMgLS0gZ28gdGhyb3VnaCBhIHdlYi1iYXNlZCBzeXN0ZW0ga25vd24gYXMgImdlcnJpdCIgdGhhdCdzIHBhcnQgb2YKKyAgdGhlIEFuZHJvaWQgZW5naW5lZXJpbmcgcHJvY2Vzcy4gVGhpcyBzeXN0ZW0gd29ya3MgaW4gdGFuZGVtIHdpdGggdGhlIGdpdAorICBzb3VyY2UgY29kZSBtYW5hZ2VtZW50IHN5c3RlbSB0byBjbGVhbmx5IG1hbmFnZSBzb3VyY2UgY29kZQorICBjb250cmlidXRpb25zLjwvcD4KKzxwPk9uY2Ugc3VibWl0dGVkLCBjaGFuZ2VzIG5lZWQgdG8gYmUgYWNjZXB0ZWQgYnkgYSBkZXNpZ25hdGVkIEFwcHJvdmVyLgorICBBcHByb3ZlcnMgYXJlIHR5cGljYWxseSBHb29nbGUgZW1wbG95ZWVzLCBidXQgdGhlIHNhbWUgYXBwcm92ZXJzIGFyZQorICByZXNwb25zaWJsZSBmb3IgYWxsIHN1Ym1pc3Npb25zLCByZWdhcmRsZXNzIG9mIG9yaWdpbi48L3A+Cis8cD5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljIGF0IHRoZSBTdWJtaXR0aW5nIFBhdGNoZXMKKyAgcGFnZS48L3A+CisKKzxhIG5hbWU9ImNvbXBhdGliaWxpdHkiPjwvYT48aDI+Q29tcGF0aWJpbGl0eTwvaDI+Cis8aDM+V2hhdCBkb2VzICJjb21wYXRpYmlsaXR5IiBtZWFuPzwvaDM+Cis8cD5XZSBkZWZpbmUgYW4gIkFuZHJvaWQgY29tcGF0aWJsZSIgZGV2aWNlIGFzIG9uZSB0aGF0IGNhbiBydW4gYW55CisgIGFwcGxpY2F0aW9uIHdyaXR0ZW4gYnkgdGhpcmQtcGFydHkgZGV2ZWxvcGVycyB1c2luZyB0aGUgQW5kcm9pZCBTREsgYW5kIE5ESy4KKyAgV2UgdXNlIHRoaXMgYXMgYSBmaWx0ZXIgdG8gc2VwYXJhdGUgZGV2aWNlcyB0aGF0IGNhbiBwYXJ0aWNpcGF0ZSBpbiB0aGUKKyAgQW5kcm9pZCBhcHAgZWNvc3lzdGVtLCBhbmQgdGhvc2UgdGhhdCBjYW5ub3QuIERldmljZXMgdGhhdCBhcmUgcHJvcGVybHkKKyAgY29tcGF0aWJsZSBjYW4gc2VlayBhcHByb3ZhbCB0byB1c2UgdGhlIEFuZHJvaWQgdHJhZGVtYXJrLiBEZXZpY2VzIHRoYXQgYXJlCisgIG5vdCBjb21wYXRpYmxlIGFyZSBtZXJlbHkgZGVyaXZlZCBmcm9tIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlIGFuZCBtYXkgbm90CisgIHVzZSB0aGUgQW5kcm9pZCB0cmFkZW1hcmsuPC9wPgorPHA+SW4gb3RoZXIgd29yZHMsIGNvbXBhdGliaWxpdHkgaXMgYSBwcmVyZXF1aXNpdGUgdG8gcGFydGljaXBhdGUgaW4gdGhlCisgIEFuZHJvaWQgYXBwcyBlY29zeXN0ZW0uIEFueW9uZSBpcyB3ZWxjb21lIHRvIHVzZSB0aGUgQW5kcm9pZCBzb3VyY2UgY29kZSwKKyAgYnV0IGlmIHRoZSBkZXZpY2UgaXNuJ3QgY29tcGF0aWJsZSwgaXQncyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBBbmRyb2lkCisgIGVjb3N5c3RlbSwgYW5kIGlycmVsZXZhbnQgdG8gZGV2ZWxvcGVycy48L3A+CisKKzxoMz5XaGF0IGlzIHRoZSByb2xlIG9mIEFuZHJvaWQgTWFya2V0IGluIGNvbXBhdGliaWxpdHk/PC9oMz4KKzxwPkRldmljZXMgdGhhdCBhcmUgQW5kcm9pZCBjb21wYXRpYmxlIG1heSBzZWVrIHRvIGxpY2Vuc2UgdGhlIEFuZHJvaWQgTWFya2V0CisgIGNsaWVudCBzb2Z0d2FyZS4gVGhpcyBhbGxvd3MgdGhlbSB0byBiZWNvbWUgcGFydCBvZiB0aGUgQW5kcm9pZCBhcHAKKyAgZWNvc3lzdGVtLCBieSBhbGxvd2luZyB1c2VycyB0byBkb3dubG9hZCBkZXZlbG9wZXJzJyBhcHBzIGZyb20gYSBjYXRhbG9nCisgIHNoYXJlZCBieSBhbGwgY29tcGF0aWJsZSBkZXZpY2VzLiBUaGlzIG9wdGlvbiBpc24ndCBhdmFpbGFibGUgdG8gZGV2aWNlcworICB0aGF0IGFyZW4ndCBjb21wYXRpYmxlLjwvcD4KKworPGgzPldoYXQga2luZHMgb2YgZGV2aWNlcyBjYW4gYmUgQW5kcm9pZCBjb21wYXRpYmxlPzwvaDM+Cis8cD5UaGUgQW5kcm9pZCBzb2Z0d2FyZSBjYW4gYmUgcG9ydGVkIHRvIGEgbG90IG9mIGRpZmZlcmVudCBraW5kcyBvZiBkZXZpY2VzLAorICBpbmNsdWRpbmcgc29tZSBvbiB3aGljaCB0aGlyZC1wYXJ0eSBhcHBzIHdvbid0IHJ1biBwcm9wZXJseS4gVGhlIEFuZHJvaWQKKyAgQ29tcGF0aWJpbGl0eSBEZWZpbml0aW9uIERvY3VtZW50IChDREQpIHNwZWxscyBvdXQgdGhlIHNwZWNpZmljIGRldmljZQorICBjb25maWd1cmF0aW9ucyB0aGF0IHdpbGwgYmUgY29uc2lkZXJlZCBjb21wYXRpYmxlLjwvcD4KKzxwPkZvciBleGFtcGxlLCB0aG91Z2ggdGhlIEFuZHJvaWQgc291cmNlIGNvZGUgY291bGQgYmUgcG9ydGVkIHRvIHJ1biBvbiBhCisgIGRldmljZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIGNhbWVyYSwgdGhlIENERCByZXF1aXJlcyB0aGF0IGluIG9yZGVyIHRvIGJlCisgIGNvbXBhdGlibGUsIGFsbCBkZXZpY2VzIG11c3QgaGF2ZSBhIGNhbWVyYS4gVGhpcyBhbGxvd3MgZGV2ZWxvcGVycyB0byByZWx5CisgIG9uIGEgY29uc2lzdGVudCBzZXQgb2YgZGV2aWNlIGNhcGFiaWxpdGllcyB3aGVuIHdyaXRpbmcgdGhlaXIgYXBwcy48L3A+Cis8cD5UaGUgQ0REIHdpbGwgZXZvbHZlIG92ZXIgdGltZSB0byByZWZsZWN0IG1hcmtldCByZWFsaXRpZXMuIEZvciBpbnN0YW5jZSwKKyAgdGhlIDEuNiBDREQgb25seSBhbGxvd3MgY2VsbCBwaG9uZXMsIGJ1dCB0aGUgMi54IENERCBhbGxvd3MgZGV2aWNlcyB0byBvbWl0CisgIHRlbGVwaG9ueSBoYXJkd2FyZSwgYWxsb3dpbmcgZm9yIG5vbi1waG9uZSBkZXZpY2VzIHN1Y2ggYXMgdGFibGV0LXN0eWxlCisgIG11c2ljIHBsYXllcnMgdG8gYmUgY29tcGF0aWJsZS4gQXMgd2UgbWFrZSB0aGVzZSBjaGFuZ2VzLCB3ZSB3aWxsIGFsc28KKyAgYXVnbWVudCBBbmRyb2lkIE1hcmtldCB0byBhbGxvdyBkZXZlbG9wZXJzIHRvIHJldGFpbiBjb250cm9sIG92ZXIgd2hlcmUKKyAgdGhlaXIgYXBwcyBhcmUgYXZhaWxhYmxlLiBUbyBjb250aW51ZSB0aGUgdGVsZXBob255IGV4YW1wbGUsIGFuIGFwcCB0aGF0CisgIG1hbmFnZXMgU01TIHRleHQgbWVzc2FnZXMgd291bGQgbm90IGJlIHVzZWZ1bCBvbiBhIG1lZGlhIHBsYXllciwgc28gQW5kcm9pZAorICBNYXJrZXQgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gcmVzdHJpY3QgdGhhdCBhcHAgZXhjbHVzaXZlbHkgdG8gcGhvbmUKKyAgZGV2aWNlcy48L3A+CisKKzxoMz5JZiBteSBkZXZpY2UgaXMgY29tcGF0aWJsZSwgZG9lcyBpdCBhdXRvbWF0aWNhbGx5IGhhdmUgYWNjZXNzIHRvIEFuZHJvaWQgTWFya2V0IGFuZCBicmFuZGluZz88L2gzPgorPHA+QW5kcm9pZCBNYXJrZXQgaXMgYSBzZXJ2aWNlIG9wZXJhdGVkIGJ5IEdvb2dsZS4gRm9yIGxlZ2FsIGFuZCBidXNpbmVzcworICByZWFzb25zLCBHb29nbGUgaXNuJ3QgYWJsZSB0byBtYWtlIHRoYXQgc2VydmljZSBhdmFpbGFibGUgaW4gYWxsIHBhcnRzIG9mCisgIHRoZSB3b3JsZC4gU2ltaWxhcmx5LCBHb29nbGUgaXMgdW5hYmxlIHRvIGxpY2Vuc2UgdGhlIEFuZHJvaWQgdHJhZGVtYXJrIGZvcgorICB1c2UgaW4gYWxsIGNhc2VzLjwvcD4KKzxwPkFzIGEgcmVzdWx0LCBhY2hpZXZpbmcgY29tcGF0aWJpbGl0eSBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGVudGl0bGUgYQorICBkZXZpY2UgdG8gaW5jbHVkZSBBbmRyb2lkIE1hcmtldCBvciB1c2UgdGhlIEFuZHJvaWQgbmFtZS4gRGV2aWNlCisgIG1hbnVmYWN0dXJlcnMgc2hvdWxkIGNvbnRhY3QgR29vZ2xlIHRvIG9idGFpbiBhY2Nlc3MgdG8gdGhvc2UgdG9vbHMuPC9wPgorCis8aDM+SWYgSSBhbSBub3QgYSBtYW51ZmFjdHVyZXIsIGhvdyBjYW4gSSBnZXQgQW5kcm9pZCBNYXJrZXQ/PC9oMz4KKzxwPkFuZHJvaWQgTWFya2V0IGlzIG9ubHkgbGljZW5zZWQgdG8gaGFuZHNldCBtYW51ZmFjdHVyZXJzIHNoaXBwaW5nIGRldmljZXMuCisgIEZvciBxdWVzdGlvbnMgYWJvdXQgc3BlY2lmaWMgY2FzZXMsIGNvbnRhY3QKKyAgYW5kcm9pZC1wYXJ0bmVyc2hpcHNAZ29vZ2xlLmNvbS48L3A+CisKKzxoMz5Ib3cgY2FuIEkgZ2V0IGFjY2VzcyB0byB0aGUgR29vZ2xlIGFwcHMgZm9yIEFuZHJvaWQsIHN1Y2ggYXMgTWFwcz88L2gzPgorPHA+VGhlIEdvb2dsZSBhcHBzIGZvciBBbmRyb2lkLCBzdWNoIGFzIFlvdVR1YmUsIEdvb2dsZSBNYXBzIGFuZCBOYXZpZ2F0aW9uLAorICBHbWFpbCwgYW5kIHNvIG9uIGFyZSBub3QgcGFydCBvZiBBbmRyb2lkLCBhbmQgYXJlIGxpY2Vuc2VkIHNlcGFyYXRlbHkuCisgIENvbnRhY3QgYW5kcm9pZC1wYXJ0bmVyc2hpcHNAZ29vZ2xlLmNvbSBmb3IgaW5xdWlyaWVzIHJlbGF0ZWQgdG8gdGhvc2UKKyAgYXBwcy48L3A+CisKKzxoMz5JcyBjb21wYXRpYmlsaXR5IG1hbmRhdG9yeT88L2gzPgorPHA+Tm8uIFRoZSBBbmRyb2lkIENvbXBhdGliaWxpdHkgUHJvZ3JhbSBpcyBvcHRpb25hbC4gU2luY2UgdGhlIEFuZHJvaWQgc291cmNlCisgIGNvZGUgaXMgb3BlbiwgYW55b25lIGNhbiB1c2UgaXQgdG8gYnVpbGQgYW55IGtpbmQgb2YgZGV2aWNlLiBIb3dldmVyLCBpZiBhCisgIG1hbnVmYWN0dXJlciB3aXNoZXMgdG8gdXNlIHRoZSBBbmRyb2lkIG5hbWUgd2l0aCB0aGVpciBwcm9kdWN0LCBvciB3YW50cworICBhY2Nlc3MgdG8gQW5kcm9pZCBNYXJrZXQsIHRoZXkgbXVzdCBmaXJzdCBkZW1vbnN0cmF0ZSB0aGF0IHRoZSBkZXZpY2UgaXMKKyAgY29tcGF0aWJsZS48L3A+CisKKzxoMz5Ib3cgbXVjaCBkb2VzIGNvbXBhdGliaWxpdHkgY2VydGlmaWNhdGlvbiBjb3N0PzwvaDM+Cis8cD5UaGVyZSBpcyBubyBjb3N0IHRvIG9idGFpbiBBbmRyb2lkIGNvbXBhdGliaWxpdHkgZm9yIGEgZGV2aWNlLiBUaGUKKyAgQ29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlIGlzIG9wZW4tc291cmNlIGFuZCBhdmFpbGFibGUgdG8gYW55b25lIHRvIHVzZSB0bworICB0ZXN0IGEgZGV2aWNlLjwvcD4KKworPGgzPkhvdyBsb25nIGRvZXMgY29tcGF0aWJpbGl0eSB0YWtlPzwvaDM+Cis8cD5UaGUgcHJvY2VzcyBpcyBhdXRvbWF0aWMuIFRoZSBDb21wYXRpYmlsaXR5IFRlc3QgU3VpdGUgZ2VuZXJhdGVzIGEgcmVwb3J0CisgIHRoYXQgY2FuIGJlIHByb3ZpZGVkIHRvIEdvb2dsZSB0byB2ZXJpZnkgY29tcGF0aWJpbGl0eS4gRXZlbnR1YWxseSB3ZSBpbnRlbmQKKyAgdG8gcHJvdmlkZSBzZWxmLXNlcnZpY2UgdG9vbHMgdG8gdXBsb2FkIHRoZXNlIHJlcG9ydHMgdG8gYSBwdWJsaWMgZGF0YWJhc2UuPC9wPgorCis8aDM+V2hvIGRldGVybWluZXMgd2hhdCB3aWxsIGJlIHBhcnQgb2YgdGhlIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbj88L2gzPgorPHA+U2luY2UgR29vZ2xlIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgb3ZlcmFsbCBkaXJlY3Rpb24gb2YgQW5kcm9pZCBhcyBhCisgIHBsYXRmb3JtIGFuZCBwcm9kdWN0LCBHb29nbGUgbWFpbnRhaW5zIHRoZSBDb21wYXRpYmlsaXR5IERlZmluaXRpb24gRG9jdW1lbnQKKyAgZm9yIGVhY2ggcmVsZWFzZS4gV2UgZHJhZnQgdGhlIENERCBmb3IgYSBuZXcgQW5kcm9pZCB2ZXJzaW9uIGluIGNvbnN1bHRhdGlvbgorICB3aXRoIGEgbnVtYmVyIG9mIE9FTXMsIHdobyBwcm92aWRlIGlucHV0IG9uIGl0cyBjb250ZW50cy48L3A+CisKKzxoMz5Ib3cgbG9uZyB3aWxsIGVhY2ggQW5kcm9pZCB2ZXJzaW9uIGJlIHN1cHBvcnRlZCBmb3IgbmV3IGRldmljZXM/PC9oMz4KKzxwPlNpbmNlIEFuZHJvaWQncyBjb2RlIGlzIG9wZW4tc291cmNlLCB3ZSBjYW4ndCBwcmV2ZW50IHNvbWVvbmUgZnJvbSB1c2luZyBhbgorICBvbGQgdmVyc2lvbiB0byBsYXVuY2ggYSBkZXZpY2UuIEluc3RlYWQsIEdvb2dsZSBjaG9vc2VzIG5vdCB0byBsaWNlbnNlIHRoZQorICBBbmRyb2lkIE1hcmtldCBjbGllbnQgc29mdHdhcmUgZm9yIHVzZSBvbiB2ZXJzaW9ucyB0aGF0IGFyZSBjb25zaWRlcmVkCisgIG9ic29sZXRlLiBUaGlzIGFsbG93cyBhbnlvbmUgdG8gY29udGludWUgdG8gc2hpcCBvbGQgdmVyc2lvbnMgb2YgQW5kcm9pZCwKKyAgYnV0IHRob3NlIGRldmljZXMgd29uJ3QgdXNlIHRoZSBBbmRyb2lkIG5hbWUgYW5kIHdpbGwgZXhpc3Qgb3V0c2lkZSB0aGUKKyAgQW5kcm9pZCBhcHBzIGVjb3N5c3RlbSwganVzdCBhcyBpZiB0aGV5IHdlcmUgbm9uLWNvbXBhdGlibGUuPC9wPgorCis8aDM+Q2FuIGEgZGV2aWNlIGhhdmUgYSBkaWZmZXJlbnQgdXNlciBpbnRlcmZhY2UgYW5kIHN0aWxsIGJlIGNvbXBhdGlibGU/PC9oMz4KKzxwPlRoZSBBbmRyb2lkIENvbXBhdGliaWxpdHkgUHJvZ3JhbSBmb2N1c2VzIG9uIHdoZXRoZXIgYSBkZXZpY2UgY2FuIHJ1bgorICB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMuIFRoZSB1c2VyIGludGVyZmFjZSBjb21wb25lbnRzIHNoaXBwZWQgd2l0aCBhCisgIGRldmljZSAoc3VjaCBhcyBob21lIHNjcmVlbiwgZGlhbGVyLCBjb2xvciBzY2hlbWUsIGFuZCBzbyBvbikgZG9lcyBub3QKKyAgZ2VuZXJhbGx5IGhhdmUgbXVjaCBlZmZlY3Qgb24gdGhpcmQtcGFydHkgYXBwcy4gQXMgc3VjaCwgZGV2aWNlIGJ1aWxkZXJzIGFyZQorICBmcmVlIHRvIGN1c3RvbWl6ZSB0aGUgdXNlciBpbnRlcmZhY2UgYXMgbXVjaCBhcyB0aGV5IGxpa2UuIFRoZSBDb21wYXRpYmlsaXR5CisgIERlZmluaXRpb24gRG9jdW1lbnQgZG9lcyByZXN0cmljdCB0aGUgZGVncmVlIHRvIHdoaWNoIE9FTXMgbWF5IGFsdGVyIHRoZQorICBzeXN0ZW0gdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBmZXcgYXJlYXMgdGhhdCBkbyBpbXBhY3QgdGhpcmQtcGFydHkgYXBwcy48L3A+CisKKzxoMz5XaGVuIGFyZSBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zIHJlbGVhc2VkIGZvciBuZXcgQW5kcm9pZCB2ZXJzaW9ucz88L2gzPgorPHA+T3VyIGdvYWwgaXMgdG8gcmVsZWFzZSBuZXcgdmVyc2lvbnMgb2YgQW5kcm9pZCBDb21wYXRpYmlsaXR5IERlZmluaXRpb24KKyAgRG9jdW1lbnRzIChDRERzKSBvbmNlIHRoZSBjb3JyZXNwb25kaW5nIEFuZHJvaWQgcGxhdGZvcm0gdmVyc2lvbiBoYXMKKyAgY29udmVyZ2VkIGVub3VnaCB0byBwZXJtaXQgaXQuIFNpbmNlIHRoZSBDRERzPC9wPgorCis8aDM+SG93IGFyZSBkZXZpY2UgbWFudWZhY3R1cmVycycgY29tcGF0aWJpbGl0eSBjbGFpbXMgdmFsaWRhdGVkPzwvaDM+Cis8cD5UaGVyZSBpcyBubyB2YWxpZGF0aW9uIHByb2Nlc3MgZm9yIEFuZHJvaWQgZGV2aWNlIGNvbXBhdGliaWxpdHkuIEhvd2V2ZXIsCisgIGlmIHRoZSBkZXZpY2UgaXMgdG8gaW5jbHVkZSBBbmRyb2lkIE1hcmtldCwgR29vZ2xlIHdpbGwgdHlwaWNhbGx5IHZhbGlkYXRlCisgIHRoZSBkZXZpY2UgZm9yIGNvbXBhdGliaWxpdHkgYmVmb3JlIGFncmVlaW5nIHRvIGxpY2Vuc2UgdGhlIE1hcmtldCBjbGllbnQKKyAgc29mdHdhcmUuPC9wPgorCis8aDM+V2hhdCBoYXBwZW5zIGlmIGEgZGV2aWNlIHRoYXQgY2xhaW1zIGNvbXBhdGliaWxpdHkgaXMgbGF0ZXIgZm91bmQgdG8gaGF2ZSBjb21wYXRpYmlsaXR5IHByb2JsZW1zPzwvaDM+Cis8cD5UeXBpY2FsbHksIEdvb2dsZSdzIHJlbGF0aW9uc2hpcHMgd2l0aCBBbmRyb2lkIE1hcmtldCBsaWNlbnNlZXMgYWxsb3cgdXMgdG8KKyAgYXNrIHRoZW0gdG8gcmVsZWFzZSB1cGRhdGVkIHN5c3RlbSBpbWFnZXMgdGhhdCBmaXggdGhlIHByb2JsZW1zLjwvcD4KKworPGEgbmFtZT0iY3RzIj48L2E+PGgyPkNvbXBhdGliaWxpdHkgVGVzdCBTdWl0ZTwvaDI+Cis8aDM+V2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0aGUgQ1RTPzwvaDM+Cis8cD5UaGUgQ29tcGF0aWJpbGl0eSBUZXN0IFN1aXRlIGlzIGEgdG9vbCB1c2VkIGJ5IGRldmljZSBtYW51ZmFjdHVyZXJzIHRvIGhlbHAKKyAgZW5zdXJlIHRoZWlyIGRldmljZXMgYXJlIGNvbXBhdGlibGUsIGFuZCB0byByZXBvcnQgdGVzdCByZXN1bHRzIGZvcgorICB2YWxpZGF0aW9ucy4gVGhlIENUUyBpcyBpbnRlbmRlZCB0byBiZSBydW4gZnJlcXVlbnRseSBieSBPRU1zIHRocm91Z2hvdXQgdGhlCisgIGVuZ2luZWVyaW5nIHByb2Nlc3MgdG8gY2F0Y2ggY29tcGF0aWJpbGl0eSBpc3N1ZXMgZWFybHkuPC9wPgorCis8aDM+V2hhdCBraW5kcyBvZiB0aGluZ3MgZG9lcyB0aGUgQ1RTIHRlc3Q/PC9oMz4KKzxwPlRoZSBDVFMgY3VycmVudGx5IHRlc3RzIHRoYXQgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgQW5kcm9pZCBzdHJvbmctdHlwZWQgQVBJcworICBhcmUgcHJlc2VudCBhbmQgYmVoYXZlIGNvcnJlY3RseS4gSXQgYWxzbyB0ZXN0cyBvdGhlciBub24tQVBJIHN5c3RlbQorICBiZWhhdmlvcnMgc3VjaCBhcyBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgYW5kIHBlcmZvcm1hbmNlLiBXZSBwbGFuIHRvIGFkZAorICBzdXBwb3J0IGluIGZ1dHVyZSBDVFMgdmVyc2lvbnMgdG8gdGVzdCAic29mdCIgQVBJcyBzdWNoIGFzIEludGVudHMgYXMKKyAgd2VsbC48L3A+CisKKzxoMz5XaWxsIHRoZSBDVFMgcmVwb3J0cyBiZSBtYWRlIHB1YmxpYz88L2gzPgorPHA+WWVzLiBXaGlsZSBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLCBHb29nbGUgaW50ZW5kcyB0byBwcm92aWRlIHdlYi1iYXNlZAorICBzZWxmLXNlcnZpY2UgdG9vbHMgZm9yIE9FTXMgdG8gcHVibGlzaCBDVFMgcmVwb3J0cyBzbyB0aGF0IHRoZXkgY2FuIGJlCisgIHZpZXdlZCBieSBhbnlvbmUuIENUUyByZXBvcnRzIGNhbiBiZSBzaGFyZWQgYXMgd2lkZWx5IGFzIG1hbnVmYWN0dXJlcnMKKyAgcHJlZmVyLjwvcD4KKworPGgzPkhvdyBpcyB0aGUgQ1RTIGxpY2Vuc2VkPzwvaDM+Cis8cD5UaGUgQ1RTIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBzYW1lIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCB0aGF0IHRoZQorICBidWxrIG9mIEFuZHJvaWQgdXNlcy48L3A+CisKKzxoMz5Eb2VzIHRoZSBDVFMgYWNjZXB0IGNvbnRyaWJ1dGlvbnM/PC9oMz4KKzxwPlllcyBwbGVhc2UhIFRoZSBBbmRyb2lkIE9wZW4tU291cmNlIFByb2plY3QgYWNjZXB0cyBjb250cmlidXRpb25zIHRvCisgIGltcHJvdmUgdGhlIENUUyBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIGFueSBvdGhlciBjb21wb25lbnQuIEluIGZhY3QsCisgIGltcHJvdmluZyB0aGUgY292ZXJhZ2UgYW5kIHF1YWxpdHkgb2YgdGhlIENUUyB0ZXN0IGNhc2VzIGlzIG9uZSBvZiB0aGUgYmVzdAorICB3YXlzIHRvIGhlbHAgb3V0IEFuZHJvaWQuPC9wPgorCis8aDM+Q2FuIGFueW9uZSB1c2UgdGhlIENUUyBvbiBleGlzdGluZyBkZXZpY2VzPzwvaDM+Cis8cD5UaGUgQ29tcGF0aWJpbGl0eSBEZWZpbml0aW9uIERvY3VtZW50IHJlcXVpcmVzIHRoYXQgY29tcGF0aWJsZSBkZXZpY2VzCisgIGltcGxlbWVudCB0aGUgJ2FkYicgZGVidWdnaW5nIHV0aWxpdHkuIFRoaXMgbWVhbnMgdGhhdCBhbnkgY29tcGF0aWJsZSBkZXZpY2UKKyAgLS0gaW5jbHVkaW5nIG9uZXMgYXZhaWxhYmxlIGF0IHJldGFpbCAtLSBtdXN0IGJlIGFibGUgdG8gcnVuIHRoZSBDVFMKKyAgdGVzdHMuPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvcGRrX3RvYy5jcyBiL3Bkay9kb2NzL2d1aWRlL3Bka190b2MuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNDkzZTYuLjAwMDAwMDAKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvcGRrX3RvYy5jcworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci08IS0tCi1mdW5jdGlvbiBub3RoaW5nKCkge30KLS0tPgotPC9zY3JpcHQ+Ci0KLTx1bD4KLQotPGxpPiA8aDI+U2V0dXAgYW5kIEJ1aWxkaW5nPC9oMj4KLSAgPHVsPgotICAgICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4KLSAgICAgPGRpdj48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9idWlsZF9zeXN0ZW0uaHRtbCI+QnVpbGQgU3lzdGVtPC9hPjwvZGl2PgotICAgICA8dWw+ICAKLSAgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvYnVpbGRfbmV3X2RldmljZS5odG1sIj5Db25maWd1cmluZyBhIE5ldyBQcm9kdWN0PC9hPjwvbGk+Ci0gICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2J1aWxkX2Nvb2tib29rLmh0bWwiPkJ1aWxkIENvb2tib29rPC9hPjwvbGk+Ci0gICAgIDwvdWw+Ci0gICAgIDwvbGk+Ci0gICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9yZWxlYXNlX2tleXMuaHRtbCI+UmVsZWFzZSBLZXlzIGFuZCBTaWduaW5nIEJ1aWxkczwvYT48L2xpPiAKLSA8L3VsPgotPC9saT4KLQotPGxpPiA8aDI+Q3VzdG9taXphdGlvbjwvaDI+Ci0gIDx1bD4KLSAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvY3VzdG9taXphdGlvbi5odG1sIj5DdXN0b21pemF0aW9uPC9hPjwvbGk+Ci0gIDwvdWw+Ci08L2xpPgotCi08bGk+IDxoMj5TeXN0ZW08L2gyPgotCi08dWw+Ci0gIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9icmluZ191cC5odG1sIj5CcmluZyB1cDwvYT48L2xpPgotICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4KLSAgICA8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6bm90aGluZygpIj5Db25uZWN0aXZpdHk8L2E+PC9kaXY+Ci0gICAgPHVsPiAKLSAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9ibHVldG9vdGguaHRtbCI+Qmx1ZXRvb3RoPC9hPjwvbGk+Ci0gICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvZ3BzLmh0bWwiPkdQUzwvYT48L2xpPgotICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL3dpZmkuaHRtbCI+V2ktRmk8L2E+PC9saT4KLSAgICA8L3VsPgotICA8L2xpPgotCi0gIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9kaXNwbGF5X2RyaXZlcnMuaHRtbCI+RGlzcGxheSBEcml2ZXJzPC9hPjwvbGk+Ci0gIDxsaSBjbGFzcz0idG9nZ2xlLWxpc3QiPiAKLSAgICA8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6bm90aGluZygpIj5JbnB1dCBEZXZpY2VzPC9hPjwvZGl2PgotICAgIDx1bD4KLSAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9rZXltYXBzX2tleWJvYXJkX2lucHV0Lmh0bWwiPktleW1hcHMgYW5kIEtleWJvYXJkPC9hPjwvbGk+Ci0gICAgPC91bD4KLSAgPC9saT4KLSAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL2xpZ2h0cy5odG1sIj5MaWdodHM8L2E+PC9saT4KLSAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+Ci0gICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+TXVsdGltZWRpYTwvYT48L2Rpdj4KLSAgICA8dWw+Ci0gICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvYXVkaW8uaHRtbCI+QXVkaW88L2E+PC9saT4KLSAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9jYW1lcmEuaHRtbCI+Q2FtZXJhL1ZpZGVvPC9hPjwvbGk+Ci0gICAgPC91bD4KLSAgPC9saT4KLSAgCi0gIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9wb3dlcl9tYW5hZ2VtZW50Lmh0bWwiPlBvd2VyIE1hbmFnZW1lbnQ8L2E+PC9saT4KLSAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL3NlbnNvcnMuaHRtbCI+U2Vuc29yczwvYT48L2xpPgotICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4KLSAgICA8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6bm90aGluZygpIj5UZWxlcGhvbnk8L2E+PC9kaXY+Ci0gICAgPHVsPgotICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/Pmd1aWRlL3RlbGVwaG9ueS5odG1sIj5SYWRpbyBJbnRlcmZhY2UgTGF5ZXI8L2E+PC9saT4KLSAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9zdGsuaHRtbCI+U0lNIFRvb2xraXQgQXBwbGljYXRpb24gKFNUSyk8L2E+PC9saT4KLSAgICA8L3VsPgotICA8L2xpPgotCi08L3VsPgotPC9saT4KLQotPGxpPiA8aDI+RGFsdmlrIFZpcnR1YWwgTWFjaGluZTwvaDI+Ci0gIDx1bD4KLSAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+Z3VpZGUvZGFsdmlrLmh0bWwiPlBvcnRpbmcgRGFsdmlrPC9hPjwvbGk+Ci0gIDwvdWw+Ci08L2xpPgotPGxpPiA8aDI+VGVzdGluZyBhbmQgRGVidWdnaW5nPC9oMj4KLSAgPHVsPgotICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9pbnN0cnVtZW50YXRpb25fdGVzdGluZy5odG1sIj5JbnN0cnVtZW50YXRpb24gVGVzdGluZzwvYT48L2xpPgotICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9kZWJ1Z2dpbmdfZ2RiLmh0bWwiPkRlYnVnZ2luZyB3aXRoIEdEQjwvYT48L2xpPgotICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS9kZWJ1Z2dpbmdfbmF0aXZlLmh0bWwiPkRlYnVnZ2luZyBOYXRpdmUgQ29kZTwvYT48L2xpPgotICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5ndWlkZS90Y3BkdW1wLmh0bWwiPkRlYnVnZ2luZyB3aXRoIHRjcGR1bXA8L2E+PC9saT4KLSAgPC91bD4KLTwvbGk+Ci0KLQotCi08L3VsPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci08IS0tCi0gICAgYnVpbGRUb2dnbGVMaXN0cygpOwotLy8tLT4KLTwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2JsdWV0b290aC0wLmpwZyBiL3Bkay9kb2NzL2ltYWdlcy9ibHVldG9vdGgtMC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2ZWViZgotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ltYWdlcy9ibHVldG9vdGgtMC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2NvZGUtbGluZXMucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2NvZGUtbGluZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmI3N2IKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvY29kZS1saW5lcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2N0cy0wLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9jdHMtMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhMzhjNQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ltYWdlcy9jdHMtMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2N0cy1wcm9jZXNzLTAuZ2lmIGIvcGRrL2RvY3MvaW1hZ2VzL2N0cy1wcm9jZXNzLTAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NWRhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvY3RzLXByb2Nlc3MtMC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2N0cy1wcm9jZXNzLTEucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2N0cy1wcm9jZXNzLTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTY0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvY3RzLXByb2Nlc3MtMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2Rpc2N1c3MtMC5wbmcgYi9wZGsvZG9jcy9pbWFnZXMvZGlzY3Vzcy0wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2Rpc2N1c3MtMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2RvY3VtZW50YXRpb24tMC5wbmcgYi9wZGsvZG9jcy9pbWFnZXMvZG9jdW1lbnRhdGlvbi0wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvaW1hZ2VzL2RvY3VtZW50YXRpb24tMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2Rvd25sb2FkLTAucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2Rvd25sb2FkLTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyY2VhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvZG93bmxvYWQtMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2dpdC1yZXBvLTAucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2dpdC1yZXBvLTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyY2VhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvZ2l0LXJlcG8tMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2dpdC1yZXBvLTEucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2dpdC1yZXBvLTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzhkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvZ2l0LXJlcG8tMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2hvbWUtYnVnZHJvaWQucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2hvbWUtYnVnZHJvaWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGZhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvaG9tZS1idWdkcm9pZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2hvdy1pdC13b3Jrcy0wLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9ob3ctaXQtd29ya3MtMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxYzlkYwotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ltYWdlcy9ob3ctaXQtd29ya3MtMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2hvdy1pdC13b3Jrcy0xLnBuZyBiL3Bkay9kb2NzL2ltYWdlcy9ob3ctaXQtd29ya3MtMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2Njc0YQotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL2ltYWdlcy9ob3ctaXQtd29ya3MtMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL2xpbC13cmVuY2gucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL2xpbC13cmVuY2gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjQ5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvbGlsLXdyZW5jaC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL3N1Ym1pdC1wYXRjaGVzLTAucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL3N1Ym1pdC1wYXRjaGVzLTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhN2VhYWQKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvc3VibWl0LXBhdGNoZXMtMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL3N1Ym1pdC1wYXRjaGVzLTEucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL3N1Ym1pdC1wYXRjaGVzLTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2EzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvc3VibWl0LXBhdGNoZXMtMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW1hZ2VzL3dvcmtmbG93LTAucG5nIGIvcGRrL2RvY3MvaW1hZ2VzL3dvcmtmbG93LTAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NDU2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9pbWFnZXMvd29ya2Zsb3ctMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvaW5kZXguamQgYi9wZGsvZG9jcy9pbmRleC5qZAppbmRleCA0MTc1ZGI3Li4yMTc4NzdkIDEwMDY0NAotLS0gYS9wZGsvZG9jcy9pbmRleC5qZAorKysgYi9wZGsvZG9jcy9pbmRleC5qZApAQCAtMSwxMzMgKzEsNjQgQEAKK3BhZ2UudGl0bGU9V2VsY29tZSB0byBBbmRyb2lkCiBob21lPXRydWUKIEBqZDpib2R5Cis8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6IDQ1JTsgZm9udC1zaXplOiAxLjNlbTsiPgorICA8cD5IZXJlIHlvdSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gYW5kIHNvdXJjZSBjb2RlIHlvdSBuZWVkIHRvIGJ1aWxkIGFuCisgIEFuZHJvaWQtY29tcGF0aWJsZSBkZXZpY2UuPC9wPgorICA8cD5BbmRyb2lkIGlzIGFuIG9wZW4tc291cmNlIHNvZnR3YXJlIHN0YWNrIGZvciBtb2JpbGUgZGV2aWNlcywgYW5kIGEKKyAgY29ycmVzcG9uZGluZyBvcGVuLXNvdXJjZSBwcm9qZWN0IGxlZCBieSBHb29nbGUuIFdlIGNyZWF0ZWQgQW5kcm9pZCBpbgorICByZXNwb25zZSB0byBvdXIgb3duIGV4cGVyaWVuY2VzIGxhdW5jaGluZyBtb2JpbGUgYXBwcy4gV2Ugd2FudGVkIHRvIG1ha2UKKyAgc3VyZSB0aGF0IHRoZXJlIHdhcyBubyBjZW50cmFsIHBvaW50IG9mIGZhaWx1cmUsIHNvIHRoYXQgbm8gaW5kdXN0cnkgcGxheWVyCisgIGNhbiByZXN0cmljdCBvciBjb250cm9sIHRoZSBpbm5vdmF0aW9ucyBvZiBhbnkgb3RoZXIuICBUaGF0J3Mgd2h5IHdlCisgIGNyZWF0ZWQgQW5kcm9pZCwgYW5kIG1hZGUgaXRzIHNvdXJjZSBjb2RlIG9wZW4uPC9wPgorICA8cD48YSBocmVmPSJ7QGRvY1Jvb3R9YWJvdXQvaW5kZXguaHRtbCI+TGVhcm4gbW9yZSAmcmFxdW87PC9hPjwvcD4KKzwvZGl2PgorPGRpdiBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyB3aWR0aDogMzUlOyI+Cis8aDMgc3R5bGU9InBhZGRpbmctdG9wOiAwcHg7Ij5OZXdzPC9oMz4KKzxwPjxiPlNpdGUgcmVkZXNpZ248L2I+PGJyLz4KK1lvdSdyZSBsb29raW5nIGF0IHRoZSBuZXcgYW5kIGltcHJvdmVkIHNvdXJjZS5hbmRyb2lkLmNvbSEgV2UndmUgdXBkYXRlZAordGhlIGxheW91dCBhbmQgc2l0ZSBkZXNpZ24sIGFuZCBhbHNvIGFkZGVkIG5ldyBpbmZvcm1hdGlvbi4gV2UgaG9wZSB5b3UgZmluZAordGhlc2UgaW1wcm92ZW1lbnRzIGhlbHBmdWwuPC9wPgorPHA+PGI+SW50cm9kdWNpbmcgdGhlIENvbXBhdGliaWxpdHkgUHJvZ3JhbTwvYj48YnIvPgorV2UncmUgcGxlYXNlZCB0byBpbnRyb2R1Y2UgdGhlIEFuZHJvaWQgQ29tcGF0aWJpbGl0eSBQcm9ncmFtLiBXZSd2ZSByZWxlYXNlZAordHdvIHRvb2xzIC0tIHRoZSBDb21wYXRpYmlsaXR5IERlZmluaXRpb24gRG9jdW1lbnQgYW5kIHRoZSBDb21wYXRpYmlsaXR5IFRlc3QKK1N1aXRlIC0tIHRvIGhlbHAgZGV2aWNlIG1hbnVmYWN0dXJlcnMgYnVpbGQgY29tcGF0aWJsZSBkZXZpY2VzLiBGdWxsIGRldGFpbHMKK29mIHRoZSBDb21wYXRpYmlsaXR5IFByb2dyYW0gd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IHF1YXJ0ZXIgb2YgMjAxMC48L3A+Cis8L2Rpdj4KKzxpbWcgc3R5bGU9ImZsb2F0OiByaWdodDsgcGFkZGluZy1yaWdodDogMS41ZW07IiBzcmM9IntAZG9jUm9vdH1pbWFnZXMvaG9tZS1idWdkcm9pZC5wbmciIGFsdD0iQW5kcm9pZCBNYXNjb3QiLz4KIAorPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ii8+CiAKLQk8ZGl2IGlkPSJtYWluQm9keUZpeGVkIiBhbGlnbj0idG9wIj4KLSAgICAgICAgICAgICAgPGRpdiBpZD0ibWFpbkJvZHlMZWZ0Ij4JCQkKLSAgICAgICAgICAgICAgICAgICA8aDI+QW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0PC9oMj4KLSAgICAgICAgICAgICAgICAgICA8IS0tIHRvdGFsIG1heCB3aWR0aCBpcyA1MjBweCAtLT4KLSAgICAgICAgICAgICAgICAgICA8cD4gQW5kcm9pZCBpcyB0aGUgZmlyc3QgZnJlZSwgb3BlbiBzb3VyY2UsIGFuZCBmdWxseSBjdXN0b21pemFibGUgbW9iaWxlIHBsYXRmb3JtLiAKLSAgICAgICAgICAgICAgICAgICAgICAgQW5kcm9pZCBvZmZlcnMgYSBmdWxsIHN0YWNrOiBhbiBvcGVyYXRpbmcgc3lzdGVtLCBtaWRkbGV3YXJlIGFuZCBrZXkgbW9iaWxlIGFwcGxpY2F0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgSXQgYWxzbyBjb250YWlucyBhIHJpY2ggc2V0IG9mIEFQSXMgdGhhdCBhbGxvd3MgdGhpcmQtcGFydHkgZGV2ZWxvcGVycyB0byBkZXZlbG9wIGdyZWF0Ci0gICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4gPC9wPgotICAgICAgICAgICAgICA8L2Rpdj48IS0tIGVuZCBtYWluQm9keUxlZnQgLS0+Cis8dGFibGUgYm9yZGVyPSIwIiBzdHlsZT0iYm9yZGVyOiAwcHg7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7Ij48dHI+PHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJib3JkZXI6IDBweDsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsiPgorPGRpdiBjbGFzcz0icmVib3ggbGlsIiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiAzMCU7IG1hcmdpbjogMWVtOyI+IAorICA8aDIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogIzk1QzBEMDsgYm9yZGVyOiAwcHg7Ij5HZXQgSW52b2x2ZWQ8L2gyPiAKKyAgPGRpdiBjbGFzcz0icCI+IAorICAgIDxwPjxpbWcgc3JjPSJpbWFnZXMvbGlsLXdyZW5jaC5wbmciIGFsdD0iIiBzdHlsZT0ibWFyZ2luOiAxZW07Ii8+CisgICAgSWYgeW91J3JlIGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nIHRvIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlIG9yIGhlbHBpbmcKKyAgICBvdXQgd2l0aCB0aGUgcHJvamVjdCBpbiBzb21lIG90aGVyIHdheSwgY2xpY2sgaGVyZS48L3A+IAorICAgIDxwPjxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvaW5kZXguaHRtbCI+TW9yZSAmcmFxdW87PC9hPjwvcD4gCisgIDwvZGl2PiAKKzwvZGl2PiAKIAotICAgICAgICAgICAgICA8ZGl2IGlkPSJtYWluQm9keVJpZ2h0Ij4KLSAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgaWQ9InJpZ2h0Q29sdW1uIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJpbWFnZUNlbGwiPjxhIGhyZWY9IntAZG9jUm9vdH1zZGsvaW5kZXguaHRtbCI+PGltZyBzcmM9IntAZG9jUm9vdH1hc3NldHMvaW1hZ2VzL2ljb25fZG93bmxvYWQuanBnIiBzdHlsZT0icGFkZGluZzowIiAvPjwvYT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJncmVlbiI+RG93bmxvYWQ8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoZSBBbmRyb2lkIFNESyBoYXMgdGhlIHRvb2xzLCBzYW1wbGUgY29kZSwgYW5kIGRvY3MgeW91IG5lZWQgdG8gY3JlYXRlIGdyZWF0IGFwcHMuICA8L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbSI+TGVhcm4gbW9yZSAmcmFxdW87PC9hPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48ZGl2IGNsYXNzPSJzZXBlcmF0b3IiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImltYWdlQ2VsbCI+PGEgaHJlZj0iaHR0cDovL3d3dy5hbmRyb2lkLmNvbS9tYXJrZXQuaHRtbCI+PGltZyBzcmM9IntAZG9jUm9vdH1hc3NldHMvaW1hZ2VzL2ljb25fbWFya2V0LmpwZyIgc3R5bGU9InBhZGRpbmc6MCIgLz48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZ3JlZW4iPlB1Ymxpc2g8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFuZHJvaWQgTWFya2V0IGlzIGFuIG9wZW4gc2VydmljZSB0aGF0IGxldHMgeW91IGRpc3RyaWJ1dGUgeW91ciBhcHBzIHRvIGhhbmRzZXRzLjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LmFuZHJvaWQuY29tL21hcmtldC5odG1sIj5MZWFybiBtb3JlICZyYXF1bzs8L2E+PC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPjxkaXYgY2xhc3M9InNlcGVyYXRvciI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iaW1hZ2VDZWxsIj48YSBocmVmPSJodHRwOi8vc291cmNlLmFuZHJvaWQuY29tIj48aW1nIHNyYz0ie0Bkb2NSb290fWFzc2V0cy9pbWFnZXMvaWNvbl9jb250cmlidXRlLmpwZyIgc3R5bGU9InBhZGRpbmc6MCIgLz48L2E+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZ3JlZW4iPkNvbnRyaWJ1dGU8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBlbnRpcmUgcGxhdGZvcm0gc291cmNlLjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48YSBocmVmPSJodHRwOi8vc291cmNlLmFuZHJvaWQuY29tIj5MZWFybiBtb3JlICZyYXF1bzs8L2E+PC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPjxkaXYgY2xhc3M9InNlcGVyYXRvciI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iaW1hZ2VDZWxsIj48YSBocmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3VzZXIvYW5kcm9pZGRldmVsb3BlcnMiPjxpbWcgc3JjPSJ7QGRvY1Jvb3R9YXNzZXRzL2ltYWdlcy92aWRlby1kcm9pZC5wbmciIHN0eWxlPSJwYWRkaW5nOjAiIC8+PC9hPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImdyZWVuIj5XYXRjaDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdCB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE0MCI+PHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L0dBUk1lN0ttX2drJmhsPWVuJmZzPTEiPjwvcGFyYW0+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiPjwvcGFyYW0+PHBhcmFtIG5hbWU9ImFsbG93c2NyaXB0YWNjZXNzIiB2YWx1ZT0iYWx3YXlzIj48L3BhcmFtPjxlbWJlZCBzcmM9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9HQVJNZTdLbV9nayZobD1lbiZmcz0xIiB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgYWxsb3dzY3JpcHRhY2Nlc3M9ImFsd2F5cyIgYWxsb3dmdWxsc2NyZWVuPSJ0cnVlIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE0MCI+PC9lbWJlZD48L29iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDoxZW0iPjxhIGhyZWY9IntAZG9jUm9vdH12aWRlb3MvaW5kZXguaHRtbCI+TW9yZSBBbmRyb2lkIHZpZGVvcyAmcmFxdW87PC9hPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Cis8ZGl2IGNsYXNzPSJyZWJveCBsaWwiIHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6IDMwJTsgbWFyZ2luOiAxZW07Ij4gCisgIDxoMiBzdHlsZT0iY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjOTVDMEQwOyBib3JkZXI6IDBweDsiPkJ1aWxkIGEgRGV2aWNlPC9oMj4gCisgIDxkaXYgY2xhc3M9InAiPiAKKyAgICA8cD48aW1nIHNyYz0iaW1hZ2VzL2xpbC13cmVuY2gucG5nIiBhbHQ9IiIgc3R5bGU9Im1hcmdpbjogMWVtOyIvPgorICAgIElmIHlvdSdyZSBhbiBlbmdpbmVlciBidWlsZGluZyBhIGRldmljZSBpbnRlbmRlZCB0byBydW4gdGhlIEFuZHJvaWQKKyAgICBzb2Z0d2FyZSBzdGFjaywgY2xpY2sgaGVyZSB0byBmaW5kIHBvcnRpbmcgaW5mb3JtYXRpb24gYW5kIHRpcHMuPC9wPiAKKyAgICA8cD48YSBocmVmPSJ7QGRvY1Jvb3R9cG9ydGluZy9pbmRleC5odG1sIj5Nb3JlICZyYXF1bzs8L2E+PC9wPiAKKyAgPC9kaXY+IAorPC9kaXY+IAogCi0gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0JPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWJveCBsaWwiIHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6IDMwJTsgbWFyZ2luOiAxZW07Ij4gCisgIDxoMiBzdHlsZT0iY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjOTVDMEQwOyBib3JkZXI6IDBweDsiPkNvbXBhdGliaWxpdHk8L2gyPiAKKyAgPGRpdiBjbGFzcz0icCI+IAorICAgIDxwPjxpbWcgc3JjPSJpbWFnZXMvbGlsLXdyZW5jaC5wbmciIGFsdD0iIiBzdHlsZT0ibWFyZ2luOiAxZW07Ii8+CisgICAgSWYgeW91J3JlIGFuIE9FTSBvciBvdGhlciBvcmdhbml6YXRpb24gYnVpbGRpbmcgYW4gQW5kcm9pZCBkZXZpY2UsIGNsaWNrCisgICAgaGVyZSB0byBmaW5kIG91dCBob3cgdG8gZW5zdXJlIHRoYXQgeW91ciBkZXZpY2UgaXMgZnVsbHkgY29tcGF0aWJsZSwgYW5kCisgICAgaG93IHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBiZW5lZml0cyBvZiBjb21wYXRpYmlsaXR5LjwvcD4gCisgICAgPHA+PGEgaHJlZj0ie0Bkb2NSb290fWNvbXBhdGliaWxpdHkvaW5kZXguaHRtbCI+TW9yZSAmcmFxdW87PC9hPjwvcD4gCisgIDwvZGl2PiAKKzwvZGl2PiAKKzwvdGQ+PC90cj48L3RhYmxlPgogCi08IS0tW2lmIGx0ZSBJRSA2XT4KLSAgPHN0eWxlPgotICAgICNhcnJvdy1sZWZ0IHsKLSAgICAgIG1hcmdpbjowIDAgMCA1cHg7Ci0gICAgfQotICAgICNhcnJvdy1yaWdodCB7Ci0gICAgICBtYXJnaW4tbGVmdDowOwotICAgIH0KLSAgICAuYXBwLWxpc3QtY29udGFpbmVyIHsKLSAgICAgIG1hcmdpbjogMzdweCAwIDAgMjNweDsKLSAgICB9Ci0gICAgZGl2I2xpc3QtY2xpcCB7IAotICAgICAgd2lkdGg6NDY4cHg7Ci0gICAgfQotICA8L3N0eWxlPgotPCFbZW5kaWZdLS0+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQotLy8gKiAtLSBjYXJvdXNlbCBkaWN0aW9uYXJ5IC0tICogLy8KLSAgLyogbGF5b3V0OiAgaW1nTGVmdCwgaW1nUmlnaHQsIGltZ1RvcAotICAgICBpY29uOiAgICBpbWFnZSBmb3IgY2Fyb3VzZWwgZW50cnkuIGNyb3BwZWQgKGhlaWdodDo3MHB4LCB3aWR0aDo5MHB4KQotICAgICBuYW1lOiAgICBzdHJpbmcgZm9yIGNhcm91c2VsIGVudHJ5Ci0gICAgIGltZzogICAgIGltYWdlIGZvciBidWxsZXRpbiBwb3N0LiBjcm9wcGVkIChoZWlnaHQ6IDE3MCwgd2lkdGg6MjMwcHgpCi0gICAgIHRpdGxlOiAgIGhlYWRlciBmb3IgYnVsbGV0aW4gKG9wdGlvbmFsLCBpbnNlcnQgIiIgdmFsdWUgdG8gc2tpcAotICAgICBkZXNjOiAgICB0aGUgYnVsbGV0aW4gcG9zdC4gbXVzdCBpbmNsdWRlIGh0bWwgdGFncy4gCi0gICovCi0KLSAgdmFyIGRyb2lkTGlzdCA9IHsKLSAgICAnc2RrJzogewotICAgICAgJ2xheW91dCc6ImltZ0xlZnQiLAotICAgICAgJ2ljb24nOiJzZGstc21hbGwucG5nIiwKLSAgICAgICduYW1lJzoiU0RLIDEuNSByMyIsCi0gICAgICAnaW1nJzoic2RrLWxhcmdlLnBuZyIsCi0gICAgICAndGl0bGUnOiJBbmRyb2lkIDEuNSBTREsiLAotICAgICAgJ2Rlc2MnOiAiPHA+QW5kcm9pZCAxLjUgU0RLIGlzIG5vdyBhdmFpbGFibGUuIEl0IGluY2x1ZGVzIG5ldyBBUElzIGZvciBBbmRyb2lkIDEuNSwgdXBkYXRlZCBkZXZlbG9wZXIgdG9vbHMsIG11bHRpcGxlIHBsYXRmb3JtIHZlcnNpb25zLCBhbmQgYSBHb29nbGUgQVBJcyBhZGQtb24uPC9wPjxwPjxhIGhyZWY9J3tAZG9jUm9vdH1zZGsvMS41X3IzL2luZGV4Lmh0bWwnPkRvd25sb2FkIEFuZHJvaWQgMS41IFNESyAmcmFxdW87PC9hPjwvcD4iCi0gICAgfSwKLSAgICAKLSAgICAnaW8nOiB7Ci0gICAgICAnbGF5b3V0JzoiaW1nTGVmdCIsCi0gICAgICAnaWNvbic6ImlvLXNtYWxsLnBuZyIsCi0gICAgICAnbmFtZSc6Ikdvb2dsZSBJL08iLAotICAgICAgJ2ltZyc6ImlvLWxhcmdlLnBuZyIsCi0gICAgICAndGl0bGUnOiJHb29nbGUgSS9PIERldmVsb3BlciBDb25mZXJlbmNlIiwKLSAgICAgICdkZXNjJzogIjxwPlRoZSBHb29nbGUgSS9PIGRldmVsb3BlciBjb25mZXJlbmNlIHRvb2sgcGxhY2UgTWF5IDI3LTI4IGluIFNhbiBGcmFuY2lzY28uIElmIHlvdSBtaXNzZWQgdGhlIGNvbmZlcmVuY2UsIHlvdSBjYW4gZXhwZXJpZW5jZSB0aGUgQW5kcm9pZCBzZXNzaW9ucyBieSB2aWV3aW5nIFlvdVR1YmUgdmlkZW9zLjwvcD48cD48YSBocmVmPSd7QGRvY1Jvb3R9dmlkZW9zL2luZGV4Lmh0bWwnPlNlZSB0aGUgc2Vzc2lvbnMgZnJvbSBHb29nbGUgSS9PICZyYXF1bzs8L2E+PC9wPiIKLSAgICB9LAotCi0gICAgJ21hcHNrZXknOiB7Ci0gICAgICAnbGF5b3V0JzoiaW1nTGVmdCIsCi0gICAgICAnaWNvbic6Im1hcHMtc21hbGwucG5nIiwKLSAgICAgICduYW1lJzoiTWFwcyBBUEkgS2V5IiwKLSAgICAgICdpbWcnOiJtYXBzLWxhcmdlLnBuZyIsCi0gICAgICAndGl0bGUnOiJNYXBzIEFQSSBLZXkiLAotICAgICAgJ2Rlc2MnOiI8cD5JZiB5b3UncmUgd3JpdGluZyBhbiBBbmRyb2lkIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBHb29nbGUgTWFwcyAod2l0aCBNYXBWaWV3KSwgeW91IG11c3QgcmVnaXN0ZXIgeW91ciBhcHBsaWNhdGlvbiB0byBvYnRhaW4gYSBNYXBzIEFQSSBLZXkuIFdpdGhvdXQgdGhlIGtleSwgeW91ciBtYXBzIGFwcGxpY2F0aW9uIHdpbGwgbm90IHdvcmsgb24gQW5kcm9pZCBkZXZpY2VzLiBPYnRhaW5pbmcgYSBrZXkgcmVxdWlyZXMganVzdCBhIGNvdXBsZSBvZiBzdGVwcy48L3A+PHA+PGEgaHJlZj0naHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hbmRyb2lkL2FkZC1vbnMvZ29vZ2xlLWFwaXMvbWFwcy1vdmVydmlldy5odG1sJz5MZWFybiBtb3JlICZyYXF1bzs8L2E+PC9wPiIKLSAgICB9LAotCi0gICAgJ2RldnBob25lJzogewotICAgICAgJ2xheW91dCc6ImltZ0xlZnQiLAotICAgICAgJ2ljb24nOiJkZXZwaG9uZS1zbWFsbC5wbmciLAotICAgICAgJ25hbWUnOiJEZXYgUGhvbmUgMSIsCi0gICAgICAnaW1nJzoiZGV2cGhvbmUtbGFyZ2UucG5nIiwKLSAgICAgICd0aXRsZSc6IkFuZHJvaWQgRGV2IFBob25lIDEiLAotICAgICAgJ2Rlc2MnOiAiPHA+UnVuIGFuZCBkZWJ1ZyB5b3VyIEFuZHJvaWQgYXBwbGljYXRpb25zIGRpcmVjdGx5IG9uIHRoaXMgZGV2aWNlLiBNb2RpZnkgYW5kIHJlYnVpbGQgdGhlIEFuZHJvaWQgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGZsYXNoIGl0IG9udG8gdGhlIHBob25lLiBUaGUgQW5kcm9pZCBEZXYgUGhvbmUgMSBpcyBjYXJyaWVyIGluZGVwZW5kZW50LCBhbmQgYXZhaWxhYmxlIGZvciBwdXJjaGFzZSBieSBhbnkgZGV2ZWxvcGVyIHJlZ2lzdGVyZWQgd2l0aCA8YSBocmVmPSdodHRwOi8vbWFya2V0LmFuZHJvaWQuY29tL3B1Ymxpc2gnPkFuZHJvaWQgTWFya2V0PC9hPi48L3A+PHA+PGEgaHJlZj0nL2d1aWRlL2RldmVsb3BpbmcvZGV2aWNlLmh0bWwjZGV2LXBob25lLTEnPkxlYXJuIG1vcmUgYWJvdXQgdGhlIEFuZHJvaWQgRGV2IFBob25lIDEgJnJhcXVvOzwvYT48L3A+IgotICAgIH0KLQotICB9Ci08L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IntAZG9jUm9vdH1hc3NldHMvY2Fyb3VzZWwuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICBpbml0Q2Fyb3VzZWwoInNkayIpOwotPC9zY3JpcHQ+Cis8ZGl2IHN0eWxlPSJjbGVhcjogYm90aDsiLz4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2xpY2Vuc2VzL2luZGV4LmpkIGIvcGRrL2RvY3MvbGljZW5zZXMvaW5kZXguamQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZjUxZGMuLjAwMDAwMDAKLS0tIGEvcGRrL2RvY3MvbGljZW5zZXMvaW5kZXguamQKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1ob21lPXRydWUKLWRvYy50eXBlPWxpY2Vuc2VzCi1AamQ6Ym9keQotCi08ZGl2IGlkPSJtYWluQm9keUZpeGVkIj4KLQotPHA+Ci0gICBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IHVzZXMgYSBmZXcgb3BlbiBzb3VyY2UgaW5pdGlhdGl2ZSBhcHByb3ZlZCBvcGVuIHNvdXJjZSBsaWNlbnNlcyB0byBlbmFibGUgYXZhaWxhYmlsaXR5Ci0gICBvZiBzb3VyY2UgY29kZSBhbmQgdG8gYWNjZXB0IGNvbnRyaWJ1dGlvbnMgZnJvbSBpbmRpdmlkdWFscyBhbmQgY29ycG9yYXRpb25zLgotPC9wPgotCi08cD4KLSAgIDxiPkFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBsaWNlbnNlPC9iPgotPC9wPgotCi08cD4KLSAgIFRoZSBwcmVmZXJyZWQgbGljZW5zZSBmb3IgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBpcyBBcGFjaGUgMi4wLiBBcGFjaGUgMi4wIGlzIGEgY29tbWVyY2lhbCBhbmQgb3BlbiBzb3VyY2UKLSAgIGZyaWVuZGx5IG9wZW4gc291cmNlIGxpY2Vuc2UuIFRoZSBtYWpvcml0eSBvZiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlLiBXaGlsZQotICAgdGhlIHByb2plY3Qgd2lsbCBzdHJpdmUgdG8gYWRoZXJlIHRvIHRoZSBwcmVmZXJyZWQgbGljZW5zZSwgdGhlcmUgbWF5IGJlIGV4Y2VwdGlvbnMgd2hpY2ggd2lsbCBiZSBoYW5kbGVkIG9uIGEgY2FzZS1ieS1jYXNlCi0gICBiYXNpcy4gRm9yIGV4YW1wbGUsIHRoZSBMaW51eCBrZXJuZWwgcGF0Y2hlcyBhcmUgdW5kZXIgdGhlIEdQTHYyIGxpY2Vuc2Ugd2l0aCBzeXN0ZW0gZXhjZXB0aW9ucywgd2hpY2ggY2FuIGJlIGZvdW5kIG9uIGtlcm5lbC5vcmcKLTwvcD4KLQotPHA+Ci0gICA8Yj5Db250cmlidXRvciBMaWNlbnNlIEdyYW50czwvYj4KLTwvcD4KLQotPHA+Ci0gICBBbGwgaW5kaXZpZHVhbCBjb250cmlidXRvcnMgb2YgaWRlYXMsIGNvZGUsIG9yIGRvY3VtZW50YXRpb24gdG8gdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCB3aWxsIGJlIHJlcXVpcmVkIHRvCi0gICBjb21wbGV0ZSwgc2lnbiwgYW5kIHN1Ym1pdCBhbiBJbmRpdmlkdWFsIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQuIFRoZSBncmFudCBjYW4gYmUgZXhlY3V0ZWQgb25saW5lIHRocm91Z2ggdGhlIGNvZGUKLSAgIHJldmlldyB0b29sLiBUaGUgYWdyZWVtZW50IGNsZWFybHkgZGVmaW5lcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggaW50ZWxsZWN0dWFsIHByb3BlcnR5IGhhcyBiZWVuIGNvbnRyaWJ1dGVkIHRvIHRoZQotICAgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0LiAgVGhpcyBsaWNlbnNlIGlzIGZvciB5b3VyIHByb3RlY3Rpb24gYXMgYSBjb250cmlidXRvciBhcyB3ZWxsIGFzIHRoZSBwcm90ZWN0aW9uIG9mIHRoZQotICAgcHJvamVjdDsgaXQgZG9lcyBub3QgY2hhbmdlIHlvdXIgcmlnaHRzIHRvIHVzZSB5b3VyIG93biBjb250cmlidXRpb25zIGZvciBhbnkgb3RoZXIgcHVycG9zZS4KLTwvcD4KLQotPHA+Ci0gICBGb3IgYSBjb3Jwb3JhdGlvbiB0aGF0IGhhcyBhc3NpZ25lZCBlbXBsb3llZXMgdG8gd29yayBvbiB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0LCBhIENvcnBvcmF0ZSBDb250cmlidXRvciBMaWNlbnNlCi0gICBHcmFudCBpcyBhdmFpbGFibGUuIFRoaXMgdmVyc2lvbiBvZiB0aGUgR3JhbnQgYWxsb3dzIGEgY29ycG9yYXRpb24gdG8gYXV0aG9yaXplIGNvbnRyaWJ1dGlvbnMgc3VibWl0dGVkIGJ5IGl0cyBkZXNpZ25hdGVkCi0gICBlbXBsb3llZXMgYW5kIHRvIGdyYW50IGNvcHlyaWdodCBhbmQgcGF0ZW50IGxpY2Vuc2VzLiBOb3RlIHRoYXQgYSBDb3Jwb3JhdGUgQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudCBkb2VzIG5vdCByZW1vdmUgdGhlCi0gICBuZWVkIGZvciBhbnkgZGV2ZWxvcGVyIHRvIHNpZ24gdGhlaXIgb3duIEluZGl2aWR1YWwgQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudCBhcyBhbiBpbmRpdmlkdWFsLCB0byBjb3ZlciBhbnkgb2YgdGhlaXIKLSAgIGNvbnRyaWJ1dGlvbnMgd2hpY2ggYXJlIG5vdCBvd25lZCBieSB0aGUgY29ycG9yYXRpb24gc2lnbmluZyB0aGUgQ29ycG9yYXRlIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQuCi08L3A+Ci0KLTxwPgotICAgUGxlYXNlIG5vdGUgdGhhdCB3ZSBiYXNlZCBvdXIgZ3JhbnRzIG9uIHRoZSBvbmVzIHRoYXQgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHVzZXMsIHdoaWNoIGNhbiBiZSBmb3VuZCBvbiBpdHMgc2l0ZS4KLTwvcD4KLQotPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9saWNlbnNlcy9saWNlbnNlc190b2MuY3MgYi9wZGsvZG9jcy9saWNlbnNlcy9saWNlbnNlc190b2MuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZmExMDcuLjAwMDAwMDAKLS0tIGEvcGRrL2RvY3MvbGljZW5zZXMvbGljZW5zZXNfdG9jLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLTwhLS0KLWZ1bmN0aW9uIG5vdGhpbmcoKSB7fQotLS0+Ci08L3NjcmlwdD4KLQotPHVsPgotICA8bGk+IDxoMj4gUmVmZXJlbmNlZCBMaWNlbnNlcyA8L2gyPgotICA8dWw+Ci0gICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIDIuMCBsaWNlbnNlPC9hPjwvbGk+Ci0gICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL0NPUFlJTkciPkdQTCB2MiBsaWNlbnNlPC9hPjwvbGk+Ci0gIDwvdWw+Ci0gIDwvbGk+Ci0KLTwvdWw+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0KLSAgICBidWlsZFRvZ2dsZUxpc3RzKCk7Ci0vLy0tPgotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9hdWRpby5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvYXVkaW8uamQKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvYXVkaW8uamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvYXVkaW8uamQKaW5kZXggNjZjMDVmNy4uZTgyNzg4ZiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvYXVkaW8uamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9hdWRpby5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9QXVkaW8KIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYmx1ZXRvb3RoLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGguamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvYmx1ZXRvb3RoLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2JsdWV0b290aC5qZAppbmRleCBiY2Y4OGRiLi5jZWI4NjgzIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9ibHVldG9vdGguamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGguamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUJsdWV0b290aAogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CkBAIC0xNzAsNyArMTcwLDcgQEAKIAogPHA+PHN0cm9uZz5EZXZlbG9wbWVudCBOb3Rlczwvc3Ryb25nPjwvcD4KIDx1bD4KLSAgPGxpPjxzdHJvbmc+SElEIFN1cHBvcnQ8YnIgLz4KKyAgPGxpPjxzdHJvbmc+SElEIFN1cHBvcnQgPGJyIC8+CiAgIDwvc3Ryb25nPkN1cGNha2UgZmVhdHVyZXMgc29tZSBlYXJseSB3b3JrJiMxNTE7Qmx1ZXogaGFzIGFuIEhJRCBwbHVnaW4sIDxjb2RlPmV4dGVybmFsL2JsdWV6L3V0aWxzL2lucHV0L0FuZHJvaWQubWs8L2NvZGU+LCB3aGljaCBnZXRzIGNvbXBpbGVkLiA8YnIgLz4KICAgICA8YnIgLz4KIFlvdSBjYW4gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGlzIHBsdWdpbiB1c2luZyA8Y29kZT5kYnVzLXNlbmQ8L2NvZGU+PC9zcGFuPiBhbmQgPGNvZGU+ZGJ1cy1tb25pdG9yPC9jb2RlPi4gV2hpbGUgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29ubmVjdCBhbmQgdXNlIGEgSElEIGtleWJvYXJkIGFuZCBtb3VzZSB1c2luZyB0aGUgQmx1ZXogSElEIHBsdWdpbiBBUEkuIE5leHQgc3RlcHMgaW5jbHVkZSBwbHVtYmluZyB0aGUgcGx1Z2luIEFQSSBpbiB0aGUgQW5kcm9pZCBKYXZhIGZyYW1ld29yayBhbmQgb2ZmZXJpbmcgYmV0dGVyIHN1cHBvcnQgZm9yIEhJRCBpbnB1dCBtZXRob2RzIChuZXcga2V5bWFwcyBhbmQgbW91c2Ugc3VwcG9ydCkuPGJyIC8+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9ibHVldG9vdGgvYmx1ZXRvb3RoX3Byb2Nlc3MuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2JsdWV0b290aC9ibHVldG9vdGhfcHJvY2Vzcy5qZApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9ibHVldG9vdGgvYmx1ZXRvb3RoX3Byb2Nlc3MuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvYmx1ZXRvb3RoL2JsdWV0b290aF9wcm9jZXNzLmpkCmluZGV4IGVhNDZmMjMuLjAwZWMwZGEgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2JsdWV0b290aC9ibHVldG9vdGhfcHJvY2Vzcy5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2JsdWV0b290aC9ibHVldG9vdGhfcHJvY2Vzcy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9Qmx1ZXRvb3RoIFByb2Nlc3MgRGlhZ3JhbQogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPHA+VGhlIGRpYWdyYW0gYmVsb3cgb2ZmZXJzIGEgcHJvY2Vzcy1vcmllbnRlZCBhcmNoaXRlY3R1cmFsIG92ZXJ2aWV3IG9mIEFuZHJvaWQncyBCbHVldG9vdGggc3RhY2suIENsaWNrIDxhIGhyZWY9Ii4uL2JsdWV0b290aC5odG1sIj5CbHVldG9vdGg8L2E+IHRvIHJldHVybiB0byB0aGUgQmx1ZXRvb3RoIG92ZXJ2aWV3IHBhZ2UuPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYmx1ZXRvb3RoL2ltYWdlcy9hbmRyb2lkQmx1ZXRvb3RoUHJvY2Vzc0RpYWdyYW0uanBnIGIvcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGgvaW1hZ2VzL2FuZHJvaWRCbHVldG9vdGhQcm9jZXNzRGlhZ3JhbS5qcGcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2JsdWV0b290aC9pbWFnZXMvYW5kcm9pZEJsdWV0b290aFByb2Nlc3NEaWFncmFtLmpwZwpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9ibHVldG9vdGgvaW1hZ2VzL2FuZHJvaWRCbHVldG9vdGhQcm9jZXNzRGlhZ3JhbS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYnJpbmdfdXAuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2JyaW5nX3VwLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2JyaW5nX3VwLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2JyaW5nX3VwLmpkCmluZGV4IGExMWZlMDAuLjFkMDRiODYgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2JyaW5nX3VwLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvYnJpbmdfdXAuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUJyaW5nIFVwCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8cD5PbmNlIHlvdXIgY29kZSBpcyBidWlsdCBhbmQgeW91IGhhdmUgdmVyaWZpZWQgdGhhdCBhbGwgbmVjZXNzYXJ5IGRpcmVjdG9yaWVzIGV4aXN0LCBwb3dlciBvbiBhbmQgdGVzdCB5b3VyIGRldmljZSB3aXRoIGJhc2ljIGJyaW5nIHVwLCBhcyBkZXNjcmliZWQgYmVsb3cuIEJyaW5nIHVwIHRlc3RzIGFyZSB0eXBpY2FsbHkgZGVzaWduZWQgdG8gc3RyZXNzIGNlcnRhaW4gYXNwZWN0cyBvZiB5b3VyIHN5c3RlbSBhbmQgYWxsb3cgeW91IHRvIGNoYXJhY3Rlcml6ZSB0aGUgZGV2aWNlJ3MgYmVoYXZpb3IuIDwvcD4KQEAgLTI2NCw3ICsyNjQsNyBAQAogICAgIDwvdHI+CiAgIDwvdGFibGU+CiAgIDxwPiAgICBQcm9wZXJ0aWVzPC9wPgotICAgIEluaXQgdXBkYXRlcyBzb21lIHN5c3RlbSBwcm9wZXJ0aWVzIHRvIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG88YnIgLz4KKyAgICBJbml0IHVwZGF0ZXMgc29tZSBzeXN0ZW0gcHJvcGVydGllcyB0byBwcm92aWRlIHNvbWUgaW5zaWdodCBpbnRvIDxiciAvPgogICAgIHdoYXQgaXQncyBkb2luZzo8L3A+CiAgIDx0YWJsZT4KICAgICA8dHI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9idWlsZF9jb29rYm9vay5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvYnVpbGRfY29va2Jvb2suamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvYnVpbGRfY29va2Jvb2suamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvYnVpbGRfY29va2Jvb2suamQKaW5kZXggNGJlZDk0Ny4uZDYxOTA4NiAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvYnVpbGRfY29va2Jvb2suamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9idWlsZF9jb29rYm9vay5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9QnVpbGQgQ29va2Jvb2sKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvYnVpbGRfbmV3X2RldmljZS5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvYnVpbGRfbmV3X2RldmljZS5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9idWlsZF9uZXdfZGV2aWNlLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2J1aWxkX25ld19kZXZpY2UuamQKaW5kZXggMjhlN2MyZS4uMjcxYTQzYSAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvYnVpbGRfbmV3X2RldmljZS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2J1aWxkX25ld19kZXZpY2UuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUNvbmZpZ3VyaW5nIGEgTmV3IFByb2R1Y3QKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApAQCAtNjIsNyArNjIsNiBAQAogICAjIFRoZXNlIGRlZmluaXRpb25zIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBpbiBjb25maWcvY29uZmlnLm1ha2UgZm9yICZsdDtib2FyZF9uYW1lJmd0OwogICAjCiAgICMgVEFSR0VUX05PX0JPT1RMT0FERVIgOj0gZmFsc2UKLSAgIyBUQVJHRVRfSEFSRFdBUkVfM0QgOj0gZmFsc2UgCiAgICMKICAgVEFSR0VUX1VTRV9HRU5FUklDX0FVRElPIDo9IHRydWU8L3ByZT48L2xpPiAgCiAgIDxsaT5JZiB5b3Ugd2lzaCB0byBtb2RpZnkgc3lzdGVtIHByb3BlcnRpZXMsIGNyZWF0ZSBhIDxjb2RlPnN5c3RlbS5wcm9wPC9jb2RlPiBmaWxlIGluIHlvdXIgPGNvZGU+Jmx0O2JvYXJkX25hbWUmZ3Q7PC9jb2RlPiBkaXJlY3RvcnkoPGNvZGU+dmVuZG9yLyZsdDtjb21wYW55X25hbWUmZ3Q7LyZsdDtib2FyZF9uYW1lJmd0OzwvY29kZT4pLjxCUj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2J1aWxkX3N5c3RlbS5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvYnVpbGRfc3lzdGVtLmpkCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2J1aWxkX3N5c3RlbS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9idWlsZF9zeXN0ZW0uamQKaW5kZXggZmQwZmY4MC4uNjg2ZmJhMCAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvYnVpbGRfc3lzdGVtLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvYnVpbGRfc3lzdGVtLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1BbmRyb2lkIEJ1aWxkIFN5c3RlbQogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogCkBAIC0yMTEsNyArMjExLDcgQEAKIDx0YWJsZSBib3JkZXI9MT4gCiA8dHI+IAogICAgIDx0ZD4gCi0gICAgICAgIDxjb2RlPmVuZzxjb2RlPiAKKyAgICAgICAgPGNvZGU+ZW5nIDxjb2RlPiAKICAgICA8L3RkPiAKICAgICA8dGQ+IAogICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZsYXZvci4gQSBwbGFpbiA8Y29kZT5tYWtlPC9jb2RlPiBpcyB0aGUKQEAgLTIzMCw3ICsyMzAsNyBAQAogPC90cj4gCiA8dHI+IAogICAgIDx0ZD4gCi0gICAgICAgIDxjb2RlPnVzZXI8Y29kZT4gCisgICAgICAgIDxjb2RlPnVzZXIgPGNvZGU+IAogICAgIDwvdGQ+IAogICAgIDx0ZD4gCiAgICAgICAgIDxjb2RlPm1ha2UgdXNlcjwvY29kZT4KQEAgLTI0OCw3ICsyNDgsNyBAQAogPC90cj4gCiA8dHI+IAogICAgIDx0ZD4gCi0gICAgICAgIDxjb2RlPnVzZXJkZWJ1Zzxjb2RlPiAKKyAgICAgICAgPGNvZGU+dXNlcmRlYnVnIDxjb2RlPiAKICAgICA8L3RkPiAKICAgICA8dGQ+IAogICAgICAgICA8Y29kZT5tYWtlIHVzZXJkZWJ1ZzwvY29kZT4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2NhbWVyYS5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvY2FtZXJhLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2NhbWVyYS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9jYW1lcmEuamQKaW5kZXggOTg2MzZkOC4uMDU3MWZiNSAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvY2FtZXJhLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvY2FtZXJhLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1DYW1lcmEKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvY3VzdG9taXphdGlvbi5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvY3VzdG9taXphdGlvbi5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9jdXN0b21pemF0aW9uLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2N1c3RvbWl6YXRpb24uamQKaW5kZXggOWM1NjY4MS4uN2MxMWE4ZSAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvY3VzdG9taXphdGlvbi5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2N1c3RvbWl6YXRpb24uamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUN1c3RvbWl6YXRpb24KIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvZGFsdmlrLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9kYWx2aWsuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvZGFsdmlrLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2RhbHZpay5qZAppbmRleCA2ZmEzN2RhLi41MGI3NDk5IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9kYWx2aWsuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9kYWx2aWsuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPURhbHZpawogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9kZWJ1Z2dpbmdfZ2RiLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9kZWJ1Z2dpbmdfZ2RiLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2RlYnVnZ2luZ19nZGIuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvZGVidWdnaW5nX2dkYi5qZAppbmRleCBmMmEyZGI1Li4xN2ZmNDcxIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9kZWJ1Z2dpbmdfZ2RiLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZGVidWdnaW5nX2dkYi5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9RGVidWdnaW5nIHdpdGggR0RCCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2RlYnVnZ2luZ19uYXRpdmUuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2RlYnVnZ2luZ19uYXRpdmUuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvZGVidWdnaW5nX25hdGl2ZS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9kZWJ1Z2dpbmdfbmF0aXZlLmpkCmluZGV4IDBmOGIzOTcuLjdiYjY1NWYgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2RlYnVnZ2luZ19uYXRpdmUuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9kZWJ1Z2dpbmdfbmF0aXZlLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1EZWJ1Z2dpbmcgTmF0aXZlIENvZGUKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvZGlzcGxheV9kcml2ZXJzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9kaXNwbGF5X2RyaXZlcnMuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvZGlzcGxheV9kcml2ZXJzLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2Rpc3BsYXlfZHJpdmVycy5qZAppbmRleCAxZWRkZDE1Li41NzBmNmY2IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9kaXNwbGF5X2RyaXZlcnMuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9kaXNwbGF5X2RyaXZlcnMuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPURpc3BsYXkgRHJpdmVycwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9nZXR0aW5nX3NvdXJjZV9jb2RlLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9nZXR0aW5nX3NvdXJjZV9jb2RlLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2dldHRpbmdfc291cmNlX2NvZGUuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvZ2V0dGluZ19zb3VyY2VfY29kZS5qZAppbmRleCBlNzM1Mjc0Li4zMGEyZjlmIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9nZXR0aW5nX3NvdXJjZV9jb2RlLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZ2V0dGluZ19zb3VyY2VfY29kZS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9R2V0dGluZyBTb3VyY2UgQ29kZQogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGEgbmFtZT0idG9jIi8+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9ncHMuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2dwcy5qZApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9ncHMuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvZ3BzLmpkCmluZGV4IDJhY2FkNmQuLjE0NDk0NjAgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2dwcy5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2dwcy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9R1BTCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2dyb3VwX19tZW1vcnkuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2dyb3VwX19tZW1vcnkuamQKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvZ3JvdXBfX21lbW9yeS5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9ncm91cF9fbWVtb3J5LmpkCmluZGV4IDA0MjM1MTUuLjIyNGUwY2IgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2dyb3VwX19tZW1vcnkuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9ncm91cF9fbWVtb3J5LmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1Qcm92aWRpbmcgSGVhcCBNZW1vcnkKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvZ3JvdXBfX25ldHdvcmtpbmcuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2dyb3VwX19uZXR3b3JraW5nLmpkCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2dyb3VwX19uZXR3b3JraW5nLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2dyb3VwX19uZXR3b3JraW5nLmpkCmluZGV4IGUxZTk0MmMuLjY3ZGE4YTYgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2dyb3VwX19uZXR3b3JraW5nLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvZ3JvdXBfX25ldHdvcmtpbmcuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPU5ldHdvcmtpbmcgU3VwcG9ydAogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvYW5kcm9pZEJsdWV0b290aC5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9hbmRyb2lkQmx1ZXRvb3RoLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2FuZHJvaWRCbHVldG9vdGguZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9hbmRyb2lkQmx1ZXRvb3RoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvYW5kcm9pZFBNQXJjaGl0ZWN0dXJlLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2FuZHJvaWRQTUFyY2hpdGVjdHVyZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9hbmRyb2lkUE1BcmNoaXRlY3R1cmUuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9hbmRyb2lkUE1BcmNoaXRlY3R1cmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9hbmRyb2lkX2F1ZGlvX2FyY2hpdGVjdHVyZS5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9hbmRyb2lkX2F1ZGlvX2FyY2hpdGVjdHVyZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9hbmRyb2lkX2F1ZGlvX2FyY2hpdGVjdHVyZS5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2FuZHJvaWRfYXVkaW9fYXJjaGl0ZWN0dXJlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvY2FtZXJhUHJldmlldy5qcGcgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9jYW1lcmFQcmV2aWV3LmpwZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2NhbWVyYVByZXZpZXcuanBnCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9jYW1lcmFQcmV2aWV3LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvY2FtZXJhVGFrZVBpY3R1cmUuanBnIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY2FtZXJhVGFrZVBpY3R1cmUuanBnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvY2FtZXJhVGFrZVBpY3R1cmUuanBnCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9jYW1lcmFUYWtlUGljdHVyZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2NhbWVyYV92aWRlbzIuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY2FtZXJhX3ZpZGVvMi5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9jYW1lcmFfdmlkZW8yLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY2FtZXJhX3ZpZGVvMi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2N1c3RvbUxvZ28uZ2lmLnBuZyBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL2N1c3RvbUxvZ28uZ2lmLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL2N1c3RvbUxvZ28uZ2lmLnBuZwpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvY3VzdG9tTG9nby5naWYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGsuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0ay5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0ay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrX2Rpc3BsYXlfdGV4dC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfZGlzcGxheV90ZXh0LmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrX2Rpc3BsYXlfdGV4dC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQyLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQyLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0a19kaXNwbGF5X3RleHQyLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrX2Rpc3BsYXlfdGV4dDIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfcmVmcmVzaF9pbml0LmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19yZWZyZXNoX2luaXQuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3JlZnJlc2hfaW5pdC5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19yZWZyZXNoX2luaXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfcmVmcmVzaF9yZXNldC5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfcmVmcmVzaF9yZXNldC5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfcmVmcmVzaF9yZXNldC5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19yZWZyZXNoX3Jlc2V0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvc3RrX3JlZnJlc2hfdXBkYXRlLmdpZiBiL3Bkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19yZWZyZXNoX3VwZGF0ZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfcmVmcmVzaF91cGRhdGUuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy9zdGtfcmVmcmVzaF91cGRhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2ltYWdlcy9zdGtfc2VuZF9TTVMuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvc3RrX3NlbmRfU01TLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3N0a19zZW5kX1NNUy5naWYKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW1hZ2VzL3N0a19zZW5kX1NNUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3RlbGVwaG9ueS5naWYgYi9wZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy90ZWxlcGhvbnkuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvdGVsZXBob255LmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvdGVsZXBob255LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbWFnZXMvdGVsZXBob255X3NvbGljdGVkX2V4YW1wbGUuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvdGVsZXBob255X3NvbGljdGVkX2V4YW1wbGUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9pbWFnZXMvdGVsZXBob255X3NvbGljdGVkX2V4YW1wbGUuZ2lmCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ltYWdlcy90ZWxlcGhvbnlfc29saWN0ZWRfZXhhbXBsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW1hZ2VzL3RlbGVwaG9ueV91bnNvbGljdGVkX2V4YW1wbGUuZ2lmIGIvcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvdGVsZXBob255X3Vuc29saWN0ZWRfZXhhbXBsZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ltYWdlcy90ZWxlcGhvbnlfdW5zb2xpY3RlZF9leGFtcGxlLmdpZgpyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9pbWFnZXMvdGVsZXBob255X3Vuc29saWN0ZWRfZXhhbXBsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW5kZXguamQgYi9wZGsvZG9jcy9wb3J0aW5nL2luZGV4LmpkCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2luZGV4LmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2luZGV4LmpkCmluZGV4IGQyMmZhZTguLjc2NjA5ZDIgMTAwNjQ0Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2luZGV4LmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvaW5kZXguamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPUFuZHJvaWQgUGxhdGZvcm0gRGV2ZWxvcGVyJ3MgR3VpZGUKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApAQCAtMjEsNyArMjEsNyBAQAogPHA+SWYgeW91IGFyZSBuZXcgdG8gQW5kcm9pZCwgc3RhcnQgd2l0aCB0aGUgcGxhdGZvcm0gZG9jdW1lbnRhdGlvbiBvbiB0aGUgZm9sbG93aW5nIHNpdGVzOgogPHVsPgogPGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20iPkFuZHJvaWQgRGV2ZWxvcGVycyBzaXRlPC9hPjogIFRoaXMgc2l0ZSBvZmZlcnMgaGlnaC1sZXZlbCBwbGF0Zm9ybSBkb2N1bWVudGF0aW9uIGFuZCBhcmNoaXRlY3R1cmUgY29uY2VwdHMuPC9saT4KLTxsaT48YSBocmVmPSJodHRwOi8vc291cmNlLmFuZHJvaWQuY29tIj5BbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Qgc2l0ZTwvYT46ICBUaGlzIHNpdGUgcHJvdmlkZXMgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBnZXQgdGhlIHNvdXJjZSBjb2RlLCBlc3RhYmxpc2ggYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgYW5kIHBlcmZvcm0gYSBzaW1wbGUgYnVpbGQuPC9saT4KKzxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9Ij5BbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Qgc2l0ZTwvYT46ICBUaGlzIHNpdGUgcHJvdmlkZXMgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBnZXQgdGhlIHNvdXJjZSBjb2RlLCBlc3RhYmxpc2ggYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgYW5kIHBlcmZvcm0gYSBzaW1wbGUgYnVpbGQuPC9saT4KIDwvdWw+CiAKIDxwPldoZW4geW91IGFyZSByZWFkeSB0byBzdGFydCBjdXN0b21pemluZyB0aGUgcGxhdGZvcm0gb3IgcG9ydGluZyB0byB5b3VyIHRhcmdldCBoYXJkd2FyZSwgc3RhcnQgaW4gdGhpcyBndWlkZSB3aXRoIHRoZSA8YSBocmVmPSJidWlsZF9zeXN0ZW0uaHRtbCI+QnVpbGQgU3lzdGVtIG92ZXJ2aWV3PC9hPi48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbnN0cnVtZW50YXRpb25fZnJhbWV3b3JrLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9pbnN0cnVtZW50YXRpb25fZnJhbWV3b3JrLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2luc3RydW1lbnRhdGlvbl9mcmFtZXdvcmsuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW5zdHJ1bWVudGF0aW9uX2ZyYW1ld29yay5qZAppbmRleCBmMmM1MWVmLi5mY2IwMDZiIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9pbnN0cnVtZW50YXRpb25fZnJhbWV3b3JrLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvaW5zdHJ1bWVudGF0aW9uX2ZyYW1ld29yay5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9SW5zdHJ1bWVudGF0aW9uIEZyYW1ld29yawogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGEgbmFtZT0idG9jIi8+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9pbnN0cnVtZW50YXRpb25fdGVzdGluZy5qZCBiL3Bkay9kb2NzL3BvcnRpbmcvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuamQKaW5kZXggZTRkN2NjNS4uYzM3NjVmNCAxMDA3NTUKLS0tIGEvcGRrL2RvY3MvZ3VpZGUvaW5zdHJ1bWVudGF0aW9uX3Rlc3RpbmcuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9pbnN0cnVtZW50YXRpb25fdGVzdGluZy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9SW5zdHJ1bWVudGF0aW9uIFRlc3RpbmcKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvaW50cm9fc291cmNlX2NvZGUuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2ludHJvX3NvdXJjZV9jb2RlLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL2ludHJvX3NvdXJjZV9jb2RlLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL2ludHJvX3NvdXJjZV9jb2RlLmpkCmluZGV4IDIxYjM0YTcuLjJiYTQxM2MgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2ludHJvX3NvdXJjZV9jb2RlLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvaW50cm9fc291cmNlX2NvZGUuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVNvdXJjZSBDb2RlIE92ZXJ2aWV3CiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8YSBuYW1lPSJ0b2MiLz4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL2tleW1hcHNfa2V5Ym9hcmRfaW5wdXQuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2tleW1hcHNfa2V5Ym9hcmRfaW5wdXQuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUva2V5bWFwc19rZXlib2FyZF9pbnB1dC5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9rZXltYXBzX2tleWJvYXJkX2lucHV0LmpkCmluZGV4IDVkYjBhODYuLmY3MTIwMTUgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2tleW1hcHNfa2V5Ym9hcmRfaW5wdXQuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9rZXltYXBzX2tleWJvYXJkX2lucHV0LmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1LZXltYXBzIGFuZCBLZXlib2FyZCBJbnB1dAogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9saWdodHMuamQgYi9wZGsvZG9jcy9wb3J0aW5nL2xpZ2h0cy5qZApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9saWdodHMuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvbGlnaHRzLmpkCmluZGV4IDFjNDQ1YjIuLjZiYmZiODkgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL2xpZ2h0cy5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL2xpZ2h0cy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9TGlnaHRzCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL21vZHVsZXMuaHRtbCBiL3Bkay9kb2NzL3BvcnRpbmcvbW9kdWxlcy5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9tb2R1bGVzLmh0bWwKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvbW9kdWxlcy5odG1sCmRpZmYgLS1naXQgYS9wZGsvZG9jcy9wb3J0aW5nL3BvcnRpbmdfdG9jLmNzIGIvcGRrL2RvY3MvcG9ydGluZy9wb3J0aW5nX3RvYy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmIxOGUzCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9wb3J0aW5nX3RvYy5jcwpAQCAtMCwwICsxLDkyIEBACis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorPCEtLQorZnVuY3Rpb24gbm90aGluZygpIHt9CistLT4KKzwvc2NyaXB0PgorCis8dWw+CisKKzxsaT4gPGgyPlNldHVwIGFuZCBCdWlsZGluZzwvaDI+CisgIDx1bD4KKyAgICAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+CisgICAgIDxkaXY+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9idWlsZF9zeXN0ZW0uaHRtbCI+QnVpbGQgU3lzdGVtPC9hPjwvZGl2PgorICAgICA8dWw+ICAKKyAgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9idWlsZF9uZXdfZGV2aWNlLmh0bWwiPkNvbmZpZ3VyaW5nIGEgTmV3IFByb2R1Y3Q8L2E+PC9saT4KKyAgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9idWlsZF9jb29rYm9vay5odG1sIj5CdWlsZCBDb29rYm9vazwvYT48L2xpPgorICAgICA8L3VsPgorICAgICA8L2xpPgorICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9yZWxlYXNlX2tleXMuaHRtbCI+UmVsZWFzZSBLZXlzIGFuZCBTaWduaW5nIEJ1aWxkczwvYT48L2xpPiAKKyA8L3VsPgorPC9saT4KKworPGxpPiA8aDI+Q3VzdG9taXphdGlvbjwvaDI+CisgIDx1bD4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9jdXN0b21pemF0aW9uLmh0bWwiPkN1c3RvbWl6YXRpb248L2E+PC9saT4KKyAgPC91bD4KKzwvbGk+CisKKzxsaT4gPGgyPlN5c3RlbTwvaDI+CisKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvYnJpbmdfdXAuaHRtbCI+QnJpbmcgdXA8L2E+PC9saT4KKyAgPGxpIGNsYXNzPSJ0b2dnbGUtbGlzdCI+CisgICAgPGRpdj48YSBocmVmPSJqYXZhc2NyaXB0Om5vdGhpbmcoKSI+Q29ubmVjdGl2aXR5PC9hPjwvZGl2PgorICAgIDx1bD4gCisgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9ibHVldG9vdGguaHRtbCI+Qmx1ZXRvb3RoPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9ncHMuaHRtbCI+R1BTPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy93aWZpLmh0bWwiPldpLUZpPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKworICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9kaXNwbGF5X2RyaXZlcnMuaHRtbCI+RGlzcGxheSBEcml2ZXJzPC9hPjwvbGk+CisgIDxsaSBjbGFzcz0idG9nZ2xlLWxpc3QiPiAKKyAgICA8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6bm90aGluZygpIj5JbnB1dCBEZXZpY2VzPC9hPjwvZGl2PgorICAgIDx1bD4KKyAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2tleW1hcHNfa2V5Ym9hcmRfaW5wdXQuaHRtbCI+S2V5bWFwcyBhbmQgS2V5Ym9hcmQ8L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2xpPgorICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9saWdodHMuaHRtbCI+TGlnaHRzPC9hPjwvbGk+CisgIDxsaSBjbGFzcz0idG9nZ2xlLWxpc3QiPgorICAgIDxkaXY+PGEgaHJlZj0iamF2YXNjcmlwdDpub3RoaW5nKCkiPk11bHRpbWVkaWE8L2E+PC9kaXY+CisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvYXVkaW8uaHRtbCI+QXVkaW88L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2NhbWVyYS5odG1sIj5DYW1lcmEvVmlkZW88L2E+PC9saT4KKyAgICA8L3VsPgorICA8L2xpPgorICAKKyAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvcG93ZXJfbWFuYWdlbWVudC5odG1sIj5Qb3dlciBNYW5hZ2VtZW50PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL3NlbnNvcnMuaHRtbCI+U2Vuc29yczwvYT48L2xpPgorICA8bGkgY2xhc3M9InRvZ2dsZS1saXN0Ij4KKyAgICA8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6bm90aGluZygpIj5UZWxlcGhvbnk8L2E+PC9kaXY+CisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvdGVsZXBob255Lmh0bWwiPlJhZGlvIEludGVyZmFjZSBMYXllcjwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvc3RrLmh0bWwiPlNJTSBUb29sa2l0IEFwcGxpY2F0aW9uIChTVEspPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9saT4KKworPC91bD4KKzwvbGk+CisKKzxsaT4gPGgyPkRhbHZpayBWaXJ0dWFsIE1hY2hpbmU8L2gyPgorICA8dWw+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvZGFsdmlrLmh0bWwiPlBvcnRpbmcgRGFsdmlrPC9hPjwvbGk+CisgIDwvdWw+Cis8L2xpPgorPGxpPiA8aDI+VGVzdGluZyBhbmQgRGVidWdnaW5nPC9oMj4KKyAgPHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL2luc3RydW1lbnRhdGlvbl90ZXN0aW5nLmh0bWwiPkluc3RydW1lbnRhdGlvbiBUZXN0aW5nPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnBvcnRpbmcvZGVidWdnaW5nX2dkYi5odG1sIj5EZWJ1Z2dpbmcgd2l0aCBHREI8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+cG9ydGluZy9kZWJ1Z2dpbmdfbmF0aXZlLmh0bWwiPkRlYnVnZ2luZyBOYXRpdmUgQ29kZTwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5wb3J0aW5nL3RjcGR1bXAuaHRtbCI+RGVidWdnaW5nIHdpdGggdGNwZHVtcDwvYT48L2xpPgorICA8L3VsPgorPC9saT4KKworCisKKzwvdWw+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKzwhLS0KKyAgICBidWlsZFRvZ2dsZUxpc3RzKCk7CisvLy0tPgorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9wb3dlcl9tYW5hZ2VtZW50LmpkIGIvcGRrL2RvY3MvcG9ydGluZy9wb3dlcl9tYW5hZ2VtZW50LmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3Bvd2VyX21hbmFnZW1lbnQuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvcG93ZXJfbWFuYWdlbWVudC5qZAppbmRleCBkYWZmNmVkLi4yOGY5NTE5IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9wb3dlcl9tYW5hZ2VtZW50LmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvcG93ZXJfbWFuYWdlbWVudC5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9UG93ZXIgTWFuYWdlbWVudAogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGEgbmFtZT0idG9jIi8+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgPHRoIHNjb3BlPSJjb2wiPkRlc2NyaXB0aW9uPC90aD4KICAgICA8L3RyPgogICAgIDx0cj4KLSAgICAgIDx0ZD5BQ1FVSVJFX0NBVVNFU19XQUtFVVA8YnIvPjwvdGQ+CisgICAgICA8dGQ+QUNRVUlSRV9DQVVTRVNfV0FLRVVQIDxici8+PC90ZD4KICAgICAgICAgPHRkPk5vcm1hbGx5IHdha2UgbG9ja3MgZG9uJ3QgYWN0dWFsbHkgd2FrZSB0aGUgZGV2aWNlLCB0aGV5IGp1c3QgY2F1c2UgaXQgdG8gcmVtYWluIG9uIG9uY2UgaXQncyBhbHJlYWR5IG9uLiBUaGluayBvZiB0aGUgdmlkZW8gcGxheWVyIGFwcCBhcyB0aGUgbm9ybWFsIGJlaGF2aW9yLiBOb3RpZmljYXRpb25zIHRoYXQgcG9wIHVwIGFuZCB3YW50IHRoZSBkZXZpY2UgdG8gYmUgb24gYXJlIHRoZSBleGNlcHRpb247IHVzZSB0aGlzIGZsYWcgdG8gYmUgbGlrZSB0aGVtLjwvdGQ+CiAgICAgPC90cj4KICAgICA8dHI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9yZWxlYXNlX2tleXMuamQgYi9wZGsvZG9jcy9wb3J0aW5nL3JlbGVhc2Vfa2V5cy5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9yZWxlYXNlX2tleXMuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvcmVsZWFzZV9rZXlzLmpkCmluZGV4IDdlODM4MzQuLjExNmNkYmIgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL3JlbGVhc2Vfa2V5cy5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL3JlbGVhc2Vfa2V5cy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9Q3JlYXRpbmcgUmVsZWFzZSBLZXlzIGFuZCBTaWduaW5nIEJ1aWxkcwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9zZW5zb3JzLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9zZW5zb3JzLmpkCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3NlbnNvcnMuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvc2Vuc29ycy5qZAppbmRleCA2MWNhMmQ5Li4xYjI0MDI2IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9zZW5zb3JzLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvc2Vuc29ycy5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9U2Vuc29ycwogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS9zb3VyY2Vfc2V0dXBfZ3VpZGUuamQgYi9wZGsvZG9jcy9wb3J0aW5nL3NvdXJjZV9zZXR1cF9ndWlkZS5qZApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBwZGsvZG9jcy9ndWlkZS9zb3VyY2Vfc2V0dXBfZ3VpZGUuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvc291cmNlX3NldHVwX2d1aWRlLmpkCmluZGV4IDgzYzRhMDEuLjc3ZTFkNjAgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL3NvdXJjZV9zZXR1cF9ndWlkZS5qZAorKysgYi9wZGsvZG9jcy9wb3J0aW5nL3NvdXJjZV9zZXR1cF9ndWlkZS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9SG9zdCBTeXN0ZW0gU2V0dXAKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxhIG5hbWU9InRvYyIvPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvc3RrLmpkIGIvcGRrL2RvY3MvcG9ydGluZy9zdGsuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvc3RrLmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3N0ay5qZAppbmRleCA0ZjY4YzQ4Li5hNzNlZDkzIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS9zdGsuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9zdGsuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVNpbSBUb29sa2l0IEFwcGxpY2F0aW9uIChTVEspCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8ZGl2IGlkPSJxdi13cmFwcGVyIj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL2d1aWRlL3N5c3RlbV9yZXF1aXJlbWVudHMuamQgYi9wZGsvZG9jcy9wb3J0aW5nL3N5c3RlbV9yZXF1aXJlbWVudHMuamQKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvc3lzdGVtX3JlcXVpcmVtZW50cy5qZApyZW5hbWUgdG8gcGRrL2RvY3MvcG9ydGluZy9zeXN0ZW1fcmVxdWlyZW1lbnRzLmpkCmluZGV4IDAwNzc0NDcuLjBhMGIzMzEgMTAwNzU1Ci0tLSBhL3Bkay9kb2NzL2d1aWRlL3N5c3RlbV9yZXF1aXJlbWVudHMuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy9zeXN0ZW1fcmVxdWlyZW1lbnRzLmpkCkBAIC0xLDYgKzEsNiBAQAogcGFnZS50aXRsZT1EZXZpY2UgUmVxdWlyZW1lbnRzCiBwZGsudmVyc2lvbj0xLjAKLWRvYy50eXBlPWd1aWRlCitkb2MudHlwZT1wb3J0aW5nCiBAamQ6Ym9keQogCiA8cD5XaGlsZSBBbmRyb2lkIGlzIGRlc2lnbmVkIHRvIHN1cHBvcnQgYSB3aWRlIHZhcmlldHkgb2YgaGFyZHdhcmUgcGxhdGZvcm1zIGFuZCBjb25maWd1cmF0aW9ucywgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHJlY29tbWVuZGVkIG1pbmltdW0gZGV2aWNlIHJlcXVpcmVtZW50cy48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS90Y3BkdW1wLmpkIGIvcGRrL2RvY3MvcG9ydGluZy90Y3BkdW1wLmpkCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3RjcGR1bXAuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvdGNwZHVtcC5qZAppbmRleCAwMWY3N2JiLi4xNjI3YmM3IDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS90Y3BkdW1wLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvdGNwZHVtcC5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9RGVidWdnaW5nIHdpdGggdGNwZHVtcCBhbmQgb3RoZXIgdG9vbHMKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIApkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvZ3VpZGUvdGVsZXBob255LmpkIGIvcGRrL2RvY3MvcG9ydGluZy90ZWxlcGhvbnkuamQKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gcGRrL2RvY3MvZ3VpZGUvdGVsZXBob255LmpkCnJlbmFtZSB0byBwZGsvZG9jcy9wb3J0aW5nL3RlbGVwaG9ueS5qZAppbmRleCAyMDA0ZTYzLi5kY2Y1NzczIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS90ZWxlcGhvbnkuamQKKysrIGIvcGRrL2RvY3MvcG9ydGluZy90ZWxlcGhvbnkuamQKQEAgLTEsNiArMSw2IEBACiBwYWdlLnRpdGxlPVJhZGlvIExheWVyIEludGVyZmFjZQogcGRrLnZlcnNpb249MS4wCi1kb2MudHlwZT1ndWlkZQorZG9jLnR5cGU9cG9ydGluZwogQGpkOmJvZHkKIAogPGRpdiBpZD0icXYtd3JhcHBlciI+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9ndWlkZS93aWZpLmpkIGIvcGRrL2RvY3MvcG9ydGluZy93aWZpLmpkCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHBkay9kb2NzL2d1aWRlL3dpZmkuamQKcmVuYW1lIHRvIHBkay9kb2NzL3BvcnRpbmcvd2lmaS5qZAppbmRleCAxZTlmNTI3Li5lZWE0MzFiIDEwMDc1NQotLS0gYS9wZGsvZG9jcy9ndWlkZS93aWZpLmpkCisrKyBiL3Bkay9kb2NzL3BvcnRpbmcvd2lmaS5qZApAQCAtMSw2ICsxLDYgQEAKIHBhZ2UudGl0bGU9V2ktRmkKIHBkay52ZXJzaW9uPTEuMAotZG9jLnR5cGU9Z3VpZGUKK2RvYy50eXBlPXBvcnRpbmcKIEBqZDpib2R5CiAKIDxkaXYgaWQ9InF2LXdyYXBwZXIiPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3MvcmVsZWFzZXMvaW5kZXguamQgYi9wZGsvZG9jcy9yZWxlYXNlcy9pbmRleC5qZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNiNzE1NC4uMDAwMDAwMAotLS0gYS9wZGsvZG9jcy9yZWxlYXNlcy9pbmRleC5qZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotaG9tZT10cnVlCi1kb2MudHlwZT1yZWxlYXNlcwotQGpkOmJvZHkKLQotPHA+Ci0gIFNvbWUgcmVsZWFzZSBpbmZvcm1hdGlvbiBoZXJlCi08L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9yZWxlYXNlcy9yZWxlYXNlc190b2MuY3MgYi9wZGsvZG9jcy9yZWxlYXNlcy9yZWxlYXNlc190b2MuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODQyYjUuLjAwMDAwMDAKLS0tIGEvcGRrL2RvY3MvcmVsZWFzZXMvcmVsZWFzZXNfdG9jLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLTwhLS0KLWZ1bmN0aW9uIG5vdGhpbmcoKSB7fQotLS0+Ci08L3NjcmlwdD4KLQotPHVsPgotICA8bGk+IDxoMj4gQW5kcm9pZCBSZWxlYXNlcyA8L2gyPgotICA8dWw+Ci0gICAgPGxpPjxhIGhyZWY9Inh4eCI+QW5kcm9pZCAxLjA8L2E+PC9saT4KLSAgICA8bGk+PGEgaHJlZj0ieHh4Ij5BbmRyb2lkIDEuMTwvYT48L2xpPgotICAgIDxsaT48YSBocmVmPSJ4eHgiPkFuZHJvaWQgMS41PC9hPjwvbGk+Ci0gIDwvdWw+Ci0gIDwvbGk+Ci0KLTwvdWw+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLTwhLS0KLSAgICBidWlsZFRvZ2dsZUxpc3RzKCk7Ci0vLy0tPgotPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvYnVpbGRpbmctZHJlYW0uamQgYi9wZGsvZG9jcy9zb3VyY2UvYnVpbGRpbmctZHJlYW0uamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzOTJmZAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9idWlsZGluZy1kcmVhbS5qZApAQCAtMCwwICsxLDM4IEBACitwYWdlLnRpdGxlPUJ1aWxkaW5nIGZvciBhbiBBbmRyb2lkIERldiBQaG9uZQorZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPHA+PGk+VGhlIGluZm9ybWF0aW9uIG9uIHRoaXMgcGFnZSBpcyBhIGJpdCBvdXQgb2YgZGF0ZS4gV2UnbGwgdXBkYXRlIHRoaXMKK3BhZ2UgYXMgc29vbiBhcyB3ZSBjYW4uPC9pPjwvcD4KKzxkaXY+VGhlIGJhc2ljIG1hbmlmZXN0IGZvciBjdXBjYWtlIChhbmQgYWJvdmUpIGRlZmluZXMgd2hpY2ggcHJvamVjdHMgYXJlCituZWVkZWQgdG8gZG8gYSBnZW5lcmljIGJ1aWxkIGZvciB0aGUgZW11bGF0b3Igb3IgZm9yIHVubG9ja2VkIERyZWFtIGRldmljZXMKKyhlLmcuIHRoZSBBbmRyb2lkIERldiBQaG9uZSAxKS4gWW91IG5lZWQgdG8gaGF2ZSBhbiBhcHByb3ByaWF0ZSBkZXZpY2UgcnVubmluZworYSBtYXRjaGluZyBvZmZpY2lhbCBpbWFnZS48YnI+PGJyPlRvIGJ1aWxkIGRvbnV0IG9yIG1hc3RlciBmb3IgZHJlYW0gKHlvdXIKK2RldmljZSBuZWVkcyB0byBiZSBhbiBBRFAxIHJ1bm5pbmcgYW4gb2ZmaWNpYWwgMS42IHN5c3RlbSk6PGJyPjxvbD48bGk+Rm9sbG93Cit0aGUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9kb3dubG9hZC5odG1sIj5ub3JtYWwgc3RlcHM8L2E+Cit0byBzZXR1cCByZXBvIGFuZCBjaGVjayBvdXQgdGhlIHNvdXJjZXMuCis8L2xpPgorPGxpPkF0IHRoZSByb290IG9mIHlvdXIgc291cmNlIHRyZWUsIHJ1biAiLiBidWlsZC9lbnZzZXR1cC5zaCIgbGlrZSB5b3Ugbm9ybWFsbHkgd291bGQgZm9yIGFuIGVtdWxhdG9yIGJ1aWxkLgorPC9saT4KKzxsaT5SdW4gIm1ha2UgYWRiIiBpZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFkYiBpbiB5b3VyIHBhdGguCis8L2xpPgorPGxpPnJ1biAiYWRiIHJvb3QiLjxicj48L2xpPgorPGxpPmluIHZlbmRvci9odGMvZHJlYW0tb3Blbi8gdGhlcmUgaXMgYSBzY3JpcHQgY2FsbGVkICJleHRyYWN0LWZpbGVzLnNoIiB0aGF0IG11c3QgYmUgcnVuIChmcm9tIHRoYXQgZGlyZWN0b3J5KSB0byBleHRyYWN0IHNvbWUgcHJvcHJpZXRhcnkgYmluYXJpZXMgZnJvbSB5b3VyIGRldmljZSAoKikuIFlvdSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlLjxicj48L2xpPgorPGxpPnJ1biAibHVuY2ggYW9zcF9kcmVhbV91cy1lbmciIHRvIHNwZWNpZmljYWxseSBjb25maWd1cmUgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgZHJlYW0gKHRoZSBkZWZhdWx0IGlzIHRoZSBlcXVpdmFsZW50IG9mICJsdW5jaCBnZW5lcmljLWVuZyIsIHdoaWNoIGRvZXNuJ3QgY29udGFpbiBkcmVhbS1zcGVjaWZpYyBmaWxlcykuPGJyPjwvbGk+Cis8bGk+cnVuIG1ha2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4KKzwvbGk+Cis8bGk+ZnJvbSB0aGlzIHBvaW50LCB0aGUgZmFzdGJvb3QgdG9vbCAod2hpY2ggaXMgcHV0IGF1dG9tYXRpY2FsbHkgaW4geW91ciBwYXRoKSBjYW4gYmUgdXNlZCB0byBmbGFzaCBhIGRldmljZTogYm9vdCB0aGUgZGV2aWNlIGludG8gdGhlIGJvb3Rsb2FkZXIgYnkgaG9sZGluZyB0aGUgYmFjayBrZXkgd2hpbGUgcHJlc3NpbmcgdGhlIHBvd2VyIGtleSwgYW5kIHJ1biAiZmFzdGJvb3QgLXcgZmxhc2hhbGwiLjxicj48L2xpPgorPC9vbD4KK1RvIGJ1aWxkIGN1cGNha2UgZm9yIGRyZWFtICh5b3VyIGRldmljZSBuZWVkcyB0byBiZSBhbiBBRFAxIHJ1bm5pbmcgYW4gb2ZmaWNpYWwgMS41IHN5c3RlbSk6PGJyPjxvbD48bGk+Rm9sbG93IHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2Rvd25sb2FkLmh0bWwiPm5vcm1hbCBzdGVwczwvYT4KK3RvIHNldHVwIHJlcG8gYW5kIGNoZWNrIG91dCB0aGUgc291cmNlcy4KKzwvbGk+Cis8bGk+QXQgdGhlIHJvb3Qgb2YgeW91ciBzb3VyY2UgdHJlZSwgcnVuICIuIGJ1aWxkL2VudnNldHVwLnNoIiBsaWtlIHlvdSBub3JtYWxseSB3b3VsZCBmb3IgYW4gZW11bGF0b3IgYnVpbGQuCis8L2xpPgorPGxpPlJ1biAibWFrZSBhZGIiIGlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgYWRiIGluIHlvdXIgcGF0aC48YnI+PC9saT4KKzxsaT5pbiB2ZW5kb3IvaHRjL2RyZWFtLW9wZW4vIHRoZXJlIGlzIGEgc2NyaXB0IGNhbGxlZCAiZXh0cmFjdC1maWxlcy5zaCIgdGhhdCBtdXN0IGJlIHJ1biAoZnJvbSB0aGF0IGRpcmVjdG9yeSkgdG8gZXh0cmFjdCBzb21lIHByb3ByaWV0YXJ5IGJpbmFyaWVzIGZyb20geW91ciBkZXZpY2UgKCopLiBZb3Ugb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZS48YnI+PC9saT4KKzxsaT5ydW4gImx1bmNoIGh0Y19kcmVhbS1lbmciIHRvIHNwZWNpZmljYWxseSBjb25maWd1cmUgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgZHJlYW0gKHRoZSBkZWZhdWx0IGlzIHRoZSBlcXVpdmFsZW50IG9mICJsdW5jaCBnZW5lcmljLWVuZyIsIHdoaWNoIGRvZXNuJ3QgY29udGFpbiBkcmVhbS1zcGVjaWZpYyBmaWxlcykuPGJyPjwvbGk+Cis8bGk+cnVuIG1ha2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4KKzwvbGk+Cis8bGk+ZnJvbSB0aGlzIHBvaW50LCB0aGUgZmFzdGJvb3QgdG9vbCAod2hpY2ggaXMgcHV0IGF1dG9tYXRpY2FsbHkgaW4geW91ciBwYXRoKSBjYW4gYmUgdXNlZCB0byBmbGFzaCBhIGRldmljZTogYm9vdCB0aGUgZGV2aWNlIGludG8gdGhlIGJvb3Rsb2FkZXIgYnkgaG9sZGluZyB0aGUgYmFjayBrZXkgd2hpbGUgcHJlc3NpbmcgdGhlIHBvd2VyIGtleSwgYW5kIHJ1biAiZmFzdGJvb3QgLXcgZmxhc2hhbGwiLjxicj48L2xpPgorPC9vbD4KKyogVGhlIERyZWFtIGRldmljZSBzb2Z0d2FyZSBjb250YWlucyBzb21lIHByb3ByaWV0YXJ5IGJpbmFyaWVzLkZvciBjb250cmFjdHVhbCByZWFzb25zLCB0aGVzZSBjYW5ub3QgYmUgcmVkaXN0cmlidXRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IHdpdGggdGhlIEFuZHJvaWQgT3Blbi1Tb3VyY2UgUHJvamVjdCwgYnV0IHRoZSBwcm92aWRlZCBzY3JpcHQgbWF5IGJlIHVzZWQgdG8gZXh0cmFjdCB0aGVzZSBiaW5hcmllcyBmcm9tIHlvdXIgZGV2ZWxvcG1lbnQgZGV2aWNlIHNvIHRoYXQgdGhleSBjYW4gYmUgY29ycmVjdGx5IGluY2x1ZGVkIGluIHlvdXIgYnVpbGQuVGhlc2UgbGlicmFyaWVzIGluY2x1ZGUgdGhlIG9wZW5HTHxFUyBsaWJyYXJ5LCB0aGUgUXVhbGNvbW0gY2FtZXJhIGxpYnJhcnksIHRoZSBIVEMgUmFkaW8gSW50ZXJmYWNlIExpYnJhcnksIGV0Yy4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2NsYS1jb3Jwb3JhdGUuamQgYi9wZGsvZG9jcy9zb3VyY2UvY2xhLWNvcnBvcmF0ZS5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjk0NTJiCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2NsYS1jb3Jwb3JhdGUuamQKQEAgLTAsMCArMSw1MSBAQAorcGFnZS50aXRsZT1Db3Jwb3JhdGUgQ29udHJpYnV0b3IgTGljZW5zZSBBZ3JlZW1lbnQKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+PHA+SW4gb3JkZXIgdG8gY2xhcmlmeSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxpY2Vuc2UgZ3JhbnRlZCB3aXRoIENvbnRyaWJ1dGlvbnMgZnJvbSBhbnkgcGVyc29uIG9yIGVudGl0eSwgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAodGhlICJQcm9qZWN0IikgbXVzdCBoYXZlIGEgQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudCAoIkdyYW50Iikgb24gZmlsZSB0aGF0IGhhcyBiZWVuIHNpZ25lZCBieSBlYWNoIENvbnRyaWJ1dG9yLCBpbmRpY2F0aW5nIGFncmVlbWVudCB0byB0aGUgbGljZW5zZSB0ZXJtcyBiZWxvdy4gVGhpcyBsaWNlbnNlIGlzIGZvciB5b3VyIHByb3RlY3Rpb24gYXMgYSBDb250cmlidXRvciBhcyB3ZWxsIGFzIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBQcm9qZWN0IGFuZCB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IExlYWRzICh0aGUgIlByb2plY3QgTGVhZHMiKTsgaXQgZG9lcyBub3QgY2hhbmdlIHlvdXIgcmlnaHRzIHRvIHVzZSB5b3VyIG93biBDb250cmlidXRpb25zIGZvciBhbnkgb3RoZXIgcHVycG9zZS4KKzwvcD4KKzxwPlRoaXMgdmVyc2lvbiBvZiB0aGUgR3JhbnQgYWxsb3dzIGFuIGVudGl0eSAodGhlICJDb3Jwb3JhdGlvbiIpIHRvIHN1Ym1pdCBDb250cmlidXRpb25zIHRvIHRoZSBQcm9qZWN0IExlYWRzLCB0byBhdXRob3JpemUgQ29udHJpYnV0aW9ucyBzdWJtaXR0ZWQgYnkgaXRzIGRlc2lnbmF0ZWQgZW1wbG95ZWVzIHRvIHRoZSBQcm9qZWN0IExlYWRzLCBhbmQgdG8gZ3JhbnQgY29weXJpZ2h0IGFuZCBwYXRlbnQgbGljZW5zZXMgdGhlcmV0by4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIGNvbXBsZXRlIGFuZCBzZW5kIGFuIG9yaWdpbmFsIHNpZ25lZCBHcmFudCB0bworPC9wPgorPGJsb2NrcXVvdGU+R29vZ2xlIEluYy48YnI+QXR0bjogT3BlbiBTb3VyY2UgUHJvZ3JhbSBPZmZpY2UgPGJyPjE2MDAgQW1waGl0aGVhdHJlIFBrd3kgPGJyPkJ1aWxkaW5nIDQzPGJyPk1vdW50YWluIFZpZXcsIENBIDk0MDQzPGJyPlUuUy5BLjxicj48L2Jsb2NrcXVvdGU+Cis8cD5TY2FubmVkIGFncmVlbWVudHMgbWF5IGFsc28gYmUgZW1haWxlZCBpbiBQREYgZm9ybSB0byBjbGEtc3VibWlzc2lvbnNAZ29vZ2xlLmNvbQorPC9wPgorPHA+SWYgbmVjZXNzYXJ5LCB5b3UgbWF5IHNlbmQgaXQgYnkgZmFjc2ltaWxlIHRvICg2NTApIDg4Ny0xNjI1LiBQbGVhc2UgcmVhZCB0aGlzIGRvY3VtZW50IGNhcmVmdWxseSBiZWZvcmUgc2lnbmluZyBhbmQga2VlcCBhIGNvcHkgZm9yIHlvdXIgcmVjb3Jkcy4KKzwvcD4KKzxwcmU+Q29ycG9yYXRpb24gbmFtZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPkNvcnBvcmF0aW9uIGFkZHJlc3M6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj48YnI+PGJyPjxicj5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPlBvaW50IG9mIENvbnRhY3Q6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj48YnI+PGJyPjxicj5FLU1haWw6ICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+VGVsZXBob25lOiBfX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+RmF4OiBfX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjwvcHJlPgorPHA+WW91IGFjY2VwdCBhbmQgYWdyZWUgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgWW91ciBwcmVzZW50IGFuZCBmdXR1cmUgQ29udHJpYnV0aW9ucyBzdWJtaXR0ZWQgdG8gdGhlIFByb2plY3QuIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gdG8gdGhlIFByb2plY3QgTGVhZHMgYW5kIHJlY2lwaWVudHMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIFByb2plY3QgTGVhZHMsIFlvdSByZXNlcnZlIGFsbCByaWdodCwgdGl0bGUsIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gWW91ciBDb250cmlidXRpb25zLgorPC9wPgorPG9sPjxsaT48cD5EZWZpbml0aW9ucy4KKzwvcD4KKzxwPiJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBsZWdhbCBlbnRpdHkgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgbWFraW5nIHRoaXMgR3JhbnQgdG8gdGhlIFByb2plY3QgTGVhZHMuIEZvciBsZWdhbCBlbnRpdGllcywgdGhlIGVudGl0eSBtYWtpbmcgYSBDb250cmlidXRpb24gYW5kIGFsbCBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eSBhcmUgY29uc2lkZXJlZCB0byBiZSBhIHNpbmdsZSBDb250cmlidXRvci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzwvcD4KKzxwPiJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gdGhlIGNvZGUsIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBleHByZXNzbHkgaWRlbnRpZmllZCBpbiBTY2hlZHVsZSBCLCBhcyB3ZWxsIGFzIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gYW4gZXhpc3Rpbmcgd29yaywgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBieSBZb3UgdG8gdGhlIFByb2plY3QgTGVhZHMgZm9yIGluY2x1c2lvbiBpbiwgb3IgZG9jdW1lbnRhdGlvbiBvZiwgYW55IG9mIHRoZSBwcm9kdWN0cyBtYW5hZ2VkIG9yIG1haW50YWluZWQgYnkgdGhlIFByb2plY3QgTGVhZHMgKHRoZSAiV29yayIpLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudCB0byB0aGUgUHJvamVjdCBMZWFkcyBvciB0aGVpciByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgUHJvamVjdCBMZWFkcyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IFlvdSBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKzwvcD4KKzwvbGk+Cis8bGk+PHA+R3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgR3JhbnQsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gdGhlIFByb2plY3QgTGVhZHMgYW5kIHRvIHJlY2lwaWVudHMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIFByb2plY3QgTGVhZHMgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBZb3VyIENvbnRyaWJ1dGlvbnMgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3Jrcy4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+R3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgR3JhbnQsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gdGhlIFByb2plY3QgTGVhZHMgYW5kIHRvIHJlY2lwaWVudHMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIFByb2plY3QgTGVhZHMgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgWW91IHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSBZb3VyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiBZb3VyIENvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIGFueSBlbnRpdHkgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IFlvdSBvciBhbnkgb3RoZXIgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHlvdXIgQ29udHJpYnV0aW9uLCBvciB0aGUgV29yayB0byB3aGljaCB5b3UgaGF2ZSBjb250cmlidXRlZCwgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB0byB0aGF0IGVudGl0eSB1bmRlciB0aGlzIEdyYW50IGZvciB0aGF0IENvbnRyaWJ1dGlvbiBvciBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCis8L3A+Cis8L2xpPgorPGxpPjxwPllvdSByZXByZXNlbnQgdGhhdCBZb3UgYXJlIGxlZ2FsbHkgZW50aXRsZWQgdG8gZ3JhbnQgdGhlIGFib3ZlIGxpY2Vuc2UuIFlvdSByZXByZXNlbnQgZnVydGhlciB0aGF0IGVhY2ggZW1wbG95ZWUgb2YgdGhlIENvcnBvcmF0aW9uIGRlc2lnbmF0ZWQgb24gU2NoZWR1bGUgQSBiZWxvdyAob3IgaW4gYSBzdWJzZXF1ZW50IHdyaXR0ZW4gbW9kaWZpY2F0aW9uIHRvIHRoYXQgU2NoZWR1bGUpIGlzIGF1dGhvcml6ZWQgdG8gc3VibWl0IENvbnRyaWJ1dGlvbnMgb24gYmVoYWxmIG9mIHRoZSBDb3Jwb3JhdGlvbi4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+WW91IHJlcHJlc2VudCB0aGF0IGVhY2ggb2YgWW91ciBDb250cmlidXRpb25zIGlzIFlvdXIgb3JpZ2luYWwgY3JlYXRpb24gKHNlZSBzZWN0aW9uIDcgZm9yIHN1Ym1pc3Npb25zIG9uIGJlaGFsZiBvZiBvdGhlcnMpLgorPC9wPgorPC9saT4KKzxsaT48cD5Zb3UgYXJlIG5vdCBleHBlY3RlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIFlvdXIgQ29udHJpYnV0aW9ucywgZXhjZXB0IHRvIHRoZSBleHRlbnQgWW91IGRlc2lyZSB0byBwcm92aWRlIHN1cHBvcnQuIFlvdSBtYXkgcHJvdmlkZSBzdXBwb3J0IGZvciBmcmVlLCBmb3IgYSBmZWUsIG9yIG5vdCBhdCBhbGwuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgWW91IHByb3ZpZGUgWW91ciBDb250cmlidXRpb25zIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+U2hvdWxkIFlvdSB3aXNoIHRvIHN1Ym1pdCB3b3JrIHRoYXQgaXMgbm90IFlvdXIgb3JpZ2luYWwgY3JlYXRpb24sIFlvdSBtYXkgc3VibWl0IGl0IHRvIHRoZSBQcm9qZWN0IExlYWRzIHNlcGFyYXRlbHkgZnJvbSBhbnkgQ29udHJpYnV0aW9uLCBpZGVudGlmeWluZyB0aGUgY29tcGxldGUgZGV0YWlscyBvZiBpdHMgc291cmNlIGFuZCBvZiBhbnkgbGljZW5zZSBvciBvdGhlciByZXN0cmljdGlvbiAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHJlbGF0ZWQgcGF0ZW50cywgdHJhZGVtYXJrcywgYW5kIGxpY2Vuc2UgYWdyZWVtZW50cykgb2Ygd2hpY2ggeW91IGFyZSBwZXJzb25hbGx5IGF3YXJlLCBhbmQgY29uc3BpY3VvdXNseSBtYXJraW5nIHRoZSB3b3JrIGFzICJTdWJtaXR0ZWQgb24gYmVoYWxmIG9mIGEgdGhpcmQtcGFydHk6IFtuYW1lZCBoZXJlXSIuPGJyPjwvcD4KKzwvbGk+Cis8bGk+PHA+SXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBub3RpZnkgdGhlIFByb2plY3QgTGVhZHMgd2hlbiBhbnkgY2hhbmdlIGlzIHJlcXVpcmVkIHRvIHRoZSBsaXN0IG9mIGRlc2lnbmF0ZWQgZW1wbG95ZWVzIGF1dGhvcml6ZWQgdG8gc3VibWl0IENvbnRyaWJ1dGlvbnMgb24gYmVoYWxmIG9mIHRoZSBDb3Jwb3JhdGlvbiwgb3IgdG8gdGhlIENvcnBvcmF0aW9uJ3MgUG9pbnQgb2YgQ29udGFjdCB3aXRoIHRoZSBQcm9qZWN0LgorPC9wPgorPC9saT4KKzwvb2w+Cis8cHJlPjxicj48YnI+PGJyPlBsZWFzZSBzaWduOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgRGF0ZTogX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPlRpdGxlOiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48YnI+PGJyPkNvcnBvcmF0aW9uOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPjxicj48L3ByZT4KKzxoMz4KK1NjaGVkdWxlIEE8L2gzPgorW0luaXRpYWwgbGlzdCBvZiBkZXNpZ25hdGVkIGVtcGxveWVlcy4gTkI6IGF1dGhvcml6YXRpb24gaXMgbm90IHRpZWQgdG8gcGFydGljdWxhciBDb250cmlidXRpb25zLl0KKzxoMz4KK1NjaGVkdWxlIEI8L2gzPgorW0lkZW50aWZpY2F0aW9uIG9mIG9wdGlvbmFsIGNvbmN1cnJlbnQgc29mdHdhcmUgZ3JhbnQuIFdvdWxkIGJlIGxlZnQgYmxhbmsgb3Igb21pdHRlZCBpZiB0aGVyZSBpcyBubyBjb25jdXJyZW50IHNvZnR3YXJlIGdyYW50Ll0KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2NsYS1pbmRpdmlkdWFsLmpkIGIvcGRrL2RvY3Mvc291cmNlL2NsYS1pbmRpdmlkdWFsLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTBiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvY2xhLWluZGl2aWR1YWwuamQKQEAgLTAsMCArMSw0NCBAQAorcGFnZS50aXRsZT1Db250cmlidXRvciBMaWNlbnNlIEFncmVlbWVudCBmb3IgSW5kaXZpZHVhbHMKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+PHA+PGk+UGxlYXNlIHZpc2l0IHRoZSA8YSBocmVmPSJodHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vI3NldHRpbmdzLG5ldy1hZ3JlZW1lbnQiPmNvZGUgcmV2aWV3IHRvb2w8L2E+Cit0byBleGVjdXRlIHRoZSBncmFudCBvbmxpbmUuVGhpcyBwYWdlIHByb3ZpZGVzIHRoZSB0ZXh0IG9mIHRoZSBJbmRpdmlkdWFsIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQgZm9yIHlvdXIgcXVpY2sgcmV2aWV3LjwvaT4KKzxicj48L3A+Cis8cD48YnI+PC9wPgorPHA+SW4gb3JkZXIgdG8gY2xhcmlmeSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxpY2Vuc2UgZ3JhbnRlZCB3aXRoIENvbnRyaWJ1dGlvbnMgZnJvbSBhbnkgcGVyc29uIG9yIGVudGl0eSwgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAodGhlICJQcm9qZWN0IikgbXVzdCBoYXZlIGEgQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudCAoIkdyYW50Iikgb24gZmlsZSB0aGF0IGhhcyBiZWVuIHNpZ25lZCBieSBlYWNoIENvbnRyaWJ1dG9yLCBpbmRpY2F0aW5nIGFncmVlbWVudCB0byB0aGUgbGljZW5zZSB0ZXJtcyBiZWxvdy4gVGhpcyBsaWNlbnNlIGlzIGZvciB5b3VyIHByb3RlY3Rpb24gYXMgYSBDb250cmlidXRvciBhcyB3ZWxsIGFzIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBQcm9qZWN0IGFuZCB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IExlYWRzICh0aGUgIlByb2plY3QgTGVhZHMiKTsgaXQgZG9lcyBub3QgY2hhbmdlIHlvdXIgcmlnaHRzIHRvIHVzZSB5b3VyIG93biBDb250cmlidXRpb25zIGZvciBhbnkgb3RoZXIgcHVycG9zZS4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIGNvbXBsZXRlIGFuZCBzZW5kIGFuIG9yaWdpbmFsIHNpZ25lZCBHcmFudCB0bworPC9wPgorPGJsb2NrcXVvdGU+R29vZ2xlIEluYy48YnI+QXR0bjogT3BlbiBTb3VyY2UgUHJvZ3JhbSBPZmZpY2UgPGJyPjE2MDAgQW1waGl0aGVhdHJlIFBrd3kgPGJyPkJ1aWxkaW5nIDQzPGJyPk1vdW50YWluIFZpZXcsIENBIDk0MDQzPGJyPlUuUy5BLjxicj48L2Jsb2NrcXVvdGU+Cis8cD5TY2FubmVkIGFncmVlbWVudHMgbWF5IGFsc28gYmUgZW1haWxlZCBpbiBQREYgZm9ybSB0byBjbGEtc3VibWlzc2lvbnNAZ29vZ2xlLmNvbSwgc2VudCBieSBmYWNzaW1pbGUgdG8gKDY1MCkgODg3LTE2MjUsIG9yIDxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8jc2V0dGluZ3MsbmV3LWFncmVlbWVudCI+c2lnbmVkIGVsZWN0cm9uaWNhbGx5PC9hPgorLgorPC9wPgorPHA+UGxlYXNlIHJlYWQgdGhpcyBkb2N1bWVudCBjYXJlZnVsbHkgYmVmb3JlIHNpZ25pbmcgYW5kIGtlZXAgYSBjb3B5IGZvciB5b3VyIHJlY29yZHMuCis8L3A+Cis8cHJlPjxicj48YnI+RnVsbCBuYW1lOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fICBFLU1haWw6IF9fX19fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+TWFpbGluZyBBZGRyZXNzOiBfX19fX19fX19fX19fX19fX19fX19fICBUZWxlcGhvbmU6IF9fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICBGYWNzaW1pbGU6IF9fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48YnI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICBDb3VudHJ5OiAgIF9fX19fX19fX19fX19fX19fX188YnI+PGJyPjxicj48L3ByZT4KKzxwPllvdSBhY2NlcHQgYW5kIGFncmVlIHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIFlvdXIgcHJlc2VudCBhbmQgZnV0dXJlIENvbnRyaWJ1dGlvbnMgc3VibWl0dGVkIHRvIHRoZSBQcm9qZWN0LiBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluIHRvIHRoZSBQcm9qZWN0IExlYWRzIGFuZCByZWNpcGllbnRzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBQcm9qZWN0IExlYWRzLCBZb3UgcmVzZXJ2ZSBhbGwgcmlnaHQsIHRpdGxlLCBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIFlvdXIgQ29udHJpYnV0aW9ucy4KKzwvcD4KKzxwPjxicj48L3A+Cis8b2w+PGxpPjxwPkRlZmluaXRpb25zLiAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgbGVnYWwgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIG1ha2luZyB0aGlzIEdyYW50LiBGb3IgbGVnYWwgZW50aXRpZXMsIHRoZSBlbnRpdHkgbWFraW5nIGEgQ29udHJpYnV0aW9uIGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgYSBzaW5nbGUgQ29udHJpYnV0b3IuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byBhbiBleGlzdGluZyB3b3JrLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGJ5IFlvdSB0byB0aGUgUHJvamVjdCBMZWFkcyBmb3IgaW5jbHVzaW9uIGluLCBvciBkb2N1bWVudGF0aW9uIG9mLCBhbnkgb2YgdGhlIHByb2R1Y3RzIG1hbmFnZWQgb3IgbWFpbnRhaW5lZCBieSB0aGUgUHJvamVjdCBMZWFkcyAodGhlICJXb3JrIikuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIiBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50IHRvIHRoZSBQcm9qZWN0IExlYWRzIG9yIHRoZWlyIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLCBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZSBQcm9qZWN0IExlYWRzIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dCBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZSBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgWW91IGFzICJOb3QgYSBDb250cmlidXRpb24uIgorPC9wPgorPC9saT4KKzxsaT48cD5HcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBHcmFudCwgWW91IGhlcmVieSBncmFudCB0byB0aGUgUHJvamVjdCBMZWFkcyBhbmQgdG8gcmVjaXBpZW50cyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSB0aGUgUHJvamVjdCBMZWFkcyBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIFlvdXIgQ29udHJpYnV0aW9ucyBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLgorPC9wPgorPC9saT4KKzxsaT48cD5HcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBHcmFudCwgWW91IGhlcmVieSBncmFudCB0byB0aGUgUHJvamVjdCBMZWFkcyBhbmQgdG8gcmVjaXBpZW50cyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSB0aGUgUHJvamVjdCBMZWFkcyBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBZb3UgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IFlvdXIgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIFlvdXIgQ29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgYW55IGVudGl0eSBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgWW91IG9yIGFueSBvdGhlciBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgeW91ciBDb250cmlidXRpb24sIG9yIHRoZSBXb3JrIHRvIHdoaWNoIHlvdSBoYXZlIGNvbnRyaWJ1dGVkLCBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHRvIHRoYXQgZW50aXR5IHVuZGVyIHRoaXMgR3JhbnQgZm9yIHRoYXQgQ29udHJpYnV0aW9uIG9yIFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+WW91IHJlcHJlc2VudCB0aGF0IHlvdSBhcmUgbGVnYWxseSBlbnRpdGxlZCB0byBncmFudCB0aGUgYWJvdmUgbGljZW5zZS4gSWYgeW91ciBlbXBsb3llcihzKSBoYXMgcmlnaHRzIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSB0aGF0IHlvdSBjcmVhdGUgdGhhdCBpbmNsdWRlcyB5b3VyIENvbnRyaWJ1dGlvbnMsIHlvdSByZXByZXNlbnQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBwZXJtaXNzaW9uIHRvIG1ha2UgQ29udHJpYnV0aW9ucyBvbiBiZWhhbGYgb2YgdGhhdCBlbXBsb3llciwgdGhhdCB5b3VyIGVtcGxveWVyIGhhcyB3YWl2ZWQgc3VjaCByaWdodHMgZm9yIHlvdXIgQ29udHJpYnV0aW9ucyB0byB0aGUgUHJvamVjdCBMZWFkcywgb3IgdGhhdCB5b3VyIGVtcGxveWVyIGhhcyBleGVjdXRlZCBhIHNlcGFyYXRlIENvcnBvcmF0ZSBDb250cmlidXRvciBMaWNlbnNlIEdyYW50IHdpdGggdGhlIFByb2plY3QgTGVhZHMuCis8L3A+Cis8L2xpPgorPGxpPjxwPllvdSByZXByZXNlbnQgdGhhdCBlYWNoIG9mIFlvdXIgQ29udHJpYnV0aW9ucyBpcyBZb3VyIG9yaWdpbmFsIGNyZWF0aW9uIChzZWUgc2VjdGlvbiA3IGZvciBzdWJtaXNzaW9ucyBvbiBiZWhhbGYgb2Ygb3RoZXJzKS4gWW91IHJlcHJlc2VudCB0aGF0IFlvdXIgQ29udHJpYnV0aW9uIHN1Ym1pc3Npb25zIGluY2x1ZGUgY29tcGxldGUgZGV0YWlscyBvZiBhbnkgdGhpcmQtcGFydHkgbGljZW5zZSBvciBvdGhlciByZXN0cmljdGlvbiAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHJlbGF0ZWQgcGF0ZW50cyBhbmQgdHJhZGVtYXJrcykgb2Ygd2hpY2ggeW91IGFyZSBwZXJzb25hbGx5IGF3YXJlIGFuZCB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIFlvdXIgQ29udHJpYnV0aW9ucy4KKzwvcD4KKzwvbGk+Cis8bGk+PHA+WW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBZb3VyIENvbnRyaWJ1dGlvbnMsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IFlvdSBkZXNpcmUgdG8gcHJvdmlkZSBzdXBwb3J0LiBZb3UgbWF5IHByb3ZpZGUgc3VwcG9ydCBmb3IgZnJlZSwgZm9yIGEgZmVlLCBvciBub3QgYXQgYWxsLiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFlvdSBwcm92aWRlIFlvdXIgQ29udHJpYnV0aW9ucyBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi0gSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorPC9wPgorPC9saT4KKzxsaT48cD5TaG91bGQgWW91IHdpc2ggdG8gc3VibWl0IHdvcmsgdGhhdCBpcyBub3QgWW91ciBvcmlnaW5hbCBjcmVhdGlvbiwgWW91IG1heSBzdWJtaXQgaXQgdG8gdGhlIFByb2plY3QgTGVhZHMgc2VwYXJhdGVseSBmcm9tIGFueSBDb250cmlidXRpb24sIGlkZW50aWZ5aW5nIHRoZSBjb21wbGV0ZSBkZXRhaWxzIG9mIGl0cyBzb3VyY2UgYW5kIG9mIGFueSBsaWNlbnNlIG9yIG90aGVyIHJlc3RyaWN0aW9uIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcmVsYXRlZCBwYXRlbnRzLCB0cmFkZW1hcmtzLCBhbmQgbGljZW5zZSBhZ3JlZW1lbnRzKSBvZiB3aGljaCB5b3UgYXJlIHBlcnNvbmFsbHkgYXdhcmUsIGFuZCBjb25zcGljdW91c2x5IG1hcmtpbmcgdGhlIHdvcmsgYXMgIlN1Ym1pdHRlZCBvbiBiZWhhbGYgb2YgYSB0aGlyZC1wYXJ0eTogW25hbWVkIGhlcmVdIi48YnI+PC9wPgorPC9saT4KKzxsaT48cD5Zb3UgYWdyZWUgdG8gbm90aWZ5IHRoZSBQcm9qZWN0IExlYWRzIG9mIGFueSBmYWN0cyBvciBjaXJjdW1zdGFuY2VzIG9mIHdoaWNoIHlvdSBiZWNvbWUgYXdhcmUgdGhhdCB3b3VsZCBtYWtlIHRoZXNlIHJlcHJlc2VudGF0aW9ucyBpbmFjY3VyYXRlIGluIGFueSByZXNwZWN0LgorPC9wPgorPC9saT4KKzwvb2w+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9jb2RlLWxpbmVzLmpkIGIvcGRrL2RvY3Mvc291cmNlL2NvZGUtbGluZXMuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiNDAwZAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9jb2RlLWxpbmVzLmpkCkBAIC0wLDAgKzEsNzcgQEAKK3BhZ2UudGl0bGU9QW5kcm9pZCBDb2RlLUxpbmVzCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8cD5UaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IG1haW50YWlucyBhIGNvbXBsZXRlIHNvZnR3YXJlIHN0YWNrIGludGVuZGVkCit0byBiZSBwb3J0ZWQgYnkgT0VNcyBhbmQgb3RoZXIgZGV2aWNlIGltcGxlbWVudG9ycyB0byBydW4gb24gYWN0dWFsIGhhcmR3YXJlLgorQWNjb3JkaW5nbHksIHdlIG1haW50YWluIGEgbnVtYmVyIG9mICJjb2RlIGxpbmVzIiB0byBjbGVhcmx5IHNlcGFyYXRlIHRoZQorY3VycmVudCBzdGFibGUgdmVyc2lvbiBvZiBBbmRyb2lkIGZyb20gdW5zdGFibGUgZXhwZXJpbWVudGFsIHdvcmsuPC9wPgorPHA+VGhlIGNoYXJ0IGJlbG93IGRlcGljdHMgYXQgYSBjb25jZXB0dWFsIGxldmVsIGhvdyBBT1NQIG1hbmFnZXMgY29kZSBhbmQKK3JlbGVhc2VzLiBXZSdyZSByZWZlcnJpbmcgdG8gdGhlc2UgYXMgImNvZGUgbGluZXMiIGluc3RlYWQgb2YgImJyYW5jaGVzIgorc2ltcGx5IGJlY2F1c2UgYXQgYW55IGdpdmVuIG1vbWVudCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBicmFuY2ggZXh0YW50Citmb3IgYSBnaXZlbiAiY29kZSBsaW5lIi4gIEZvciBpbnN0YW5jZSwgd2hlbiBhIHJlbGVhc2UgaXMgY3V0LCBzb21ldGltZXMgdGhhdAord2lsbCBiZWNvbWUgYSBuZXcgYnJhbmNoIGluIGdpdCwgYW5kIHNvbWV0aW1lcyBub3QsIGJhc2VkIG9uIHRoZSBuZWVkcyBvZiB0aGUKK21vbWVudC48L3A+Cis8aW1nIHNyYz0ie0Bkb2NSb290fWltYWdlcy9jb2RlLWxpbmVzLnBuZyIvPgorPGgzPk5vdGVzIGFuZCBFeHBsYW5hdGlvbnM8L2gzPgorPHVsPgorPGxpPkEgPGk+cmVsZWFzZTwvaT4gY29ycmVzcG9uZHMgdG8gYSBmb3JtYWwgdmVyc2lvbiBvZiB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgc3VjaAorYXMgMS41LCAyLjAsIGFuZCBzbyBvbi4gR2VuZXJhbGx5IHNwZWFraW5nLCBhIHJlbGVhc2Ugb2YgdGhlIHBsYXRmb3JtCitjb3JyZXNwb25kcyB0byBhIHZlcnNpb24gb2YgdGhlIDxjb2RlPlNka1ZlcnNpb248L2NvZGU+IGZpZWxkIHVzZWQgaW4KK0FuZHJvaWRNYW5pZmVzdC54bWwgZmlsZXMsIGFuZCBkZWZpbmVkIGluIDxjb2RlPmZyYW1ld29ya3MvYmFzZS9hcGk8L2NvZGU+IGluCit0aGUgc291cmNlIHRyZWUuPC9saT4KKzxsaT5BbiA8aT51cHN0cmVhbTwvaT4gcHJvamVjdCBpcyBhbiBvcGVuLXNvdXJjZSBwcm9qZWN0IGZyb20gd2hpY2ggdGhlIEFuZHJvaWQKK3N0YWNrIGlzIHB1bGxpbmcgY29kZS4gVGhlc2UgaW5jbHVkZSBvYnZpb3VzIHByb2plY3RzIHN1Y2ggYXMgdGhlIExpbnV4IGtlcm5lbAorYW5kIFdlYktpdCwgYnV0IG92ZXIgdGltZSB3ZSBhcmUgbWlncmF0aW5nIHNvbWUgb2YgdGhlIHNlbWktYXV0b25vbW91cworQW5kcm9pZCBwcm9qZWN0cyAoc3VjaCBhcyBEYWx2aWssIHRoZSBBbmRyb2lkIFNESyB0b29scywgQmlvbmljLCBhbmQgc28gb24pIHRvCit3b3JrIGFzICJ1cHN0cmVhbSIgcHJvamVjdHMuIFRoZXNlIHdpbGwgYmUgZGV2ZWxvcGVkIGVudGlyZWx5IGluIHRoZSBwdWJsaWMKK3RyZWUsIGFuZCBzbmFwc2hvdHMgd2lsbCBiZSBwZXJpb2RpY2FsbHkgcHVsbGVkIGludG8gcmVsZWFzZXMuPC9saT4KKzxsaT5UaGUgZGlhZ3JhbSByZWZlcnMgdG8gIkVjbGFpciIgYW5kICJGbGFuIjsgaG93ZXZlciwgdGhleSBhcmUgc2ltcGx5CitwbGFjZWhvbGRlcnMsIGFuZCB0aGUgZGlhZ3JhbSBhY3R1YWxseSByZWZsZWN0cyB0aGUgb3ZlcmFsbCByZWxlYXNlIGFuZAorYnJhbmNoaW5nIHN0cmF0ZWd5LjwvbGk+Cis8bGk+QXQgYWxsIHRpbWVzLCB0aGUgUmVsZWFzZSBjb2RlLWxpbmUgKHdoaWNoIG1heSBhY3R1YWxseSBjb25zaXN0IG9mCittb3JlIHRoYW4gb25lIGFjdHVhbCBicmFuY2ggaW4gZ2l0KSBpcyBjb25zaWRlcmVkIHRoZSBzb2xlIGNhbm9uaWNhbCBzb3VyY2UKK2NvZGUgZm9yIGEgZ2l2ZW4gQW5kcm9pZCBwbGF0Zm9ybS4gT0VNcyBhbmQgb3RoZXIgZ3JvdXBzIGJ1aWxkaW5nIGRldmljZXMKK3Nob3VsZCBwdWxsIG9ubHkgZnJvbSBhIFJlbGVhc2UgYnJhbmNoLjwvbGk+Cis8bGk+V2Ugd2lsbCBiZSBzZXR0aW5nIHVwIGFuICJFeHBlcmltZW50YWwiIGNvZGUtbGluZSB0byBjYXB0dXJlIGNoYW5nZXMgZnJvbQordGhlIGNvbW11bml0eSwgc28gdGhhdCB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvbiwgd2l0aCBhbiBleWUgdG93YXJkIHN0YWJpbGl0eS48L2xpPgorPGxpPkNoYW5nZXMgdGhhdCBwcm92ZSBzdGFibGUgd2lsbCBldmVudHVhbGx5IGJlIHB1bGxlZCBpbnRvIGEgUmVsZWFzZQorYnJhbmNoLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgYXBwbHkgdG8gYnVnIGZpeGVzLCBhcHAgaW1wcm92ZW1lbnRzLCBhbmQKK290aGVyIHRoaW5ncyB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIEFQSXMgb2YgdGhlIHBsYXRmb3JtLjwvbGk+Cis8bGk+Q2hhbmdlcyB3aWxsIGJlIHB1bGxlZCBpbnRvIFJlbGVhc2UgYnJhbmNoZXMgZnJvbSB1cHN0cmVhbSBwcm9qZWN0cworKGluY2x1ZGUgdGhlIEFuZHJvaWQgInVwc3RyZWFtIiBwcm9qZWN0cykgYXMgbmVjZXNzYXJ5LjwvbGk+Cis8bGk+VGhlICJuKzEidGggdmVyc2lvbiAodGhhdCBpcywgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHRoZSBmcmFtZXdvcmsgYW5kCitwbGF0Zm9ybSBBUElzKSB3aWxsIGJlIGRldmVsb3BlZCBieSBHb29nbGUgaW50ZXJuYWxseS4gKFNlZSBiZWxvdyBmb3IKK2RldGFpbHMuKTwvbGk+Cis8bGk+Q2hhbmdlcyB3aWxsIGJlIHB1bGxlZCBmcm9tIHVwc3RyZWFtLCBSZWxlYXNlLCBhbmQgRXhwZXJpbWVudGFsIGJyYW5jaGVzCitpbnRvIEdvb2dsZSdzIHByaXZhdGUgYnJhbmNoIGFzIG5lY2Vzc2FyeS48L2xpPgorPGxpPldoZW4gdGhlIHBsYXRmb3JtIEFQSXMgZm9yIHRoZSBuZXh0IHZlcnNpb24gaGF2ZSBzdGFiaWxpemVkIGFuZCBiZWVuIGZ1bGx5Cit0ZXN0ZWQsIEdvb2dsZSB3aWxsIGN1dCBhIHJlbGVhc2Ugb2YgdGhlIG5leHQgcGxhdGZvcm0gdmVyc2lvbi4gKFRoaXMKK3NwZWNpZmljYWxseSByZWZlcnMgdG8gYSBuZXcgPGNvZGU+U2RrVmVyc2lvbjwvY29kZT4uKSBUaGlzIHdpbGwgYWxzbworY29ycmVzcG9uZCB0byB0aGUgaW50ZXJuYWwgY29kZS1saW5lIGJlaW5nIG1hZGUgYSBwdWJsaWMgUmVsZWFzZSBicmFuY2gsIGFuZCB0aGUKK25ldyBjdXJyZW50IHBsYXRmb3JtIGNvZGUtbGluZS48L2xpPgorPGxpPldoZW4gYSBuZXcgcGxhdGZvcm0gdmVyc2lvbiBpcyBjdXQsIGEgY29ycmVzcG9uZGluZyBFeHBlcmltZW50YWwKK2NvZGUtbGluZS48L2xpPgorPC91bD4KKzxoMz5BYm91dCBQcml2YXRlIENvZGUtTGluZXM8L2gzPgorPHA+VGhlIHNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFib3ZlIGluY2x1ZGVzIGEgY29kZS1saW5lIHRoYXQgR29vZ2xlIHdpbGwKK2tlZXAgcHJpdmF0ZS4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBmb2N1cyBhdHRlbnRpb24gb24gdGhlIGN1cnJlbnQgcHVibGljCit2ZXJzaW9uIG9mIEFuZHJvaWQuPC9wPgorPHA+T0VNcyBhbmQgb3RoZXIgZGV2aWNlIGJ1aWxkZXJzIG5hdHVyYWxseSB3YW50IHRvIHNoaXAgZGV2aWNlcyB3aXRoIHRoZQorbGF0ZXN0IHZlcnNpb24gb2YgQW5kcm9pZC4gU2ltaWxhcmx5LCBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGRvbid0IHdhbnQgdG8KK2RlYWwgd2l0aCBtb3JlIGV4dGFudCBwbGF0Zm9ybSB2ZXJzaW9ucyB0aGFuIHN0cmljdGx5IG5lY2Vzc2FyeS4gIE1lYW53aGlsZSwKK0dvb2dsZSByZXRhaW5zIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgc3RyYXRlZ2ljIGRpcmVjdGlvbiBvZiBBbmRyb2lkIGFzIGEKK3BsYXRmb3JtIGFuZCBhIHByb2R1Y3QuIE91ciBhcHByb2FjaCBpcyBiYXNlZCBvbiBmb2N1c2luZyBvbiBhIHNtYWxsIG51bWJlciBvZgorZmxhZ3NoaXAgZGV2aWNlcyB0byBkcml2ZSBmZWF0dXJlcywgYW5kIHNlY3VyZSBwcm90ZWN0aW9ucyBvZiBBbmRyb2lkLXJlbGF0ZWQKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSB0aHJvdWdoIHBhdGVudHMgYW5kIHRoZSBsaWtlLjwvcD4KKzxwPkFzIGEgcmVzdWx0LCBHb29nbGUgZnJlcXVlbnRseSBoYXMgcG9zc2Vzc2lvbiBvZiBjb25maWRlbnRpYWwKK2luZm9ybWF0aW9uIG9mIHRoaXJkIHBhcnRpZXMsIGFuZCB3ZSBtdXN0IHJlZnJhaW4gZnJvbSByZXZlYWxpbmcgcGF0ZW50YWJsZQorZmVhdHVyZXMgdW50aWwgd2UndmUgc2VjdXJlZCB0aGUgYXBwcm9wcmlhdGUgcHJvdGVjdGlvbnMuIE1lYW53aGlsZSwgdGhlcmUgYXJlCityZWFsIHJpc2tzIHRvIHRoZSBwbGF0Zm9ybSBhcmlzaW5nIGZyb20gaGF2aW5nIHRvbyBtYW55IHBsYXRmb3JtIHZlcnNpb25zCitleHRhbnQgYXQgb25jZS4gRm9yIHRoZXNlIHJlYXNvbnMsIHdlIGhhdmUgc3RydWN0dXJlZCB0aGUgb3Blbi1zb3VyY2UgcHJvamVjdAorLS0gaW5jbHVkaW5nIHRoaXJkLXBhcnR5IGNvbnRyaWJ1dGlvbnMgLS0gdG8gZm9jdXMgb24gdGhlIGN1cnJlbnRseS1wdWJsaWMKK3N0YWJsZSB2ZXJzaW9uIG9mIEFuZHJvaWQuICJEZWVwIGRldmVsb3BtZW50IiBvbiB0aGUgbmV4dCB2ZXJzaW9uIG9mIHRoZQorcGxhdGZvcm0gd2lsbCBoYXBwZW4gaW4gcHJpdmF0ZSwgdW50aWwgaXQncyByZWFkeSB0byBiZWNvbWUgYW4gb2ZmaWNpYWwKK3JlbGVhc2UuPC9wPgorPHA+V2UgcmVjb2duaXplIHRoYXQgbWFueSBjb250cmlidXRvcnMgd2lsbCBkaXNhZ3JlZSB3aXRoIHRoaXMgYXBwcm9hY2guIFdlCityZXNwZWN0IHRoYXQgb3RoZXJzIG1heSBoYXZlIGEgZGlmZmVyZW50IHBvaW50IG9mIHZpZXc7IGhvd2V2ZXIsIHRoaXMgaXMgdGhlCithcHByb2FjaCB0aGF0IHdlIGZlZWwgaXMgYmVzdCwgYW5kIHRoZSBvbmUgd2UndmUgY2hvc2VuIHRvIGltcGxlbWVudC48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvY29kZS1zdHlsZS5qZCBiL3Bkay9kb2NzL3NvdXJjZS9jb2RlLXN0eWxlLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTk0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvY29kZS1zdHlsZS5qZApAQCAtMCwwICsxLDQzNSBAQAorcGFnZS50aXRsZT1Db2RlIFN0eWxlIEd1aWRlbGluZXMgZm9yIENvbnRyaWJ1dG9ycworZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPGRpdj4KKzxwPlRoZSBydWxlcyBiZWxvdyBhcmUgbm90IGd1aWRlbGluZXMgb3IgcmVjb21tZW5kYXRpb25zLCBidXQgc3RyaWN0IHJ1bGVzLgorQ29udHJpYnV0aW9ucyB0byBBbmRyb2lkIGdlbmVyYWxseSA8Yj53aWxsIG5vdCBiZSBhY2NlcHRlZCBpZiB0aGV5IGRvIG5vdAorYWRoZXJlIHRvIHRoZXNlIHJ1bGVzLjwvYj4KKzwvcD4KKzxwPk5vdCBhbGwgZXhpc3RpbmcgY29kZSBmb2xsb3dzIHRoZXNlIHJ1bGVzLCBidXQgYWxsIG5ldyBjb2RlIGlzIGV4cGVjdGVkIHRvLjwvcD4KKzxoMT48YT5KYXZhIExhbmd1YWdlIFJ1bGVzPC9hPgorPC9oMT4KKzxwPldlIGZvbGxvdyBzdGFuZGFyZCBKYXZhIGNvZGluZyBjb252ZW50aW9ucy4gV2UgYWRkIGEgZmV3IHJ1bGVzOgorPC9wPgorPG9sPjxsaT48YSBocmVmPSIjZXhjZXB0aW9uc0lnbm9yZSI+RXhjZXB0aW9uczwvYT4KKzogTmV2ZXIgY2F0Y2ggYW5kIGlnbm9yZSB0aGVtIHdpdGhvdXQgZXhwbGFuYXRpb24uCis8L2xpPgorPGxpPjxhIGhyZWY9IiNleGNlcHRpb25zQWxsIj5FeGNlcHRpb25zPC9hPgorOiBkbyBub3QgY2F0Y2ggZ2VuZXJpYyBFeGNlcHRpb24sIGV4Y2VwdCBpbiBsaWJyYXJ5IGNvZGUgYXQgdGhlIHJvb3Qgb2YgdGhlIHN0YWNrLgorPC9saT4KKzxsaT48YSBocmVmPSIjZmluYWxpemVycyI+RmluYWxpemVyczwvYT4KKzogZ2VuZXJhbGx5IGRvbid0IHVzZSB0aGVtLgorPC9saT4KKzxsaT48YSBocmVmPSIjaW1wb3J0cyI+SW1wb3J0czwvYT4KKzogRnVsbHkgcXVhbGlmeSBpbXBvcnRzCis8L2xpPgorPC9vbD4KKzxoMT48YT5KYXZhIExpYnJhcnkgUnVsZXM8L2E+Cis8L2gxPgorPHA+VGhlcmUgYXJlIGNvbnZlbnRpb25zIGZvciB1c2luZyBBbmRyb2lkJ3MgSmF2YSBsaWJyYXJpZXMgYW5kIHRvb2xzLiBJbiBzb21lIGNhc2VzLCB0aGUgY29udmVudGlvbiBoYXMgY2hhbmdlZCBpbiBpbXBvcnRhbnQgd2F5cyBhbmQgb2xkZXIgY29kZSBtaWdodCB1c2UgYSBkZXByZWNhdGVkIHBhdHRlcm4gb3IgbGlicmFyeS4gV2hlbiB3b3JraW5nIHdpdGggc3VjaCBjb2RlLCBpdCdzIG9rYXkgdG8gY29udGludWUgdGhlIGV4aXN0aW5nIHN0eWxlIChzZWUgPGEgaHJlZj0iI2NvbnNpc3RlbmN5Ij5Db25zaXN0ZW5jeTwvYT4KKykuIFdoZW4gY3JlYXRpbmcgbmV3IGNvbXBvbmVudHMgbmV2ZXIgdXNlIGRlcHJlY2F0ZWQgbGlicmFyaWVzLgorPC9wPgorPGgxPjxhPkphdmEgU3R5bGUgUnVsZXM8L2E+Cis8L2gxPgorPHA+UHJvZ3JhbXMgYXJlIG11Y2ggZWFzaWVyIHRvIG1haW50YWluIHdoZW4gYWxsIGZpbGVzIGhhdmUgYSBjb25zaXN0ZW50IHN0eWxlLiBXZSBmb2xsb3cgdGhlIHN0YW5kYXJkIEphdmEgY29kaW5nIHN0eWxlLCBhcyBkZWZpbmVkIGJ5IFN1biBpbiB0aGVpciA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvY29kZWNvbnYvaHRtbC9Db2RlQ29udlRPQy5kb2MuaHRtbCI+Q29kZSBDb252ZW50aW9ucyBmb3IgdGhlIEphdmEgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2U8L2E+CissIHdpdGggYSBmZXcgZXhjZXB0aW9ucyBhbmQgYWRkaXRpb25zLiBUaGlzIHN0eWxlIGd1aWRlIGlzIGNvbXByZWhlbnNpdmUgYW5kIGRldGFpbGVkIGFuZCBpcyBpbiBjb21tb24gdXNhZ2UgaW4gdGhlIEphdmEgY29tbXVuaXR5LgorPC9wPgorPHA+SW4gYWRkaXRpb24sIHdlIGVuZm9yY2UgdGhlIGZvbGxvd2luZyBzdHlsZSBydWxlczoKKzwvcD4KKzxvbD48bGk+PGEgaHJlZj0iI2phdmFkb2MiPkNvbW1lbnRzL0phdmFkb2M8L2E+Cis6IHdyaXRlIGl0OyB1c2Ugc3RhbmRhcmQgc3R5bGUKKzwvbGk+Cis8bGk+PGEgaHJlZj0iI3Nob3J0bWV0aG9kcyI+U2hvcnQgbWV0aG9kczwvYT4KKzogZG9uJ3Qgd3JpdGUgZ2lhbnQgbWV0aG9kcworPC9saT4KKzxsaT5GaWVsZHM6IHNob3VsZCBlaXRoZXIgYmUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwgb3IgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBtZXRob2RzIHRoYXQgdXNlIHRoZW0KKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2xvY2FsdmFyaWFibGVzIj5Mb2NhbCB2YXJpYWJsZXM8L2E+Cis6IGxpbWl0IHRoZSBzY29wZQorPC9saT4KKzxsaT48YSBocmVmPSIjaW1wb3J0X3N0eWxlIj5JbXBvcnRzPC9hPgorOiBhbmRyb2lkOyB0aGlyZCBwYXJ0eSBhbHBoYWJldGljYWw7IGphdmEoeCkKKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2luZGVudGF0aW9uIj5JbmRlbnRhdGlvbjwvYT4KKzogNCBzcGFjZXMsIG5vIHRhYnMuCis8L2xpPgorPGxpPjxhIGhyZWY9IiNsaW5lbGVuIj5MaW5lIGxlbmd0aDwvYT4KKzogMTAwIGNvbHVtbnMKKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2ZpZWxkX25hbWVzIj5GaWVsZCBuYW1lczwvYT4KKzogTm9uLXB1YmxpYywgbm9uLXN0YXRpYyBmaWVsZHMgc3RhcnQgd2l0aCBtLiBTdGF0aWMgZmllbGRzIHN0YXJ0IHMuCis8L2xpPgorPGxpPjxhIGhyZWY9IiNicmFjZXMiPkJyYWNlczwvYT4KKzogT3BlbmluZyBicmFjZXMgZG9uJ3QgZ28gb24gdGhlaXIgb3duIGxpbmUuCis8L2xpPgorPGxpPjxhIGhyZWY9IiNhbm5vdGF0aW9ucyI+QW5ub3RhdGlvbnM8L2E+Cis6IFVzZSB0aGUgc3RhbmRhcmQgYW5ub3RhdGlvbnMuCis8L2xpPgorPGxpPjxhIGhyZWY9IiNhY3JvbnltcyI+QWNyb255bXMgYXJlIHdvcmRzPC9hPgorOiBUcmVhdCBhY3JvbnltcyBhcyB3b3JkcyBpbiBuYW1lcywgeWllbGRpbmcgWG1sSHR0cFJlcXVlc3QsIGdldFVybCgpLCBldGMuCis8L2xpPgorPGxpPjxhIGhyZWY9IiN0b2RvIj5UT0RPIHN0eWxlPC9hPgorOiAiVE9ETzogd3JpdGUgdGhpcyBkZXNjcmlwdGlvbiIKKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2NvbnNpc3RlbmN5Ij5Db25zaXN0ZW5jeTwvYT4KKzogTG9vayBhdCB3aGF0J3MgYXJvdW5kIHlvdSEKKzwvbGk+Cis8bGk+PGEgaHJlZj0iI2xvZ2dpbmciPkxvZ2dpbmc8L2E+Cis6IEJlIGNhcmVmdWwgd2l0aCBsb2dnaW5nLiBJdCdzIGV4cGVuc2l2ZS4KKzwvbGk+Cis8L29sPgorPGgxPjxhPkphdmF0ZXN0cyBTdHlsZSBSdWxlczwvYT4KKzwvaDE+Cis8b2w+PGxpPjxhIGhyZWY9IiN0ZXN0bWV0aG9kbmFtZXMiPk5hbWluZyB0ZXN0IG1ldGhvZHM8L2E+Cis6IHRlc3RNZXRob2Rfc3BlY2lmaWNDYXNlIGlzIG9rCis8L2xpPgorPC9vbD4KKzxocj48aDI+CitKYXZhIExhbmd1YWdlIFJ1bGVzCis8L2gyPgorPGgyPjxhPkV4Y2VwdGlvbnM6IGRvIG5vdCBpZ25vcmU8L2E+Cis8L2gyPgorU29tZXRpbWVzIGl0IGlzIHRlbXB0aW5nIHRvIHdyaXRlIGNvZGUgdGhhdCBjb21wbGV0ZWx5IGlnbm9yZXMgYW4gZXhjZXB0aW9uIGxpa2UgdGhpczoKKzxwcmU+dm9pZCBzZXRTZXJ2ZXJQb3J0KFN0cmluZyB2YWx1ZSkgezxicj50cnkgezxicj5zZXJ2ZXJQb3J0ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7PGJyPn0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7PGJyPn08YnI+fTxicj48YnI+PC9wcmU+Cis8cD5Zb3UgbXVzdCBuZXZlciBkbyB0aGlzLiBXaGlsZSB5b3UgbWF5IHRoaW5rIHRoYXQgeW91ciBjb2RlIHdpbGwgbmV2ZXIgZW5jb3VudGVyIHRoaXMgZXJyb3IgY29uZGl0aW9uIG9yIHRoYXQgaXQgaXMgbm90IGltcG9ydGFudCB0byBoYW5kbGUgaXQsIGlnbm9yaW5nIGV4Y2VwdGlvbnMgbGlrZSBhYm92ZSBjcmVhdGVzIG1pbmVzIGluIHlvdXIgY29kZSBmb3Igc29tZW9uZSBlbHNlIHRvIHRyaXAgb3ZlciBzb21lIGRheS4gWW91IG11c3QgaGFuZGxlIGV2ZXJ5IEV4Y2VwdGlvbiBpbiB5b3VyIGNvZGUgaW4gc29tZSBwcmluY2lwbGVkIHdheS4gVGhlIHNwZWNpZmljIGhhbmRsaW5nIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGNhc2UuCis8L3A+Cis8YmxvY2txdW90ZT5Bbnl0aW1lIHNvbWVib2R5IGhhcyBhbiBlbXB0eSBjYXRjaCBjbGF1c2UgdGhleSBzaG91bGQgaGF2ZSBhIGNyZWVweSBmZWVsaW5nLiBUaGVyZSBhcmUgZGVmaW5pdGVseSB0aW1lcyB3aGVuIGl0IGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvLCBidXQgYXQgbGVhc3QgeW91IGhhdmUgdG8gdGhpbmsgYWJvdXQgaXQuIEluIEphdmEgeW91IGNhbid0IGVzY2FwZSB0aGUgY3JlZXB5IGZlZWxpbmcuPGJyPjxkaXY+LTxhIGhyZWY9Imh0dHA6Ly93d3cuYXJ0aW1hLmNvbS9pbnR2L3NvbGlkNC5odG1sIj5KYW1lcyBHb3NsaW5nPC9hPgorPC9kaXY+Cis8L2Jsb2NrcXVvdGU+Cis8cD5BY2NlcHRhYmxlIGFsdGVybmF0aXZlcyAoaW4gb3JkZXIgb2YgcHJlZmVyZW5jZSkgYXJlOgorPC9wPgorPHVsPjxsaT5UaHJvdyB0aGUgZXhjZXB0aW9uIHVwIHRvIHRoZSBjYWxsZXIgb2YgeW91ciBtZXRob2QuCis8cHJlPnZvaWQgc2V0U2VydmVyUG9ydChTdHJpbmcgdmFsdWUpIHRocm93cyBOdW1iZXJGb3JtYXRFeGNlcHRpb24gezxicj5zZXJ2ZXJQb3J0ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7PGJyPn08YnI+PGJyPjwvcHJlPgorPC9saT4KKzxsaT5UaHJvdyBhIG5ldyBleGNlcHRpb24gdGhhdCdzIGFwcHJvcHJpYXRlIHRvIHlvdXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uCis8cHJlPnZvaWQgc2V0U2VydmVyUG9ydChTdHJpbmcgdmFsdWUpIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uIHs8YnI+dHJ5IHs8YnI+c2VydmVyUG9ydCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOzxicj59IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgezxicj50aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigiUG9ydCAiICsgdmFsdWUgKyAiIGlzIG5vdCB2YWxpZC4iKTs8YnI+fTxicj48YnI+PC9wcmU+Cis8L2xpPgorPGxpPkhhbmRsZSB0aGUgZXJyb3IgZ3JhY2VmdWxseSBhbmQgc3Vic3RpdHV0ZSBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBpbiB0aGUgY2F0Y2gge30gYmxvY2suCis8cHJlPi8qKiBTZXQgcG9ydC4gSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLCA4MCBpcyBzdWJzdGl0dXRlZC4gKi88YnI+dm9pZCBzZXRTZXJ2ZXJQb3J0KFN0cmluZyB2YWx1ZSkgezxicj50cnkgezxicj5zZXJ2ZXJQb3J0ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7PGJyPn0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7PGJyPnNlcnZlclBvcnQgPSA4MDsgIC8vIGRlZmF1bHQgcG9ydCBmb3Igc2VydmVyIDxicj59PGJyPjwvcHJlPgorPC9saT4KKzxsaT5DYXRjaCB0aGUgRXhjZXB0aW9uIGFuZCB0aHJvdyBhIG5ldyBSdW50aW1lRXhjZXB0aW9uLiBUaGlzIGlzIGRhbmdlcm91czogb25seSBkbyBpdCBpZiB5b3UgYXJlIHBvc2l0aXZlIHRoYXQgaWYgdGhpcyBlcnJvciBvY2N1cnMsIHRoZSBhcHByb3ByaWF0ZSB0aGluZyB0byBkbyBpcyBjcmFzaC4KKzxwcmU+LyoqIFNldCBwb3J0LiBJZiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIsIGRpZS4gKi88YnI+dm9pZCBzZXRTZXJ2ZXJQb3J0KFN0cmluZyB2YWx1ZSkgezxicj50cnkgezxicj5zZXJ2ZXJQb3J0ID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7PGJyPn0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7PGJyPnRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJwb3J0ICIgKyB2YWx1ZSAiIGlzIGludmFsaWQsICIsIGUpOzxicj59PGJyPjwvcHJlPgorTm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24gaXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgUnVudGltZUV4Y2VwdGlvbi4gVGhpcyB3cmFwcGVkIGV4Y2VwdGlvbiBwYXJhZGlnbSBpcyB2ZXJ5IHVzZWZ1bCBidXQgb25seSB3b3JrcyBpbiBKYXZhIDEuNC4gSWYgeW91ciBjb2RlIG11c3QgY29tcGlsZSB1bmRlciBKYXZhIDEuMywgeW91IHdpbGwgbmVlZCB0byBvbWl0IHRoZSBleGNlcHRpb24gdGhhdCBpcyB0aGUgY2F1c2UuPGJyPjxicj48L2xpPgorPGxpPkxhc3QgcmVzb3J0OiBpZiB5b3UgYXJlIGNvbmZpZGVudCB0aGF0IGFjdHVhbGx5IGlnbm9yaW5nIHRoZSBleGNlcHRpb24gaXMgYXBwcm9wcmlhdGUgdGhlbiB5b3UgbWF5IGlnbm9yZSBpdCwgYnV0IHlvdSBtdXN0IGFsc28gY29tbWVudCB3aHkgd2l0aCBhIGdvb2QgcmVhc29uOgorPHByZT4vKiogSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLCBvcmlnaW5hbCBwb3J0IG51bWJlciBpcyB1c2VkLiAqLzxicj52b2lkIHNldFNlcnZlclBvcnQoU3RyaW5nIHZhbHVlKSB7PGJyPnRyeSB7PGJyPnNlcnZlclBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTs8YnI+fSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHs8YnI+Ly8gTWV0aG9kIGlzIGRvY3VtZW50ZWQgdG8ganVzdCBpZ25vcmUgaW52YWxpZCB1c2VyIGlucHV0Ljxicj4vLyBzZXJ2ZXJQb3J0IHdpbGwganVzdCBiZSB1bmNoYW5nZWQuPGJyPn08YnI+fTxicj48L3ByZT4KKzwvbGk+Cis8L3VsPgorPGgyPjxhPkV4Y2VwdGlvbnM6IGRvIG5vdCBjYXRjaCBnZW5lcmljIEV4Y2VwdGlvbjwvYT4KKzwvaDI+CitTb21ldGltZXMgaXQgaXMgdGVtcHRpbmcgdG8gYmUgbGF6eSB3aGVuIGNhdGNoaW5nIGV4Y2VwdGlvbnMgYW5kIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6Cis8cHJlPnRyeSB7PGJyPnNvbWVDb21wbGljYXRlZElPRnVuY3Rpb24oKTsgICAgICAgIC8vIG1heSB0aHJvdyBJT0V4Y2VwdGlvbiA8YnI+c29tZUNvbXBsaWNhdGVkUGFyc2luZ0Z1bmN0aW9uKCk7ICAgLy8gbWF5IHRocm93IFBhcnNpbmdFeGNlcHRpb24gPGJyPnNvbWVDb21wbGljYXRlZFNlY3VyaXR5RnVuY3Rpb24oKTsgIC8vIG1heSB0aHJvdyBTZWN1cml0eUV4Y2VwdGlvbiA8YnI+Ly8gcGhldywgbWFkZSBpdCBhbGwgdGhlIHdheSA8YnI+fSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgICAgICAgICAgICAgICAvLyBJJ2xsIGp1c3QgY2F0Y2ggYWxsIGV4Y2VwdGlvbnMgPGJyPmhhbmRsZUVycm9yKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggb25lIGdlbmVyaWMgaGFuZGxlciE8YnI+fTxicj48YnI+PC9wcmU+CitZb3Ugc2hvdWxkIG5vdCBkbyB0aGlzLiBJbiBhbG1vc3QgYWxsIGNhc2VzIGl0IGlzIGluYXBwcm9wcmlhdGUgdG8gY2F0Y2ggZ2VuZXJpYyBFeGNlcHRpb24gb3IgVGhyb3dhYmxlLCBwcmVmZXJhYmx5IG5vdCBUaHJvd2FibGUsIGJlY2F1c2UgaXQgaW5jbHVkZXMgRXJyb3IgZXhjZXB0aW9ucyBhcyB3ZWxsLiBJdCBpcyB2ZXJ5IGRhbmdlcm91cy4gSXQgbWVhbnMgdGhhdCBFeGNlcHRpb25zIHlvdSBuZXZlciBleHBlY3RlZCAoaW5jbHVkaW5nIFJ1bnRpbWVFeGNlcHRpb25zIGxpa2UgQ2xhc3NDYXN0RXhjZXB0aW9uKSBlbmQgdXAgZ2V0dGluZyBjYXVnaHQgaW4gYXBwbGljYXRpb24tbGV2ZWwgZXJyb3IgaGFuZGxpbmcuIEl0IG9ic2N1cmVzIHRoZSBmYWlsdXJlIGhhbmRsaW5nIHByb3BlcnRpZXMgb2YgeW91ciBjb2RlLiBJdCBtZWFucyBpZiBzb21lb25lIGFkZHMgYSBuZXcgdHlwZSBvZiBFeGNlcHRpb24gaW4gdGhlIGNvZGUgeW91J3JlIGNhbGxpbmcsIHRoZSBjb21waWxlciB3b24ndCBoZWxwIHlvdSByZWFsaXplIHlvdSBuZWVkIHRvIGhhbmRsZSB0aGF0IGVycm9yIGRpZmZlcmVudGx5LiBBbmQgaW4gbW9zdCBjYXNlcyB5b3Ugc2hvdWxkbid0IGJlIGhhbmRsaW5nIGRpZmZlcmVudCB0eXBlcyBvZiBleGNlcHRpb24gdGhlIHNhbWUgd2F5LCBhbnl3YXkuCis8cD5UaGVyZSBhcmUgcmFyZSBleGNlcHRpb25zIHRvIHRoaXMgcnVsZTogY2VydGFpbiB0ZXN0IGNvZGUgYW5kIHRvcC1sZXZlbCBjb2RlIHdoZXJlIHlvdSB3YW50IHRvIGNhdGNoIGFsbCBraW5kcyBvZiBlcnJvcnMgKHRvIHByZXZlbnQgdGhlbSBmcm9tIHNob3dpbmcgdXAgaW4gYSBVSSwgb3IgdG8ga2VlcCBhIGJhdGNoIGpvYiBydW5uaW5nKS4gSW4gdGhhdCBjYXNlIHlvdSBtYXkgY2F0Y2ggZ2VuZXJpYyBFeGNlcHRpb24gKG9yIFRocm93YWJsZSkgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseS4gWW91IHNob3VsZCB0aGluayB2ZXJ5IGNhcmVmdWxseSBiZWZvcmUgZG9pbmcgdGhpcywgdGhvdWdoLCBhbmQgcHV0IGluIGNvbW1lbnRzIGV4cGxhaW5pbmcgd2h5IGl0IGlzIHNhZmUgaW4gdGhpcyBwbGFjZS4KKzwvcD4KKzxwPkFsdGVybmF0aXZlcyB0byBjYXRjaGluZyBnZW5lcmljIEV4Y2VwdGlvbjoKKzwvcD4KKzx1bD48bGk+Q2F0Y2ggZWFjaCBleGNlcHRpb24gc2VwYXJhdGVseSBhcyBzZXBhcmF0ZSBjYXRjaCBibG9ja3MgYWZ0ZXIgYSBzaW5nbGUgdHJ5LiBUaGlzIGNhbiBiZSBhd2t3YXJkIGJ1dCBpcyBzdGlsbCBwcmVmZXJhYmxlIHRvIGNhdGNoaW5nIGFsbCBFeGNlcHRpb25zLiBCZXdhcmUgcmVwZWF0aW5nIHRvbyBtdWNoIGNvZGUgaW4gdGhlIGNhdGNoIGJsb2Nrcy4KKzwvbGk+Cis8bGk+UmVmYWN0b3IgeW91ciBjb2RlIHRvIGhhdmUgbW9yZSBmaW5lLWdyYWluZWQgZXJyb3IgaGFuZGxpbmcsIHdpdGggbXVsdGlwbGUgdHJ5IGJsb2Nrcy4gU3BsaXQgdXAgdGhlIElPIGZyb20gdGhlIHBhcnNpbmcsIGhhbmRsZSBlcnJvcnMgc2VwYXJhdGVseSBpbiBlYWNoIGNhc2UuCis8L2xpPgorPGxpPlJldGhyb3cgdGhlIGV4Y2VwdGlvbi4gTWFueSB0aW1lcyB5b3UgZG9uJ3QgbmVlZCB0byBjYXRjaCB0aGUgZXhjZXB0aW9uIGF0IHRoaXMgbGV2ZWwgYW55d2F5LCBqdXN0IGxldCB0aGUgbWV0aG9kIHRocm93IGl0LgorPC9saT4KKzwvdWw+CitSZW1lbWJlcjogZXhjZXB0aW9ucyBhcmUgeW91ciBmcmllbmQhIFdoZW4gdGhlIGNvbXBpbGVyIGNvbXBsYWlucyB5b3UncmUgbm90IGNhdGNoaW5nIGFuIGV4Y2VwdGlvbiwgZG9uJ3Qgc2Nvd2wuIFNtaWxlOiB0aGUgY29tcGlsZXIganVzdCBtYWRlIGl0IGVhc2llciBmb3IgeW91IHRvIGNhdGNoIHJ1bnRpbWUgcHJvYmxlbXMgaW4geW91ciBjb2RlLgorPGgyPjxhPkZpbmFsaXplcnM8L2E+Cis8L2gyPgorPHA+PGI+V2hhdCBpdCBpczwvYj4KKzogRmluYWxpemVycyBhcmUgYSB3YXkgdG8gaGF2ZSBhIGNodW5rIG9mIGNvZGUgZXhlY3V0ZWQgd2hlbiBhbiBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCis8L3A+Cis8cD48Yj5Qcm9zPC9iPgorOiBjYW4gYmUgaGFuZHkgZm9yIGRvaW5nIGNsZWFudXAsIHBhcnRpY3VsYXJseSBvZiBleHRlcm5hbCByZXNvdXJjZXMuCis8L3A+Cis8cD48Yj5Db25zPC9iPgorOiB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBhcyB0byB3aGVuIGEgZmluYWxpemVyIHdpbGwgYmUgY2FsbGVkLCBvciBldmVuIHRoYXQgaXQgd2lsbCBiZSBjYWxsZWQgYXQgYWxsLgorPC9wPgorPHA+PGI+RGVjaXNpb248L2I+Cis6IHdlIGRvbid0IHVzZSBmaW5hbGl6ZXJzLiBJbiBtb3N0IGNhc2VzLCB5b3UgY2FuIGRvIHdoYXQgeW91IG5lZWQgZnJvbSBhIGZpbmFsaXplciB3aXRoIGdvb2QgZXhjZXB0aW9uIGhhbmRsaW5nLiBJZiB5b3UgYWJzb2x1dGVseSBuZWVkIGl0LCBkZWZpbmUgYSBjbG9zZSgpIG1ldGhvZCAob3IgdGhlIGxpa2UpIGFuZCBkb2N1bWVudCBleGFjdGx5IHdoZW4gdGhhdCBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkLiBTZWUgSW5wdXRTdHJlYW0gZm9yIGFuIGV4YW1wbGUuIEluIHRoaXMgY2FzZSBpdCBpcyBhcHByb3ByaWF0ZSBidXQgbm90IHJlcXVpcmVkIHRvIHByaW50IGEgc2hvcnQgbG9nIG1lc3NhZ2UgZnJvbSB0aGUgZmluYWxpemVyLCBhcyBsb25nIGFzIGl0IGlzIG5vdCBleHBlY3RlZCB0byBmbG9vZCB0aGUgbG9ncy4KKzwvcD4KKzxwPlRoZSBvbmUgZXhjZXB0aW9uIGlzIGl0IGlzIE9LIHRvIHdyaXRlIGEgZmluYWxpemVyIGlmIGFsbCBpdCBkb2VzIGlzIG1ha2UgY2FsbHMgdG8gWC5hc3NlcnRUcnVlKCkuCis8L3A+Cis8aDI+PGE+SW1wb3J0czwvYT4KKzwvaDI+Cis8aDM+CitXaWxkY2FyZHMgaW4gaW1wb3J0cworPC9oMz4KKzxwPjxiPldoYXQgaXQgaXM8L2I+Cis6IFdoZW4geW91IHdhbnQgdG8gdXNlIGNsYXNzIEJhciBmcm9tIHBhY2thZ2UgZm9vLHRoZXJlIGFyZSB0d28gcG9zc2libGUgd2F5cyB0byBpbXBvcnQgaXQ6Cis8L3A+Cis8b2w+PGxpPmltcG9ydCBmb28uKjsKKzwvbGk+Cis8bGk+aW1wb3J0IGZvby5CYXI7Cis8L2xpPgorPC9vbD4KKzxwPjxiPlByb3Mgb2YgIzE8L2I+Cis6IFBvdGVudGlhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBpbXBvcnQgc3RhdGVtZW50cy4KKzwvcD4KKzxwPjxiPlByb3Mgb2YgIzI8L2I+Cis6IE1ha2VzIGl0IG9idmlvdXMgd2hhdCBjbGFzc2VzIGFyZSBhY3R1YWxseSB1c2VkLiBNYWtlcyBjb2RlIG1vcmUgcmVhZGFibGUgZm9yIG1haW50YWluZXJzLgorPC9wPgorPHA+PGI+RGVjaXNpb248L2I+Cis6VXNlIHN0eWxlICMyIGZvciBpbXBvcnRpbmcgYWxsIEFuZHJvaWQgY29kZS4gQW4gZXhwbGljaXQgZXhjZXB0aW9uIGlzIG1hZGUgZm9yIGphdmEgc3RhbmRhcmQgbGlicmFyaWVzIChqYXZhLnV0aWwuKiwgamF2YS5pby4qLCBldGMuKSBhbmQgdW5pdCB0ZXN0IGNvZGUgKGp1bml0LmZyYW1ld29yay4qKS4KKzwvcD4KKzxoMj48YT5Db21tZW50cy9KYXZhZG9jPC9hPgorPC9oMj4KKzxwPkV2ZXJ5IGZpbGUgc2hvdWxkIGhhdmUgYSBjb3B5cmlnaHQgc3RhdGVtZW50IGF0IHRoZSB0b3AuIFRoZW4gYSBwYWNrYWdlIHN0YXRlbWVudCBhbmQgaW1wb3J0IHN0YXRlbWVudHMgc2hvdWxkIGZvbGxvdywgZWFjaCBibG9jayBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lLiBBbmQgdGhlbiB0aGVyZSBpcyB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlIGRlY2xhcmF0aW9uLiBJbiB0aGUgSmF2YWRvYyBjb21tZW50cywgZGVzY3JpYmUgd2hhdCB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlIGRvZXMuCis8L3A+Cis8cHJlPi8qPGJyPiogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgPGJyPio8YnI+KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTs8YnI+KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuPGJyPiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IDxicj4qPGJyPiogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8YnI+Kjxicj4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgPGJyPiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyw8YnI+KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC48YnI+KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIDxicj4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLjxicj4qLzxicj48YnI+cGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5mb287PGJyPjxicj5pbXBvcnQgYW5kcm9pZC5vcy5CbGFoOzxicj5pbXBvcnQgYW5kcm9pZC52aWV3LllhZGE7PGJyPjxicj5pbXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0Ozxicj5pbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOzxicj48YnI+LyoqPGJyPiogRG9lcyBYIGFuZCBZIGFuZCBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBmb3IgWi48YnI+Ki88YnI+cHVibGljIGNsYXNzIEZvbyB7PGJyPi4uLjxicj59PGJyPjwvcHJlPgorPHA+RXZlcnkgY2xhc3MgYW5kIG5vbnRyaXZpYWwgcHVibGljIG1ldGhvZCB5b3Ugd3JpdGUgPGI+bXVzdDwvYj4KK2NvbnRhaW4gYSBKYXZhZG9jIGNvbW1lbnQgd2l0aCBhdCBsZWFzdCBvbmUgc2VudGVuY2UgZGVzY3JpYmluZyB3aGF0IHRoZSBjbGFzcyBvciBtZXRob2QgZG9lcy4gVGhpcyBzZW50ZW5jZSBzaG91bGQgc3RhcnQgd2l0aCBhIDNyZCBwZXJzb24gZGVzY3JpcHRpdmUgdmVyYi4gRXhhbXBsZXM6Cis8L3A+Cis8cHJlPi8qKiBSZXR1cm5zIHRoZSBjb3JyZWN0bHkgcm91bmRlZCBwb3NpdGl2ZSBzcXVhcmUgcm9vdCBvZiBhIGRvdWJsZSB2YWx1ZS4gKi88YnI+c3RhdGljIGRvdWJsZSBzcXJ0KGRvdWJsZSBhKSB7PGJyPn08YnI+PGJyPi8qKjxicj4qIENvbnN0cnVjdHMgYSBuZXcgU3RyaW5nIGJ5IGNvbnZlcnRpbmcgdGhlIHNwZWNpZmllZCBhcnJheSBvZiA8YnI+KiBieXRlcyB1c2luZyB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0IGNoYXJhY3RlciBlbmNvZGluZy48YnI+Ki88YnI+cHVibGljIFN0cmluZyhieXRlW10gYnl0ZXMpIHs8YnI+fTxicj48L3ByZT4KKzxwPllvdSBkbyBub3QgbmVlZCB0byB3cml0ZSBKYXZhZG9jIGZvciB0cml2aWFsIGdldCBhbmQgc2V0IG1ldGhvZHMgc3VjaCBhcyBzZXRGb28oKSBpZiBhbGwgeW91ciBKYXZhZG9jIHdvdWxkIHNheSBpcyAic2V0cyBGb28iLiBJZiB0aGUgbWV0aG9kIGRvZXMgc29tZXRoaW5nIG1vcmUgY29tcGxleCAoc3VjaCBhcyBlbmZvcmNpbmcgYSBjb25zdHJhaW50IG9yIGhhdmluZyBhbiBpbXBvcnRhbnQgc2lkZSBlZmZlY3QpLCB0aGVuIHlvdSBtdXN0IGRvY3VtZW50IGl0LiBBbmQgaWYgaXQncyBub3Qgb2J2aW91cyB3aGF0IHRoZSBwcm9wZXJ0eSAiRm9vIiBtZWFucywgeW91IHNob3VsZCBkb2N1bWVudCBpdC4KKzwvcD4KKzxwPkV2ZXJ5IG1ldGhvZCB5b3Ugd3JpdGUsIHdoZXRoZXIgcHVibGljIG9yIG90aGVyd2lzZSwgd291bGQgYmVuZWZpdCBmcm9tIEphdmFkb2MuIFB1YmxpYyBtZXRob2RzIGFyZSBwYXJ0IG9mIGFuIEFQSSBhbmQgdGhlcmVmb3JlIHJlcXVpcmUgSmF2YWRvYy4KKzwvcD4KK0FuZHJvaWQgZG9lcyBub3QgY3VycmVudGx5IGVuZm9yY2UgYSBzcGVjaWZpYyBzdHlsZSBmb3Igd3JpdGluZyBKYXZhZG9jIGNvbW1lbnRzLCBidXQgeW91IDxiPnNob3VsZDwvYj4KK2ZvbGxvdyB0aGUgPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlL2phdmFkb2Mvd3JpdGluZ2RvY2NvbW1lbnRzLyI+U3VuIEphdmFkb2MgY29udmVudGlvbnM8L2E+CisuCis8aDI+PGE+U2hvcnQgbWV0aG9kczwvYT4KKzwvaDI+CitUbyB0aGUgZXh0ZW50IHRoYXQgaXQgaXMgZmVhc2libGUsIG1ldGhvZHMgc2hvdWxkIGJlIGtlcHQgc21hbGwgYW5kIGZvY3VzZWQuIEl0IGlzLCBob3dldmVyLCByZWNvZ25pemVkIHRoYXQgbG9uZyBtZXRob2RzIGFyZSBzb21ldGltZXMgYXBwcm9wcmlhdGUsIHNvIG5vIGhhcmQgbGltaXQgaXMgcGxhY2VkIG9uIG1ldGhvZCBsZW5ndGguIElmIGEgbWV0aG9kIGV4Y2VlZHMgNDAgbGluZXMgb3Igc28sIHRoaW5rIGFib3V0IHdoZXRoZXIgaXQgY2FuIGJlIGJyb2tlbiB1cCB3aXRob3V0IGhhcm1pbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgcHJvZ3JhbS4KKzxoMj48YT5Mb2NhbCB2YXJpYWJsZXM8L2E+Cis8L2gyPgorVGhlIHNjb3BlIG9mIGxvY2FsIHZhcmlhYmxlcyBzaG91bGQgYmUga2VwdCB0byBhIG1pbmltdW0gKDxpPkVmZmVjdGl2ZSBKYXZhPC9pPgorSXRlbSAyOSkuIEJ5IGRvaW5nIHNvLCB5b3UgaW5jcmVhc2UgdGhlIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkgb2YgeW91ciBjb2RlIGFuZCByZWR1Y2UgdGhlIGxpa2VsaWhvb2Qgb2YgZXJyb3IuIEVhY2ggdmFyaWFibGUgc2hvdWxkIGJlIGRlY2xhcmVkIGluIHRoZSBpbm5lcm1vc3QgYmxvY2sgdGhhdCBlbmNsb3NlcyBhbGwgdXNlcyBvZiB0aGUgdmFyaWFibGUuCis8cD5Mb2NhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlY2xhcmVkIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBmaXJzdCB1c2VkLiBOZWFybHkgZXZlcnkgbG9jYWwgdmFyaWFibGUgZGVjbGFyYXRpb24gc2hvdWxkIGNvbnRhaW4gYW4gaW5pdGlhbGl6ZXIuIElmIHlvdSBkb24ndCB5ZXQgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW5pdGlhbGl6ZSBhIHZhcmlhYmxlIHNlbnNpYmx5LCB5b3Ugc2hvdWxkIHBvc3Rwb25lIHRoZSBkZWNsYXJhdGlvbiB1bnRpbCB5b3UgZG8uCis8L3A+Cis8cD5PbmUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBjb25jZXJucyB0cnktY2F0Y2ggc3RhdGVtZW50cy4gSWYgYSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBtZXRob2QgdGhhdCB0aHJvd3MgYSBjaGVja2VkIGV4Y2VwdGlvbiwgaXQgbXVzdCBiZSBpbml0aWFsaXplZCBpbnNpZGUgYSB0cnkgYmxvY2suIElmIHRoZSB2YWx1ZSBtdXN0IGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgdHJ5IGJsb2NrLCB0aGVuIGl0IG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIHRoZSB0cnkgYmxvY2ssIHdoZXJlIGl0IGNhbm5vdCB5ZXQgYmUgc2Vuc2libHkgaW5pdGlhbGl6ZWQ6Cis8L3A+Cis8cHJlPi8vIEluc3RhbnRpYXRlIGNsYXNzIGNsLCB3aGljaCByZXByZXNlbnRzIHNvbWUgc29ydCBvZiBTZXQgPGJyPlNldCBzID0gbnVsbDs8YnI+dHJ5IHs8YnI+cyA9IChTZXQpIGNsLm5ld0luc3RhbmNlKCk7PGJyPn0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7PGJyPnRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oY2wgKyAiIG5vdCBhY2Nlc3NpYmxlIik7PGJyPn0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7PGJyPnRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oY2wgKyAiIG5vdCBpbnN0YW50aWFibGUiKTs8YnI+fTxicj48YnI+Ly8gRXhlcmNpc2UgdGhlIHNldCA8YnI+cy5hZGRBbGwoQXJyYXlzLmFzTGlzdChhcmdzKSk7PGJyPjwvcHJlPgorPHA+QnV0IGV2ZW4gdGhpcyBjYXNlIGNhbiBiZSBhdm9pZGVkIGJ5IGVuY2Fwc3VsYXRpbmcgdGhlIHRyeS1jYXRjaCBibG9jayBpbiBhIG1ldGhvZDoKKzwvcD4KKzxwcmU+U2V0IGNyZWF0ZVNldChDbGFzcyBjbCkgezxicj4vLyBJbnN0YW50aWF0ZSBjbGFzcyBjbCwgd2hpY2ggcmVwcmVzZW50cyBzb21lIHNvcnQgb2YgU2V0IDxicj50cnkgezxicj5yZXR1cm4gKFNldCkgY2wubmV3SW5zdGFuY2UoKTs8YnI+fSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHs8YnI+dGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihjbCArICIgbm90IGFjY2Vzc2libGUiKTs8YnI+fSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHs8YnI+dGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihjbCArICIgbm90IGluc3RhbnRpYWJsZSIpOzxicj59PGJyPn08YnI+Li4uPGJyPi8vIEV4ZXJjaXNlIHRoZSBzZXQgPGJyPlNldCBzID0gY3JlYXRlU2V0KGNsKTs8YnI+cy5hZGRBbGwoQXJyYXlzLmFzTGlzdChhcmdzKSk7PGJyPjwvcHJlPgorTG9vcCB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlY2xhcmVkIGluIHRoZSBmb3Igc3RhdGVtZW50IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSBjb21wZWxsaW5nIHJlYXNvbiB0byBkbyBvdGhlcndpc2U6Cis8cHJlPmZvciAoaW50IGkgPSAwOyBpIG47IGkrKykgezxicj5kb1NvbWV0aGluZyhpKTs8YnI+fTxicj48YnI+Zm9yIChJdGVyYXRvciBpID0gYy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKSB7PGJyPmRvU29tZXRoaW5nRWxzZShpLm5leHQoKSk7PGJyPn08YnI+PGJyPjxicj48L3ByZT4KKzxoMj48YT5JbXBvcnRzPC9hPgorPC9oMj4KK1RoZSBvcmRlcmluZyBvZiBpbXBvcnQgc3RhdGVtZW50cyBpczpBbmRyb2lkIGltcG9ydHNJbXBvcnRzIGZyb20gdGhpcmQgcGFydGllcyAoY29tLCBqdW5pdCwgbmV0LCBvcmcpPGJyPmphdmEgYW5kIGphdmF4Cis8cD5UbyBleGFjdGx5IG1hdGNoIHRoZSBJREUgc2V0dGluZ3MsIHRoZSBpbXBvcnRzIHNob3VsZCBiZToKKzwvcD4KK0FscGhhYmV0aWNhbCB3aXRoaW4gZWFjaCBncm91cGluZy48YnI+Q2FwaXRhbCBsZXR0ZXJzIGFyZSBjb25zaWRlcmVkIHRvIGNvbWUgYmVmb3JlIGxvd2VyIGNhc2UgbGV0dGVyIChlLmcuIFogYmVmb3JlIGEpLlRoZXJlIHNob3VsZCBiZSBhIGJsYW5rIGxpbmUgYmV0d2VlbiBlYWNoIG1ham9yIGdyb3VwaW5nIChhbmRyb2lkLCBjb20sIGp1bml0LCBuZXQsIG9yZywgamF2YSwgamF2YXgpLgorPGg0PgorV2h5PworPC9oND4KKzxwPk9yaWdpbmFsbHkgdGhlcmUgd2FzIG5vIHN0eWxlIHJlcXVpcmVtZW50IG9uIHRoZSBvcmRlcmluZy4gVGhpcyBtZWFudCB0aGF0IHRoZSBJREUncyB3ZXJlIGVpdGhlciBhbHdheXMgY2hhbmdpbmcgdGhlIG9yZGVyaW5nLCBvciBJREUgZGV2ZWxvcGVycyBoYWQgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIGltcG9ydCBtYW5hZ2VtZW50IGZlYXR1cmVzIGFuZCBtYWludGFpbiB0aGUgaW1wb3J0cyBieSBoYW5kLiBUaGlzIHdhcyBkZWVtZWQgYmFkLiBXaGVuIGphdmEtc3R5bGUgd2FzIGFza2VkLCB0aGUgcHJlZmVycmVkIHN0eWxlcyB3ZXJlIGFsbCBvdmVyIHRoZSBtYXAuIEl0IHByZXR0eSBtdWNoIGNhbWUgZG93biB0byBvdXIgbmVlZGluZyB0byAicGljayBhbiBvcmRlcmluZyBhbmQgYmUgY29uc2lzdGVudC4iIFNvIHdlIGNob3NlIGEgc3R5bGUsIHVwZGF0ZWQgdGhlIGphdmFndWlkZSBhbmQgbWFkZSB0aGUgSURFJ3Mgb2JleSBpdC4gV2UgZXhwZWN0IHRoYXQgYXMgSURFIHVzZXJzIHdvcmsgb24gdGhlIGNvZGUsIHRoZSBpbXBvcnRzIGluIGFsbCBvZiB0aGUgcGFja2FnZXMgd2lsbCBlbmQgdXAgbWF0Y2hpbmcgdGhpcyBwYXR0ZXJuIHdpdGhvdXQgYW55IGV4dHJhIGVuZ2luZWVyaW5nIGVmZm9ydC4KKzwvcD4KKzxwPlRoZSBzdHlsZSBjaG9zZW4gc3VjaCB0aGF0OgorPC9wPgorVGhlIGltcG9ydHMgcGVvcGxlIHdhbnQgdG8gbG9vayBhdCBmaXJzdCB0ZW5kIHRvIGJlIGF0IHRoZSB0b3AgKGFuZHJvaWQpVGhlIGltcG9ydHMgcGVvcGxlIHdhbnQgdG8gbG9vayBhdCBsZWFzdCB0ZW5kIHRvIGJlIGF0IHRoZSBib3R0b20gKGphdmEpSHVtYW5zIGNhbiBlYXNpbHkgZm9sbG93IHRoZSBzdHlsZVRoZSBJREUncyBjYW4gZm9sbG93IHRoZSBzdHlsZQorPGgzPgorV2hhdCBhYm91dCBzdGF0aWMgaW1wb3J0cz8KKzwvaDM+CitUaGUgdXNlIGFuZCBsb2NhdGlvbiBvZiBzdGF0aWMgaW1wb3J0cyBoYXZlIGJlZW4gbWlsZGx5IGNvbnRyb3ZlcnNpYWwgaXNzdWVzLiBTb21lIHBlb3BsZSB3b3VsZCBwcmVmZXIgc3RhdGljIGltcG9ydHMgdG8gYmUgaW50ZXJzcGVyc2VkIHdpdGggdGhlIHJlbWFpbmluZyBpbXBvcnRzLCBzb21lIHdvdWxkIHByZWZlciB0aGVtIHJlc2lkZSBhYm92ZSBvciBiZWxvdyBhbGwgb3RoZXIgaW1wb3J0cy4gQWRkaXRpbmFsbHksIHdlIGhhdmUgbm90IHlldCBjb21lIHVwIHdpdGggYSB3YXkgdG8gbWFrZSBhbGwgSURFcyB1c2UgdGhlIHNhbWUgb3JkZXJpbmcuCis8cD5TaW5jZSBtb3N0IHBlb3BsZSBjb25zaWRlciB0aGlzIGEgbG93IHByaW9yaXR5IGlzc3VlLCBqdXN0IHVzZSB5b3VyIGp1ZGdlbWVudCBhbmQgcGxlYXNlIGJlIGNvbnNpc3RlbnQuCis8L3A+CisKKzxoMj48YT5JbmRlbnRhdGlvbjwvYT4KKzwvaDI+Cis8cD5XZSB1c2UgNCBzcGFjZSBpbmRlbnRzIGZvciBibG9ja3MuIFdlIG5ldmVyIHVzZSB0YWJzLiBXaGVuIGluIGRvdWJ0LCBiZSBjb25zaXN0ZW50IHdpdGggY29kZSBhcm91bmQgeW91LgorPC9wPgorPHA+V2UgdXNlIDggc3BhY2UgaW5kZW50cyBmb3IgbGluZSB3cmFwcywgaW5jbHVkaW5nIGZ1bmN0aW9uIGNhbGxzIGFuZCBhc3NpZ25tZW50cy4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgY29ycmVjdDoKKzwvcD4KKzxwcmU+SW5zdHJ1bWVudCBpIDxicj49IHNvbWVMb25nRXhwcmVzc2lvbih0aGF0LCB3b3VsZE5vdEZpdCwgb24sIG9uZSwgbGluZSk7PC9wcmU+CithbmQgdGhpcyBpcyBub3QgY29ycmVjdDoKKzxwcmU+SW5zdHJ1bWVudCBpIDxicj49IHNvbWVMb25nRXhwcmVzc2lvbih0aGF0LCB3b3VsZE5vdEZpdCwgb24sIG9uZSwgbGluZSk7PC9wcmU+Cis8aDI+PGE+RmllbGQgTmFtZXM8L2E+Cis8L2gyPgorPHVsPjxsaT5Ob24tcHVibGljLCBub24tc3RhdGljIGZpZWxkIG5hbWVzIHN0YXJ0IHdpdGggbS4KKzwvbGk+Cis8bGk+U3RhdGljIGZpZWxkIG5hbWVzIHN0YXJ0IHdpdGggcy4KKzwvbGk+Cis8bGk+T3RoZXIgZmllbGRzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci4KKzwvbGk+Cis8bGk+UHVibGljIHN0YXRpYyBmaW5hbCBmaWVsZHMgKGNvbnN0YW50cykgYXJlIEFMTF9DQVBTX1dJVEhfVU5ERVJTQ09SRVMuCis8L2xpPgorPC91bD4KKzxwPkZvciBleGFtcGxlOgorPC9wPgorPHByZT5wdWJsaWMgY2xhc3MgTXlDbGFzcyB7PGJyPnB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPTUVfQ09OU1RBTlQgPSA0Mjs8YnI+cHVibGljIGludCBwdWJsaWNGaWVsZDs8YnI+cHJpdmF0ZSBzdGF0aWMgTXlDbGFzcyBzU2luZ2xldG9uOzxicj5pbnQgbVBhY2thZ2VQcml2YXRlOzxicj5wcml2YXRlIGludCBtUHJpdmF0ZTs8YnI+cHJvdGVjdGVkIGludCBtUHJvdGVjdGVkOzxicj59PC9wcmU+Cis8aDI+PGE+QnJhY2VzPC9hPgorPC9oMj4KKzxwPkJyYWNlcyBkbyBub3QgZ28gb24gdGhlaXIgb3duIGxpbmU7IHRoZXkgZ28gb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY29kZSBiZWZvcmUgdGhlbS4gU286Cis8L3A+Cis8cHJlPmNsYXNzIE15Q2xhc3Mgezxicj5pbnQgZnVuYygpIHs8YnI+aWYgKHNvbWV0aGluZykgezxicj4vLyAuLi48YnI+fSBlbHNlIGlmIChzb21ldGhpbmdFbHNlKSB7PGJyPi8vIC4uLjxicj59IGVsc2Ugezxicj4vLyAuLi48YnI+fTxicj59PGJyPn08YnI+PC9wcmU+Cis8cD5XZSByZXF1aXJlIGJyYWNlcyBhcm91bmQgdGhlIHN0YXRlbWVudHMgZm9yIGEgY29uZGl0aW9uYWwuIEV4Y2VwdCwgaWYgdGhlIGVudGlyZSBjb25kaXRpb25hbCAodGhlIGNvbmRpdGlvbiBhbmQgdGhlIGJvZHkpIGZpdCBvbiBvbmUgbGluZSwgeW91IG1heSAoYnV0IGFyZSBub3Qgb2JsaWdhdGVkIHRvKSBwdXQgaXQgYWxsIG9uIG9uZSBsaW5lLiBUaGF0IGlzLCB0aGlzIGlzIGxlZ2FsOgorPC9wPgorPHByZT5pZiAoY29uZGl0aW9uKSB7PGJyPmJvZHk7IC8vIG9rIDxicj59PGJyPmlmIChjb25kaXRpb24pIGJvZHk7IC8vIG9rPC9wcmU+Cis8cD5idXQgdGhpcyBpcyBzdGlsbCBpbGxlZ2FsOgorPC9wPgorPHByZT5pZiAoY29uZGl0aW9uKTxicj5ib2R5OyAvLyBiYWQgPGJyPjwvcHJlPgorPGgyPjxhPkxpbmUgbGVuZ3RoPC9hPgorPC9oMj4KKzxwPkVhY2ggbGluZSBvZiB0ZXh0IGluIHlvdXIgY29kZSBzaG91bGQgYmUgYXQgbW9zdCAxMDAgY2hhcmFjdGVycyBsb25nLgorPC9wPgorPHA+VGhlcmUgaGFzIGJlZW4gbG90cyBvZiBkaXNjdXNzaW9uIGFib3V0IHRoaXMgcnVsZSBhbmQgdGhlIGRlY2lzaW9uIHJlbWFpbnMgdGhhdCAxMDAgY2hhcmFjdGVycyBpcyB0aGUgbWF4aW11bS4KKzwvcD4KKzxwPkV4Y2VwdGlvbjogaWYgYSBjb21tZW50IGxpbmUgY29udGFpbnMgYW4gZXhhbXBsZSBjb21tYW5kIG9yIGEgbGl0ZXJhbCBVUkwgbG9uZ2VyIHRoYW4gMTAwIGNoYXJhY3RlcnMsIHRoYXQgbGluZSBtYXkgYmUgbG9uZ2VyIHRoYW4gMTAwIGNoYXJhY3RlcnMgZm9yIGVhc2Ugb2YgY3V0IGFuZCBwYXN0ZS4KKzwvcD4KKzxwPkV4Y2VwdGlvbjogaW1wb3J0IGxpbmVzIGNhbiBnbyBvdmVyIHRoZSBsaW1pdCBiZWNhdXNlIGh1bWFucyByYXJlbHkgc2VlIHRoZW0uIFRoaXMgYWxzbyBzaW1wbGlmaWVzIHRvb2wgd3JpdGluZy4KKzwvcD4KKzxoMj4KK0phdmEgMS41IEFubm90YXRpb25zCis8L2gyPgorPHA+QW5ub3RhdGlvbnMgc2hvdWxkIHByZWNlZGUgb3RoZXIgbW9kaWZpZXJzIGZvciB0aGUgc2FtZSBsYW5ndWFnZSBlbGVtZW50LiBTaW1wbGUgbWFya2VyIGFubm90YXRpb25zIChlLmcuIEBPdmVycmlkZSkgY2FuIGJlIGxpc3RlZCBvbiB0aGUgc2FtZSBsaW5lIHdpdGggdGhlIGxhbmd1YWdlIGVsZW1lbnQuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBhbm5vdGF0aW9ucywgb3IgcGFyYW1ldGVyaXplZCBhbm5vdGF0aW9ucywgdGhleSBzaG91bGQgZWFjaCBiZSBsaXN0ZWQgb25lLXBlci1saW5lIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKzwvcD4KKzxwPkFuZHJvaWQgLXN0YW5kYXJkIHByYWN0aWNlcyBmb3IgdGhlIHRocmVlIHByZWRlZmluZWQgYW5ub3RhdGlvbnMgaW4gSmF2YSAxLjUncyBhcmU6Cis8L3A+CitARGVwcmVjYXRlZFRoZSBARGVwcmVjYXRlZCBhbm5vdGF0aW9uIG11c3QgYmUgdXNlZCB3aGVuZXZlciB0aGUgdXNlIG9mIHRoZSBhbm5vdGF0ZWQgZWxlbWVudCBpcyBkaXNjb3VyYWdlZC4gSWYgeW91IHVzZSB0aGUgQERlcHJlY2F0ZWQgYW5ub3RhdGlvbiwgeW91IG11c3QgYWxzbyBoYXZlIGEgQGRlcHJlY2F0ZWQgSmF2YWRvYyB0YWcgYW5kIGl0IHNob3VsZCBuYW1lIGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbi4gSW4gYWRkaXRpb24sIHJlbWVtYmVyIHRoYXQgYSBARGVwcmVjYXRlZCBtZXRob2QgaXMgPGI+c3RpbGw8L2I+CitzdXBwb3NlZCB0byB3b3JrLgorPHA+SWYgeW91IHNlZSBvbGQgY29kZSB0aGF0IGhhcyBhIEBkZXByZWNhdGVkIEphdmFkb2MgdGFnLCBwbGVhc2UgYWRkIHRoZSBARGVwcmVjYXRlZCBhbm5vdGF0aW9uLgorPC9wPgorQE92ZXJyaWRlVGhlIEBPdmVycmlkZSBhbm5vdGF0aW9uIG11c3QgYmUgdXNlZCB3aGVuZXZlciBhIG1ldGhvZCBvdmVycmlkZXMgdGhlIGRlY2xhcmF0aW9uIG9yIGltcGxlbWVudGF0aW9uIGZyb20gYSBzdXBlci1jbGFzcy4KKzxwPkZvciBleGFtcGxlLCBpZiB5b3UgdXNlIHRoZSB7QGluaGVyaXRkb2NzfSBKYXZhZG9jIHRhZywgYW5kIGRlcml2ZSBmcm9tIGEgY2xhc3MgKG5vdCBhbiBpbnRlcmZhY2UpLCB5b3UgbXVzdCBhbHNvIGFubm90YXRlIHRoYXQgdGhlIG1ldGhvZCBAT3ZlcnJpZGVzIHRoZSBwYXJlbnQgY2xhc3MncyBtZXRob2QuCis8L3A+CitAU3VwcHJlc3NXYXJuaW5nc1RoZSBAU3VwcHJlc3NXYXJuaW5ncyBhbm5vdGF0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgdW5kZXIgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGVsaW1pbmF0ZSBhIHdhcm5pbmcuIElmIGEgd2FybmluZyBwYXNzZXMgdGhpcyAiaW1wb3NzaWJsZSB0byBlbGltaW5hdGUiIHRlc3QsIHRoZUBTdXBwcmVzc1dhcm5pbmdzIGFubm90YXRpb24gPGI+bXVzdDwvYj4KK2JlIHVzZWQsIHNvIGFzIHRvIGVuc3VyZSB0aGF0IGFsbCB3YXJuaW5ncyByZWZsZWN0IGFjdHVhbCBwcm9ibGVtcyBpbiB0aGUgY29kZS4KKzxwPldoZW4gYSBAU3VwcHJlc3NXYXJuaW5ncyBhbm5vdGF0aW9uIGlzIG5lY2Vzc2FyeSwgaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGEgVE9ETyBjb21tZW50IHRoYXQgZXhwbGFpbnMgdGhlICJpbXBvc3NpYmxlIHRvIGVsaW1pbmF0ZSIgY29uZGl0aW9uLiBUaGlzIHdpbGwgbm9ybWFsbHkgaWRlbnRpZnkgYW4gb2ZmZW5kaW5nIGNsYXNzIHRoYXQgaGFzIGFuIGF3a3dhcmQgaW50ZXJmYWNlLiBGb3IgZXhhbXBsZToKKzwvcD4KKzxwcmU+Ly8gVE9ETzogVGhlIHRoaXJkLXBhcnR5IGNsYXNzIGNvbS50aGlyZC51c2VmdWwuVXRpbGl0eS5yb3RhdGUoKSBuZWVkcyBnZW5lcmljcyA8YnI+QFN1cHByZXNzV2FybmluZ3MoeyJnZW5lcmljLWNhc3QifSk8YnI+TGlzdFN0cmluZ2JsaXggPSBVdGlsaXR5LnJvdGF0ZShibGF4KTs8YnI+PC9wcmU+CitXaGVuIGEgQFN1cHByZXNzV2FybmluZ3MgYW5ub3RhdGlvbiBpcyByZXF1aXJlZCwgdGhlIGNvZGUgc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gaXNvbGF0ZSB0aGUgc29mdHdhcmUgZWxlbWVudHMgd2hlcmUgdGhlIGFubm90YXRpb24gYXBwbGllcy4KKzxoMj48YT5BY3JvbnltcyBpbiBuYW1lczwvYT4KKzwvaDI+Cis8cD5UcmVhdCBhY3JvbnltcyBhbmQgYWJicmV2aWF0aW9ucyBhcyB3b3Jkcy4gVGhlIG5hbWVzIGFyZSBtdWNoIG1vcmUgcmVhZGFibGU6Cis8L3A+CisKKzx0YWJsZT48dGJvZHk+PHRyPjx0ZD5Hb29kCis8L3RkPgorPHRkPkJhZAorPC90ZD4KKzwvdHI+Cis8dHI+PHRkPlhtbEh0dHBSZXF1ZXN0PC90ZD4KKzx0ZD5YTUxIVFRQUmVxdWVzdAorPC90ZD4KKzwvdHI+Cis8dHI+PHRkPmdldEN1c3RvbWVySWQ8L3RkPgorPHRkPmdldEN1c3RvbWVySUQKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+CisKKzxwPlRoaXMgc3R5bGUgcnVsZSBhbHNvIGFwcGxpZXMgd2hlbiBhbiBhY3JvbnltIG9yIGFiYnJldmlhdGlvbiBpcyB0aGUgZW50aXJlIG5hbWU6Cis8L3A+CisKKzx0YWJsZT48dGJvZHk+PHRyPjx0ZD5Hb29kCis8L3RkPgorPHRkPkJhZAorPC90ZD4KKzwvdHI+Cis8dHI+PHRkPmNsYXNzIEh0bWw8L3RkPgorPHRkPmNsYXNzIEhUTUwKKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5TdHJpbmcgdXJsOzwvdGQ+Cis8dGQ+U3RyaW5nIFVSTDsKKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5sb25nIGlkOzwvdGQ+Cis8dGQ+bG9uZyBJRDsKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+CisKKzxwPkJvdGggdGhlIEpESyBhbmQgdGhlIEFuZHJvaWQgY29kZSBiYXNlcyBhcmUgdmVyeSBpbmNvbnNpc3RlbnQgd2l0aCByZWdhcmRzIHRvIGFjcm9ueW1zLCB0aGVyZWZvcmUsIGl0IGlzIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29kZSBhcm91bmQgeW91LiBCaXRlIHRoZSBidWxsZXQsIGFuZCB0cmVhdCBhY3JvbnltcyBhcyB3b3Jkcy4KKzwvcD4KKzxwPkZvciBmdXJ0aGVyIGp1c3RpZmljYXRpb25zIG9mIHRoaXMgc3R5bGUgcnVsZSwgc2VlIDxpPkVmZmVjdGl2ZSBKYXZhPC9pPgorSXRlbSAzOCBhbmQgPGk+SmF2YSBQdXp6bGVyczwvaT4KK051bWJlciA2OC4KKzwvcD4KKzxoMj48YT5UT0RPIHN0eWxlPC9hPgorPC9oMj4KKzxwPlVzZSBUT0RPIGNvbW1lbnRzIGZvciBjb2RlIHRoYXQgaXMgdGVtcG9yYXJ5LCBhIHNob3J0LXRlcm0gc29sdXRpb24sIG9yIGdvb2QtZW5vdWdoIGJ1dCBub3QgcGVyZmVjdC4KKzwvcD4KKzxwPlRPRE9zIHNob3VsZCBpbmNsdWRlIHRoZSBzdHJpbmcgVE9ETyBpbiBhbGwgY2FwcywgZm9sbG93ZWQgYnkgYSBjb2xvbjoKKzwvcD4KKzxwcmU+Ly8gVE9ETzogUmVtb3ZlIHRoaXMgY29kZSBhZnRlciB0aGUgVXJsVGFibGUyIGhhcyBiZWVuIGNoZWNrZWQgaW4uPGJyPjxicj4vLyBUT0RPOiBDaGFuZ2UgdGhpcyB0byB1c2UgYSBmbGFnIGluc3RlYWQgb2YgYSBjb25zdGFudC48L3ByZT4KKzxwPklmIHlvdXIgVE9ETyBpcyBvZiB0aGUgZm9ybSAiQXQgYSBmdXR1cmUgZGF0ZSBkbyBzb21ldGhpbmciIG1ha2Ugc3VyZSB0aGF0IHlvdSBlaXRoZXIgaW5jbHVkZSBhIHZlcnkgc3BlY2lmaWMgZGF0ZSAoIkZpeCBieSBOb3ZlbWJlciAyMDA1Iikgb3IgYSB2ZXJ5IHNwZWNpZmljIGV2ZW50ICgiUmVtb3ZlIHRoaXMgY29kZSBhZnRlciBhbGwgcHJvZHVjdGlvbiBtaXhlcnMgdW5kZXJzdGFuZCBwcm90b2NvbCBWNy4iKS4KKzwvcD4KKzxoMj4KK0NvbnNpc3RlbmN5Cis8L2gyPgorPHA+T3VyIHBhcnRpbmcgdGhvdWdodDogQkUgQ09OU0lTVEVOVC4gSWYgeW91J3JlIGVkaXRpbmcgY29kZSwgdGFrZSBhIGZldyBtaW51dGVzIHRvIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIHlvdSBhbmQgZGV0ZXJtaW5lIGl0cyBzdHlsZS4gSWYgdGhleSB1c2Ugc3BhY2VzIGFyb3VuZCB0aGVpciBpZiBjbGF1c2VzLCB5b3Ugc2hvdWxkIHRvby4gSWYgdGhlaXIgY29tbWVudHMgaGF2ZSBsaXR0bGUgYm94ZXMgb2Ygc3RhcnMgYXJvdW5kIHRoZW0sIG1ha2UgeW91ciBjb21tZW50cyBoYXZlIGxpdHRsZSBib3hlcyBvZiBzdGFycyBhcm91bmQgdGhlbSB0b28uCis8L3A+Cis8cD5UaGUgcG9pbnQgb2YgaGF2aW5nIHN0eWxlIGd1aWRlbGluZXMgaXMgdG8gaGF2ZSBhIGNvbW1vbiB2b2NhYnVsYXJ5IG9mIGNvZGluZywgc28gcGVvcGxlIGNhbiBjb25jZW50cmF0ZSBvbiB3aGF0IHlvdSdyZSBzYXlpbmcsIHJhdGhlciB0aGFuIG9uIGhvdyB5b3UncmUgc2F5aW5nIGl0LiBXZSBwcmVzZW50IGdsb2JhbCBzdHlsZSBydWxlcyBoZXJlIHNvIHBlb3BsZSBrbm93IHRoZSB2b2NhYnVsYXJ5LiBCdXQgbG9jYWwgc3R5bGUgaXMgYWxzbyBpbXBvcnRhbnQuIElmIGNvZGUgeW91IGFkZCB0byBhIGEgZmlsZSBsb29rcyBkcmFzdGljYWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgZXhpc3RpbmcgY29kZSBhcm91bmQgaXQsIGl0IHRocm93cyByZWFkZXJzIG91dCBvZiB0aGVpciByaHl0aG0gd2hlbiB0aGV5IGdvIHRvIHJlYWQgaXQuIFRyeSB0byBhdm9pZCB0aGlzLgorPC9wPgorPGgyPjxhPkxvZ2dpbmc8L2E+Cis8L2gyPgorPHA+V2hpbGUgbG9nZ2luZyBpcyBuZWNlc3NhcnkgaXQgaGFzIGEgc2lnbmlmaWNhbnRseSBuZWdhdGl2ZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHF1aWNrbHkgbG9zZXMgaXRzIHVzZWZ1bG5lc3MgaWYgaXQncyBub3Qga2VwdCByZWFzb25hYmx5IHRlcnNlLiBUaGUgbG9nZ2luZyBmYWNpbGl0aWVzIHByb3ZpZGVzIGZpdmUgZGlmZmVyZW50IGxldmVscyBvZiBsb2dnaW5nLiBCZWxvdyBhcmUgdGhlIGRpZmZlcmVudCBsZXZlbHMgYW5kIHdoZW4gYW5kIGhvdyB0aGV5IHNob3VsZCBiZSB1c2VkLgorPC9wPgorCis8dWw+PGxpPjxiPkVSUk9SOjwvYj4KK1RoaXMgbGV2ZWwgb2YgbG9nZ2luZyBzaG91bGQgYmUgdXNlZCB3aGVuIHNvbWV0aGluZyBmYXRhbCBoYXMgaGFwcGVuZWQsIGkuZS4gc29tZXRoaW5nIHRoYXQgd2lsbCBoYXZlIHVzZXItdmlzaWJsZSBjb25zZXF1ZW5jZXMgYW5kIHdvbid0IGJlIHJlY292ZXJhYmxlIHdpdGhvdXQgZXhwbGljaXRseSBkZWxldGluZyBzb21lIGRhdGEsIHVuaW5zdGFsbGluZyBhcHBsaWNhdGlvbnMsIHdpcGluZyB0aGUgZGF0YSBwYXJ0aXRpb25zIG9yIHJlZmxhc2hpbmcgdGhlIGVudGlyZSBwaG9uZSAob3Igd29yc2UpLiBUaGlzIGxldmVsIGlzIGFsd2F5cyBsb2dnZWQuIElzc3VlcyB0aGF0IGp1c3RpZnkgc29tZSBsb2dnaW5nIGF0IHRoZSBFUlJPUiBsZXZlbCBhcmUgdHlwaWNhbGx5IGdvb2QgY2FuZGlkYXRlcyB0byBiZSByZXBvcnRlZCB0byBhIHN0YXRpc3RpY3MtZ2F0aGVyaW5nIHNlcnZlci4KKzwvbGk+Cis8bGk+PGI+V0FSTklORzo8L2I+CitUaGlzIGxldmVsIG9mIGxvZ2dpbmcgc2hvdWxkIHVzZWQgd2hlbiBzb21ldGhpbmcgc2VyaW91cyBhbmQgdW5leHBlY3RlZCBoYXBwZW5lZCwgaS5lLiBzb21ldGhpbmcgdGhhdCB3aWxsIGhhdmUgdXNlci12aXNpYmxlIGNvbnNlcXVlbmNlcyBidXQgaXMgbGlrZWx5IHRvIGJlIHJlY292ZXJhYmxlIHdpdGhvdXQgZGF0YSBsb3NzIGJ5IHBlcmZvcm1pbmcgc29tZSBleHBsaWNpdCBhY3Rpb24sIHJhbmdpbmcgZnJvbSB3YWl0aW5nIG9yIHJlc3RhcnRpbmcgYW4gYXBwIGFsbCB0aGUgd2F5IHRvIHJlLWRvd25sb2FkaW5nIGEgbmV3IHZlcnNpb24gb2YgYW4gYXBwbGljYXRpb24gb3IgcmVib290aW5nIHRoZSBkZXZpY2UuIFRoaXMgbGV2ZWwgaXMgYWx3YXlzIGxvZ2dlZC4gSXNzdWVzIHRoYXQganVzdGlmeSBzb21lIGxvZ2dpbmcgYXQgdGhlIFdBUk5JTkcgbGV2ZWwgbWlnaHQgYWxzbyBiZSBjb25zaWRlcmVkIGZvciByZXBvcnRpbmcgdG8gYSBzdGF0aXN0aWNzLWdhdGhlcmluZyBzZXJ2ZXIuCis8L2xpPgorPGxpPjxiPklORk9STUFUSVZFOjwvYj4KK1RoaXMgbGV2ZWwgb2YgbG9nZ2luZyBzaG91bGQgdXNlZCBiZSB0byBub3RlIHRoYXQgc29tZXRoaW5nIGludGVyZXN0aW5nIHRvIG1vc3QgcGVvcGxlIGhhcHBlbmVkLCBpLmUuIHdoZW4gYSBzaXR1YXRpb24gaXMgZGV0ZWN0ZWQgdGhhdCBpcyBsaWtlbHkgdG8gaGF2ZSB3aWRlc3ByZWFkIGltcGFjdCwgdGhvdWdoIGlzbid0IG5lY2Vzc2FyaWx5IGFuIGVycm9yLiBTdWNoIGEgY29uZGl0aW9uIHNob3VsZCBvbmx5IGJlIGxvZ2dlZCBieSBhIG1vZHVsZSB0aGF0IHJlYXNvbmFibHkgYmVsaWV2ZXMgdGhhdCBpdCBpcyB0aGUgbW9zdCBhdXRob3JpdGF0aXZlIGluIHRoYXQgZG9tYWluICh0byBhdm9pZCBkdXBsaWNhdGUgbG9nZ2luZyBieSBub24tYXV0aG9yaXRhdGl2ZSBjb21wb25lbnRzKS4gVGhpcyBsZXZlbCBpcyBhbHdheXMgbG9nZ2VkLgorPC9saT4KKzxsaT48Yj5ERUJVRzo8L2I+CitUaGlzIGxldmVsIG9mIGxvZ2dpbmcgc2hvdWxkIGJlIHVzZWQgdG8gZnVydGhlciBub3RlIHdoYXQgaXMgaGFwcGVuaW5nIG9uIHRoZSBkZXZpY2UgdGhhdCBjb3VsZCBiZSByZWxldmFudCB0byBpbnZlc3RpZ2F0ZSBhbmQgZGVidWcgdW5leHBlY3RlZCBiZWhhdmlvcnMuIFlvdSBzaG91bGQgbG9nIG9ubHkgd2hhdCBpcyBuZWVkZWQgdG8gZ2F0aGVyIGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGlzIGdvaW5nIG9uIGFib3V0IHlvdXIgY29tcG9uZW50LiBJZiB5b3VyIGRlYnVnIGxvZ3MgYXJlIGRvbWluYXRpbmcgdGhlIGxvZyB0aGVuIHlvdSBwcm9iYWJseSBzaG91bGQgYmUgdXNpbmcgdmVyYm9zZSBsb2dnaW5nLiBUaGlzIGxldmVsIHdpbGwgYmUgbG9nZ2VkLCBldmVuIG9uIHJlbGVhc2UgYnVpbGRzLCBhbmQgaXMgcmVxdWlyZWQgdG8gYmUgc3Vycm91bmRlZCBieSBhbiBpZiAoTE9DQUxfTE9HKSBvciBpZiAoTE9DQUxfTE9HRCkgYmxvY2ssIHdoZXJlIExPQ0FMX0xPR1tEXSBpcyBkZWZpbmVkIGluIHlvdXIgY2xhc3Mgb3Igc3ViY29tcG9uZW50LCBzbyB0aGF0IHRoZXJlIGNhbiBleGlzdCBhIHBvc3NpYmlsaXR5IHRvIGRpc2FibGUgYWxsIHN1Y2ggbG9nZ2luZy4gVGhlcmUgbXVzdCB0aGVyZWZvcmUgYmUgbm8gYWN0aXZlIGxvZ2ljIGluIGFuIGlmIChMT0NBTF9MT0cpIGJsb2NrLiBBbGwgdGhlIHN0cmluZyBidWlsZGluZyBmb3IgdGhlIGxvZyBhbHNvIG5lZWRzIHRvIGJlIHBsYWNlZCBpbnNpZGUgdGhlIGlmIChMT0NBTF9MT0cpIGJsb2NrLiBUaGUgbG9nZ2luZyBjYWxsIHNob3VsZCBub3QgYmUgcmUtZmFjdG9yZWQgb3V0IGludG8gYSBtZXRob2QgY2FsbCBpZiBpdCBpcyBnb2luZyB0byBjYXVzZSB0aGUgc3RyaW5nIGJ1aWxkaW5nIHRvIHRha2UgcGxhY2Ugb3V0c2lkZSBvZiB0aGUgaWYgKExPQ0FMX0xPRykgYmxvY2suIFRoZXJlIGlzIHNvbWUgY29kZSB0aGF0IHN0aWxsIHNheXMgaWYgKGxvY2FsTE9HVikuIFRoaXMgaXMgY29uc2lkZXJlZCBhY2NlcHRhYmxlIGFzIHdlbGwsIGFsdGhvdWdoIHRoZSBuYW1lIGlzIG5vbnN0YW5kYXJkLgorPC9saT4KKzxsaT48Yj5WRVJCT1NFOjwvYj4KK1RoaXMgbGV2ZWwgb2YgbG9nZ2luZyBzaG91bGQgYmUgdXNlZCBmb3IgZXZlcnl0aGluZyBlbHNlLiBUaGlzIGxldmVsIHdpbGwgb25seSBiZSBsb2dnZWQgb24gZGVidWcgYnVpbGRzIGFuZCBzaG91bGQgYmUgc3Vycm91bmRlZCBieSBpZiAoTE9DQUxfTE9HVikgYmxvY2sgKG9yIGVxdWl2YWxlbnQpIHNvIHRoYXQgaXQgY2FuIGJlIGNvbXBpbGVkIG91dCBieSBkZWZhdWx0LiBBbnkgc3RyaW5nIGJ1aWxkaW5nIHdpbGwgYmUgc3RyaXBwZWQgb3V0IG9mIHJlbGVhc2UgYnVpbGRzIGFuZCBuZWVkcyB0byBhcHBlYXIgaW5zaWRlIHRoZSBpZiAoTE9DQUxfTE9HVikgYmxvY2suCis8L2xpPgorPC91bD4KKzxwPjxpPk5vdGU6PC9pPgorV2l0aGluIGEgZ2l2ZW4gbW9kdWxlLCBvdGhlciB0aGFuIGF0IHRoZSBWRVJCT1NFIGxldmVsLCBhbiBlcnJvciBzaG91bGQgb25seSBiZSByZXBvcnRlZCBvbmNlIGlmIHBvc3NpYmxlOiB3aXRoaW4gYSBzaW5nbGUgY2hhaW4gb2YgZnVuY3Rpb24gY2FsbHMgd2l0aGluIGEgbW9kdWxlLCBvbmx5IHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgZXJyb3IsIGFuZCBjYWxsZXJzIGluIHRoZSBzYW1lIG1vZHVsZSBzaG91bGQgb25seSBhZGQgc29tZSBsb2dnaW5nIGlmIHRoYXQgc2lnbmlmaWNhbnRseSBoZWxwcyB0byBpc29sYXRlIHRoZSBpc3N1ZS4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorSW4gYSBjaGFpbiBvZiBtb2R1bGVzLCBvdGhlciB0aGFuIGF0IHRoZSBWRVJCT1NFIGxldmVsLCB3aGVuIGEgbG93ZXItbGV2ZWwgbW9kdWxlIGRldGVjdHMgaW52YWxpZCBkYXRhIGNvbWluZyBmcm9tIGEgaGlnaGVyLWxldmVsIG1vZHVsZSwgdGhlIGxvd2VyLWxldmVsIG1vZHVsZSBzaG91bGQgb25seSBsb2cgdGhpcyBzaXR1YXRpb24gdG8gdGhlIERFQlVHIGxvZywgYW5kIG9ubHkgaWYgbG9nZ2luZyBwcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBvdGhlcndpc2UgYXZhaWxhYmxlIHRvIHRoZSBjYWxsZXIuIFNwZWNpZmljYWxseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBsb2cgc2l0dWF0aW9ucyB3aGVyZSBhbiBleGNlcHRpb24gaXMgdGhyb3duICh0aGUgZXhjZXB0aW9uIHNob3VsZCBjb250YWluIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24pLCBvciB3aGVyZSB0aGUgb25seSBpbmZvcm1hdGlvbiBiZWluZyBsb2dnZWQgaXMgY29udGFpbmVkIGluIGFuIGVycm9yIGNvZGUuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZyYW1ld29yayBhbmQgYXBwbGljYXRpb25zLCBhbmQgY29uZGl0aW9ucyBjYXVzZWQgYnkgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHRoYXQgYXJlIHByb3Blcmx5IGhhbmRsZWQgYnkgdGhlIGZyYW1ld29yayBzaG91bGQgbm90IHRyaWdnZXIgbG9nZ2luZyBoaWdoZXIgdGhhbiB0aGUgREVCVUcgbGV2ZWwuIFRoZSBvbmx5IHNpdHVhdGlvbnMgdGhhdCBzaG91bGQgdHJpZ2dlciBsb2dnaW5nIGF0IHRoZSBJTkZPUk1BVElWRSBsZXZlbCBvciBoaWdoZXIgaXMgd2hlbiBhIG1vZHVsZSBvciBhcHBsaWNhdGlvbiBkZXRlY3RzIGFuIGVycm9yIGF0IGl0cyBvd24gbGV2ZWwgb3IgY29taW5nIGZyb20gYSBsb3dlciBsZXZlbC4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorV2hlbiBhIGNvbmRpdGlvbiB0aGF0IHdvdWxkIG5vcm1hbGx5IGp1c3RpZnkgc29tZSBsb2dnaW5nIGlzIGxpa2VseSB0byBvY2N1ciBtYW55IHRpbWVzLCBpdCBjYW4gYmUgYSBnb29kIGlkZWEgdG8gaW1wbGVtZW50IHNvbWUgcmF0ZS1saW1pdGluZyBtZWNoYW5pc20gdG8gcHJldmVudCBvdmVyZmxvd2luZyB0aGUgbG9ncyB3aXRoIG1hbnkgZHVwbGljYXRlIGNvcGllcyBvZiB0aGUgc2FtZSAob3IgdmVyeSBzaW1pbGFyKSBpbmZvcm1hdGlvbi4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorTG9zc2VzIG9mIG5ldHdvcmsgY29ubmVjdGl2aXR5IGFyZSBjb25zaWRlcmVkIGNvbW1vbiBhbmQgZnVsbHkgZXhwZWN0ZWQgYW5kIHNob3VsZCBub3QgYmUgbG9nZ2VkIGdyYXR1aXRvdXNseS4gQSBsb3NzIG9mIG5ldHdvcmsgY29ubmVjdGl2aXR5IHRoYXQgaGFzIGNvbnNlcXVlbmNlcyB3aXRoaW4gYW4gYXBwIHNob3VsZCBiZSBsb2dnZWQgYXQgdGhlIERFQlVHIG9yIFZFUkJPU0UgbGV2ZWwgKGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjb25zZXF1ZW5jZXMgYXJlIHNlcmlvdXMgZW5vdWdoIGFuZCB1bmV4cGVjdGVkIGVub3VnaCB0byBiZSBsb2dnZWQgaW4gYSByZWxlYXNlIGJ1aWxkKS4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorQSBmdWxsIGZpbGVzeXN0ZW0gb24gYSBmaWxlc3lzdGVtIHRoYXQgaXMgYWNjZWVzc2libGUgdG8gb3Igb24gYmVoYWxmIG9mIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGJlIGxvZ2dlZCBhdCBhIGxldmVsIGhpZ2hlciB0aGFuIElORk9STUFUSVZFLgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+CitJbnZhbGlkIGRhdGEgY29taW5nIGZyb20gYW55IHVudHJ1c3RlZCBzb3VyY2UgKGluY2x1ZGluZyBhbnkgZmlsZSBvbiBzaGFyZWQgc3RvcmFnZSwgb3IgZGF0YSBjb21pbmcgdGhyb3VnaCBqdXN0IGFib3V0IGFueSBuZXR3b3JrIGNvbm5lY3Rpb25zKSBpcyBjb25zaWRlcmVkIGV4cGVjdGVkIGFuZCBzaG91bGQgbm90IHRyaWdnZXIgYW55IGxvZ2dpbmcgYXQgYSBsZXZlbCBoaWdoZXIgdGhlbiBERUJVRyB3aGVuIGl0J3MgZGV0ZWN0ZWQgdG8gYmUgaW52YWxpZCAoYW5kIGV2ZW4gdGhlbiBsb2dnaW5nIHNob3VsZCBiZSBhcyBsaW1pdGVkIGFzIHBvc3NpYmxlKS4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorS2VlcCBpbiBtaW5kIHRoYXQgdGhlICcrJyBvcGVyYXRvciwgd2hlbiB1c2VkIG9uIFN0cmluZ3MsIGltcGxpY2l0bHkgY3JlYXRlcyBhIFN0cmluZ0J1aWxkZXIgd2l0aCB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZSAoMTYgY2hhcmFjdGVycykgYW5kIHBvdGVudGlhbGx5IHF1aXRlIGEgZmV3IG90aGVyIHRlbXBvcmFyeSBTdHJpbmcgb2JqZWN0cywgaS5lLiB0aGF0IGV4cGxpY2l0bHkgY3JlYXRpbmcgU3RyaW5nQnVpbGRlcnMgaXNuJ3QgbW9yZSBleHBlbnNpdmUgdGhhbiByZWx5aW5nIG9uIHRoZSBkZWZhdWx0ICcrJyBvcGVyYXRvciAoYW5kIGNhbiBiZSBhIGxvdCBtb3JlIGVmZmljaWVudCBpbiBmYWN0KS4gQWxzbyBrZWVwIGluIG1pbmQgdGhhdCBjb2RlIHRoYXQgY2FsbHMgTG9nLnYoKSBpcyBjb21waWxlZCBhbmQgZXhlY3V0ZWQgb24gcmVsZWFzZSBidWlsZHMsIGluY2x1ZGluZyBidWlsZGluZyB0aGUgc3RyaW5ncywgZXZlbiBpZiB0aGUgbG9ncyBhcmVuJ3QgYmVpbmcgcmVhZC4KKzwvcD4KKzxwPjxpPk5vdGU6PC9pPgorQW55IGxvZ2dpbmcgdGhhdCBpcyBtZWFudCB0byBiZSByZWFkIGJ5IG90aGVyIHBlb3BsZSBhbmQgdG8gYmUgYXZhaWxhYmxlIGluIHJlbGVhc2UgYnVpbGRzIHNob3VsZCBiZSB0ZXJzZSB3aXRob3V0IGJlaW5nIGNyeXB0aWMsIGFuZCBzaG91bGQgYmUgcmVhc29uYWJseSB1bmRlcnN0YW5kYWJsZS4gVGhpcyBpbmNsdWRlcyBhbGwgbG9nZ2luZyB1cCB0byB0aGUgREVCVUcgbGV2ZWwuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK1doZW4gcG9zc2libGUsIGxvZ2dpbmcgc2hvdWxkIGJlIGtlcHQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBtYWtlcyBzZW5zZS4gTGluZSBsZW5ndGhzIHVwIHRvIDgwIG9yIDEwMCBjaGFyYWN0ZXJzIGFyZSBwZXJmZWN0bHkgYWNjZXB0YWJsZSwgd2hpbGUgbGVuZ3RocyBsb25nZXIgdGhhbiBhYm91dCAxMzAgb3IgMTYwIGNoYXJhY3RlcnMgKGluY2x1ZGluZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YWcpIHNob3VsZCBiZSBhdm9pZGVkIGlmIHBvc3NpYmxlLgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+CitMb2dnaW5nIHRoYXQgcmVwb3J0cyBzdWNjZXNzZXMgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYXQgbGV2ZWxzIGhpZ2hlciB0aGFuIFZFUkJPU0UuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK1RlbXBvcmFyeSBsb2dnaW5nIHRoYXQgaXMgdXNlZCB0byBkaWFnbm9zZSBhbiBpc3N1ZSB0aGF0J3MgaGFyZCB0byByZXByb2R1Y2Ugc2hvdWxkIGJlIGtlcHQgYXQgdGhlIERFQlVHIG9yIFZFUkJPU0UgbGV2ZWwsIGFuZCBzaG91bGQgYmUgZW5jbG9zZWQgYnkgaWYgYmxvY2tzIHRoYXQgYWxsb3cgdG8gZGlzYWJsZSBpdCBlbnRpcmVseSBhdCBjb21waWxlLXRpbWUuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KK0JlIGNhcmVmdWwgYWJvdXQgc2VjdXJpdHkgbGVha3MgdGhyb3VnaCB0aGUgbG9nLiBQcml2YXRlIGluZm9ybWF0aW9uIHNob3VsZCBiZSBhdm9pZGVkLiBJbmZvcm1hdGlvbiBhYm91dCBwcm90ZWN0ZWQgY29udGVudCBtdXN0IGRlZmluaXRlbHkgYmUgYXZvaWRlZC4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB3aGVuIHdyaXRpbmcgZnJhbWV3b3JrIGNvZGUgYXMgaXQncyBub3QgZWFzeSB0byBrbm93IGluIGFkdmFuY2Ugd2hhdCB3aWxsIGFuZCB3aWxsIG5vdCBiZSBwcml2YXRlIGluZm9ybWF0aW9uIG9yIHByb3RlY3RlZCBjb250ZW50LgorPC9wPgorPHA+PGk+Tm90ZTo8L2k+CitTeXN0ZW0ub3V0LnByaW50bG4oKSAob3IgcHJpbnRmKCkgZm9yIG5hdGl2ZSBjb2RlKSBzaG91bGQgbmV2ZXIgYmUgdXNlZC4gU3lzdGVtLm91dCBhbmQgU3lzdGVtLmVyciBnZXQgcmVkaXJlY3RlZCB0byAvZGV2L251bGwsIHNvIHlvdXIgcHJpbnQgc3RhdGVtZW50cyB3aWxsIGhhdmUgbm8gdmlzaWJsZSBlZmZlY3RzLiBIb3dldmVyLCBhbGwgdGhlIHN0cmluZyBidWlsZGluZyB0aGF0IGhhcHBlbnMgZm9yIHRoZXNlIGNhbGxzIHN0aWxsIGdldHMgZXhlY3V0ZWQuCis8L3A+Cis8cD48aT5Ob3RlOjwvaT4KKzxiPlRoZSBnb2xkZW4gcnVsZSBvZiBsb2dnaW5nIGlzIHRoYXQgeW91ciBsb2dzIG1heSBub3QgdW5uZWNlc3NhcmlseSBwdXNoIG90aGVyIGxvZ3Mgb3V0IG9mIHRoZSBidWZmZXIsIGp1c3QgYXMgb3RoZXJzIG1heSBub3QgcHVzaCBvdXQgeW91cnMuPC9iPgorPC9wPgorPGgyPgorSmF2YXRlc3RzIFN0eWxlIFJ1bGVzCis8L2gyPgorCis8aDI+PGE+TmFtaW5nIHRlc3QgbWV0aG9kczwvYT4KKzwvaDI+Cis8YT5XaGVuIG5hbWluZyB0ZXN0IG1ldGhvZHMsIHlvdSBjYW4gdXNlIGFuIHVuZGVyc2NvcmUgdG8gc2VwZXJhdGUgd2hhdCBpcyBiZWluZyB0ZXN0ZWQgZnJvbSB0aGUgc3BlY2lmaWMgY2FzZSBiZWluZyB0ZXN0ZWQuIFRoaXMgc3R5bGUgbWFrZXMgaXQgZWFzaWVyIHRvIHNlZSBleGFjdGx5IHdoYXQgY2FzZXMgYXJlIGJlaW5nIHRlc3RlZC48L2E+Cis8cD48YT5FeGFtcGxlOjwvYT4KKzwvcD4KKzxwcmU+PGE+dGVzdE1ldGhvZF9zcGVjaWZpY0Nhc2UxIDxicj50ZXN0TWV0aG9kX3NwZWNpZmljQ2FzZTI8L2E+Cis8L3ByZT4KKworPHByZT48YT52b2lkIHRlc3RJc0Rpc3Rpbmd1aXNoYWJsZV9wcm90YW5vcGlhKCkgezxicj5Db2xvck1hdGNoZXIgY29sb3JNYXRjaGVyID0gbmV3IENvbG9yTWF0Y2hlcihQUk9UQU5PUElBKTxicj5hc3NlcnRGYWxzZShjb2xvck1hdGNoZXIuaXNEaXN0aW5ndWlzaGFibGUoQ29sb3IuUkVELCBDb2xvci5CTEFDSykpPGJyPmFzc2VydFRydWUoY29sb3JNYXRjaGVyLmlzRGlzdGluZ3Vpc2hhYmxlKENvbG9yLlgsIENvbG9yLlkpKTxicj59PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvZG93bmxvYWQuamQgYi9wZGsvZG9jcy9zb3VyY2UvZG93bmxvYWQuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1YTcwOAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9kb3dubG9hZC5qZApAQCAtMCwwICsxLDMwMyBAQAorcGFnZS50aXRsZT1HZXQgQW5kcm9pZCBTb3VyY2UgQ29kZQorZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPGRpdj48YnI+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHNldCB1cCB5b3VyIGxvY2FsIHdvcmsgZW52aXJvbm1lbnQsIGhvdyB0byB1c2UgUmVwbyB0byBnZXQgdGhlIEFuZHJvaWQgZmlsZXMsIGFuZCBob3cgdG8gYnVpbGQgdGhlIGZpbGVzIG9uIHlvdXIgbWFjaGluZS48YnI+PGJyPlJlbGF0ZWQgcmVhZGluZzo8YnI+PC9kaXY+Cis8dWw+PGxpPkZvciBhbiBvdmVydmlldyBvZiB0aGUgZW50aXJlIGNvZGUtcmV2aWV3IGFuZCBjb2RlLXVwZGF0ZSBwcm9jZXNzLCBzZWUKKzxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvbGlmZS1vZi1hLXBhdGNoLmh0bWwiPkxpZmUgb2YgYSBQYXRjaDwvYT4KKy48L2xpPgorPGxpPkZvciByZWZlcmVuY2UgZGV0YWlscyBhYm91dCBSZXBvLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9naXQtcmVwby5odG1sIj5Vc2luZyBSZXBvIGFuZCBHaXQ8L2E+CisuPGJyPjwvbGk+Cis8L3VsPgorPGgyPgorV2hhdCdzIGluIHRoZSBzb3VyY2U/PC9oMj4KKzxkaXY+VG8gc2VlIHNuYXBzaG90cyBhbmQgaGlzdG9yaWVzIG9mIHRoZSBmaWxlcyBhdmFpbGFibGUgaW4gdGhlIHB1YmxpYyBBbmRyb2lkIHJlcG9zaXRvcmllcywgdmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnLyI+R2l0V2ViPC9hPgord2ViIGludGVyZmFjZS48L2Rpdj4KKzxkaXY+PC9kaXY+Cis8ZGl2PlRoZSBzb3VyY2UgaXMgYXBwcm94aW1lbnRlbHkgMi4xR0IgaW4gc2l6ZS5Zb3Ugd2lsbCBuZWVkIDZHQiBmcmVlIHRvIGNvbXBsZXRlIHRoZSBidWlsZC48YnI+PGJyPjwvZGl2PgorPGgyPgorU2V0dGluZyB1cCB5b3VyIG1hY2hpbmU8L2gyPgorPGRpdj5UbyBidWlsZCB0aGUgQW5kcm9pZCBzb3VyY2UgZmlsZXMsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIExpbnV4IG9yIE1hYyBPUy4gQnVpbGRpbmcgdW5kZXIgV2luZG93cyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC48L2Rpdj4KKzxkaXY+PGJyPjwvZGl2PgorPGgzPgorTGludXg8L2gzPgorVGhlIEFuZHJvaWQgYnVpbGQgaXMgcm91dGluZWx5IHRlc3RlZCBvbiByZWNlbnQgdmVyc2lvbnMgb2YgVWJ1bnR1ICg2LjA2IGFuZCBsYXRlciksIGJ1dCByZXBvcnRzIG9mIHN1Y2Nlc3NlcyBvciBmYWlsdXJlcyBvbiBvdGhlciBkaXN0cmlidXRpb25zIGFyZSB3ZWxjb21lLjxicj48aDQ+CitVYnVudHUgTGludXggKDMyLWJpdCB4ODYpPC9oND4KKzxkaXY+VG8gc2V0IHVwIHlvdXIgTGludXggZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nOjwvZGl2PgorPGRpdj48ZGl2PjxkaXY+PHVsPjxsaT5SZXF1aXJlZCBQYWNrYWdlczo8L2xpPgorPHVsPjxsaT5HaXQgMS41LjQgb3IgbmV3ZXIgPHNwYW4+YW5kIHRoZSBHTlUgUHJpdmFjeSBHdWFyZC48YnI+PC9zcGFuPgorPC9saT4KKzwvdWw+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2PjxkaXY+PGRpdj48ZGl2Pjx1bD48dWw+PGxpPkpESyA1LjAsIHVwZGF0ZSAxMiBvciBoaWdoZXIuSmF2YSA2IGlzIG5vdCBzdXBwb3J0ZWQsIGJlY2F1c2Ugb2YgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBAT3ZlcnJpZGUuPGJyPjwvbGk+Cis8L3VsPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdj48ZGl2PjxkaXY+PGRpdj48dWw+PHVsPjxsaT48c3Bhbj5mbGV4LCBiaXNvbiwgZ3BlcmYsIGxpYnNkbC1kZXYsIGxpYmVzZDAtZGV2LCBsaWJ3eGd0azIuNi1kZXYgKG9wdGlvbmFsKSwgYnVpbGQtZXNzZW50aWFsLCB6aXAsIGN1cmwuPC9zcGFuPgorPC9saT4KKzwvdWw+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8YmxvY2txdW90ZT48c3Bhbj4kIHN1ZG8gYXB0LWdldCBpbnN0YWxsPC9zcGFuPgorPHNwYW4+Z2l0LWNvcmUgZ251cGc8L3NwYW4+Cis8c3Bhbj5zdW4tamF2YTUtamRrPC9zcGFuPgorPHNwYW4+ZmxleCBiaXNvbiBncGVyZiA8c3Bhbj5saWJzZGwtZGV2IGxpYmVzZDAtZGV2PC9zcGFuPgorbGlid3hndGsyLjYtZGV2IGJ1aWxkLWVzc2VudGlhbCB6aXAgPHNwYW4+Y3VybCBsaWJuY3Vyc2VzNS1kZXYgemxpYjFnLWRldiA8YnI+PC9zcGFuPgorPC9zcGFuPgorPC9ibG9ja3F1b3RlPgorPGRpdj48ZGl2PjxkaXY+PGRpdj48dWw+PGxpPjxzcGFuPjxzcGFuPllvdSBtaWdodCBhbHNvIHdhbnQgVmFsZ3JpbmQsIGEgdG9vbCB0aGF0IHdpbGwgaGVscCB5b3UgZmluZCBtZW1vcnkgbGVha3MsIHN0YWNrIGNvcnJ1cHRpb24sIGFycmF5IGJvdW5kcyBvdmVyZmxvd3MsIGV0Yy48L3NwYW4+Cis8L3NwYW4+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGJsb2NrcXVvdGU+PGRpdj48c3Bhbj4kIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHZhbGdyaW5kIDxicj48L3NwYW4+Cis8L2Rpdj4KKzwvYmxvY2txdW90ZT4KKzx1bD48bGk+PHNwYW4+PHNwYW4+SW50cmVwaWQgKDwvc3Bhbj4KKzwvc3Bhbj4KKzguMTApIHVzZXJzIG1heSBuZWVkIGEgbmV3ZXIgdmVyc2lvbiBvZiBsaWJyZWFkbGluZTo8L2xpPgorPC91bD4KKzxkaXY+JCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBsaWIzMnJlYWRsaW5lNS1kZXYgPGJyPjwvZGl2PgorPC9kaXY+Cis8ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdj48aDQ+CitVYnVudHUgTGludXggKDY0LWJpdCB4ODYpPC9oND4KK1RoaXMgaGFzIG5vdCBiZWVuIGFzIHdlbGwgdGVzdGVkLiBQbGVhc2Ugc2VuZCBzdWNjZXNzIG9yIGZhaWx1cmUgcmVwb3J0cyB0byA8YSBocmVmPSJtYWlsdG86YW5kcm9pZC1wb3J0aW5nQGdvb2dsZWdyb3Vwcy5jb20iPmFuZHJvaWQtcG9ydGluZ0Bnb29nbGVncm91cHMuY29tPC9hPgorLjwvZGl2PgorPGRpdj48YnI+PC9kaXY+Cis8ZGl2PlRoZSBBbmRyb2lkIGJ1aWxkIHJlcXVpcmVzIGEgMzItYml0IGJ1aWxkIGVudmlyb25tZW50IGFzIHdlbGwgYXMgc29tZSBvdGhlciB0b29sczo8YnI+PC9kaXY+Cis8ZGl2Pjx1bD48bGk+UmVxdWlyZWQgUGFja2FnZXM6PC9saT4KKzx1bD48bGk+R2l0LCBKREssIGZsZXgsIGFuZCB0aGUgb3RoZXIgcGFja2FnZXMgYXMgbGlzdGVkIGFib3ZlIGluIHRoZSBpMzg2IGluc3RydWN0aW9uczo8c3Bhbj48YnI+PC9zcGFuPgorPC9saT4KKzxsaT5KREsgNS4wLCB1cGRhdGUgMTIgb3IgaGlnaGVyLkphdmEgNiBpcyBub3Qgc3VwcG9ydGVkLCBiZWNhdXNlIG9mIGluY29tcGF0aWJpbGl0aWVzIHdpdGggQE92ZXJyaWRlLjwvbGk+Cis8bGk+UGllY2VzIGZyb20gdGhlIDMyLWJpdCBjcm9zcy1idWlsZGluZyBlbnZpcm9ubWVudDwvbGk+Cis8bGk+WDExIGRldmVsb3BtZW50IDxicj48L2xpPgorPC91bD4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxibG9ja3F1b3RlPjxzcGFuPjxzcGFuPiQ8L3NwYW4+CitzdWRvIGFwdC1nZXQgaW5zdGFsbCBnaXQtY29yZSBnbnVwZyBmbGV4IGJpc29uIGdwZXJmIGJ1aWxkLWVzc2VudGlhbCB6aXAgY3VybDwvc3Bhbj4KK3N1bi1qYXZhNS1qZGsgPHNwYW4+PHNwYW4+emxpYjFnLWRldjwvc3Bhbj4KKzwvc3Bhbj4KK2djYy1tdWx0aWxpYiBnKystbXVsdGlsaWIgbGliYzYtZGV2LWkzODYgbGliMzJuY3Vyc2VzNS1kZXYgaWEzMi1saWJzIHgxMXByb3RvLWNvcmUtZGV2IGxpYngxMS1kZXYgbGliMzJyZWFkbGluZTUtZGV2IGxpYjMyei1kZXY8L2Jsb2NrcXVvdGU+Cis8dWw+PGxpPlNldCB0aGUgc3lzdGVtIHRvIHVzZSB0aGUgcmlnaHQgdmVyc2lvbiBvZiBqYXZhIGJ5IGRlZmF1bHQ6PGJyPjxicj4kc3VkbyB1cGRhdGUtamF2YS1hbHRlcm5hdGl2ZXMgLXNqYXZhLTEuNS4wLXN1biA8YnI+PC9saT4KKzwvdWw+Cis8dWw+PGxpPlgxMTogVWJ1bnR1IGRvZXNuJ3QgaGF2ZSBwYWNrYWdlcyBmb3IgdGhlIFgxMSBsaWJyYXJpZXMsIGJ1dCB0aGF0IGNhbiBiZSB3b3JrZWQgYXJvdW5kIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOjxicj48YnI+JCBzdWRvIGxuIC1zIC91c3IvbGliMzIvbGliWDExLnNvLjYgL3Vzci9saWIzMi9saWJYMTEuc28gPGJyPjxicj48L2xpPgorPC91bD4KKzxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdj48aDQ+CitSdW5uaW5nIExpbnV4IGluIGEgdmlydHVhbCBtYWNoaW5lPC9oND4KK0lmIHlvdSBhcmUgcnVubmluZyBMaW51eCBpbiBhIHZpcnR1YWwgbWFjaGluZSwgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCAxLjVHQiBvZiBSQU0gYW5kIDEwR0Igb3IgbW9yZSBvZiBkaXNrIHNwYWNlIGluIG9yZGVyIHRvIGJ1aWxkIHRoZSBBbmRyb2lkIHRyZWUuPGJyPjxoND4KK090aGVyIExpbnV4PC9oND4KKzxwPlRoZXJlJ3Mgbm8gcmVhc29uIHdoeSBBbmRyb2lkIGNhbm5vdCBiZSBidWlsdCBvbiBub24tVWJ1bnR1IHN5c3RlbXMuIFBsZWFzZSBzZW5kIGFueSBzdWNjZXNzIG9yIGZhaWx1cmUgcmVwb3J0cyB0byA8YSBocmVmPSJtYWlsdG86YW5kcm9pZC1wb3J0aW5nQGdvb2dsZWdyb3Vwcy5jb20iPmFuZHJvaWQtcG9ydGluZ0Bnb29nbGVncm91cHMuY29tPC9hPgorPHNwYW4+LiBJbiBnZW5lcmFsIHlvdSB3aWxsIG5lZWQ6PC9zcGFuPgorPC9wPgorPHVsPjxsaT5QeXRob24gMi40LCB3aGljaCB5b3UgY2FuIDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8iPmRvd25sb2FkIGZyb20gcHl0aG9uLm9yZzwvYT4uPC9saT4KKzxsaT5KREsgNS4wLCB1cGRhdGUgMTIgb3IgaGlnaGVyLCB3aGljaCB5b3UgY2FuIDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vamF2YXNlL2Rvd25sb2Fkcy8iPmRvd25sb2FkIGZyb20gamF2YS5zdW4uY29tPC9hPi4gSmF2YSA2IGlzIG5vdCBzdXBwb3J0ZWQsIGJlY2F1c2Ugb2YgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBAT3ZlcnJpZGUuPC9saT4KKzxsaT5HaXQgMS41LjQgb3IgbmV3ZXIuIFlvdSBjYW4gZmluZCBpdCBhdCA8YSBocmVmPSJodHRwOi8vZ2l0Lm9yLmN6LyI+aHR0cDovL2dpdC5vci5jei88L2E+LjwvbGk+Cis8L3VsPgorPHA+QW55dGhpbmcgbWlzc2luZyBmcm9tIHRoaXMgbGlzdD8gUGxlYXNlIGxldCB1cyBrbm93ITwvcD4KKzxoND4KKzxzcGFuPjxicj48L3NwYW4+Cis8L2g0PgorPC9kaXY+Cis8ZGl2PjxoMz4KK01hYyBPUyA8YnI+PC9oMz4KKzwvZGl2PgorPGRpdj48cD48c3Bhbj5SZXF1aXJlbWVudHM6PC9zcGFuPgorPC9wPgorPHVsPjxsaT48c3Bhbj5UbyBidWlsZCB0aGUgQW5kcm9pZCBmaWxlcyBpbiBhIE1hYyBPUyBlbnZpcm9ubWVudCwgeW91IG5lZWQgYW4gSW50ZWwveDg2IG1hY2hpbmUgcnVubmluZyBNYWNPUyAxMC40ICgiVGlnZXIiKSBvciAxMC41ICgiTGVvcGFyZCIpLiBBdCB0aGUgbW9tZW50IE1hY09TIDEwLjYgKCJTbm93IExlb3BhcmQiKSBpcyBub3Qgc3VwcG9ydGVkLiBUaGUgQW5kcm9pZCBidWlsZCBzeXN0ZW0gYW5kIHRvb2xzIGRvIG5vdCBzdXBwb3J0IHRoZSBvYnNvbGV0ZSBQb3dlclBDIGFyY2hpdGVjdHVyZS48L3NwYW4+Cis8L2xpPgorPGxpPjxzcGFuPkFuZHJvaWQgbXVzdCBiZSBidWlsdCBvbiBhIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLjxicj48L3NwYW4+Cis8L2xpPgorPHVsPjxsaT5XZSByZWNvbW1lbmQgdGhhdCB5b3UgYnVpbGQgQW5kcm9pZCBvbiBhIHBhcnRpdGlvbiB0aGF0IGhhcyBiZWVuIGZvcm1hdHRlZCB3aXRoIHRoZSAiQ2FzZS1zZW5zaXRpdmUgSm91cm5hbGVkIEhGUysiIGZpbGUgc3lzdGVtOjwvbGk+Cis8dWw+PGxpPkEgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgc291cmNlcyBjb250YWluIGZpbGVzIHRoYXQgZGlmZmVyIG9ubHkgaW4gY2FzZS48L2xpPgorPGxpPkpvdXJuYWxlZCBzeXN0ZW1zIGFyZSBtb3JlIHJvYnVzdC4gKFRoaXMgaXMgb3B0aW9uYWwsIGJ1dCByZWNvbW1lbmRlZC4pPC9saT4KKzxsaT5IRlMrIGlzIHJlcXVpcmVkIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCBNYWMgT1MgYXBwbGljYXRpb25zIHN1Y2ggYXMgdGhlIEFuZHJvaWQgRW11bGF0b3IgZm9yIE9TIFguPC9saT4KKzwvdWw+Cis8bGk+SWYgeW91IHdhbnQgdG8gYXZvaWQgcGFydGl0aW9uaW5nL2Zvcm1hdHRpbmcgeW91ciBoYXJkIGRyaXZlLCB5b3UgY2FuIHVzZSBhIGNhc2Utc2Vuc2l0aXZlIGRpc2sgaW1hZ2UgaW5zdGVhZC48L2xpPgorPHVsPjxsaT5UbyBjcmVhdGUgdGhlIGltYWdlOjxicj48dWw+PGxpPmxhdW5jaCAvQXBwbGljYXRpb25zL1V0aWxpdGllcy9EaXNrIFV0aWxpdHk8L2xpPgorPGxpPnNlbGVjdCAiTmV3IEltYWdlIjwvbGk+Cis8bGk+c2l6ZTogOCBHQiAodGhpcyB3aWxsIHdvcmssIGJ1dCB5b3UgY2FuIGNob29zZSBtb3JlIGlmIHlvdSB3YW50IHRvKTwvbGk+Cis8bGk+dm9sdW1lIGZvcm1hdDogY2FzZSBzZW5zaXRpdmUsIGpvdXJuYWxlZDwvbGk+Cis8L3VsPgorPC9saT4KKzxsaT5UaGlzIHdpbGwgY3JlYXRlIGEgLmRtZyBmaWxlIHdoaWNoLCBvbmNlIG1vdW50ZWQsIGFjdHMgYXMgYSBkcml2ZSB3aXRoIHRoZSByZXF1aXJlZCBmb3JtYXR0aW5nIGZvciBBbmRyb2lkIGRldmVsb3BtZW50LiBGb3IgYSBkaXNrIGltYWdlIG5hbWVkICJhbmRyb2lkLmRtZyIgc3RvcmVkIGluIHlvdXIgaG9tZSBkaXJlY3RvcnksIHlvdSBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciB+Ly5iYXNoX3Byb2ZpbGUgdG8gbW91bnQgdGhlIGltYWdlIHdoZW4geW91IGV4ZWN1dGUgIm1vdW50QW5kcm9pZCI6PGJyPjxicj48ZGl2PiMgY29tbWFuZCB0byBtb3VudCB0aGUgYW5kcm9pZCBmaWxlIGltYWdlIDxicj5mdW5jdGlvbiBtb3VudEFuZHJvaWR7IGhkaXV0aWwgYXR0YWNoIH4vYW5kcm9pZC5kbWctbW91bnRwb2ludCAvVm9sdW1lcy9hbmRyb2lkOyB9PGJyPjwvZGl2PgorPGJyPk9uY2UgbW91bnRlZCwgeW91J2xsIGRvIGFsbCB5b3VyIHdvcmsgaW4gdGhlICJhbmRyb2lkIiB2b2x1bWUuIFlvdSBjYW4gZWplY3QgaXQgKHVubW91bnQgaXQpIGp1c3QgbGlrZSB5b3Ugd291bGQgd2l0aCBhbiBleHRlcm5hbCBkcml2ZS48L2xpPgorPC91bD4KKzwvdWw+Cis8L3VsPgorPHVsPjwvdWw+CitUbyBzZXQgdXAgeW91ciBNYWMgT1MgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGZvbGxvdyB0aGVzZSBzdGVwczo8YnI+PG9sPjxsaT5JbnN0YWxsIHRoZSBYQ29kZSB2ZXJzaW9uIDIuNCBvciBsYXRlciBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tLyI+aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb208L2E+LiBXZSByZWNvbW1lbmQgdmVyc2lvbiAzLjAgb3IgbmV3ZXIuPGJyPjwvbGk+Cis8bGk+SW5zdGFsbCBNYWNQb3J0cy4gVG8gZG8gdGhpczo8L2xpPgorPG9sPjxsaT5Eb3dubG9hZCB0aGUgdGFyIGZpbGUgZnJvbSA8YSBocmVmPSJodHRwOi8vd3d3Lm1hY3BvcnRzLm9yZy8iPmh0dHA6Ly93d3cubWFjcG9ydHMub3JnLzwvYT4gYW5kIHVudGFyIHRoZSBmaWxlcy48L2xpPgorPGxpPlJ1biB0aGUgZm9sbG93aW5nOjxzcGFuPjxicj4kIC4vY29uZmlndXJlIDxicj48L3NwYW4+Cis8c3Bhbj4kPC9zcGFuPgorPHNwYW4+bWFrZSA8YnI+PC9zcGFuPgorPHNwYW4+JDwvc3Bhbj4KKzxzcGFuPnN1ZG8gbWFrZSBpbnN0YWxsPC9zcGFuPgorPC9saT4KKzxsaT5NYWtlIHN1cmUgdGhhdCAvb3B0L2xvY2FsL2JpbiBpcyBpbiB5b3VyIHBhdGggYmVmb3JlIC91c3IvYmluLiBieSBydW5uaW5nIDxicj4kIGVjaG8gJFBBVEggPGJyPklmIHlvdSBkb24ndCBzZWUgL29wdC9sb2NhbC9iaW4sIGVkaXQgJEhPTUUvLmJhc2hfcHJvZmlsZSBhbmQgYWRkIHRoZSBsaW5lIDxicj5leHBvcnQgUEFUSD0vb3B0L2xvY2FsL2JpbjokUEFUSCA8YnI+KG9yIHRoZSBlcXVpdmFsZW50IGZvciBvdGhlciBzaGVsbHMpIGFmdGVyIGFueSBvdGhlciBQQVRILXJlbGF0ZWQgbGluZXMuPHNwYW4+VG8gdmVyaWZ5IHRoYXQgeW91ciBwYXRoIGlzIG5vdyBjb3JyZWN0LCBvPC9zcGFuPgorcGVuIGEgbmV3IHRlcm1pbmFsIGFuZCA8c3Bhbj5ydW48L3NwYW4+CitlY2hvICRQQVRIIDxzcGFuPmFnYWluPC9zcGFuPgorLjwvbGk+Cis8bGk+QXNrIE1hY1BvcnRzIHRvIHVwZGF0ZSBpdHNlbGY6PGJyPjxzcGFuPjwvc3Bhbj4KKzxzcGFuPiQ8L3NwYW4+Cis8c3Bhbj5zdWRvIHBvcnQgc2VsZnVwZGF0ZTwvc3Bhbj4KKzxicj48L2xpPgorPC9vbD4KKzxsaT5HZXQgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyBmcm9tIHBvcnQ6PGJyPiQ8c3Bhbj5QT1NJWExZX0NPUlJFQ1Q9MTwvc3Bhbj4KK3N1ZG8gcG9ydCBpbnN0YWxsIGdtYWtlIGxpYnNkbCBnaXQtY29yZSBnbnVwZyA8YnI+PHNwYW4+SWYgdXNpbmcgTWFjIE9TIDEwLjQsIGFsc28gaW5zdGFsbDo8YnI+JDxzcGFuPlBPU0lYTFlfQ09SUkVDVD0xPC9zcGFuPgorc3VkbyBwb3J0IGluc3RhbGwgYmlzb24gPGJyPjwvc3Bhbj4KKzwvbGk+Cis8bGk+VXBncmFkZSBHTlUgbWFrZSB0byAzLjgxIG9yIGxhdGVyIGJ5IHJ1bm5pbmcuTWFjIE9TIGRvZXNuJ3QgY29tZSB3aXRoIGEgcmVjZW50IGVub3VnaCB2ZXJzaW9uLjxicj4kIHN1ZG8gbG4gLXMgZ21ha2UgL29wdC9sb2NhbC9iaW4vbWFrZSA8YnI+PC9saT4KKzxsaT5TZXQgYW4gYXBwcm9wcmlhdGUgcGVyLXByb2Nlc3MgZmlsZSBkZXNjcmlwdG9yIGxpbWl0LiBUbyBkbyB0aGlzLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIDxpPjxzcGFuPi5iYXNoX3Byb2ZpbGU8L3NwYW4+Cis8L2k+CitmaWxlOjxicj4jIHNldCB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZXMgdG8gYmUgMTAyNDxicj51bGltaXQgLVMgLW4gMTAyNDwvbGk+Cis8L29sPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdj48YnI+PC9kaXY+Cis8aDI+CitJbnN0YWxsaW5nIFJlcG8gPGJyPjwvaDI+Cis8ZGl2PjxwPlJlcG8gaXMgYSB0b29sIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBHaXQgaW4gdGhlIGNvbnRleHQgb2YKK0FuZHJvaWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFJlcG8sIHNlZSA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9naXQtcmVwby5odG1sIj5Vc2luZyBSZXBvIGFuZCBHaXQ8L2E+CisuPGJyPjwvcD4KK1RvIGluc3RhbGwsIGluaXRpYWxpemUsIGFuZCBjb25maWd1cmUgUmVwbywgZm9sbG93IHRoZXNlIHN0ZXBzOjxicj48YnI+PC9kaXY+Cis8b2w+PGxpPjxzcGFuPk1ha2Ugc3VyZSB5b3UgaGF2ZSBhfi9iaW5kaXJlY3RvcnkgaW4geW91ciBob21lIGRpcmVjdG9yeSwgYW5kIGNoZWNrIHRvIGJlIHN1cmUgdGhhdCB0aGlzIGJpbiBkaXJlY3RvcnkgaXMgaW4geW91ciBwYXRoOjwvc3Bhbj4KKzxicj4kIGNkfjxicj48c3Bhbj48c3Bhbj4kIG1rZGlyIGJpbiA8YnI+JCBlY2hvICRQQVRIIDxicj48L3NwYW4+Cis8L3NwYW4+Cis8L2xpPgorPGxpPjxzcGFuPkRvd25sb2FkIHRoZXJlcG9zY3JpcHQgYW5kIG1ha2Ugc3VyZSBpdCBpcyBleGVjdXRhYmxlOjwvc3Bhbj4KKzxicj4kIGN1cmwgaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcmVwb34vYmluL3JlcG8gPGRpdj4kIGNobW9kIGEreCB+L2Jpbi9yZXBvPC9kaXY+Cis8L2xpPgorPC9vbD4KKzwvZGl2PgorPGRpdj48cD48YnI+PC9wPgorPGgyPgorSW5pdGlhbGl6aW5nIGEgUmVwbyBjbGllbnQgPGJyPjwvaDI+Cis8L2Rpdj4KKzxkaXY+PG9sPjxsaT48c3Bhbj5DcmVhdGUgYW4gZW1wdHkgZGlyZWN0b3J5IHRvIGhvbGQgeW91ciB3b3JraW5nIGZpbGVzOjwvc3Bhbj4KKzxzcGFuPjxicj48L3NwYW4+Cis8c3Bhbj4kIG1rZGlyIG15ZHJvaWQ8L3NwYW4+Cis8YnI+PHNwYW4+JCBjZCBteWRyb2lkPC9zcGFuPgorPGJyPjwvbGk+Cis8bGk+PHNwYW4+UnVucmVwbyBpbml0dG8gYnJpbmcgZG93biB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgUmVwbyB3aXRoIGFsbCBpdHMgbW9zdCByZWNlbnQgYnVnIGZpeGVzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgVVJMIGZvciB0aGUgbWFuaWZlc3Q6PC9zcGFuPgorPGJyPjxzcGFuPiQgcmVwbyBpbml0PC9zcGFuPgorLXUgZ2l0Oi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9wbGF0Zm9ybS9tYW5pZmVzdC5naXQ8L2xpPgorPHVsPjxsaT48c3Bhbj5JZiB5b3Ugd291bGQgbGlrZSB0byBjaGVjayBvdXQgYSBicmFuY2ggb3RoZXIgdGhhbiAibWFzdGVyIiwgc3BlY2lmeSBpdCB3aXRoIC1iLCBsaWtlOjwvc3Bhbj4KKzxicj48c3Bhbj4kIHJlcG8gaW5pdDwvc3Bhbj4KKy11IGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3QuZ2l0IC1iIGN1cGNha2UgPGJyPjwvbGk+Cis8L3VsPgorPGxpPjxzcGFuPldoZW4gcHJvbXB0ZWQsIGNvbmZpZ3VyZSBSZXBvIHdpdGggeW91ciByZWFsIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MuIElmIHlvdSBwbGFuIHRvIHN1Ym1pdCBjb2RlLCB1c2UgYW4gZW1haWwgYWRkcmVzcyB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYWNjb3VudHMiPkdvb2dsZSBhY2NvdW50PC9hPgorLjwvc3Bhbj4KKzxicj48L2xpPgorPC9vbD4KKzxzcGFuPjxzcGFuPkEgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbiB3aWxsIGVuZCB3aXRoIGEgbWVzc2FnZSBzdWNoIGFzPC9zcGFuPgorPGJyPjxzcGFuPnJlcG88L3NwYW4+Citpbml0aWFsaXplZCBpbiAvbXlkcm9pZDwvc3Bhbj4KKzxicj48c3Bhbj48c3Bhbj48YnI+WW91ciBjbGllbnQgZGlyZWN0b3J5IHNob3VsZCBub3cgY29udGFpbiBhLnJlcG9kaXJlY3Rvcnkgd2hlcmUgZmlsZXMgc3VjaCBhcyB0aGUgbWFuaWZlc3Qgd2lsbCBiZSBrZXB0Ljwvc3Bhbj4KKzxicj48YnI+PC9zcGFuPgorPHNwYW4+PHNwYW4+PGI+V2hhdCB3aWxsIG15IG5hbWUgYW5kIGVtYWlsIGJlIHVzZWQgZm9yPzwvYj4KKzxicj48L3NwYW4+Cis8c3Bhbj48YnI+VG8gdXNlIHRoZSBHZXJyaXQgY29kZS1yZXZpZXcgdG9vbCw8L3NwYW4+Cis8c3Bhbj55b3Ugd2lsbCBuZWVkIGFuIGVtYWlsIGFkZHJlc3MgdGhhdCBpcyBjb25uZWN0ZWQgd2l0aCBhIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hY2NvdW50cyI+cmVnaXN0ZXJlZCBHb29nbGUgYWNjb3VudDwvYT4KKyh3aGljaCBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgR21haWwgYWRkcmVzcykuIE1ha2Ugc3VyZSB0aGlzIGlzPC9zcGFuPgorPHNwYW4+YSBsaXZlIGFkZHJlc3M8L3NwYW4+Cis8c3Bhbj5hdCB3aGljaCB5b3UgY2FuIHJlY2VpdmUgbWVzc2FnZXM8L3NwYW4+Cis8c3Bhbj4uPC9zcGFuPgorPHNwYW4+VGhlIHJlYWwgbmFtZSB0aGF0IHlvdSBwcm92aWRlIGhlcmUgd2lsbCBzaG93IHVwIGluIGF0dHJpYnV0aW9ucyBmb3IgeW91ciBjb2RlIHN1Ym1pc3Npb25zLjwvc3Bhbj4KKzwvc3Bhbj4KKzxicj48L2Rpdj4KKzxzcGFuPjxwPjxiPldoYXQgaXMgYSBtYW5pZmVzdCBmaWxlPzwvYj4KKzwvcD4KKzxwPjxzcGFuPlRoZSBBbmRyb2lkIHNvdXJjZSBmaWxlcyBhcmUgZGl2aWRlZCBhbW9uZyBhIG51bWJlciBvZiBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzLjwvc3Bhbj4KKzxzcGFuPkEgbWFuaWZlc3Q8L3NwYW4+Cis8c3Bhbj5maWxlIGNvbnRhaW5zIGEgbWFwcGluZyBvZiB3aGVyZSB0aGUgZmlsZXMgZnJvbSB0aGVzZSByZXBvc2l0b3JpZXMgd2lsbCBiZSBwbGFjZWQgd2l0aGluIHlvdXIgd29ya2luZyBkaXJlY3Rvcnkgdzwvc3Bhbj4KKzxzcGFuPmhlbiB5b3Ugc3luY2hyb25pemUgeW91ciBmaWxlcy48YnI+PC9zcGFuPgorPC9wPgorPHA+PHNwYW4+PGJyPjwvc3Bhbj4KKzwvcD4KKzwvc3Bhbj4KKzxoMj4KK0dldHRpbmcgdGhlIGZpbGVzPC9oMj4KKzxkaXY+PHNwYW4+PHNwYW4+VG8gcHVsbCBkb3duIGZpbGVzIHRvIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgZnJvbSB0aGUgcmVwb3NpdG9yaWVzIGFzIHNwZWNpZmllZCBpbiB0aGUgZGVmYXVsdCBtYW5pZmVzdCwgcnVuPC9zcGFuPgorPGJyPjxicj4kIHJlcG8gc3luYyA8aT48YnI+PC9pPgorPGJyPjxzcGFuPkZvciBtb3JlIGFib3V0cmVwbyBzeW5jYW5kIG90aGVyIFJlcG8gY29tbWFuZHMsIHNlZTwvc3Bhbj4KKzxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPgorPHNwYW4+Ljwvc3Bhbj4KKzxicj48YnI+PHNwYW4+VGhlIEFuZHJvaWQgc291cmNlIGZpbGVzIHdpbGwgYmUgbG9jYXRlZCBpbiB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSB1bmRlciB0aGVpciBwcm9qZWN0IG5hbWVzLjwvc3Bhbj4KKzwvc3Bhbj4KKzxicj48L2Rpdj4KKzxzcGFuPjxoMj4KKzxicj48L2gyPgorPGgyPgorVmVyaWZ5aW5nIEdpdCBUYWdzPC9oMj4KKzxzcGFuPkxvYWQgdGhlIGZvbGxvd2luZyBwdWJsaWMga2V5IGludG8geW91ciBHbnVQRyBrZXkgZGF0YWJhc2UuVGhlIGtleSBpcyB1c2VkIHRvIHNpZ24gYW5ub3RhdGVkIHRhZ3MgdGhhdCByZXByZXNlbnQgcmVsZWFzZXMuPC9zcGFuPgorPGJyPjxicj48L3NwYW4+Cis8c3Bhbj4kIGdwZyAtLWltcG9ydCA8YnI+PGJyPjwvc3Bhbj4KKzxzcGFuPjxzcGFuPnRoZW4gcGFzdGUgdGhlIGtleShzKSBiZWxvdywgYW5kIHByZXNzIENvbnRyb2wtRCB0byBlbmQgdGhlIGlucHV0IGFuZCBwcm9jZXNzIHRoZSBrZXlzLjwvc3Bhbj4KK0FmdGVyIGltcG9ydGluZyB0aGUga2V5cywgeW91IGNhbiB2ZXJpZnkgYW55IHRhZyB3aXRoIDxicj48YnI+PC9zcGFuPgorPHNwYW4+JCBnaXQgdGFnIC12IDxpPnRhZ25hbWU8L2k+Cis8L3NwYW4+Cis8c3Bhbj48YnI+PGJyPjxiPjx1PmtleSA5QUIxMEU3ODogIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Rpbml0aWFsLWNvbnRyaWJ1dGlvbkBhbmRyb2lkLmNvbSI8L3U+Cis8L2I+Cis8YnI+PC9zcGFuPgorPHByZT4tLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS08YnI+VmVyc2lvbjogR251UEcgdjEuNC4yLjIgKEdOVS9MaW51eCk8YnI+PGJyPm1RR2lCRW5uV0Q0UkJBQ3Q5L2g0djl4bm5HRG91MTN5M2R2T3g2L3Q0M0xQUEl4ZUo4ZVg5V0IrOExMdVJPU1YgPGJyPmxGaHBIYXdzVkFjRmxtaTdmN2pkU1JGK092dFpMOVNoUEtkTGZ3QkpNTmtVNjYvVFptUGV3UzRtNzgybmR0dzc8YnI+OHRSMWNYYjE5N09iOGtPZlFCM0E5eWsyWFo0ZWk0WkMzaTZ3VmRxSExSeEFCZG5jd3U1aE9GOUtYd0Nna3hNRCA8YnI+dTRQVmdDaGFBSnpUWUoxRUcrVVlCSVVFQUptZmVhcmIwcVJBTjdkRW9mZjBGZVhzRWFVQTZVOTBzRW9Wa3MwWiA8YnI+d05qOTZTQThCTCthMU9vRVVVZnBNaGlIeUx1UVNmdHhpc0p4VGgrMlFjbHpEdmlEeWFUcmtBTmpkWVk3cDJjcSA8YnI+L0hNZE9ZN0xKbEhhcXRYbVp4WGpqdHc1VWMyUUc4VVk4YXppVTNJRTluVGpTd0NYZUpudXl2b2l6bDkvSTFTNTxicj5qVTVTQS85V3dJcHM0U0M4NGllbElYaUdXRXFxNmk2L3NrNEk5cTFZZW1aRjJYVlZLbm1JMUY0aUNNdE5Lc1I0PGJyPk1HU2ExZ0E4czRpUWJzS05XUGdwN00zYTUxSkNWQ3U2bC84elRwQSt1VUdhcHc0dFdDcDRvMGRwSXZEUEJFYTk8YnI+Yi9hRi95Z2NSOG1oNWhnVWZwRjlJcFhka25Pc2JLQ3ZNOWxTU2ZSY2lFVHlrWmM0d3JSQ1ZHaGxJRUZ1WkhKdiA8YnI+YVdRZ1QzQmxiaUJUYjNWeVkyVWdVSEp2YW1WamRDQThhVzVwZEdsaGJDMWpiMjUwY21saWRYUnBiMjVBWVc1ayA8YnI+Y205cFpDNWpiMjAraUdBRUV4RUNBQ0FGQWtubldENENHd01HQ3drSUJ3TUNCQlVDQ0FNRUZnSURBUUllQVFJWCA8YnI+Z0FBS0NSRG9yVCtCbXJFT2VOcitBSjQyWHk2dEVXN3IzS3pySnhuUlg4bWlqOXo4dGdDZEZmUVlpSHBZbmdrSSA8YnI+MnQwOUVkKzlCbTRnbUVPNUFnMEVTZWRZUkJBSUFLVlcxSmNNQld2Vi8wQm85V2lCeUo5V0o1c3dNTjM2L3ZBbCA8YnI+UU40bVdSaGZ6RE9rL1Jvc2RiMGNzQU8vbDhLejBnS1FQT2ZPYnR5WWp2SThKTUMzcm1pK0xJdlNVVDk4MDZVcCA8YnI+aGlzeUVtbUh2NlU4Z1ViL3hITElhblhHeHdoWXpqZ2V1QVhWQ3N2K0V2b1BJSGJZNEwvS3ZQNXgrb0NKSURiayA8YnI+QzJiMVR2Vms5UHJ5em1FNEJQSVFML050Z1Ixb0xXbS91V1I5elJVRnRCbkU0MTFhTUFOM3FuQUhCQk1aektNWCA8YnI+TFdCR1dFMHpuZlJybmN6STVwNDlpMllaSkFqeVgxUDJXem1TY0s0OUNWODJkekxvNzFNbnJGNmZqK1VkdGI1Kzxicj5PZ1RnN0Nvdys4UFJhVGtKRVc1WTJKSVpwblJVcTBDWXhBbUhZWDc5RU1LSERTVGhmLzhBQXdVSUFKUFdzQi9NIDxicj5wSytLTXMvczNyNm5Kcm5ZTFRmZFpodG1RWGltcG9ETUpnMXp4bUw4VWZOVUtpUVo2ZXNvQVd0RGdwcXQ3WTdzIDxicj5LWjhsYUhSQVJvbnRlMzk0aGlkWnpNNW5iNmhRdnBQanQyT2xQUnN5cVZ4dzRjL0tzakFEdEF1S1c5L2Q4cGhiIDxicj5OOGJUeU9Kbzg1NnFnNG9PRXpLRzllZUY3b2FaVFlCeTMzQlRMMDQwOHNFQnhpTWlvcjZiOExyWnJBaGtxRGpBIDxicj52VVhSd20vZkZLZ3BzT3lzeEM2eGk1NTNDeEJVQ0gyb21OVjZLYTFMTk13elNwOUlMejhqRUdxbVV0a0JzendvIDxicj5HMVM4ZlhnRTBMcTNjZERNL0dKNFFYUC9wNkxpd05GOTlmYURNVFYzKzJTQU9Hdnl0T1g2S2pLVnpLT1NzZkpRIDxicj5oTjBEbHNJdzhocUpjMFdJU1FRWUVRSUFDUVVDU2VkWVJBSWJEQUFLQ1JEb3JUK0JtckVPZUNVT0FKOXFtUjBsIDxicj5FWHplb3hjZG9hZnhxZjZnWmxKWmxBQ2drV0Y3d2kyWUxXM09hK2p2MlFTVGxyeDRLTE09PGJyPj1XaTVEIDxicj4tLS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tPGJyPjwvcHJlPgorPHNwYW4+PGJyPjxoMj4KK0J1aWxkaW5nIHRoZSBjb2RlPC9oMj4KKzxzcGFuPlRvIGJ1aWxkIHRoZSBmaWxlcywgcnVubWFrZWZyb20gd2l0aGluIHlvdXIgd29ya2luZyBkaXJlY3Rvcnk6PC9zcGFuPgorPGJyPjxzcGFuPiQgY2Qgfi9teWRyb2lkPC9zcGFuPgorPHNwYW4+PGJyPiQgbWFrZTwvc3Bhbj4KKzxicj48L3NwYW4+Cis8cD5JZiB5b3VyIGJ1aWxkIGZhaWxzLCBjb21wbGFpbmluZyBhYm91dCBhIG1pc3NpbmcgInJ1bi1qYXZhLXRvb2wiLCB0cnkgc2V0dGluZyB0aGUgQU5EUk9JRF9KQVZBX0hPTUUgZW52IHZhciB0byAkSkFWQV9IT01FIGJlZm9yZSBtYWtpbmcuRS5nLiw8L3A+Cis8cD4kIGV4cG9ydCBBTkRST0lEX0pBVkFfSE9NRT0kSkFWQV9IT01FPC9wPgorPGgyPgorVXNpbmcgYW4gSURFPC9oMj4KKzx1bD48bGk+PGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS91c2luZy1lY2xpcHNlLmh0bWwiPlVzaW5nIEVjbGlwc2U8L2E+Citmb3IgQW5kcm9pZCBwbGF0Zm9ybSBkZXZlbG9wbWVudCA8YnI+PC9saT4KKzwvdWw+Cis8aDI+CitUcm91Ymxlc2hvb3Rpbmc8L2gyPgorPHA+PHNwYW4+PGI+SW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYTwvYj4KKzxzcGFuPjxiPm1lZDwvYj4KKzwvc3Bhbj4KKzxzcGFuPjxiPnJlYWRsaW5lPC9iPgorPC9zcGFuPgorPGI+PGJyPjwvYj4KKzwvc3Bhbj4KKzwvcD4KKzxwPjxzcGFuPk1hYyB1c2VycyBnZXR0aW5nIHRoaXMgc2hvdWxkIGluc3RhbGwgUHl0aG9uIDIuNS4yLjwvc3Bhbj4KKzwvcD4KKzxwPjxzcGFuPkxpbnV4IHVzZXJzIHRoYXQgaW5zdGFsbGVkIFB5dGhvbiBmcm9tIHNvdXJjZSwgbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGxpYnJlYWRsaW5lIGFyZSBpbnN0YWxsZWQsIGFuZCByZWJ1aWxkIFB5dGhvbi48L3NwYW4+Cis8L3A+Cis8c3Bhbj48aDI+CitXaGF0J3MgbmV4dD88L2gyPgorPC9zcGFuPgorPHNwYW4+VG8gbGVhcm4gYWJvdXQgcmVwb3J0aW5nIGFuIGlzc3VlIGFuZCBzZWFyY2hpbmcgcHJldmlvdXNseSByZXBvcnRlZCBpc3N1ZXMsPC9zcGFuPgorPHNwYW4+c2VlPC9zcGFuPgorPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9yZXBvcnQtYnVncy5odG1sIj5SZXBvcnQgYnVnczwvYT4KKzxzcGFuPi48L3NwYW4+Cis8c3Bhbj5Gb3IgaW5mb3JtYXRpb24gYWJvdXQgZWRpdGluZyB0aGUgZmlsZXMgYW5kIHVwbG9hZGluZyBjaGFuZ2VzIHRvIHRoZQorY29kZS1yZXZpZXcgc2VydmVyLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9zdWJtaXQtcGF0Y2hlcy5odG1sIj5Db250cmlidXRlPC9hPgorLjwvc3Bhbj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL2dpdC1yZXBvLmpkIGIvcGRrL2RvY3Mvc291cmNlL2dpdC1yZXBvLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjN2ZkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvZ2l0LXJlcG8uamQKQEAgLTAsMCArMSwzMjAgQEAKK3BhZ2UudGl0bGU9VXNpbmcgUmVwbyBhbmQgR2l0Citkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8cD5UbyB3b3JrIHdpdGggdGhlIEFuZHJvaWQgY29kZSwgeW91IHdpbGwgbmVlZCB0byB1c2UgYm90aCBHaXQgYW5kIFJlcG8uPGJyPjwvcD4KKzx1bD48bGk+PGk+R2l0PC9pPgoraXMgYW4gb3Blbi1zb3VyY2UgdmVyc2lvbi1jb250cm9sIHN5c3RlbSBkZXNpZ25lZCB0byBoYW5kbGUgdmVyeSBsYXJnZSBwcm9qZWN0cyB0aGF0IGFyZSBkaXN0cmlidXRlZCBvdmVyIG11bHRpcGxlIHJlcG9zaXRvcmllcy4gSW4gdGhlIGNvbnRleHQgb2YgQW5kcm9pZCwgd2UgdXNlIEdpdCBmb3IgbG9jYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGxvY2FsIGJyYW5jaGluZywgY29tbWl0cywgZGlmZnMsIGFuZCBlZGl0cy48YnI+PGJyPjwvbGk+Cis8bGk+PGk+UmVwbzwvaT4KK2lzIGEgdG9vbCB0aGF0IHdlIGJ1aWx0IG9uIHRvcCBvZiBHaXQuIFJlcG8gaGVscHMgdXMgbWFuYWdlIHRoZSBtYW55IEdpdCByZXBvc2l0b3JpZXMsIGRvZXMgdGhlIHVwbG9hZHMgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyI+cmV2aXNpb24gY29udHJvbCBzeXN0ZW08L2E+CissIGFuZCBhdXRvbWF0ZXMgcGFydHMgb2YgdGhlIEFuZHJvaWQgZGV2ZWxvcG1lbnQgd29ya2Zsb3cuIFJlcG8gaXMgbm90IG1lYW50IHRvIHJlcGxhY2UgR2l0LCBvbmx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBHaXQgaW4gdGhlIGNvbnRleHQgb2YgQW5kcm9pZC4gVGhlIHJlcG9jb21tYW5kIGlzIGFuIGV4ZWN1dGFibGUgUHl0aG9uIHNjcmlwdCB0aGF0IHlvdSBjYW4gcHV0IGFueXdoZXJlIGluIHlvdXIgcGF0aC48aT48YnI+PGJyPjwvaT4KK0luIHdvcmtpbmcgd2l0aCB0aGUgQW5kcm9pZCBzb3VyY2UgZmlsZXMsIHlvdSB3aWxsIHVzZSBSZXBvIGZvciBhY3Jvc3MtbmV0d29yayBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgd2l0aCBhIHNpbmdsZSBSZXBvIGNvbW1hbmQgeW91IGNhbiBkb3dubG9hZCBmaWxlcyBmcm9tIG11bHRpcGxlIHJlcG9zaXRvcmllcyBpbnRvIHlvdXIgbG9jYWwgd29ya2luZyBkaXJlY3RvcnkuCis8L2xpPgorPC91bD4KKzxoMj4KK0Fib3V0IEdpdAorPC9oMj4KKzxoMz4KK1doeSBHaXQ/Cis8L2gzPgorT25lIG9mIHRoZSBjaGFsbGVuZ2VzIGluIHNldHRpbmcgdXAgdGhlIEFuZHJvaWQgcHJvamVjdCB3YXMgZmlndXJpbmcgb3V0IGhvdyB0byBiZXN0IHN1cHBvcnQgdGhlIG91dHNpZGUgY29tbXVuaXR5LS1mcm9tIHRoZSBob2JiaWVzdCBjb21tdW5pdHkgdG8gbGFyZ2UgT0VNcyBidWlsZGluZyBtYXNzLW1hcmtldCBjb25zdW1lciBkZXZpY2VzLiBXZSB3YW50ZWQgY29tcG9uZW50cyB0byBiZSByZXBsYWNlYWJsZSwgYW5kIHdlIHdhbnRlZCBpbnRlcmVzdGluZyBjb21wb25lbnRzIHRvIGJlIGFibGUgdG8gZ3JvdyBhIGxpZmUgb2YgdGhlaXIgb3duIG91dHNpZGUgb2YgQW5kcm9pZC4gV2UgZmlyc3QgY2hvc2UgYSBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSwgdGhlbiBmdXJ0aGVyIG5hcnJvd2VkIGl0IGRvd24gdG8gR2l0Ljxicj48aDM+CitBbHJlYWR5IGEgR2l0IHVzZXI/Cis8L2gzPgorSW4gbW9zdCBzaXR1YXRpb25zLCB5b3UgY2FuIHVzZSBHaXQgaW5zdGVhZCBvZiBSZXBvLCBvciBtaXggUmVwbyBhbmQgR2l0Citjb21tYW5kcyB0byBmb3JtIGNvbXBsZXggY29tbWFuZHMuIFVzaW5nIFJlcG8gZm9yIGJhc2ljIGFjcm9zcy1uZXR3b3JrCitvcGVyYXRpb25zIHdpbGwgbWFrZSB5b3VyIHdvcmsgbXVjaCBzaW1wbGVyLCBob3dldmVyLgorPGJyPjwvZGl2PgorPGRpdj48ZGl2PjxoMj4KK1Rhc2sgcmVmZXJlbmNlIDxicj48L2gyPgorVGhlIHRhc2sgbGlzdCBiZWxvdyBzaG93cyBhIHN1bW1hcnkgb2YgaG93IHRvIGRvIGNvbW1vbiBSZXBvIGFuZCBHaXQgdGFza3MuCitGb3IgY29tcGxldGUgcXVpY2stc3RhcnQgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+R2V0IHNvdXJjZTwvYT4KKy4KKzxoMz4KK0luc3RhbGxpbmcgUmVwbyA8YnI+PC9oMz4KKyQgY3VybCBodHRwOi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9yZXBvIH4vYmluL3JlcG8gPGRpdj4kIGNobW9kIGEreCB+L2Jpbi9yZXBvPC9kaXY+CiskIG1rZGlyIDxpPndvcmtpbmctZGlyZWN0b3J5LW5hbWU8L2k+Cis8YnI+JCBjZCA8aT53b3JraW5nLWRpcmVjdG9yeS1uYW1lIDxicj48L2k+CiskIHJlcG8gaW5pdC11IGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3QuZ2l0IDxicj48YnI+PGgzPgorU3luY2hyb25pemluZyB5b3VyIGNsaWVudAorPC9oMz4KK1RvIHN5bmNocm9uaXplIHRoZSBmaWxlcyBmb3IgYWxsIGF2YWlsYWJsZSBwcm9qZWN0czo8YnI+JCByZXBvIHN5bmMgPGJyPjxicj5Ubworc3luY2hyb25pemUgdGhlIGZpbGVzIGZvciBzZWxlY3RlZCBwcm9qZWN0czo8YnI+JCByZXBvIHN5bmMgPGk+cHJvamVjdDEKK3Byb2plY3QyIC4uLjwvaT4KKzxpPjxicj48L2k+Cis8YnI+PGgzPgorV2h5IHVzZSB0b3BpYyBicmFuY2hlcz8KKzwvaDM+CitTdGFydCBhIHRvcGljIGJyYW5jaCBpbiB5b3VyIGxvY2FsIHdvcmsgZW52aXJvbm1lbnQgd2hlbmV2ZXIgeW91IGJlZ2luIGEgY2hhbmdlLCBmb3IgZXhhbXBsZSB3aGVuIHlvdSBiZWdpbiB3b3JrIG9uIGEgYnVnIG9yIG5ldyBmZWF0dXJlLjxicj48YnI+QSB0b3BpYyBicmFuY2ggaXMgbm90IGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZmlsZXM7IGl0IGlzIGEgcG9pbnRlciB0byBhIHBhcnRpY3VsYXIgY29tbWl0LiBUaGlzIG1ha2VzIGNyZWF0aW5nIGxvY2FsIGJyYW5jaGVzIGFuZCBzd2l0Y2hpbmcgYW1vbmcgdGhlbSBhIGxpZ2h0LXdlaWdodCBvcGVyYXRpb24uIEJ5IHVzaW5nIGJyYW5jaGVzLCB5b3UgY2FuaXNvbGF0ZW9uZSBhc3BlY3Qgb2YgeW91ciB3b3JrIGZyb20gdGhlIG90aGVycy4gRm9yIGFuIGludGVyZXN0aW5nIGFydGljbGUgYWJvdXQgdXNpbmcgdG9waWMgYnJhbmNoZXMsIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dCI+U2VwYXJhdGluZyB0b3BpYyBicmFuY2hlczwvYT4KKy4KKzxkaXY+PGltZyBzcmM9IntAZG9jUm9vdH1pbWFnZXMvZ2l0LXJlcG8tMC5wbmciPgorPC9kaXY+Cis8YnI+PGJyPjxoMz4KK0NyZWF0aW5nIHRvcGljIGJyYW5jaGVzCis8L2gzPgorVG8gc3RhcnQgYSB0b3BpYyBicmFuY2ggdXNpbmcgUmVwbzo8YnI+JCByZXBvIHN0YXJ0IDxpPmJyYW5jaG5hbWU8L2k+Cis8YnI+PGJyPlRvIHZlcmlmeSB0aGF0IHlvdXIgbmV3IGJyYW5jaCB3YXMgY3JlYXRlZDo8YnI+JCByZXBvIHN0YXR1cyA8YnI+PGJyPjxoMz4KK1VzaW5nIHRvcGljIGJyYW5jaGVzCis8L2gzPgorVG8gYXNzaWduIHRoZSBicmFuY2ggdG8gYSBwYXJ0aWN1bGFyIHByb2plY3Q6PGJyPiQgcmVwbyBzdGFydCA8aT5icmFuY2g8L2k+Cis8aT5uYW1lIHByb2plY3Q8L2k+Cis8YnI+PGJyPlRvIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBhbW9uZyBicmFuY2hlcyB0aGF0IHlvdSBoYXZlIGNyZWF0ZWQgaW4geW91ciBsb2NhbCB3b3JrIGVudmlyb25tZW50Ojxicj4kIGdpdCBjaGVja291dCA8aT5icmFuY2huYW1lPC9pPgorPGJyPjxicj5UbyBzZWUgYSBsaXN0IG9mIGV4aXN0aW5nIGJyYW5jaGVzOjxicj4kIGdpdCBicmFuY2ggPGJyPm9yLi4uPGJyPiQgcmVwbyBicmFuY2hlcyA8YnI+PGJyPlRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCB3aWxsIGJlIHByZWNlZGVkIGJ5IGFuIGFzdGVyaXNrLjxicj48YnI+PC9kaXY+Cis8ZGl2PjxpPjxiPk5vdGU6PC9iPgorPGJyPjwvaT4KK0EgYnVnIG1pZ2h0IGJlIGNhdXNpbmcgcmVwbyBzeW5jIHRvIHJlc2V0IHRoZSBsb2NhbCB0b3BpYyBicmFuY2guIElmIGdpdCBicmFuY2ggc2hvd3MgKiAobm8gYnJhbmNoKSBhZnRlciB5b3UgcnVuIHJlcG8gc3luYywgdGhlbiBydW4gZ2l0IGNoZWNrb3V0YWdhaW4uPGJyPjwvZGl2PgorPGRpdj48YnI+PGgzPgorVmlld2luZyBjbGllbnQgc3RhdHVzCis8L2gzPgorVG8gbGlzdCB0aGUgc3RhdGUgb2YgeW91ciBmaWxlczo8YnI+JCByZXBvIHN0YXR1cyA8YnI+PGJyPlRvIHNlZSB1bmNvbW1pdHRlZCBlZGl0czo8YnI+JCByZXBvIGRpZmYgPGJyPjxicj5UaGVyZXBvIGRpZmZjb21tYW5kIHNob3dzIGV2ZXJ5IGxvY2FsIGVkaXQgdGhhdCB5b3UgaGF2ZSBtYWRlIHRoYXQgd291bGQgPGk+bm90PC9pPgorZ28gaW50byB0aGUgY29tbWl0LCBpZiB5b3Ugd2VyZSB0byBjb21taXQgcmlnaHQgbm93Ljxicj48YnI+VG8gc2VlIGV2ZXJ5IGVkaXQgdGhhdCB3b3VsZCBnbyBpbnRvIHRoZSBjb21taXQgaWYgeW91IHdlcmUgdG8gY29tbWl0IHJpZ2h0IG5vdywgeW91IG5lZWQgYSBHaXQgY29tbWFuZCwgZ2l0IGRpZmYuIEJlZm9yZSBydW5uaW5nIGl0LCBiZSBzdXJlIHlvdSBhcmUgZG93biBpbiB0aGUgcHJvamVjdCBkaXJlY3Rvcnk6PGJyPiQgY2Qgfi88aT53b3JraW5nZGlyZWN0b3J5PC9pPgorLzxpPnByb2plY3Q8L2k+Cis8YnI+JCBnaXQgZGlmZiAtLWNhY2hlZCA8YnI+PGJyPjxoMz4KK1JlY292ZXJpbmcgc3luYyBjb25mbGljdHMKKzwvaDM+CitJZiBhIHJlcG8gc3luYyBzaG93cyBzeW5jIGNvbmZsaWN0czo8YnI+PG9sPjxsaT5WaWV3IHRoZSBmaWxlcyB0aGF0IGFyZSB1bm1lcmdlZCAoc3RhdHVzIGNvZGUgPSBVKS4KKzwvbGk+Cis8bGk+RWRpdCB0aGUgY29uZmxpY3QgcmVnaW9ucyBhcyBuZWNlc3NhcnkuCis8L2xpPgorPGxpPkNoYW5nZSBpbnRvIHRoZSByZWxldmFudCBwcm9qZWN0IGRpcmVjdG9yeSwgcnVuIGdpdCBhZGQgYW5kIGdpdCBjb21taXQgZm9yIHRoZSBmaWxlcyBpbiBxdWVzdGlvbiwgYW5kIHRoZW4gInJlYmFzZSIgdGhlIGNoYW5nZXMuIEZvciBleGFtcGxlOjxicj4kIGNkIGJpb25pYyA8YnI+JCBnaXQgYWRkIGJpb25pYy8qPGJyPiQgZ2l0IGNvbW1pdCA8YnI+JCBnaXQgcmViYXNlIC0tY29udGludWUgPGJyPjxicj48L2xpPgorPGxpPldoZW4gdGhlIHJlYmFzZSBpcyBjb21wbGV0ZSBzdGFydCB0aGUgZW50aXJlIHN5bmMgYWdhaW46PGJyPiQgcmVwbyBzeW5jYmlvbmljIDxpPnByb2oyPC9pPgorPGk+cHJvajM8L2k+Cis8aT4uLi48L2k+CisKKzxpPnByb2pOPC9pPgorPGJyPjwvbGk+Cis8L29sPgorPGgzPgorQ2xlYW5pbmcgdXAgeW91ciBjbGllbnQgZmlsZXMgPGJyPjwvaDM+CitUbyB1cGRhdGUgeW91ciBsb2NhbCB3b3JraW5nIGRpcmVjdG9yeSBhZnRlciBjaGFuZ2VzIGFyZSBtZXJnZWQgaW4gR2Vycml0Ojxicj4kcmVwbyBzeW5jIDxicj48YnI+VG8gc2FmZWx5IHJlbW92ZSBzdGFsZSB0b3BpYyBicmFuY2hlczo8YnI+JCByZXBvIHBydW5lIDxicj48YnI+PGgzPgorRGVsZXRpbmcgYSBjbGllbnQKKzwvaDM+CitEZWxldGluZyBhIGNsaWVudCB3aWxsIDxiPnBlcm1hbmVudGx5IGRlbGV0ZTwvYj4KK2FueSBjaGFuZ2VzIHlvdSBoYXZlIG5vdCB5ZXQgdXBsb2FkZWQgZm9yIHJldmlldy5CZWNhdXNlYWxsIHN0YXRlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiB5b3VyIGNsaWVudCwgeW91IG9ubHkgbmVlZCB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSBmcm9tIHlvdXIgZmlsZXN5c3RlbTo8YnI+PGJyPiQgY2QgPGk+fjwvaT4KKzxicj4kIHJtIC1yZiA8aT53b3JraW5nLWRpcmVjdG9yeS1uYW1lPC9pPgorPGJyPjxicj48aDM+CitTY3JpcHRpbmcgY29tbW9uIHRhc2tzCis8L2gzPgorWW91IGNhbiB1c2UgUmVwbyB0byBydW4gdGhlIHNhbWUgcHJvZ3JhbSBhY3Jvc3MgYWxsIHByb2plY3RzOjxicj48YnI+JCByZXBvIGZvcmFsbFs8aT5wcm9qMTwvaT4KKzxpPnByb2oyPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KK10tYyAnPGk+ZWNobyAkUkVQT19QUk9KRUNUICRAPC9pPgorJ1s8aT5hcmcxPC9pPgorPGk+YXJnMjwvaT4KKzxpPi4uLjwvaT4KKworPGk+YXJnTjwvaT4KK108YnI+PGJyPlRoZSAtYyBhcmd1bWVudCBpcyBldmFsdWF0ZWQgdGhyb3VnaCAvYmluL3NoIGFuZCBhbnkgYXJndW1lbnRzIGFmdGVyIGl0IGFyZSBwYXNzZWQgdGhyb3VnaCBhcyBzaGVsbCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuPGJyPjxicj48aDI+CitSZXBvIGNvbW1hbmQgcmVmZXJlbmNlCis8L2gyPgorUmVwbyB1c2FnZSB0YWtlcyB0aGUgZm9sbG93aW5nIGZvcm06PGJyPnJlcG8gPGk+Y29tbWFuZCBvcHRpb25zPC9pPgorPGJyPjxicj5PcHRpb25hbCBlbGVtZW50cyBhcmUgc2hvd24gaW4gYnJhY2tldHNbIF0uIE9uY2UgUmVwbyBpcyBpbnN0YWxsZWQsIHlvdSBjYW4gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFueSBjb21tYW5kIGJ5IHJ1bm5pbmcgPGJyPnJlcG8gaGVscCA8aT5jb21tYW5kPC9pPgorPGJyPjxicj48aDM+Citpbml0Cis8L2gzPgorcmVwbyBpbml0IC11IDxpPnVybDwvaT4KK1s8aT5vcHRpb25zPC9pPgorXTxicj48YnI+PGRpdj5JbnN0YWxscyBSZXBvIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gVGhpcyBjcmVhdGVzIGEgLnJlcG8vIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIEdpdCByZXBvc2l0b3JpZXMgZm9yIHRoZSBSZXBvIHNvdXJjZSBjb2RlIGFuZCB0aGUgc3RhbmRhcmQgQW5kcm9pZCBtYW5pZmVzdCBmaWxlcy4gVGhlIC5yZXBvLyBkaXJlY3RvcnkgYWxzbyBjb250YWluc21hbmlmZXN0LnhtbCwgd2hpY2ggaXMgYSBzeW1saW5rIHRvIHRoZSBzZWxlY3RlZCBtYW5pZmVzdCBpbiB0aGUgLnJlcG8vbWFuaWZlc3RzLyBkaXJlY3RvcnkuPGJyPjxicj5UaGUgLXUgYXJndW1lbnQgc3BlY2lmaWVzIGEgVVJMIGZyb20gd2hpY2ggdG8gcmV0cmlldmUgYSBtYW5pZmVzdCByZXBvc2l0b3J5LiBGb3IgZXhhbXBsZTo8YnI+JCByZXBvIGluaXQgLXUgZ2l0Oi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9wbGF0Zm9ybS9tYW5pZmVzdC5naXQgPGJyPjxicj5UbyBzZWxlY3QgYSBtYW5pZmVzdCBmaWxlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeSwgdXNlIHRoZSAtbSBvcHRpb24uIChJZiBubyBtYW5pZmVzdCBuYW1lIGlzIHNlbGVjdGVkLCB0aGUgZGVmYXVsdCBpcyBkZWZhdWx0LnhtbC4pRm9yIGV4YW1wbGU6PGJyPiQgcmVwbyBpbml0IC11Z2l0Oi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9wbGF0Zm9ybS9tYW5pZmVzdC5naXQtbSBkYWxrdmlrLXBsdXMueG1sIDxicj48YnI+VG8gc3BlY2lmeSBhIHJldmlzaW9uLCB0aGF0IGlzLCBhIHBhcnRpY3VsYXIgbWFuaWZlc3QtYnJhbmNoLCB1c2UgdGhlIC1iIG9wdGlvbi4gRm9yIGV4YW1wbGU6PGJyPiQgcmVwbyBpbml0IC11Z2l0Oi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy9wbGF0Zm9ybS9tYW5pZmVzdC5naXQtYiByZWxlYXNlLTEuMDxicj48YnI+VG8gc2VlIG90aGVyIHJlcG8gaW5pdCBvcHRpb25zLCBydW4gPGJyPiQgcmVwbyBoZWxwIGluaXQgPGJyPjxicj48Yj5Ob3RlOjwvYj4KK0ZvciBhbGwgcmVtYWluaW5nIFJlcG8gY29tbWFuZHMsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG11c3QgZWl0aGVyIGJlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIC5yZXBvLyBvciBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeS48YnI+PGJyPjwvZGl2PgorPGgzPgorc3luYworPC9oMz4KK3JlcG8gc3luYyBbPGk+cHJvamVjdC1saXN0PC9pPgorXTxicj48YnI+PGRpdj5Eb3dubG9hZHMgbmV3IGNoYW5nZXMgYW5kIHVwZGF0ZXMgdGhlIHdvcmtpbmcgZmlsZXMgaW4geW91ciBsb2NhbCBlbnZpcm9ubWVudC4gQWZ0ZXIgYSBzdWNjZXNzZnVsIHJlcG8gc3luYywgdGhlIGNvZGUgaW4gc3BlY2lmaWVkIHByb2plY3RzIHdpbGwgYmUgdXAgdG8gZGF0ZSB3aXRoIHRoZSBjb2RlIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS48YnI+PGJyPllvdSBjYW4gc3BlY2lmeSBwcm9qZWN0LWxpc3QgYXMgYSBsaXN0IG9mIG5hbWVzIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb2NhbCBzb3VyY2UgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm9qZWN0czo8YnI+cmVwbyBzeW5jIFs8aT5wcm9qMTwvaT4KKzxpPnByb2oyPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KK108YnI+PGJyPklmIHlvdSBydW4gcmVwbyBzeW5jIHdpdGhvdXQgYW55IGFyZ3VtZW50cywgaXQgd2lsbCBzeW5jaHJvbml6ZSB0aGUgZmlsZXMgZm9yIGFsbCB0aGUgcHJvamVjdHMuPGJyPjxicj48L2Rpdj4KKzxwPjxiPkhvdyBSZXBvIHN5bmNocm9uaXphdGlvbiB3b3JrczwvYj4KKzxicj48L3A+Cis8ZGl2PldoZW4geW91IHJ1biByZXBvIHN5bmMsIHRoaXMgaXMgd2hhdCBoYXBwZW5zOjxicj48L2Rpdj4KKzxvbD48bGk+SWYgdGhlIHByb2plY3QgaGFzIG5ldmVyIGJlZW4gc3luY2hyb25pemVkLCB0aGVuIHJlcG8gc3luYyBpcyBlcXVpdmFsZW50IHRvIGdpdCBjbG9uZS4gQWxsIGJyYW5jaGVzIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBhcmUgY29waWVkIHRvIHRoZSBsb2NhbCBwcm9qZWN0IGRpcmVjdG9yeS4KKzwvbGk+Cis8bGk+SWYgdGhlIHByb2plY3QgaGFzIGFscmVhZHkgYmVlbiBzeW5jaHJvbml6ZWQgb25jZSwgdGhlbiByZXBvIHN5bmMgaXMgZXF1aXZhbGVudCB0bzo8YnI+Z2l0IHJlbW90ZSB1cGRhdGUgPGJyPmdpdCByZWJhc2Ugb3JpZ2luLzxpPmJyYW5jaDwvaT4KKzxicj53aGVyZSA8aT5icmFuY2g8L2k+CitpcyB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCBpbiB0aGUgbG9jYWwgcHJvamVjdCBkaXJlY3RvcnkuIElmIHRoZSBsb2NhbCBicmFuY2ggaXMgbm90IHRyYWNraW5nIGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgdGhlbiBubyBzeW5jaHJvbml6YXRpb24gd2lsbCBvY2N1ciBmb3IgdGhlIHByb2plY3QuPGJyPjxicj5JZiB0aGUgZ2l0IHJlYmFzZSBvcGVyYXRpb24gcmVzdWx0cyBpbiBtZXJnZSBjb25mbGljdHMsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoZSBub3JtYWwgR2l0IGNvbW1hbmRzIChmb3IgZXhhbXBsZSwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlKSB0byByZXNvbHZlIHRoZSBjb25mbGljdHMuPGJyPjwvbGk+Cis8L29sPgorPGRpdj5UaGUgcmVwbyBzeW5jIGNvbW1hbmQgYWxzbyB1cGRhdGVzIHRoZSBwcml2YXRlIHJlcG9zaXRvcmllcyBpbiB0aGUgLnJlcG8vIGRpcmVjdG9yeS48YnI+PC9kaXY+Cis8YnI+PGgzPgordXBsb2FkCis8L2gzPgorcmVwbyB1cGxvYWQgWzxpPnByb2plY3QtbGlzdDwvaT4KK108YnI+PGJyPjxkaXY+Rm9yIHRoZSBzcGVjaWZpZWQgcHJvamVjdHMsIFJlcG8gY29tcGFyZXMgdGhlIGxvY2FsIGJyYW5jaGVzIHRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdXBkYXRlZCBkdXJpbmcgdGhlIGxhc3QgcmVwbyBzeW5jLiBSZXBvIHdpbGwgcHJvbXB0IHlvdSB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIGJyYW5jaGVzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gdXBsb2FkZWQgZm9yIHJldmlldy48YnI+PGJyPkFmdGVyIHlvdSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMsIGFsbCBjb21taXRzIG9uIHRoZSBzZWxlY3RlZCBicmFuY2hlcyBhcmUgdHJhbnNtaXR0ZWQgdG8gR2Vycml0IG92ZXIgYW4gU1NIIGNvbm5lY3Rpb24uWW91IHdpbGwgbmVlZCB0byBjb25maWd1cmUgYW4gU1NIIGtleSB0byBlbmFibGUgdXBsb2FkIGF1dGhvcml6YXRpb24uVmlzaXQgPGEgaHJlZj0iaHR0cDovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vR2Vycml0I3NldHRpbmdzLHNzaC1rZXlzIj5TU0ggS2V5czwvYT4KK3dpdGhpbiB0aGUgdXNlciBzZXR0aW5ncyBwYW5lbCB0byByZWdpc3RlciB5b3VyIHB1YmxpYyBrZXlzIHdpdGggR2Vycml0LlRvIGVuYWJsZSBwYXNzd29yZC1sZXNzIHVwbG9hZHMsIGNvbnNpZGVyIHVzaW5nIHNzaC1hZ2VudCBvbiB5b3VyIGNsaWVudCBzeXN0ZW0uPGJyPjxicj5XaGVuIEdlcnJpdCByZWNlaXZlcyB0aGUgb2JqZWN0IGRhdGEgb3ZlciBpdHMgU1NIIHNlcnZlciwgaXQgd2lsbCB0dXJuIGVhY2ggY29tbWl0IGludG8gYSBjaGFuZ2Ugc28gdGhhdCByZXZpZXdlcnMgY2FuIGNvbW1lbnQgb24gZWFjaCBjb21taXQgaW5kaXZpZHVhbGx5Ljxicj48YnI+VG8gY29tYmluZSBzZXZlcmFsICJjaGVja3BvaW50IiBjb21taXRzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgY29tbWl0LCB1c2UgZ2l0IHJlYmFzZSAtaSBiZWZvcmUgeW91IHJ1biByZXBvIHVwbG9hZC48YnI+PGJyPllvdSBjYW4gc3BlY2lmeSBwcm9qZWN0LWxpc3QgYXMgYSBsaXN0IG9mIG5hbWVzIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb2NhbCBzb3VyY2UgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm9qZWN0czo8YnI+cmVwbyB1cGxvYWQgWzxpPnByb2oxPC9pPgorPGk+cHJvajI8L2k+Cis8aT4uLi48L2k+CisKKzxpPnByb2pOPC9pPgorXTxicj48YnI+SWYgeW91IHJ1biByZXBvIHVwbG9hZCB3aXRob3V0IGFueSBhcmd1bWVudHMsIGl0IHdpbGwgc2VhcmNoIGFsbCB0aGUgcHJvamVjdHMgZm9yIGNoYW5nZXMgdG8gdXBsb2FkLjxicj48YnI+VG8gbWFrZSBlZGl0cyB0byBjaGFuZ2VzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIHVwbG9hZGVkLCB5b3Ugc2hvdWxkIHVzZSBhIHRvb2wgbGlrZWdpdCByZWJhc2UgLWlvciBnaXQgY29tbWl0IC0tYW1lbmQgdG8gdXBkYXRlIHlvdXIgbG9jYWwgY29tbWl0cy48YnI+PGJyPkFmdGVyIHlvdXIgZWRpdHMgYXJlIGNvbXBsZXRlOjxicj48L2Rpdj4KKzxkaXY+PG9sPjxsaT5NYWtlIHN1cmUgdGhlIHVwZGF0ZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoLgorPC9saT4KKzxsaT5Vc2UgcmVwbyB1cGxvYWQgLS1yZXBsYWNlIDxpPnByb2oxPC9pPgordG8gb3BlbiB0aGUgY2hhbmdlIG1hdGNoaW5nIGVkaXRvci4KKzwvbGk+Cis8bGk+Rm9yIGVhY2ggY29tbWl0IGluIHRoZSBzZXJpZXMsIGVudGVyIHRoZSBHZXJyaXQgY2hhbmdlIElkIGluc2lkZSB0aGUgYnJhY2tldHM6PGJyPjwvbGk+Cis8L29sPgorPC9kaXY+Cis8ZGl2PiMgUmVwbGFjaW5nIGZyb20gYnJhbmNoIGZvbyA8YnI+WyAzMDIxIF0gMzVmMjU5NmMgUmVmYWN0b3IgcGFydCBvZiBHZXRVcGxvYWRhYmxlQnJhbmNoZXMgdG8gbG9va3VwIG9uZSBzcGVjaWZpYy4uLjxicj5bIDI4MjkgXSBlYzE4YjRiYSBVcGRhdGUgcHJvdG8gY2xpZW50IHRvIHN1cHBvcnQgcGF0Y2ggc2V0IHJlcGxhY21lbnRzIDxicj5bIDMwMjIgXSBjOTk4ODNmZSBUZWFjaCAncmVwbyB1cGxvYWQgLS1yZXBsYWNlJyBob3cgdG8gYWRkIHJlcGxhY2VtZW50IHBhdGNoIHNlLi4uPGJyPiMgSW5zZXJ0IGNoYW5nZSBudW1iZXJzIGluIHRoZSBicmFja2V0cyB0byBhZGQgYSBuZXcgcGF0Y2ggc2V0Ljxicj4jIFRvIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgcmVjb3JkLCBsZWF2ZSB0aGUgYnJhY2tldHMgZW1wdHkuPGJyPjxicj5BZnRlciB0aGUgdXBsb2FkIGlzIGNvbXBsZXRlIHRoZSBjaGFuZ2VzIHdpbGwgaGF2ZSBhbiBhZGRpdGlvbmFsIFBhdGNoIFNldCAoZS5nLiBQYXRjaCBTZXQgMiwgUGF0Y2ggU2V0IDMsIC4uLikuPGJyPjwvZGl2PgorPGJyPjxoMz4KK2RpZmYKKzwvaDM+CityZXBvIGRpZmYgWzxpPnByb2plY3QtbGlzdDwvaT4KK108YnI+PGJyPjxkaXY+U2hvd3MgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLjxicj48YnI+WW91IGNhbiBzcGVjaWZ5IHByb2plY3QtbGlzdCBhcyBhIGxpc3Qgb2YgbmFtZXMgb3IgYSBsaXN0IG9mIHBhdGhzIHRvIGxvY2FsIHNvdXJjZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb2plY3RzOjxicj5yZXBvIGRpZmYgWzxpPnByb2oxPC9pPgorPGk+cHJvajI8L2k+Cis8aT4uLi48L2k+CisKKzxpPnByb2pOPC9pPgorXTxicj48YnI+T3B0aW9uczo8YnI+LWgsIC0taGVscG1lYW5zIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQuPGJyPjwvZGl2PgorPGJyPjxoMz4KK2Rvd25sb2FkIDxicj48L2gzPgorcmVwbyBkb3dubG9hZCA8aT50YXJnZXQ8L2k+Cis8aT5jaGFuZ2U8L2k+Cis8YnI+PGJyPjxkaXY+RG93bmxvYWRzIHRoZSBzcGVjaWZpZWQgY2hhbmdlIGludG8gdGhlIHNwZWNpZmllZCBsb2NhbCBkaXJlY3RvcnkuIChBZGRlZCB0byBSZXBvIGFzIG9mIHZlcnNpb24gMS4wLjQuKTxicj48YnI+Rm9yIGV4YW1wbGUsIHRvIGRvd25sb2FkIDxhIGhyZWY9Imh0dHA6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLzEyNDEiPmNoYW5nZSAxMjQxPC9hPgoraW50byB5b3VyIHBsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZSBkaXJlY3Rvcnk6PGJyPiQgcmVwbyBkb3dubG9hZCBwbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UgMTI0MTxicj48YnI+QSJyZXBvIHN5bmMic2hvdWxkIGVmZmVjdGl2ZWx5IHJlbW92ZSBhbnkgY29tbWl0cyByZXRyaWV2ZWQgdmlhICJyZXBvIGRvd25sb2FkIi5PciwgeW91IGNhbiBjaGVjayBvdXQgdGhlIHJlbW90ZSBicmFuY2g7IGUuZy4sICJnaXQgY2hlY2tvdXQgbS9tYXN0ZXIiLjxicj48YnI+PGI+Tm90ZTo8L2I+CitBcyBvZiBKYW4uIDI2LCAyMDA5LCB0aGVyZSBpcyBhIG1pcnJvcmluZyBsYWcgb2YgYXBwcm94aW1hdGVseSA1IG1pbnV0ZXMgYmV0d2VlbiB3aGVuIGEgY2hhbmdlIGlzIHZpc2libGUgb24gdGhlIHdlYiBpbiA8YSBocmVmPSJodHRwOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS8iPkdlcnJpdDwvYT4KK2FuZCB3aGVuIHJlcG8gZG93bmxvYWQgd2lsbCBiZSBhYmxlIHRvIGZpbmQgaXQsIGJlY2F1c2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgZG93bmxvYWRlZCBvZmYgdGhlIGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvIG1pcnJvciBmYXJtLiBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhIHNsaWdodCBtaXJyb3JpbmcgbGFnIGFzIEdlcnJpdCBwdXNoZXMgbmV3bHkgdXBsb2FkZWQgY2hhbmdlcyBvdXQgdG8gdGhlIG1pcnJvciBmYXJtLgorPC9kaXY+Cis8YnI+PGgzPgorZm9yYWxsCis8L2gzPgorcmVwbyBmb3JhbGwgWzxpPnByb2plY3QtbGlzdDwvaT4KK10gLWMgPGk+Y29tbWFuZDwvaT4KK1s8aT5hcmcuPC9pPgorLi5dPGJyPjxicj48ZGl2PlJ1bnMgYSBzaGVsbCBjb21tYW5kIGluIGVhY2ggcHJvamVjdC48YnI+PGJyPllvdSBjYW4gc3BlY2lmeSBwcm9qZWN0LWxpc3QgYXMgYSBsaXN0IG9mIG5hbWVzIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb2NhbCBzb3VyY2UgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm9qZWN0cyA8YnI+PC9kaXY+Cis8YnI+PGgzPgoraGVscAorPC9oMz4KK3JlcG8gaGVscCBbPGk+Y29tbWFuZDwvaT4KK108YnI+PGJyPjxkaXY+RGlzcGxheXMgZGV0YWlsZWQgaGVscCBhYm91dCBhIGNvbW1hbmQuPGJyPjwvZGl2PgorPGJyPjxoMz4KK3BydW5lIDxicj48L2gzPgorcmVwbyBwcnVuZSBbPGk+cHJvamVjdC1saXN0PC9pPgorXTxicj48YnI+PGRpdj5QcnVuZXMgKGRlbGV0ZXMpIHRvcGljcyB0aGF0IGFyZSBhbHJlYWR5IG1lcmdlZC48YnI+PGJyPllvdSBjYW4gc3BlY2lmeSBwcm9qZWN0LWxpc3QgYXMgYSBsaXN0IG9mIG5hbWVzIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb2NhbCBzb3VyY2UgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm9qZWN0czo8YnI+cmVwbyBwcnVuZSBbPGk+cHJvajE8L2k+Cis8aT5wcm9qMjwvaT4KKzxpPi4uLjwvaT4KKworPGk+cHJvak48L2k+CitdPGJyPjwvZGl2PgorPGJyPjxoMz4KK3N0YXJ0Cis8L2gzPgorcmVwbyBzdGFydCA8aT5uZXdicmFuY2huYW1lPC9pPgorWzxpPnByb2plY3QtbGlzdDwvaT4KK108YnI+PGJyPjxkaXY+U3RhcnRzIGEgbmV3IGJyYW5jaCBmb3IgZGV2ZWxvcG1lbnQuPGJyPjxicj5UaGUgPGk+bmV3YnJhbmNobmFtZTwvaT4KK2FyZ3VtZW50IHNob3VsZCBwcm92aWRlIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGNoYW5nZSB5b3UgYXJlIHRyeWluZyB0byBtYWtlIHRvIHRoZSBwcm9qZWN0cy5JZiB5b3UgZG9uJ3Qga25vdywgY29uc2lkZXIgdXNpbmcgdGhlIG5hbWUgZGVmYXVsdC48YnI+PGJyPlRoZSA8aT5wcm9qZWN0LWxpc3Q8L2k+CitzcGVjaWZpZXMgd2hpY2ggcHJvamVjdHMgd2lsbCBwYXJ0aWNpcGF0ZSBpbiB0aGlzIHRvcGljIGJyYW5jaC4gWW91IGNhbiBzcGVjaWZ5IHByb2plY3QtbGlzdCBhcyBhIGxpc3Qgb2YgbmFtZXMgb3IgYSBsaXN0IG9mIHBhdGhzIHRvIGxvY2FsIHdvcmtpbmcgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm9qZWN0czo8YnI+cmVwbyBzdGFydCBkZWZhdWx0IFs8aT5wcm9qMTwvaT4KKzxpPnByb2oyPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KK108YnI+PGJyPiIuIiBpcyBhIHVzZWZ1bCBzaG9ydGhhbmQgZm9yIHRoZSBwcm9qZWN0IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ljxicj48L2Rpdj4KKzxicj48aDM+CitzdGF0dXMKKzwvaDM+CityZXBvIHN0YXR1cyBbPGk+cHJvamVjdC1saXN0PC9pPgorXTxicj48YnI+PGRpdj5TaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBZb3UgY2FuIHNwZWNpZnkgcHJvamVjdC1saXN0IGFzIGEgbGlzdCBvZiBuYW1lcyBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9jYWwgc291cmNlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvamVjdHM6PGJyPnJlcG8gc3RhdHVzIFs8aT5wcm9qMTwvaT4KKzxpPnByb2oyPC9pPgorPGk+Li4uPC9pPgorCis8aT5wcm9qTjwvaT4KK108YnI+PGJyPlRvIHNlZSB0aGUgc3RhdHVzIGZvciBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCwgcnVuIDxicj5yZXBvIHN0YXR1cyAuPGJyPjxicj5UaGUgc3RhdHVzIGluZm9ybWF0aW9uIHdpbGwgYmUgbGlzdGVkIGJ5IHByb2plY3QuIEZvciBlYWNoIGZpbGUgaW4gdGhlIHByb2plY3QsIGEgdHdvLWxldHRlciBjb2RlIGlzIHVzZWQ6PGJyPjwvZGl2PgorPGRpdj48dWw+PGxpPkluIHRoZSBsZWZ0LW1vc3QgY29sdW1uLCBhbiB1cHBlcmNhc2UgbGV0dGVyIGluZGljYXRlcyB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aGUgaW5kZXggKHRoZSBzdGFnZWQgZmlsZXMpIHdoZW4gY29tcGFyZWQgdG8gdGhlIGxhc3QgY29tbWl0dGVkIHN0YXRlLjxicj48YnI+PC9saT4KKzxsaT5JbiB0aGUgbmV4dCBjb2x1bW4sIGEgbG93ZXJjYXNlIGxldHRlciBpbmRpY2F0ZXMgd2hhdCBpcyBoYXBwZW5pbmcgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gY29tcGFyZWQgdG8gdGhlIGluZGV4ICh3aGF0IGlzIHN0YWdlZCkuCis8L2xpPgorPC91bD4KKzx0YWJsZT48dGJvZHk+PHRyPjx0ZD48Yj5DaGFyYWN0ZXI8L2I+Cis8L3RkPgorPHRkPjxiPk1lYW5pbmc8L2I+Cis8L3RkPgorPC90cj4KKzx0cj48dGQ+QQorPC90ZD4KKzx0ZD5UaGUgZmlsZSBpcyBhZGRlZCAoYnJhbmQgbmV3KS4gQ2FuIG9ubHkgYXBwZWFyIGluIHRoZSBmaXJzdCBjb2x1bW4uPGJyPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5NIG9yIG0gPGJyPjwvdGQ+Cis8dGQ+VGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgYnV0IGhhcyBiZWVuIG1vZGlmaWVkIGluIHNvbWUgd2F5LgorPC90ZD4KKzwvdHI+Cis8dHI+PHRkPkQgb3IgZCA8YnI+PC90ZD4KKzx0ZD5UaGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkLjxicj48L3RkPgorPC90cj4KKzx0cj48dGQ+UgorPC90ZD4KKzx0ZD5UaGUgZmlsZSBoYXMgYmVlbiByZW5hbWVkLiBDYW4gb25seSBhcHBlYXIgaW4gdGhlIGZpcnN0IGNvbHVtbi4gVGhlIG5ldyBuYW1lIGlzIGFsc28gc2hvd24gb24gdGhlIGxpbmUuPC90ZD4KKzwvdHI+Cis8dHI+PHRkPkMKKzwvdGQ+Cis8dGQ+VGhlIGZpbGUgaGFzIGJlZW4gY29waWVkIGZyb20gYW5vdGhlciBmaWxlLiBDYW4gb25seSBhcHBlYXIgaW4gdGhlIGZpcnN0IGNvbHVtbi4gVGhlIHNvdXJjZSBpcyBhbHNvIHNob3duLgorPC90ZD4KKzwvdHI+Cis8dHI+PHRkPlQKKzwvdGQ+Cis8dGQ+T25seSB0aGUgZmlsZSdzIG1vZGUgKGV4ZWN1dGFibGUgb3Igbm90KSBoYXMgYmVlbiBjaGFuZ2VkLiBDYW4gb25seSBhcHBlYXIgaW4gdGhlIGZpcnN0IGNvbHVtbi4KKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD5VCis8L3RkPgorPHRkPlRoZSBmaWxlIGhhcyBtZXJnZSBjb25mbGljdHMgYW5kIGlzIHN0aWxsIHVubWVyZ2VkLiBDYW4gb25seSBhcHBlYXIgaW4gdGhlIGZpcnN0IGNvbHVtbi4KKzwvdGQ+Cis8L3RyPgorPHRyPjx0ZD4tCis8L3RkPgorPHRkPlRoZSBmaWxlIHN0YXRlIGlzIHVubW9kaWZpZWQuIEEgaHlwaGVuIGluIDxpPmJvdGg8L2k+Citjb2x1bW5zIG1lYW5zIHRoaXMgaXMgYSBuZXcgZmlsZSwgdW5rbm93biB0byBHaXQuIEFmdGVyIHlvdSBydW4gZ2l0IGFkZCBvbiB0aGlzIGZpbGUsIHJlcG8gc3RhdHVzIHdpbGwgc2hvdyBBLSwgaW5kaWNhdGluZyB0aGUgZmlsZSBoYXMgYmVlbiBhZGRlZC48YnI+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT4KKzxicj5Gb3IgZXhhbXBsZSwgaWYgeW91IGVkaXQgdGhlIGZpbGUgbWFpbi5weSB3aXRoaW4gdGhlIGFwcGVuZyBwcm9qZWN0IHdpdGhvdXQgc3RhZ2luZyB0aGUgY2hhbmdlcywgdGhlbiByZXBvIHN0YXR1cyBtaWdodCBzaG93IDxicj48YnI+cHJvamVjdCBhcHBlbmcvPGJyPi1tbWFpbi5weSA8YnI+PGJyPklmIHlvdSBnbyBvbiB0byBzdGFnZSB0aGUgY2hhbmdlcyB0byBtYWluLnB5IGJ5IHJ1bm5pbmcgZ2l0IGFkZCwgdGhlbiByZXBvIHN0YXR1cyBtaWdodCBzaG93IDxicj48YnI+cHJvamVjdCBhcHBlbmcvPGJyPk0tIG1haW4ucHkgPGJyPjxicj5JZiB5b3UgdGhlbiBtYWtlIGZ1cnRoZXIgZWRpdHMgdG8gdGhlIGFscmVhZHktc3RhZ2VkIG1haW4ucHkgYW5kIG1ha2UgZWRpdHMgdG8gYW5vdGhlciBmaWxlIHdpdGhpbiB0aGUgcHJvamVjdCwgYXBwLnlhbWwsIHRoZW4gcmVwbyBzdGF0dXMgbWlnaHQgc2hvdyA8YnI+PGJyPnByb2plY3QgYXBwZW5nLzxicj4tbWFwcC55YW1sIDxicj5NbSBtYWluLnB5IDxicj48YnI+PC9kaXY+Cis8aDI+CitHaXQgYW5kIFJlcG8gY2hlYXRzaGVldAorPC9oMj4KK0NsaWNrIG9uIHRoZSBjaGVhdHNoZWV0IHRvIG9wZW4gaXQgaW4gYSBuZXcgd2luZG93IGZvciBlYXNpZXIgcHJpbnRpbmcuCisKKzxkaXY+PGltZyBzcmM9IntAZG9jUm9vdH1pbWFnZXMvZ2l0LXJlcG8tMS5wbmciPgorPC9kaXY+CisKKzwhLS0KKzxoMj5BZGRpdGlvbmFsIFJlc291cmNlczwvaDI+Cis8aDM+UmVzb3VyY2VzIGZvciBwbGF0Zm9ybSBkZXZlbG9wZXJzPC9oMz4gCitHb29nbGUgSS9PIHZpZGVvczoKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvaW8vYW4taW50cm9kdWN0aW9uLXRvLWFuZHJvaWQiPkludHJvZHVjdGlvbiB0byBBbmRyb2lkPC9hPjwvbGk+IAorICA8bGk+PGEgaHJlZj0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pby9hbmF0b215LXBoeXNpb2xvZ3ktb2YtYW4tYW5kcm9pZCI+QW5hdG9teSBQaHlzaW9sb2d5IG9mIGFuIEFuZHJvaWQ8L2E+PC9saT4gCisgIDxsaT48YSBocmVmPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2lvL2luc2lkZS10aGUtYW5kcm9pZC1hcHBsaWNhdGlvbi1mcmFtZXdvcmsiPkluc2lkZSB0aGUgQW5kcm9pZCBBcHBsaWNhdGlvbiBGcmFtZXdvcms8L2E+PC9saT4gCisgIDxsaT48YSBocmVmPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2lvL2RhbHZpay12bS1pbnRlcm5hbHMiPkRhbHZpayBWTSBJbnRlcm5hbHM8L2E+PC9saT4gCis8L3VsPiAKKyAKK0dldHRpbmcgc3RhcnRlZCB3aXRoIHRoZSBBbmRyb2lkIHNvdXJjZSBjb2RlOgorPHVsPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbS9kb3dubG9hZCI+R2V0IHNvdXJjZTwvYT48L2xpPiAKKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vc3VibWl0LXBhdGNoZXMvY29kZS1zdHlsZS1ndWlkZSI+Q29kZSBTdHlsZSBHdWlkZTwvYT48L2xpPiAKKzwvdWw+IAorIAorUmVwbyBhbmQgR2l0IHJlc291cmNlczoKKzx1bD4KKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZG93bmxvYWQvdXNpbmctcmVwbyNUT0MtR2l0LWFuZC1SZXBvLWNoZWF0c2hlZXQiPkdpdCBhbmQgUmVwbyBjaGVhdCBzaGVldDwvYT48L2xpPiAKKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZG93bmxvYWQvdXNpbmctcmVwbyI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPjwvbGk+IAorICA8bGk+VGhlIDxhIGhyZWY9Imh0dHA6Ly9ib29rLmdpdC1zY20uY29tLyI+R2l0IENvbW11bml0eSBCb29rPC9hPiBtYWludGFpbmVkIGJ5IFNjb3R0IENoYWNvbjwvbGk+IAorICA8bGk+PGEgaHJlZj0iaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0Zyb250UGFnZSI+R2l0V2lraTwvYT48L2xpPiAKKyAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLyI+R2l0IE1hbnVhbCBQYWdlPC9hPjwvbGk+IAorICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5naXRjYXN0cy5jb20vIj5HaXRDYXN0czwvYT4gKEdpdCBob3ctdG8gdmlkZW9zKTwvbGk+IAorPC91bD4gCisgCitEb2N1bWVudGF0aW9uIG9uIHNwZWNpZmljIHRhc2tzOgorPHVsPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbS9kb2N1bWVudGF0aW9uL2J1aWxkaW5nLWZvci1kcmVhbSI+QnVpbGRpbmcgZm9yIGFuIEFuZHJvaWQgRGV2ZWxvcGVyIFBob25lPC9hPjwvbGk+IAorPC91bD4gCistLT4KKworPGgyPgorPGI+VGVybWlub2xvZ3k8L2I+Cis8L2gyPgorPGk+U3RhZ2VkPC9pPgorPGk+Y2hhbmdlczwvaT4KKzxicj5DaGFuZ2VzIG1hcmtlZCBieSBnaXQgYWRkIGZvciBpbmNsdXNpb24gaW4gdGhlIG5leHQgY29tbWl0J3Mgc25hcHNob3QuPGJyPjxicj48aT5Db21taXQgPGJyPjwvaT4KK0F0IGludGVydmFscywgeW91IHVzZSBnaXQgY29tbWl0IHRvIHNhdmUgYSBzbmFwc2hvdCBvZiB0aGUgc3RhZ2VkIGZpbGVzIGFuZCBhIGxvZyBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzIHRoZSBjaGFuZ2UuPGJyPjxicj48aT5NYW5pZmVzdDwvaT4KKzxicj5BIG1hbmlmZXN0IGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIGFuZCBhIG1hcHBpbmcgb2Ygd2hlcmUgdGhlIGZpbGVzIGZyb20gdGhlc2UgcmVwb3NpdG9yaWVzIHdpbGwgYmUgbG9jYXRlZCB3aXRoaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4gV2hlbiB5b3Ugc3luY2hyb25pemUgeW91ciBmaWxlcywgdGhlIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgcmVwb3NpdG9yaWVzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgbWFuaWZlc3Qgd2lsbCBiZSBwdWxsZWQgaW50byB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9pbmRleC5qZCBiL3Bkay9kb2NzL3NvdXJjZS9pbmRleC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBhMGIzCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2luZGV4LmpkCkBAIC0wLDAgKzEsMzUgQEAKK3BhZ2UudGl0bGU9R2V0IEludm9sdmVkCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8ZGl2PgorPHA+VGhhbmtzIGZvciB5b3VyIGludGVyZXN0IGluIEFuZHJvaWQhIEhlcmUgYXJlIHNvbWUgd2F5cyB5b3UgY2FuIGdldCBpbnZvbHZlZAorYW5kIGhlbHAgR29vZ2xlIGltcHJvdmUgQW5kcm9pZC4gRm9yIGJhY2tncm91bmQgb24gdGhlIEFuZHJvaWQgcHJvamVjdCBhbmQgb3VyCitnb2FscywgY2hlY2sgb3V0IHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9YWJvdXQvcGhpbG9zb3BoeS5odG1sIj5Qcm9qZWN0CitQaGlsb3NvcGh5IHBhZ2U8L2E+LjwvcD4KKworPGgyPlJlcG9ydCBCdWdzPC9oMj4KKzxwPk9uZSBvZiB0aGUgZWFzaWVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5cyB5b3UgY2FuIGhlbHAgaW1wcm92ZSBBbmRyb2lkIGlzCit0byBmaWxlIGJ1Z3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvcmVwb3J0LWJ1Z3MuaHRtbCI+UmVwb3J0aW5nIEJ1Z3M8L2E+IHBhZ2UuPC9wPgorPHA+UGxlYXNlIG5vdGUgdGhhdCB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCBhbnkgcGFydGljdWxhciBidWcgY2FuIGJlIGZpeGVkIGluCithbnkgcGFydGljdWxhciByZWxlYXNlLiBUbyBzZWUgd2hhdCBoYXBwZW5zIHRvIHlvdXIgYnVnIG9uY2UgeW91IHJlcG9ydCBpdCwKK3JlYWQgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9saWZlLW9mLWEtYnVnLmh0bWwiPkxpZmUgb2YgYSBCdWc8L2E+LjwvcD4KKworPGgyPkRldmVsb3AgQXBwczwvaDI+Cis8cD5XZSBjcmVhdGVkIEFuZHJvaWQgc28gdGhhdCBhbGwgZGV2ZWxvcGVycyBjYW4gZGlzdHJpYnV0ZSB0aGVpciBhcHBsaWNhdGlvbnMKK3RvIHVzZXJzIG9uIGFuIG9wZW4gcGxhdGZvcm0uIE9uZSBvZiB0aGUgYmVzdCB3YXlzIHlvdSBjYW4gaGVscCBBbmRyb2lkIGlzIHRvCit3cml0ZSBjb29sIGFwcHMgdGhhdCB1c2VycyBsb3ZlITwvcD4KKzxwPlRvIGdldCBzdGFydGVkLCB2aXNpdCA8YQoraHJlZj0iaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS8iPmRldmVsb3Blci5hbmRyb2lkLmNvbTwvYT4uIFRoaXMgc2l0ZQorcHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIGFuZCB0b29scyB5b3UgbmVlZCB0byB3cml0ZSBhcHBsaWNhdGlvbnMgZm9yCitjb21wYXRpYmxlIEFuZHJvaWQgZGV2aWNlcywgdXNpbmcgdGhlIFNESy48L3A+CisKKzxoMj5Db250cmlidXRlIHRvIHRoZSBDb2RlPC9oMj4KKzxwPkNvZGUgaXMgS2luZy4gV2UnZCBsb3ZlIHRvIHJldmlldyBhbnkgY2hhbmdlcyB5b3Ugc3VibWl0LCBzbyBwbGVhc2UgY2hlY2sKK291dCB0aGUgc291cmNlLCBwaWNrIGEgYnVnIG9yIGZlYXR1cmUsIGFuZCBnZXQgY29kaW5nLjwvcD4KKzxwPllvdSBjYW4gZ2V0IHN0YXJ0ZWQgd2l0aCAgYnkgbGVhcm5pbmcgYWJvdXQgdGhlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2xpZmUtb2YtYS1wYXRjaC5odG1sIj5MaWZlIG9mIGEgUGF0Y2g8L2E+LCBhbmQgYnkKK2xlYXJuaW5nIGFib3V0IDxjb2RlPmdpdDwvY29kZT4sIDxjb2RlPnJlcG88L2NvZGU+LCBhbmQgb3RoZXIgdG9vbHMgdXNpbmcgdGhlCitsaW5rcyB0byB0aGUgbGVmdC4gSWYgeW91IG5lZWQgaGVscCBhbG9uZyB0aGUgd2F5LCB5b3UgY2FuIGpvaW4gb3VyIDxhCitocmVmPSJ7QGRvY1Jvb3R9Y29tbXVuaXR5L2luZGV4Lmh0bWwiPmRpc2N1c3Npb24gZ3JvdXBzLjwvYT48L3A+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9saWNlbnNlcy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9saWNlbnNlcy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDZhOTJhCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2xpY2Vuc2VzLmpkCkBAIC0wLDAgKzEsODUgQEAKK3BhZ2UudGl0bGU9TGljZW5zZXMKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+Cis8cD5UaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IHVzZXMgYSBmZXcgPGEKK2hyZWY9Imh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvIj5vcGVuIHNvdXJjZSBpbml0aWF0aXZlPC9hPiBhcHByb3ZlZCBvcGVuCitzb3VyY2UgbGljZW5zZXMgdG8gZW5hYmxlIGF2YWlsYWJpbGl0eSBvZiBzb3VyY2UgY29kZSBhbmQgdG8gYWNjZXB0Citjb250cmlidXRpb25zIGZyb20gaW5kaXZpZHVhbHMgYW5kIGNvcnBvcmF0aW9ucy48L3A+Cis8aDI+QW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGxpY2Vuc2U8L2gyPgorPHA+VGhlIHByZWZlcnJlZCBsaWNlbnNlIGZvciB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGlzIDxhCitocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSAyLjA8L2E+LiBBcGFjaGUgMi4wCitpcyBhIGNvbW1lcmNpYWwgYW5kIG9wZW4gc291cmNlIGZyaWVuZGx5IG9wZW4gc291cmNlIGxpY2Vuc2UuIFRoZSBtYWpvcml0eSBvZgordGhlIEFuZHJvaWQgcGxhdGZvcm0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIDxhCitocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvIj5BcGFjaGUgMi4wIGxpY2Vuc2U8L2E+LiBXaGlsZSB0aGUKK3Byb2plY3Qgd2lsbCBzdHJpdmUgdG8gYWRoZXJlIHRvIHRoZSBwcmVmZXJyZWQgbGljZW5zZSwgdGhlcmUgbWF5IGJlCitleGNlcHRpb25zIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcy4gRm9yIGV4YW1wbGUsIHRoZQorTGludXgga2VybmVsIHBhdGNoZXMgYXJlIHVuZGVyIHRoZSBHUEx2MiBsaWNlbnNlIHdpdGggc3lzdGVtIGV4Y2VwdGlvbnMsIHdoaWNoCitjYW4gYmUgZm91bmQgb24gPGEKK2hyZWY9Imh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL0NPUFlJTkciPmtlcm5lbC5vcmc8L2E+LgorPC9wPgorPGgyPkNvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnRzPC9oMj4KKzxwPkFsbCA8Yj5pbmRpdmlkdWFsPC9iPiBjb250cmlidXRvcnMgKHRoYXQgaXMsIGNvbnRyaWJ1dG9ycyBtYWtpbmcgY29udHJpYnV0aW9ucworb25seSBvbiB0aGVpciBvd24gYmVoYWxmKSBvZiBpZGVhcywgY29kZSwgb3IgZG9jdW1lbnRhdGlvbiB0byB0aGUgQW5kcm9pZCBPcGVuCitTb3VyY2UgUHJvamVjdCB3aWxsIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlLCBzaWduLCBhbmQgc3VibWl0IGFuIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2NsYS1pbmRpdmlkdWFsLmh0bWwiPkluZGl2aWR1YWwKK0NvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQ8L2E+LiBUaGUgZ3JhbnQgY2FuIGJlIGV4ZWN1dGVkIG9ubGluZSB0aHJvdWdoIHRoZSA8YQoraHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyNzZXR0aW5ncyxhZ3JlZW1lbnRzIj5jb2RlIHJldmlldwordG9vbDwvYT4uIFRoZSBhZ3JlZW1lbnQgY2xlYXJseSBkZWZpbmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IGhhcyBiZWVuIGNvbnRyaWJ1dGVkIHRvIHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QuVGhpcyBsaWNlbnNlCitpcyBmb3IgeW91ciBwcm90ZWN0aW9uIGFzIGEgY29udHJpYnV0b3IgYXMgd2VsbCBhcyB0aGUgcHJvdGVjdGlvbiBvZiB0aGUKK3Byb2plY3Q7IGl0IGRvZXMgbm90IGNoYW5nZSB5b3VyIHJpZ2h0cyB0byB1c2UgeW91ciBvd24gY29udHJpYnV0aW9ucyBmb3IgYW55CitvdGhlciBwdXJwb3NlLjwvcD4KKzxwPkZvciBhIDxiPmNvcnBvcmF0aW9uPC9iPiAob3Igb3RoZXIgZW50aXR5KSB0aGF0IGhhcyBhc3NpZ25lZCBlbXBsb3llZXMgdG8KK3dvcmsgb24gdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCwgYSA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9jbGEtY29ycG9yYXRlLmh0bWwiPkNvcnBvcmF0ZQorQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudDwvYT4gaXMgYXZhaWxhYmxlLiBUaGlzIHZlcnNpb24gb2YgdGhlIEdyYW50IGFsbG93cyBhCitjb3Jwb3JhdGlvbiB0byBhdXRob3JpemUgY29udHJpYnV0aW9ucyBzdWJtaXR0ZWQgYnkgaXRzIGRlc2lnbmF0ZWQgZW1wbG95ZWVzCithbmQgdG8gZ3JhbnQgY29weXJpZ2h0IGFuZCBwYXRlbnQgbGljZW5zZXMuIE5vdGUgdGhhdCBhIENvcnBvcmF0ZSBDb250cmlidXRvcgorTGljZW5zZSBHcmFudCBkb2VzIG5vdCByZW1vdmUgdGhlIG5lZWQgZm9yIGFueSBkZXZlbG9wZXIgdG8gc2lnbiB0aGVpciBvd24KK0luZGl2aWR1YWwgQ29udHJpYnV0b3IgTGljZW5zZSBHcmFudCBhcyBhbiBpbmRpdmlkdWFsLCB0byBjb3ZlciBhbnkgb2YgdGhlaXIKK2NvbnRyaWJ1dGlvbnMgd2hpY2ggYXJlIDxiPjxpPm5vdDwvaT48L2I+IG93bmVkIGJ5IHRoZSBjb3Jwb3JhdGlvbiBzaWduaW5nIHRoZQorQ29ycG9yYXRlIENvbnRyaWJ1dG9yIExpY2Vuc2UgR3JhbnQuCis8L3A+Cis8cD5QbGVhc2Ugbm90ZSB0aGF0IHdlIGJhc2VkIG91ciBncmFudHMgb24gdGhlIG9uZXMgdGhhdCB0aGUgPGEKK2hyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPiB1c2VzLCB3aGljaCBjYW4KK2JlIGZvdW5kIG9uIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8iPnRoZSBBcGFjaGUgd2ViIHNpdGU8L2E+LjwvcD4KKzxoMj5XaHkgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2U/PC9oMj4KKzxwPldlIGFyZSBzb21ldGltZXMgYXNrZWQgd2h5IEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCBpcyB0aGUgcHJlZmVycmVkCitsaWNlbnNlIGZvciBBbmRyb2lkLiBGb3IgdXNlcnNwYWNlICh0aGF0IGlzLCBub24ta2VybmVsKSBzb2Z0d2FyZSwgd2UgZG8gaW4KK2ZhY3QgcHJlZmVyIEFTTDIuMCAoYW5kIHNpbWlsYXIgbGljZW5zZXMgbGlrZSBCU0QsIE1JVCwgZXRjLikgb3ZlciBvdGhlcgorbGljZW5zZXMgc3VjaCBhcyBMR1BMLjwvcD4KKzxwPkFuZHJvaWQgaXMgYWJvdXQgZnJlZWRvbSBhbmQgY2hvaWNlLiBUaGUgcHVycG9zZSBvZiBBbmRyb2lkIGlzIHByb21vdGUKK29wZW5uZXNzIGluIHRoZSBtb2JpbGUgd29ybGQsIGJ1dCB3ZSBkb24ndCBiZWxpZXZlIGl0J3MgcG9zc2libGUgdG8gcHJlZGljdCBvcgorZGljdGF0ZSBhbGwgdGhlIHVzZXMgdG8gd2hpY2ggcGVvcGxlIHdpbGwgd2FudCB0byBwdXQgb3VyIHNvZnR3YXJlLiBTbywgd2hpbGUKK3dlIGVuY291cmFnZSBldmVyeW9uZSB0byBtYWtlIGRldmljZXMgdGhhdCBhcmUgb3BlbiBhbmQgbW9kaWZpYWJsZSwgd2UgZG9uJ3QKK2JlbGlldmUgaXQgaXMgb3VyIHBsYWNlIHRvIGZvcmNlIHRoZW0gdG8gZG8gc28uIFVzaW5nIExHUEwgbGlicmFyaWVzIHdvdWxkCitvZnRlbiBmb3JjZSB0aGVtIHRvIGRvIHNvLjwvcD4KKzxwPkhlcmUgYXJlIHNvbWUgb2Ygb3VyIHNwZWNpZmljIGNvbmNlcm5zOjwvcD4KKzxvbD4KKzxsaT5MR1BMIChpbiBzaW1wbGlmaWVkIHRlcm1zKSByZXF1aXJlcyBlaXRoZXI6IHNoaXBwaW5nIG9mIHNvdXJjZSB0byB0aGUKK2FwcGxpY2F0aW9uOyBhIHdyaXR0ZW4gb2ZmZXIgZm9yIHNvdXJjZTsgb3IgbGlua2luZyB0aGUgTEdQTC1lZCBsaWJyYXJ5CitkeW5hbWljYWxseSBhbmQgYWxsb3dpbmcgdXNlcnMgdG8gbWFudWFsbHkgdXBncmFkZSBvciByZXBsYWNlIHRoZSBsaWJyYXJ5LgorU2luY2UgQW5kcm9pZCBzb2Z0d2FyZSBpcyB0eXBpY2FsbHkgc2hpcHBlZCBpbiB0aGUgZm9ybSBvZiBhIHN0YXRpYyBzeXN0ZW0KK2ltYWdlLCBjb21wbHlpbmcgd2l0aCB0aGVzZSByZXF1aXJlbWVudHMgZW5kcyB1cCByZXN0cmljdGluZyBPRU1zJyBkZXNpZ25zLgorKEZvciBpbnN0YW5jZSwgaXQncyBkaWZmaWN1bHQgZm9yIGEgdXNlciB0byByZXBsYWNlIGEgbGlicmFyeSBvbiByZWFkLW9ubHkKK2ZsYXNoIHN0b3JhZ2UuKTwvbGk+Cis8bGk+TEdQTCByZXF1aXJlcyBhbGxvd2FuY2Ugb2YgY3VzdG9tZXIgbW9kaWZpY2F0aW9uIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHRob3NlIG1vZGlmaWNhdGlvbnMuICBNb3N0IGRldmljZSBtYWtlcnMgZG8KK25vdCB3YW50IHRvIGhhdmUgdG8gYmUgYm91bmQgYnkgdGhlc2UgdGVybXMsIHNvIHRvIG1pbmltaXplIHRoZSBidXJkZW4gb24KK3RoZXNlIGNvbXBhbmllcyB3ZSBtaW5pbWl6ZSB1c2FnZSBvZiBMR1BMIHNvZnR3YXJlIGluIHVzZXJzcGFjZS48L2xpPgorPGxpPkhpc3RvcmljYWxseSwgTEdQTCBsaWJyYXJpZXMgaGF2ZSBiZWVuIHRoZSBzb3VyY2Ugb2YgYSBsYXJnZSBudW1iZXIKK29mIGNvbXBsaWFuY2UgcHJvYmxlbXMgZm9yIGRvd25zdHJlYW0gZGV2aWNlIG1ha2VycyBhbmQgYXBwbGljYXRpb24KK2RldmVsb3BlcnMuIEVkdWNhdGluZyBlbmdpbmVlcnMgb24gdGhlc2UgaXNzdWVzIGlzIGRpZmZpY3VsdCBhbmQgc2xvdy1nb2luZywKK3VuZm9ydHVuYXRlbHkuIEl0J3MgY3JpdGljYWwgdG8gQW5kcm9pZCdzIHN1Y2Nlc3MgdGhhdCBpdCBiZSBhcyBlYXN5IGFzCitwb3NzaWJsZSBmb3IgZGV2aWNlIG1ha2VycyB0byBjb21wbHkgd2l0aCB0aGUgbGljZW5zZXMuICBHaXZlbiB0aGUKK2RpZmZpY3VsdGllcyB3aXRoIGNvbXBseWluZyB3aXRoIExHUEwgaW4gdGhlIHBhc3QsIGl0IGlzIG1vc3QgcHJ1ZGVudCB0bworc2ltcGx5IG5vdCB1c2UgTEdQTCBsaWJyYXJpZXMgaWYgd2UgY2FuIGF2b2lkIGl0LjwvbGk+Cis8L29sPgorPHA+VGhlIGlzc3VlcyBkaXNjdXNzZWQgYWJvdmUgYXJlIG91ciByZWFzb25zIGZvciBwcmVmZXJyaW5nIEFTTDIuMCBmb3IKK291ciBvd24gY29kZS4gVGhleSBhcmVuJ3QgY3JpdGljaXNtcyBvZiBMR1BMIG9yIG90aGVyIGxpY2Vuc2VzLiBXZSBkbworZmVlbCBzdHJvbmdseSBvbiB0aGlzIHRvcGljLCBldmVuIHRvIHRoZSBwb2ludCB3aGVyZSB3ZSd2ZSBnb25lIG91dCBvZiBvdXIKK3dheSB0byBtYWtlIHN1cmUgYXMgbXVjaCBjb2RlIGFzIHBvc3NpYmxlIGlzIEFTTDIuMC4gSG93ZXZlciwgd2UgbG92ZSBhbGwgZnJlZQorYW5kIG9wZW4gc291cmNlIGxpY2Vuc2VzLCBhbmQgcmVzcGVjdCBvdGhlcnMnIG9waW5pb25zIGFuZCBwcmVmZXJlbmNlcy4gV2UndmUKK3NpbXBseSBkZWNpZGVkIHRoYXQgQVNMMi4wIGlzIHRoZSByaWdodCBsaWNlbnNlIGZvciBvdXIgZ29hbHMuPC9wPgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvbGlmZS1vZi1hLWJ1Zy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9saWZlLW9mLWEtYnVnLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNThhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvbGlmZS1vZi1hLWJ1Zy5qZApAQCAtMCwwICsxLDEyOCBAQAorcGFnZS50aXRsZT1MaWZlIG9mIGEgQnVnCitkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8cD5UaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBwcm9qZWN0IG1haW50YWlucyBhIHB1YmxpYyBpc3N1ZSB0cmFja2VyIHdoZXJlIHlvdQorY2FuIHJlcG9ydCBidWdzIGFuZCByZXF1ZXN0IGZlYXR1cmVzIGZvciB0aGUgQW5kcm9pZCBzb2Z0d2FyZSBzdGFjay4gKEZvcgorZGV0YWlscyBvbiB0aGlzIGlzc3VlIHRyYWNrZXIsIHBsZWFzZSBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvcmVwb3J0LWJ1Z3MuaHRtbCI+dGhlIFJlcG9ydGluZyBCdWdzIHBhZ2U8L2E+LikKK1JlcG9ydGluZyBidWdzIGlzIGdyZWF0ICh0aGFuayB5b3UhKSwgYnV0IHdoYXQgaGFwcGVucyB0byBhIGJ1ZyByZXBvcnQgb25jZQoreW91IGZpbGUgaXQ/IFRoaXMgcGFnZSBkZXNjcmliZXMgdGhlIExpZmUgb2YgYSBCdWcuPC9wPgorPHA+PGk+UGxlYXNlIG5vdGU6IHRoZSB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IChBT1NQKSBpc3N1ZSB0cmFja2VyIGlzCitpbnRlbmRlZCBvbmx5IGZvciBidWdzICZhbXA7IGZlYXR1cmUgcmVxdWVzdHMgcmVsYXRlZCB0byB0aGUgQW5kcm9pZCBzb2Z0d2FyZQorc3RhY2suIEJlY2F1c2UgbWFueSB1c2VycyBmaW5kIHRoZWlyIHdheSBoZXJlIGxvb2tpbmcgZm9yIHRoZSBHb29nbGUgYXBwcyBmb3IKK0FuZHJvaWQgKHN1Y2ggYXMgR21haWwgYW5kIHNvIG9uKSwgd2UgaGF2ZSBjb21wb25lbnRzIHNldCB1cCBmb3IgdGhlaXIKK2NvbnZlbmllbmNlLiBIb3dldmVyLCB0aGVzZSBhcHBzIGFyZSBub3QgcGFydCBvZiBBbmRyb2lkLCBhbmQgYW55IGlzc3VlcworcmVwb3J0ZWQgb24gdGhlc2UgY29tcG9uZW50cyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gdG8gcmVjZWl2ZSBhdHRlbnRpb24uCitNb3N0IG5vdGFibHksIHRvIHJlcG9ydCBpc3N1ZXMgcmVsYXRlZCB0byBBbmRyb2lkIE1hcmtldCwgeW91IHNob3VsZCB2aXNpdCB0aGUKKzxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0L2ZvcnVtL3AvQW5kcm9pZCtNYXJrZXQ/aGw9ZW4iPkFuZHJvaWQKK01hcmtldCBTdXBwb3J0IEZvcnVtPC9hPi48L2k+PC9wPgorPHA+SGVyZSdzIHRoZSBMaWZlIG9mIGEgQnVnLCBpbiBhIG51dHNoZWxsOjwvcD4KKzxvbD4KKzxsaT5BIGJ1ZyBpcyBmaWxlZCwgYW5kIGhhcyB0aGUgc3RhdGUgIk5ldyIuPC9saT4KKzxsaT5BbiBBT1NQIGNvbnRyaWJ1dG9yIHBlcmlvZGljYWxseSByZXZpZXdzIGFuZCB0cmlhZ2VzIGJ1Z3MuIEJ1Z3MgYXJlCit0cmlhZ2VkIGludG8gb25lIG9mIGZvdXIgImJ1Y2tldHMiOiBOZXcsIE9wZW4sIE5vLUFjdGlvbiwgb3IgUmVzb2x2ZWQuPC9saT4KKzxsaT5FYWNoIGJ1Y2tldCBpbmNsdWRlcyBhIG51bWJlciBvZiBzdGF0ZXMgdGhhdCBwcm92aWRlIG1vcmUgZGV0YWlsIG9uIHRoZQorZmF0ZSBvZiB0aGUgaXNzdWUuPC9saT4KKzxsaT5CdWdzIGluIHRoZSAiUmVzb2x2ZWQiIGJ1Y2tldCB3aWxsIGV2ZW50dWFsbHkgYmUgaW5jbHVkZWQgaW4gYSBmdXR1cmUKK3JlbGVhc2Ugb2YgdGhlIEFuZHJvaWQgc29mdHdhcmUuPC9saT4KKzwvb2w+Cis8aDI+QnVja2V0IERldGFpbHM8L2gyPgorPHA+SGVyZSBpcyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZWFjaCBidWNrZXQsIHdoYXQgaXQgbWVhbnMsIGFuZCBob3cKK2l0J3MgaGFuZGxlZC48L3A+Cis8aDM+TmV3IElzc3VlczwvaDM+Cis8cD5OZXcgaXNzdWVzIGluY2x1ZGUgYnVnIHJlcG9ydHMgdGhhdCBhcmUgbm90IHlldCBiZWluZyBhY3RlZCB1cG9uLiBUaGUgdHdvCitzdGF0ZXMgYXJlOjwvcD4KKzx1bD4KKzxsaT48Yj5OZXc8L2I+PHA+VGhlIGJ1ZyByZXBvcnQgaGFzIG5vdCB5ZXQgYmVlbiB0cmlhZ2VkICh0aGF0IGlzLCByZXZpZXdlZCBieQorYW4gQU9TUCBjb250cmlidXRvci4pPC9wPjwvbGk+Cis8bGk+PGI+TmVlZHNJbmZvPC9iPjxwPlRoZSBidWcgcmVwb3J0IGhhcyBpbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gYWN0Cit1cG9uLiBUaGUgcGVyc29uIHdobyByZXBvcnRlZCB0aGUgYnVnIG5lZWRzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBkZXRhaWwKK2JlZm9yZSBpdCBjYW4gYmUgdHJpYWdlZC4gSWYgZW5vdWdoIHRpbWUgcGFzc2VzIGFuZCBubyBuZXcgaW5mb3JtYXRpb24gaXMKK3Byb3ZpZGVkLCB0aGUgYnVnIG1heSBiZSBjbG9zZWQgYnkgZGVmYXVsdCwgYXMgb25lIG9mIHRoZSBOby1BY3Rpb24KK3N0YXRlcy48L3A+PC9saT4KKzwvdWw+CisKKzxoMz5PcGVuIElzc3VlczwvaDM+Cis8cD5UaGlzIGJ1Y2tldCBjb250YWlucyBidWdzIHRoYXQgbmVlZCBhY3Rpb24sIGJ1dCB3aGljaCBhcmUgc3RpbGwKK3VucmVzb2x2ZWQsIHBlbmRpbmcgYSBjaGFuZ2UgdG8gdGhlIHNvdXJjZSBjb2RlLjwvcD4KKzx1bD4KKzxsaT48Yj5VbmFzc2lnbmVkPC9iPjxwPlRoZSBidWcgcmVwb3J0IGhhcyBiZWVuIHJlY29nbml6ZWQgYXMgYW4gYWRlcXVhdGVseQorZGV0YWlsZWQgcmVwb3J0IG9mIGEgbGVnaXRpbWF0ZSBpc3N1ZSwgYnV0IGhhcyBub3QgeWV0IGJlZW4gYXNzaWduZWQgdG8gYW4KK0FPU1AgY29udHJpYnV0b3IgdG8gYmUgZml4ZWQuIFR5cGljYWxseSwgYnVncyBpbiB0aGlzIHN0YXRlIGFyZSBjb25zaWRlcmVkIGxvdworcHJpb3JpdHksIGF0IGxlYXN0IGluc29mYXIgdGhhdCBpZiB0aGV5IHdlcmUgaGlnaCBwcmlvcml0eSwgdGhleSdkIGJlIGFzc2lnbmVkCit0byBhIGNvbnRyaWJ1dG9yLjwvcD48L2xpPgorPGxpPjxiPlJldmlld2VkPC9iPjxwPkxpa2UgPGNvZGU+VW5hc3NpZ25lZDwvY29kZT4sIGJ1dCB0aGUgaXNzdWUKK3JlcHJlc2VudGVkIGlzIGJlaW5nIHRyYWNrZWQgaW4gYSBzZXBhcmF0ZSBidWcgZGF0YWJhc2UuIEZvciBleGFtcGxlLCB0aGUgYnVnCittaWdodCBoYXZlIGJlZW4gcmVwb3J0ZWQgdmlhIGFuIGludGVybmFsIGJ1Zy10cmFja2luZyBzeXN0ZW0sCit3aGljaCBpcyBjb25zaWRlcmVkIHRoZSAibWFzdGVyIiBjb3B5LiAoRm9yIGluc3RhbmNlLCBHb29nbGUgbWFpbnRhaW5zIG9uZQorc3VjaCBwcml2YXRlIGlzc3VlIHRyYWNrZXIsIGludGVuZGVkIHByaW1hcmlseSBmb3IgYnVncyB3aGljaCBjb250YWluCitzZW5zaXRpdmUgaW5mb3JtYXRpb24gd2hpY2ggY2FuJ3QgYmUgcmV2ZWFsZWQgcHVibGljbHkuKTwvcD48L2xpPgorPGxpPjxiPkFzc2lnbmVkPC9iPjxsaT5MaWtlIDxjb2RlPlVuYXNzaWduZWQ8L2NvZGU+LCBidXQgdGhlIGJ1ZyBoYXMgYmVlbgorYWN0dWFsbHkgYXNzaWduZWQgdG8gYSBzcGVjaWZpYyBjb250cmlidXRvciB0byBmaXguPC9wPjwvbGk+Cis8L3VsPgorPHA+VHlwaWNhbGx5LCBhIGdpdmVuIGJ1ZyB3aWxsIHN0YXJ0IGluIDxjb2RlPlVuYXNzaWduZWQ8L2NvZGU+LCB3aGVyZSBpdAord2lsbCByZW1haW4gdW50aWwgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgdXBjb21pbmcgcmVsZWFzZSwgYXQgd2hpY2gKK3BvaW50IGl0IHdpbGwgZW50ZXIgPGNvZGU+UmV2aWV3ZWQ8L2NvZGU+IG9yIDxjb2RlPkFzc2lnbmVkPC9jb2RlPi4gSG93ZXZlciwKK25vdGUgdGhhdCB0aGlzIGlzbid0IGEgZ3VhcmFudGVlLCBhbmQgaXQncyBub3QgdW5jb21tb24gZm9yIGJ1Z3MgdG8gZ28gZnJvbQorPGNvZGU+VW5hc3NpZ25lZDwvY29kZT4gdG8gb25lIG9mIHRoZSBSZXNvbHZlZCBzdGF0ZXMuPC9wPgorPHA+SW4gZ2VuZXJhbCwgaWYgYSBidWcgaXMgaW4gb25lIG9mIHRoZXNlIE9wZW4gc3RhdGVzLCB0aGUgQU9TUCB0ZWFtIGhhcworcmVjb2duaXplZCBpdCBhcyBhIGxlZ2l0aW1hdGUgaXNzdWUgYW5kIHdpbGwgZml4IGl0IGFjY29yZGluZyB0byB0aGUgcHJvZHVjdAorcHJpb3JpdGllcyBhbmQgbWlsZXN0b25lcy4gSG93ZXZlciwgaXQncyBpbXBvc3NpYmxlIHRvIGd1YXJhbnRlZSBhIGZpeCBpbiB0aW1lIAorZm9yIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuPC9wPgorCis8aDM+Tm8tQWN0aW9uIElzc3VlczwvaDM+Cis8cD5UaGlzIGJ1Y2tldCBjb250YWlucyBidWdzIHRoYXQgaGF2ZSBmb3Igb25lIHJlYXNvbiBvciBhbm90aGVyIGJlZW4KK2RldGVybWluZWQgdG8gbm90IHJlcXVpcmUgYW55IGFjdGlvbi48L3A+Cis8dWw+Cis8bGk+PGI+U3BhbTwvYj48cD5BIGtpbmQgc291bCBzZW50IHVzIHNvbWUgZGVsaWNpb3VzIHBvcmsgcHJvZHVjdHMsIHRoYXQgd2UsCityZWdyZXR0YWJseSwgZG8gbm90IHdhbnQuPC9wPjwvbGk+Cis8bGk+PGI+UXVlc3Rpb248L2I+PHA+U29tZW9uZSBtaXN0b29rIHRoZSBpc3N1ZSB0cmFja2VyIGZvciBhIGhlbHAgZm9ydW0uCisoVGhpcyBpcyBub3QgYXMgdW5jb21tb24gYXMgb25lIG1pZ2h0IGFzc3VtZTogbWFueSB1c2VycyB3aG9zZSBuYXRpdmUgbGFuZ3VhZ2UKK2lzbid0IEVuZ2xpc2ggY2FuIG1ha2UgdGhpcyBtaXN0YWtlLik8L3A+PC9saT4KKzxsaT48Yj5VbnJlcHJvZHVjaWJsZTwvYj48cD5BbiBBT1NQIGNvbnRyaWJ1dG9yIGF0dGVtcHRlZCB0byByZXByb2R1Y2UgdGhlCitiZWhhdmlvciBkZXNjcmliZWQsIGFuZCB3YXMgdW5hYmxlIHRvIGRvIHNvLiBUaGlzIHNvbWV0aW1lcyBtZWFucyB0aGF0IHRoZSBidWcKK2lzIGxlZ2l0aW1hdGUgYnV0IHNpbXBseSByYXJlIG9yIGRpZmZpY3VsdCB0byByZXByb2R1Y2UsIGFuZCBzb21ldGltZXMgbWVhbnMKK3RoYXQgdGhlIGJ1ZyB3YXMgZml4ZWQgaW4gYSBsYXRlciByZWxlYXNlLjwvcD48L2xpPgorPGxpPjxiPldvcmtpbmdBc0ludGVuZGVkPC9iPjxwPkFuIEFPU1AgY29udHJpYnV0b3IgaGFzIGRldGVybWluZWQgdGhhdCB0aGUKK2JlaGF2aW9yIGRlc2NyaWJlZCBpc24ndCBhIGJ1ZywgYnV0IGlzIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4gVGhpcyBzdGF0ZSBpcworYWxzbyBjb21tb25seSByZWZlcnJlZCB0byBhcyAiV0FJIi48L2I+PC9saT4KKzxsaT48Yj5EZWNsaW5lZDwvYj48cD5UaGlzIGlzIGxpa2UgPGNvZGU+V29ya2luZ0FzSW50ZW5kZWQ8L2NvZGU+LCBleGNlcHQKK3R5cGljYWxseSB1c2VkIGZvciBmZWF0dXJlIHJlcXVlc3RzIGluc3RlYWQgb2YgYnVncy4gIFRoYXQgaXMsIGFuIEFPU1AKK2NvbnRyaWJ1dG9yIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlIHJlcXVlc3QgaXMgbm90IGdvaW5nIHRvIGJlIGltcGxlbWVudGVkIGluCitBbmRyb2lkLjwvYj48L2xpPgorPC91bD4KKworPGgzPlJlc29sdmVkIElzc3VlczwvaDM+Cis8cD5UaGlzIGJ1Y2tldCBjb250YWlucyBidWdzIHRoYXQgaGF2ZSBoYWQgYWN0aW9uIHRha2VuLCBhbmQgYXJlIG5vdworY29uc2lkZXJlZCByZXNvbHZlZC48L3A+Cis8dWw+Cis8bGk+PGI+RnV0dXJlUmVsZWFzZTwvYj48cD5UaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCAob3IgZmVhdHVyZSBpbXBsZW1lbnRlZCkgaW4KK2Egc291cmNlIHRyZWUsIGJ1dCBoYXMgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIGEgZm9ybWFsIEFuZHJvaWQKK3BsYXRmb3JtIHJlbGVhc2UuIChOb3RlIHRoYXQgdGhpcyBtYXkgYWxzbyBpbmNsdWRlIGZpeGVzIHRoYXQgZXhpc3QgaW4gYQorcHJpdmF0ZSBzb3VyY2UgdHJlZSB0aGF0IGhhcyBub3QgeWV0IGJlZW4gY29udHJpYnV0ZWQgdG8gYSBwdWJsaWMKK3RyZWUuKTwvcD48L2xpPgorPGxpPjxiPlJlbGVhc2VkPC9iPjxwPlRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkLCBhbmQgaXMgaW5jbHVkZWQgaW4gYSBmb3JtYWwKK0FuZHJvaWQgcGxhdGZvcm0gcmVsZWFzZS4gV2hlbiB0aGlzIHN0YXRlIGlzIHNldCwgd2UgdHJ5IHRvIGFsc28gc2V0IGEKK3Byb3BlcnR5IGluZGljYXRpbmcgd2hpY2ggcmVsZWFzZSBpdCB3YXMgZml4ZWQgaW4uPC9wPjwvbGk+Cis8bGk+PGI+RHVwbGljYXRlPC9iPjxwPlRoaXMgYnVnIGlzIGEgZHVwbGljYXRlIG9mIGFub3RoZXIsIGV4aXN0aW5nIGJ1ZworcmVwb3J0LjwvcD48L2xpPgorPC91bD4KKworPGgyPk90aGVyIFN0dWZmPC9oMj4KKzxwPlRoZSBzdGF0ZXMgYW5kIGxpZmVjeWNsZSBhYm92ZSBhcmUgaG93IHdlIGdlbmVyYWxseSB0cnkgdG8gdHJhY2sgc29mdHdhcmUuCitIb3dldmVyLCBBbmRyb2lkIGNvbnRhaW5zIGEgbG90IG9mIHNvZnR3YXJlIGFuZCBnZXRzIGEgY29ycmVzcG9uZGluZ2x5IGxhcmdlCitudW1iZXIgb2YgYnVncy4gQXMgYSByZXN1bHQsIHNvbWV0aW1lcyBidWdzIGRvbid0IG1ha2UgaXQgdGhyb3VnaCBhbGwgdGhlCitzdGF0ZXMgaW4gYSBmb3JtYWwgcHJvZ3Jlc3Npb24uIFdlIGRvIHRyeSB0byBrZWVwIHRoZSBzeXN0ZW0gdXAgdG8gZGF0ZSwgYnV0Cit3ZSB0ZW5kIHRvIGRvIHNvIGluIHBlcmlvZGljICJidWcgc3dlZXBzIiB3aGVyZSB3ZSByZXZpZXcgdGhlIGRhdGFiYXNlIGFuZAorbWFrZSB1cGRhdGVzLjwvcD4KKzxwPlNpbmNlIHRoZSBBT1NQIGlzIGVzc2VudGlhbGx5IGNvbnN0YW50bHkgZXZvbHZpbmcsIHdlIGRvIG1ha2UgdHdlYWtzIHRvCit0aGUgbGlzdCBvZiBidWcgc3RhdGVzIGFuZCB0aGUgbGlmZWN5Y2xlIGRlc2NyaWJlZCBhYm92ZS4gIFdoZW4gd2UgZG8gdGhpcywKK2hvd2V2ZXIsIHdlJ2xsIGJlIHN1cmUgdG8gdXBkYXRlIHRoaXMgcGFnZSBhcyB3ZWxsLjwvcD4KKzxwPkZpbmFsbHksIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMsIHRoZXJlIGFyZQorYWN0dWFsbHkgbXVsdGlwbGUgaXNzdWUgdHJhY2tlcnMgZm9yIEFuZHJvaWQtcmVsYXRlZCBpc3N1ZXMuIFRoZSA8YQoraHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2xpc3QiPkdvb2dsZSBDb2RlIFByb2plY3QKK0hvc3RpbmcgSXNzdWUgVHJhY2tlcjwvYT4gaXMgdGhlIDxiPm9ubHk8L2I+IG9mZmljaWFsIHB1YmxpYyBpc3N1ZSB0cmFja2VyOyBob3dldmVyLAorR29vZ2xlIGFsc28gbWFpbnRhaW5zIGEgcHJpdmF0ZSBpc3N1ZSB0cmFja2VyLCBvd24sIGFzIGRvIG1vc3QgT0VNcy4gV2UgdHJ5IHRvCitrZWVwIHRoZSBwdWJsaWMgaXNzdWUgdHJhY2tlciBpbiBzeW5jIHdpdGggcHJpdmF0ZSBpc3N1ZSB0cmFja2Vycword2hlcmV2ZXIgcG9zc2libGUsIGJ1dCBpbiBjYXNlcyB3aGVyZSBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gYW5kIHNlY3VyaXR5Citpc3N1ZXMgYXJlIGludm9sdmVkLCB0aGlzIGlzbid0IGFsd2F5cyBwb3NzaWJsZS48L3A+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2UvbGlmZS1vZi1hLXBhdGNoLmpkIGIvcGRrL2RvY3Mvc291cmNlL2xpZmUtb2YtYS1wYXRjaC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThhZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL2xpZmUtb2YtYS1wYXRjaC5qZApAQCAtMCwwICsxLDExIEBACitwYWdlLnRpdGxlPUxpZmUgb2YgYSBQYXRjaAorZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPHA+VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoQU9TUCkgdXNlcyBhIHdlYi1iYXNlZCBjb2RlIHJldmlldyB0b29sCitrbm93biBhcyAiZ2Vycml0Ii4gVGhlIGltYWdlIGJlbG93IGlzIGEgZmxvd2NoYXJ0IHRoYXQgZGV0YWlscyB3aGF0IGhhcHBlbnMgdG8KK2EgcGF0Y2gsIG9uY2UgaXQncyBiZWVuIHdyaXR0ZW4uIFRob3VnaCBpdCBtYXkgYXBwZWFyIGNvbXBsZXgsIHRoZSBtYWpvcml0eSBvZgordGhlIHN0ZXBzIGJlbG93IGFyZSBwZXJmb3JtZWQgaW4gdGhlIHdlYiBhcHBsaWNhdGlvbi48L3A+Cis8cD5Gb3IgZnVsbCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGdldCBzZXQgdXAgdG8gdXNlIGdlcnJpdCBhbmQgZ2l0LCBwbGVhc2UKK3NlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL3N1Ym1pdC1wYXRjaGVzLmh0bWwiPnRoZSBTdWJtaXR0aW5nIFBhdGNoZXMKK3BhZ2U8L2E+LjwvcD4KKzxpbWcgc3JjPSJ7QGRvY1Jvb3R9aW1hZ2VzL3dvcmtmbG93LTAucG5nIi8+CmRpZmYgLS1naXQgYS9wZGsvZG9jcy9zb3VyY2Uvb3ZlcnZpZXctMS4wLmpkIGIvcGRrL2RvY3Mvc291cmNlL292ZXJ2aWV3LTEuMC5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWI1Y2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL292ZXJ2aWV3LTEuMC5qZApAQCAtMCwwICsxLDE1NyBAQAorcGFnZS50aXRsZT1BbmRyb2lkIDEuMCBGZWF0dXJlcworZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPGRpdj48ZGl2PjxkaXY+PGRpdj5UaGlzIHBhZ2UgcHJvdmlkZXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIEFuZHJvaWQgMS4wCitmZWF0dXJlcy4gVG8gc2VlIHRoZSBjb2RlIGl0c2VsZiwgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSA8YSBocmVmPSJodHRwOi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy8iPkdpdFdlYjwvYT4KK2ludGVyZmFjZSB0byB2aWV3IHNuYXBzaG90cyBvZiB0aGUgZmlsZXMsIG9yIHlvdSBjYW4gPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvZG93bmxvYWQuaHRtbCI+ZG93bmxvYWQ8L2E+Cit0aGUgc291cmNlIGNvZGUgb250byB5b3VyIGxvY2FsIG1hY2hpbmUuPGJyPjxicj48Yj5BcHBsaWNhdGlvbnM8L2I+Cis8YnI+PGJyPlRoZSBBbmRyb2lkIHBsYXRmb3JtIGNvbWVzIHdpdGggYSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyB3cml0dGVuIHVzaW5nIHRoZSBKYXZhIHByb2dyYW1taW5nIGxhbmd1YWdlOjxicj48dWw+PGxpPjxpPkhvbWU8L2k+CitkaXNwbGF5cyBhcHBsaWNhdGlvbnMsIHdpZGdldHMsIGFuZCBzaG9ydGN1dHMuIEl0IGFsc28gc3VwcG9ydHMgY3VzdG9taXphYmxlIHdhbGwgcGFwZXIuCis8L2xpPgorPGxpPjxpPlBob25lPC9pPgorc3VwcG9ydHMgcmVndWxhciB0ZWxlcGhvbnkgZnVuY3Rpb25zIGFzIHdlbGwgYXMgY2FsbCBjb250cm9scywgY29uZmVyZW5jZSBjYWxscywgc3VwcGxlbWVudGFyeSBzZXJ2aWNlcywgYW5kIGVhc3kgaW50ZWdyYXRpb24gd2l0aCA8aT5Db250YWN0czwvaT4KKy48YnI+PC9saT4KKzxsaT48aT5XZWIgQnJvd3NlcjwvaT4KK2lzIGEgZnVsbHkgZmVhdHVyZWQgV2ViS2l0LWJhc2VkIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBIVE1MIGFuZCBYSFRNTC4KKzwvbGk+Cis8bGk+PGk+RW1haWw8L2k+Citwcm92aWRlcyBhY2Nlc3MgdG8gZW1haWwgc2VydmVycyBjb21tb25seSBmb3VuZCBvbiB0aGUgSW50ZXJuZXQgYW5kIHN1cHBvcnRzIFBPUDMsIElNQVA0LCBhbmQgU01UUC4KKzwvbGk+Cis8bGk+PGk+TWVkaWEgUGxheWVyPC9pPgorZW5hYmxlcyBtYW5hZ2luZywgaW1wb3J0aW5nLCBhbmQgcGxheWluZyBiYWNrIGNvbnRlbnQgdGhhdCBoYXMgYmVlbiBlbmNvZGVkIGluIHZhcmlvdXMgZm9ybXMuPGJyPjwvbGk+Cis8bGk+PGk+QWxhcm0gQ2xvY2ssIENhbGN1bGF0b3IsIENhbGVuZGFyLCBDYW1lcmEsIENvbnRhY3RzLCBJTSwgTU1TLCBTZXR0aW5ncyw8L2k+Cis8aT5Wb2ljZSBEaWFsZXI8L2k+CissIGFuZCBtYW55IG90aGVyIGFwcGxpY2F0aW9ucyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuPGJyPjwvbGk+Cis8L3VsPgorPGI+QXBwbGljYXRpb24gZnJhbWV3b3JrPC9iPgorPGJyPjxicj48L2Rpdj4KKzxkaXY+VGhlIEFuZHJvaWQgQXBwbGljYXRpb24gRnJhbWV3b3JrIGhhcyBiZWVuIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSByaWNoIHNldCBvZiBBUElzIGZvciB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vZ3VpZGUvaW5kZXguaHRtbCI+QW5kcm9pZCBTREsgZGV2ZWxvcGVyIGd1aWRlPC9hPgorLjxiPjxicj48L2I+Cis8L2Rpdj4KKzxkaXY+PC9kaXY+Cis8ZGl2PjxiPkFuZHJvaWQgcnVudGltZTwvYj4KKzxiPjxicj48YnI+PC9iPgorQW5kcm9pZCBhcHBsaWNhdGlvbnMgcnVuIG9uIERhbHZpaywgYSBjdXN0b20gdmlydHVhbCBtYWNoaW5lIChWTSkgZGVzaWduZWQgZm9yIGVtYmVkZGVkIHVzZS4gVGhlIERhbHZpayBWTSBydW5zIGRleCBleGVjdXRhYmxlIGZpbGVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgd3JpdHRlbiBpbiBKYXZhLjxicj48YnI+PC9kaXY+Cis8ZGl2PlRoZSBkZXggZXhlY3V0YWJsZSBmb3JtYXQgaXMgZGVzaWduZWQgdG8gaGF2ZSB0aGVzZSBjaGFyYWN0ZXJpc3RpY3M6PGJyPjx1bD48bGk+RWZmaWNpZW50IG9uLWRldmljZSBzdG9yYWdlLgorPC9saT4KKzxsaT5FZmZpY2llbnQgcnVudGltZSBtZW1vcnkgdXNhZ2UuCis8L2xpPgorPGxpPkVhc2Ugb2YgaW50ZXJwcmV0YXRpb24uPGJyPjwvbGk+Cis8L3VsPgorRGFsdmlrIGhhcyB0aGUgZm9sbG93aW5nIHJ1bnRpbWUgY2hhcmFjdGVyaXN0aWNzOgorPHVsPjxsaT5FZmZpY2llbnQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgY29uY3VycmVudCBWTSBwcm9jZXNzZXMsIGluY2x1ZGluZyBhbW9ydGl6ZWQgaW5pdGlhbGl6YXRpb24gYW5kIGhlYXZpbHkgc2hhcmVkIG1lbW9yeS4KKzwvbGk+Cis8bGk+T3B0aW1pemVkIGludGVycHJldGVyLgorPC9saT4KKzxsaT5FZmZpY2llbnQgbGlua2FnZSB0byBsb3ctbGV2ZWwgbmF0aXZlIGNvZGUuCis8L2xpPgorPGxpPkEgZmFtaWxpYXIgYW5kIHJpY2ggc2V0IG9mIGNvcmUgbGlicmFyeSBmdW5jdGlvbmFsaXR5LiBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBsaWJyYXJpZXMsIHNlZSA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9wYWNrYWdlcy5odG1sIj5odHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9wYWNrYWdlcy5odG1sPC9hPgorLgorPC9saT4KKzxsaT5FbmhhbmNlZCBKRFdQIHN1cHBvcnQsIGVuYWJsaW5nIGVhc2llciBkZWJ1Z2dpbmcgb2YgbXVsdGlwbGUgcHJvY2Vzc2VzIHNpbXVsdGFuZW91c2x5LgorPC9saT4KKzxsaT5KTkkgc3VwcG9ydC4KKzwvbGk+Cis8L3VsPgorPGI+TmF0aXZlIGxpYnJhcmllcyA8YnI+PC9iPgorPGJyPlRoZSBBbmRyb2lkIHBsYXRmb3JtIG1ha2VzIHVzZSBvZiBtYW55IG5hdGl2ZSBsaWJyYXJpZXMsIGluY2x1ZGluZzo8YnI+PHVsPjxsaT48aT5CaW9uaWM8L2k+CissIGEgY3VzdG9tIGxpYmMgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciBlbWJlZGRlZCBzeXN0ZW1zLgorPC9saT4KKzxsaT5HcmFwaGljcyBsaWJyYXJpZXMgZm9yIDJEIGFuZCAzRCAoT3BlbkdMIEVTIDEuMCkgZ3JhcGhpY3Mgc3VwcG9ydC48YnI+PC9saT4KKzxsaT5vcGVuQ29yZSB0byBwcm92aWRlIHRoZSBidWxrIG9mIEFuZHJvaWQncyBtdWx0aW1lZGlhIGNhcGFiaWxpdHkuIEl0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIG5ldHdvcmsgc3RyZWFtaW5nIChIVFRQIGFuZCBSVFNQKSwgYXMgd2VsbCBhcyBtb3N0IG9mIHRoZSBjb2RlY3MgYW5kIG1lZGlhIGZpbGUgcGFyc2VycyB1c2VkIGJ5IHRoZSBzeXN0ZW0uPGJyPjwvbGk+Cis8bGk+c3FsaXRlIHRvIHN1cHBvcnQgaGF2aW5nIGEgbGlnaHR3ZWlnaHQgdHJhbnNhY3Rpb25hbCBkYXRhIHN0b3JlLgorPC9saT4KKzxsaT5XZWJLaXQgbGlicmFyeSB0byBwb3dlciBBbmRyb2lkJ3MgV2ViS2l0IGJhc2VkIGZ1bGwgd2ViIGJyb3dzZXIuPGJyPjwvbGk+Cis8L3VsPgorPGJyPjxiPlN5c3RlbSBzb2Z0d2FyZTwvYj4KKzxiPjxicj48L2I+Cis8YnI+PC9kaXY+Cis8ZGl2PkFib3V0IEFuZHJvaWQncyBvcGVyYXRpbmcgc3lzdGVtOgorPHVsPjxsaT5CYXNlZCBvbiBMaW51eCAyLjYuMjUgZm9yIEFSTS48YnI+PC9saT4KKzxsaT5QbGF0Zm9ybSBjdXJyZW50bHkgZXhwZWN0cyBBUk0gVjVUIG9yIGJldHRlciBhcmNoaXRlY3R1cmUuIFN1cHBvcnQgZm9yIGVhcmxpZXIgYXJjaGl0ZWN0dXJlcyBjb3VsZCBiZSBhZGRlZCwgYnV0IENQVXMgd2l0aG91dCBhbiBNTVUgd291bGQgYmUgZGlmZmljdWx0IHRvIHN1cHBvcnQuCis8L2xpPgorPGxpPkEgc2V0IG9mIGtlcm5lbCBlbmhhbmNlbWVudHMgYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgQW5kcm9pZC4gVGhlIHBhdGNoZXMgaW5jbHVkZSBhbGFybSwgYXNobWVtLCBiaW5kZXIsIHBvd2VyIG1hbmFnZW1lbnQsIGxvdyBtZW1vcnkga2lsbGVyLCBrZXJuZWwgZGVndWdnZXIsIGFuZCBsb2dnZXIgPGI+Ljxicj48L2I+Cis8L2xpPgorPGxpPldoaWxlIHRoZSBwbGF0Zm9ybSBpcyBkZXNpZ25lZCB0byBiZSBjaGlwc2V0IGFnbm9zdGljLCBhbmQgd2lsbCBydW4gb24gdmlydHVhbGx5IGFueSBBUk0tYmFzZWQgTGludXgga2VybmVsIGVudmlyb25tZW50LCB2ZXJzaW9uIDEuMCBvZiB0aGUgcGxhdGZvcm0gaGFzIGJlZW4gdGVzdGVkIGFuZCB2ZXJpZmllZCBvbiB0aGUgTVNNIDdLIGNoaXBzZXRzIDxiPi48L2I+CitPdmVyIHRpbWUgd2UgZXhwZWN0IHRvIHNlZSBzdXBwb3J0IGZvciBvdGhlciBtYWpvciBjaGlwc2V0cy4KK0tlcm5lbCBwYXRjaGVzIGZvciBNU00gYmFzZWQgY2hpcHNldHMgYXJlIGFsc28gYXZhaWxhYmxlLgorPC9saT4KKzxsaT5GQVQzMiBmaWxlIHN5c3RlbSBpcyBzdXBwb3J0ZWQuCis8L2xpPgorPGxpPlN1cHBvcnQgZm9yIFRDUC9JUCAoVENQLCBVRFAsIGV0YykuCis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdj5BIG1pbmltYWwgcmVmZXJlbmNlIGJvb3Rsb2FkZXIgZm9yIHRoZSBzdXBwb3J0ZWQgY2hpcHNldCBpcyBwcm92aWRlZC4gSXQgaXMgY2FwYWJsZSBvZiBib290aW5nIExpbnV4IGZyb20gUkFNLCBkZWJ1Z2dlciwgYW5kIE5BTkQgRmxhc2guPGJyPjwvZGl2PgorPGRpdj48YnI+QWJvdXQgQW5kcm9pZCdzIHN1cHBvcnQgZm9yIGRlYnVnZ2luZzo8YnI+PHVsPjxsaT5EZWJ1Z2dpbmcgbmF0aXZlIGNvZGUgaXMgc3VwcG9ydGVkIHZpYSBHREIgKEdOVSBQcm9qZWN0IERlYnVnZ2VyKSBvdmVyIFVTQi4KKzwvbGk+Cis8bGk+RGVidWdnaW5nIG1hbmFnZWQgY29kZSBpcyBzdXBwb3J0ZWQgdmlhIGFueSBKRFdQLWNvbXBhdGlibGUgZGVidWdnZXIgb3ZlciBVU0IuCis8L2xpPgorPGxpPkxvZ2dpbmcgYW5kIGNyYXNoIGxvZ3Mgc3VwcG9ydGVkIGZvciBkZWJ1Z2dpbmcuCis8L2xpPgorPC91bD4KKzxiPlN1cHBvcnRlZCBoYXJkd2FyZSA8YnI+PC9iPgorPHVsPjxsaT5UaGUgcGxhdGZvcm0gd2lsbCBydW4gb24gYWxtb3N0IG9uIGFueSBBUk0gYmFzZWQgTGludXgga2VybmVsIGVudmlyb25tZW50LgorPC9saT4KKzxsaT5UaGUgcGxhdGZvcm0gcmVxdWlyZXMgYSBtaW5pbXVtIG9mIDEyOCBNQiBvZiBSQU0gYW5kIDI1NiBNQiBvZkZsYXNoIG1lbW9yeS4gQW5PRU0gbWF5IHdhbnQgdG8gc3VwcG9ydCBtb3JlIEZsYXNoIG1lbW9yeSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGRvd25sb2FkIG1vcmUgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHRvIHVzZXIgZGV2aWNlcy48YnI+PC9saT4KKzxsaT5UaGUgcGxhdGZvcm0gd2lsbCBpbnRlcmZhY2Ugd2l0aCBhIGJhc2ViYW5kIHJhZGlvIHN0YWNrIHByb3ZpZGVkIGV4dGVybmFsbHkgdmlhIGEgUmFkaW8gSW50ZXJmYWNlIExheWVyIChSSUwpLgorPC9saT4KKzxsaT44MDIuMTEgYi9nIFdpLUZpCis8L2xpPgorPGxpPlN0YW5kYXJkIFVTQiBpbnRlcmZhY2UsIGluY2x1ZGluZyBVU0IgMi4wCis8L2xpPgorPGxpPkJsdWV0b290aCAyLjAgRURSIChFbmhhbmNlZCBEYXRhIFJhdGUpCis8L2xpPgorPGxpPkNhbWVyYSBmb3Igc3RpbGwgYW5kIHZpZGVvIGNhcHR1cmUKKzwvbGk+Cis8bGk+UmVtb3ZhYmxlIHN0b3JhZ2UKKzwvbGk+Cis8L3VsPgorPGI+U3VwcG9ydGVkIGRpc3BsYXk8L2I+Cis8YnI+PHVsPjxsaT5IVkdBIHJlc29sdXRpb24gPGJyPjwvbGk+Cis8bGk+MTYgYml0IGNvbG9yIGRlcHRoIDxicj48L2xpPgorPGxpPkxhbmRzY2FwZSBhbmQgcG9ydHJhaXQgb3JpZW50YXRpb24sIGluY2x1ZGluZyBkeW5hbWljIHJ1bnRpbWUgc3dpdGNoaW5nCis8L2xpPgorPGxpPkZpbmdlci1iYXNlZCB0b3VjaHNjcmVlbiBuYXZpZ2F0aW9uCis8L2xpPgorPC91bD4KKzxiPlN1cHBvcnRlZCBrZXlwYWRzIGFuZCBidXR0b25zPC9iPgorPGJyPjx1bD48bGk+UVdFUlRZCis8L2xpPgorPGxpPjUtd2F5IG5hdmlnYXRpb24KKzwvbGk+Cis8bGk+SGFyZHdhcmUgYnV0dG9uczogU2VuZCwgRW5kLCBIb21lLCBCYWNrLCBNZW51PC9saT4KKzxsaT5Qb3dlciBidXR0b24KKzwvbGk+Cis8bGk+Vm9sdW1lIGtleXMgKHVwIGFuZCBkb3duKQorPC9saT4KKzxsaT5DYW1lcmEgdHJpZ2dlciBidXR0b24sIGluY2x1ZGluZyBkZXRlY3Rpb24gZm9yIGJvdGggcGFydGlhbCBwcmVzcyAodG8gZm9jdXMpIGFuZCBmdWxsIHByZXNzICh0byBhY3R1YWxseSB0YWtlIGEgcGljdHVyZSkKKzwvbGk+Cis8L3VsPgorPGI+U3VwcG9ydGVkIGF1ZGlvIG91dHB1dHM8L2I+Cis8YnI+PHVsPjxsaT5BdWRpbyBvdXRwdXQgdmlhIHRoZSBoZWFkcGhvbmUgamFjayAobW9ubyBhbmQgc3RlcmVvKQorPC9saT4KKzxsaT42NCBrYnBzIEJsdWV0b290aCBhdWRpbyBzdXBwb3J0ZWQ8L2xpPgorPC91bD4KKzxiPlN1cHBvcnRlZCBub3RpZmljYXRpb25zPC9iPgorPGJyPjx1bD48bGk+TEVEcworPC9saT4KKzxsaT5WaWJyYXRpb24KKzwvbGk+Cis8L3VsPgorPGI+U3VwcG9ydGVkIHJhZGlvIGFuZCB0ZWxlcGhvbnkgZmVhdHVyZXMgPGJyPjwvYj4KKzx1bD48bGk+R1BSUywgRURHRSwgVU1UUywgSFNEUEEKKzwvbGk+Cis8bGk+SW50ZXJuYXRpb25hbCByb2FtaW5nLCBTTVMsIE1NUyA8YnI+PC9saT4KKzxsaT5FbWVyZ2VuY3kgY2FsbCBzdXBwb3J0IDxicj48L2xpPgorPGxpPlN1cHBsZW1lbnRhcnkgU2VydmljZXMgZm9yIFRlbGVwaG9ueSwgZm9yIGV4YW1wbGUgY2FsbCB3YWl0aW5nIGFuZCBjb25mZXJlbmNlIGNhbGxpbmcgPGJyPjwvbGk+Cis8bGk+VW5zdHJ1Y3R1cmVkIFN1cHBsZW1lbnRhcnkgU2VydmljZSBEYXRhIChVU1NEKQorPC9saT4KKzxsaT5SZWZlcmVuY2UgUmFkaW8gSW50ZXJmYWNlIExheWVyIChSSUwpCis8L2xpPgorPC91bD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL292ZXJ2aWV3LTEuNS5qZCBiL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy0xLjUuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NDg3NAotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy0xLjUuamQKQEAgLTAsMCArMSwxOTggQEAKK3BhZ2UudGl0bGU9QW5kcm9pZCAxLjUgRmVhdHVyZXMKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxoMz48Yj5SZWxlYXNlIGZlYXR1cmVzIC0gQW5kcm9pZCAxLjU8L2I+Cis8L2gzPgorPGRpdj48ZGl2PjxkaXY+PGRpdj48Yj5QcmV2aW91cyByZWxlYXNlIGhpZ2hsaWdodHM8L2I+Cis6PGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9vdmVydmlldy0xLjAuaHRtbCI+QW5kcm9pZCAxLjA8L2E+Cis8YnI+PGJyPlRoaXMgcGFnZSBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG5ldyBmZWF0dXJlcyBhZGRlZCB0bworQW5kcm9pZCAxLjUuIFRvIHNlZSB0aGUgY29kZSBpdHNlbGYsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGU8YSBocmVmPSJodHRwOi8vYW5kcm9pZC5naXQua2VybmVsLm9yZy8iPkdpdFdlYjwvYT4KK2ludGVyZmFjZSB0byB2aWV3IHNuYXBzaG90cyBvZiB0aGUgZmlsZXMsIG9yIHlvdSBjYW48YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9kb3dubG9hZC5odG1sIj5kb3dubG9hZDwvYT4KK3RoZSBzb3VyY2UgY29kZSBvbnRvIHlvdXIgbG9jYWwgbWFjaGluZS4gWW91IGNhbiB1c2U8aT5yZXBvIGluaXQgLXU8L2k+CitnaXQ6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnL3BsYXRmb3JtL21hbmlmZXN0LmdpdDxpPi1iIGFuZHJvaWQtMS41PC9pPgordG8gZG93bmxvYWQgdGhlIHNvdXJjZSBjb2RlIGZvciBBbmRyb2lkIDEuNS48YnI+PGJyPjxiPlVzZXIgaW50ZXJmYWNlIHJlZmluZW1lbnRzOjwvYj4KKzxicj48dWw+PGxpPlN5c3RlbS13aWRlOgorPHVsPjxsaT5SZWZpbmVtZW50IG9mIGFsbCBjb3JlIFVJIGVsZW1lbnRzCis8L2xpPgorPGxpPkFuaW1hdGVkIHdpbmRvdyB0cmFuc2l0aW9ucyAob2ZmIGJ5IGRlZmF1bHQpCis8L2xpPgorPGxpPkFjY2VsZXJvbWV0ZXItYmFzZWQgYXBwbGljYXRpb24gcm90YXRpb25zCis8L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+VUkgcG9saXNoIGZvcjoKKzx1bD48bGk+SW4tY2FsbCBleHBlcmllbmNlCis8L2xpPgorPGxpPkNvbnRhY3RzLCBDYWxsIGxvZywgYW5kIEZhdm9yaXRlcworPC9saT4KKzxsaT5TTVMgTU1TCis8L2xpPgorPGxpPkJyb3dzZXIKKzwvbGk+Cis8bGk+Q2FsZW5kYXIKKzwvbGk+Cis8bGk+RW1haWwKKzwvbGk+Cis8bGk+Q2FtZXJhIEdhbGxlcnkKKzwvbGk+Cis8bGk+QXBwbGljYXRpb24gbWFuYWdlbWVudAorPC9saT4KKzwvdWw+Cis8L2xpPgorPC91bD4KKzxkaXY+PGI+PGJyPlBlcmZvcm1hbmNlIGltcHJvdmVtZW50czo8L2I+Cis8YnI+PC9kaXY+Cis8dWw+PGxpPkZhc3RlciBDYW1lcmEgc3RhcnQtdXAgYW5kIGltYWdlIGNhcHR1cmUKKzwvbGk+Cis8bGk+TXVjaCBmYXN0ZXIgYWNxdWlzaXRpb24gb2YgR1BTIGxvY2F0aW9uIChwb3dlcmVkIGJ5IFNVUEwgQUdQUykKKzwvbGk+Cis8bGk+U21vb3RoZXIgcGFnZSBzY3JvbGxpbmcgaW4gQnJvd3NlcgorPC9saT4KKzwvdWw+Cis8YnI+PGI+QXBwbGljYXRpb25zPC9iPgorPGJyPjx1bD48bGk+Q2FtZXJhIEdhbGxlcnkKKzwvbGk+Cis8dWw+PGxpPlZpZGVvIHJlY29yZGluZworPC9saT4KKzxsaT5WaWRlbyBwbGF5YmFjayAoTVBFRy00IDNHUCBmb3JtYXRzKQorPC9saT4KKzwvdWw+Cis8bGk+QnJvd3NlcgorPC9saT4KKzx1bD48bGk+VXBkYXRlZCB3aXRoIGxhdGVzdCBXZWJraXQgYnJvd3NlciBTcXVpcnJlbGZpc2ggSmF2YXNjcmlwdCBlbmdpbmVzCis8L2xpPgorPGxpPkNvcHkgJ24gcGFzdGUgaW4gYnJvd3NlcgorPC9saT4KKzxsaT5TZWFyY2ggd2l0aGluIGEgcGFnZQorPC9saT4KKzxsaT5Vc2VyLXNlbGVjdGFibGUgdGV4dC1lbmNvZGluZworPC9saT4KKzxsaT5VSSBjaGFuZ2VzIGluY2x1ZGU6Cis8L2xpPgorPHVsPjxsaT5VbmlmaWVkIEdvIGFuZCBTZWFyY2ggYm94Cis8L2xpPgorPGxpPlRhYmJlZCBib29rbWFya3MvaGlzdG9yeS9tb3N0LXZpc2l0ZWQgc2NyZWVuCis8L2xpPgorPC91bD4KKzwvdWw+Cis8bGk+Q29udGFjdHMKKzwvbGk+Cis8dWw+PGxpPlNob3dzIHVzZXIgcGljdHVyZSBmb3IgRmF2b3JpdGVzCis8L2xpPgorPGxpPlNwZWNpZmljIGRhdGUvdGltZSBzdGFtcCBmb3IgZXZlbnRzIGluIGNhbGwgbG9nCis8L2xpPgorPGxpPk9uZS10b3VjaCBhY2Nlc3MgdG8gYSBjb250YWN0IGNhcmQgZnJvbSBjYWxsIGxvZyBldmVudAorPC9saT4KKzwvdWw+Cis8L3VsPgorPGI+PGJyPkFwcGxpY2F0aW9uIGZyYW1ld29yazwvYj4KKzxicj48YnI+PC9kaXY+Cis8ZGl2Pjx1bD48bGk+T24tc2NyZWVuIHNvZnQga2V5Ym9hcmQKKzwvbGk+Cis8dWw+PGxpPldvcmtzIGluIGJvdGggcG9ydHJhaXQgYW5kIGxhbmRzY2FwZSBvcmllbnRhdGlvbgorPC9saT4KKzxsaT5TdXBwb3J0IGZvciB1c2VyIGluc3RhbGxhdGlvbiBvZiAzcmQgcGFydHkga2V5Ym9hcmRzCis8L2xpPgorPGxpPlVzZXIgZGljdGlvbmFyeSBmb3IgY3VzdG9tIHdvcmRzCis8L2xpPgorPC91bD4KKzxsaT5Ib21lIHNjcmVlbgorPC9saT4KKzx1bD48bGk+V2lkZ2V0cworPC9saT4KKzx1bD48bGk+QnVuZGxlZCBob21lIHNjcmVlbiB3aWRnZXRzIGluY2x1ZGU6IGFuYWxvZyBjbG9jaywgY2FsZW5kYXIsIG11c2ljIHBsYXllciwgcGljdHVyZSBmcmFtZSwgYW5kIHNlYXJjaAorPC9saT4KKzwvdWw+Cis8bGk+TGl2ZSBmb2xkZXJzCis8L2xpPgorPC91bD4KKzxsaT5VSSBmcmFtZXdvcmsKKzwvbGk+Cis8dWw+PGxpPkZyYW1ld29yayBmb3IgZWFzaWVyIGJhY2tncm91bmQvVUkgdGhyZWFkIGludGVyYWN0aW9uCis8L2xpPgorPGxpPk5ldyBTbGlkaW5nRHJhd2VyIHdpZGdldAorPC9saT4KKzxsaT5Ib3Jpem9udGFsIFNjcm9sbFZpZXcgd2lkZ2V0Cis8L2xpPgorPC91bD4KKzxsaT5Ib21lIFNjcmVlbiBmcmFtZXdvcmsKKzwvbGk+Cis8dWw+PGxpPkFQSXMgZm9yIGNyZWF0aW5nIHNlY3VyZSBob21lIHNjcmVlbiB3aWRnZXRzCis8L2xpPgorPGxpPkFQSXMgZm9yIHBvcHVsYXRpbmcgbGl2ZSBmb2xkZXJzIHdpdGggY3VzdG9tIGNvbnRlbnQKKzwvbGk+Cis8L3VsPgorPGxpPk1lZGlhIGZyYW1ld29yaworPC9saT4KKzx1bD48bGk+UmF3IGF1ZGlvIHJlY29yZGluZyBhbmQgcGxheWJhY2sgQVBJcworPC9saT4KKzxsaT5JbnRlcmFjdGl2ZSBNSURJIHBsYXliYWNrIGVuZ2luZQorPC9saT4KKzxsaT5WaWRlbyByZWNvcmRpbmcgQVBJcyBmb3IgZGV2ZWxvcGVycyAoM0dQIGZvcm1hdCkKKzwvbGk+Cis8bGk+VmlkZW8gYW5kIHBob3RvIHNoYXJpbmcgSW50ZW50cworPC9saT4KKzxsaT5NZWRpYSBzZWFyY2ggSW50ZW50Cis8L2xpPgorPC91bD4KKzxsaT5JbnB1dCBNZXRob2QgZnJhbWV3b3JrCis8L2xpPgorPHVsPjxsaT5UZXh0IHByZWRpY3Rpb24gZW5naW5lCis8L2xpPgorPGxpPkFiaWxpdHkgdG8gcHJvdmlkZSBkb3dubG9hZGFibGUgSU1FcyB0byB1c2VycworPC9saT4KKzwvdWw+Cis8bGk+U3BlZWNoIHJlY29nbml0aW9uIGZyYW1ld29yaworPC9saT4KKzx1bD48bGk+U3VwcG9ydCBmb3IgdXNpbmcgc3BlZWNoIHJlY29nbml0aW9uIGxpYnJhcmllcyB2aWEgSW50ZW50Cis8L2xpPgorPC91bD4KKzxsaT5NaXNjIEFQSSBhZGRpdGlvbnMKKzwvbGk+Cis8dWw+PGxpPkxvY2F0aW9uTWFuYWdlciAtIEFwcGxpY2F0aW9ucyBjYW4gZ2V0IGxvY2F0aW9uIGNoYW5nZSB1cGRhdGVzIHZpYSBJbnRlbnQKKzwvbGk+Cis8bGk+V2ViVmlldyAtIFRvdWNoIHN0YXJ0L2VuZC9tb3ZlL2NhbmNlbCBET00gZXZlbnQgc3VwcG9ydAorPC9saT4KKzxsaT5TZW5zb3JNYW5hZ2VyIC0gcmVkZXNpZ25lZCBzZW5zb3IgQVBJcworPC9saT4KKzxsaT5HTFN1cmZhY2VWaWV3IC0gY29udmVuaWVuY2UgZnJhbWV3b3JrIGZvciBjcmVhdGluZyBPcGVuR0wgYXBwbGljYXRpb25zCis8L2xpPgorPGxpPkJyb2FkY2FzdCBJbnRlbnQgZm9yIGFwcCB1cGRhdGUgaW5zdGFsbCBzdWNjZWVkZWQgLSBmb3Igc21vb3RoZXIgYXBwIHVwZ3JhZGUgZXhwZXJpZW5jZQorPC9saT4KKzwvdWw+Cis8L3VsPgorPC9kaXY+Cis8ZGl2PjwvZGl2PgorPGRpdj48YnI+PGI+U3lzdGVtIHNvZnR3YXJlPC9iPgorPGJyPjxicj48L2Rpdj4KKzx1bD48bGk+TmV3IExpbnV4IGtlcm5lbCAodmVyc2lvbiAyLjYuMjcpCis8L2xpPgorPGxpPlNEIGNhcmQgZmlsZXN5c3RlbSBhdXRvLWNoZWNraW5nIGFuZCByZXBhaXIKKzwvbGk+Cis8bGk+U0lNIEFwcGxpY2F0aW9uIFRvb2xraXQgMS4wCis8L2xpPgorPC91bD4KKzxkaXY+PGI+PGJyPlN1cHBvcnRlZCBoYXJkd2FyZTxicj48L2I+Cis8dWw+PGxpPkJsdWV0b290aDwvbGk+Cis8dWw+PGxpPlN0ZXJlbyBCbHVldG9vdGggc3VwcG9ydCAoQTJEUCBhbmQgQVZDUlAgcHJvZmlsZXMpCis8L2xpPgorPGxpPkF1dG8tcGFpcmluZworPC9saT4KKzxsaT5JbXByb3ZlZCBoYW5kc2ZyZWUgZXhwZXJpZW5jZQorPC9saT4KKzwvdWw+Cis8L3VsPgorPGJyPjxiPkRldmVsb3BlciB0b29sczwvYj4KKzxicj48L2Rpdj4KKzxkaXY+PHVsPjxsaT5TdXBwb3J0IGZvciBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBBbmRyb2lkIGluIGEgc2luZ2xlIFNESyBpbnN0YWxsYXRpb24KKzwvbGk+Cis8bGk+SW1wcm92ZWQgSlVuaXQgc3VwcG9ydCBpbiBBRFQKKzwvbGk+Cis8bGk+RWFzaWVyIGFwcGxpY2F0aW9uIHBlcmZvcm1hbmNlIHByb2ZpbGluZworPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9vdmVydmlldy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzYzYzUyCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL292ZXJ2aWV3LmpkCkBAIC0wLDAgKzEsOTMgQEAKK3BhZ2UudGl0bGU9QW5kcm9pZCAxLjYgUGxhdGZvcm0gT3ZlcnZpZXcKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxwPlRoaXMgcGFnZSBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG5ldyBmZWF0dXJlcyBhZGRlZCB0bworQW5kcm9pZCAxLjYuIFRvIHNlZSB0aGUgY29kZSBpdHNlbGYsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgPGEKK2hyZWY9Imh0dHA6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnLyI+R2l0V2ViPC9hPgoraW50ZXJmYWNlIHRvIHZpZXcgc25hcHNob3RzIG9mIHRoZSBmaWxlcywgb3IgeW91IGNhbiA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9kb3dubG9hZC5odG1sIj5kb3dubG9hZDwvYT4KK3RoZSBzb3VyY2UgY29kZSBvbnRvIHlvdXIgbG9jYWwgbWFjaGluZS4gWW91IGNhbiB1c2UgPGNvZGU+cmVwbyBpbml0IC11CitnaXQ6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnL3BsYXRmb3JtL21hbmlmZXN0LmdpdCAtYiBhbmRyb2lkLTEuNjwvY29kZT4KK3RvIGRvd25sb2FkIHRoZSBzb3VyY2UgY29kZSBmb3IgQW5kcm9pZCAxLjYuPC9wPgorPHA+PGk+Tm90ZTogcGxhdGZvcm0gb3ZlcnZpZXcgaW5mb3JtYXRpb24gZm9yIEFuZHJvaWQgMi54IGhhcyBub3QgeWV0IGJlZW4KK3B1Ymxpc2hlZCwgc2luY2UgdGhlIDxhCitocmVmPSJ7QGRvY1Jvb3R9Y29tcGF0aWJpbGl0eS9pbmRleC5odG1sIj5Db21wYXRpYmlsaXR5IFByb2dyYW08L2E+IGZvcgorQW5kcm9pZCAyLnggaGFzIG5vdCB5ZXQgbGF1bmNoZWQuIFdoZW4gdGhlIENvbXBhdGliaWx0eSBEZWZpbml0aW9uIERvY3VtZW50Citmb3IgMi54IGlzIHJlbGVhc2VkLCB0aGlzIHBhZ2Ugd2lsbCBiZSB1cGRhdGVkIHRvIG1hdGNoLjwvaT48L3A+Cis8cD5JbmZvcm1hdGlvbiBhYm91dCBvbGRlciBBbmRyb2lkIHJlbGVhc2VzIGlzIGFsc28gYXZhaWxhYmxlOjx1bD4KKzxsaT48YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL292ZXJ2aWV3LTEuNS5odG1sIj5BbmRyb2lkIDEuNSBQbGF0Zm9ybSBPdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2Uvb3ZlcnZpZXctMS4wLmh0bWwiPkFuZHJvaWQgMS4wIFBsYXRmb3JtIE92ZXJ2aWV3PC9hPjwvbGk+Cis8L3VsPjwvcD4KKzxoMj5Vc2VyIGludGVyZmFjZSByZWZpbmVtZW50czwvaDI+Cis8aDM+UXVpY2sgU2VhcmNoIEJveCBmb3IgQW5kcm9pZCA8L2gzPgorPHA+QW5kcm9pZCAxLjYgaW5jbHVkZXMgYSByZWRlc2lnbmVkIHNlYXJjaCBmcmFtZXdvcmsgdGhhdCBwcm92aWRlcyBhIHF1aWNrLCBlZmZlY3RpdmUsIGFuZCBjb25zaXN0ZW50IHdheSBmb3IgdXNlcnMgdG8gc2VhcmNoIGFjcm9zcyBtdWx0aXBsZSBzb3VyY2Vz4oCUc3VjaCBhcyBicm93c2VyIGJvb2ttYXJrcyBoaXN0b3J5LCBjb250YWN0cywgYW5kIHRoZSB3ZWLigJRkaXJlY3RseSBmcm9tIHRoZSBob21lIHNjcmVlbi4KKzwvcD4KKzxwPjxicj48L3A+Cis8cD5UaGUgc3lzdGVtIGNvbnN0YW50bHkgbGVhcm5zIHdoaWNoIHNlYXJjaCByZXN1bHRzIGFyZSBtb3JlIHJlbGV2YW50IGJhc2VkIG9uIHdoYXQgaXMgY2xpY2tlZC4gU28gcG9wdWxhciBjb250YWN0cyBvciBhcHBzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gcGlja2VkIHdpbGwgYnViYmxlIHVwIHRvIHRoZSB0b3Agd2hlbiBhIHVzZXIgdHlwZXMgdGhlIGZpcnN0IGZldyBsZXR0ZXJzIG9mIGEgcmVsZXZhbnQgcXVlcnkuCis8L3A+Cis8cD48YnI+PC9wPgorPHA+VGhlIHNlYXJjaCBmcmFtZXdvcmsgYWxzbyBwcm92aWRlcyBkZXZlbG9wZXJzIGEgd2F5IHRvIGVhc2lseSBleHBvc2UgcmVsZXZhbnQgY29udGVudCBmcm9tIHRoZWlyIGFwcGxpY2F0aW9ucyBpbiBRdWljayBTZWFyY2ggQm94LgorPC9wPgorPGgzPkNhbWVyYSwgQ2FtY29yZGVyLCBhbmQgR2FsbGVyeSA8L2gzPgorPHA+QW4gdXBkYXRlZCB1c2VyIGludGVyZmFjZSBwcm92aWRlcyBhbiBpbnRlZ3JhdGVkIGNhbWVyYSwgY2FtY29yZGVyLCBhbmQgZ2FsbGVyeSBleHBlcmllbmNlLiBVc2VycyBjYW4gcXVpY2tseSB0b2dnbGUgYmV0d2VlbiBzdGlsbCBhbmQgdmlkZW8gY2FwdHVyZSBtb2Rlcy4gQWRkaXRpb25hbGx5LCB0aGUgZ2FsbGVyeSBlbmFibGVzIHVzZXJzIHRvIHNlbGVjdCBtdWx0aXBsZSBwaG90b3MgZm9yIGRlbGV0aW9uLjxicj48L3A+Cis8cD48YnI+PC9wPgorPHA+QW5kcm9pZCAxLjYgYWxzbyBwcm92aWRlcyBhIG11Y2ggZmFzdGVyIGNhbWVyYSBleHBlcmllbmNlLiBDb21wYXJlZCB0byB0aGUgcHJldmlvdXMgcmVsZWFzZSwgbGF1bmNoaW5nIHRoZSBjYW1lcmEgaXMgbm93IDM5JSBmYXN0ZXIsIGFuZCB0aGVyZSBpcyBhIDI4JSBpbXByb3ZlbWVudCBpbiB0aGUgdGltZSBmcm9tIGNvbXBsZXRpbmcgb25lIHNob3QgdG8gdGhlIG5leHQuCis8L3A+Cis8aDM+VlBOLCA4MDIuMXggPC9oMz4KKzxwPkEgbmV3IFZpcnR1YWwgUHJpdmF0ZSBOZXR3b3JrIChWUE4pIGNvbnRyb2wgcGFuZWwgaW4gU2V0dGluZ3MgYWxsb3dzIHVzZXJzIHRvIGNvbmZpZ3VyZSBhbmQgY29ubmVjdCB0byB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIFZQTnM6Cis8L3A+Cis8dWw+PGxpPkwyVFAvSVBTRUMgcHJlLXNoYXJlZCBrZXkgYmFzZWQgVlBOCisgIDwvbGk+Cis8bGk+TDJUUC9JUHNlYyBjZXJ0aWZpY2F0ZSBiYXNlZCBWUE4KKyAgPC9saT4KKzxsaT5MMlRQIG9ubHkgVlBOCisgIDwvbGk+Cis8bGk+UFBUUCBvbmx5IFZQTgorICA8L2xpPgorPC91bD4KKzxoMz5CYXR0ZXJ5IHVzYWdlIGluZGljYXRvciA8L2gzPgorPHA+QSBuZXcgYmF0dGVyeSB1c2FnZSBzY3JlZW4gbGV0cyB1c2VycyBzZWUgd2hpY2ggYXBwcyBhbmQgc2VydmljZXMgYXJlIGNvbnN1bWluZyBiYXR0ZXJ5IHBvd2VyLiBJZiB0aGUgdXNlciBkZXRlcm1pbmVzIHRoYXQgYSBwYXJ0aWN1bGFyIHNlcnZpY2Ugb3IgYXBwbGljYXRpb24gaXMgdXNpbmcgdG9vIG11Y2ggcG93ZXIsIHRoZXkgY2FuIHRha2UgYWN0aW9uIHRvIHNhdmUgdGhlIGJhdHRlcnkgYnkgYWRqdXN0aW5nIHNldHRpbmdzLCBzdG9wcGluZyB0aGUgYXBwbGljYXRpb24sIG9yIHVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24uCis8L3A+Cis8aDM+QWNjZXNzaWJpbGl0eSA8L2gzPgorPHA+VXNlcnMgd2lsbCBiZSBhYmxlIHRvIGRvd25sb2FkIG5ldyBhY2Nlc3NpYmlsaXR5IHNlcnZpY2VzIGJ1aWx0IG9uIHRoZSBuZXcgYWNjZXNzaWJpbGl0eSBmcmFtZXdvcmsgYW5kIGVuYWJsZSB0aGVtIGluIFNldHRpbmdzLgorPC9wPgorPGgyPk5ldyBQbGF0Zm9ybSBUZWNobm9sb2dpZXMgPC9oMj4KKzxoMz5FeHBhbmRlZCBTZWFyY2ggRnJhbWV3b3JrIDwvaDM+Cis8cD5UaGUgQW5kcm9pZCBzZWFyY2ggZnJhbWV3b3JrIGhhcyBiZWVuIHJlZGVzaWduZWQgYW5kIGV4cGFuZGVkIHRvIHByb3ZpZGUgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHRoZSBvcHBvcnR1bml0eSB0byBzdXJmYWNlIGNvbnRlbnQgZnJvbSB0aGVpciBhcHBsaWNhdGlvbnMgaW4gUXVpY2sgU2VhcmNoIEJveCwgdGhlIGdsb2JhbCBzZWFyY2ggdG9vbC4gVG8gZG8gdGhpcywgZGV2ZWxvcGVycyB3aWxsIG5lZWQgdG8gbWFrZSB0aGVpciBhcHAgInNlYXJjaGFibGUiIGFuZCBwcm92aWRlIHN1Z2dlc3Rpb25zIGluIHJlc3BvbnNlIHRvIHVzZXIgcXVlcmllcy4gVG8gZW5hYmxlIGFwcGxpY2F0aW9uIHNlYXJjaCBzdWdnZXN0aW9ucywgdXNlcnMgc2ltcGx5IHNlbGVjdCBlYWNoIGFwcGxpY2F0aW9uIGZyb20gd2hpY2ggdGhleSdkIGxpa2UgdG8gcmVjZWl2ZSBzdWdnZXN0aW9ucywgdW5kZXIgU2VhcmNoYWJsZSBpdGVtcyBpbiB0aGUgU2VhcmNoIHNldHRpbmdzLgorPC9wPgorPGgzPlRleHQtdG8tc3BlZWNoIGVuZ2luZTwvaDM+Cis8cD5BbmRyb2lkIDEuNiBmZWF0dXJlcyBhIG11bHRpLWxpbmd1YWwgc3BlZWNoIHN5bnRoZXNpcyBlbmdpbmUgY2FsbGVkIFBpY28uIEl0IGFsbG93cyBhbnkgQW5kcm9pZCBhcHBsaWNhdGlvbiB0byAic3BlYWsiIGEgc3RyaW5nIG9mIHRleHQgd2l0aCBhbiBhY2NlbnQgdGhhdCBtYXRjaGVzIHRoZSBsYW5ndWFnZS4gVGhlIGVuZ2luZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGxhbmd1YWdlczogRW5nbGlzaCAoQW1lcmljYW4gYW5kIEJyaXRpc2ggYWNjZW50cyksIEZyZW5jaCwgSXRhbGlhbiwgR2VybWFuIGFuZCBTcGFuaXNoLiBJZiB5b3UncmUgdXNpbmcgYSBULU1vYmlsZSBHMSBvciBEcmVhbSBkZXZpY2UsIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSBTcGVlY2hTeW50aGVzaXMgRGF0YSBJbnN0YWxsZXIgZnJvbSBBbmRyb2lkIE1hcmtldCwgd2hpY2ggaW5jbHVkZXMgdGhlICJ2b2ljZXMiIG5lZWRlZCBieSB0aGUgdGV4dC10by1zcGVlY2ggZW5naW5lLgorPC9wPgorPGgzPkdlc3R1cmVzIDwvaDM+Cis8cD5BIG5ldyBnZXN0dXJlcyBmcmFtZXdvcmsgcHJvdmlkZXMgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB3aXRoIGEgZnJhbWV3b3JrIGZvciBjcmVhdGluZywgc3RvcmluZywgbG9hZGluZywgYW5kIHJlY29nbml6aW5nIGdlc3R1cmVzIGFuZCBhc3NvY2lhdGluZyB0aGVtIHdpdGggc3BlY2lmaWMgYWN0aW9ucy4KKzwvcD4KKzxwPkRldmVsb3BlcnMgY2FuIHVzZSB0aGUgbmV3IEdlc3R1cmVCdWlsZGVyIHRvb2wgaW5jbHVkZWQgaW4gdGhlIEFuZHJvaWQgMS42IFNESyB0byBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgZ2VzdHVyZXMgdG8gaW5jbHVkZSB3aXRoIHRoZWlyIGFwcGxpY2F0aW9uLgorPC9wPgorPGgzPkFjY2Vzc2liaWxpdHkgPC9oMz4KKzxwPkFuZHJvaWQgMS42IHByb3ZpZGVzIGEgbmV3IGFjY2Vzc2liaWxpdHkgZnJhbWV3b3JrLiBXaXRoIHRoaXMgZnJhbWV3b3JrLCBkZXZlbG9wZXJzIGNhbiBjcmVhdGUgYWNjZXNzaWJpbGl0eSBwbHVnaW5zIHRoYXQgcmVzcG9uZCB0byB1c2VyIGlucHV0LCBzdWNoIGFzIG1ha2luZyBhIHNvdW5kIHdoZW4gYSBuZXcgd2luZG93IGlzIHNob3duLCB2aWJyYXRpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSB0b3Agb2YgYSBsaXN0LCBhbmQgcHJvdmlkaW5nIHNwb2tlbiBmZWVkYmFjay4KKzwvcD4KKzxoMz5FeHBhbmRlZCBzdXBwb3J0IGZvciBzY3JlZW4gZGVuc2l0aWVzIGFuZCByZXNvbHV0aW9ucyA8L2gzPgorPHA+QW5kcm9pZCAxLjYgYWRkcyBzY3JlZW4gc3VwcG9ydCB0aGF0IGVuYWJsZXMgYXBwbGljYXRpb25zIHRvIGJlIHJlbmRlcmVkIHByb3Blcmx5IG9uIGRpZmZlcmVudCBkaXNwbGF5IHJlc29sdXRpb25zIGFuZCBkZW5zaXRpZXMuIERldmVsb3BlcnMgY2FuIGFsc28gc3BlY2lmeSB0aGUgdHlwZXMgb2Ygc2NyZWVucyBzdXBwb3J0ZWQgYnkgdGhlaXIgYXBwbGljYXRpb24uCis8L3A+Cis8aDM+VGVsZXBob255IHN1cHBvcnQgZm9yIENETUEgPC9oMz4KKzxwPkFuZHJvaWQgMS42IGluY2x1ZGVzIHN1cHBvcnQgZm9yIENETUEgaW4gdGhlIHRlbGVwaG9ueSBzdGFjay4KKzwvcD4KKzxoMz5OZXcgdmVyc2lvbiBvZiBPcGVuQ29yZSA8L2gzPgorPHA+QW5kcm9pZCAxLjYgaW5jbHVkZXMgdGhlIHVwZGF0ZWQgT3BlbkNvcmUgMiBtZWRpYSBlbmdpbmUsIHdoaWNoIGhhczoKKzwvcD4KKzx1bD48bGk+U3VwcG9ydCBmb3IgT3Blbk1BWCBlbmNvZGVycworICA8L2xpPgorPGxpPlN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgYXVkaW8gY29kZWNzIGluIEF1dGhvckVuZ2luZQorICA8L2xpPgorPGxpPkltcHJvdmVkIGJ1ZmZlcmluZyBtb2RlbCBzdXBwb3J0cyBzaGFyZWQgYnVmZmVycyBhbGxvY2F0ZWQgaW4gdGhlIGRlY29kZXIKKyAgPC9saT4KKzwvdWw+Cis8aDM+Mi42LjI5IExpbnV4IGtlcm5lbCA8L2gzPgorPHA+QW5kcm9pZCAxLjYgdXBncmFkZXMgdGhlIExpbnV4IGtlcm5lbCBmcm9tIDIuNi4yNyB0byAyLjYuMjkuCis8L3A+Cis8aDI+TmV3IEZyYW1ld29yayBBUElzPC9oMj4KKzxwPkZvciBhIGRldGFpbGVkIG92ZXJ2aWV3IG9mIG5ldyBBUElzLCBzZWUgdGhlIDxhCitocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Nkay9hbmRyb2lkLTEuNi5odG1sI2FwaS1jaGFuZ2VzIj5WZXJzaW9uCitOb3RlczwvYT4uIEZvciBhIGNvbXBsZXRlIHJlcG9ydCBvZiBhbGwgQVBJIGNoYW5nZXMsIHNlZSB0aGUgPGEKK2hyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc2RrL2FwaV9kaWZmLzQvY2hhbmdlcy5odG1sIj5BUEkKK0RpZmZlcmVuY2VzIFJlcG9ydDwvYT4uPC9wPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL3JlcG9ydC1idWdzLmpkIGIvcGRrL2RvY3Mvc291cmNlL3JlcG9ydC1idWdzLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzODA4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2UvcmVwb3J0LWJ1Z3MuamQKQEAgLTAsMCArMSwxMzMgQEAKK3BhZ2UudGl0bGU9UmVwb3J0IEJ1Z3MKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+Cis8cD5UaGFua3MgZm9yIHlvdXIgaW50ZXJlc3QgaW4gQW5kcm9pZCEgT25lIG9mIHRoZSBiZXN0IHdheXMgeW91IGNhbiBoZWxwIHVzCitpbXByb3ZlIEFuZHJvaWQgaXMgdG8gbGV0IHVzIGtub3cgYWJvdXQgYW55IHByb2JsZW1zIHlvdSBmaW5kIHdpdGggaXQuPC9wPgorPHA+Rmlyc3QsIHRob3VnaDogaWYgeW91IHRoaW5rIHlvdSd2ZSBmb3VuZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksCis8Yj5wbGVhc2UgZG9uJ3QgdXNlIHRoZSBmb3JtcyBiZWxvdzwvYj4uIChVc2luZyB0aGUgcHVibGljIGZvcm1zIGJlbG93IG1heQorYWxsb3cgYW55b25lIHRvIHNlZSB5b3VyIHJlcG9ydCwgd2hpY2ggbWF5IHB1dCB1c2VycyBhdCByaXNrIHVudGlsIHRoZSBidWcgaXMKK2ZpeGVkLikgSW5zdGVhZCwgcGxlYXNlIHJlcG9ydCBzZWN1cml0eSBidWdzIHRvIG91ciBzZWN1cml0eSB0ZWFtIGJ5IGVtYWlsaW5nCis8YSBocmVmPSJtYWlsdG86c2VjdXJpdHlAYW5kcm9pZC5jb20iPnNlY3VyaXR5QGFuZHJvaWQuY29tPC9hPi4gIFdlIGJlbGlldmUgaW4KK3Jlc3BvbnNpYmxlIGRpc2Nsb3N1cmUgb2Ygc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBhbmQgd2lsbCBnaXZlIHlvdSBwcm9wZXIKK2F0dHJpYnV0aW9uIGZvciBhbnkgaXNzdWVzIHlvdSByZXBvcnQuPC9wPgorPHA+SGVyZSdzIGhvdyB0byByZXBvcnQgbm9uLXNlY3VyaXR5IGJ1Z3M6PC9wPgorPG9sPgorICA8bGk+PGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2FkdnNlYXJjaCI+U2VhcmNoIGZvcgorICB5b3VyIGJ1ZzwvYT4gdG8gc2VlIGlmIGFueW9uZSBoYXMgYWxyZWFkeSByZXBvcnRlZCBpdC48L2xpPgorICA8bGk+SWYgeW91IGZpbmQgeW91ciBpc3N1ZSBhbmQgaXQncyBpbXBvcnRhbnQgdG8geW91LCBzdGFyIGl0ISBUaGF0J3MgaG93IHdlCisgIGtub3cgd2hpY2ggYnVncyBhcmUgbW9zdCBpbXBvcnRhbnQgdG8gZml4LjwvbGk+CisgIDxsaT5JZiBubyBvbmUncyByZXBvcnRlZCB5b3VyIGJ1ZywgZmlsZSB0aGUgYnVnLiBZb3UgY2FuIHVzZSBvbmUgb2YgdGhlc2UKKyAgdGVtcGxhdGVzOjx1bD4KKyAgICA8bGk+PGEKKyAgICBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZW50cnk/dGVtcGxhdGU9VXNlciUyMGJ1ZyUyMHJlcG9ydCI+QnVncworICAgIGluIHlvdXIgRGV2aWNlIChmb3IgdXNlcnMpPC9hPiAtIHVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHJlcG9ydCBhIGJ1ZyBpbiBhCisgICAgZGV2aWNlIHlvdSBvd248L2xpPgorICAgIDxsaT48YQorICAgIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9lbnRyeT90ZW1wbGF0ZT1EZXZlbG9wZXIlMjBidWclMjByZXBvcnQiPkJ1Z3MKKyAgICBpbiB0aGUgU29mdHdhcmUgKGZvciBkZXZlbG9wZXJzKTwvYT4gLSB1c2UgdGhpcyBpZiB5b3UgZm91bmQgYSBidWcgaW4gdGhlCisgICAgY291cnNlIG9mIGRldmVsb3BpbmcgYW4gYXBwPC9saT4KKyAgICA8bGk+PGEKKyAgICBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZW50cnk/dGVtcGxhdGU9RmVhdHVyZSUyMHJlcXVlc3QiPlJlcXVlc3QKKyAgICBhIE5ldyBGZWF0dXJlPC9hPiAtIHVzZSB0aGlzIGZvciBhIGZlYXR1cmUgeW91J2QgbGlrZSB0byBzZWUgaW4gYSBmdXR1cmUKKyAgICB2ZXJpc29uPC9saT4KKyAgPC91bD48L2xpPgorPC9vbD4KKzxwPlBsZWFzZSBub3RlIHRoYXQgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYW55IHBhcnRpY3VsYXIgYnVnIGNhbiBiZSBmaXhlZCBpbgorYW55IHBhcnRpY3VsYXIgcmVsZWFzZS4gVG8gc2VlIHdoYXQgaGFwcGVucyB0byB5b3VyIGJ1ZyBvbmNlIHlvdSByZXBvcnQgaXQsCityZWFkIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvbGlmZS1vZi1hLWJ1Zy5odG1sIj5MaWZlIG9mIGEgQnVnPC9hPi48L3A+Cis8cD5JbiBnZW5lcmFsLCBwbGVhc2UgcHV0IGFzIG11Y2ggaW5mbyBpbiBidWdzIGFzIHlvdSBjYW4uIEp1c3QgYSBvbmUgbGluZXIKK3RlbGxpbmcgdXMgc29tZXRoaW5nIGlzbid0IHdvcmtpbmcgaXMgdXN1YWxseSB1c2VsZXNzLCBhbmQgd2lsbCBwcm9iYWJseSBiZQorY2xvc2VkIHdpdGhvdXQgYW55IGFjdGlvbi4gVGhlIG1vcmUgZGV0YWlsIHlvdSBwcm92aWRlLCB0aGUgbW9yZSBsaWtlbHkgeW91cgoraXNzdWUgaXMgdG8gYmUgcmVzb2x2ZWQuIEJlbG93LCB0aGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBhIGdvb2QgYnVnIHJlcG9ydAorYW5kIGEgcG9vciBidWcgcmVwb3J0LjwvcD4KKzxoMz5BIFBvb3IgQnVnIFJlcG9ydDwvaDM+Cis8cHJlPgorVGl0bGU6IEVycm9yIG1lc3NhZ2UKKworV2hlbiBydW5uaW5nIEVjbGlwc2UgSSBnZXQgYW4gIkludGVybmFsIEVycm9yIiB0aGF0IHNheXMgIlNlZSB0aGUgLmxvZyBmaWxlCitmb3IgbW9yZSBkZXRhaWxzIi4KKworU3RlcHMgdG8gcmVwcm9kdWNlOgorSGFwcGVucyB3aGVuICJPYmplY3QgbyA9IG51bGwiLiBEb2Vzbid0IGhhcHBlbiB3aGVuIGNoYW5nZWQgdG8gIk9iamVjdCBvIi4KKworRXhwZWN0ZWQgcmVzdWx0czoKK0kgd291bGRuJ3QgZ2V0IHRoZSBlcnJvciBtZXNzYWdlLS13b3VsZCB3b3JrIHdpdGggT2JqZWN0IG8gPSBudWxsLgorCitPYnNlcnZlZCByZXN1bHRzOgorU2VlIGFib3ZlLgorPC9wcmU+Cis8cD5UaGlzIGlzIGEgcG9vciBidWcgcmVwb3J0IGJlY2F1c2UgaXQgZG9lc24ndCBwcm92aWRlIGFueSBjb250ZXh0IGZvciB0aGUKK2lzc3VlOyBpcyBpdCBhIHByb2JsZW0gaW4gdGhlIERhbHZpayB2aXJ0dWFsIG1hY2hpbmUsIHRoZSBjb3JlIGZyYW1ld29yaywgb3IKK3NvbWV0aGluZyBlbHNlPyBJdCBhbHNvIGRvZXNuJ3QgcHJvdmlkZSBhbnkgY29kZSBvciBoaW50IG9uIGhvdyB0byByZXByb2R1Y2UKK2l0LiBJbiBvdGhlciB3b3JkcywgdGhpcyBidWcgcmVwb3J0IGRvZXNuJ3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gZm9yCithbnlvbmUgdG8gdGFrZSBhY3Rpb24gb24sIHNvIGl0IHdvdWxkIGJlIGlnbm9yZWQuPC9wPgorPGgzPkEgR29vZCBCdWcgUmVwb3J0PC9oMz4KKzxwcmU+CitUaXRsZTogU3RlcHBpbmcgb3ZlciAiT2JqZWN0IG8gPSBudWxsIiBjYXVzZXMgRWNsaXBzZSAiSW50ZXJuYWwgRXJyb3IiCisKK0ludGVyZXN0aW5nIGJ1Zywgd2hpbGUgdXNpbmcgRWNsaXBzZSAzLjMuMS4xIHdpdGggbTM3YSBvZiBhbmRyb2lkIGFuZAordGhlIGZvbGxvd2luZyBjb2RlOgorCitwYWNrYWdlIGNvbS5zYXZpbGxlLmFuZHJvaWQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitwdWJsaWMgY2xhc3MgVGVzdE9iamVjdE51bGwgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubWFpbik7CisKKyAgICAgICAgT2JqZWN0IG8gPSBudWxsOworCisgICAgICAgIG8gPSAiaGkiOworCisgICAgICAgIExvZy52KFRBRywgIm89IiArIG8pOworICAgIH0KKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRlc3RPYmplY3ROdWxsIjsKKworfQorCitFY2xpcHNlIGluZGljYXRlcyBhbiAiSW50ZXJuYWwgRXJyb3IiIHdpdGggIlNlZSB0aGUgLmxvZyBmaWxlIGZvciBtb3JlCitkZXRhaWxzIiBhbmQgdGhlbiBhc2tzIGlmIEkgd2FudCB0byBleGl0IHRoZSB3b3JrYmVuY2guIFRoaXMgb2NjdXJzIHdoZW4gSQorcGxhY2UgYSBicmVhayBwb2ludCBvbiAic2V0Q29udGVudFZpZXcoUi5sYXlvdXQubWFpbik7IiBhbmQgdGhlbiBzaW5nbGUKK3N0ZXAgb3ZlciAiT2JqZWN0IG8gPSBudWxsOyIKKworSWYgSSBjaGFuZ2UgIk9iamVjdCBvID0gbnVsbDsiIHRvICJPYmplY3QgbyIgYWxsIGlzIHdlbGwuCisKK1RoZSBsYXN0IGxpbmVzIG9mIHRoZSAubG9nIGZpbGUgYXJlOgorCishRU5UUlkgb3JnLmVjbGlwc2UuY29yZS5qb2JzIDQgMiAyMDA4LTAxLTAxIDEzOjA0OjE1LjgyNQorIU1FU1NBR0UgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nOiAiaGFzIGNoaWxkcmVuIHVwZGF0ZSIuCishU1RBQ0sgMAoramF2YS5sYW5nLkludGVybmFsRXJyb3I6IEludmFsaWQgc2lnbmF0dXJlOiAiJmx0O251bGwmZ3Q7IgorICAgICAgICBhdAorb3JnLmVjbGlwc2UuamRpLmludGVybmFsLlR5cGVJbXBsLnNpZ25hdHVyZVRvVGFnKFR5cGVJbXBsLmphdmE6MzA3KQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuamRpLmludGVybmFsLkxvY2FsVmFyaWFibGVJbXBsLnRhZyhMb2NhbFZhcmlhYmxlSW1wbC5qYXZhOjE4NSkKKyAgICAgICAgYXQKK29yZy5lY2xpcHNlLmpkaS5pbnRlcm5hbC5TdGFja0ZyYW1lSW1wbC5nZXRWYWx1ZXMoU3RhY2tGcmFtZUltcGwuamF2YToxMjgpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5qZGkuaW50ZXJuYWwuU3RhY2tGcmFtZUltcGwuZ2V0VmFsdWUoU3RhY2tGcmFtZUltcGwuamF2YTo3MykKKyAgICAgICAgYXQKK29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy5jb3JlLm1vZGVsLkpESUxvY2FsVmFyaWFibGUucmV0cmlldmVWYWx1ZShKRElMb2NhbFZhcmlhYmxlLmphdmE6NTcpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcuY29yZS5tb2RlbC5KRElWYXJpYWJsZS5nZXRDdXJyZW50VmFsdWUoSkRJVmFyaWFibGUuamF2YTo2NikKKyAgICAgICAgYXQKK29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy5jb3JlLm1vZGVsLkpESVZhcmlhYmxlLmdldFZhbHVlKEpESVZhcmlhYmxlLmphdmE6ODgpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5tb2RlbC5lbGVtZW50cy5WYXJpYWJsZUNvbnRlbnRQcm92aWRlci5oYXNDaGlsZHJlbihWYXJpYWJsZUNvbnRlbnRQcm92aWRlci5qYXZhOjYyKQorICAgICAgICBhdAorb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLnZhcmlhYmxlcy5KYXZhVmFyaWFibGVDb250ZW50UHJvdmlkZXIuaGFzQ2hpbGRyZW4oSmF2YVZhcmlhYmxlQ29udGVudFByb3ZpZGVyLmphdmE6NzMpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5tb2RlbC5lbGVtZW50cy5FbGVtZW50Q29udGVudFByb3ZpZGVyLnVwZGF0ZUhhc0NoaWxkcmVuKEVsZW1lbnRDb250ZW50UHJvdmlkZXIuamF2YToyMjMpCisgICAgICAgIGF0CitvcmcuZWNsaXBzZS5kZWJ1Zy5pbnRlcm5hbC51aS5tb2RlbC5lbGVtZW50cy5FbGVtZW50Q29udGVudFByb3ZpZGVyJDMucnVuKEVsZW1lbnRDb250ZW50UHJvdmlkZXIuamF2YToyMDApCisgICAgICAgIGF0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuam9icy5Xb3JrZXIucnVuKFdvcmtlci5qYXZhOjU1KQorPC9wcmU+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS9yb2xlcy5qZCBiL3Bkay9kb2NzL3NvdXJjZS9yb2xlcy5qZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTFjODIxCi0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL3JvbGVzLmpkCkBAIC0wLDAgKzEsNzMgQEAKK3BhZ2UudGl0bGU9UGVvcGxlIGFuZCBSb2xlcworZG9jLnR5cGU9c291cmNlCitAamQ6Ym9keQorPHA+VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoQU9TUCkgaW5jbHVkZXMgaW5kaXZpZHVhbHMgd29ya2luZyBpbiBhIHZhcmlldHkKK29mIHJvbGVzLiBBcyBub3RlZCBpbiA8YSBocmVmPSJ7QGRvY1Jvb3R9YWJvdXQvcGhpbG9zb3BoeS5odG1sIj5PdXIKK1BoaWxvc29waHk8L2E+LCBHb29nbGUgaXMgcmVzcG9uc2libGUgZm9yIEFuZHJvaWQgcHJvZHVjdCBtYW5hZ2VtZW50CithbmQgdGhlIGVuZ2luZWVyaW5nIHByb2Nlc3MgZm9yIHRoZSBjb3JlIGZyYW1ld29yayBhbmQgcGxhdGZvcm07IGhvd2V2ZXIsCit0aGUgcHJvamVjdCBjb25zaWRlcnMgY29udHJpYnV0aW9ucyBmcm9tIGFueSBzb3VyY2UsIG5vdCBqdXN0IEdvb2dsZS4gVGhpcworcGFnZSBkZXNjcmliZXMgdGhlIGtpbmRzIG9mIHJvbGVzIHRoYXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGNhbiB0YWtlIG9uLjwvcD4KKzxwPkFueW9uZSB3aG8gaXMgaW50ZXJlc3RlZCBpbiBleHBsb3JpbmcgYW5kIGNvbnRyaWJ1dGluZyB0byBBbmRyb2lkIGNhbiB1c2UgdGhlCitBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgcmVzb3VyY2VzLiBBbnlvbmUgY2FuIGpvaW4gdGhlIG1haWxpbmcgbGlzdHMsIGFzaworcXVlc3Rpb25zLCBjb250cmlidXRlIHBhdGNoZXMsIHJlcG9ydCBidWdzLCBsb29rIGF0IHN1Ym1pdHRlZCBwYXRjaGVzLCBhbmQgdXNlCit0aGUgdG9vbHMuIFRvIGdldCBzdGFydGVkIHdpdGggdGhlIEFuZHJvaWQgY29kZSwgc2VlIDxhCitocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2luZGV4Lmh0bWwiPkdldCBJbnZvbHZlZDwvYT4uPC9wPgorCis8aDI+Q29udHJpYnV0b3I8L2gyPgorPHA+QSAiQ29udHJpYnV0b3IiIGlzIGFueW9uZSBtYWtpbmcgY29udHJpYnV0aW9ucyB0byB0aGUgQU9TUCBzb3VyY2UgY29kZSwKK2luY2x1ZGluZyBib3RoIGVtcGxveWVlcyBvZiBHb29nbGUgb3Igb3RoZXIgY29tcGFuaWVzLCBhcyB3ZWxsIGFzCitleHRlcm5hbCBkZXZlbG9wZXJzIHdobyBhcmUgY29udHJpYnV0aW5nIHRvIEFuZHJvaWQgb24gdGhlaXIgb3duIGJlaGFsZi4KK1RoZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gQ29udHJpYnV0b3JzIHdobyBhcmUgZW1wbG95ZWQgYnkgCitHb29nbGUsIGFuZCB0aG9zZSB3aG8gYXJlIG5vdDogYWxsIGVuZ2luZWVycyB1c2UgdGhlIHNhbWUgZ2l0L2dlcnJpdCB0b29scywgCitmb2xsb3cgdGhlIHNhbWUgY29kZSByZXZpZXcgcHJvY2VzcywgYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSBzYW1lIHJlcXVpcmVtZW50cworb24gY29kZSBzdHlsZSBhbmQgc28gb24uPC9wPgorPHAvPgorCis8aDI+RGV2ZWxvcGVyPC9oMj4KKzxwPkEgIkRldmVsb3BlciIgaXMgYW4gZW5naW5lZXIgd3JpdGluZyBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24gQW5kcm9pZAorZGV2aWNlcy4gVGhlcmUgaXMsIG9mIGNvdXJzZSwgbm8gZGlmZmVyZW5jZSBpbiBza2lsbHNldCBiZXR3ZWVuIGEgIkRldmVsb3BlciIKK2FuZCBhICJDb250cmlidXRvciI7IEFPU1Agc2ltcGx5IHVzZXMgIkRldmVsb3BlciIgdG8gaGVscCBpZGVudGlmeSBvdXIgYXVkaWVuY2UuCitTaW5jZSB0aGUga2V5IHB1cnBvc2Ugb2YgQW5kcm9pZCBpcyB0byBjdWx0aXZhdGUgYW4gb3BlbiBkZXZlbG9wbWVudCBwbGF0Zm9ybSwKKyJEZXZlbG9wZXJzIiBhcmUgb25lIG9mIHRoZSBrZXkgY3VzdG9tZXJzIG9mIHRoZSBBbmRyb2lkIHBsYXRmb3JtLiBBcyBzdWNoLCB3ZQordGFsayBhYm91dCB0aGVtIGEgbG90LCB0aG91Z2ggdGhpcyBpc24ndCB0ZWNobmljYWxseSBhIHNlcGFyYXRlIHJvbGUgaW4gdGhlCitBT1NQIDxpPnBlciBzZS48L2k+PC9wPgorPHAvPgorCis8aDI+VmVyaWZpZXI8L2gyPgorPHA+IlZlcmlmaWVycyIgYXJlIHJlc3BvbnNpYmxlIGZvciB0ZXN0aW5nIGNoYW5nZSByZXF1ZXN0cy4gQWZ0ZXIgaW5kaXZpZHVhbHMKK2hhdmUgc3VibWl0dGVkIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGhpZ2gtcXVhbGl0eSBjb2RlIHRvIHRoZSBwcm9qZWN0LCB0aGUKK1Byb2plY3QgTGVhZHMgbWlnaHQgaW52aXRlIHRoZW0gdG8gYmVjb21lIFZlcmlmaWVycy48L3A+PHA+PGk+Tm90ZTogYXQgdGhpcwordGltZSwgZ2VuZXJhbGx5IFZlcmlmaWVycyBhcmUgdGhlIHNhbWUgYXMgQXBwcm92ZXJzLjwvaT48L3A+Cis8cC8+CisKKzxoMj5BcHByb3ZlcjwvaDI+CisiQXBwcm92ZXJzIiBhcmUgZXhwZXJpZW5jZWQgbWVtYmVycyBvZiB0aGUgcHJvamVjdCB3aG8gaGF2ZSBkZW1vbnN0cmF0ZWQgdGhlaXIKK2Rlc2lnbiBza2lsbHMgYW5kIGhhdmUgbWFkZSBzaWduaWZpY2FudCB0ZWNobmljYWwgY29udHJpYnV0aW9ucyB0byB0aGUKK3Byb2plY3QuIEluIHRoZSBjb2RlLXJldmlldyBwcm9jZXNzLCBhbiBBcHByb3ZlciBkZWNpZGVzIHdoZXRoZXIgdG8gaW5jbHVkZSBvcgorZXhjbHVkZSBhIGNoYW5nZS4gUHJvamVjdCBMZWFkcyAod2hvIGFyZSB0eXBpY2FsbHkgZW1wbG95ZWQgYnkgR29vZ2xlKSBjaG9vc2UKK3RoZSBBcHByb3ZlcnMsIHNvbWV0aW1lcyBwcm9tb3RpbmcgdG8gdGhpcyBwb3NpdGlvbiBWZXJpZmllcnMgd2hvIGhhdmUKK2RlbW9uc3RyYXRlZCB0aGVpciBleHBlcnRpc2Ugd2l0aGluIGEgc3BlY2lmaWMgcHJvamVjdC48L3A+Cis8cC8+CisKKzxoMj5Qcm9qZWN0IExlYWRzPC9oMj4KKzxwPkFuZHJvaWQgY29uc2lzdHMgb2YgYSBudW1iZXIgb2Ygc3ViLXByb2plY3RzOyB5b3UgY2FuIHNlZSB0aGVzZSBpbiB0aGUgZ2l0CityZXBvc2l0b3J5LCBhcyBpbmRpdmlkdWFsIC5naXQgZmlsZXMuIFRlY2ggTGVhZHMgYXJlIHNlbmlvciBDb250cmlidXRvcnMgd2hvCitvdmVyc2VlIHRoZSBlbmdpbmVlcmluZyBmb3IgaW5kaXZpZHVhbCBBbmRyb2lkIHByb2plY3RzLiBUeXBpY2FsbHkgdGhlc2UgdGVjaAorbGVhZHMgd2lsbCBiZSBHb29nbGUgZW1wbG95ZWVzLiAgQSBQcm9qZWN0IExlYWQgZm9yIGFuIGluZGl2aWR1YWwgcHJvamVjdCBpcworcmVzcG9uc2libGUgZm9yIHRoZSBmb2xsb3dpbmc6PC9wPgorPHVsPgorICA8bGk+TGVhZCBhbGwgdGVjaG5pY2FsIGFzcGVjdHMgb2YgdGhlIHByb2plY3Q7IGZvciBleGFtcGxlLCB0aGUgcHJvamVjdAorICByb2FkbWFwLCBkZXZlbG9wbWVudCwgcmVsZWFzZSBjeWNsZXMsIHZlcnNpb25pbmcsIGFuZCBRQS48L2xpPgorICA8bGk+RW5zdXJlIHRoYXQgdGhlIHByb2plY3QgaXMgUUEtZWQgaW4gdGltZSBmb3Igc2NoZWR1bGVkIEFuZHJvaWQgcGxhdGZvcm0KKyAgcmVsZWFzZXMuPC9saT4KKyAgPGxpPkRlc2lnbmF0ZSBWZXJpZmllcnMgYW5kIEFwcHJvdmVycyBmb3Igc3VibWl0dGVkIHBhdGNoZXMuPC9saT4KKyAgPGxpPkJlIGZhaXIgYW5kIHVuYmlhc2VkIHdoaWxlIHJldmlld2luZyBjaGFuZ2VzLiBBY2NlcHQgb3IgcmVqZWN0IHBhdGNoZXMKKyAgYmFzZWQgb24gdGVjaG5pY2FsIG1lcml0IGFuZCBhbGlnbm1lbnQgd2l0aCB0aGUgQW5kcm9pZCBwbGF0Zm9ybS48L2xpPgorICA8bGk+UmV2aWV3IGNoYW5nZXMgaW4gYSB0aW1lbHkgbWFubmVyIGFuZCBtYWtlIGJlc3QgZWZmb3J0cyB0byBjb21tdW5pY2F0ZQorICB3aGVuIGNoYW5nZXMgYXJlIG5vdCBhY2NlcHRlZC48L2xpPgorICA8bGk+T3B0aW9uYWxseSBtYWludGFpbiBhIHdlYiBzaXRlIGZvciB0aGUgcHJvamVjdCBmb3IgaW5mb3JtYXRpb24gYW5kCisgIGRvY3VtZW50cyBzcGVjaWZpYyB0byB0aGUgcHJvamVjdC48L2xpPgorICA8bGk+QWN0IGFzIGEgZmFjaWxpdGF0b3IgaW4gcmVzb2x2aW5nIHRlY2huaWNhbCBjb25mbGljdHMuPC9saT4KKyAgPGxpPkJlIHRoZSBwdWJsaWMgZmFjZSBmb3IgdGhlIHByb2plY3QgYW5kIHRoZSBnby10byBwZXJzb24gZm9yIHF1ZXN0aW9ucworICByZWxhdGVkIHRvIHRoZSBwcm9qZWN0LjwvbGk+Cis8L3VsPgpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL3NvdXJjZV90b2MuY3MgYi9wZGsvZG9jcy9zb3VyY2Uvc291cmNlX3RvYy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMyMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcGRrL2RvY3Mvc291cmNlL3NvdXJjZV90b2MuY3MKQEAgLTAsMCArMSwzOCBAQAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKzwhLS0KK2Z1bmN0aW9uIG5vdGhpbmcoKSB7fQorLS0+Cis8L3NjcmlwdD4KKworPHVsPgorICA8bGk+PGgyPlRoZSBQcm9qZWN0PC9oMj48dWw+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9yb2xlcy5odG1sIj5QZW9wbGUgYW5kIFJvbGVzPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9saWNlbnNlcy5odG1sIj5MaWNlbnNpbmcgSW5mb3JtYXRpb248L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvIj5Ccm93c2UgU291cmNlPC9hPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiA3NSU7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyI+W29mZi1zaXRlXTwvc3Bhbj48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2Uvb3ZlcnZpZXcuaHRtbCI+UGxhdGZvcm0gT3ZlcnZpZXc8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL2xpZmUtb2YtYS1idWcuaHRtbCI+TGlmZSBvZiBhIEJ1ZzwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5mYXFzLmh0bWwjYW9zcCI+RkFRczwvYT48L2xpPgorICA8L3VsPgorCisgIDxsaT48aDI+R2V0dGluZyBTdGFydGVkPC9oMj48dWw+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9kb3dubG9hZC5odG1sIj5HZXR0aW5nIHRoZSBTb3VyY2U8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL2dpdC1yZXBvLmh0bWwiPlVzaW5nIGdpdCBhbmQgcmVwbzwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvdXNpbmctZWNsaXBzZS5odG1sIj5Vc2luZyBFY2xpcHNlPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9jb2RlLXN0eWxlLmh0bWwiPkNvZGUgU3R5bGU8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iPD9jcyB2YXI6dG9yb290ID8+c291cmNlL2J1aWxkaW5nLWRyZWFtLmh0bWwiPkJ1aWxkaW5nIGZvciBhbiBBRFA8L2E+PC9saT4KKyAgPC91bD4KKworICA8bGk+PGgyPkNvbnRyaWJ1dGluZzwvaDI+PHVsPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvbGlmZS1vZi1hLXBhdGNoLmh0bWwiPkxpZmUgb2YgYSBQYXRjaDwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2Uvc3VibWl0LXBhdGNoZXMuaHRtbCI+U3VibWl0dGluZyBQYXRjaGVzPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ijw/Y3MgdmFyOnRvcm9vdCA/PnNvdXJjZS9yZXBvcnQtYnVncy5odG1sIj5SZXBvcnRpbmcgQnVnczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSI8P2NzIHZhcjp0b3Jvb3QgPz5zb3VyY2UvY29kZS1saW5lcy5odG1sIj5CcmFuY2hlcyAmYW1wOyBSZWxlYXNlczwvYT48L2xpPgorICA8L3VsPgorPC91bD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorPCEtLQorICAgIGJ1aWxkVG9nZ2xlTGlzdHMoKTsKKy8vLS0+Cis8L3NjcmlwdD4KKwpkaWZmIC0tZ2l0IGEvcGRrL2RvY3Mvc291cmNlL3N1Ym1pdC1wYXRjaGVzLmpkIGIvcGRrL2RvY3Mvc291cmNlL3N1Ym1pdC1wYXRjaGVzLmpkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiN2JhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9wZGsvZG9jcy9zb3VyY2Uvc3VibWl0LXBhdGNoZXMuamQKQEAgLTAsMCArMSwxNDcgQEAKK3BhZ2UudGl0bGU9QW5kcm9pZCBDb250cmlidXRvcnMnIFdvcmtmbG93Citkb2MudHlwZT1zb3VyY2UKK0BqZDpib2R5Cis8YnI+VGhpcyBwYWdlIGRlc2NyaWJlcyBob3cgdG8gcmVjb3JkIGNoYW5nZXMgdG8gdGhlIEFuZHJvaWQgZmlsZXMgb24geW91ciBsb2NhbCBjbGllbnQsIHVwbG9hZCB0aG9zZSBjaGFuZ2VzIHRvIHRoZSBjb2RlLXJldmlldyBzZXJ2ZXIsIGFuZCB1c2UgR2Vycml0IHRvIHRyYWNrIGNoYW5nZXMuPGJyPjxoMj4KK1ByZXJlcXVpc2l0ZXM8L2gyPgorQmVmb3JlIHlvdSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBvbiB0aGlzIHBhZ2UsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHVwIHlvdXIKK2xvY2FsIHdvcmtpbmcgZW52aXJvbm1lbnQgYW5kIGdldCB0aGUgQW5kcm9pZCBzb3VyY2UgZmlsZXMuIEZvciBpbnN0cnVjdGlvbnMsCitzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9kb3dubG9hZC5odG1sIj5HZXQgc291cmNlPC9hPgorLjxicj48YnI+T3RoZXIgcmVjb21tZW5kZWQgcmVhZGluZzo8YnI+PHVsPjxsaT5Gb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUKK2NvbnRyaWJ1dGlvbiBhbmQgcmV2aWV3IHByb2Nlc3MsIHNlZSA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9saWZlLW9mLWEtcGF0Y2guaHRtbCI+TGlmZSBvZiBhIFBhdGNoPC9hPi48L2xpPgorPGxpPkZvciBkZXRhaWxzIGFib3V0IFJlcG8sIHNlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2dpdC1yZXBvLmh0bWwiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4uPGJyPjwvbGk+Cis8bGk+Rm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbnQgcm9sZXMgeW91IGNhbiBwbGF5IHdpdGhpbiB0aGUgQW5kcm9pZAorT3BlbiBTb3VyY2UgY29tbXVuaXR5LCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9yb2xlcy5odG1sIj5Qcm9qZWN0IHJvbGVzPC9hPi48L2xpPgorPGxpPklmIHlvdSBwbGFuIHRvIGNvbnRyaWJ1dGUgY29kZSB0byB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgYmUgc3VyZSB0byByZWFkCit0aGUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9saWNlbnNlcy5odG1sIj5BT1NQJ3MgbGljZW5zaW5nIGluZm9ybWF0aW9uPC9hPi48L2xpPgorPC91bD4KKzxoMj4KK1dvcmtpbmcgd2l0aCB0aGUgY29kZTwvaDI+CitGaXJzdCwgZG93bmxvYWQgdGhlIHNvdXJjZSBpbnRvIHlvdXIgd29ya2luZyBkaXJlY3RvcnksIGFzIGRlc2NyaWJlZCBpbiA8YQoraHJlZj0ie0Bkb2NSb290fXNvdXJjZS9kb3dubG9hZC5odG1sIj5HZXQgc291cmNlPC9hPgorLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGNob29zZSB3aGljaCBicmFuY2ggdG8gdXNlLCBzZWUgPGEKK2hyZWY9IntAZG9jUm9vdH1zb3VyY2UvY29kZS1saW5lcy5odG1sIj5BbmRyb2lkIENvZGUtTGluZXM8L2E+Ljxicj48YnI+VG8gd29yayBvbiBhIHBhcnRpY3VsYXIgY2hhbmdlIHRvIHRoZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PGJyPgorPGRpdj48aW1nIHNyYz0ie0Bkb2NSb290fWltYWdlcy9zdWJtaXQtcGF0Y2hlcy0wLnBuZyI+Cis8L2Rpdj4KKzxvbD48bGk+VXNlIHJlcG8gc3RhcnQgPGk+YnJhbmNobmFtZTwvaT4KK3RvIHN0YXJ0IGEgbmV3IHRvcGljIGJyYW5jaC48L2xpPgorPGxpPkVkaXQgdGhlIGZpbGVzLjxicj48L2xpPgorPGxpPjxzcGFuPlVzZSBnaXQgYWRkIHRvIHN0YWdlIGNoYW5nZXMuPC9zcGFuPgorPHNwYW4+KFNvbWV0aW1lcyBvcHRpb25hbC4pPC9zcGFuPgorPGJyPjwvbGk+Cis8bGk+VXNlIHJlcG8gc3RhdHVzIGFuZCBnaXQgZGlmZiB0byB2aWV3IHRoZSBzdGF0dXMgb2YgeW91ciBmaWxlcy48aT48YnI+PC9pPgorPC9saT4KKzxsaT5Vc2UgZ2l0IGNvbW1pdCB0byBjb21taXQgY2hhbmdlcy48YnI+PC9saT4KKzxsaT48c3Bhbj5Vc2UgcmVwbyB1cGxvYWQgdG8gdXBsb2FkIGNoYW5nZXMgdG8gdGhlIHJldmlldyBzZXJ2ZXI8L3NwYW4+CisuPGJyPjwvbGk+Cis8L29sPgorWW91IGNhbiB0cmFjayB5b3VyIHVwbG9hZGVkIGNoYW5nZXMgdXNpbmcgdGhlIEdlcnJpdCBjb2RlLXJldmlldyB0b29sLiBXaGVuIGl0J3MgdGltZSB0byB3b3JrIG9uIHRoZSBjb2RlIGFnYWluLCBydW4gcmVwbyBzeW5jLCB0aGVuIGdvIGJhY2sgdG8gc3RlcCAxIGFib3ZlIGFuZCBzdGFydCBhbm90aGVyIHRvcGljIGJyYW5jaC48YnI+PGJyPlRoZSBzdGVwcyB3aWxsIG5vdCBhbHdheXMgY29tZSBpbiB0aGUgb3JkZXIgc2hvd24tLWZvciBleGFtcGxlLCB5b3UgbWlnaHQgcnVuIGdpdCBkaWZmIGF0IHNldmVyYWwgcG9pbnRzIGluIHRoZSBwcm9jZXNzLjxicj48YnI+PGgzPgorU3RhcnRpbmcgYSB0b3BpYyBicmFuY2g8L2gzPgorU3RhcnQgYSB0b3BpYyBicmFuY2ggY2FsbGVkIGRlZmF1bHQgaW4geW91ciBsb2NhbCB3b3JrIGVudmlyb25tZW50Ojxicj48YnI+JCByZXBvIHN0YXJ0IGRlZmF1bHQgPGJyPjxicj5Gb3IgbW9yZSBhYm91dCB0b3BpYyBicmFuY2hlcywgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPi48YnI+PGgzPgorRWRpdGluZyB0aGUgZmlsZXM8L2gzPgorWW91IGRvIG5vdCBuZWVkIHRvIGNoZWNrIGZpbGVzIG91dCBiZWZvcmUgd29ya2luZyBvbiB0aGVtLiBFZGl0IHRoZSBmaWxlcyB1c2luZyB2aW0sIGVtYWNzLCBvciBhbnkgb3RoZXIgZWRpdG9yLjxicj48YnI+PGgzPgorU3RhZ2luZyBjaGFuZ2VzPC9oMz4KK1RvIGluZGljYXRlIHRoYXQgZXZlcnkgbmV3IGFuZCBtb2RpZmllZCBmaWxlIGluIHlvdXIgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlICJzdGFnZWQiIGZvciBpbmNsdXNpb24gaW4gdGhlIG5leHQgY29tbWl0LCBydW4gZ2l0IGFkZCB3aXRob3V0IGFueSBhcmd1bWVudHMuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGZpbGVzIG9yIGZpbGV0eXBlcy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3VsZCBzdGFnZSBhbGwgdGhlIG5ldyBhbmQgbW9kaWZpZWQgZmlsZXMgdW5kZXIgdGhlIGJpb25pYyBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3Rvcmllczo8YnI+PGJyPiQgZ2l0IGFkZCBiaW9uaWMvKjxicj48YnI+UnVuIGdpdCBoZWxwIGFkZCB0byBzZWUgbW9yZSB3YXlzIHRvIHVzZSBnaXQgYWRkLjxicj48YnI+PGI+V2hlbiBpcyBnaXQgYWRkIG9wdGlvbmFsPzxicj48L2I+Cis8YnI+SWYgeW91IGFkZCBuZXcgZmlsZXMsIHlvdSBtdXN0IHN0YWdlIHRoZW0gdXNpbmcgZ2l0IGFkZCBiZWZvcmUgeW91IHJ1biBnaXQgY29tbWl0LiBIb3dldmVyLCBpZiB5b3UgYXJlIG9ubHkgbW9kaWZ5aW5nIG9yIGRlbGV0aW5nIGZpbGVzLCB5b3UgY2FuIHNraXAgZ2l0IGFkZCBpZiB5b3UgdXNlIHRoZSAtYSBvcHRpb24gd2l0aCBnaXQgY29tbWl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlICJDb21taXR0aW5nIGNoYW5nZXMiIHNlY3Rpb24gZnVydGhlciBkb3duLjxicj48YnI+PGgzPgorVXNpbmcgcmVwbyBzdGF0dXMgPGJyPjwvaDM+CitUbyBzZWUgdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudCBicmFuY2gsIHJ1biA8YnI+PGJyPiQgcmVwbyBzdGF0dXMgLjxicj48YnI+Rm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBpbnRlcnByZXQgdGhlIHJlc3VsdHMgb2YgcmVwbyBzdGF0dXMsIHNlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL2dpdC1yZXBvLmh0bWwjVE9DLXN0YXR1cyI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPi48YnI+PGJyPjxoMz4KK1VzaW5nIGdpdCBkaWZmPC9oMz4KK1RvIHNlZSB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBjZCBpbnRvIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBhbmQgcnVuIDxicj48YnI+JCBnaXQKK2RpZmYgPGJyPjxicj5XaXRob3V0IGFueSBhcmd1bWVudHMsIGdpdCBkaWZmIHdpbGwgc2hvdyB5b3UgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSBmaWxlcyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB0aGUgY29tbWl0dGVkCitmaWxlcy48YnI+PGRpdj48YnI+PGRpdj48aW1nIHNyYz0ie0Bkb2NSb290fWltYWdlcy9zdWJtaXQtcGF0Y2hlcy0xLnBuZyI+Cis8L2Rpdj4KKzxicj48L2Rpdj4KKzxkaXY+SWYgeW91IGFkZCB0aGUgLS1jYWNoZWQgb3B0aW9uLCBnaXQgZGlmZiB3aWxsIHNob3cgeW91IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBmaWxlcyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB0aGUgc3RhZ2VkIGZpbGVzLjxicj48YnI+PC9kaXY+CitUbyBzZWUgZXZlcnkgZWRpdCB0aGF0IHdvdWxkIGdvIGludG8gdGhlIGNvbW1pdCBpZiB5b3Ugd2VyZSB0byBjb21taXQgcmlnaHQgbm93LCBtYWtlIHN1cmUgeW91IGFyZSBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnkgYW5kIHRoZW4gcnVuIDxicj48YnI+JCBnaXQgZGlmZiAtLWNhY2hlZCA8YnI+PGJyPjxoMz4KK0NvbW1pdHRpbmcgY2hhbmdlczwvaDM+CitBdCBpbnRlcnZhbHMgd2hpbGUgeW91IGFyZSB3b3JraW5nLCBjb21taXQgeW91ciBlZGl0cyBieSB1c2luZyBnaXQgY29tbWl0IGZyb20gd2l0aGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeTo8YnI+PHNwYW4+JCBjZCB+L215ZHJvaWQvPGk+cHJvamVjdC1uYW1lPC9pPgorPC9zcGFuPgorPHNwYW4+PGJyPiQgZ2l0IGNvbW1pdDwvc3Bhbj4KKzxicj48YnI+RXZlcnkgZmlsZSB0aGF0IHlvdSBzdGFnZWQgdXNpbmcgZ2l0IGFkZCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoaXMgY29tbWl0Ljxicj48YnI+SWYgeW91IGhhdmUgbm90IGFkZGVkIGFueSBuZXcgZmlsZXMgdGhhdCB5b3Ugd2FudCB0byBjb21taXQsIHlvdSBjYW4gc2tpcCBnaXQgYWRkIGFuZCBzaW1wbHkgcnVuIDxicj48YnI+JCBnaXQgY29tbWl0IC1hIDxicj48YnI+VGhlIC1hIG9wdGlvbiB3aWxsIHN0YWdlIGFsbCB0aGUgZmlsZXMgeW91IGhhdmUgbW9kaWZpZWQgb3IgZGVsZXRlZCBhbmQgaW5jbHVkZSB0aGVtIGluIHRoaXMgY29tbWl0LiAoSWYgeW91IGhhdmUgYWRkZWQgbmV3IGZpbGVzIGFuZCB3YW50IHRoZW0gaW5jbHVkZWQgaW4gdGhlIGNvbW1pdCwgeW91IHdpbGwgbmVlZCB0byB1c2UgZ2l0IGFkZCBiZWZvcmUgeW91IHJ1biBnaXQgY29tbWl0Lik8YnI+PGJyPklmIGNvbW1pdCA8c3Bhbj48L3NwYW4+Citkb2VzIG5vdCBmaW5kIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkLCBpdCB3aWxsIHJlcG9ydCAibm90aGluZyB0byBjb21taXQgKHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuKSIuIElmIGNvbW1pdCBmaW5kcyBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZCwgYSBmaWxlIHdpbGwgb3BlbiBpbiB3aGljaCB5b3UgY2FuIGNyZWF0ZSBhIGxvZyBtZXNzYWdlOjxicj48YnI+PGRpdj48aT5Zb3VyIGNvbW1lbnRzIGFib3V0IHRoaXMgY29tbWl0IGdvIGhlcmUuLi4uPC9pPgorPGJyPiMgUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZyA8YnI+IyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0Ljxicj4jIE9uIGJyYW5jaCBtYXN0ZXIgPGJyPiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6PGJyPiModXNlICJnaXQgcmVzZXQgSEVBRGZpbGUuLi4iIHRvIHVuc3RhZ2UpPGJyPiM8YnI+I25ldyBmaWxlOi5yZXBvL3Byb2plY3RzL2dlcnJpdC1tYW5pZmVzdHMuZ2l0L0ZFVENIX0hFQUQgPGJyPiNuZXcgZmlsZToucmVwby9wcm9qZWN0cy9nZXJyaXQtbWFuaWZlc3RzLmdpdC9IRUFEIDxicj4jbmV3IGZpbGU6LnJlcG8vcHJvamVjdHMvZ2Vycml0LW1hbmlmZXN0cy5naXQvY29uZmlnIDxicj4uPGJyPi48YnI+Ljxicj48L2Rpdj4KKzxicj5JZiB5b3UgZG8gbm90IGFkZCBhIGxvZyBtZXNzYWdlLCB0aGUgY29tbWl0IHdpbGwgYmUgYWJvcnRlZC4gQWRkIGEgbWVzc2FnZSBhbmQgc2F2ZSB0aGUgZmlsZS48YnI+PGJyPjxoMz4KK0NvbW1pdHRpbmcgY2hhbmdlcyBkdXJpbmcgY29kZSByZXZpZXc8L2gzPgorSWYgeW91IHByZXZpb3VzbHkgdXBsb2FkZWQgYSBjaGFuZ2UgdG8gR2Vycml0IGFuZCB0aGUgQXBwcm92ZXIgaGFzIGFza2VkIGZvciBjaGFuZ2VzLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PGJyPjxvbD48bGk+RWRpdCB0aGUgZmlsZXMgdG8gbWFrZSB0aGUgY2hhbmdlcyB0aGUgQXBwcm92ZXIgaGFzIHJlcXVlc3RlZC48L2xpPgorPGxpPlJlY29tbWl0IHlvdXIgZWRpdHMgdXNpbmcgdGhlIC0tYW1lbmQgZmxhZywgZm9yIGV4YW1wbGU6PGJyPjxzcGFuPiQgZ2l0IGNvbW1pdCAtYSAtLWFtZW5kPC9zcGFuPgorPGJyPjwvbGk+Cis8bGk+U2VlIGJlbG93IHRvIHVwbG9hZCB0aGUgY2hhbmdlcyB0byBHZXJyaXQgYWdhaW4gZm9yIGFub3RoZXIgcmV2aWV3IGN5Y2xlLjwvbGk+Cis8L29sPgorPGgzPgorRWRpdGluZyB1cGxvYWRlZCBjaGFuZ2VzPC9oMz4KK1RvIHVwZGF0ZSBhbiBleGlzdGluZyBjaGFuZ2Ugd2l0aCBhIG5ldyBwYXRjaCBzZXQ6PGJyPjxvbD48bGk+TWFrZSBzdXJlIHRoZSB1cGRhdGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaC48L2xpPgorPGxpPlVzZSByZXBvIHVwbG9hZCAtLXJlcGxhY2UgPGk+cHJvajE8L2k+Cit0byBvcGVuIHRoZSBjaGFuZ2UgbWF0Y2hpbmcgZWRpdG9yLjwvbGk+Cis8bGk+Rm9yIGVhY2ggY29tbWl0IGluIHRoZSBzZXJpZXMsIGVudGVyIHRoZSBHZXJyaXQgY2hhbmdlIElkIGluc2lkZSB0aGUgYnJhY2tldHMuPC9saT4KKzwvb2w+CitGb3IgbW9yZSBkZXRhaWxzLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9naXQtcmVwby5odG1sI1RPQy11cGxvYWQiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4KKy48YnI+PGgzPgorVXBsb2FkaW5nIGNoYW5nZXMgdG8gR2Vycml0PC9oMz4KK1RvIHVwbG9hZCB5b3VyIGNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSByZXZpZXcgc2VydmVyOjxicj48b2w+PGxpPkNvbXBsZXRlIHRoZSBhcHByb3ByaWF0ZSA8YSBocmVmPSJodHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vI3NldHRpbmdzLG5ldy1hZ3JlZW1lbnQiPkNvbnRyaWJ1dG9yIEFncmVlbWVudDwvYT4KK2luIEdlcnJpdCwgZ3JhbnRpbmcgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBwZXJtaXNzaW9uIHRvIGRpc3RyaWJ1dGUgeW91ciBjaGFuZ2VzIHRvIG90aGVycy48L2xpPgorPGxpPlNlbGVjdCBhbiA8YSBocmVmPSJodHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vI3NldHRpbmdzLHNzaC1rZXlzIj5TU0ggVXNlcm5hbWU8L2E+CithbmQgdXBsb2FkIHlvdXIgPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyNzZXR0aW5ncyxzc2gta2V5cyI+cHVibGljIFNTSCBrZXk8L2E+CissIHNvIHRoYXQgR2Vycml0IGNhbiBpZGVudGlmeSB5b3Ugd2hlbiB5b3UgdXBsb2FkIGNoYW5nZXMuUGxlYXNlIG5vdGUgdGhhdCBkdWUgdG8gYSBidWcgaW4gcmVwbywgcmVwbyB1cGxvYWQgcmVxdWlyZXMgeW91ciBTU0ggVXNlcm5hbWUgYmUgdGhlIGxvY2FsIHBhcnQgb2YgeW91ciBlbWFpbCBhZGRyZXNzICh0aGUgdGV4dCBvbiB0aGUgbGVmdCBvZiB0aGUgQCBzaWduKS48YnI+PGJyPlRoZXNlIGZpcnN0IHR3byBzdGVwcyBhcmUgb25seSBuZWNlc3NhcnkgcHJpb3IgdG8geW91ciBmaXJzdCBjaGFuZ2UuR2Vycml0IHdpbGwgcmVtZW1iZXIgeW91ciBhZ3JlZW1lbnQgYW5kIFNTSCBrZXkgZm9yIHN1YnNlcXVlbnQgY2hhbmdlcy48YnI+PGJyPjwvbGk+Cis8bGk+VXBkYXRlIHRvIHRoZSBsYXRlc3QgcmV2aXNpb25zOjxzcGFuPjxicj48L3NwYW4+Cis8c3Bhbj4kPC9zcGFuPgorPHNwYW4+cmVwbyBzeW5jPC9zcGFuPgorPGJyPjxicj5Gb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGhhbmRsZSBzeW5jIGNvbmZsaWN0cyBhbmQgaG93IFJlcG8gc3luY2hyb25pemF0aW9uIHdvcmtzLCBzZWUgPGEgaHJlZj0ie0Bkb2NSb290fXNvdXJjZS9naXQtcmVwby5odG1sI1RPQy1zeW5jIj5Vc2luZyBSZXBvIGFuZCBHaXQ8L2E+CisuPGJyPjxicj48L2xpPgorPGxpPlJ1biByZXBvIHVwbG9hZCB0byBleGFtaW5lIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgY2hhbmdlcyBhbmQgc2VsZWN0IHdoaWNoIHRvcGljIGJyYW5jaGVzIHdpbGwgYmUgdXBsb2FkZWQgdG8gdGhlIHJldmlldyBzZXJ2ZXI6PGJyPjxzcGFuPiQ8L3NwYW4+Cis8c3Bhbj5yZXBvIHVwbG9hZDwvc3Bhbj4KKzxicj48YnI+VGhpcyB3aWxsIG9wZW4gYW4gZWRpdG9yIHdpbmRvdyB0aGF0IHdpbGwgbGV0IHlvdSBjaG9vc2Ugd2hpY2ggdG9waWMgYnJhbmNoIHRvIHVwbG9hZC5JZiB0aGVyZSBpcyBvbmx5IG9uZSBicmFuY2ggYXZhaWxhYmxlLCBhIHNpbXBsZSB5L24gcHJvbXB0IGlzIGluc3RlYWQgb2YgYW4gZWRpdG9yLjxicj48L2xpPgorPC9vbD4KK0FmdGVyIGEgY2hhbmdlIGlzIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseTo8YnI+PHVsPjxsaT5SZXBvIHdpbGwgZ2l2ZSB5b3UgYSBVUkwgd2hlcmUgeW91IGNhbiB2aWV3IHlvdXIgc3VibWlzc2lvbi48L2xpPgorPGxpPlRoZSBjb2RlLXJldmlldyBzeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5IG5vdGlmeSB0aGUgcHJvamVjdCBvd25lciBhYm91dCB5b3VyIHN1Ym1pc3Npb24uPC9saT4KKzwvdWw+CitGb3IgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmeWluZyBwYXJ0aWN1bGFyIHByb2plY3RzIHdpdGggcmVwbyBzeW5jIGFuZCByZXBvIHVwbG9hZCwgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCI+VXNpbmcgUmVwbyBhbmQgR2l0PC9hPgorLjxicj48YnI+PGgzPgorU3VtbWFyeSBleGFtcGxlIDxicj48L2gzPgorSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHlvdSBtaWdodCB3b3JrIHdpdGggdGhlIGJpb25pYy9BbmRyb2lkLm1rIGZpbGU6PGJyPjxicj4kIGNkIH4vbXlkcm9pZC9iaW9uaWMgPGJyPiQgcmVwbyBzdGFydCBkZWZhdWx0IDxicj4kIHZpIEFuZHJvaWQubWsgPGJyPjxpPi4uLmVkaXQgYW5kIHNhdmUgdGhlIGZpbGUuLi48L2k+Cis8YnI+JCBnaXQgY29tbWl0IC1hIDxicj4kIHJlcG8gc3luYyA8YnI+JCByZXBvIHVwbG9hZCA8YnI+PGk+Li4uY2xvc2UgdGhlIGVkaXRhYmxlIHdpbmRvdyB0aGF0IG9wZW5zLi4uPC9pPgorPGJyPjxpPi4uLnZpc2l0IHRoZSBwcm92aWRlZCBVUkwgdG8gb3BlbiBHZXJyaXQgYW5kIHRyYWNrIHlvdXIgY2hhbmdlLi4uPC9pPgorPGJyPjxicj48aDM+CitEb3dubG9hZGluZyBjaGFuZ2VzIGZyb20gR2Vycml0PC9oMz4KK1RvIGRvd25sb2FkIGEgc3BlY2lmaWMgY2hhbmdlIGZyb20gR2Vycml0LCBydW4gPGJyPjxicj4kIHJlcG8gZG93bmxvYWQgPGk+dGFyZ2V0IGNoYW5nZTwvaT4KKzxicj48YnI+d2hlcmUgdGFyZ2V0IGlzIHRoZSBsb2NhbCBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgY2hhbmdlIHNob3VsZCBiZSBkb3dubG9hZGVkIGFuZGNoYW5nZSBpcyB0aGUgY2hhbmdlIG51bWJlciBhcyBsaXN0ZWQgaW4gPGEgaHJlZj0iaHR0cHM6Ly9yZXZpZXcuc291cmNlLmFuZHJvaWQuY29tLyI+R2Vycml0PC9hPgorLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9IntAZG9jUm9vdH1zb3VyY2UvZ2l0LXJlcG8uaHRtbCNUT0MtZG93bmxvYWQiPlVzaW5nIFJlcG8gYW5kIEdpdDwvYT4KKy48YnI+PGJyPjxoMj4KK1VzaW5nIHRoZSBHZXJyaXQgY29kZS1yZXZpZXcgdG9vbCA8YnI+PC9oMj4KK1lvdSBjYW4gb3BlbiBHZXJyaXQgYnkgdmlzaXRpbmcgd2hhdGV2ZXIgVVJMIGlzIHJldHVybmVkIHRvIHlvdSBmcm9tIHRoZSByZXBvIHVwbG9hZCBjb21tYW5kLCBvciBieSB2aXNpdGluZyA8YSBocmVmPSJodHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb20vIj5odHRwczovL3Jldmlldy5zb3VyY2UuYW5kcm9pZC5jb208L2E+Ljxicj48YnI+PGgzPgorVmlld2luZyB0aGUgc3RhdHVzIG9mIHVwbG9hZGVkIGNoYW5nZXMgPGJyPjwvaDM+CitUbyBjaGVjayB0aGUgc3RhdHVzIG9mIGEgY2hhbmdlIHRoYXQgeW91IHVwbG9hZGVkLCBvcGVuIDxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3LnNvdXJjZS5hbmRyb2lkLmNvbS9taW5lIj5HZXJyaXQ8L2E+CissIHNpZ24gaW4sIGFuZCBjbGljayBNeUNoYW5nZXMuPGJyPjxiPjxicj48L2I+Cis8aDM+CitSZXZpZXdpbmcgYSBjaGFuZ2UgPGJyPjwvaDM+CitJZiB5b3UgYXJlIGFzc2lnbmVkIHRvIGJlIHRoZSBBcHByb3ZlciBmb3IgYSBjaGFuZ2UsIHlvdSBuZWVkIHRvIGRldGVybWluZSB0aGUgZm9sbG93aW5nOjxicj48dWw+PGxpPkRvZXMgdGhpcyBjaGFuZ2UgZml0IHdpdGhpbiB0aGlzIHByb2plY3QncyBzdGF0ZWQgcHVycG9zZT88YnI+PC9saT4KKzxsaT5JcyB0aGlzIGNoYW5nZSB2YWxpZCB3aXRoaW4gdGhlIHByb2plY3QncyBleGlzdGluZyBhcmNoaXRlY3R1cmU/PC9saT4KKzxsaT5Eb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBkZXNpZ24gZmxhd3MgdGhhdCB3aWxsIGNhdXNlIHByb2JsZW1zIGluIHRoZSBmdXR1cmU/PC9saT4KKzxsaT5Eb2VzIHRoaXMgY2hhbmdlIGZvbGxvd2luZyB0aGUgYmVzdCBwcmFjdGljZXMgdGhhdCBoYXZlIGJlZW4gZXN0YWJsaXNoZWQgZm9yIHRoaXMgcHJvamVjdD88L2xpPgorPGxpPklzIHRoaXMgY2hhbmdlIGEgZ29vZCB3YXkgdG8gcGVyZm9ybSB0aGUgZGVzY3JpYmVkIGZ1bmN0aW9uPzwvbGk+Cis8bGk+RG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IG9yIGluc3RhYmlsaXR5IHJpc2tzPzwvbGk+Cis8L3VsPgorSWYgeW91IGFwcHJvdmUgb2YgdGhlIGNoYW5nZSwgeW91IHdpbGwgdGhlbiBtYXJrIGl0IHdpdGggTEdUTSAoIkxvb2tzIEdvb2QgdG8gTWUiKSB3aXRoaW4gR2Vycml0Ljxicj48YnI+PGgzPgorVmVyaWZ5aW5nIGEgY2hhbmdlIDxicj48L2gzPgorSWYgeW91IGFyZSBhc3NpZ25lZCB0byBiZSB0aGUgVmVyaWZpZXIgZm9yIGEgY2hhbmdlLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOjxicj48dWw+PGxpPlBhdGNoIHRoZSBjaGFuZ2UgaW50byB5b3VyIGxvY2FsIGNsaWVudCB1c2luZyBvbmUgb2YgdGhlIERvd25sb2FkIGNvbW1hbmRzLjwvbGk+Cis8bGk+QnVpbGQgYW5kIHRlc3QgdGhlIGNoYW5nZS48L2xpPgorPGxpPldpdGhpbiBHZXJyaXQgdXNlIFB1Ymxpc2ggQ29tbWVudHMgdG8gbWFyayB0aGUgY29tbWl0IGFzICJWZXJpZmllZCIsIG9yICJGYWlscyIgKGFuZCBhZGQgYSBtZXNzYWdlIGV4cGxhaW5pbmcgd2hhdCBwcm9ibGVtcyB3ZXJlIGlkZW50aWZpZWQpLjxicj48L2xpPgorPC91bD4KKzxoMz4KK1ZpZXdpbmcgZGlmZnMgYW5kIGNvbW1lbnRzPC9oMz4KK1RvIG9wZW4gdGhlIGRldGFpbHMgb2YgdGhlIGNoYW5nZSB3aXRoaW4gR2Vycml0LCBjbGljayBvbiB0aGUgIklkIG51bWJlciIgb3IgIlN1YmplY3QiIG9mIGEgY2hhbmdlLiBUbyBjb21wYXJlIHRoZSBlc3RhYmxpc2hlZCBjb2RlIHdpdGggdGhlIHVwZGF0ZWQgY29kZSwgY2xpY2sgdGhlIGZpbGUgbmFtZSB1bmRlciAiU2lkZS1ieS1zaWRlIGRpZmZzLiI8YnI+PC9kaXY+Cis8ZGl2PjxoMz4KK0FkZGluZyBjb21tZW50czwvaDM+CitBbnlvbmUgaW4gdGhlIGNvbW11bml0eSBjYW4gdXNlIEdlcnJpdCB0byBhZGQgaW5saW5lIGNvbW1lbnRzIHRvIGNvZGUgc3VibWlzc2lvbnMuIEEgZ29vZCBjb21tZW50IHdpbGwgYmUgcmVsZXZhbnQgdG8gdGhlIGxpbmUgb3Igc2VjdGlvbiBvZiBjb2RlIHRvIHdoaWNoIGl0IGlzIGF0dGFjaGVkIGluIEdlcnJpdC4gSXQgbWlnaHQgYmUgYSBzaG9ydCBhbmQgY29uc3RydWN0aXZlIHN1Z2dlc3Rpb24gYWJvdXQgaG93IGEgbGluZSBvZiBjb2RlIGNvdWxkIGJlIGltcHJvdmVkLCBvciBpdCBtaWdodCBiZSBhbiBleHBsYW5hdGlvbiBmcm9tIHRoZSBhdXRob3IgYWJvdXQgd2h5IHRoZSBjb2RlIG1ha2VzIHNlbnNlIHRoZSB3YXkgaXQgaXMuPGJyPjxicj5UbyBhZGQgYW4gaW5saW5lIGNvbW1lbnQsIGRvdWJsZS1jbGljayB0aGUgcmVsZXZhbnQgbGluZSBvZiB0aGUgY29kZSBhbmQgd3JpdGUgeW91ciBjb21tZW50IGluIHRoZSB0ZXh0IGJveCB0aGF0IG9wZW5zLiBXaGVuIHlvdSBjbGljayBTYXZlLCBvbmx5IHlvdSBjYW4gc2VlIHlvdXIgY29tbWVudC48YnI+PGJyPlRvIHB1Ymxpc2ggeW91ciBjb21tZW50cyBzbyB0aGF0IG90aGVycyB1c2luZyBHZXJyaXQgd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGVtLCBjbGljayB0aGUgUHVibGlzaCBDb21tZW50cyBidXR0b24uIFlvdXIgY29tbWVudHMgd2lsbCBiZSBlbWFpbGVkIHRvIGFsbCByZWxldmFudCBwYXJ0aWVzIGZvciB0aGlzIGNoYW5nZSwgaW5jbHVkaW5nIHRoZSBjaGFuZ2Ugb3duZXIsIHRoZSBwYXRjaCBzZXQgdXBsb2FkZXIgKGlmIGRpZmZlcmVudCBmcm9tIHRoZSBvd25lciksIGFuZCBhbGwgY3VycmVudCByZXZpZXdlcnMuPGJyPjxicj48aDM+CitBZnRlciBhIHN1Ym1pc3Npb24gaXMgYXBwcm92ZWQ8L2gzPgorQWZ0ZXIgYSBzdWJtaXNzaW9uIG1ha2VzIGl0IHRocm91Z2ggdGhlIHJldmlldyBhbmQgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIEdlcnJpdCBhdXRvbWF0aWNhbGx5IG1lcmdlcyB0aGUgY2hhbmdlIGludG8gdGhlIHB1YmxpYyByZXBvc2l0b3J5LiBUaGUgY2hhbmdlIHdpbGwgbm93IGJlIHZpc2libGUgaW4gZ2l0d2ViLCBhbmQgb3RoZXJzIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBydW4gcmVwbyBzeW5jIHRvIHB1bGwgdGhlIHVwZGF0ZSBpbnRvIHRoZWlyIGxvY2FsIGNsaWVudC48YnI+PGJyPjxoMz4KK0hvdyBkbyBJIGJlY29tZSBhIFZlcmlmaWVyIG9yIEFwcHJvdmVyPzwvaDM+CitJbiBzaG9ydCwgY29udHJpYnV0ZSBoaWdoLXF1YWxpdHkgY29kZSB0byBvbmUgb3IgbW9yZSBvZiB0aGUgQW5kcm9pZCBwcm9qZWN0cy4KK0ZvciBkZXRhaWxzIGFib3V0IHRoZSBkaWZmZXJlbnQgcm9sZXMgaW4gdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgY29tbXVuaXR5IGFuZAord2hvIHBsYXlzIHRoZW0sIHNlZSA8YSBocmVmPSJ7QGRvY1Jvb3R9c291cmNlL3JvbGVzLmh0bWwiPlByb2plY3Qgcm9sZXM8L2E+CisuPGJyPjxicj48aDI+CitVc2luZyBHaXRXZWIgdG8gdHJhY2sgcGF0Y2ggaGlzdG9yaWVzPC9oMj4KK1RvIHZpZXcgc25hcHNob3RzIG9mIHRoZSBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgcHVibGljIEFuZHJvaWQgcmVwb3NpdG9yaWVzIGFuZCB2aWV3IGZpbGUgaGlzdG9yaWVzLCB1c2UgdGhlIDxhIGhyZWY9Imh0dHA6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnLyI+QW5kcm9pZCBpbnN0YW5jZSBvZiBHaXRXZWI8L2E+CisuPGJyPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3Bkay9kb2NzL3NvdXJjZS91c2luZy1lY2xpcHNlLmpkIGIvcGRrL2RvY3Mvc291cmNlL3VzaW5nLWVjbGlwc2UuamQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkZjcxMwotLS0gL2Rldi9udWxsCisrKyBiL3Bkay9kb2NzL3NvdXJjZS91c2luZy1lY2xpcHNlLmpkCkBAIC0wLDAgKzEsMjE0IEBACitwYWdlLnRpdGxlPVVzaW5nIEVjbGlwc2UKK2RvYy50eXBlPXNvdXJjZQorQGpkOmJvZHkKKzxkaXY+Cis8cD5UaGlzIGRvY3VtZW50IHdpbGwgaGVscCB5b3Ugc2V0IHVwIHRoZSBFY2xpcHNlIElERSBmb3IgQW5kcm9pZCBwbGF0Zm9ybSBkZXZlbG9wbWVudC48L3A+Cis8cD48aT5Ob3RlOiBpZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UKK0VjbGlwc2UgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24gQW5kcm9pZCwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0CitwYWdlIGZvciB5b3UuIFlvdSBwcm9iYWJseSB3b3VsZCBmaW5kIDxhCitocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Nkay9lY2xpcHNlLWFkdC5odG1sIj50aGUgRWNsaXBzZSBwYWdlIG9uCitkZXZlbG9wZXIuYW5kcm9pZC5jb208L2E+IG1vcmUgdXNlZnVsLjwvaT48L3A+Cis8aDI+PGE+RW50ZXIgZWNsaXBzZTwvYT4KKzwvaDI+Cis8aDQ+CitCYXNpYyBzZXR1cAorPC9oND4KKzxwPkZpcnN0LCBpdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhlIHJlZ3VsYXIgQW5kcm9pZCBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgc2V0IHVwLgorPC9wPgorPHByZT5jZCAvcGF0aC90by9hbmRyb2lkL3Jvb3QgPGJyPm1ha2UgICAgICMgYW5kIHdhaXQgYSB3aGlsZSwgaWYgeW91IGhhdmVuJ3QgZG9uZSB0aGlzIDxicj48L3ByZT4KKzxwPjxiPkltcG9ydGFudDwvYj4KKzogWW91IHdpbGwgc3RpbGwgYmUgdXNpbmcgIm1ha2UiIHRvIGJ1aWxkIHRoZSBmaWxlcyB5b3Ugd2lsbCBhY3R1YWxseSBydW4gKGluIHRoZSBlbXVsYXRvciBvciBvbiBhIGRldmljZSkuIFlvdSB3aWxsIGJlIHVzaW5nIEVjbGlwc2UgdG8gZWRpdCBmaWxlcyBhbmQgdmVyaWZ5IHRoYXQgdGhleSBjb21waWxlLCBidXQgd2hlbiB5b3Ugd2FudCB0byBydW4gc29tZXRoaW5nIHlvdSB3aWxsIG5lZWQgdG8gbWFrZSBzdXJlIGZpbGVzIGFyZSBzYXZlZCBpbiBFY2xpcHNlIGFuZCBydW4gIm1ha2UiIGluIGEgc2hlbGwuIFRoZSBFY2xpcHNlIGJ1aWxkIGlzIGp1c3QgZm9yIGVycm9yIGNoZWNraW5nLgorPC9wPgorPHA+RWNsaXBzZSBuZWVkcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBKYXZhIGZpbGVzLiBUaGlzIGlzIGNhbGxlZCB0aGUgIkphdmEgQnVpbGQgUGF0aCIgYW5kIGNhbiBiZSBzZXQgd2l0aCB0aGUgLmNsYXNzcGF0aCBmaWxlLiBXZSBoYXZlIGEgc2FtcGxlIHZlcnNpb24gdG8gc3RhcnQgeW91IG9mZi4KKzwvcD4KKzxwcmU+Y2QgL3BhdGgvdG8vYW5kcm9pZC9yb290IDxicj5jcCBkZXZlbG9wbWVudC9pZGUvZWNsaXBzZS8uY2xhc3NwYXRoIC48YnI+Y2htb2QgdSt3IC5jbGFzc3BhdGggICMgTWFrZSB0aGUgY29weSB3cml0YWJsZSA8YnI+PC9wcmU+Cis8cD5Ob3cgZWRpdCB0aGF0IGNvcHkgb2YgLmNsYXNzcGF0aCwgaWYgbmVjZXNzYXJ5LgorPC9wPgorPGg1PgorSW5jcmVhc2UgRWNsaXBzZSdzIE1lbW9yeSBTZXR0aW5ncworPC9oNT4KKzxwPlRoZSBBbmRyb2lkIHByb2plY3QgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgRWNsaXBzZSdzIEphdmEgVk0gc29tZXRpbWVzIHJ1bnMgb3V0IG9mIG1lbW9yeSB3aGlsZSBjb21waWxpbmcgaXQuIEF2b2lkIHRoaXMgcHJvYmxlbSBieSBlZGl0aW5nIHRoZSB0aGUgZWNsaXBzZS5pbmkgZmlsZS4gT24gQXBwbGUgT1NYIHRoZSBlY2xpcHNlLmluaSBmaWxlIGlzIGxvY2F0ZWQgYXQgL0FwcGxpY2F0aW9ucy9lY2xpcHNlL0VjbGlwc2UuYXBwL0NvbnRlbnRzL01hY09TL2VjbGlwc2UuaW5pCis8L3A+Cis8cD5NZW1vcnktcmVsYXRlZCBkZWZhdWx0cyAoYXMgb2YgRWNsaXBzZSAzLjQpCis8L3A+CisKKzxwcmU+LVhtczQwbSA8YnI+LVhteDI1Nm0gPGJyPi1YWDpNYXhQZXJtU2l6ZT0yNTZtIDxicj48L3ByZT4KKzxwPlJlY29tbWVuZGVkIHNldHRpbmdzIGZvciBBbmRyb2lkIGRldmVsb3BtZW50Cis8L3A+Cis8cHJlPi1YbXMxMjhtIDxicj4tWG14NTEybSA8YnI+LVhYOk1heFBlcm1TaXplPTI1Nm0gPGJyPjwvcHJlPgorPHA+VGhlc2Ugc2V0dGluZ3Mgc2V0IEVjbGlwc2UncyBtaW5pbXVtIEphdmEgaGVhcCBzaXplIHRvIDEyOE1CLCBzZXQgdGhlIG1heGltdW0gSmF2YSBoZWFwIHNpemUgdG8gNTEyTUIsIGFuZCBrZWVwIHRoZSBtYXhpbXVtIHBlcm1hbmVudCBnZW5lcmF0aW9uIHNpemUgYXQgdGhlIGRlZmF1bHQgb2YgMjU2TUIuCis8L3A+Cis8cD5Ob3cgc3RhcnQgRWNsaXBzZToKKzwvcD4KKzxwcmU+ZWNsaXBzZSAgIyBvciB5b3UgY2FuIGNsaWNrIHNvbWUgY2xpY2t5IHRoaW5nIGluc3RlYWQsIGlmIHlvdSBwcmVmZXIgPGJyPjwvcHJlPgorPHA+Tm93IGNyZWF0ZSBhIHByb2plY3QgZm9yIEFuZHJvaWQgZGV2ZWxvcG1lbnQ6Cis8L3A+Cis8b2w+PGxpPklmIEVjbGlwc2UgYXNrcyB5b3UgZm9yIGEgd29ya3NwYWNlIGxvY2F0aW9uLCBjaG9vc2UgdGhlIGRlZmF1bHQuCis8L2xpPgorPGxpPklmIHlvdSBoYXZlIGEgIldlbGNvbWUiIHNjcmVlbiwgY2xvc2UgaXQgdG8gcmV2ZWFsIHRoZSBKYXZhIHBlcnNwZWN0aXZlLgorPC9saT4KKzxsaT5GaWxlIE5ldyBKYXZhIFByb2plY3QKKzwvbGk+Cis8bGk+UGljayBhIHByb2plY3QgbmFtZSwgImFuZHJvaWQiIG9yIGFueXRoaW5nIHlvdSBsaWtlLgorPC9saT4KKzxsaT5TZWxlY3QgIkNyZWF0ZSBwcm9qZWN0IGZyb20gZXhpc3Rpbmcgc291cmNlIiwgZW50ZXIgdGhlIHBhdGggdG8geW91ciBBbmRyb2lkIHJvb3QgZGlyZWN0b3J5LCBhbmQgY2xpY2sgRmluaXNoLgorPC9saT4KKzxsaT5XYWl0IHdoaWxlIGl0IHNldHMgdXAgdGhlIHByb2plY3QuIChZb3UnbGwgc2VlIGEgc3VidGxlIHByb2dyZXNzIG1ldGVyIGluIHRoZSBsb3dlciByaWdodCBjb3JuZXIuKQorPC9saT4KKzwvb2w+Cis8cD5PbmNlIHRoZSBwcm9qZWN0IHdvcmtzcGFjZSBpcyBjcmVhdGVkLCBFY2xpcHNlIHNob3VsZCBzdGFydCBidWlsZGluZy4gSW4gdGhlb3J5LCBpdCBzaG91bGQgYnVpbGQgd2l0aCBubyBlcnJvcnMgYW5kIHlvdSBzaG91bGQgYmUgc2V0IHRvIGdvLiBJZiBuZWNlc3NhcnksIHVuY2hlY2sgYW5kIHJlLWNoZWNrIFByb2plY3QgQnVpbGQgQXV0b21hdGljYWxseSB0byBmb3JjZSBhIHJlYnVpbGQuCis8L3A+Cis8cD48aT48Yj5Ob3RlOjwvYj4KKzwvaT4KK0VjbGlwc2Ugc29tZXRpbWVzIGxpa2VzIHRvIGFkZCBhbiAiaW1wb3J0IGFuZHJvaWQuUiIgc3RhdGVtZW50IGF0IHRoZSB0b3Agb2YgeW91ciBmaWxlcyB0aGF0IHVzZSByZXNvdXJjZXMsIGVzcGVjaWFsbHkgd2hlbiB5b3UgYXNrIGVjbGlwc2UgdG8gc29ydCBvciBvdGhlcndpc2UgbWFuYWdlIGltcG9ydHMuIFRoaXMgd2lsbCBjYXVzZSB5b3VyIG1ha2UgdG8gYnJlYWsuIExvb2sgb3V0IGZvciB0aGVzZSBlcnJvbmVvdXMgaW1wb3J0IHN0YXRlbWVudHMgYW5kIGRlbGV0ZSB0aGVtLgorPC9wPgorPGg0PgorV2hlbiB5b3Ugc3luYworPC9oND4KKzxwPkV2ZXJ5IHRpbWUgeW91IHJlcG8gc3luYywgb3Igb3RoZXJ3aXNlIGNoYW5nZSBmaWxlcyBvdXRzaWRlIG9mIEVjbGlwc2UgKGVzcGVjaWFsbHkgdGhlIC5jbGFzc3BhdGgpLCB5b3UgbmVlZCB0byByZWZyZXNoIEVjbGlwc2UncyB2aWV3IG9mIHRoaW5nczoKKzwvcD4KKzxvbD48bGk+V2luZG93IFNob3cgVmlldyBOYXZpZ2F0b3IKKzwvbGk+Cis8bGk+SW4gdGhlICJOYXZpZ2F0b3IiLCByaWdodC1jbGljayBvbiB0aGUgcHJvamVjdCAoImFuZHJvaWQtamF2YSIgb3Igd2hhdGV2ZXIgeW91IG5hbWVkIGl0KQorPC9saT4KKzxsaT5DbGljayBSZWZyZXNoIGluIHRoZSBjb250ZXh0IG1lbnUKKzwvbGk+Cis8L29sPgorPGg0PgorQWRkaW5nIGFwcHMgdG8gdGhlIGJ1aWxkIHBhdGgKKzwvaDQ+Cis8cD5UaGUgZGVmYXVsdCAuY2xhc3NwYXRoIGluY2x1ZGVzIHRoZSBzb3VyY2UgdG8gdGhlIGNvcmUgc3lzdGVtIGFuZCBhIHNhbXBsZSBzZXQgb2YgYXBwcywgYnV0IG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSBwYXJ0aWN1bGFyIGFwcCB5b3UgbWF5IHdhbnQgdG8gd29yayBvbi4gVG8gYWRkIGFuIGFwcCwgeW91IG11c3QgYWRkIHRoZSBhcHAncyBzb3VyY2UgZGlyZWN0b3J5LiBUbyBkbyB0aGlzIGluc2lkZSBFY2xpcHNlOgorPC9wPgorPG9sPjxsaT5Qcm9qZWN0IFByb3BlcnRpZXMKKzwvbGk+Cis8bGk+U2VsZWN0ICJKYXZhIEJ1aWxkIFBhdGgiIGZyb20gdGhlIGxlZnQtaGFuZCBtZW51LgorPC9saT4KKzxsaT5DaG9vc2UgdGhlICJTb3VyY2UiIHRhYi4KKzwvbGk+Cis8bGk+Q2xpY2sgIkFkZCBGb2xkZXIuLi4iLgorPC9saT4KKzxsaT5BZGQgeW91ciBhcHAncyAic3JjIiBkaXJlY3RvcnkuCis8L2xpPgorPGxpPkNsaWNrIE9LLgorPC9saT4KKzwvb2w+Cis8cD5XaGVuIHlvdSdyZSBkb25lLCB0aGUgInNvdXJjZSBmb2xkZXIiIHBhdGggaW4gdGhlIGxpc3Qgc2hvdWxkIGxvb2sgbGlrZSBhbmRyb2lkL3BhY2thZ2VzL2FwcHMvPGk+WW91ckFwcE5hbWU8L2k+Cisvc3JjLiBEZXBlbmRpbmcgb24gd2hpY2ggYXBwKHMpIHlvdSBpbmNsdWRlLCB5b3UgbWF5IGFsc28gbmVlZCB0byBpbmNsdWRlIG90aGVyc3JjL21haW4vamF2YSBkaXJlY3RvcmllcyB1bmRlciBhbmRyb2lkL2RhbHZpay9saWJjb3JlLiBEbyB0aGlzIGlmIHlvdSBmaW5kIHlvdSBjYW5ub3QgYnVpbGQgd2l0aCB0aGUgZGVmYXVsdCBzZXQuCis8L3A+Cis8aDQ+CitFY2xpcHNlIHNldHVwIHRvIHdvcmsgb24gZGV2ZWxvcGVyIHRvb2xzCis8L2g0PgorPHA+VG8gd29yayBvbiBKYXZhIGRldmVsb3BlciB0b29scywgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSwgZXhjZXB0IHlvdSBzcGVjaWZ5IC9wYXRoL3RvL3Rvb2wgd2hlbiB1c2luZyB0aGUgb3B0aW9uICJDcmVhdGUgcHJvamVjdCBmcm9tIGV4aXN0aW5nIHNvdXJjZS4iCis8L3A+Cis8cD5PbmNlIHRoZSBwcm9qZWN0IGlzIGNyZWF0ZWQsIHlvdSBuZWVkIHRvIHNldCB1cCB0aGUgSmF2YSBCdWlsZCBQYXRoOgorPC9wPgorPG9sPjxsaT5TZWxlY3QgdGhlIHByb2plY3QgeW91IGp1c3QgY3JlYXRlZC4KKzwvbGk+Cis8bGk+UHJvamVjdCBQcm9wZXJ0aWVzCis8L2xpPgorPGxpPlNlbGVjdCAiSmF2YSBCdWlsZCBQYXRoIiBmcm9tIHRoZSBsZWZ0LWhhbmQgbWVudS4KKzwvbGk+Cis8bGk+Q2hvb3NlIHRoZSAiU291cmNlIiB0YWIuCis8L2xpPgorPGxpPkV4cGFuZCB0aGUgc2luZ2xlIDxpPnRvb2xuYW1lPC9pPgorL3NyYyBlbnRyeS4KKzwvbGk+Cis8bGk+RG91YmxlIGNsaWNrIHRoZSAiRXhjbHVkZWQ6IChub25lKSIgaXRlbS4KKzwvbGk+Cis8bGk+QWRkIHRvIHRoZSBleGNsdWRlZCAoYm90dG9tKSBsaXN0OiAiTWFrZUZpbGUiIGFuZCAicmVzb3VyY2VzLyIuCis8L2xpPgorPGxpPkNsb3NlIHRoZSBkaWFsb2cuCis8L2xpPgorPGxpPkJhY2sgaW4gdGhlICJTb3VyY2UiIHRhYiwgY2xpY2sgIkFkZCBGb2xkZXIuLi4iLCBhbmQgYWRkIDxpPnRvb2xuYW1lPC9pPgorL3NyYy9yZXNvdXJjZXMuCis8L2xpPgorPGxpPkNsaWNrIE9LLgorPC9saT4KKzwvb2w+Cis8aDQ+CitFY2xpcHNlIHNldHVwIHRvIHdvcmsgb24gRERNUyA8YnI+PC9oND4KKzxwPkZvciBERE1TLCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBwcm9qZWN0IGZvcgorPC9wPgorPG9sPjxsaT5kZXZlbG9wbWVudC90b29scy9kZG1zL2xpYnMvZGRtbGliCis8L2xpPgorPGxpPmRldmVsb3BtZW50L3Rvb2xzL2RkbXMvbGlicy9kZG11aWxpYgorPC9saT4KKzxsaT5kZXZlbG9wbWVudC90b29scy9kZG1zL2FwcAorPC9saT4KKzwvb2w+Cis8cD5FYWNoIHByb2plY3Qgd2lsbCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgb25lcyBiZWZvcmUgaXQgKCJkZG11aWxpYiIgcmVmZXJlbmNlcyAiZGRtbGliIiwgYW5kICJhcHAiIHJlZmVyZW5jZXMgYm90aCBvZiB0aG9zZSkuIFRvIGRvIHRoaXM6Cis8L3A+Cis8b2w+PGxpPk1ha2Ugc3VyZSB5b3UgaGF2ZSBhbGwgMyBwcm9qZWN0cyBkZWZpbmVkLgorPC9saT4KKzxsaT5SaWdodCBjbGljayBvbiBhIHByb2plY3QsICJCdWlsZCBQYXRoIiAiQ29uZmlndXJlIEJ1aWxkIFBhdGguLi4iCis8L2xpPgorPGxpPkNob29zZSB0aGUgIlByb2plY3QiIHRhYi4KKzwvbGk+Cis8bGk+Q2xpY2sgIkFkZC4uLiIgYW5kIGNoZWNrIHRoZSByZXF1aXJlZCBwcm9qZWN0cy4KKzwvbGk+Cis8L29sPgorPGgyPjxhPkVjbGlwc2UgZm9ybWF0dGluZzwvYT4KKzwvaDI+Cis8cD5Zb3UgY2FuIGltcG9ydCBmaWxlcyBpbiBkZXZlbG9wbWVudC9pZGUvZWNsaXBzZSB0byBtYWtlIEVjbGlwc2UKK2ZvbGxvdyB0aGUgQW5kcm9pZCBzdHlsZSBydWxlcy4gIFNlbGVjdAorIldpbmRvdyAmcnNhcXVvOyBQcmVmZXJlbmNlcyAmcnNhcXVvOyBKYXZhICZyc2FxdW87IENvZGUgU3R5bGUiLgorVXNlICJGb3JtYXR0ZXIgJnJzYXF1bzsgSW1wb3J0IiB0byBpbXBvcnQgYW5kcm9pZC1mb3JtYXR0aW5nLnhtbAorYW5kICJPcmdhbml6ZSBJbXBvcnRzICZyc2FxdW87IEltcG9ydCIgdG8gaW1wb3J0IGFuZHJvaWQuaW1wb3J0b3JkZXIuCis8L3A+Cis8aDI+PGE+RGVidWdnaW5nIHRoZSBlbXVsYXRvciB3aXRoIEVjbGlwc2U8L2E+Cis8L2gyPgorPHA+WW91IGNhbiBhbHNvIHVzZSBlY2xpcHNlIHRvIGRlYnVnIHRoZSBlbXVsYXRvciBhbmQgc3RlcCB0aHJvdWdoIGNvZGUuIEZpcnN0LCBzdGFydCB0aGUgZW11bGF0b3IgcnVubmluZzoKKzwvcD4KKzxwcmU+Y2QgL3BhdGgvdG8vYW5kcm9pZC9yb290IDxicj4uIGJ1aWxkL2VudnNldHVwLnNoIDxicj5sdW5jaCAxICAgIyB0byBidWlsZCB0aGUgZW11bGF0b3IgPGJyPm1ha2UgICAgICAjIGlmIHlvdSBkaWRuJ3QgYWxyZWFkeSBkbyB0aGlzIDxicj5lbXVsYXRvciAgIyB5b3Ugc2hvdWxkIHNlZSBhIEdVSSBwaWN0dXJlIG9mIGEgcGhvbmUgPGJyPjwvcHJlPgorPHA+SW4gYW5vdGhlciBzaGVsbCwgc3RhcnQgRERNUyAodGhlIERhbHZpayBkZWJ1ZyBtYW5hZ2VyKToKKzwvcD4KKzxwcmU+Y2QgL3BhdGgvdG8vYW5kcm9pZC9yb290IDxicj5kZG1zICAgICAgIyB5b3Ugc2hvdWxkIGdldCBhIHNwbHVmdHkgZGVidWdnaW5nIGNvbnNvbGUgPGJyPjwvcHJlPgorPHA+Tm93LCBpbiBlY2xpcHNlLCB5b3UgY2FuIGF0dGFjaCB0byB0aGUgZW11bGF0b3I6Cis8L3A+Cis8b2w+PGxpPlJ1biBPcGVuIERlYnVnIERpYWxvZy4uLgorPC9saT4KKzxsaT5SaWdodC1jbGljayAiUmVtb3RlIEphdmEgQXBwbGljYXRpb24iLCBzZWxlY3QgIk5ldyIuCis8L2xpPgorPGxpPlBpY2sgYSBuYW1lLCAiYW5kcm9pZC1kZWJ1ZyIgb3IgYW55dGhpbmcgeW91IGxpa2UuCis8L2xpPgorPGxpPlNldCB0aGUgIlByb2plY3QiIHRvIHlvdXIgcHJvamVjdCAoImFuZHJvaWQtamF2YSIgb3Igd2hhdGV2ZXIpLgorPC9saT4KKzxsaT5LZWVwIHRoZSAiSG9zdCIgc2V0IHRvICJsb2NhbGhvc3QiLCBidXQgY2hhbmdlICJQb3J0IiB0byA4NzAwLgorPC9saT4KKzxsaT5DbGljayB0aGUgIkRlYnVnIiBidXR0b24gYW5kIHlvdSBzaG91bGQgYmUgYWxsIHNldC4KKzwvbGk+Cis8L29sPgorPHA+Tm90ZSB0aGF0IHBvcnQgODcwMCBpcyBhdHRhY2hlZCB0byB3aGF0ZXZlciBwcm9jZXNzIGlzIGN1cnJlbnRseSBzZWxlY3RlZCBpbiB0aGUgRERNUyBjb25zb2xlLCBzbyB5b3UgbmVlZCB0byBzdXJlIHRoYXQgRERNUyBoYXMgc2VsZWN0ZWQgdGhlIHByb2Nlc3MgeW91IHdhbnQgdG8gZGVidWcuCis8L3A+Cis8cD5Zb3UgbWF5IG5lZWQgdG8gb3BlbiB0aGUgRGVidWcgcGVyc3BlY3RpdmUgKG5leHQgdG8gdGhlICJKYXZhIiBwZXJzcGVjdGl2ZSBpY29uIGluIHRoZSB1cHBlci1yaWdodCwgY2xpY2sgdGhlIHNtYWxsICJPcGVuIFBlcnNwZWN0aXZlIiBpY29uIGFuZCBzZWxlY3QgIkRlYnVnIikuIE9uY2UgeW91IGRvLCB5b3Ugc2hvdWxkIHNlZSBhIGxpc3Qgb2YgdGhyZWFkczsgaWYgeW91IHNlbGVjdCBvbmUgYW5kIGJyZWFrIGl0IChieSBjbGlja2luZyB0aGUgInBhdXNlIiBpY29uKSwgaXQgc2hvdWxkIHNob3cgdGhlIHN0YWNrIHRyYWNlLCBzb3VyY2UgZmlsZSwgYW5kIGxpbmUgd2hlcmUgZXhlY3V0aW9uIGlzIGF0LiBCcmVha3BvaW50cyBhbmQgd2hhdG5vdCBzaG91bGQgYWxsIHdvcmsuCis8L3A+Cis8aDI+PGE+Qm9udXMgbWF0ZXJpYWw8L2E+Cis8L2gyPgorPHA+UmVwbGFjZSBDdHJsIHdpdGggdGhlIEFwcGxlIGtleSBvbiBNYWMuCis8L3A+CisKKzxwcmU+Q3RybC1TaGlmdC1vID0gT3JnYW5pemUgaW1wb3J0cyA8YnI+Q3RybC1TaGlmdC10ID0gbG9hZCBjbGFzcyBieSBuYW1lIDxicj5DdHJsLVNoaWZ0LXIgPSBsb2FkIG5vbi1jbGFzcyByZXNvdXJjZSBieSBuYW1lIDxicj5DdHJsLTEgPSBxdWljayBmaXggPGJyPkN0cmwtZSA9IFJlY2VudGx5IHZpZXdlZCBmaWxlcyA8YnI+Q3RybC1zcGFjZSA9IGF1dG8gY29tcGxldGUgPGJyPlNoaWZ0LUFsdC1yID0gcmVmYWN0b3I6cmVuYW1lIDxicj5TaGlmdC1BbHQtdiA9IHJlZmFjdG9yOm1vdmUgPGJyPjwvcHJlPgorCis8aDI+PGE+VXNlZnVsIFBsdWdpbnM8L2E+Cis8L2gyPgorPHA+RWNsaXBzZSBoYXMgYSBwbHVnaW4gYXJjaGl0ZWN0dXJlIHRoYXQgZW5hYmxlcyB0aGlyZCBwYXJ0aWVzIHRvIGV4dGVuZCB0aGUgSURFLiBIZXJlIGFyZSBzb21lIHBsdWdpbnMgdGhhdCBtYWtlIEVjbGlwc2UgZWFzaWVyIHRvIHVzZSBmb3Igd3JpdGluZyBBbmRyb2lkIHNvZnR3YXJlOgorPC9wPgorCis8dWw+PGxpPjxhIGhyZWY9Imh0dHA6Ly9hbmRyZWkuZ214aG9tZS5kZS9hbnllZGl0LyI+QW55RWRpdDwvYT4KKy0gYXV0b21hdGljYWxseSBmaXggd2hpdGVzcGFjZSBpc3N1ZXMgd2hlbiBzYXZpbmcgZmlsZXMuIENhbiBjb252ZXJ0IHRhYnMgdG8gc3BhY2VzLCBzdHJpcCBibGFua3MgYXQgZW5kLW9mLWxpbmUsIGFuZCBlbnN1cmUgdGhlIGxhc3QgbGluZSBvZiB0aGUgZmlsZSBoYXMgYW4gZW5kLW9mLWxpbmUgY2hhcmFjdGVyLgorPC9saT4KKzwvdWw+Cis8aDI+PGE+IkVjbGlwc2UgaXMgbm90IHdvcmtpbmcgY29ycmVjdGx5LCB3aGF0IHNob3VsZCBJIGRvPyI8L2E+Cis8L2gyPgorPHA+TWFrZSBzdXJlOgorPC9wPgorPHVsPjxsaT5Zb3UgZm9sbG93ZWQgdGhlIGluc3RydWN0aW9ucyBvbiB0aGlzIHBhZ2UgcHJlY2lzZWx5LgorPC9saT4KKzxsaT5Zb3VyIFByb2JsZW1zIHZpZXcgZG9lc24ndCBzaG93IGFueSBlcnJvcnMuCis8L2xpPgorPGxpPllvdXIgYXBwbGljYXRpb24gcmVzcGVjdHMgdGhlIHBhY2thZ2UvZGlyZWN0b3J5IHN0cnVjdHVyZS4KKzwvbGk+Cis8L3VsPgorPHA+SWYgeW91J3JlIHN0aWxsIGhhdmluZyBwcm9ibGVtcywgcGxlYXNlIGNvbnRhY3Qgb25lIG9mIHRoZSBBbmRyb2lkIG1haWxpbmcgbGlzdHMgb3IgSVJDIGNoYW5uZWxzLgorPC9wPgorPC9kaXY+CmRpZmYgLS1naXQgYS9wZGsvaG9zdGluZy9hcHAueWFtbCBiL3Bkay9ob3N0aW5nL2FwcC55YW1sCmluZGV4IGIzNmVmZTguLjY3NTg1MzkgMTAwNjQ0Ci0tLSBhL3Bkay9ob3N0aW5nL2FwcC55YW1sCisrKyBiL3Bkay9ob3N0aW5nL2FwcC55YW1sCkBAIC00LDggKzQsMTAgQEAKIGFwaV92ZXJzaW9uOiAxCiAKIGhhbmRsZXJzOgotLSB1cmw6IC9vbmxpbmUtcGRrCi0gIHN0YXRpY19kaXI6IG9ubGluZS1wZGsKLQogLSB1cmw6IC8KLSAgc2NyaXB0OiBwZGsucHkKKyAgc3RhdGljX2ZpbGVzOiBvbmxpbmUtcGRrL2luZGV4Lmh0bWwKKyAgdXBsb2FkOiBvbmxpbmUtcGRrL2luZGV4Lmh0bWwKKworLSB1cmw6IC8oLiopCisgIHN0YXRpY19maWxlczogb25saW5lLXBkay9cMQorICB1cGxvYWQ6IG9ubGluZS1wZGsvLioKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCBhNmVmZjk2Li5mYjQxNmVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC00LDkgKzQsOSBAQAogICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgCisKICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgCisKICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KQEAgLTI4LDEzICsyOCwxNCBAQAogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX0NPQVJTRV9MT0NBVElPTiIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLklOVEVSTkVUIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU0VUX1dBTExQQVBFUiIgLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UiIC8+CiAKICAgICA8IS0tIFdlIHdpbGwgcmVxdWVzdCBhY2Nlc3MgdG8gdGhlIGNhbWVyYSwgc2F5aW5nIHdlIHJlcXVpcmUgYSBjYW1lcmEKICAgICAgICAgIG9mIHNvbWUgc29ydCBidXQgbm90IG9uZSB3aXRoIGF1dG9mb2N1cyBjYXBhYmlsaXR5LiAtLT4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQSIgLz4KICAgICA8dXNlcy1mZWF0dXJlIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEiIC8+CiAgICAgPHVzZXMtZmVhdHVyZSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmF1dG9mb2N1cyIgYW5kcm9pZDpyZXF1aXJlZD0iZmFsc2UiIC8+Ci0gICAgCisKICAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpuYW1lPSJBcGlEZW1vc0FwcGxpY2F0aW9uIgogICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9zYW1wbGVfY29kZSIKICAgICAgICAgICAgIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2FwcF9zYW1wbGVfY29kZSIgPgpAQCAtNDIsNyArNDMsNyBAQAogICAgICAgICA8IS0tIFRoaXMgaXMgaG93IHdlIGNhbiByZXF1ZXN0IGEgbGlicmFyeSBidXQgc3RpbGwgYWxsb3cgdGhlIGFwcAogICAgICAgICAgICAgIHRvIGJlIGluc3RhbGxlZCBpZiBpdCBkb2Vzbid0IGV4aXN0LiAtLT4KICAgICAgICAgPHVzZXMtbGlicmFyeSBhbmRyb2lkOm5hbWU9ImNvbS5leGFtcGxlLndpbGwubmV2ZXIuZXhpc3QiIGFuZHJvaWQ6cmVxdWlyZWQ9ImZhbHNlIiAvPgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJBcGlEZW1vcyI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CkBAIC0xOTEsMTEgKzE5MiwxMSBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlb3JkZXJUd28iIC8+CiAgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuUmVvcmRlclRocmVlIiAvPgogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlb3JkZXJGb3VyIiAvPgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlNldFdhbGxwYXBlckFjdGl2aXR5IgogICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9zZXR3YWxscGFwZXIiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CkBAIC0yMTcsMTQgKzIxOCwxNyBAQAogCiAgICAgICAgIDxzZXJ2aWNlIGFuZHJvaWQ6bmFtZT0iLmFwcC5Mb2NhbFNlcnZpY2UiIC8+CiAKLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5Mb2NhbFNlcnZpY2VDb250cm9sbGVyIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X2xvY2FsX3NlcnZpY2VfY29udHJvbGxlciI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuTG9jYWxTZXJ2aWNlJENvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXVuY2hNb2RlPSJzaW5nbGVUb3AiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgogCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuTG9jYWxTZXJ2aWNlQmluZGluZyIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9sb2NhbF9zZXJ2aWNlX2JpbmRpbmciPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLkxvY2FsU2VydmljZSRCaW5kaW5nIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfbG9jYWxfc2VydmljZV9iaW5kaW5nIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KQEAgLTI0MywxNCArMjQ3LDE3IEBACiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvc2VydmljZT4KIAotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlbW90ZVNlcnZpY2VDb250cm9sbGVyIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3JlbW90ZV9zZXJ2aWNlX2NvbnRyb2xsZXIiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLlJlbW90ZVNlcnZpY2UkQ29udHJvbGxlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3JlbW90ZV9zZXJ2aWNlX2NvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXVuY2hNb2RlPSJzaW5nbGVUb3AiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgogCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuUmVtb3RlU2VydmljZUJpbmRpbmciIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfcmVtb3RlX3NlcnZpY2VfYmluZGluZyI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuUmVtb3RlU2VydmljZSRCaW5kaW5nIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYWN0aXZpdHlfcmVtb3RlX3NlcnZpY2VfYmluZGluZyI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CkBAIC0yNTksNyArMjY2LDkgQEAKIAogICAgICAgICA8c2VydmljZSBhbmRyb2lkOm5hbWU9Ii5hcHAuU2VydmljZVN0YXJ0QXJndW1lbnRzIiAvPgogCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuU2VydmljZVN0YXJ0QXJndW1lbnRzQ29udHJvbGxlciIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmFwcC5TZXJ2aWNlU3RhcnRBcmd1bWVudHMkQ29udHJvbGxlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3NlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXVuY2hNb2RlPSJzaW5nbGVUb3AiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgpAQCAtMjY3LDggKzI3NiwxMCBAQAogICAgICAgICA8L2FjdGl2aXR5PgogCiAgICAgICAgIDxzZXJ2aWNlIGFuZHJvaWQ6bmFtZT0iLmFwcC5Gb3JlZ3JvdW5kU2VydmljZSIgLz4KLSAgICAgICAgCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X2ZvcmVncm91bmRfc2VydmljZV9jb250cm9sbGVyIj4KKworICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuYXBwLkZvcmVncm91bmRTZXJ2aWNlJENvbnRyb2xsZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhdW5jaE1vZGU9InNpbmdsZVRvcCI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CkBAIC0zOTIsMTEgKzQwMywxMSBAQAogICAgICAgICAgICAgPCEtLSB3aGVuZXZlciB0aGUgdXNlciBpbnZva2VzIHNlYXJjaCB3aGlsZSBpbiB0aGlzIEFjdGl2aXR5LiAtLT4KICAgICAgICAgICAgIDxtZXRhLWRhdGEgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5kZWZhdWx0X3NlYXJjaGFibGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmFsdWU9Ii5hcHAuU2VhcmNoUXVlcnlSZXN1bHRzIiAvPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwhLS0gVGhpcyBpcyBub3QgdGhlIHR5cGljYWwgd2F5IHRvIGRlZmluZSBhbmRyb2lkLmFwcC5kZWZhdWx0X3NlYXJjaGFibGUsIC0tPgogICAgICAgICAgICAgPCEtLSBhbmQgd2Ugc2hvdyBpdCBoZXJlIG9ubHkgYmVjYXVzZSB3ZSB3aXNoIHRvIGNvbmZpbmUgdGhlIHNlYXJjaCBkZW1vIHRvIHRoaXMgLS0+CiAgICAgICAgICAgICA8IS0tIHNlY3Rpb24gb2YgdGhlIEFwaURlbW9zIGFwcGxpY2F0aW9uLiAtLT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8IS0tIEZvciB0eXBpY2FsIGFwcGxpY2F0aW9ucywgaXQncyBzaW1wbGVyIHRvIGRlZmluZSBhbmRyb2lkLmFwcC5kZWZhdWx0X3NlYXJjaGFibGUgLS0+CiAgICAgICAgICAgICA8IS0tIGp1c3Qgb25jZSwgYXQgdGhlIGFwcGxpY2F0aW9uIGxldmVsLCB3aGVyZSBpdCBzZXJ2ZXMgYXMgYSBkZWZhdWx0IGZvciBhbGwgb2YgLS0+CiAgICAgICAgICAgICA8IS0tIHRoZSBBY3Rpdml0aWVzIGluIHlvdXIgcGFja2FnZS4gLS0+CkBAIC00MTEsMjQgKzQyMiwyNCBAQAogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8IS0tIFRoaXMgaW50ZW50LWZpbHRlciBpZGVudGlmaWVzIHRoaXMgYWN0aXZpdHkgYXMgInNlYXJjaGFibGUiIC0tPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uU0VBUkNIIiAvPgogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkRFRkFVTFQiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPCEtLSBUaGlzIG1ldGFkYXRhIGVudHJ5IHByb3ZpZGVzIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzIGZvciBzZWFyY2hlcyAtLT4KICAgICAgICAgICAgIDwhLS0gdGhhdCBhcmUgaGFuZGxlZCBieSB0aGlzIGFjdGl2aXR5LiAtLT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuc2VhcmNoYWJsZSIKICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpyZXNvdXJjZT0iQHhtbC9zZWFyY2hhYmxlIiAvPgogICAgICAgICA8L2FjdGl2aXR5PgogCiAgICAgICAgIDwhLS0gVGhpcyBwcm92aWRlciBkZWNsYXJhdGlvbiBpbmZvcm1zIHRoZSBTZWFyY2ggTWFuYWdlciB0aGF0IHlvdSBoYXZlIGEgcHJvdmlkZXIgb2YgLS0+CiAgICAgICAgIDwhLS0gU2VhcmNoIHN1Z2dlc3Rpb25zLCBhbmQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGFjY2VzcyBpdC4gLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxwcm92aWRlciBhbmRyb2lkOm5hbWU9Ii5hcHAuU2VhcmNoU3VnZ2VzdGlvblNhbXBsZVByb3ZpZGVyIgogICAgICAgICAgICAgICAgICAgYW5kcm9pZDphdXRob3JpdGllcz0iY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlN1Z2dlc3Rpb25Qcm92aWRlciIgLz4KIApAQCAtNDM2LDEyICs0NDcsMTIgQEAKIAogICAgICAgICA8IS0tIFRoaXMgc2VjdGlvbiBvZiBzYW1wbGUgY29kZSBzaG93cyBob3cgeW91ciBhcHBsaWNhdGlvbiBjYW4gYWRkIHNob3J0Y3V0cyB0byAtLT4KICAgICAgICAgPCEtLSB0aGUgbGF1bmNoZXIgKGhvbWUgc2NyZWVuKS4gIFNob3J0Y3V0cyBoYXZlIGEgdGhyZWUgc3RlcCBsaWZlIGN5Y2xlLiAtLT4KLSAgICAgICAgCisKICAgICAgICAgPCEtLSAxLiAgWW91ciBhcHBsaWNhdGlvbiBvZmZlcnMgdG8gcHJvdmlkZSBzaG9ydGN1dHMgdG8gdGhlIGxhdW5jaGVyLiAgV2hlbiAtLT4KICAgICAgICAgPCEtLSAgICAgdGhlIHVzZXIgaW5zdGFsbHMgYSBzaG9ydGN1dCwgYW4gYWN0aXZpdHkgd2l0aGluIHlvdXIgYXBwbGljYXRpb24gLS0+CiAgICAgICAgIDwhLS0gICAgIGdlbmVyYXRlcyB0aGUgYWN0dWFsIHNob3J0Y3V0IGFuZCByZXR1cm5zIGl0IHRvIHRoZSBsYXVuY2hlciwgd2hlcmUgaXQgLS0+CiAgICAgICAgIDwhLS0gICAgIGlzIHNob3duIHRvIHRoZSB1c2VyIGFzIGFuIGljb24uIC0tPgotICAgICAgICAKKwogICAgICAgICA8IS0tIDIuICBBbnkgdGltZSB0aGUgdXNlciBjbGlja3Mgb24gYW4gaW5zdGFsbGVkIHNob3J0Y3V0LCBhbiBpbnRlbnQgaXMgc2VudC4gLS0+CiAgICAgICAgIDwhLS0gICAgIFR5cGljYWxseSB0aGlzIHdvdWxkIHRoZW4gYmUgaGFuZGxlZCBhcyBuZWNlc3NhcnkgYnkgYW4gYWN0aXZpdHkgd2l0aGluIC0tPgogICAgICAgICA8IS0tICAgICB5b3VyIGFwcGxpY2F0aW9uLiAtLT4KQEAgLTUzMyw2ICs1NDQsMjggQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAorICAgICAgICA8IS0tIERldmljZSBBZG1pbiBTYW1wbGVzIC0tPgorCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5hcHAuRGV2aWNlQWRtaW5TYW1wbGUkQ29udHJvbGxlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3NhbXBsZV9kZXZpY2VfYWRtaW4iPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorCis8IS0tIEJFR0lOX0lOQ0xVREUoZGV2aWNlX2FkbWluX2RlY2xhcmF0aW9uKSAtLT4KKyAgICAgICAgPHJlY2VpdmVyIGFuZHJvaWQ6bmFtZT0iLmFwcC5EZXZpY2VBZG1pblNhbXBsZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3NhbXBsZV9kZXZpY2VfYWRtaW4iCisgICAgICAgICAgICAgICAgYW5kcm9pZDpkZXNjcmlwdGlvbj0iQHN0cmluZy9zYW1wbGVfZGV2aWNlX2FkbWluX2Rlc2NyaXB0aW9uIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGVybWlzc2lvbj0iYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfREVWSUNFX0FETUlOIj4KKyAgICAgICAgICAgIDxtZXRhLWRhdGEgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5kZXZpY2VfYWRtaW4iCisgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6cmVzb3VyY2U9IkB4bWwvZGV2aWNlX2FkbWluX3NhbXBsZSIgLz4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5hY3Rpb24uREVWSUNFX0FETUlOX0VOQUJMRUQiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvcmVjZWl2ZXI+Cis8IS0tIEVORF9JTkNMVURFKGRldmljZV9hZG1pbl9kZWNsYXJhdGlvbikgLS0+CiAKICAgICAgICAgPCEtLSBWb2ljZSBSZWNvZ25pdGlvbiBTYW1wbGVzIC0tPgogCkBAIC01NTYsNiArNTg5LDE0IEBACiAgICAgICAgIDwhLS0gICAgICAgIENPTlRFTlQgUEFDS0FHRSBTQU1QTEVTICAgICAgICAtLT4KICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgogCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5jb250ZW50LkV4dGVybmFsU3RvcmFnZSIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hY3Rpdml0eV9leHRlcm5hbF9zdG9yYWdlIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5FTUJFRCIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuY29udGVudC5TdHlsZWRUZXh0IiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FjdGl2aXR5X3N0eWxlZF90ZXh0Ij4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KQEAgLTEzOTYsNiArMTQzNywzNyBAQAogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgogCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5ncmFwaGljcy5Db21wcmVzc2VkVGV4dHVyZUFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9Db21wcmVzc2VkIFRleHR1cmUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTm9UaXRsZUJhciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtleWJvYXJkSGlkZGVuIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuQ3ViZU1hcEFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9DdWJlIE1hcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5Ob1RpdGxlQmFyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29uZmlnQ2hhbmdlcz0ib3JpZW50YXRpb258a2V5Ym9hcmRIaWRkZW4iPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorCisKKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLkZyYW1lQnVmZmVyT2JqZWN0QWN0aXZpdHkiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvT3BlbkdMIEVTL0ZyYW1lIEJ1ZmZlciBPYmplY3QiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTm9UaXRsZUJhciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtleWJvYXJkSGlkZGVuIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuR0xTdXJmYWNlVmlld0FjdGl2aXR5IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9HTFN1cmZhY2VWaWV3IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCkBAIC0xNDA2LDYgKzE0NzgsMjUgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuR0xFUzIwQWN0aXZpdHkiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvT3BlbkdMIEVTL09wZW5HTCBFUyAyLjAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTm9UaXRsZUJhciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtleWJvYXJkSGlkZGVuIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKworICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuTWF0cml4UGFsZXR0ZUFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkdyYXBoaWNzL09wZW5HTCBFUy9NYXRyaXggUGFsZXR0ZSBTa2lubmluZyIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtleWJvYXJkSGlkZGVuIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuVHJhbnNsdWNlbnRHTFN1cmZhY2VWaWV3QWN0aXZpdHkiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvT3BlbkdMIEVTL1RyYW5zbHVjZW50IEdMU3VyZmFjZVZpZXciCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQHN0eWxlL1RoZW1lLlRyYW5zbHVjZW50IgpAQCAtMTQxNSw3ICsxNTA2LDcgQEAKICAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5TQU1QTEVfQ09ERSIgLz4KICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLmdyYXBoaWNzLlRyaWFuZ2xlQWN0aXZpdHkiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvT3BlbkdMIEVTL1RleHR1cmVkIFRyaWFuZ2xlIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCkBAIC0xNDI1LDcgKzE1MTYsNyBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3Muc3ByaXRldGV4dC5TcHJpdGVUZXh0QWN0aXZpdHkiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvT3BlbkdMIEVTL1Nwcml0ZSBUZXh0IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCkBAIC0xNDM1LDcgKzE1MjYsNyBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuVG91Y2hSb3RhdGVBY3Rpdml0eSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcy9PcGVuR0wgRVMvVG91Y2ggUm90YXRlIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk5vVGl0bGVCYXIiCkBAIC0xNDQ1LDcgKzE1MzYsNyBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuUG9seVRvUG9seSIgYW5kcm9pZDpsYWJlbD0iR3JhcGhpY3MvUG9seVRvUG9seSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CkBAIC0xNjc5LDcgKzE3NzAsNyBAQAogICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LlNBTVBMRV9DT0RFIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgogICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICAKKwogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuZ3JhcGhpY3MuUHVyZ2VhYmxlQml0bWFwIiBhbmRyb2lkOmxhYmVsPSJHcmFwaGljcy9QdXJnZWFibGVCaXRtYXAvTm9uUHVyZ2VhYmxlIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KQEAgLTE3NzMsNyArMTg2NCw3IEBACiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuU0FNUExFX0NPREUiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CiAgICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii50ZXh0LkxvZ1RleHRCb3gxIiBhbmRyb2lkOmxhYmVsPSJUZXh0L0xvZ1RleHRCb3giPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvZHJhd2FibGUtaGRwaS9yb2JvdC5wbmcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9kcmF3YWJsZS1oZHBpL3JvYm90LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggM2U0ZmQyMS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9kcmF3YWJsZS1oZHBpL3JvYm90LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hY3Rpdml0eV9hbmltYXRpb24ueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FjdGl2aXR5X2FuaW1hdGlvbi54bWwKaW5kZXggNDQ2ZjczNS4uMjQzMmM5MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FjdGl2aXR5X2FuaW1hdGlvbi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FjdGl2aXR5X2FuaW1hdGlvbi54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FjdGl2aXR5X2FuaW1hdGlvbl9tc2ciLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGFybV9jb250cm9sbGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGFybV9jb250cm9sbGVyLnhtbAppbmRleCA5Y2U0ZDcyLi45N2FkOWY1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxhcm1fY29udHJvbGxlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsYXJtX2NvbnRyb2xsZXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbGFybV9jb250cm9sbGVyIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxhcm1fc2VydmljZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxhcm1fc2VydmljZS54bWwKaW5kZXggZTI0MzY5Yy4uZTdkYWM5ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsYXJtX3NlcnZpY2UueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGFybV9zZXJ2aWNlLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxhcm1fc2VydmljZSIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxlcnRfZGlhbG9nLnhtbAppbmRleCA3NDFiZTMzLi4wMDk3ZTdhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxlcnRfZGlhbG9nLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxlcnRfZGlhbG9nLnhtbApAQCAtMTgsMzQgKzE4LDM0IEBACiAgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLkFsZXJ0RGlhbG9nU2FtcGxlcy5qYXZhLiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL3NjcmVlbiIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvdHdvX2J1dHRvbnMiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxlcnRfZGlhbG9nX3R3b19idXR0b25zIi8+CiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC90d29fYnV0dG9uczIiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxlcnRfZGlhbG9nX3R3b19idXR0b25zMiIvPgogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc2VsZWN0X2J1dHRvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbGVydF9kaWFsb2dfc2VsZWN0X2J1dHRvbiIvPgogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcHJvZ3Jlc3NfYnV0dG9uIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsZXJ0X2RpYWxvZ19wcm9ncmVzc19idXR0b24iLz4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3JhZGlvX2J1dHRvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbGVydF9kaWFsb2dfc2luZ2xlX2Nob2ljZSIvPgogICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvY2hlY2tib3hfYnV0dG9uIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsZXJ0X2RpYWxvZ19tdWx0aV9jaG9pY2UiLz4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NoZWNrYm94X2J1dHRvbjIiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYWxlcnRfZGlhbG9nX211bHRpX2Nob2ljZV9jdXJzb3IiLz4KICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3RleHRfZW50cnlfYnV0dG9uIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FsZXJ0X2RpYWxvZ190ZXh0X2VudHJ5Ii8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CiA8L1Njcm9sbFZpZXc+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxlcnRfZGlhbG9nX3RleHRfZW50cnkueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FsZXJ0X2RpYWxvZ190ZXh0X2VudHJ5LnhtbAppbmRleCBhZGVjMzA1Li4xZjRkMDkzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYWxlcnRfZGlhbG9nX3RleHRfZW50cnkueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbGVydF9kaWFsb2dfdGV4dF9lbnRyeS54bWwKQEAgLTE1LDcgKzE1LDcgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKQEAgLTMyLDcgKzMyLDcgQEAKICAgICA8RWRpdFRleHQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC91c2VybmFtZV9lZGl0IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIyMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luUmlnaHQ9IjIwZGlwIgogICAgICAgICBhbmRyb2lkOnNjcm9sbEhvcml6b250YWxseT0idHJ1ZSIKQEAgLTU0LDcgKzU0LDcgQEAKICAgICA8RWRpdFRleHQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wYXNzd29yZF9lZGl0IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5MZWZ0PSIyMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luUmlnaHQ9IjIwZGlwIgogICAgICAgICBhbmRyb2lkOnNjcm9sbEhvcml6b250YWxseT0idHJ1ZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzEueG1sCmluZGV4IGNkMjVlMDQuLjgzODBmYzQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8xLnhtbApAQCAtMTcsMTggKzE3LDE4IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRpcCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgCiAgICAgPFRleHRWaWV3IAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjEwZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYW5pbWF0aW9uXzFfaW5zdHJ1Y3Rpb25zIgogICAgIC8+CiAgICAgCiAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvcHciCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8yLnhtbAppbmRleCA5ZjM3OTIwLi5mNzI3NTNlIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMi54bWwKQEAgLTE3LDM0ICsxNywzNCBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxWaWV3RmxpcHBlciBhbmRyb2lkOmlkPSJAK2lkL2ZsaXBwZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6ZmxpcEludGVydmFsPSIyMDAwIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMjBkaXAiID4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIyNnNwIgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FuaW1hdGlvbl8yX3RleHRfMSIvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjI2c3AiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYW5pbWF0aW9uXzJfdGV4dF8yIi8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMjZzcCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbmltYXRpb25fMl90ZXh0XzMiLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIyNnNwIgpAQCAtNTIsMTQgKzUyLDE0IEBACiAgICAgPC9WaWV3RmxpcHBlcj4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjVkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hbmltYXRpb25fMl9pbnN0cnVjdGlvbnMiCiAgICAgLz4KIAogICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvc3Bpbm5lciIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbl8zLnhtbAppbmRleCA0ZDE0NzRjLi4wZGNmM2ZhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uXzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25fMy54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpjbGlwVG9QYWRkaW5nPSJmYWxzZSI+CiAKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FuaW1hdGlvbl8zX3RleHQiLz4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjVkaXAiCkBAIC0zNyw3ICszNyw3IEBACiAKICAgICA8U3Bpbm5lcgogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3NwaW5uZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbnNfbWFpbl9zY3JlZW4ueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FuaW1hdGlvbnNfbWFpbl9zY3JlZW4ueG1sCmluZGV4IGVlOWUzMzkuLjg4YWJkZDAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hbmltYXRpb25zX21haW5fc2NyZWVuLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYW5pbWF0aW9uc19tYWluX3NjcmVlbi54bWwKQEAgLTE2LDIxICsxNiwyMSBAQAogCiA8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGFpbmVyIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxMaXN0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgogICAgICAgICBhbmRyb2lkOnBlcnNpc3RlbnREcmF3aW5nQ2FjaGU9ImFuaW1hdGlvbnxzY3JvbGxpbmciCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0QW5pbWF0aW9uPSJAYW5pbS9sYXlvdXRfYm90dG9tX3RvX3RvcF9zbGlkZSIgLz4KIAogICAgIDxJbWFnZVZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9waWN0dXJlIgogICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iZml0Q2VudGVyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiIC8+CiAKIDwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXBwd2lkZ2V0X2NvbmZpZ3VyZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXBwd2lkZ2V0X2NvbmZpZ3VyZS54bWwKaW5kZXggYzA0MWFkNi4uZDAxOGE3YiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2FwcHdpZGdldF9jb25maWd1cmUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hcHB3aWRnZXRfY29uZmlndXJlLnhtbApAQCAtMTUsMjAgKzE1LDIwIEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hcHB3aWRnZXRfY29uZmlndXJlX2luc3RydWN0aW9ucyIKICAgICAvPgogCiAgICAgPEVkaXRUZXh0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYXBwd2lkZ2V0X3ByZWZpeCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8xLnhtbAppbmRleCAzYzQxOTI2Li45NWFiMWZkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfMS54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3CkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2F1dG9jb21wbGV0ZV8xX2NvdW50cnkiIC8+CiAKICAgICAgICAgPEF1dG9Db21wbGV0ZVRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8yLnhtbAppbmRleCA2ZDRlZTc1Li40MGJkMzRjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfMi54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImJvdHRvbSI+CiAKICAgICA8QnV0dG9uCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2F1dG9jb21wbGV0ZV8yX2NvdW50cnkiIC8+CiAKICAgICAgICAgPEF1dG9Db21wbGV0ZVRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV8zLnhtbAppbmRleCBlOTc1MzVhLi5iMWUzNDRmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfMy54bWwKQEAgLTE1LDEyICsxNSwxMiBAQAogLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8QnV0dG9uCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICAgICAgPFRleHRWaWV3CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXV0b2NvbXBsZXRlXzNfY291bnRyeSIgLz4KIAogICAgICAgICAgICAgPEF1dG9Db21wbGV0ZVRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KIAogICAgICAgICA8L0xpbmVhckxheW91dD4KQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgICAgICA8VGV4dFZpZXcKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hdXRvY29tcGxldGVfM19jb3VudHJ5IiAvPgogCiAgICAgICAgICAgICA8QXV0b0NvbXBsZXRlVGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9lZGl0MiIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KIAogICAgICAgICA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzQueG1sCmluZGV4IDk3ZTVlYjkuLjg4YmU4NzAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV80LnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8VGV4dFZpZXcKQEAgLTI2LDcgKzI2LDcgQEAKIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRleHRWaWV3CkBAIC0zNiw3ICszNiw3IEBACiAKICAgICAgICAgPEF1dG9Db21wbGV0ZVRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZWRpdCIKICAgICAgICAgICAgIGFuZHJvaWQ6Y29tcGxldGlvblRocmVzaG9sZD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogCiAgICAgPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV81LnhtbAppbmRleCAzNGY2OGM2Li5jZGNlNTVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNS54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3CkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICA8QXV0b0NvbXBsZXRlVGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9lZGl0IgogICAgICAgICAgICAgYW5kcm9pZDpjb21wbGV0aW9uVGhyZXNob2xkPSIxIgogICAgICAgICAgICAgYW5kcm9pZDpjb21wbGV0aW9uSGludD0iQHN0cmluZy9hdXRvY29tcGxldGVfNV9oaW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAKICAgICA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYXV0b2NvbXBsZXRlXzYueG1sCmluZGV4IDI0ZmJkYTEuLmM4MDcwNmIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9hdXRvY29tcGxldGVfNi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2F1dG9jb21wbGV0ZV82LnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8VGV4dFZpZXcKQEAgLTI2LDcgKzI2LDcgQEAKIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRleHRWaWV3CkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYXV0b2NvbXBsZXRlXzdfY291bnRyeSIgLz4KIAogICAgICAgICA8TXVsdGlBdXRvQ29tcGxldGVUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2VkaXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KIAogICAgIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzEueG1sCmluZGV4IDBmMWM5ZjYuLjU1OTEyZWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMS54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8VGV4dFZpZXcKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8yLnhtbAppbmRleCA4ZTMyM2I2Li5kNmJkYzk5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzIueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfMy54bWwKaW5kZXggYzI1MTcwMy4uMGZjMTBhZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV8zLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTI2LDcgKzI2LDcgQEAKIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEuMCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIj4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzQueG1sCmluZGV4IDVmYWE5ZGEuLmM2ZDA1NWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV80LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNC54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV82LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV82LnhtbAppbmRleCA1NDE4YWZiLi44OGUxNDA0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzYueG1sCkBAIC0xNSwxMiArMTUsMTIgQEAKIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2FuY2hvciIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMjBzcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2Jhc2VsaW5lXzZfbXVsdGlfbGluZSIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzcueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lXzcueG1sCmluZGV4IDJkYzk0MzkuLjU1YWI1OWIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV83LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfNy54bWwKQEAgLTE1LDggKzE1LDggQEAKIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2FuY2hvciIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzEueG1sCmluZGV4IGI5NDAyMzkuLjE2MGM3MzggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8xLnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMi54bWwKaW5kZXggNWJjODM2MS4uNGJiNzVjMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzIueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Jhc2VsaW5lX25lc3RlZF8zLnhtbAppbmRleCBjMDFjOTQ3Li5lZGE0N2EyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvYmFzZWxpbmVfbmVzdGVkXzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9iYXNlbGluZV9uZXN0ZWRfMy54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9idXR0b25zXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2J1dHRvbnNfMS54bWwKaW5kZXggZGM2NTdlZi4uYzI1YzFiNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2J1dHRvbnNfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2J1dHRvbnNfMS54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPCEtLSBMb3RzIG9mIGJ1dHRvbnMgPSBuZWVkIHNjcm9sbGluZyAtLT4KIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Nocm9ub21ldGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jaHJvbm9tZXRlci54bWwKaW5kZXggYjM4YzJiNi4uNjNkYzY3ZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2Nocm9ub21ldGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY2hyb25vbWV0ZXIueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPENocm9ub21ldGVyIGFuZHJvaWQ6aWQ9IkAraWQvY2hyb25vbWV0ZXIiCiAgICAgICAgIGFuZHJvaWQ6Zm9ybWF0PSJAc3RyaW5nL2Nocm9ub21ldGVyX2luaXRpYWxfZm9ybWF0IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRhY3RzX2ZpbHRlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY29udGFjdHNfZmlsdGVyLnhtbAppbmRleCBlOGQxNjE1Li5jMTIwMTUxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY29udGFjdHNfZmlsdGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY29udGFjdHNfZmlsdGVyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29udGFjdHNfZmlsdGVyIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY29udHJvbHNfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY29udHJvbHNfMS54bWwKaW5kZXggMjk2NThkNy4uMWFhZWYzZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2NvbnRyb2xzXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jb250cm9sc18xLnhtbApAQCAtMTYsMTIgKzE2LDEyIEBACiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAKICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2J1dHRvbiIKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAgICAgCiAgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2VkaXQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KICAgICAgICAgICAgIAogICAgICAgICA8Q2hlY2tCb3ggYW5kcm9pZDppZD0iQCtpZC9jaGVjazEiCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29udHJvbHNfMV9jaGVja2JveF8yIiAvPgogICAgIAogICAgICAgICA8UmFkaW9Hcm91cAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIApAQCAtNzcsMTMgKzc3LDEzIEBACiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KICAgICAgICAgICAgICAKICAgICAgICAgPFNwaW5uZXIgYW5kcm9pZDppZD0iQCtpZC9zcGlubmVyMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9InRydWUiCiAgICAgICAgIC8+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjVkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGV4dENvbG9yUHJpbWFyeSIKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgLz4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iNWRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90ZXh0Q29sb3JTZWNvbmRhcnkiCkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgLz4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iNWRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy90ZXh0Q29sb3JUZXJ0aWFyeSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fZGlhbG9nX2FjdGl2aXR5LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fZGlhbG9nX2FjdGl2aXR5LnhtbAppbmRleCBkNzA2MDE4Li45NzFhYzBkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX2RpYWxvZ19hY3Rpdml0eS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV9kaWFsb2dfYWN0aXZpdHkueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAKIDwhLS0gVGhpcyBzY3JlZW4gY29uc2lzdHMgb2YgYSBzaW5nbGUgdGV4dCBmaWVsZCB0aGF0IGRpc3BsYXlzIHNvbWUgdGV4dC4gLS0+CiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfGNlbnRlcl9ob3Jpem9udGFsIgogICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jdXN0b21fZGlhbG9nX2FjdGl2aXR5X3RleHQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZS54bWwKaW5kZXggZGJlOGNiNi4uOGNkYzU4NCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZS54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgCiAgICAgYW5kcm9pZDppZD0iQCtpZC9zY3JlZW4iCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KLSAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgPExpbmVhckxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6YmFzZWxpbmVBbGlnbmVkPSJmYWxzZSI+CiAgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2xlZnRfdGV4dF9lZGl0IgpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2N1c3RvbV90aXRsZV9sZWZ0X2J1dHRvbiIvPgogICAgIDwvTGluZWFyTGF5b3V0PgotICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpiYXNlbGluZUFsaWduZWQ9ImZhbHNlIj4KICAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvcmlnaHRfdGV4dF9lZGl0IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZV8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdGl0bGVfMS54bWwKaW5kZXggZjc5NDMzMi4uODEyZmJiMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZV8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX3RpdGxlXzEueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLkN1c3RvbVRpdGxlLmphdmEuIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL3NjcmVlbiIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL2xlZnRfdGV4dCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdmlld18xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9jdXN0b21fdmlld18xLnhtbAppbmRleCBjYWM5MWFkLi5jYjhlMGY2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvY3VzdG9tX3ZpZXdfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2N1c3RvbV92aWV3XzEueG1sCkBAIC0xOSwyNCArMTksMjQgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICB4bWxuczphcHA9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzIgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgCiAgICAgPGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy52aWV3LkxhYmVsVmlldwogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvcmVkIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKICAgICAgICAgICAgIGFwcDp0ZXh0PSJSZWQiLz4KICAgICAKICAgICA8Y29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLnZpZXcuTGFiZWxWaWV3CiAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKICAgICAgICAgICAgIGFwcDp0ZXh0PSJCbHVlIiBhcHA6dGV4dFNpemU9IjIwZHAiLz4KICAgICAKICAgICA8Y29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLnZpZXcuTGFiZWxWaWV3CiAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCiAgICAgICAgICAgICBhcHA6dGV4dD0iR3JlZW4iIGFwcDp0ZXh0Q29sb3I9IiNmZmZmZmZmZiIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2RhdGVfd2lkZ2V0c19leGFtcGxlXzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2RhdGVfd2lkZ2V0c19leGFtcGxlXzIueG1sCmluZGV4IDUwYjE4MmQuLjBjOTk1MjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kYXRlX3dpZGdldHNfZXhhbXBsZV8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGF0ZV93aWRnZXRzX2V4YW1wbGVfMi54bWwKQEAgLTIyLDcgKzIyLDcgQEAKIAogICAgIDxUaW1lUGlja2VyIGFuZHJvaWQ6aWQ9IkAraWQvdGltZVBpY2tlciIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIvPgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50Ii8+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9kYXRlRGlzcGxheSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGV2aWNlX2FkbWluX3NhbXBsZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGV2aWNlX2FkbWluX3NhbXBsZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNGRjOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kZXZpY2VfYWRtaW5fc2FtcGxlLnhtbApAQCAtMCwwICsxLDEyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhLS0gRGVtb25zdHJhdGVzIGltcGxlbWVudGF0aW9uIG9mIGEgRGV2aWNlQWRtaW4uIC0tPgorCis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgorICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgorCisgICAgPFRleHRWaWV3CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKKyAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NhbXBsZV9kZXZpY2VfYWRtaW5fc3VtbWFyeSIvPgorCisJPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIiBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKwkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCisJICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9lbmFibGUiCisJICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZW5hYmxlX2FkbWluIj4KKwkgICAgICAgIDxyZXF1ZXN0Rm9jdXMgLz4KKwkgICAgPC9CdXR0b24+CisJCisJICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9kaXNhYmxlIgorCSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCSAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2Rpc2FibGVfYWRtaW4iPgorCSAgICA8L0J1dHRvbj4KKwkgICAgCisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKwkgICAgPFNwaW5uZXIgYW5kcm9pZDppZD0iQCtpZC9wYXNzd29yZF9xdWFsaXR5IgorCSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorCSAgICAgICAgYW5kcm9pZDpkcmF3U2VsZWN0b3JPblRvcD0idHJ1ZSIKKwkgICAgICAgIGFuZHJvaWQ6cHJvbXB0PSJAc3RyaW5nL3Bhc3N3b3JkX3F1YWxpdHkiPgorCSAgICA8L1NwaW5uZXI+CisgICAgCisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3Bhc3N3b3JkX2xlbmd0aCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6aGludD0iQHN0cmluZy9wYXNzd29yZF9sZW5ndGhfaGludCIKKyAgICAgICAgICAgIGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXIiPgorICAgICAgICA8L0VkaXRUZXh0PgorICAgICAgICAgICAgCisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKyAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc2V0X3Bhc3N3b3JkIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisgICAgICAgIGFuZHJvaWRfbGF5b3V0X2dyYXZpdHk9ImVhc3R8Y2VudGVyX3ZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2V0X3Bhc3N3b3JkIj4KKyAgICA8L0J1dHRvbj4KKyAgICAgICAgCisgICAgPExpbmVhckxheW91dCBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIiBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3Bhc3N3b3JkIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICAgICAgYW5kcm9pZDpoaW50PSJAc3RyaW5nL3Bhc3N3b3JkX2hpbnQiCisgICAgICAgICAgICBhbmRyb2lkOmZyZWV6ZXNUZXh0PSJ0cnVlIj4KKyAgICAgICAgPC9FZGl0VGV4dD4KKyAgICAgICAgICAgIAorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcmVzZXRfcGFzc3dvcmQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVzZXRfcGFzc3dvcmQiPgorICAgICAgICA8L0J1dHRvbj4KKyAgICAgICAgCisgICAgPC9MaW5lYXJMYXlvdXQ+CisgICAgICAgIAorICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9tYXhfZmFpbGVkX3B3IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpoaW50PSJAc3RyaW5nL21heF9mYWlsZWRfcHdfaGludCIKKyAgICAgICAgICAgIGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXIiPgorICAgICAgICA8L0VkaXRUZXh0PgorICAgICAgICAgICAgCisgICAgPC9MaW5lYXJMYXlvdXQ+CisgICAgICAgIAorICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvZm9yY2VfbG9jayIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9mb3JjZV9sb2NrIj4KKyAgICAgICAgPC9CdXR0b24+CisgICAgICAgIAorICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvd2lwZV9kYXRhIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3dpcGVfZGF0YSI+CisgICAgICAgIDwvQnV0dG9uPgorICAgICAgICAKKyAgICA8L0xpbmVhckxheW91dD4KKyAgICAKKzwvTGluZWFyTGF5b3V0PgorCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZGlhbG9nX2FjdGl2aXR5LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kaWFsb2dfYWN0aXZpdHkueG1sCmluZGV4IDg4YzRiMDcuLjJiMjdkOWEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kaWFsb2dfYWN0aXZpdHkueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9kaWFsb2dfYWN0aXZpdHkueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAKIDwhLS0gVGhpcyBzY3JlZW4gY29uc2lzdHMgb2YgYSBzaW5nbGUgdGV4dCBmaWVsZCB0aGF0IGRpc3BsYXlzIHNvbWUgdGV4dC4gLS0+CiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfGNlbnRlcl9ob3Jpem9udGFsIgogICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9kaWFsb2dfYWN0aXZpdHlfdGV4dCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2V4dGVybmFsX3N0b3JhZ2UueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2V4dGVybmFsX3N0b3JhZ2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTA1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZXh0ZXJuYWxfc3RvcmFnZS54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6c2Nyb2xsYmFycz0ibm9uZSI+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbGF5b3V0IgorICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgIDwvTGluZWFyTGF5b3V0PgorPC9TY3JvbGxWaWV3PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2V4dGVybmFsX3N0b3JhZ2VfaXRlbS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZXh0ZXJuYWxfc3RvcmFnZV9pdGVtLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmEwNThiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2V4dGVybmFsX3N0b3JhZ2VfaXRlbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIAorICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9sYWJlbCIgc3R5bGU9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW1JbnZlcnNlIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCisgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpjb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZSIKKyAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjODg4IiAvPgorICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3BhdGgiIHN0eWxlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlU21hbGwiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKKyAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIiAvPgorICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorICAgICAgICA8VmlldworICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgorICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9jcmVhdGUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY3JlYXRlIiAvPgorICAgICAgICA8VmlldworICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgorICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CisgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9kZWxldGUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZGVsZXRlIiAvPgorICAgICAgICA8VmlldworICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKKyAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgorICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+Cis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18xLnhtbAppbmRleCAxMmFmMGE5Li45NmFiNDY3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzEueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3R4dFN0YXR1cyIKQEAgLTI3LDEyICsyNywxMiBAQAogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Jzc0xpc3RWaWV3IgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM3NzAwQ0MwMCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgLz4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgLz4KIAogICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC9yc3NXZWJWaWV3IgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM3N0NDMDAwMCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI1MGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0iZmFsc2UiIC8+CiAKICAgICA8QnV0dG9uIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzIueG1sCmluZGV4IDYzNTFkZTIuLjA3MjBkNWIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMi54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAKICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvbGVmdEJ1dHRvbiIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb2N1c18zLnhtbAppbmRleCBmMDhjM2Y4Li5mODcxNjk1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9jdXNfMy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvY3VzXzMueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAgICAgIGZvY3VzIGJlaGF2aW9yIHRoYXQgd291bGQgYmUgZGlmZmljdWx0IHdpdGggZGVmYXVsdCBmb2N1cyBjYWxjdWxhdGlvbiBhbGcuLS0+CiAKIDxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZGlwIj4KIAogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC90b3AiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yZWdyb3VuZF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcmVncm91bmRfc2VydmljZV9jb250cm9sbGVyLnhtbAppbmRleCA0NDkzMjAwLi4yMGNlMTAzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yZWdyb3VuZF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlci54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2ZvcmVncm91bmRfc2VydmljZV9jb250cm9sbGVyIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yd2FyZF90YXJnZXQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcndhcmRfdGFyZ2V0LnhtbAppbmRleCA2ZDU2YWUyLi5iMTIyOTU1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yd2FyZF90YXJnZXQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb3J3YXJkX3RhcmdldC54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9mb3J3YXJkX3RhcmdldCIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yd2FyZGluZy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZm9yd2FyZGluZy54bWwKaW5kZXggYTg2MGQ4OC4uNmYwZDhhOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ZvcndhcmRpbmcueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9mb3J3YXJkaW5nLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZm9yd2FyZGluZyIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ2FsbGVyeV8xLnhtbAppbmRleCA0MGYzNDQzLi45YjljNGJiIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ2FsbGVyeV8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ2FsbGVyeV8xLnhtbApAQCAtMTUsNyArMTUsNyBAQAogLS0+CiAKIDxHYWxsZXJ5IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9nYWxsZXJ5IgotCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogLz4KICAgICAgICAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nYWxsZXJ5XzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMi54bWwKaW5kZXggMzdlNWQxMS4uMTE5MmJiMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dhbGxlcnlfMi54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPEJ1dHRvbgpAQCAtMjgsNyArMjgsNyBAQAogICAgIC8+CiAKICAgICA8R2FsbGVyeSBhbmRyb2lkOmlkPSJAK2lkL2dhbGxlcnkiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIgogICAgICAgICBhbmRyb2lkOnNwYWNpbmc9IjE2ZHAiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ29vZ2xlX2xvZ2luLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nb29nbGVfbG9naW4ueG1sCmluZGV4IDlhYjJmNjIuLjhmMWZkOGEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nb29nbGVfbG9naW4ueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9nb29nbGVfbG9naW4ueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uYW5kcm9pZC5zZGsuY29udGVudC5TdHlsZWRUZXh0IC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDxCdXR0b24KQEAgLTQ2LDE0ICs0NiwxNCBAQAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3VzZXJuYW1lX2xhYmVsIgogICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9nb29nbGVsb2dpbl91c2VyIi8+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC91c2VybmFtZSIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvZ29vZ2xlX2xvZ2luX3VzZXJuYW1lX3RleHQiLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2dyaWRfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8xLnhtbAppbmRleCBjYTYwMzIwLi43NjVkNDRiIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8xLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxHcmlkVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6aWQ9IkAraWQvbXlHcmlkIgotCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0JYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKwlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKwlhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZHAiCiAgICAgYW5kcm9pZDp2ZXJ0aWNhbFNwYWNpbmc9IjEwZHAiCiAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvZ3JpZF8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ncmlkXzIueG1sCmluZGV4IDQ2NDBhYjYuLmVhZWE2NTggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ncmlkXzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ncmlkXzIueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxHcmlkVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6aWQ9IkAraWQvbXlHcmlkIgotCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0JYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKwlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKwlhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZHAiCiAgICAgYW5kcm9pZDp2ZXJ0aWNhbFNwYWNpbmc9IjEwZHAiCiAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaGVsbG9fd29ybGQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2hlbGxvX3dvcmxkLnhtbAppbmRleCAzNjRhODNhLi4wMjgyMDc2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaGVsbG9fd29ybGQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9oZWxsb193b3JsZC54bWwKQEAgLTIwLDYgKzIwLDYgQEAKIDwhLS0gVGhpcyBzY3JlZW4gY29uc2lzdHMgb2YgYSBzaW5nbGUgdGV4dCBmaWVsZCB0aGF0CiAgICAgIGRpc3BsYXlzIG91ciAiSGVsbG8sIFdvcmxkISIgdGV4dC4gLS0+CiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfGNlbnRlcl9ob3Jpem9udGFsIgogICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9oZWxsb193b3JsZCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX2J1dHRvbl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV9idXR0b25fMS54bWwKaW5kZXggMTE0MTYzZS4uNDYzZTcwNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX2J1dHRvbl8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW1hZ2VfYnV0dG9uXzEueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8SW1hZ2VCdXR0b24KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV9zd2l0Y2hlcl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV9zd2l0Y2hlcl8xLnhtbAppbmRleCBkOWNkMDgwLi4wZmRmM2Y5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW1hZ2Vfc3dpdGNoZXJfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX3N3aXRjaGVyXzEueG1sCkBAIC0xNSwxOSArMTUsMTkgQEAKIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPiAKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+IAogICAgIAogICAgIDxJbWFnZVN3aXRjaGVyIGFuZHJvaWQ6aWQ9IkAraWQvc3dpdGNoZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50VG9wPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudExlZnQ9InRydWUiCiAgICAgLz4KICAgICAKICAgICA8R2FsbGVyeSBhbmRyb2lkOmlkPSJAK2lkL2dhbGxlcnkiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzU1MDAwMDAwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNjBkcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRCb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbWFnZV92aWV3XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX3ZpZXdfMS54bWwKaW5kZXggMzZiOTI2ZC4uYzVlMjI0MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX3ZpZXdfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ltYWdlX3ZpZXdfMS54bWwKQEAgLTE1LDE4ICsxNSwxOCBAQAogLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgICAgIAogICAgICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgZm91ciBleGFtcGxlcyB1c2UgYSBsYXJnZSBpbWFnZSAtLT4KICAgICAgICAgPCEtLSAxLiBOb24tc2NhbGVkIHZpZXcsIGZvciByZWZlcmVuY2UgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X2xhcmdlX25vcm1hbCIvPgpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgIDwhLS0gMi4gTGltaXQgdG8gYXQgbW9zdCA1MHg1MCAtLT4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjEwZGlwIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2ltYWdlX3ZpZXdfbGFyZ2VfYXRfbW9zdCIvPgpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgICAgPCEtLSAzLiBMaW1pdCB0byBhdCBtb3N0IDcweDcwLCB3aXRoIDEwIHBpeGVscyBvZiBwYWRkaW5nIGFsbCBhcm91bmQgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X2xhcmdlX2F0X21vc3RfcGFkZGVkIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgPCEtLSA0LiBMaW1pdCB0byBleGFjdGx5IDcweDcwLCB3aXRoIDEwIHBpeGVscyBvZiBwYWRkaW5nIGFsbCBhcm91bmQgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X2xhcmdlX2V4YWN0bHlfcGFkZGVkIi8+CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIDwhLS0gUmVwZWF0aW5nIHRoZSBwcmV2aW91cyBmb3VyIGV4YW1wbGVzIHdpdGggc21hbGwgaW1hZ2UgLS0+CiAgICAgICAgIDwhLS0gMS4gTm9uLXNjYWxlZCB2aWV3LCBmb3IgcmVmZXJlbmNlIC0tPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTBkaXAiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW1hZ2Vfdmlld19zbWFsbF9ub3JtYWwiLz4KQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICA8IS0tIDIuIExpbWl0IHRvIGF0IG1vc3QgNTB4NTAgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X3NtYWxsX2F0X21vc3QiLz4KQEAgLTExMSw3ICsxMTEsNyBAQAogCiAgICAgICAgPCEtLSAzLiBMaW1pdCB0byBhdCBtb3N0IDcweDcwLCB3aXRoIDEwIHBpeGVscyBvZiBwYWRkaW5nIGFsbCBhcm91bmQgLS0+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIxMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbWFnZV92aWV3X3NtYWxsX2F0X21vc3RfcGFkZGVkIi8+CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICA8IS0tIDQuIExpbWl0IHRvIGV4YWN0bHkgNzB4NzAsIHdpdGggMTAgcGl4ZWxzIG9mIHBhZGRpbmcgYWxsIGFyb3VuZCAtLT4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjEwZGlwIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2ltYWdlX3ZpZXdfc21hbGxfZXhhY3RseV9wYWRkZWQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlLnhtbAppbmRleCAwMWVhMDRhLi4zYzBkOTJhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2UueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxCdXR0b24KICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZnkiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9pbmZvLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX2luZm8ueG1sCmluZGV4IDcyM2E0ZGEuLmZlZjI1NTYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX2luZm8ueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX2luZm8ueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAJCTxJbWFnZVZpZXcKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX3BhbmVsLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbmNvbWluZ19tZXNzYWdlX3BhbmVsLnhtbAppbmRleCAzMTIwZTRlLi5iZGQ4MDhlIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV9wYW5lbC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2VfcGFuZWwueG1sCkBAIC0xNSwxMyArMTUsMTMgQEAKIC0tPgogCiA8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvdG9hc3RfZnJhbWUiPgogCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICAgICAgPEltYWdlVmlldwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2luY29taW5nX21lc3NhZ2Vfdmlldy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV92aWV3LnhtbAppbmRleCBiMjg2ZTZlLi5iMmRhZjRlIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV92aWV3LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW5jb21pbmdfbWVzc2FnZV92aWV3LnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjRkaXAiCiAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjRkaXAiCiAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI0ZGlwIgpAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICA+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbnRlbnRzLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9pbnRlbnRzLnhtbAppbmRleCAwMjNlNGU4Li41NTMxMjM1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvaW50ZW50cy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2ludGVudHMueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbnRlbnRzIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF1bmNoZXJfc2hvcnRjdXRzLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXVuY2hlcl9zaG9ydGN1dHMueG1sCmluZGV4IGM4ZmJiMmEuLjFkZWJiZDMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXVuY2hlcl9zaG9ydGN1dHMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXVuY2hlcl9zaG9ydGN1dHMueG1sCkBAIC0xNywxMyArMTcsMTMgQEAKIDwhLS0gVGhpcyBhY3Rpdml0eSBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBsYXVuY2hlciBzaG9ydGN1dHMgLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIAogICAgIDwhLS0gIFNlY3Rpb246IEluZm9ybWF0aW9uIC0tPgogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9tc2dfbGF1bmNoZXJfc2hvcnRjdXRzIiAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl8xLnhtbAppbmRleCAyYjI1NDg1Li5kNzBhNTgzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl8xLnhtbApAQCAtMTcsOCArMTcsOCBAQAogPEdyaWRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9ncmlkIgogICAgIGFuZHJvaWQ6bGF5b3V0QW5pbWF0aW9uPSJAYW5pbS9sYXlvdXRfZ3JpZF9mYWRlIgogCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjEwZHAiCiAgICAgYW5kcm9pZDp2ZXJ0aWNhbFNwYWNpbmc9IjEwZHAiCiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sYXlvdXRfYW5pbWF0aW9uXzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMy54bWwKaW5kZXggMDUxZmE4ZS4uM2RkYWFiNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fMy54bWwKQEAgLTE2LDYgKzE2LDYgQEAKIAogPExpc3RWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRBbmltYXRpb249IkBhbmltL2xheW91dF9ib3R0b21fdG9fdG9wX3NsaWRlIiAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl80LnhtbAppbmRleCA3M2I5OWIwLi4wYjc0ODk4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl80LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl80LnhtbApAQCAtMTcsOCArMTcsOCBAQAogPEdyaWRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9ncmlkIgogICAgIGFuZHJvaWQ6bGF5b3V0QW5pbWF0aW9uPSJAYW5pbS9sYXlvdXRfcmFuZG9tX2ZhZGUiCiAKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkcCIKICAgICBhbmRyb2lkOnZlcnRpY2FsU3BhY2luZz0iMTBkcCIKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl81LnhtbAppbmRleCA2MDJmYjE4Li5mZjM0YjQzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl81LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl81LnhtbApAQCAtMTcsOCArMTcsOCBAQAogPEdyaWRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9ncmlkIgogICAgIGFuZHJvaWQ6bGF5b3V0QW5pbWF0aW9uPSJAYW5pbS9sYXlvdXRfZ3JpZF9pbnZlcnNlX2ZhZGUiCiAKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkcCIKICAgICBhbmRyb2lkOnZlcnRpY2FsU3BhY2luZz0iMTBkcCIKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl82LnhtbAppbmRleCAwMjY3OTdlLi5mNmNmYWQ4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl82LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl82LnhtbApAQCAtMTcsOCArMTcsOCBAQAogPEdyaWRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9ncmlkIgogICAgIGFuZHJvaWQ6bGF5b3V0QW5pbWF0aW9uPSJAYW5pbS9sYXlvdXRfd2F2ZV9zY2FsZSIKIAotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDp2ZXJ0aWNhbFNwYWNpbmc9IjEwZHAiCiAKICAgICBhbmRyb2lkOmhvcml6b250YWxTcGFjaW5nPSIxMGRwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xheW91dF9hbmltYXRpb25fNy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl83LnhtbAppbmRleCAzODI2MGM3Li5iNjcyYzM3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl83LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGF5b3V0X2FuaW1hdGlvbl83LnhtbApAQCAtMTksOCArMTksOCBAQAogICAgIGFuZHJvaWQ6YW5pbWF0aW9uQ2FjaGU9ImZhbHNlIgogICAgIGFuZHJvaWQ6Y2xpcFRvUGFkZGluZz0iZmFsc2UiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMmRwIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpzdHJldGNoQ29sdW1ucz0iMSI+CiAKICAgICA8VGFibGVSb3cKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMS54bWwKaW5kZXggZWYwMWNlZC4uYmUzZTc3ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMS54bWwKQEAgLTE5LDI3ICsxOSwyNyBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8IS0tIHZpZXcxIGdvZXMgb24gdG9wIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzFfdG9wIi8+CiAKICAgICA8IS0tIHZpZXcyIGdvZXMgaW4gdGhlIG1pZGRsZSAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF8xX21pZGRsZSIvPgogCiAgICAgPCEtLSB2aWV3MyBnb2VzIG9uIHRoZSBib3R0b20gLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfMV9ib3R0b20iLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMTAueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMTAueG1sCmluZGV4IGViNzkzZmQuLjRjMDQ0NzQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzEwLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8xMC54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogICAgICBUZXh0Vmlld3MsIEVkaXRUZXh0cywgYW5kIEJ1dHRvbnMuIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8IS0tIFRvcCBsYWJlbC9idXR0b24gdGV4dCBmaWVsZC4gLS0+CiAKICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6YWRkU3RhdGVzRnJvbUNoaWxkcmVuPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgIGV4Y2VwdCBmb3IgdGhlIGxhYmVsLikgIC0tPgogCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmFkZFN0YXRlc0Zyb21DaGlsZHJlbj0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzIueG1sCmluZGV4IDNjYWNjY2MuLjZjY2ZkNzUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzIueG1sCkBAIC0xOSwyNyArMTksMjcgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JsdWUiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSB2aWV3MSBnb2VzIG9uIHRvcCAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF8yX3RvcCIvPgogCiAgICAgPCEtLSB2aWV3MiBnb2VzIGluIHRoZSBtaWRkbGUgLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfMl9taWRkbGUiLz4KIAogICAgIDwhLS0gdmlldzMgZ29lcyBvbiB0aGUgYm90dG9tIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzJfYm90dG9tIi8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMy54bWwKaW5kZXggMmI5YjMyNy4uNjgzYjdlYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfMy54bWwKQEAgLTIzLDIwICsyMywyMCBAQAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8IS0tIHZpZXcxIGdvZXMgb24gdG9wIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzNfdG9wIi8+CiAKICAgICA8IS0tIHZpZXcyIGdvZXMgaW4gdGhlIG1pZGRsZSAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzNfbWlkZGxlIi8+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgPCEtLSB2aWV3MyBnb2VzIG9uIHRoZSBib3R0b20gLS0+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfM19ib3R0b20iLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF80LnhtbAppbmRleCAxMzlmYjU3Li4zYmEwMjgyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF80LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF80LnhtbApAQCAtMjAsMzEgKzIwLDMxIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlZCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3llbGxvdyIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KIAogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF81LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzUueG1sCmluZGV4IDgzMmExMDMuLmI1ZDQ1YzAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzUueG1sCkBAIC0yMSw3ICsyMSw3IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiPgogCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRleHRWaWV3IGdvZXMgb24gdG9wLi4uCiAgICAgLS0+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzVfaW5zdHJ1Y3Rpb25zIi8+CiAKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgYW4gYXBwbGljYXRpb24gcmVzb3VyY2UuCiAgICAgLS0+CiAgICAgPEVkaXRUZXh0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvZWRpdGJveF9iYWNrZ3JvdW5kIi8+CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgVGhpcyBpdGVtIGhhcyBsYXlvdXRfZ3Jhdml0eT0icmlnaHQiLiBUaGlzIG1lYW5zIHRoZSB3aG9sZQogICAgICAgICBob3Jpem9udGFsIExpbmVhckxheW91dCBpcyByaWdodCBhbGlnbmVkLCBub3QgdGhlIGluZGl2aWR1YWwKICAgICAgICAgaXRlbXMgd2l0aGluIGl0LiBUaGUgaG9yaXpvbnRhbCBMaW5lYXJMYXlvdXQncyB3aWR0aCBpcyBzZXQgdG8KLSAgICAgICAgd3JhcF9jb250ZW50LiAoSWYgaXQgd2FzIGZpbGxfcGFyZW50IGl0IHdvdWxkIG5vdCBoYXZlIGFueQorICAgICAgICB3cmFwX2NvbnRlbnQuIChJZiBpdCB3YXMgbWF0Y2hfcGFyZW50IGl0IHdvdWxkIG5vdCBoYXZlIGFueQogICAgICAgICByb29tIHRvIHNsaWRlIHRvIHRoZSByaWdodC4pCiAgICAgLS0+CiAgICAgPExpbmVhckxheW91dApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfNi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF82LnhtbAppbmRleCBmNGJiNmE3Li5kYTlkODE0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF82LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF82LnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8IS0tCiAgICAgTGluZWFyTGF5b3V0IHdoaWNoIHVzZXMgYSBjb21iaW5hdGlvbiBvZiB3cmFwX2NvbnRlbnQgb24gaXRzZWxmIGFuZAotICAgIGZpbGxfcGFyZW50IG9uIGl0cyBjaGlsZHJlbiB0byBnZXQgZXZlcnkgaXRlbSB0byBiZSB0aGUgc2FtZSB3aWR0aC4KKyAgICBtYXRjaF9wYXJlbnQgb24gaXRzIGNoaWxkcmVuIHRvIGdldCBldmVyeSBpdGVtIHRvIGJlIHRoZSBzYW1lIHdpZHRoLgogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgpAQCAtMjgsMjUgKzI4LDI1IEBACiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbGluZWFyX2xheW91dF82X29uZSIvPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JveCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfNl90d28iLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzZfdGhyZWUiLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ib3giCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzZfZm91ciIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF83LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzcueG1sCmluZGV4IDE5YjIyZTUuLjU5ODY1NjUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzcueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzcueG1sCkBAIC0yMCwyNyArMjAsMjcgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvcmVkIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfN19zbWFsbCIvPgogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2dyZWVuIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfN19iaWciLz4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmVhcl9sYXlvdXRfN19zbWFsbCIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmVhcl9sYXlvdXRfOC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF84LnhtbAppbmRleCBmMjI2MDQzLi43NjNlZGNhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF84LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF84LnhtbApAQCAtMTksMTUgKzE5LDE1IEBACiAgICAgY2hpbGRyZW4gc3RhY2tlZCBmcm9tIHRoZSB0b3AuCiAgICAgLS0+CiA8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIzMGRpcCI+CiAgIDxMaW5lYXJMYXlvdXQKICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbGF5b3V0IgogICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgotICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMzBkaXAiPgogCiAgICAgPFRleHRWaWV3CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluZWFyX2xheW91dF85LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzkueG1sCmluZGV4IGViOTExNDcuLjY3ZWFmMDAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzkueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5lYXJfbGF5b3V0XzkueG1sCkBAIC0yMSwxNiArMjEsMTYgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbGlzdCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxLjAiIC8+CiAKICAgICA8QnV0dG9uCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5lYXJfbGF5b3V0XzlfYnV0dG9uIiAvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluay54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGluay54bWwKaW5kZXggYTY1ZDAwMC4uZDRlYWYwYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpbmsueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saW5rLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgIDwhLS0gRm91ciBUZXh0VmlldyB3aWRnZXRzLCBlYWNoIG9uZSBkaXNwbGF5aW5nIHRleHQgY29udGFpbmluZyBsaW5rcy4gLS0+CkBAIC0yNCw4ICsyNCw4IEBACiAgIDwhLS0gdGV4dDEgYXV0b21hdGljYWxseSBsaW5raWZpZXMgdGhpbmdzIGxpa2UgVVJMcyBhbmQgcGhvbmUgbnVtYmVycy4gLS0+CiAgIDxUZXh0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RleHQxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6YXV0b0xpbms9ImFsbCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saW5rX3RleHRfYXV0byIKICAgICAgICAgICAgIC8+CkBAIC0zNCwyMyArMzQsMjMgQEAKICAgICAgICBzcGVjaWZ5IGxpbmtzLiAtLT4KICAgPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dDIiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xpbmtfdGV4dF9tYW51YWwiCiAgICAgICAgICAgICAvPgogCiAgIDwhLS0gdGV4dDMgYnVpbGRzIHRoZSB0ZXh0IGluIHRoZSBKYXZhIGNvZGUgdXNpbmcgSFRNTC4gLS0+CiAgIDxUZXh0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RleHQzIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAKICAgPCEtLSB0ZXh0NCBidWlsZHMgdGhlIHRleHQgaW4gdGhlIEphdmEgY29kZSB3aXRob3V0IHVzaW5nIEhUTUwuIC0tPgogICA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0NCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogCiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzEyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzEyLnhtbAppbmRleCA3ZjE5YjU4Li5lZWY2NDgxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF8xMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfMTIueG1sCkBAIC0xNiwyMCArMTYsMjAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjhkaXAiCiAgICAgYW5kcm9pZDpwYWRkaW5nUmlnaHQ9IjhkaXAiPgogICAgIAogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6c3RhY2tGcm9tQm90dG9tPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOnRyYW5zY3JpcHRNb2RlPSJub3JtYWwiLz4KICAgICAgICAgCiAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdXNlclRleHQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAgICAgICAgIAogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF8xMy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF8xMy54bWwKaW5kZXggNjgxYjQ2ZS4uNzJmMmY1OCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfMTMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0XzEzLnhtbApAQCAtMTYsMTcgKzE2LDE3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIAogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9ImZhbHNlIi8+CiAgICAgICAgIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3N0YXR1cyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI4ZGlwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iOGRpcCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfNy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF83LnhtbAppbmRleCAyZGM3Nzc3Li5jMTZjOWFjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF83LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF83LnhtbApAQCAtMTYsMjAgKzE2LDIwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKwlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKIAlhbmRyb2lkOnBhZGRpbmdMZWZ0PSI4ZGlwIgogCWFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSI4ZGlwIj4KLQkKKwogCTxMaXN0VmlldyBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgotCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKIAkgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogCSAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAJICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9ImZhbHNlIi8+CiAJICAgIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3Bob25lIgotICAgIAlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgIAlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgCWFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2JsdWUiLz4KLSAgICAJCisKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfOC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF84LnhtbAppbmRleCBhODhiNjdjLi5lZjU0MTBjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF84LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF84LnhtbApAQCAtMTYsMTIgKzE2LDEyIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgCiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9hZGQiCkBAIC0zOSwyMSArMzksMjEgQEAKICAgICA8IS0tIFRoZSBmcmFtZSBsYXlvdXQgaXMgaGVyZSBzaW5jZSB3ZSB3aWxsIGJlIHNob3dpbmcgZWl0aGVyCiAgICAgdGhlIGVtcHR5IHZpZXcgb3IgdGhlIGxpc3Qgdmlldy4gIC0tPgogICAgIDxGcmFtZUxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiID4KICAgICAgICAgPCEtLSBIZXJlIGlzIHRoZSBsaXN0LiBTaW5jZSB3ZSBhcmUgdXNpbmcgYSBMaXN0QWN0aXZpdHksIHdlCiAgICAgICAgICAgICAgaGF2ZSB0byBjYWxsIGl0ICJAYW5kcm9pZDppZC9saXN0IiBzbyBMaXN0QWN0aXZpdHkgd2lsbAogICAgICAgICAgICAgIGZpbmQgaXQgLS0+CiAgICAgICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9saXN0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpkcmF3U2VsZWN0b3JPblRvcD0iZmFsc2UiLz4KICAgICAgICAgCiAgICAgICAgIDwhLS0gSGVyZSBpcyB0aGUgdmlldyB0byBzaG93IGlmIHRoZSBsaXN0IGlzIGVtdHB5IC0tPgogICAgICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9lbXB0eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9saXN0Xzhfbm9fcGhvdG9zIi8+CiAgICAgICAgICAgICAKICAgICA8L0ZyYW1lTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9jaGVja2JveC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF9pdGVtX2NoZWNrYm94LnhtbAppbmRleCBmYTFkMmQ4Li5hMjZmNmY2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF9pdGVtX2NoZWNrYm94LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF9pdGVtX2NoZWNrYm94LnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8Q2hlY2tCb3ggeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RleHQxIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iP2FuZHJvaWQ6YXR0ci9saXN0UHJlZmVycmVkSXRlbUhlaWdodCIKICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTGFyZ2UiCiAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9pY29uX3RleHQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xpc3RfaXRlbV9pY29uX3RleHQueG1sCmluZGV4IDcyMDZjMDQuLjg1ZWRhN2EgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9saXN0X2l0ZW1faWNvbl90ZXh0LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbGlzdF9pdGVtX2ljb25fdGV4dC54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8SW1hZ2VWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvaWNvbiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZGlwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NhbXBsZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2FtcGxlLnhtbAppbmRleCBlNjYyOTIxLi43MGE5YzZiIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2FtcGxlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2FtcGxlLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbG9jYWxfc2FtcGxlIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9jYWxfc2VydmljZV9iaW5kaW5nLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2JpbmRpbmcueG1sCmluZGV4IDc3NWI4ZmIuLjZmMDRhYjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2JpbmRpbmcueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2JpbmRpbmcueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9sb2NhbF9zZXJ2aWNlX2JpbmRpbmciLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NlcnZpY2VfY29udHJvbGxlci54bWwKaW5kZXggN2JiMDJjYS4uMzAyOThkMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NlcnZpY2VfY29udHJvbGxlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvY2FsX3NlcnZpY2VfY29udHJvbGxlci54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xvY2FsX3NlcnZpY2VfY29udHJvbGxlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvZ190ZXh0X2JveF8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9sb2dfdGV4dF9ib3hfMS54bWwKaW5kZXggZjA2NjE5ZC4uNGQyYzc3NCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L2xvZ190ZXh0X2JveF8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbG9nX3RleHRfYm94XzEueG1sCkBAIC0xNyw4ICsxNyw4IEBACiA8TGluZWFyTGF5b3V0CiAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8QnV0dG9uCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWRkIgpAQCAtMjksNyArMjksNyBAQAogICAgIDxjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMudGV4dC5Mb2dUZXh0Qm94CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWFwdmlldy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWFwdmlldy54bWwKaW5kZXggOTdlZjdmZi4uNjY0ZDhmNiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21hcHZpZXcueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tYXB2aWV3LnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWFpbiIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICA8Y29tLmdvb2dsZS5hbmRyb2lkLm1hcHMuTWFwVmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6ZW5hYmxlZD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6YXBpS2V5PSJhcGlzYW1wbGVzIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21hcnF1ZWUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21hcnF1ZWUueG1sCmluZGV4IDZkNDBjODQuLjYyNjZmZjIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tYXJxdWVlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWFycXVlZS54bWwKQEAgLTE3LDggKzE3LDggQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgCiAgICAgPEJ1dHRvbgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMTUwZGlwIiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tZWRpYXBsYXllcl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tZWRpYXBsYXllcl8xLnhtbAppbmRleCAxNmFlNjFiLi43NDExZTQwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVkaWFwbGF5ZXJfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21lZGlhcGxheWVyXzEueG1sCkBAIC0xLDMwICsxLDMwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICA+CiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2xvY2FsdmlkZW8iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2xvY2FsX3ZpZGVvIiAKICAgICAvPgogICAgIAogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9zdHJlYW12aWRlbyIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIAogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3RyZWFtX3ZpZGVvIiAKICAgICAvPgogICAgIAogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9sb2NhbGF1ZGlvIgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9sb2NhbF9hdWRpbyIgCiAgICAgLz4KICAgICAKICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvcmVzb3VyY2VzYXVkaW8iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlc19hdWRpbyIgCiAgICAgLz4KICAgICAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tZWRpYXBsYXllcl8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tZWRpYXBsYXllcl8yLnhtbAppbmRleCBlMWU0OWRkLi5hN2Y3OGY2IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbWVkaWFwbGF5ZXJfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21lZGlhcGxheWVyXzIueG1sCkBAIC0xLDggKzEsOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxTdXJmYWNlVmlldyBhbmRyb2lkOmlkPSJAK2lkL3N1cmZhY2UiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbW9yc2VfY29kZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbW9yc2VfY29kZS54bWwKaW5kZXggZjUzNmRhMi4uM2M3OTkzYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L21vcnNlX2NvZGUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9tb3JzZV9jb2RlLnhtbApAQCAtMTcsMTMgKzE3LDEzIEBACiA8IS0tIFRoaXMgYWN0aXZpdHkgZXhlcmNpc2VzIHNlYXJjaCBpbnZvY2F0aW9uIG9wdGlvbnMgLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgIAogICAgIDxFZGl0VGV4dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ub3RpZnlfd2l0aF90ZXh0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ub3RpZnlfd2l0aF90ZXh0LnhtbAppbmRleCA2Y2JhOTBkLi5lMWI2ODM0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbm90aWZ5X3dpdGhfdGV4dC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L25vdGlmeV93aXRoX3RleHQueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxCdXR0b24KICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zaG9ydF9ub3RpZnkiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbm90aWZ5aW5nX2NvbnRyb2xsZXIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L25vdGlmeWluZ19jb250cm9sbGVyLnhtbAppbmRleCA1NGNlZjE3Li4zMGNkYjI0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvbm90aWZ5aW5nX2NvbnRyb2xsZXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9ub3RpZnlpbmdfY29udHJvbGxlci54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vdGlmeWluZ19zZXJ2aWNlX2NvbnRyb2xsZXIiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8xLnhtbAppbmRleCAwMzgzZGU5Li45ZTNhY2IxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzEueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxQcm9ncmVzc0JhciBhbmRyb2lkOmlkPSJAK2lkL3Byb2dyZXNzX2hvcml6b250YWwiCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9kZWNyZWFzZSIKQEAgLTU2LDcgKzU2LDcgQEAKIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2RlY3JlYXNlX3NlY29uZGFyeSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8yLnhtbAppbmRleCAyZDQzNjIyLi4wYzNmNjNjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzIueG1sCkBAIC0xNiw3ICsxNiw3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8UHJvZ3Jlc3NCYXIgYW5kcm9pZDppZD0iQCthbmRyb2lkOmlkL3Byb2dyZXNzX2xhcmdlIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzMueG1sCmluZGV4IGFjMTBhMzAuLjBjNDM3MDggMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl8zLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfMy54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3Nob3dJbmRldGVybWluYXRlIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Byb2dyZXNzYmFyXzQueG1sCmluZGV4IDVlNTc3YTAuLjZiYWNmN2EgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9wcm9ncmVzc2Jhcl80LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcHJvZ3Jlc3NiYXJfNC54bWwKQEAgLTE2LDcgKzE2LDcgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIAogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL3RvZ2dsZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9xdWlja19jb250YWN0cy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcXVpY2tfY29udGFjdHMueG1sCmluZGV4IGZmYjE5ZWQuLmEzNGZlYTIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9xdWlja19jb250YWN0cy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3F1aWNrX2NvbnRhY3RzLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8UmVsYXRpdmVMYXlvdXQKICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nTGVmdD0iMGRpcCIKICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iOWRpcCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ICJ3cmFwX2NvbnRlbnQiCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjJkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlclZlcnRpY2FsPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF90b1JpZ2h0T2Y9IkBpZC9iYWRnZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KIAogPC9SZWxhdGl2ZUxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yYWRpb19ncm91cF8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yYWRpb19ncm91cF8xLnhtbAppbmRleCAzMDI5MjA3Li5hMTdmOWQzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmFkaW9fZ3JvdXBfMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JhZGlvX2dyb3VwXzEueG1sCkBAIC0xNSwxMSArMTUsMTEgQEAKIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICA8UmFkaW9Hcm91cAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICAgICAgYW5kcm9pZDpjaGVja2VkQnV0dG9uPSJAK2lkL2x1bmNoIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JhdGluZ2Jhcl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yYXRpbmdiYXJfMS54bWwKaW5kZXggMzI1NmQzYy4uOWY4MTUwNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JhdGluZ2Jhcl8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmF0aW5nYmFyXzEueG1sCkBAIC0xNyw4ICsxNyw4IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIxMGRpcCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8UmF0aW5nQmFyIGFuZHJvaWQ6aWQ9IkAraWQvcmF0aW5nYmFyMSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgYW5kcm9pZDpyYXRpbmc9IjIuMjUiIC8+CiAKICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTBkaXAiPgogICAgICAgICAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWFkX2Fzc2V0LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWFkX2Fzc2V0LnhtbAppbmRleCA3OWI4YmI2Li5jMzQyM2JmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVhZF9hc3NldC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlYWRfYXNzZXQueG1sCkBAIC0xOCwxMSArMTgsMTEgQEAKICAgICAgU2VlIGNvcnJlc3BvbmRpbmcgSmF2YSBjb2RlIGNvbS5hbmRyb2lkLnNkay5jb250ZW50LlN0eWxlZFRleHQgLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9Im5vcm1hbCIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVjZWl2ZV9yZXN1bHQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlY2VpdmVfcmVzdWx0LnhtbAppbmRleCA0NjFiZTZjLi5hODk0NjEyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVjZWl2ZV9yZXN1bHQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWNlaXZlX3Jlc3VsdC54bWwKQEAgLTIxLDE2ICsyMSwxNiBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3JlY2VpdmVfcmVzdWx0X2luc3RydWN0aW9ucyIvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcmVzdWx0cyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjEwZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjEwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZ3JlZW4iPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2VudGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWRpcmVjdF9lbnRlci54bWwKaW5kZXggZjczZDk5OS4uNmI0NDkzZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2VudGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfZW50ZXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZWRpcmVjdF9lbnRlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X2dldHRlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfZ2V0dGVyLnhtbAppbmRleCA5ODc5Yjc4Li5jNGUzYmQ3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfZ2V0dGVyLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfZ2V0dGVyLnhtbApAQCAtMTksMTYgKzE5LDE2IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVkaXJlY3RfZ2V0dGVyIi8+CiAKICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiPgogICAgICAgICA8cmVxdWVzdEZvY3VzIC8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfbWFpbi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVkaXJlY3RfbWFpbi54bWwKaW5kZXggNzRkZTUwMi4uYTU0YTlkZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlZGlyZWN0X21haW4ueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWRpcmVjdF9tYWluLnhtbApAQCAtMTksMTYgKzE5LDE2IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVkaXJlY3RfbWFpbiIvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIiAvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVsYXRpdmVfbGF5b3V0XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbGF0aXZlX2xheW91dF8xLnhtbAppbmRleCAxMjJlNzE4Li45NGY3NmU4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVsYXRpdmVfbGF5b3V0XzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWxhdGl2ZV9sYXlvdXRfMS54bWwKQEAgLTE5LDE0ICsxOSwxNCBAQAogLS0+CiAKIDxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSB2aWV3MSBnb2VzIG9uIHRvcCAtLT4KICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC92aWV3MSIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvcmVkIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3JlbGF0aXZlX2xheW91dF8xX3RvcCIvPgpAQCAtMzUsNyArMzUsNyBAQAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3ZpZXcyIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRCb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZWxhdGl2ZV9sYXlvdXRfMV9ib3R0b20iLz4KQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC92aWV3MyIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUveWVsbG93IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWJvdmU9IkBpZC92aWV3MiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC92aWV3MSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWxhdGl2ZV9sYXlvdXRfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVsYXRpdmVfbGF5b3V0XzIueG1sCmluZGV4IGRjNjEzZTYuLjA4Mzk1M2EgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZWxhdGl2ZV9sYXlvdXRfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbGF0aXZlX2xheW91dF8yLnhtbApAQCAtMTcsNyArMTcsNyBAQAogPCEtLSBEZW1vbnN0cmF0ZXMgdXNpbmcgYSByZWxhdGl2ZSBsYXlvdXQgdG8gY3JlYXRlIGEgZm9ybSAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiPgpAQCAtMjcsNyArMjcsNyBAQAogICAgIC0tPgogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xhYmVsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVsYXRpdmVfbGF5b3V0XzJfaW5zdHJ1Y3Rpb25zIi8+CiAKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAtLT4KICAgICA8RWRpdFRleHQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9lbnRyeSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9lZGl0Ym94X2JhY2tncm91bmQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvbGFiZWwiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW1vdGVfc2VydmljZV9iaW5kaW5nLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW1vdGVfc2VydmljZV9iaW5kaW5nLnhtbAppbmRleCBhMzUzZWZiLi5jYzQwOGQxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVtb3RlX3NlcnZpY2VfYmluZGluZy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbW90ZV9zZXJ2aWNlX2JpbmRpbmcueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZW1vdGVfc2VydmljZV9iaW5kaW5nIi8+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgPC9CdXR0b24+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9jYWxsYmFjayIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIgYW5kcm9pZDpwYWRkaW5nVG9wPSI0ZGlwIi8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW1vdGVfc2VydmljZV9jb250cm9sbGVyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW1vdGVfc2VydmljZV9jb250cm9sbGVyLnhtbAppbmRleCA0OGU0Yzk1Li42MWQ3NzBmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVtb3RlX3NlcnZpY2VfY29udHJvbGxlci54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3JlbW90ZV9zZXJ2aWNlX2NvbnRyb2xsZXIueG1sCkBAIC0xOSwxMCArMTksMTAgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9yZW1vdGVfc2VydmljZV9jb250cm9sbGVyIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9mb3VyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX2ZvdXIueG1sCmluZGV4IDQ1ZjEzYTMuLmE1YzIyYjUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX2ZvdXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX2ZvdXIueG1sCkBAIC0yMSwxMSArMjEsMTEgQEAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVvcmRlcl9mb3VyX3RleHQiLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX29uX2xhdW5jaC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl9vbl9sYXVuY2gueG1sCmluZGV4IDg1MGEyZjUuLjk4MWIzZjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX29uX2xhdW5jaC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfb25fbGF1bmNoLnhtbApAQCAtMjEsMTEgKzIxLDExIEBACiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlb3JkZXJfb25fbGF1bmNoIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl90aHJlZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl90aHJlZS54bWwKaW5kZXggMzBlZjQxYi4uNTFhOGQwYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfdGhyZWUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX3RocmVlLnhtbApAQCAtMjEsMTEgKzIxLDExIEBACiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jlb3JkZXJfdGhyZWVfdGV4dCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfdHdvLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9yZW9yZGVyX3R3by54bWwKaW5kZXggNzEzMjU2MS4uNmZhZGNhMCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlb3JkZXJfdHdvLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVvcmRlcl90d28ueG1sCkBAIC0yMSwxMSArMjEsMTEgQEAKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcmVvcmRlcl90d29fdGV4dCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Jlc291cmNlcy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVzb3VyY2VzLnhtbAppbmRleCA2MGVjNTgxLi5lZTlkYWMwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVzb3VyY2VzLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvcmVzb3VyY2VzLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zdHlsZWRfdGV4dCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9Im5vcm1hbCIKQEAgLTM2LDcgKzM2LDcgQEAKIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWluX3RleHQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCiAgICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJub3JtYWwiCkBAIC00NCw3ICs0NCw3IEBACiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yZXMxIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0ibm9ybWFsIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NhdmVfcmVzdG9yZV9zdGF0ZS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2F2ZV9yZXN0b3JlX3N0YXRlLnhtbAppbmRleCA0ZjNmOGVlLi40YjQ4OWVkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2F2ZV9yZXN0b3JlX3N0YXRlLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2F2ZV9yZXN0b3JlX3N0YXRlLnhtbApAQCAtMTgsMjEgKzE4LDIxIEBACiAgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uYW5kcm9pZC5zZGsuYXBwLlNhdmVSZXN0b3JlU3RhdGUuamF2YS4gLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbXNnIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiIC8+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2F2ZXNfc3RhdGUiLz4KIAogICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3NhdmVkIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2luaXRpYWxfdGV4dCIKQEAgLTQxLDE0ICs0MSwxNCBAQAogICAgIDwvRWRpdFRleHQ+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSI4ZGlwIgogICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkaXAiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub19zYXZlc19zdGF0ZSIvPgogCiAgICAgPEVkaXRUZXh0IAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yZWQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9pbml0aWFsX3RleHQiPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbF92aWV3XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbF92aWV3XzEueG1sCmluZGV4IDA1NTI4MDcuLjQ3OTJlMjEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxfdmlld18xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsX3ZpZXdfMS54bWwKQEAgLTE3LDcyICsxNyw3MiBAQAogPCEtLSBEZW1vbnN0cmF0ZXMgc2Nyb2xsaW5nIHdpdGggYSBTY3JvbGxWaWV3LiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6c2Nyb2xsYmFycz0ibm9uZSI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbGF5b3V0IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX3RleHRfMSIvPgogCiAgICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX2J1dHRvbl8xIi8+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV90ZXh0XzIiLz4KIAogICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV9idXR0b25fMiIvPgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfdGV4dF8zIi8+CiAKICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfYnV0dG9uXzMiLz4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX3RleHRfNCIvPgogCiAgICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxfdmlld18xX2J1dHRvbl80Ii8+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV90ZXh0XzUiLz4KIAogICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMV9idXR0b25fNSIvPgogCiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfdGV4dF82Ii8+CiAKICAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbF92aWV3XzFfYnV0dG9uXzYiLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbF92aWV3XzIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbF92aWV3XzIueG1sCmluZGV4IDAxMDdlNDYuLmQ4NTg3Y2YgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxfdmlld18yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsX3ZpZXdfMi54bWwKQEAgLTE3LDIzICsxNywyMyBAQAogPCEtLSBEZW1vbnN0cmF0ZXMgc2Nyb2xsaW5nIHdpdGggYSBTY3JvbGxWaWV3LiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6c2Nyb2xsYmFycz0ibm9uZSI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbGF5b3V0IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMl90ZXh0XzEiLz4KIAogICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsX3ZpZXdfMl9idXR0b25fMSIvPgogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMS54bWwKaW5kZXggNzIyMWIzZS4uN2E1Yjg2ZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIxLnhtbApAQCAtMTcsMTUyICsxNywxNTIgQEAKIDwhLS0gRGVtb25zdHJhdGVzIHNjcm9sbGluZyB3aXRoIGEgU2Nyb2xsVmlldy4gLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzFfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMV90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8xX3RleHQiLz4KICAgICA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIyLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIyLnhtbAppbmRleCA0ODgyYTcyLi45MmFkMTlmIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiA8IS0tIERlbW9uc3RyYXRlcyBzY3JvbGxpbmcgd2l0aCBhIFNjcm9sbFZpZXcuIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpzY3JvbGxiYXJUcmFja1ZlcnRpY2FsPSJAZHJhd2FibGUvc2Nyb2xsYmFyX3ZlcnRpY2FsX3RyYWNrIgogICAgIGFuZHJvaWQ6c2Nyb2xsYmFyVGh1bWJWZXJ0aWNhbD0iQGRyYXdhYmxlL3Njcm9sbGJhcl92ZXJ0aWNhbF90aHVtYiIKQEAgLTI1LDE0NyArMjUsMTQ3IEBACiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIvPgogICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0Ii8+CiAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiLz4KICAgICA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIzLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zY3JvbGxiYXIzLnhtbAppbmRleCBjMjcyZTQ1Li5mYTIwZGIwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Nyb2xsYmFyMy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Njcm9sbGJhcjMueG1sCkBAIC0xOCwxMiArMTgsMTIgQEAKIAogPExpbmVhckxheW91dAogICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KIAogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAKQEAgLTMzLDQ3ICszMyw0NyBAQAogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjRkYwMDAwIj4KICAgICAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIgLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIgLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfMl90ZXh0IiAvPgogICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzJfdGV4dCIgLz4KICAgICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8yX3RleHQiIC8+CiAgICAgICAgICAgICA8L0xpbmVhckxheW91dD4KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzAwRkYwMCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxMmRpcCI+CiAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzNfdGV4dCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iIzAwMDAwMCIKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMTIwZGlwIgogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9lZGl0X3RleHQiPgogICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiMwMDAwMDAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Njcm9sbGJhcl8zX3RleHQiIC8+CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICA8L0xpbmVhckxheW91dD4KIAogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIDxTY3JvbGxWaWV3CiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3ZpZXc0IgpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhclN0eWxlPSJvdXRzaWRlT3ZlcmxheSIKICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvZWRpdF90ZXh0Ij4KICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjMDAwMDAwIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zY3JvbGxiYXJfM190ZXh0IiAvPgpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhclN0eWxlPSJvdXRzaWRlSW5zZXQiCiAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxlL2VkaXRfdGV4dCI+CiAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iIzAwMDAwMCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2Nyb2xsYmFyXzNfdGV4dCIgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWFyY2hfaW52b2tlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWFyY2hfaW52b2tlLnhtbAppbmRleCBiNzhhNjE2Li42NmJmMmU4IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VhcmNoX2ludm9rZS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlYXJjaF9pbnZva2UueG1sCkBAIC0xNywxMyArMTcsMTMgQEAKIDwhLS0gVGhpcyBhY3Rpdml0eSBleGVyY2lzZXMgc2VhcmNoIGludm9jYXRpb24gb3B0aW9ucyAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgCiAgICAgPCEtLSAgU2VjdGlvbjogSW5mb3JtYXRpb24gLS0+CiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL21zZ19zZWFyY2giIC8+CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiAgICAgICAgICAgICAKICAgICA8U3Bpbm5lciBhbmRyb2lkOmlkPSJAK2lkL3NwaW5uZXJfbWVudV9tb2RlIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmRyYXdTZWxlY3Rvck9uVG9wPSJ0cnVlIiAvPgogICAgICAgICAgICAgCkBAIC01MCwxMiArNTAsMTIgQEAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zZWFyY2hfc2VjdF9vcHRpb25zIiAvPgogICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CiAKICAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAgICAgCiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KICAgICAgICAgPExpbmVhckxheW91dAotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlYXJjaF9xdWVyeV9yZXN1bHRzLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWFyY2hfcXVlcnlfcmVzdWx0cy54bWwKaW5kZXggMDNmMWFlNi4uY2Q5MmYyZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlYXJjaF9xdWVyeV9yZXN1bHRzLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VhcmNoX3F1ZXJ5X3Jlc3VsdHMueG1sCkBAIC0xNywyMCArMTcsMjAgQEAKIDwhLS0gVGhpcyBhY3Rpdml0eSBkaXNwbGF5cyBzZWFyY2ggcXVlcmllcyBhbmQgInJlc3VsdHMiIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAKICAgICA8IS0tICBTZWN0aW9uOiBJbmZvcm1hdGlvbiAtLT4KICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbXNnX3NlYXJjaF9yZXN1bHRzIiAvPgogICAgIAogICAgIDwhLS0gIFNlY3Rpb246IFNlYXJjaCBRdWVyeSBTdHJpbmcgLS0+CiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KIApAQCAtNDUsNyArNDUsNyBAQAogCiAgICAgPCEtLSAgU2VjdGlvbjogU2VhcmNoIFF1ZXJ5IGFwcGxpY2F0aW9uIGNvbnRleHQgZGF0YSAtLT4KICAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgogCkBAIC02MCw3ICs2MCw3IEBACiAKICAgICA8IS0tICBTZWN0aW9uOiBIb3cgdGhlIHF1ZXJ5IHdhcyBkZWxpdmVyZWQgLS0+CiAgICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlZWtiYXJfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Vla2Jhcl8xLnhtbAppbmRleCA1MTMxMTRlLi5kMzE0MGIyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Vla2Jhcl8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2Vla2Jhcl8xLnhtbApAQCAtMTYsMjEgKzE2LDIxIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxTZWVrQmFyIGFuZHJvaWQ6aWQ9IkAraWQvc2VlayIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDptYXg9IjEwMCIKICAgICAgICAgYW5kcm9pZDpwcm9ncmVzcz0iNTAiCiAgICAgICAgIGFuZHJvaWQ6c2Vjb25kYXJ5UHJvZ3Jlc3M9Ijc1IiAvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcHJvZ3Jlc3MiCi0gICAgICAgCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90cmFja2luZyIKLSAgICAgICAJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgIAlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlbGVjdF9kaWFsb2cueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlbGVjdF9kaWFsb2cueG1sCmluZGV4IGFkODI2YWYuLmRiZjlmYjcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZWxlY3RfZGlhbG9nLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VsZWN0X2RpYWxvZy54bWwKQEAgLTE4LDEyICsxOCwxMiBAQAogICAgICBTZWUgY29ycmVzcG9uZGluZyBKYXZhIGNvZGUgY29tLmFuZHJvaWQuc2RrLmFwcC5TZWxlY3REaWFsb2dTYW1wbGVzLmphdmEuIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC9zY3JlZW4iCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvc2hvd19kaWFsb2ciCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2VsZWN0X2RpYWxvZ19zaG93Ii8+CiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbWVzc2FnZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VuZF9yZXN1bHQueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlbmRfcmVzdWx0LnhtbAppbmRleCAzODZjM2ZjLi4zNGIzNjkzIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VuZF9yZXN1bHQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZW5kX3Jlc3VsdC54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6cGFkZGluZz0iNGRpcCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iOGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3BpY2tfcmVzdWx0Ii8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlci54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlci54bWwKaW5kZXggMTliNzQ5OC4uNTU2ZGZmYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIgYW5kcm9pZDpwYWRkaW5nPSI0ZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX2hvcml6b250YWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2VydmljZV9zdGFydF9hcmd1bWVudHNfY29udHJvbGxlciIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NoYXBlX2RyYXdhYmxlXzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3NoYXBlX2RyYXdhYmxlXzEueG1sCmluZGV4IDAzN2U4NDQuLmIwYWQ0NzkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zaGFwZV9kcmF3YWJsZV8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc2hhcGVfZHJhd2FibGVfMS54bWwKQEAgLTE3LDU2ICsxNyw1NiBAQAogPCEtLSBEZW1vbnN0cmF0ZXMgc2Nyb2xsaW5nIHdpdGggYSBTY3JvbGxWaWV3LiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKLQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAJCiAgICAgPExpbmVhckxheW91dAogICAgIAlhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIAogCQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI1MGRpcCIKIAkJCWFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvc2hhcGVfMSIgLz4KIAkJCQogCQk8SW1hZ2VWaWV3Ci0JCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJCQlhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAJCQlhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2xpbmUiIC8+CiAJCQkKIAkJPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNTBkaXAiCiAJCQlhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL3NoYXBlXzIiIC8+CiAJCQkKIAkJPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogCQkJYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9saW5lIiAvPgogCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjUwZGlwIgogCQkJYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9zaGFwZV8zIiAvPgogCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIAkJCWFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvbGluZSIgLz4KIAkJCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjUwZGlwIgogCQkJYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9zaGFwZV80IiAvPgogCQkJCiAJCTxJbWFnZVZpZXcKLQkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKIAkJCWFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvbGluZSIgLz4KIAkJCQkJCQkKIAkJPEltYWdlVmlldwotCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNTBkaXAiCiAJCQlhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL3NoYXBlXzUiIC8+CiAJPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3Bpbm5lcl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zcGlubmVyXzEueG1sCmluZGV4IDNkNWYzYzEuLmI3MTY2ZjMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zcGlubmVyXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zcGlubmVyXzEueG1sCkBAIC0xNywzMSArMTcsMzEgQEAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9zcGlubmVyXzFfY29sb3IiCiAgICAgLz4KIAogICAgIDxTcGlubmVyIGFuZHJvaWQ6aWQ9IkAraWQvc3Bpbm5lcjEiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6cHJvbXB0PSJAc3RyaW5nL3NwaW5uZXJfMV9jb2xvcl9wcm9tcHQiCiAgICAgLz4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjEwZGlwIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3Bpbm5lcl8xX3BsYW5ldCIKICAgICAvPgogCiAgICAgPFNwaW5uZXIgYW5kcm9pZDppZD0iQCtpZC9zcGlubmVyMiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpkcmF3U2VsZWN0b3JPblRvcD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpwcm9tcHQ9IkBzdHJpbmcvc3Bpbm5lcl8xX3BsYW5ldF9wcm9tcHQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25zLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbnMueG1sCmluZGV4IDExZjNjOTYuLjBhMjkxYmMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbnMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbnMueG1sCkBAIC0xNSwxMiArMTUsMTIgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgIAogICAgICAgICA8VGV4dFZpZXcKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgICAgIAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KICAgICAgICAgCiAgICAgICAgICAgICA8QnV0dG9uCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIAogICAgICAgICAgICAgPEJ1dHRvbgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAKICAgICAgICAgICAgIDxCdXR0b24KQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgICAgICAKICAgICAgICAgICAgIDxCdXR0b24KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdHlsZWRfdGV4dC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3R5bGVkX3RleHQueG1sCmluZGV4IDYxMGVhNjQuLmE4OTc1ZGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdHlsZWRfdGV4dC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3N0eWxlZF90ZXh0LnhtbApAQCAtMTgsMzIgKzE4LDMyIEBACiAgICAgIFNlZSBjb3JyZXNwb25kaW5nIEphdmEgY29kZSBjb20uYW5kcm9pZC5zZGsuY29udGVudC5TdHlsZWRUZXh0IC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3R5bGVkX3RleHRfcnNyYyIvPgogCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0ibm9ybWFsIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc3R5bGVkX3RleHQiLz4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgLz4KIAogICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3N0eWxlZF90ZXh0X3Byb2ciLz4KIAogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl9ob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOnRleHRTdHlsZT0ibm9ybWFsIi8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdXJmYWNlX3ZpZXdfb3ZlcmxheS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvc3VyZmFjZV92aWV3X292ZXJsYXkueG1sCmluZGV4IGE1NTdlMjIuLmRjYjk4MjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC9zdXJmYWNlX3ZpZXdfb3ZlcmxheS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3N1cmZhY2Vfdmlld19vdmVybGF5LnhtbApAQCAtMTgsMjcgKzE4LDI3IEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPCEtLSBIZXJlIGlzIHdoZXJlIHdlIHB1dCB0aGUgU3VyZmFjZVZpZXcsIGluIGEgZnJhbWUgc28gdGhhdCB3ZSBjYW4KICAgICAgICAgIHN0YWNrIG90aGVyIHZpZXdzIG9uIHRvcCBvZiBpdC4gLS0+CiAgICAgPEZyYW1lTGF5b3V0Ci0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwcHgiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiPgogCiAgICAgICAgIDxhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvZ2xzdXJmYWNldmlldyIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIgLz4KKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiAvPgogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQgYW5kcm9pZDppZD0iQCtpZC9oaWRlY29udGFpbmVyIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS90cmFuc2x1Y2VudF9iYWNrZ3JvdW5kIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgICAgICAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2hpZGVtZTEiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xLnhtbAppbmRleCA4ZDk1ZTgyLi4yNDYwOWM0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMS54bWwKQEAgLTE1LDggKzE1LDggQEAKIC0tPgogCiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxUYWJsZVJvdz4KICAgICAgICAgPFRleHRWaWV3CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzEwLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTAueG1sCmluZGV4IDZjNTU4ZTcuLjc1NTczYTAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTAueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTAueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICBhbmRyb2lkOnN0cmV0Y2hDb2x1bW5zPSIxIj4KIAogICAgPFRhYmxlUm93PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzExLnhtbAppbmRleCBlNDBlMjhhLi42MzhiNzEyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzExLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzExLnhtbApAQCAtMTUsNyArMTUsNyBAQAogLS0+CiAKIDxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpzdHJldGNoQ29sdW1ucz0iMSI+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMTIueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMi54bWwKaW5kZXggNDIzZTM0ZS4uMTdjNjNhZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8xMi54bWwKQEAgLTE1LDcgKzE1LDcgQEAKIC0tPgogCiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgIDxUYWJsZVJvdz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzIueG1sCmluZGV4IGM1MTM0ZDMuLmY3Y2QyMDYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8yLnhtbApAQCAtMTUsOCArMTUsOCBAQAogLS0+CiAKIDxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAgICAgPFRhYmxlUm93PgogICAgICAgICA8QnV0dG9uCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF8zLnhtbAppbmRleCA0NDQxNWZjLi42OTFmODI0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzMueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfMy54bWwKQEAgLTE1LDggKzE1LDggQEAKIC0tPgogCiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpzaHJpbmtDb2x1bW5zPSIyLCAzIj4KIAogICAgIDwhLS0gUm93cyBoYXZlIGRpZmZlcmVudCBudW1iZXIgb2YgY29sdW1ucyBhbmQgY29udGVudCBkb2Vzbid0IGZpdCBvbgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF80LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNC54bWwKaW5kZXggYTliN2I0Mi4uM2I1MGJlYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF80LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzQueG1sCkBAIC0xNiw4ICsxNiw4IEBACiAKIDwhLS0gU3RyZXRjaCBzb21lIGNvbHVtbnMgLS0+CiA8VGFibGVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpzdHJldGNoQ29sdW1ucz0iMSI+CiAKICAgICA8VGFibGVSb3c+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzUueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF81LnhtbAppbmRleCA3NzNkNzI5Li5iNjE4MTI5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzUueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNS54bWwKQEAgLTE2LDggKzE2LDggQEAKIAogPCEtLSBTdHJldGNoIHNvbWUgY29sdW1ucyAtLT4KIDxUYWJsZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnN0cmV0Y2hDb2x1bW5zPSIxIj4KIAogICAgIDxUYWJsZVJvdz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzYueG1sCmluZGV4IDk2MDdmMWMuLmNiYjZkOGQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF82LnhtbApAQCAtMTYsOCArMTYsOCBAQAogCiA8IS0tIFN0cmV0Y2ggc29tZSBjb2x1bW5zIC0tPgogPFRhYmxlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6c3RyZXRjaENvbHVtbnM9IjEiPgogCiAgICAgPFRhYmxlUm93PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF83LnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfNy54bWwKaW5kZXggODhjNDkxMC4uYWU4YmExZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF83LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzcueG1sCkBAIC0xNiwxMSArMTYsMTEgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIDxUYWJsZUxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21lbnUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6c3RyZXRjaENvbHVtbnM9IjEiCiAgICAgICAgIGFuZHJvaWQ6Y29sbGFwc2VDb2x1bW5zPSIyIj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfOC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzgueG1sCmluZGV4IGE2M2E4ZTguLjA4NzE0MzIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfOC54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF84LnhtbApAQCAtMTYsMTEgKzE2LDExIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICA8VGFibGVMYXlvdXQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tZW51IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgICA8VGFibGVSb3c+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzkueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYmxlX2xheW91dF85LnhtbAppbmRleCBhMmQ2NTY0Li5lZGI0MDI5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFibGVfbGF5b3V0XzkueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJsZV9sYXlvdXRfOS54bWwKQEAgLTE1LDE1ICsxNSwxNSBAQAogLS0+CiAKIDxTY3JvbGxWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgICAgICA8VGFibGVMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWVudSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAKICAgICAgICAgICAgIDxUYWJsZVJvdz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJzMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGFiczEueG1sCmluZGV4IDVhMTc2OTMuLjYwM2ZlODIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90YWJzMS54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RhYnMxLnhtbApAQCAtMTUsMjUgKzE1LDI1IEBACiAtLT4KIAogPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC92aWV3MSIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmx1ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RhYnNfMV90YWJfMSIvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdmlldzIiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlZCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RhYnNfMV90YWJfMiIvPgogCiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdmlldzMiCiAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2dyZWVuIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGFic18xX3RhYl8zIi8+CiAKIDwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGV4dF9zd2l0Y2hlcl8xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90ZXh0X3N3aXRjaGVyXzEueG1sCmluZGV4IGQ3YmU3NDMuLjAwYWUzMDcgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90ZXh0X3N3aXRjaGVyXzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90ZXh0X3N3aXRjaGVyXzEueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvbmV4dCIKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RleHRfc3dpdGNoZXJfMV9uZXh0X3RleHQiIC8+CiAKICAgICA8VGV4dFN3aXRjaGVyIGFuZHJvaWQ6aWQ9IkAraWQvc3dpdGNoZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CiAKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RleHRfdG9fc3BlZWNoLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90ZXh0X3RvX3NwZWVjaC54bWwKaW5kZXggMGJhNjBlMS4uNDgyOTVkZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RleHRfdG9fc3BlZWNoLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdGV4dF90b19zcGVlY2gueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgPgogICAgIDxCdXR0b24gYW5kcm9pZDppZD0iQCtpZC9hZ2Fpbl9idXR0b24iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdHJhbnNsdWNlbnRfYmFja2dyb3VuZC54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdHJhbnNsdWNlbnRfYmFja2dyb3VuZC54bWwKaW5kZXggNmI2ZTFjZi4uYzRhMWFjZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3RyYW5zbHVjZW50X2JhY2tncm91bmQueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC90cmFuc2x1Y2VudF9iYWNrZ3JvdW5kLnhtbApAQCAtMTksNiArMTksNiBAQAogCiA8IS0tIFRoaXMgc2NyZWVuIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHRleHQgZmllbGQgdGhhdCBkaXNwbGF5cyBzb21lIHRleHQuIC0tPgogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxjZW50ZXJfaG9yaXpvbnRhbCIKICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdHJhbnNsdWNlbnRfYmFja2dyb3VuZCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3ZpZGVvdmlldy54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdmlkZW92aWV3LnhtbAppbmRleCA0ZjM1YWNlLi5kYjk3YTExIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdmlkZW92aWV3LnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdmlkZW92aWV3LnhtbApAQCAtMSw4ICsxLDggQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgID4KICAgICAKICAgICA8VmlkZW9WaWV3IApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3Zpc2liaWxpdHlfMS54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdmlzaWJpbGl0eV8xLnhtbAppbmRleCBhZDk0NjAyLi4xMDI3NzcyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdmlzaWJpbGl0eV8xLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdmlzaWJpbGl0eV8xLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KIAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYm94IgotICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KIAogICAgICAgPFRleHRWaWV3CiAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvcmVkIgotICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy92aXNpYmlsaXR5XzFfdmlld18xIi8+CiAKICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3ZpY3RpbSIKICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ncmVlbiIKLSAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdmlzaWJpbGl0eV8xX3ZpZXdfMiIvPgogCiAgICAgICA8VGV4dFZpZXcKICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ibHVlIgotICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy92aXNpYmlsaXR5XzFfdmlld18zIi8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC92b2ljZV9yZWNvZ25pdGlvbi54bWwgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvdm9pY2VfcmVjb2duaXRpb24ueG1sCmluZGV4IDJkYjRhNzIuLjY2MTc1ZWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC92b2ljZV9yZWNvZ25pdGlvbi54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3ZvaWNlX3JlY29nbml0aW9uLnhtbApAQCAtMTgsMjMgKzE4LDIzIEBACiA8IS0tIFRoaXMgYWN0aXZpdHkgZGlzcGxheXMgVUkgZm9yIGxhdW5jaGluZyB2b2ljZSByZWNvZ25pdGlvbiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgCiAgICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3ZvaWNlX3JlY29nbml0aW9uX3Byb21wdCIgLz4KICAgICAgICAgCiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2J0bl9zcGVhayIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NwZWFrX2J1dHRvbiIgLz4KICAgICAgICAgCiAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvbGlzdCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3dhbGxwYXBlcl8yLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC93YWxscGFwZXJfMi54bWwKaW5kZXggODUxNjFjOS4uMzI0ZDc0OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvbGF5b3V0L3dhbGxwYXBlcl8yLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvd2FsbHBhcGVyXzIueG1sCkBAIC0xMCw3ICsxMCw3IEBACiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgICAgICA8QnV0dG9uCiAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JhbmRvbWl6ZSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9sYXlvdXQvd2Vidmlld18xLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC93ZWJ2aWV3XzEueG1sCmluZGV4IDkxZmNhMzkuLjY3Y2VhM2EgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC93ZWJ2aWV3XzEueG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL2xheW91dC93ZWJ2aWV3XzEueG1sCkBAIC0xNSw2NCArMTUsNjQgQEAKIC0tPgogCiA8U2Nyb2xsVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgCiAgICAgCiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CiAgICAgICAgIAogICAgICAgICA8V2ViVmlldyBhbmRyb2lkOmlkPSJAK2lkL3d2MSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djIiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogICAgICAgICAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3YzIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICAgICAgICAgIAogICAgICAgICA8V2ViVmlldyBhbmRyb2lkOmlkPSJAK2lkL3d2NCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogICAgICAgICAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3Y2IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djciCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAvPgogICAgICAgICAgICAgCiAgICAgICAgIDxXZWJWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvd3Y4IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICAgICAgICAgIAogICAgICAgICA8V2ViVmlldyBhbmRyb2lkOmlkPSJAK2lkL3d2OSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAKICAgICAgICAgPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC93djEwIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgLz4KICAgICA8L0xpbmVhckxheW91dD4KICAgICAgICAgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvYW5kcm9pZHMucGttIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L2FuZHJvaWRzLnBrbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODA3ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvcmF3L2FuZHJvaWRzLnBrbQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3Jlcy9kcmF3YWJsZS1tZHBpL3JvYm90LnBuZyBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9yb2JvdC5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvQXBpRGVtb3MvcmVzL2RyYXdhYmxlLW1kcGkvcm9ib3QucG5nCnJlbmFtZSB0byBzYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvcm9ib3QucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9za3ljdWJlbWFwMC5qcGcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODdkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDAuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9za3ljdWJlbWFwMS5qcGcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTA2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9za3ljdWJlbWFwMi5qcGcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDg4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9za3ljdWJlbWFwMy5qcGcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MDAyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9za3ljdWJlbWFwNC5qcGcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YmM1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3Jhdy9za3ljdWJlbWFwNS5qcGcgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OWVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy9yYXcvc2t5Y3ViZW1hcDUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9hcnJheXMueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL2FycmF5cy54bWwKaW5kZXggY2EzMDAzZi4uNzZiZjUxOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL2FycmF5cy54bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL2FycmF5cy54bWwKQEAgLTg1LDQgKzg1LDEyIEBACiAgICAgICAgIDxpdGVtPmNoYXJsaWU8L2l0ZW0+ICAKICAgICA8L3N0cmluZy1hcnJheT4KICAgICAKKyAgICA8IS0tIFVzZWQgaW4gYXBwL1NhbXBsZSBEZXZpY2UgQWRtaW4gLS0+CisgICAgPHN0cmluZy1hcnJheSBuYW1lPSJwYXNzd29yZF9xdWFsaXRpZXMiPgorICAgICAgICA8aXRlbT5VbnNwZWNpZmllZDwvaXRlbT4KKyAgICAgICAgPGl0ZW0+U29tZXRoaW5nPC9pdGVtPgorICAgICAgICA8aXRlbT5OdW1lcmljPC9pdGVtPgorICAgICAgICA8aXRlbT5BbHBoYW51bWVyaWM8L2l0ZW0+CisgICAgPC9zdHJpbmctYXJyYXk+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IGJkY2I3YTcuLjNhYjkyM2IgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTIyOCw2ICsyMjgsMTAgQEAKICAgICA8IS0tICBhcHAvY29udGVudCBleGFtcGxlcyBzdHJpbmdzICAtLT4KICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfZXh0ZXJuYWxfc3RvcmFnZSI+Q29udGVudC9TdG9yYWdlL0V4dGVybmFsIFN0b3JhZ2U8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZSI+Q3JlYXRlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiPkRlbGV0ZTwvc3RyaW5nPgorICAgIAogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfc3R5bGVkX3RleHQiPkNvbnRlbnQvUmVzb3VyY2VzLzxpPlN0eWxlZDwvaT4gPGI+VGV4dDwvYj48L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0eWxlZF90ZXh0X3JzcmMiPkluaXRpYWxpemVkIGZyb20gYSByZXNvdXJjZTo8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0eWxlZF90ZXh0Ij5QbGFpbiwgPGI+Ym9sZDwvYj4sIDxpPml0YWxpYzwvaT4sIDxiPjxpPmJvbGQtaXRhbGljPC9pPjwvYj48L3N0cmluZz4KQEAgLTQzNCw2ICs0MzgsMzAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2ludGVudCI+SW50ZW50Ojwvc3RyaW5nPgogICAgIAogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorICAgIDwhLS0gIGFwcC9kZXZpY2UgcG9saWNpZXMgZXhhbXBsZXMgc3RyaW5ncyAgICAgLS0+CisgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgICAgCisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9zYW1wbGVfZGV2aWNlX2FkbWluIj5BcHAvRGV2aWNlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYW1wbGVfZGV2aWNlX2FkbWluIj5TYW1wbGUgRGV2aWNlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYW1wbGVfZGV2aWNlX2FkbWluX2Rlc2NyaXB0aW9uIj5TYW1wbGUgY29kZSBmb3Igd3JpdGluZworICAgICAgICBhIERldmljZUFkbWluIGNsYXNzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIFVJIChpbiBBcGlEZW1vcykKKyAgICAgICAgZm9yIHlvdSB0byBkaXJlY3RseSBjb250cm9sIHdoYXQgdGhlIERldmljZUFkbWluIGRvZXMgd2l0aCB0aGUKKyAgICAgICAgc3lzdGVtLjwvc3RyaW5nPgorICAgICAgICAKKyAgICA8c3RyaW5nIG5hbWU9InNhbXBsZV9kZXZpY2VfYWRtaW5fc3VtbWFyeSI+RGVtb25zdHJhdGlvbiBvZiBhIERldmljZUFkbWluCisgICAgICAgIGNsYXNzIGZvciBhZG1pbmlzdGVyaW5nIHRoZSB1c2VyXCdzIGRldmljZS48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hZG1pbiI+RW5hYmxlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNhYmxlX2FkbWluIj5EaXNhYmxlIEFkbWluPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9xdWFsaXR5Ij5QYXNzd29yZCBRdWFsaXR5PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9sZW5ndGhfaGludCI+TWluaW11bSBMZW5ndGg8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNldF9wYXNzd29yZCI+U2V0IFBhc3N3b3JkPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9oaW50Ij5QYXNzd29yZDwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzZXRfcGFzc3dvcmQiPlJlc2V0IFBhc3N3b3JkPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfZmFpbGVkX3B3X2hpbnQiPlBhc3N3b3JkIEF0dGVtcHRzIFdpcGUgRGF0YTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfbG9jayI+Rm9yY2UgTG9jazwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lwZV9kYXRhIj5XaXBlIERhdGE8L3N0cmluZz4KKyAgICAKKyAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8IS0tICBhcHAvdm9pY2UgcmVjb2duaXRpb24gZXhhbXBsZXMgc3RyaW5ncyAgLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3htbC9kZXZpY2VfYWRtaW5fc2FtcGxlLnhtbCBiL3NhbXBsZXMvQXBpRGVtb3MvcmVzL3htbC9kZXZpY2VfYWRtaW5fc2FtcGxlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQ2YzVmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9yZXMveG1sL2RldmljZV9hZG1pbl9zYW1wbGUueG1sCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8IS0tIEJFR0lOX0lOQ0xVREUobWV0YV9kYXRhKSAtLT4KKzxkZXZpY2UtYWRtaW4geG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKyAgICA8dXNlcy1wb2xpY2llcz4KKyAgICAgICAgPGxpbWl0LXBhc3N3b3JkIC8+CisgICAgICAgIDx3YXRjaC1sb2dpbiAvPgorICAgICAgICA8cmVzZXQtcGFzc3dvcmQgLz4KKyAgICAgICAgPGxpbWl0LXVubG9jayAvPgorICAgICAgICA8Zm9yY2UtbG9jayAvPgorICAgICAgICA8d2lwZS1kYXRhIC8+CisgICAgPC91c2VzLXBvbGljaWVzPgorPC9kZXZpY2UtYWRtaW4+Cis8IS0tIEVORF9JTkNMVURFKG1ldGFfZGF0YSkgLS0+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0RldmljZUFkbWluU2FtcGxlLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0RldmljZUFkbWluU2FtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5MWY1OAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRGV2aWNlQWRtaW5TYW1wbGUuamF2YQpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKKworaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOworaW1wb3J0IGFuZHJvaWQuYXBwLkRldmljZUFkbWluOworaW1wb3J0IGFuZHJvaWQuYXBwLkRldmljZVBvbGljeU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyOworCisvKioKKyAqIEV4YW1wbGUgb2YgYSBkby1ub3RoaW5nIGFkbWluIGNsYXNzLiAgV2hlbiBlbmFibGVkLCBpdCBsZXRzIHlvdSBjb250cm9sCisgKiBzb21lIG9mIGl0cyBwb2xpY3kgYW5kIHJlcG9ydHMgd2hlbiB0aGVyZSBpcyBpbnRlcmVzdGluZyBhY3Rpdml0eS4KKyAqLworcHVibGljIGNsYXNzIERldmljZUFkbWluU2FtcGxlIGV4dGVuZHMgRGV2aWNlQWRtaW4geworCisgICAgc3RhdGljIFNoYXJlZFByZWZlcmVuY2VzIGdldFNhbXBsZVByZWZlcmVuY2VzKENvbnRleHQgY29udGV4dCkgeworICAgICAgICByZXR1cm4gY29udGV4dC5nZXRTaGFyZWRQcmVmZXJlbmNlcyhEZXZpY2VBZG1pbi5jbGFzcy5nZXROYW1lKCksIDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RyaW5nIFBSRUZfUEFTU1dPUkRfUVVBTElUWSA9ICJwYXNzd29yZF9xdWFsaXR5IjsKKyAgICBzdGF0aWMgU3RyaW5nIFBSRUZfUEFTU1dPUkRfTEVOR1RIID0gInBhc3N3b3JkX2xlbmd0aCI7CisgICAgc3RhdGljIFN0cmluZyBQUkVGX01BWF9GQUlMRURfUFcgPSAibWF4X2ZhaWxlZF9wdyI7CisgICAgCisgICAgdm9pZCBzaG93VG9hc3QoQ29udGV4dCBjb250ZXh0LCBDaGFyU2VxdWVuY2UgbXNnKSB7CisgICAgICAgIFRvYXN0Lm1ha2VUZXh0KGNvbnRleHQsIG1zZywgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uRW5hYmxlZChDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc2hvd1RvYXN0KGNvbnRleHQsICJTYW1wbGUgRGV2aWNlIEFkbWluOiBlbmFibGVkIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIENoYXJTZXF1ZW5jZSBvbkRpc2FibGVSZXF1ZXN0ZWQoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHJldHVybiAiVGhpcyBpcyBhbiBvcHRpb25hbCBtZXNzYWdlIHRvIHdhcm4gdGhlIHVzZXIgYWJvdXQgZGlzYWJsaW5nLiI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EaXNhYmxlZChDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc2hvd1RvYXN0KGNvbnRleHQsICJTYW1wbGUgRGV2aWNlIEFkbWluOiBkaXNhYmxlZCIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUGFzc3dvcmRDaGFuZ2VkKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICBzaG93VG9hc3QoY29udGV4dCwgIlNhbXBsZSBEZXZpY2UgQWRtaW46IHB3IGNoYW5nZWQiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblBhc3N3b3JkRmFpbGVkKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICBzaG93VG9hc3QoY29udGV4dCwgIlNhbXBsZSBEZXZpY2UgQWRtaW46IHB3IGZhaWxlZCIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUGFzc3dvcmRTdWNjZWVkZWQoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIHNob3dUb2FzdChjb250ZXh0LCAiU2FtcGxlIERldmljZSBBZG1pbjogcHcgc3VjY2VlZGVkIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+VUkgY29udHJvbCBmb3IgdGhlIHNhbXBsZSBkZXZpY2UgYWRtaW4uICBUaGlzIHByb3ZpZGVzIGFuIGludGVyZmFjZQorICAgICAqIHRvIGVuYWJsZSwgZGlzYWJsZSwgYW5kIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucyB3aXRoIGl0IHRvIHNlZQorICAgICAqIHRoZWlyIGVmZmVjdC48L3A+CisgICAgICogCisgICAgICogPHA+Tm90ZSB0aGF0IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4gaW5uZXIgY2xhc3Mgb25seSBrZWVwIHRoZSBzYW1wbGUKKyAgICAgKiBhbGwgdG9nZXRoZXI7IHR5cGljYWxseSB0aGlzIGNvZGUgd291bGQgYXBwZWFyIGluIHNvbWUgc2VwYXJhdGUgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250cm9sbGVyIGV4dGVuZHMgQWN0aXZpdHkgeworICAgICAgICBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9FTkFCTEUgPSAxOworICAgICAgICAKKyAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlciBtRFBNOworICAgICAgICBBY3Rpdml0eU1hbmFnZXIgbUFNOworICAgICAgICBDb21wb25lbnROYW1lIG1EZXZpY2VBZG1pblNhbXBsZTsKKyAgICAgICAgCisgICAgICAgIEJ1dHRvbiBtRW5hYmxlQnV0dG9uOworICAgICAgICBCdXR0b24gbURpc2FibGVCdXR0b247CisgICAgICAgIAorICAgICAgICAvLyBQYXNzd29yZCBxdWFsaXR5IHNwaW5uZXIgY2hvaWNlcworICAgICAgICAvLyBUaGlzIGxpc3QgbXVzdCBtYXRjaCB0aGUgbGlzdCBmb3VuZCBpbiBzYW1wbGVzL0FwaURlbW9zL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAorICAgICAgICBmaW5hbCBzdGF0aWMgaW50IG1QYXNzd29yZFF1YWxpdHlWYWx1ZXNbXSA9IG5ldyBpbnRbXSB7CisgICAgICAgICAgICBEZXZpY2VQb2xpY3lNYW5hZ2VyLlBBU1NXT1JEX1FVQUxJVFlfVU5TUEVDSUZJRUQsCisgICAgICAgICAgICBEZXZpY2VQb2xpY3lNYW5hZ2VyLlBBU1NXT1JEX1FVQUxJVFlfU09NRVRISU5HLAorICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX05VTUVSSUMsCisgICAgICAgICAgICBEZXZpY2VQb2xpY3lNYW5hZ2VyLlBBU1NXT1JEX1FVQUxJVFlfQUxQSEFOVU1FUklDCisgICAgICAgIH07CisgICAgICAgIFNwaW5uZXIgbVBhc3N3b3JkUXVhbGl0eTsKKyAgICAgICAgRWRpdFRleHQgbVBhc3N3b3JkTGVuZ3RoOworICAgICAgICBCdXR0b24gbVNldFBhc3N3b3JkQnV0dG9uOworICAgICAgICAKKyAgICAgICAgRWRpdFRleHQgbVBhc3N3b3JkOworICAgICAgICBCdXR0b24gbVJlc2V0UGFzc3dvcmRCdXR0b247CisgICAgICAgIAorICAgICAgICBFZGl0VGV4dCBtTWF4RmFpbGVkUHc7CisgICAgICAgIAorICAgICAgICBCdXR0b24gbUZvcmNlTG9ja0J1dHRvbjsKKyAgICAgICAgQnV0dG9uIG1XaXBlRGF0YUJ1dHRvbjsKKyAgICAgICAgCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgICAgICBtRFBNID0gKERldmljZVBvbGljeU1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkRFVklDRV9QT0xJQ1lfU0VSVklDRSk7CisgICAgICAgICAgICBtQU0gPSAoQWN0aXZpdHlNYW5hZ2VyKWdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BQ1RJVklUWV9TRVJWSUNFKTsKKyAgICAgICAgICAgIG1EZXZpY2VBZG1pblNhbXBsZSA9IG5ldyBDb21wb25lbnROYW1lKENvbnRyb2xsZXIudGhpcywgRGV2aWNlQWRtaW5TYW1wbGUuY2xhc3MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5kZXZpY2VfYWRtaW5fc2FtcGxlKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBtRW5hYmxlQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5lbmFibGUpOworICAgICAgICAgICAgbUVuYWJsZUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUVuYWJsZUxpc3RlbmVyKTsKKyAgICAgICAgICAgIG1EaXNhYmxlQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5kaXNhYmxlKTsKKyAgICAgICAgICAgIG1EaXNhYmxlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtRGlzYWJsZUxpc3RlbmVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbVBhc3N3b3JkUXVhbGl0eSA9IChTcGlubmVyKWZpbmRWaWV3QnlJZChSLmlkLnBhc3N3b3JkX3F1YWxpdHkpOworICAgICAgICAgICAgQXJyYXlBZGFwdGVyPENoYXJTZXF1ZW5jZT4gYWRhcHRlciA9IEFycmF5QWRhcHRlci5jcmVhdGVGcm9tUmVzb3VyY2UoCisgICAgICAgICAgICAgICAgICAgIHRoaXMsIFIuYXJyYXkucGFzc3dvcmRfcXVhbGl0aWVzLCBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9zcGlubmVyX2l0ZW0pOworICAgICAgICAgICAgYWRhcHRlci5zZXREcm9wRG93blZpZXdSZXNvdXJjZShhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9zcGlubmVyX2Ryb3Bkb3duX2l0ZW0pOworICAgICAgICAgICAgbVBhc3N3b3JkUXVhbGl0eS5zZXRBZGFwdGVyKGFkYXB0ZXIpOworICAgICAgICAgICAgbVBhc3N3b3JkUXVhbGl0eS5zZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKAorICAgICAgICAgICAgICAgICAgICBuZXcgT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVNlbGVjdGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyVmlldzw/PiBwYXJlbnQsIFZpZXcgdmlldywgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFzc3dvcmRRdWFsaXR5KG1QYXNzd29yZFF1YWxpdHlWYWx1ZXNbcG9zaXRpb25dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25Ob3RoaW5nU2VsZWN0ZWQoQWRhcHRlclZpZXc8Pz4gcGFyZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFzc3dvcmRRdWFsaXR5KERldmljZVBvbGljeU1hbmFnZXIuUEFTU1dPUkRfUVVBTElUWV9VTlNQRUNJRklFRCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbVBhc3N3b3JkTGVuZ3RoID0gKEVkaXRUZXh0KWZpbmRWaWV3QnlJZChSLmlkLnBhc3N3b3JkX2xlbmd0aCk7CisgICAgICAgICAgICBtUGFzc3dvcmRMZW5ndGguYWRkVGV4dENoYW5nZWRMaXN0ZW5lcihuZXcgVGV4dFdhdGNoZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYWZ0ZXJUZXh0Q2hhbmdlZChFZGl0YWJsZSBzKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGJlZm9yZVRleHRDaGFuZ2VkKENoYXJTZXF1ZW5jZSBzLCBpbnQgc3RhcnQsIGludCBjb3VudCwgaW50IGFmdGVyKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGJlZm9yZSwgaW50IGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYXNzd29yZExlbmd0aChJbnRlZ2VyLnBhcnNlSW50KHMudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtU2V0UGFzc3dvcmRCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnNldF9wYXNzd29yZCk7CisgICAgICAgICAgICBtU2V0UGFzc3dvcmRCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TZXRQYXNzd29yZExpc3RlbmVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbVBhc3N3b3JkID0gKEVkaXRUZXh0KWZpbmRWaWV3QnlJZChSLmlkLnBhc3N3b3JkKTsKKyAgICAgICAgICAgIG1SZXNldFBhc3N3b3JkQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5yZXNldF9wYXNzd29yZCk7CisgICAgICAgICAgICBtUmVzZXRQYXNzd29yZEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVJlc2V0UGFzc3dvcmRMaXN0ZW5lcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1NYXhGYWlsZWRQdyA9IChFZGl0VGV4dClmaW5kVmlld0J5SWQoUi5pZC5tYXhfZmFpbGVkX3B3KTsKKyAgICAgICAgICAgIG1NYXhGYWlsZWRQdy5hZGRUZXh0Q2hhbmdlZExpc3RlbmVyKG5ldyBUZXh0V2F0Y2hlcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhZnRlclRleHRDaGFuZ2VkKEVkaXRhYmxlIHMpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYmVmb3JlVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGNvdW50LCBpbnQgYWZ0ZXIpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25UZXh0Q2hhbmdlZChDaGFyU2VxdWVuY2UgcywgaW50IHN0YXJ0LCBpbnQgYmVmb3JlLCBpbnQgY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhGYWlsQ291bnQgPSBJbnRlZ2VyLnBhcnNlSW50KHMudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4RmFpbENvdW50ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KENvbnRyb2xsZXIudGhpcywgIldBUk5JTkc6IFBob25lIHdpbGwgd2lwZSBhZnRlciAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgKyAiIGluY29ycmVjdCBwYXNzd29yZHMiLCBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldE1heEZhaWxlZFB3KG1heEZhaWxDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbUZvcmNlTG9ja0J1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZm9yY2VfbG9jayk7CisgICAgICAgICAgICBtRm9yY2VMb2NrQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtRm9yY2VMb2NrTGlzdGVuZXIpOworICAgICAgICAgICAgbVdpcGVEYXRhQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC53aXBlX2RhdGEpOworICAgICAgICAgICAgbVdpcGVEYXRhQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtV2lwZURhdGFMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHVwZGF0ZUJ1dHRvblN0YXRlcygpIHsKKyAgICAgICAgICAgIGJvb2xlYW4gYWN0aXZlID0gbURQTS5pc0FkbWluQWN0aXZlKG1EZXZpY2VBZG1pblNhbXBsZSk7CisgICAgICAgICAgICBpZiAoYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgbUVuYWJsZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtRGlzYWJsZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIG1QYXNzd29yZFF1YWxpdHkuc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtUGFzc3dvcmRMZW5ndGguc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtU2V0UGFzc3dvcmRCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtUGFzc3dvcmQuc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtUmVzZXRQYXNzd29yZEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIG1Gb3JjZUxvY2tCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtV2lwZURhdGFCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbUVuYWJsZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgIG1EaXNhYmxlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1QYXNzd29yZFF1YWxpdHkuc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbVBhc3N3b3JkTGVuZ3RoLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1TZXRQYXNzd29yZEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtUGFzc3dvcmQuc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbVJlc2V0UGFzc3dvcmRCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbUZvcmNlTG9ja0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtV2lwZURhdGFCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgdXBkYXRlQ29udHJvbHMoKSB7CisgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcyA9IGdldFNhbXBsZVByZWZlcmVuY2VzKHRoaXMpOworICAgICAgICAgICAgZmluYWwgaW50IHB3UXVhbGl0eSA9IHByZWZzLmdldEludChQUkVGX1BBU1NXT1JEX1FVQUxJVFksCisgICAgICAgICAgICAgICAgICAgIERldmljZVBvbGljeU1hbmFnZXIuUEFTU1dPUkRfUVVBTElUWV9VTlNQRUNJRklFRCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgcHdMZW5ndGggPSBwcmVmcy5nZXRJbnQoUFJFRl9QQVNTV09SRF9MRU5HVEgsIDApOworICAgICAgICAgICAgZmluYWwgaW50IG1heEZhaWxlZFB3ID0gcHJlZnMuZ2V0SW50KFBSRUZfTUFYX0ZBSUxFRF9QVywgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtUGFzc3dvcmRRdWFsaXR5VmFsdWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1QYXNzd29yZFF1YWxpdHlWYWx1ZXNbaV0gPT0gcHdRdWFsaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIG1QYXNzd29yZFF1YWxpdHkuc2V0U2VsZWN0aW9uKGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1QYXNzd29yZExlbmd0aC5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcocHdMZW5ndGgpKTsKKyAgICAgICAgICAgIG1NYXhGYWlsZWRQdy5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcobWF4RmFpbGVkUHcpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB1cGRhdGVQb2xpY2llcygpIHsKKyAgICAgICAgICAgIFNoYXJlZFByZWZlcmVuY2VzIHByZWZzID0gZ2V0U2FtcGxlUHJlZmVyZW5jZXModGhpcyk7CisgICAgICAgICAgICBmaW5hbCBpbnQgcHdRdWFsaXR5ID0gcHJlZnMuZ2V0SW50KFBSRUZfUEFTU1dPUkRfUVVBTElUWSwKKyAgICAgICAgICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVEKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBwd0xlbmd0aCA9IHByZWZzLmdldEludChQUkVGX1BBU1NXT1JEX0xFTkdUSCwgMCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbWF4RmFpbGVkUHcgPSBwcmVmcy5nZXRJbnQoUFJFRl9NQVhfRkFJTEVEX1BXLCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbGVhbiBhY3RpdmUgPSBtRFBNLmlzQWRtaW5BY3RpdmUobURldmljZUFkbWluU2FtcGxlKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBtRFBNLnNldFBhc3N3b3JkUXVhbGl0eShtRGV2aWNlQWRtaW5TYW1wbGUsIHB3UXVhbGl0eSk7CisgICAgICAgICAgICAgICAgbURQTS5zZXRQYXNzd29yZE1pbmltdW1MZW5ndGgobURldmljZUFkbWluU2FtcGxlLCBwd0xlbmd0aCk7CisgICAgICAgICAgICAgICAgbURQTS5zZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShtRGV2aWNlQWRtaW5TYW1wbGUsIG1heEZhaWxlZFB3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRQYXNzd29yZFF1YWxpdHkoaW50IHF1YWxpdHkpIHsKKyAgICAgICAgICAgIFNoYXJlZFByZWZlcmVuY2VzIHByZWZzID0gZ2V0U2FtcGxlUHJlZmVyZW5jZXModGhpcyk7CisgICAgICAgICAgICBwcmVmcy5lZGl0KCkucHV0SW50KFBSRUZfUEFTU1dPUkRfUVVBTElUWSwgcXVhbGl0eSkuY29tbWl0KCk7CisgICAgICAgICAgICB1cGRhdGVQb2xpY2llcygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldFBhc3N3b3JkTGVuZ3RoKGludCBsZW5ndGgpIHsKKyAgICAgICAgICAgIFNoYXJlZFByZWZlcmVuY2VzIHByZWZzID0gZ2V0U2FtcGxlUHJlZmVyZW5jZXModGhpcyk7CisgICAgICAgICAgICBwcmVmcy5lZGl0KCkucHV0SW50KFBSRUZfUEFTU1dPUkRfTEVOR1RILCBsZW5ndGgpLmNvbW1pdCgpOworICAgICAgICAgICAgdXBkYXRlUG9saWNpZXMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRNYXhGYWlsZWRQdyhpbnQgbGVuZ3RoKSB7CisgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcyBwcmVmcyA9IGdldFNhbXBsZVByZWZlcmVuY2VzKHRoaXMpOworICAgICAgICAgICAgcHJlZnMuZWRpdCgpLnB1dEludChQUkVGX01BWF9GQUlMRURfUFcsIGxlbmd0aCkuY29tbWl0KCk7CisgICAgICAgICAgICB1cGRhdGVQb2xpY2llcygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICAgICAgdXBkYXRlQnV0dG9uU3RhdGVzKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgZGF0YSkgeworICAgICAgICAgICAgc3dpdGNoIChyZXF1ZXN0Q29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgUkVTVUxUX0VOQUJMRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdENvZGUgPT0gQWN0aXZpdHkuUkVTVUxUX09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuaSgiRGV2aWNlQWRtaW5TYW1wbGUiLCAiQWRtaW4gZW5hYmxlZCEiKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKCJEZXZpY2VBZG1pblNhbXBsZSIsICJBZG1pbiBlbmFibGUgRkFJTEVEISIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3VwZXIub25BY3Rpdml0eVJlc3VsdChyZXF1ZXN0Q29kZSwgcmVzdWx0Q29kZSwgZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtRW5hYmxlTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBMYXVuY2ggdGhlIGFjdGl2aXR5IHRvIGhhdmUgdGhlIHVzZXIgZW5hYmxlIG91ciBhZG1pbi4KKyAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChEZXZpY2VQb2xpY3lNYW5hZ2VyLkFDVElPTl9BRERfREVWSUNFX0FETUlOKTsKKyAgICAgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoRGV2aWNlUG9saWN5TWFuYWdlci5FWFRSQV9ERVZJQ0VfQURNSU4sCisgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlQWRtaW5TYW1wbGUpOworICAgICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShEZXZpY2VQb2xpY3lNYW5hZ2VyLkVYVFJBX0FERF9FWFBMQU5BVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBZGRpdGlvbmFsIHRleHQgZXhwbGFpbmluZyB3aHkgdGhpcyBuZWVkcyB0byBiZSBhZGRlZC4iKTsKKyAgICAgICAgICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGludGVudCwgUkVTVUxUX0VOQUJMRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbURpc2FibGVMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIG1EUE0ucmVtb3ZlQWN0aXZlQWRtaW4obURldmljZUFkbWluU2FtcGxlKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVCdXR0b25TdGF0ZXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU2V0UGFzc3dvcmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIC8vIExhdW5jaCB0aGUgYWN0aXZpdHkgdG8gaGF2ZSB0aGUgdXNlciBzZXQgYSBuZXcgcGFzc3dvcmQuCisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoRGV2aWNlUG9saWN5TWFuYWdlci5BQ1RJT05fU0VUX05FV19QQVNTV09SRCk7CisgICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1SZXNldFBhc3N3b3JkTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFNLmlzVXNlckFNb25rZXkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCB0cnVzdCBtb25rZXlzIHRvIGRvIHRoZSByaWdodCB0aGluZyEKKyAgICAgICAgICAgICAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoQ29udHJvbGxlci50aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRNZXNzYWdlKCJZb3UgY2FuJ3QgcmVzZXQgbXkgcGFzc3dvcmQgYmVjYXVzZSB5b3UgYXJlIGEgbW9ua2V5ISIpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNldFBvc2l0aXZlQnV0dG9uKCJJIGFkbWl0IGRlZmVhdCIsIG51bGwpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib29sZWFuIGFjdGl2ZSA9IG1EUE0uaXNBZG1pbkFjdGl2ZShtRGV2aWNlQWRtaW5TYW1wbGUpOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgbURQTS5yZXNldFBhc3N3b3JkKG1QYXNzd29yZC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1Gb3JjZUxvY2tMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIGlmIChtQU0uaXNVc2VyQU1vbmtleSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHRydXN0IG1vbmtleXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIQorICAgICAgICAgICAgICAgICAgICBBbGVydERpYWxvZy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihDb250cm9sbGVyLnRoaXMpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNldE1lc3NhZ2UoIllvdSBjYW4ndCBsb2NrIG15IHNjcmVlbiBiZWNhdXNlIHlvdSBhcmUgYSBtb25rZXkhIik7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UG9zaXRpdmVCdXR0b24oIkkgYWRtaXQgZGVmZWF0IiwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2hvdygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2xlYW4gYWN0aXZlID0gbURQTS5pc0FkbWluQWN0aXZlKG1EZXZpY2VBZG1pblNhbXBsZSk7CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICBtRFBNLmxvY2tOb3coKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVdpcGVEYXRhTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFNLmlzVXNlckFNb25rZXkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCB0cnVzdCBtb25rZXlzIHRvIGRvIHRoZSByaWdodCB0aGluZyEKKyAgICAgICAgICAgICAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoQ29udHJvbGxlci50aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRNZXNzYWdlKCJZb3UgY2FuJ3Qgd2lwZSBteSBkYXRhIGJlY2F1c2UgeW91IGFyZSBhIG1vbmtleSEiKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRQb3NpdGl2ZUJ1dHRvbigiSSBhZG1pdCBkZWZlYXQiLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoQ29udHJvbGxlci50aGlzKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNldE1lc3NhZ2UoIlRoaXMgd2lsbCBlcmFzZSBhbGwgb2YgeW91ciBkYXRhLiAgQXJlIHlvdSBzdXJlPyIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UG9zaXRpdmVCdXR0b24oIlllcyIsIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoQ29udHJvbGxlci50aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TWVzc2FnZSgiVGhpcyBpcyBub3QgYSB0ZXN0LiAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJUaGlzIFdJTEwgZXJhc2UgYWxsIG9mIHlvdXIgZGF0YSEgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiQXJlIHlvdSByZWFsbHkgYWJzb2x1dGVseSBzdXJlPyIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRQb3NpdGl2ZUJ1dHRvbigiQk9PTSEiLCBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFjdGl2ZSA9IG1EUE0uaXNBZG1pbkFjdGl2ZShtRGV2aWNlQWRtaW5TYW1wbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRFBNLndpcGVEYXRhKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnNldE5lZ2F0aXZlQnV0dG9uKCJPb3BzLCBydW4gYXdheSEiLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2hvdygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5zZXROZWdhdGl2ZUJ1dHRvbigiTm8gd2F5ISIsIG51bGwpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2hvdygpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRm9yZWdyb3VuZFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRm9yZWdyb3VuZFNlcnZpY2UuamF2YQppbmRleCAyNzcwOGY0Li5jN2EyZGZiIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0ZvcmVncm91bmRTZXJ2aWNlLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Gb3JlZ3JvdW5kU2VydmljZS5qYXZhCkBAIC0xNiwxMyArMTYsMTggQEAKIAogcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwogCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwpAQCAtNDMsNiArNDgsNyBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0ZPUkVHUk9VTkQgPSAiY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLkZPUkVHUk9VTkQiOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0JBQ0tHUk9VTkQgPSAiY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLkJBQ0tHUk9VTkQiOwogICAgIAorIC8vIEJFR0lOX0lOQ0xVREUoZm9yZWdyb3VuZF9jb21wYXRpYmlsaXR5KQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzW10gbVN0YXJ0Rm9yZWdyb3VuZFNpZ25hdHVyZSA9IG5ldyBDbGFzc1tdIHsKICAgICAgICAgaW50LmNsYXNzLCBOb3RpZmljYXRpb24uY2xhc3N9OwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzW10gbVN0b3BGb3JlZ3JvdW5kU2lnbmF0dXJlID0gbmV3IENsYXNzW10gewpAQCAtNTQsNjAgKzYwLDYgQEAKICAgICBwcml2YXRlIE9iamVjdFtdIG1TdGFydEZvcmVncm91bmRBcmdzID0gbmV3IE9iamVjdFsyXTsKICAgICBwcml2YXRlIE9iamVjdFtdIG1TdG9wRm9yZWdyb3VuZEFyZ3MgPSBuZXcgT2JqZWN0WzFdOwogICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKCkgewotICAgICAgICBtTk0gPSAoTm90aWZpY2F0aW9uTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKE5PVElGSUNBVElPTl9TRVJWSUNFKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TdGFydEZvcmVncm91bmQgPSBnZXRDbGFzcygpLmdldE1ldGhvZCgic3RhcnRGb3JlZ3JvdW5kIiwKLSAgICAgICAgICAgICAgICAgICAgbVN0YXJ0Rm9yZWdyb3VuZFNpZ25hdHVyZSk7Ci0gICAgICAgICAgICBtU3RvcEZvcmVncm91bmQgPSBnZXRDbGFzcygpLmdldE1ldGhvZCgic3RvcEZvcmVncm91bmQiLAotICAgICAgICAgICAgICAgICAgICBtU3RvcEZvcmVncm91bmRTaWduYXR1cmUpOwotICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gUnVubmluZyBvbiBhbiBvbGRlciBwbGF0Zm9ybS4KLSAgICAgICAgICAgIG1TdGFydEZvcmVncm91bmQgPSBtU3RvcEZvcmVncm91bmQgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhpcyBpcyB0aGUgb2xkIG9uU3RhcnQgbWV0aG9kIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gdGhlIHByZS0yLjAKLSAgICAvLyBwbGF0Zm9ybS4gIE9uIDIuMCBvciBsYXRlciB3ZSBvdmVycmlkZSBvblN0YXJ0Q29tbWFuZCgpIHNvIHRoaXMKLSAgICAvLyBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkLgotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3RhcnQoSW50ZW50IGludGVudCwgaW50IHN0YXJ0SWQpIHsKLSAgICAgICAgaGFuZGxlQ29tbWFuZChpbnRlbnQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgb25TdGFydENvbW1hbmQoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgc3RhcnRJZCkgewotICAgICAgICBoYW5kbGVDb21tYW5kKGludGVudCk7Ci0gICAgICAgIC8vIFdlIHdhbnQgdGhpcyBzZXJ2aWNlIHRvIGNvbnRpbnVlIHJ1bm5pbmcgdW50aWwgaXQgaXMgZXhwbGljaXRseQotICAgICAgICAvLyBzdG9wcGVkLCBzbyByZXR1cm4gc3RpY2t5LgotICAgICAgICByZXR1cm4gU1RBUlRfU1RJQ0tZOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlQ29tbWFuZChJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGlmIChBQ1RJT05fRk9SRUdST1VORC5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgewotICAgICAgICAgICAgLy8gSW4gdGhpcyBzYW1wbGUsIHdlJ2xsIHVzZSB0aGUgc2FtZSB0ZXh0IGZvciB0aGUgdGlja2VyIGFuZCB0aGUgZXhwYW5kZWQgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICBDaGFyU2VxdWVuY2UgdGV4dCA9IGdldFRleHQoUi5zdHJpbmcuZm9yZWdyb3VuZF9zZXJ2aWNlX3N0YXJ0ZWQpOwotCi0gICAgICAgICAgICAvLyBTZXQgdGhlIGljb24sIHNjcm9sbGluZyB0ZXh0IGFuZCB0aW1lc3RhbXAKLSAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKFIuZHJhd2FibGUuc3RhdF9zYW1wbGUsIHRleHQsCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKLQotICAgICAgICAgICAgLy8gVGhlIFBlbmRpbmdJbnRlbnQgdG8gbGF1bmNoIG91ciBhY3Rpdml0eSBpZiB0aGUgdXNlciBzZWxlY3RzIHRoaXMgbm90aWZpY2F0aW9uCi0gICAgICAgICAgICBQZW5kaW5nSW50ZW50IGNvbnRlbnRJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KHRoaXMsIDAsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQodGhpcywgRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLmNsYXNzKSwgMCk7Ci0KLSAgICAgICAgICAgIC8vIFNldCB0aGUgaW5mbyBmb3IgdGhlIHZpZXdzIHRoYXQgc2hvdyBpbiB0aGUgbm90aWZpY2F0aW9uIHBhbmVsLgotICAgICAgICAgICAgbm90aWZpY2F0aW9uLnNldExhdGVzdEV2ZW50SW5mbyh0aGlzLCBnZXRUZXh0KFIuc3RyaW5nLmxvY2FsX3NlcnZpY2VfbGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwgY29udGVudEludGVudCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0YXJ0Rm9yZWdyb3VuZENvbXBhdChSLnN0cmluZy5mb3JlZ3JvdW5kX3NlcnZpY2Vfc3RhcnRlZCwgbm90aWZpY2F0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKEFDVElPTl9CQUNLR1JPVU5ELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzdG9wRm9yZWdyb3VuZENvbXBhdChSLnN0cmluZy5mb3JlZ3JvdW5kX3NlcnZpY2Vfc3RhcnRlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgLyoqCiAgICAgICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBuZXcgc3RhcnRGb3JlZ3JvdW5kIG1ldGhvZCwgdXNpbmcgdGhlIG9sZGVyCiAgICAgICogQVBJcyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLgpAQCAtMTYxLDEzICsxMTMsMTE4IEBACiAgICAgfQogICAgIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKCkgeworICAgICAgICBtTk0gPSAoTm90aWZpY2F0aW9uTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKE5PVElGSUNBVElPTl9TRVJWSUNFKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TdGFydEZvcmVncm91bmQgPSBnZXRDbGFzcygpLmdldE1ldGhvZCgic3RhcnRGb3JlZ3JvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgbVN0YXJ0Rm9yZWdyb3VuZFNpZ25hdHVyZSk7CisgICAgICAgICAgICBtU3RvcEZvcmVncm91bmQgPSBnZXRDbGFzcygpLmdldE1ldGhvZCgic3RvcEZvcmVncm91bmQiLAorICAgICAgICAgICAgICAgICAgICBtU3RvcEZvcmVncm91bmRTaWduYXR1cmUpOworICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gUnVubmluZyBvbiBhbiBvbGRlciBwbGF0Zm9ybS4KKyAgICAgICAgICAgIG1TdGFydEZvcmVncm91bmQgPSBtU3RvcEZvcmVncm91bmQgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25EZXN0cm95KCkgewogICAgICAgICAvLyBNYWtlIHN1cmUgb3VyIG5vdGlmaWNhdGlvbiBpcyBnb25lLgogICAgICAgICBzdG9wRm9yZWdyb3VuZENvbXBhdChSLnN0cmluZy5mb3JlZ3JvdW5kX3NlcnZpY2Vfc3RhcnRlZCk7CiAgICAgfQorLy8gRU5EX0lOQ0xVREUoZm9yZWdyb3VuZF9jb21wYXRpYmlsaXR5KQogCisvLyBCRUdJTl9JTkNMVURFKHN0YXJ0X2NvbXBhdGliaWxpdHkpCisgICAgLy8gVGhpcyBpcyB0aGUgb2xkIG9uU3RhcnQgbWV0aG9kIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gdGhlIHByZS0yLjAKKyAgICAvLyBwbGF0Zm9ybS4gIE9uIDIuMCBvciBsYXRlciB3ZSBvdmVycmlkZSBvblN0YXJ0Q29tbWFuZCgpIHNvIHRoaXMKKyAgICAvLyBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkLgorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU3RhcnQoSW50ZW50IGludGVudCwgaW50IHN0YXJ0SWQpIHsKKyAgICAgICAgaGFuZGxlQ29tbWFuZChpbnRlbnQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgb25TdGFydENvbW1hbmQoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgc3RhcnRJZCkgeworICAgICAgICBoYW5kbGVDb21tYW5kKGludGVudCk7CisgICAgICAgIC8vIFdlIHdhbnQgdGhpcyBzZXJ2aWNlIHRvIGNvbnRpbnVlIHJ1bm5pbmcgdW50aWwgaXQgaXMgZXhwbGljaXRseQorICAgICAgICAvLyBzdG9wcGVkLCBzbyByZXR1cm4gc3RpY2t5LgorICAgICAgICByZXR1cm4gU1RBUlRfU1RJQ0tZOworICAgIH0KKy8vIEVORF9JTkNMVURFKHN0YXJ0X2NvbXBhdGliaWxpdHkpCisKKyAgICB2b2lkIGhhbmRsZUNvbW1hbmQoSW50ZW50IGludGVudCkgeworICAgICAgICBpZiAoQUNUSU9OX0ZPUkVHUk9VTkQuZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgc2FtcGxlLCB3ZSdsbCB1c2UgdGhlIHNhbWUgdGV4dCBmb3IgdGhlIHRpY2tlciBhbmQgdGhlIGV4cGFuZGVkIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHRleHQgPSBnZXRUZXh0KFIuc3RyaW5nLmZvcmVncm91bmRfc2VydmljZV9zdGFydGVkKTsKKworICAgICAgICAgICAgLy8gU2V0IHRoZSBpY29uLCBzY3JvbGxpbmcgdGV4dCBhbmQgdGltZXN0YW1wCisgICAgICAgICAgICBOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbihSLmRyYXdhYmxlLnN0YXRfc2FtcGxlLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBQZW5kaW5nSW50ZW50IHRvIGxhdW5jaCBvdXIgYWN0aXZpdHkgaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGlzIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgUGVuZGluZ0ludGVudCBjb250ZW50SW50ZW50ID0gUGVuZGluZ0ludGVudC5nZXRBY3Rpdml0eSh0aGlzLCAwLAorICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50KHRoaXMsIENvbnRyb2xsZXIuY2xhc3MpLCAwKTsKKworICAgICAgICAgICAgLy8gU2V0IHRoZSBpbmZvIGZvciB0aGUgdmlld3MgdGhhdCBzaG93IGluIHRoZSBub3RpZmljYXRpb24gcGFuZWwuCisgICAgICAgICAgICBub3RpZmljYXRpb24uc2V0TGF0ZXN0RXZlbnRJbmZvKHRoaXMsIGdldFRleHQoUi5zdHJpbmcubG9jYWxfc2VydmljZV9sYWJlbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LCBjb250ZW50SW50ZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhcnRGb3JlZ3JvdW5kQ29tcGF0KFIuc3RyaW5nLmZvcmVncm91bmRfc2VydmljZV9zdGFydGVkLCBub3RpZmljYXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAoQUNUSU9OX0JBQ0tHUk9VTkQuZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIHN0b3BGb3JlZ3JvdW5kQ29tcGF0KFIuc3RyaW5nLmZvcmVncm91bmRfc2VydmljZV9zdGFydGVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgSUJpbmRlciBvbkJpbmQoSW50ZW50IGludGVudCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CisgICAgCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogPHA+RXhhbXBsZSBvZiBleHBsaWNpdGx5IHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUge0BsaW5rIEZvcmVncm91bmRTZXJ2aWNlfS4KKyAgICAgKiAKKyAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBpbm5lciBjbGFzcyBvbmx5IGtlZXAgdGhlIHNhbXBsZQorICAgICAqIGFsbCB0b2dldGhlcjsgdHlwaWNhbGx5IHRoaXMgY29kZSB3b3VsZCBhcHBlYXIgaW4gc29tZSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5mb3JlZ3JvdW5kX3NlcnZpY2VfY29udHJvbGxlcik7CisKKyAgICAgICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgorICAgICAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRfZm9yZWdyb3VuZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1Gb3JlZ3JvdW5kTGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydF9iYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJhY2tncm91bmRMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0b3ApOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RvcExpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1Gb3JlZ3JvdW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChGb3JlZ3JvdW5kU2VydmljZS5BQ1RJT05fRk9SRUdST1VORCk7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldENsYXNzKENvbnRyb2xsZXIudGhpcywgRm9yZWdyb3VuZFNlcnZpY2UuY2xhc3MpOworICAgICAgICAgICAgICAgIHN0YXJ0U2VydmljZShpbnRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1CYWNrZ3JvdW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChGb3JlZ3JvdW5kU2VydmljZS5BQ1RJT05fQkFDS0dST1VORCk7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldENsYXNzKENvbnRyb2xsZXIudGhpcywgRm9yZWdyb3VuZFNlcnZpY2UuY2xhc3MpOworICAgICAgICAgICAgICAgIHN0YXJ0U2VydmljZShpbnRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdG9wTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBzdG9wU2VydmljZShuZXcgSW50ZW50KENvbnRyb2xsZXIudGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmVncm91bmRTZXJ2aWNlLmNsYXNzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Gb3JlZ3JvdW5kU2VydmljZUNvbnRyb2xsZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YTZlZjMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Gb3JlZ3JvdW5kU2VydmljZUNvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7Ci0KLS8vIE5lZWQgdGhlIGZvbGxvd2luZyBpbXBvcnQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgYXBwIHJlc291cmNlcywgc2luY2UgdGhpcwotLy8gY2xhc3MgaXMgaW4gYSBzdWItcGFja2FnZS4KLWltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLQotCi0vKioKLSAqIDxwPkV4YW1wbGUgb2YgZXhwbGljaXRseSBzdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIHtAbGluayBGb3JlZ3JvdW5kU2VydmljZX0uCi0gKi8KLXB1YmxpYyBjbGFzcyBGb3JlZ3JvdW5kU2VydmljZUNvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmZvcmVncm91bmRfc2VydmljZV9jb250cm9sbGVyKTsKLQotICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KLSAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRfZm9yZWdyb3VuZCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUZvcmVncm91bmRMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnRfYmFja2dyb3VuZCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJhY2tncm91bmRMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RvcCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BMaXN0ZW5lcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUZvcmVncm91bmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChGb3JlZ3JvdW5kU2VydmljZS5BQ1RJT05fRk9SRUdST1VORCk7Ci0gICAgICAgICAgICBpbnRlbnQuc2V0Q2xhc3MoRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLnRoaXMsIEZvcmVncm91bmRTZXJ2aWNlLmNsYXNzKTsKLSAgICAgICAgICAgIHN0YXJ0U2VydmljZShpbnRlbnQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1CYWNrZ3JvdW5kTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoRm9yZWdyb3VuZFNlcnZpY2UuQUNUSU9OX0JBQ0tHUk9VTkQpOwotICAgICAgICAgICAgaW50ZW50LnNldENsYXNzKEZvcmVncm91bmRTZXJ2aWNlQ29udHJvbGxlci50aGlzLCBGb3JlZ3JvdW5kU2VydmljZS5jbGFzcyk7Ci0gICAgICAgICAgICBzdGFydFNlcnZpY2UoaW50ZW50KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RvcExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIHN0b3BTZXJ2aWNlKG5ldyBJbnRlbnQoRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLnRoaXMsCi0gICAgICAgICAgICAgICAgICAgIEZvcmVncm91bmRTZXJ2aWNlLmNsYXNzKSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xhdW5jaGluZ1ByZWZlcmVuY2VzLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xhdW5jaGluZ1ByZWZlcmVuY2VzLmphdmEKaW5kZXggYWExNTFmZS4uNGFhMTUyMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9MYXVuY2hpbmdQcmVmZXJlbmNlcy5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTGF1bmNoaW5nUHJlZmVyZW5jZXMuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0LkxheW91dFBhcmFtczsKIAogLyoqCkBAIC02MywxMSArNjIsMTEgQEAKICAgICAgICAgQnV0dG9uIGxhdW5jaFByZWZlcmVuY2VzID0gbmV3IEJ1dHRvbih0aGlzKTsKICAgICAgICAgbGF1bmNoUHJlZmVyZW5jZXMuc2V0VGV4dChnZXRTdHJpbmcoUi5zdHJpbmcubGF1bmNoX3ByZWZlcmVuY2VfYWN0aXZpdHkpKTsKICAgICAgICAgbGF1bmNoUHJlZmVyZW5jZXMuc2V0T25DbGlja0xpc3RlbmVyKHRoaXMpOwotICAgICAgICBsYXlvdXQuYWRkVmlldyhsYXVuY2hQcmVmZXJlbmNlcywgbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgIGxheW91dC5hZGRWaWV3KGxhdW5jaFByZWZlcmVuY2VzLCBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOwogICAgICAgICAKICAgICAgICAgbUNvdW50ZXJUZXh0ID0gbmV3IFRleHRWaWV3KHRoaXMpOwotICAgICAgICBsYXlvdXQuYWRkVmlldyhtQ291bnRlclRleHQsIG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICBsYXlvdXQuYWRkVmlldyhtQ291bnRlclRleHQsIG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAgICAgICAgIAogICAgICAgICB1cGRhdGVDb3VudGVyVGV4dCgpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlLmphdmEKaW5kZXggNzkzMjRhNC4uNGE0ZjMyNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2UuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL0xvY2FsU2VydmljZS5qYXZhCkBAIC0xNiwxNSArMTYsMjIgQEAKIAogcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwogCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CiAKIC8vIE5lZWQgdGhlIGZvbGxvd2luZyBpbXBvcnQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgYXBwIHJlc291cmNlcywgc2luY2UgdGhpcwpAQCAtMzMsOCArNDAsOCBAQAogCiAvKioKICAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBpbXBsZW1lbnRpbmcgYW4gYXBwbGljYXRpb24gc2VydmljZSB0aGF0IHJ1bnMgbG9jYWxseQotICogaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0aGUgYXBwbGljYXRpb24uICBUaGUge0BsaW5rIExvY2FsU2VydmljZUNvbnRyb2xsZXJ9Ci0gKiBhbmQge0BsaW5rIExvY2FsU2VydmljZUJpbmRpbmd9IGNsYXNzZXMgc2hvdyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGUKKyAqIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIHtAbGluayBDb250cm9sbGVyfQorICogYW5kIHtAbGluayBCaW5kaW5nfSBjbGFzc2VzIHNob3cgaG93IHRvIGludGVyYWN0IHdpdGggdGhlCiAgKiBzZXJ2aWNlLgogICoKICAqIDxwPk5vdGljZSB0aGUgdXNlIG9mIHRoZSB7QGxpbmsgTm90aWZpY2F0aW9uTWFuYWdlcn0gd2hlbiBpbnRlcmVzdGluZyB0aGluZ3MKQEAgLTEwMyw3ICsxMTAsNyBAQAogCiAgICAgICAgIC8vIFRoZSBQZW5kaW5nSW50ZW50IHRvIGxhdW5jaCBvdXIgYWN0aXZpdHkgaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGlzIG5vdGlmaWNhdGlvbgogICAgICAgICBQZW5kaW5nSW50ZW50IGNvbnRlbnRJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KHRoaXMsIDAsCi0gICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBMb2NhbFNlcnZpY2VDb250cm9sbGVyLmNsYXNzKSwgMCk7CisgICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBDb250cm9sbGVyLmNsYXNzKSwgMCk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBpbmZvIGZvciB0aGUgdmlld3MgdGhhdCBzaG93IGluIHRoZSBub3RpZmljYXRpb24gcGFuZWwuCiAgICAgICAgIG5vdGlmaWNhdGlvbi5zZXRMYXRlc3RFdmVudEluZm8odGhpcywgZ2V0VGV4dChSLnN0cmluZy5sb2NhbF9zZXJ2aWNlX2xhYmVsKSwKQEAgLTExMyw1ICsxMjAsMTI3IEBACiAgICAgICAgIC8vIFdlIHVzZSBhIGxheW91dCBpZCBiZWNhdXNlIGl0IGlzIGEgdW5pcXVlIG51bWJlci4gIFdlIHVzZSBpdCBsYXRlciB0byBjYW5jZWwuCiAgICAgICAgIG1OTS5ub3RpZnkoUi5zdHJpbmcubG9jYWxfc2VydmljZV9zdGFydGVkLCBub3RpZmljYXRpb24pOwogICAgIH0KLX0KKyAgICAKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogPHA+RXhhbXBsZSBvZiBleHBsaWNpdGx5IHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgbG9jYWwgc2VydmljZS4KKyAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHRoYXQgcnVucyBpbiB0aGUgc2FtZQorICAgICAqIHByb2Nlc3MgYXMgdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBleHBsaWNpdGx5IHN0YXJ0ZWQgYW5kIHN0b3BwZWQKKyAgICAgKiBhcyBkZXNpcmVkLjwvcD4KKyAgICAgKiAKKyAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBpbm5lciBjbGFzcyBvbmx5IGtlZXAgdGhlIHNhbXBsZQorICAgICAqIGFsbCB0b2dldGhlcjsgdHlwaWNhbGx5IHRoaXMgY29kZSB3b3VsZCBhcHBlYXIgaW4gc29tZSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwogCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5sb2NhbF9zZXJ2aWNlX2NvbnRyb2xsZXIpOworCisgICAgICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KKyAgICAgICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0KTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0YXJ0TGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RhcnRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2VydmljZSBpcyBzdGFydGVkLiAgSXQgd2lsbCBjb250aW51ZSBydW5uaW5nCisgICAgICAgICAgICAgICAgLy8gdW50aWwgc29tZW9uZSBjYWxscyBzdG9wU2VydmljZSgpLiAgVGhlIEludGVudCB3ZSB1c2UgdG8gZmluZAorICAgICAgICAgICAgICAgIC8vIHRoZSBzZXJ2aWNlIGV4cGxpY2l0bHkgc3BlY2lmaWVzIG91ciBzZXJ2aWNlIGNvbXBvbmVudCwgYmVjYXVzZQorICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgaXQgcnVubmluZyBpbiBvdXIgb3duIHByb2Nlc3MgYW5kIGRvbid0IHdhbnQgb3RoZXIKKyAgICAgICAgICAgICAgICAvLyBhcHBsaWNhdGlvbnMgdG8gcmVwbGFjZSBpdC4KKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChDb250cm9sbGVyLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2UuY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RvcExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gQ2FuY2VsIGEgcHJldmlvdXMgY2FsbCB0byBzdGFydFNlcnZpY2UoKS4gIE5vdGUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyBzZXJ2aWNlIHdpbGwgbm90IGFjdHVhbGx5IHN0b3AgYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICAvLyBzdGlsbCBib3VuZCBjbGllbnRzLgorICAgICAgICAgICAgICAgIHN0b3BTZXJ2aWNlKG5ldyBJbnRlbnQoQ29udHJvbGxlci50aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxTZXJ2aWNlLmNsYXNzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIAorICAgIC8qKgorICAgICAqIEV4YW1wbGUgb2YgYmluZGluZyBhbmQgdW5iaW5kaW5nIHRvIHRoZSBsb2NhbCBzZXJ2aWNlLgorICAgICAqIFRoaXMgZGVtb25zdHJhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlcnZpY2Ugd2hpY2ggdGhlIGNsaWVudCB3aWxsCisgICAgICogYmluZCB0bywgcmVjZWl2aW5nIGFuIG9iamVjdCB0aHJvdWdoIHdoaWNoIGl0IGNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzZXJ2aWNlLjwvcD4KKyAgICAgKiAKKyAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBpbm5lciBjbGFzcyBvbmx5IGtlZXAgdGhlIHNhbXBsZQorICAgICAqIGFsbCB0b2dldGhlcjsgdHlwaWNhbGx5IHRoaXMgY29kZSB3b3VsZCBhcHBlYXIgaW4gc29tZSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJpbmRpbmcgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSXNCb3VuZDsKKyAgICAgICAgcHJpdmF0ZSBMb2NhbFNlcnZpY2UgbUJvdW5kU2VydmljZTsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubG9jYWxfc2VydmljZV9iaW5kaW5nKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5iaW5kKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJpbmRMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnVuYmluZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1VbmJpbmRMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFNlcnZpY2VDb25uZWN0aW9uIG1Db25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2hlZCwgZ2l2aW5nIHVzIHRoZSBzZXJ2aWNlIG9iamVjdCB3ZSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VydmljZS4gIEJlY2F1c2Ugd2UgaGF2ZSBib3VuZCB0byBhIGV4cGxpY2l0CisgICAgICAgICAgICAgICAgLy8gc2VydmljZSB0aGF0IHdlIGtub3cgaXMgcnVubmluZyBpbiBvdXIgb3duIHByb2Nlc3MsIHdlIGNhbgorICAgICAgICAgICAgICAgIC8vIGNhc3QgaXRzIElCaW5kZXIgdG8gYSBjb25jcmV0ZSBjbGFzcyBhbmQgZGlyZWN0bHkgYWNjZXNzIGl0LgorICAgICAgICAgICAgICAgIG1Cb3VuZFNlcnZpY2UgPSAoKExvY2FsU2VydmljZS5Mb2NhbEJpbmRlcilzZXJ2aWNlKS5nZXRTZXJ2aWNlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciBhYm91dCB0aGlzIGZvciBvdXIgZGVtby4KKyAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChCaW5kaW5nLnRoaXMsIFIuc3RyaW5nLmxvY2FsX3NlcnZpY2VfY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmljZSBoYXMgYmVlbgorICAgICAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWRseSBkaXNjb25uZWN0ZWQgLS0gdGhhdCBpcywgaXRzIHByb2Nlc3MgY3Jhc2hlZC4KKyAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGl0IGlzIHJ1bm5pbmcgaW4gb3VyIHNhbWUgcHJvY2Vzcywgd2Ugc2hvdWxkIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gc2VlIHRoaXMgaGFwcGVuLgorICAgICAgICAgICAgICAgIG1Cb3VuZFNlcnZpY2UgPSBudWxsOworICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KEJpbmRpbmcudGhpcywgUi5zdHJpbmcubG9jYWxfc2VydmljZV9kaXNjb25uZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtQmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlLiAgV2UgdXNlIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAgICAgLy8gY2xhc3MgbmFtZSBiZWNhdXNlIHdlIHdhbnQgYSBzcGVjaWZpYyBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB3ZSBrbm93IHdpbGwgYmUgcnVubmluZyBpbiBvdXIgb3duIHByb2Nlc3MgKGFuZCB0aHVzIHdvbid0IGJlCisgICAgICAgICAgICAgICAgLy8gc3VwcG9ydGluZyBjb21wb25lbnQgcmVwbGFjZW1lbnQgYnkgb3RoZXIgYXBwbGljYXRpb25zKS4KKyAgICAgICAgICAgICAgICBiaW5kU2VydmljZShuZXcgSW50ZW50KEJpbmRpbmcudGhpcywgCisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2UuY2xhc3MpLCBtQ29ubmVjdGlvbiwgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFKTsKKyAgICAgICAgICAgICAgICBtSXNCb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVVuYmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgaWYgKG1Jc0JvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERldGFjaCBvdXIgZXhpc3RpbmcgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgdW5iaW5kU2VydmljZShtQ29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1Jc0JvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQmluZGluZy5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2VCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkY2ZhZDUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2VCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKLQotaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7Ci0KLQotLyoqCi0gKiA8cD5FeGFtcGxlIG9mIGJpbmRpbmcgYW5kIHVuYmluZGluZyB0byB0aGUge0BsaW5rIExvY2FsU2VydmljZX0uCi0gKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHdoaWNoIHRoZSBjbGllbnQgd2lsbAotICogYmluZCB0bywgcmVjZWl2aW5nIGFuIG9iamVjdCB0aHJvdWdoIHdoaWNoIGl0IGNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzZXJ2aWNlLjwvcD4KLSAqLwotcHVibGljIGNsYXNzIExvY2FsU2VydmljZUJpbmRpbmcgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Jc0JvdW5kOwotICAgIHByaXZhdGUgTG9jYWxTZXJ2aWNlIG1Cb3VuZFNlcnZpY2U7Ci0KLSAgICBAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0KLSAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubG9jYWxfc2VydmljZV9iaW5kaW5nKTsKLQotICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KLSAgICAgICAgQnV0dG9uIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuYmluZCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJpbmRMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQudW5iaW5kKTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtVW5iaW5kTGlzdGVuZXIpOwotICAgIH0KLQotICAgIHByaXZhdGUgU2VydmljZUNvbm5lY3Rpb24gbUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSwgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UgaGFzIGJlZW4KLSAgICAgICAgICAgIC8vIGVzdGFibGlzaGVkLCBnaXZpbmcgdXMgdGhlIHNlcnZpY2Ugb2JqZWN0IHdlIGNhbiB1c2UgdG8KLSAgICAgICAgICAgIC8vIGludGVyYWN0IHdpdGggdGhlIHNlcnZpY2UuICBCZWNhdXNlIHdlIGhhdmUgYm91bmQgdG8gYSBleHBsaWNpdAotICAgICAgICAgICAgLy8gc2VydmljZSB0aGF0IHdlIGtub3cgaXMgcnVubmluZyBpbiBvdXIgb3duIHByb2Nlc3MsIHdlIGNhbgotICAgICAgICAgICAgLy8gY2FzdCBpdHMgSUJpbmRlciB0byBhIGNvbmNyZXRlIGNsYXNzIGFuZCBkaXJlY3RseSBhY2Nlc3MgaXQuCi0gICAgICAgICAgICBtQm91bmRTZXJ2aWNlID0gKChMb2NhbFNlcnZpY2UuTG9jYWxCaW5kZXIpc2VydmljZSkuZ2V0U2VydmljZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIGFib3V0IHRoaXMgZm9yIG91ciBkZW1vLgotICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoTG9jYWxTZXJ2aWNlQmluZGluZy50aGlzLCBSLnN0cmluZy5sb2NhbF9zZXJ2aWNlX2Nvbm5lY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmljZSBoYXMgYmVlbgotICAgICAgICAgICAgLy8gdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZCAtLSB0aGF0IGlzLCBpdHMgcHJvY2VzcyBjcmFzaGVkLgotICAgICAgICAgICAgLy8gQmVjYXVzZSBpdCBpcyBydW5uaW5nIGluIG91ciBzYW1lIHByb2Nlc3MsIHdlIHNob3VsZCBuZXZlcgotICAgICAgICAgICAgLy8gc2VlIHRoaXMgaGFwcGVuLgotICAgICAgICAgICAgbUJvdW5kU2VydmljZSA9IG51bGw7Ci0gICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChMb2NhbFNlcnZpY2VCaW5kaW5nLnRoaXMsIFIuc3RyaW5nLmxvY2FsX3NlcnZpY2VfZGlzY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtQmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIC8vIEVzdGFibGlzaCBhIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmljZS4gIFdlIHVzZSBhbiBleHBsaWNpdAotICAgICAgICAgICAgLy8gY2xhc3MgbmFtZSBiZWNhdXNlIHdlIHdhbnQgYSBzcGVjaWZpYyBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQKLSAgICAgICAgICAgIC8vIHdlIGtub3cgd2lsbCBiZSBydW5uaW5nIGluIG91ciBvd24gcHJvY2VzcyAoYW5kIHRodXMgd29uJ3QgYmUKLSAgICAgICAgICAgIC8vIHN1cHBvcnRpbmcgY29tcG9uZW50IHJlcGxhY2VtZW50IGJ5IG90aGVyIGFwcGxpY2F0aW9ucykuCi0gICAgICAgICAgICBiaW5kU2VydmljZShuZXcgSW50ZW50KExvY2FsU2VydmljZUJpbmRpbmcudGhpcywgCi0gICAgICAgICAgICAgICAgICAgIExvY2FsU2VydmljZS5jbGFzcyksIG1Db25uZWN0aW9uLCBDb250ZXh0LkJJTkRfQVVUT19DUkVBVEUpOwotICAgICAgICAgICAgbUlzQm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1VbmJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICBpZiAobUlzQm91bmQpIHsKLSAgICAgICAgICAgICAgICAvLyBEZXRhY2ggb3VyIGV4aXN0aW5nIGNvbm5lY3Rpb24uCi0gICAgICAgICAgICAgICAgdW5iaW5kU2VydmljZShtQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgbUlzQm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci19Ci0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTG9jYWxTZXJ2aWNlQ29udHJvbGxlci5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2VDb250cm9sbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNDEyNDkuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9Mb2NhbFNlcnZpY2VDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwotCi0vLyBOZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKLS8vIGNsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCi1pbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247Ci0KLQotLyoqCi0gKiA8cD5FeGFtcGxlIG9mIGV4cGxpY2l0bHkgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSB7QGxpbmsgTG9jYWxTZXJ2aWNlfS4KLSAqIFRoaXMgZGVtb25zdHJhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlcnZpY2UgdGhhdCBydW5zIGluIHRoZSBzYW1lCi0gKiBwcm9jZXNzIGFzIHRoZSByZXN0IG9mIHRoZSBhcHBsaWNhdGlvbiwgd2hpY2ggaXMgZXhwbGljaXRseSBzdGFydGVkIGFuZCBzdG9wcGVkCi0gKiBhcyBkZXNpcmVkLjwvcD4KLSAqLwotcHVibGljIGNsYXNzIExvY2FsU2VydmljZUNvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmxvY2FsX3NlcnZpY2VfY29udHJvbGxlcik7Ci0KLSAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCi0gICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0KTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RvcCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BMaXN0ZW5lcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0TGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQuICBJdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcKLSAgICAgICAgICAgIC8vIHVudGlsIHNvbWVvbmUgY2FsbHMgc3RvcFNlcnZpY2UoKS4gIFRoZSBJbnRlbnQgd2UgdXNlIHRvIGZpbmQKLSAgICAgICAgICAgIC8vIHRoZSBzZXJ2aWNlIGV4cGxpY2l0bHkgc3BlY2lmaWVzIG91ciBzZXJ2aWNlIGNvbXBvbmVudCwgYmVjYXVzZQotICAgICAgICAgICAgLy8gd2Ugd2FudCBpdCBydW5uaW5nIGluIG91ciBvd24gcHJvY2VzcyBhbmQgZG9uJ3Qgd2FudCBvdGhlcgotICAgICAgICAgICAgLy8gYXBwbGljYXRpb25zIHRvIHJlcGxhY2UgaXQuCi0gICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChMb2NhbFNlcnZpY2VDb250cm9sbGVyLnRoaXMsCi0gICAgICAgICAgICAgICAgICAgIExvY2FsU2VydmljZS5jbGFzcykpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdG9wTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2FuY2VsIGEgcHJldmlvdXMgY2FsbCB0byBzdGFydFNlcnZpY2UoKS4gIE5vdGUgdGhhdCB0aGUKLSAgICAgICAgICAgIC8vIHNlcnZpY2Ugd2lsbCBub3QgYWN0dWFsbHkgc3RvcCBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGFyZQotICAgICAgICAgICAgLy8gc3RpbGwgYm91bmQgY2xpZW50cy4KLSAgICAgICAgICAgIHN0b3BTZXJ2aWNlKG5ldyBJbnRlbnQoTG9jYWxTZXJ2aWNlQ29udHJvbGxlci50aGlzLAotICAgICAgICAgICAgICAgICAgICBMb2NhbFNlcnZpY2UuY2xhc3MpKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTWVudUluZmxhdGVGcm9tWG1sLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL01lbnVJbmZsYXRlRnJvbVhtbC5qYXZhCmluZGV4IGY1MWIzYjguLmZjN2I2MmEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvTWVudUluZmxhdGVGcm9tWG1sLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9NZW51SW5mbGF0ZUZyb21YbWwuamF2YQpAQCAtMTksMTQgKzE5LDExIEBACiBpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKQEAgLTkzLDcgKzkwLDcgQEAKICAgICAgICAgLy8gQWRkIHRoZSBzcGlubmVyCiAgICAgICAgIGxheW91dC5hZGRWaWV3KG1TcGlubmVyLAogICAgICAgICAgICAgICAgIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKIAogICAgICAgICAvLyBDcmVhdGUgaGVscCB0ZXh0CkBAIC0xMDMsNyArMTAwLDcgQEAKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUgaGVscCwgbWFrZSBpdCBsb29rIGRlY2VudAogICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxwID0gbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKKyAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCk7CiAgICAgICAgIGxwLnNldE1hcmdpbnMoMTAsIDEwLCAxMCwgMTApOwogICAgICAgICBsYXlvdXQuYWRkVmlldyhtSW5zdHJ1Y3Rpb25zVGV4dCwgbHApOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2UuamF2YQppbmRleCBjMGRlYmJjLi5hNjJhNTI0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2UuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2UuamF2YQpAQCAtMTYsMjEgKzE2LDI4IEBACiAKIHBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVDYWxsYmFja0xpc3Q7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCiAvLyBOZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKIC8vIGNsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCiBpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CkBAIC0zOSw4ICs0NiwxMyBAQAogICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGltcGxlbWVudGluZyBhbiBhcHBsaWNhdGlvbiBzZXJ2aWNlIHRoYXQgcnVucyBpbiBhCiAgKiBkaWZmZXJlbnQgcHJvY2VzcyB0aGFuIHRoZSBhcHBsaWNhdGlvbi4gIEJlY2F1c2UgaXQgY2FuIGJlIGluIGFub3RoZXIKICAqIHByb2Nlc3MsIHdlIG11c3QgdXNlIElQQyB0byBpbnRlcmFjdCB3aXRoIGl0LiAgVGhlCi0gKiB7QGxpbmsgUmVtb3RlU2VydmljZUNvbnRyb2xsZXJ9IGFuZCB7QGxpbmsgUmVtb3RlU2VydmljZUJpbmRpbmd9IGNsYXNzZXMKKyAqIHtAbGluayBDb250cm9sbGVyfSBhbmQge0BsaW5rIEJpbmRpbmd9IGNsYXNzZXMKICAqIHNob3cgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIHNlcnZpY2UuCisgKiAKKyAqIDxwPk5vdGUgdGhhdCBtb3N0IGFwcGxpY2F0aW9ucyA8c3Ryb25nPmRvIG5vdDwvc3Ryb25nPiBuZWVkIHRvIGRlYWwgd2l0aAorICogdGhlIGNvbXBsZXhpdHkgc2hvd24gaGVyZS4gIElmIHlvdXIgYXBwbGljYXRpb24gc2ltcGx5IGhhcyBhIHNlcnZpY2UKKyAqIHJ1bm5pbmcgaW4gaXRzIG93biBwcm9jZXNzLCB0aGUge0BsaW5rIExvY2FsU2VydmljZX0gc2FtcGxlIHNob3dzIGEgbXVjaAorICogc2ltcGxlciB3YXkgdG8gaW50ZXJhY3Qgd2l0aCBpdC4KICAqLwogcHVibGljIGNsYXNzIFJlbW90ZVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHsKICAgICAvKioKQEAgLTE3Miw3ICsxODQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBQZW5kaW5nSW50ZW50IHRvIGxhdW5jaCBvdXIgYWN0aXZpdHkgaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGlzIG5vdGlmaWNhdGlvbgogICAgICAgICBQZW5kaW5nSW50ZW50IGNvbnRlbnRJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KHRoaXMsIDAsCi0gICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBMb2NhbFNlcnZpY2VDb250cm9sbGVyLmNsYXNzKSwgMCk7CisgICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBDb250cm9sbGVyLmNsYXNzKSwgMCk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBpbmZvIGZvciB0aGUgdmlld3MgdGhhdCBzaG93IGluIHRoZSBub3RpZmljYXRpb24gcGFuZWwuCiAgICAgICAgIG5vdGlmaWNhdGlvbi5zZXRMYXRlc3RFdmVudEluZm8odGhpcywgZ2V0VGV4dChSLnN0cmluZy5yZW1vdGVfc2VydmljZV9sYWJlbCksCkBAIC0xODIsNCArMTk0LDI2NiBAQAogICAgICAgICAvLyBXZSB1c2UgYSBzdHJpbmcgaWQgYmVjYXVzZSBpdCBpcyBhIHVuaXF1ZSBudW1iZXIuICBXZSB1c2UgaXQgbGF0ZXIgdG8gY2FuY2VsLgogICAgICAgICBtTk0ubm90aWZ5KFIuc3RyaW5nLnJlbW90ZV9zZXJ2aWNlX3N0YXJ0ZWQsIG5vdGlmaWNhdGlvbik7CiAgICAgfQorICAgIAorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKKyAgICAvKioKKyAgICAgKiA8cD5FeGFtcGxlIG9mIGV4cGxpY2l0bHkgc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSByZW1vdmUgc2VydmljZS4KKyAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBzZXJ2aWNlIHRoYXQgcnVucyBpbiBhIGRpZmZlcmVudAorICAgICAqIHByb2Nlc3MgdGhhbiB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24sIHdoaWNoIGlzIGV4cGxpY2l0bHkgc3RhcnRlZCBhbmQgc3RvcHBlZAorICAgICAqIGFzIGRlc2lyZWQuPC9wPgorICAgICAqIAorICAgICAqIDxwPk5vdGUgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGFuIGlubmVyIGNsYXNzIG9ubHkga2VlcCB0aGUgc2FtcGxlCisgICAgICogYWxsIHRvZ2V0aGVyOyB0eXBpY2FsbHkgdGhpcyBjb2RlIHdvdWxkIGFwcGVhciBpbiBzb21lIHNlcGFyYXRlIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisKKyAgICAgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnJlbW90ZV9zZXJ2aWNlX2NvbnRyb2xsZXIpOworCisgICAgICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KKyAgICAgICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0KTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0YXJ0TGlzdGVuZXIpOworICAgICAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdG9wKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RhcnRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2VydmljZSBpcyBzdGFydGVkLiAgSXQgd2lsbCBjb250aW51ZSBydW5uaW5nCisgICAgICAgICAgICAgICAgLy8gdW50aWwgc29tZW9uZSBjYWxscyBzdG9wU2VydmljZSgpLgorICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBhY3Rpb24gY29kZSBoZXJlLCBpbnN0ZWFkIG9mIGV4cGxpY3RseSBzdXBwbHlpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGUgY29tcG9uZW50IG5hbWUsIHNvIHRoYXQgb3RoZXIgcGFja2FnZXMgY2FuIHJlcGxhY2UKKyAgICAgICAgICAgICAgICAvLyB0aGUgc2VydmljZS4KKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLlJFTU9URV9TRVJWSUNFIikpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdG9wTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5jZWwgYSBwcmV2aW91cyBjYWxsIHRvIHN0YXJ0U2VydmljZSgpLiAgTm90ZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHNlcnZpY2Ugd2lsbCBub3QgYWN0dWFsbHkgc3RvcCBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgIC8vIHN0aWxsIGJvdW5kIGNsaWVudHMuCisgICAgICAgICAgICAgICAgc3RvcFNlcnZpY2UobmV3IEludGVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwLlJFTU9URV9TRVJWSUNFIikpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgLyoqCisgICAgICogRXhhbXBsZSBvZiBiaW5kaW5nIGFuZCB1bmJpbmRpbmcgdG8gdGhlIHJlbW90ZSBzZXJ2aWNlLgorICAgICAqIFRoaXMgZGVtb25zdHJhdGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNlcnZpY2Ugd2hpY2ggdGhlIGNsaWVudCB3aWxsCisgICAgICogYmluZCB0bywgaW50ZXJhY3Rpbmcgd2l0aCBpdCB0aHJvdWdoIGFuIGFpZGwgaW50ZXJmYWNlLjwvcD4KKyAgICAgKiAKKyAgICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhbiBpbm5lciBjbGFzcyBvbmx5IGtlZXAgdGhlIHNhbXBsZQorICAgICAqIGFsbCB0b2dldGhlcjsgdHlwaWNhbGx5IHRoaXMgY29kZSB3b3VsZCBhcHBlYXIgaW4gc29tZSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAgKi8KKyAvLyBCRUdJTl9JTkNMVURFKGNhbGxpbmdfYV9zZXJ2aWNlKQorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQmluZGluZyBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICAgICAgLyoqIFRoZSBwcmltYXJ5IGludGVyZmFjZSB3ZSB3aWxsIGJlIGNhbGxpbmcgb24gdGhlIHNlcnZpY2UuICovCisgICAgICAgIElSZW1vdGVTZXJ2aWNlIG1TZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgLyoqIEFub3RoZXIgaW50ZXJmYWNlIHdlIHVzZSBvbiB0aGUgc2VydmljZS4gKi8KKyAgICAgICAgSVNlY29uZGFyeSBtU2Vjb25kYXJ5U2VydmljZSA9IG51bGw7CisgICAgICAgIAorICAgICAgICBCdXR0b24gbUtpbGxCdXR0b247CisgICAgICAgIFRleHRWaWV3IG1DYWxsYmFja1RleHQ7CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc0JvdW5kOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTdGFuZGFyZCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGFjdGl2aXR5LiAgU2V0IHVwIHRoZSBVSSwgdGhlbiB3YWl0CisgICAgICAgICAqIGZvciB0aGUgdXNlciB0byBwb2tlIGl0IGJlZm9yZSBkb2luZyBhbnl0aGluZy4KKyAgICAgICAgICovCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5yZW1vdGVfc2VydmljZV9iaW5kaW5nKTsKKworICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCisgICAgICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5iaW5kKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUJpbmRMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnVuYmluZCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1VbmJpbmRMaXN0ZW5lcik7CisgICAgICAgICAgICBtS2lsbEJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQua2lsbCk7CisgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUtpbGxMaXN0ZW5lcik7CisgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbUNhbGxiYWNrVGV4dCA9IChUZXh0VmlldylmaW5kVmlld0J5SWQoUi5pZC5jYWxsYmFjayk7CisgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIk5vdCBhdHRhY2hlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbWFpbiBpbnRlcmZhY2Ugb2YgdGhlIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIFNlcnZpY2VDb25uZWN0aW9uIG1Db25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICBJQmluZGVyIHNlcnZpY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAvLyBlc3RhYmxpc2hlZCwgZ2l2aW5nIHVzIHRoZSBzZXJ2aWNlIG9iamVjdCB3ZSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgc2VydmljZS4gIFdlIGFyZSBjb21tdW5pY2F0aW5nIHdpdGggb3VyCisgICAgICAgICAgICAgICAgLy8gc2VydmljZSB0aHJvdWdoIGFuIElETCBpbnRlcmZhY2UsIHNvIGdldCBhIGNsaWVudC1zaWRlCisgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgdGhhdCBmcm9tIHRoZSByYXcgc2VydmljZSBvYmplY3QuCisgICAgICAgICAgICAgICAgbVNlcnZpY2UgPSBJUmVtb3RlU2VydmljZS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpOworICAgICAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJBdHRhY2hlZC4iKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gbW9uaXRvciB0aGUgc2VydmljZSBmb3IgYXMgbG9uZyBhcyB3ZSBhcmUKKyAgICAgICAgICAgICAgICAvLyBjb25uZWN0ZWQgdG8gaXQuCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UucmVnaXN0ZXJDYWxsYmFjayhtQ2FsbGJhY2spOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgc2VydmljZSBoYXMgY3Jhc2hlZCBiZWZvcmUgd2UgY291bGQgZXZlbgorICAgICAgICAgICAgICAgICAgICAvLyBkbyBhbnl0aGluZyB3aXRoIGl0OyB3ZSBjYW4gY291bnQgb24gc29vbiBiZWluZworICAgICAgICAgICAgICAgICAgICAvLyBkaXNjb25uZWN0ZWQgKGFuZCB0aGVuIHJlY29ubmVjdGVkIGlmIGl0IGNhbiBiZSByZXN0YXJ0ZWQpCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQXMgcGFydCBvZiB0aGUgc2FtcGxlLCB0ZWxsIHRoZSB1c2VyIHdoYXQgaGFwcGVuZWQuCisgICAgICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoQmluZGluZy50aGlzLCBSLnN0cmluZy5yZW1vdGVfc2VydmljZV9jb25uZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgLy8gdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZCAtLSB0aGF0IGlzLCBpdHMgcHJvY2VzcyBjcmFzaGVkLgorICAgICAgICAgICAgICAgIG1TZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIkRpc2Nvbm5lY3RlZC4iKTsKKworICAgICAgICAgICAgICAgIC8vIEFzIHBhcnQgb2YgdGhlIHNhbXBsZSwgdGVsbCB0aGUgdXNlciB3aGF0IGhhcHBlbmVkLgorICAgICAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KEJpbmRpbmcudGhpcywgUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfZGlzY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENsYXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzZWNvbmRhcnkgaW50ZXJmYWNlIG9mIHRoZSBzZXJ2aWNlLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTZXJ2aWNlQ29ubmVjdGlvbiBtU2Vjb25kYXJ5Q29ubmVjdGlvbiA9IG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgSUJpbmRlciBzZXJ2aWNlKSB7CisgICAgICAgICAgICAgICAgLy8gQ29ubmVjdGluZyB0byBhIHNlY29uZGFyeSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgYXMgYW55CisgICAgICAgICAgICAgICAgLy8gb3RoZXIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgIG1TZWNvbmRhcnlTZXJ2aWNlID0gSVNlY29uZGFyeS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpOworICAgICAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSkgeworICAgICAgICAgICAgICAgIG1TZWNvbmRhcnlTZXJ2aWNlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtQmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgLy8gRXN0YWJsaXNoIGEgY291cGxlIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UsIGJpbmRpbmcKKyAgICAgICAgICAgICAgICAvLyBieSBpbnRlcmZhY2UgbmFtZXMuICBUaGlzIGFsbG93cyBvdGhlciBhcHBsaWNhdGlvbnMgdG8gYmUKKyAgICAgICAgICAgICAgICAvLyBpbnN0YWxsZWQgdGhhdCByZXBsYWNlIHRoZSByZW1vdGUgc2VydmljZSBieSBpbXBsZW1lbnRpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgYmluZFNlcnZpY2UobmV3IEludGVudChJUmVtb3RlU2VydmljZS5jbGFzcy5nZXROYW1lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7CisgICAgICAgICAgICAgICAgYmluZFNlcnZpY2UobmV3IEludGVudChJU2Vjb25kYXJ5LmNsYXNzLmdldE5hbWUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBtU2Vjb25kYXJ5Q29ubmVjdGlvbiwgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFKTsKKyAgICAgICAgICAgICAgICBtSXNCb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJCaW5kaW5nLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1VbmJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIGlmIChtSXNCb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHJlY2VpdmVkIHRoZSBzZXJ2aWNlLCBhbmQgaGVuY2UgcmVnaXN0ZXJlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgIC8vIGl0LCB0aGVuIG5vdyBpcyB0aGUgdGltZSB0byB1bnJlZ2lzdGVyLgorICAgICAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS51bnJlZ2lzdGVyQ2FsbGJhY2sobUNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIHdlIG5lZWQgdG8gZG8gaWYgdGhlIHNlcnZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXMgY3Jhc2hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gRGV0YWNoIG91ciBleGlzdGluZyBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICB1bmJpbmRTZXJ2aWNlKG1Db25uZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdW5iaW5kU2VydmljZShtU2Vjb25kYXJ5Q29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtSXNCb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIlVuYmluZGluZy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUtpbGxMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIC8vIFRvIGtpbGwgdGhlIHByb2Nlc3MgaG9zdGluZyBvdXIgc2VydmljZSwgd2UgbmVlZCB0byBrbm93IGl0cworICAgICAgICAgICAgICAgIC8vIFBJRC4gIENvbnZlbmllbnRseSBvdXIgc2VydmljZSBoYXMgYSBjYWxsIHRoYXQgd2lsbCByZXR1cm4KKyAgICAgICAgICAgICAgICAvLyB0byB1cyB0aGF0IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIGlmIChtU2Vjb25kYXJ5U2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGlkID0gbVNlY29uZGFyeVNlcnZpY2UuZ2V0UGlkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQsIHRob3VnaCB0aGlzIEFQSSBhbGxvd3MgdXMgdG8gcmVxdWVzdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lsbCBhbnkgcHJvY2VzcyBiYXNlZCBvbiBpdHMgUElELCB0aGUga2VybmVsIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIGltcG9zZSBzdGFuZGFyZCByZXN0cmljdGlvbnMgb24gd2hpY2ggUElEcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBhY3R1YWxseSBhYmxlIHRvIGtpbGwuICBUeXBpY2FsbHkgdGhpcyBtZWFucyBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBydW5uaW5nIHlvdXIgYXBwbGljYXRpb24gYW5kIGFueSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZXMgY3JlYXRlZCBieSB0aGF0IGFwcCBhcyBzaG93biBoZXJlOyBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hhcmluZyBhIGNvbW1vbiBVSUQgd2lsbCBhbHNvIGJlIGFibGUgdG8ga2lsbCBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcidzIHByb2Nlc3Nlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MocGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiS2lsbGVkIHNlcnZpY2UgcHJvY2Vzcy4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWNvdmVyIGdyYWNlZnVsbHkgZnJvbSB0aGUgcHJvY2VzcyBob3N0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VydmVyIGR5aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBmb3IgcHVycG9zZXMgb2YgdGhlIHNhbXBsZSwgcHV0IHVwIGEgbm90aWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoQmluZGluZy50aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5yZW1vdGVfY2FsbF9mYWlsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBDb2RlIHNob3dpbmcgaG93IHRvIGRlYWwgd2l0aCBjYWxsYmFja3MuCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBjYWxsYmFja3MgZnJvbSB0aGUgcmVtb3RlCisgICAgICAgICAqIHNlcnZpY2UuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIElSZW1vdGVTZXJ2aWNlQ2FsbGJhY2sgbUNhbGxiYWNrID0gbmV3IElSZW1vdGVTZXJ2aWNlQ2FsbGJhY2suU3R1YigpIHsKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlbW90ZSBzZXJ2aWNlIHJlZ3VsYXJseSB0byB0ZWxsIHVzIGFib3V0CisgICAgICAgICAgICAgKiBuZXcgdmFsdWVzLiAgTm90ZSB0aGF0IElQQyBjYWxscyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIGEgdGhyZWFkCisgICAgICAgICAgICAgKiBwb29sIHJ1bm5pbmcgaW4gZWFjaCBwcm9jZXNzLCBzbyB0aGUgY29kZSBleGVjdXRpbmcgaGVyZSB3aWxsCisgICAgICAgICAgICAgKiBOT1QgYmUgcnVubmluZyBpbiBvdXIgbWFpbiB0aHJlYWQgbGlrZSBtb3N0IG90aGVyIHRoaW5ncyAtLSBzbywKKyAgICAgICAgICAgICAqIHRvIHVwZGF0ZSB0aGUgVUksIHdlIG5lZWQgdG8gdXNlIGEgSGFuZGxlciB0byBob3Agb3ZlciB0aGVyZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIHZvaWQgdmFsdWVDaGFuZ2VkKGludCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoQlVNUF9NU0csIHZhbHVlLCAwKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVNUF9NU0cgPSAxOworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBIYW5kbGVyIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCVU1QX01TRzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja1RleHQuc2V0VGV4dCgiUmVjZWl2ZWQgZnJvbSBzZXJ2aWNlOiAiICsgbXNnLmFyZzEpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH07CisgICAgfQorLy8gRU5EX0lOQ0xVREUoY2FsbGluZ19hX3NlcnZpY2UpCiB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2VCaW5kaW5nLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2VCaW5kaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YWQ0ZTUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9SZW1vdGVTZXJ2aWNlQmluZGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7Ci0KLWltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwotCi0vLyBCRUdJTl9JTkNMVURFKGV4cG9zaW5nX2Ffc2VydmljZSkKLXB1YmxpYyBjbGFzcyBSZW1vdGVTZXJ2aWNlQmluZGluZyBleHRlbmRzIEFjdGl2aXR5IHsKLSAgICAvKiogVGhlIHByaW1hcnkgaW50ZXJmYWNlIHdlIHdpbGwgYmUgY2FsbGluZyBvbiB0aGUgc2VydmljZS4gKi8KLSAgICBJUmVtb3RlU2VydmljZSBtU2VydmljZSA9IG51bGw7Ci0gICAgLyoqIEFub3RoZXIgaW50ZXJmYWNlIHdlIHVzZSBvbiB0aGUgc2VydmljZS4gKi8KLSAgICBJU2Vjb25kYXJ5IG1TZWNvbmRhcnlTZXJ2aWNlID0gbnVsbDsKLSAgICAKLSAgICBCdXR0b24gbUtpbGxCdXR0b247Ci0gICAgVGV4dFZpZXcgbUNhbGxiYWNrVGV4dDsKLQotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNCb3VuZDsKLQotICAgIC8qKgotICAgICAqIFN0YW5kYXJkIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgYWN0aXZpdHkuICBTZXQgdXAgdGhlIFVJLCB0aGVuIHdhaXQKLSAgICAgKiBmb3IgdGhlIHVzZXIgdG8gcG9rZSBpdCBiZWZvcmUgZG9pbmcgYW55dGhpbmcuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnJlbW90ZV9zZXJ2aWNlX2JpbmRpbmcpOwotCi0gICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgotICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5iaW5kKTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtQmluZExpc3RlbmVyKTsKLSAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC51bmJpbmQpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1VbmJpbmRMaXN0ZW5lcik7Ci0gICAgICAgIG1LaWxsQnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5raWxsKTsKLSAgICAgICAgbUtpbGxCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1LaWxsTGlzdGVuZXIpOwotICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgCi0gICAgICAgIG1DYWxsYmFja1RleHQgPSAoVGV4dFZpZXcpZmluZFZpZXdCeUlkKFIuaWQuY2FsbGJhY2spOwotICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIk5vdCBhdHRhY2hlZC4iKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbWFpbiBpbnRlcmZhY2Ugb2YgdGhlIHNlcnZpY2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTZXJ2aWNlQ29ubmVjdGlvbiBtQ29ubmVjdGlvbiA9IG5ldyBTZXJ2aWNlQ29ubmVjdGlvbigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQ29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgIElCaW5kZXIgc2VydmljZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2aWNlIGhhcyBiZWVuCi0gICAgICAgICAgICAvLyBlc3RhYmxpc2hlZCwgZ2l2aW5nIHVzIHRoZSBzZXJ2aWNlIG9iamVjdCB3ZSBjYW4gdXNlIHRvCi0gICAgICAgICAgICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBzZXJ2aWNlLiAgV2UgYXJlIGNvbW11bmljYXRpbmcgd2l0aCBvdXIKLSAgICAgICAgICAgIC8vIHNlcnZpY2UgdGhyb3VnaCBhbiBJREwgaW50ZXJmYWNlLCBzbyBnZXQgYSBjbGllbnQtc2lkZQotICAgICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgdGhhdCBmcm9tIHRoZSByYXcgc2VydmljZSBvYmplY3QuCi0gICAgICAgICAgICBtU2VydmljZSA9IElSZW1vdGVTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc2VydmljZSk7Ci0gICAgICAgICAgICBtS2lsbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJBdHRhY2hlZC4iKTsKLQotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBtb25pdG9yIHRoZSBzZXJ2aWNlIGZvciBhcyBsb25nIGFzIHdlIGFyZQotICAgICAgICAgICAgLy8gY29ubmVjdGVkIHRvIGl0LgotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtU2VydmljZS5yZWdpc3RlckNhbGxiYWNrKG1DYWxsYmFjayk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgc2VydmljZSBoYXMgY3Jhc2hlZCBiZWZvcmUgd2UgY291bGQgZXZlbgotICAgICAgICAgICAgICAgIC8vIGRvIGFueXRoaW5nIHdpdGggaXQ7IHdlIGNhbiBjb3VudCBvbiBzb29uIGJlaW5nCi0gICAgICAgICAgICAgICAgLy8gZGlzY29ubmVjdGVkIChhbmQgdGhlbiByZWNvbm5lY3RlZCBpZiBpdCBjYW4gYmUgcmVzdGFydGVkKQotICAgICAgICAgICAgICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQXMgcGFydCBvZiB0aGUgc2FtcGxlLCB0ZWxsIHRoZSB1c2VyIHdoYXQgaGFwcGVuZWQuCi0gICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChSZW1vdGVTZXJ2aWNlQmluZGluZy50aGlzLCBSLnN0cmluZy5yZW1vdGVfc2VydmljZV9jb25uZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZpY2UgaGFzIGJlZW4KLSAgICAgICAgICAgIC8vIHVuZXhwZWN0ZWRseSBkaXNjb25uZWN0ZWQgLS0gdGhhdCBpcywgaXRzIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICAgICAgICAgIG1TZXJ2aWNlID0gbnVsbDsKLSAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJEaXNjb25uZWN0ZWQuIik7Ci0KLSAgICAgICAgICAgIC8vIEFzIHBhcnQgb2YgdGhlIHNhbXBsZSwgdGVsbCB0aGUgdXNlciB3aGF0IGhhcHBlbmVkLgotICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoUmVtb3RlU2VydmljZUJpbmRpbmcudGhpcywgUi5zdHJpbmcucmVtb3RlX3NlcnZpY2VfZGlzY29ubmVjdGVkLAotICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBDbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZSBvZiB0aGUgc2VydmljZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFNlcnZpY2VDb25uZWN0aW9uIG1TZWNvbmRhcnlDb25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgSUJpbmRlciBzZXJ2aWNlKSB7Ci0gICAgICAgICAgICAvLyBDb25uZWN0aW5nIHRvIGEgc2Vjb25kYXJ5IGludGVyZmFjZSBpcyB0aGUgc2FtZSBhcyBhbnkKLSAgICAgICAgICAgIC8vIG90aGVyIGludGVyZmFjZS4KLSAgICAgICAgICAgIG1TZWNvbmRhcnlTZXJ2aWNlID0gSVNlY29uZGFyeS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpOwotICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIGNsYXNzTmFtZSkgewotICAgICAgICAgICAgbVNlY29uZGFyeVNlcnZpY2UgPSBudWxsOwotICAgICAgICAgICAgbUtpbGxCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUJpbmRMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAvLyBFc3RhYmxpc2ggYSBjb3VwbGUgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZSwgYmluZGluZwotICAgICAgICAgICAgLy8gYnkgaW50ZXJmYWNlIG5hbWVzLiAgVGhpcyBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGJlCi0gICAgICAgICAgICAvLyBpbnN0YWxsZWQgdGhhdCByZXBsYWNlIHRoZSByZW1vdGUgc2VydmljZSBieSBpbXBsZW1lbnRpbmcKLSAgICAgICAgICAgIC8vIHRoZSBzYW1lIGludGVyZmFjZS4KLSAgICAgICAgICAgIGJpbmRTZXJ2aWNlKG5ldyBJbnRlbnQoSVJlbW90ZVNlcnZpY2UuY2xhc3MuZ2V0TmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7Ci0gICAgICAgICAgICBiaW5kU2VydmljZShuZXcgSW50ZW50KElTZWNvbmRhcnkuY2xhc3MuZ2V0TmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgbVNlY29uZGFyeUNvbm5lY3Rpb24sIENvbnRleHQuQklORF9BVVRPX0NSRUFURSk7Ci0gICAgICAgICAgICBtSXNCb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIkJpbmRpbmcuIik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVVuYmluZExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIGlmIChtSXNCb3VuZCkgewotICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHNlcnZpY2UsIGFuZCBoZW5jZSByZWdpc3RlcmVkIHdpdGgKLSAgICAgICAgICAgICAgICAvLyBpdCwgdGhlbiBub3cgaXMgdGhlIHRpbWUgdG8gdW5yZWdpc3Rlci4KLSAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UudW5yZWdpc3RlckNhbGxiYWNrKG1DYWxsYmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgd2UgbmVlZCB0byBkbyBpZiB0aGUgc2VydmljZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzIGNyYXNoZWQuCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRGV0YWNoIG91ciBleGlzdGluZyBjb25uZWN0aW9uLgotICAgICAgICAgICAgICAgIHVuYmluZFNlcnZpY2UobUNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgIHVuYmluZFNlcnZpY2UobVNlY29uZGFyeUNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgIG1LaWxsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotICAgICAgICAgICAgICAgIG1Jc0JvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbUNhbGxiYWNrVGV4dC5zZXRUZXh0KCJVbmJpbmRpbmcuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUtpbGxMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAvLyBUbyBraWxsIHRoZSBwcm9jZXNzIGhvc3Rpbmcgb3VyIHNlcnZpY2UsIHdlIG5lZWQgdG8ga25vdyBpdHMKLSAgICAgICAgICAgIC8vIFBJRC4gIENvbnZlbmllbnRseSBvdXIgc2VydmljZSBoYXMgYSBjYWxsIHRoYXQgd2lsbCByZXR1cm4KLSAgICAgICAgICAgIC8vIHRvIHVzIHRoYXQgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICBpZiAobVNlY29uZGFyeVNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBwaWQgPSBtU2Vjb25kYXJ5U2VydmljZS5nZXRQaWQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0LCB0aG91Z2ggdGhpcyBBUEkgYWxsb3dzIHVzIHRvIHJlcXVlc3QgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8ga2lsbCBhbnkgcHJvY2VzcyBiYXNlZCBvbiBpdHMgUElELCB0aGUga2VybmVsIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgaW1wb3NlIHN0YW5kYXJkIHJlc3RyaWN0aW9ucyBvbiB3aGljaCBQSURzIHlvdQotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgYWN0dWFsbHkgYWJsZSB0byBraWxsLiAgVHlwaWNhbGx5IHRoaXMgbWVhbnMgb25seQotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBydW5uaW5nIHlvdXIgYXBwbGljYXRpb24gYW5kIGFueSBhZGRpdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NlcyBjcmVhdGVkIGJ5IHRoYXQgYXBwIGFzIHNob3duIGhlcmU7IHBhY2thZ2VzCi0gICAgICAgICAgICAgICAgICAgIC8vIHNoYXJpbmcgYSBjb21tb24gVUlEIHdpbGwgYWxzbyBiZSBhYmxlIHRvIGtpbGwgZWFjaAotICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcidzIHByb2Nlc3Nlcy4KLSAgICAgICAgICAgICAgICAgICAgUHJvY2Vzcy5raWxsUHJvY2VzcyhwaWQpOwotICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIktpbGxlZCBzZXJ2aWNlIHByb2Nlc3MuIik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlY292ZXIgZ3JhY2VmdWxseSBmcm9tIHRoZSBwcm9jZXNzIGhvc3RpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlcnZlciBkeWluZy4KLSAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBmb3IgcHVycG9zZXMgb2YgdGhlIHNhbXBsZSwgcHV0IHVwIGEgbm90aWZpY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChSZW1vdGVTZXJ2aWNlQmluZGluZy50aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLnJlbW90ZV9jYWxsX2ZhaWxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfU0hPUlQpLnNob3coKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotICAgIAotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBDb2RlIHNob3dpbmcgaG93IHRvIGRlYWwgd2l0aCBjYWxsYmFja3MuCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIAotICAgIC8qKgotICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0byByZWNlaXZlIGNhbGxiYWNrcyBmcm9tIHRoZSByZW1vdGUKLSAgICAgKiBzZXJ2aWNlLgotICAgICAqLwotICAgIHByaXZhdGUgSVJlbW90ZVNlcnZpY2VDYWxsYmFjayBtQ2FsbGJhY2sgPSBuZXcgSVJlbW90ZVNlcnZpY2VDYWxsYmFjay5TdHViKCkgewotICAgICAgICAvKioKLSAgICAgICAgICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlbW90ZSBzZXJ2aWNlIHJlZ3VsYXJseSB0byB0ZWxsIHVzIGFib3V0Ci0gICAgICAgICAqIG5ldyB2YWx1ZXMuICBOb3RlIHRoYXQgSVBDIGNhbGxzIGFyZSBkaXNwYXRjaGVkIHRocm91Z2ggYSB0aHJlYWQKLSAgICAgICAgICogcG9vbCBydW5uaW5nIGluIGVhY2ggcHJvY2Vzcywgc28gdGhlIGNvZGUgZXhlY3V0aW5nIGhlcmUgd2lsbAotICAgICAgICAgKiBOT1QgYmUgcnVubmluZyBpbiBvdXIgbWFpbiB0aHJlYWQgbGlrZSBtb3N0IG90aGVyIHRoaW5ncyAtLSBzbywKLSAgICAgICAgICogdG8gdXBkYXRlIHRoZSBVSSwgd2UgbmVlZCB0byB1c2UgYSBIYW5kbGVyIHRvIGhvcCBvdmVyIHRoZXJlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgdmFsdWVDaGFuZ2VkKGludCB2YWx1ZSkgewotICAgICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2UobUhhbmRsZXIub2J0YWluTWVzc2FnZShCVU1QX01TRywgdmFsdWUsIDApKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVTVBfTVNHID0gMTsKLSAgICAKLSAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpIHsKLSAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEJVTVBfTVNHOgotICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tUZXh0LnNldFRleHQoIlJlY2VpdmVkIGZyb20gc2VydmljZTogIiArIG1zZy5hcmcxKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgc3VwZXIuaGFuZGxlTWVzc2FnZShtc2cpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgIH07Ci19Ci0vLyBFTkRfSU5DTFVERShleHBvc2luZ19hX3NlcnZpY2UpCi0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvUmVtb3RlU2VydmljZUNvbnRyb2xsZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvUmVtb3RlU2VydmljZUNvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxZDQxMS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1JlbW90ZVNlcnZpY2VDb250cm9sbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuYXBwOwotCi0vLyBOZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKLS8vIGNsYXNzIGlzIGluIGEgc3ViLXBhY2thZ2UuCi1pbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247Ci0KLXB1YmxpYyBjbGFzcyBSZW1vdGVTZXJ2aWNlQ29udHJvbGxlciBleHRlbmRzIEFjdGl2aXR5IHsKLSAgICBAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0KLSAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQucmVtb3RlX3NlcnZpY2VfY29udHJvbGxlcik7Ci0KLSAgICAgICAgLy8gV2F0Y2ggZm9yIGJ1dHRvbiBjbGlja3MuCi0gICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0KTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnRMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RvcCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0b3BMaXN0ZW5lcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0TGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQuICBJdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcKLSAgICAgICAgICAgIC8vIHVudGlsIHNvbWVvbmUgY2FsbHMgc3RvcFNlcnZpY2UoKS4KLSAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBhY3Rpb24gY29kZSBoZXJlLCBpbnN0ZWFkIG9mIGV4cGxpY3RseSBzdXBwbHlpbmcKLSAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQgbmFtZSwgc28gdGhhdCBvdGhlciBwYWNrYWdlcyBjYW4gcmVwbGFjZQotICAgICAgICAgICAgLy8gdGhlIHNlcnZpY2UuCi0gICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudCgKLSAgICAgICAgICAgICAgICAgICAgImNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHAuUkVNT1RFX1NFUlZJQ0UiKSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0b3BMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAvLyBDYW5jZWwgYSBwcmV2aW91cyBjYWxsIHRvIHN0YXJ0U2VydmljZSgpLiAgTm90ZSB0aGF0IHRoZQotICAgICAgICAgICAgLy8gc2VydmljZSB3aWxsIG5vdCBhY3R1YWxseSBzdG9wIGF0IHRoaXMgcG9pbnQgaWYgdGhlcmUgYXJlCi0gICAgICAgICAgICAvLyBzdGlsbCBib3VuZCBjbGllbnRzLgotICAgICAgICAgICAgc3RvcFNlcnZpY2UobmV3IEludGVudCgKLSAgICAgICAgICAgICAgICAgICAgImNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHAuUkVNT1RFX1NFUlZJQ0UiKSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9TZXJ2aWNlU3RhcnRBcmd1bWVudHMuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvU2VydmljZVN0YXJ0QXJndW1lbnRzLmphdmEKaW5kZXggZjRmOWFmMS4uZjU1MTQ0NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9TZXJ2aWNlU3RhcnRBcmd1bWVudHMuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1NlcnZpY2VTdGFydEFyZ3VtZW50cy5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CkBAIC0yOSwxMyArMzAsMTYgQEAKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAogaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOwogCiAvKioKICAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBpbXBsZW1lbnRpbmcgYW4gYXBwbGljYXRpb24gc2VydmljZSB0aGF0IHJ1bnMgbG9jYWxseQotICogaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB0aGUgYXBwbGljYXRpb24uICBUaGUge0BsaW5rIFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXJ9CisgKiBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSB7QGxpbmsgQ29udHJvbGxlcn0KICAqIGNsYXNzIHNob3dzIGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBzZXJ2aWNlLiAKICAqCiAgKiA8cD5Ob3RpY2UgdGhlIHVzZSBvZiB0aGUge0BsaW5rIE5vdGlmaWNhdGlvbk1hbmFnZXJ9IHdoZW4gaW50ZXJlc3RpbmcgdGhpbmdzCkBAIC00NCw3ICs0OCw3IEBACiAgKiBjYWxsaW5nIHN0YXJ0QWN0aXZpdHkoKS4KICAqIAogICogPHA+Rm9yIGFwcGxpY2F0aW9ucyB0YXJnZXRpbmcgQW5kcm9pZCAxLjUgb3IgYmV5b25kLCB5b3UgbWF5IHdhbnQgY29uc2lkZXIKLSAqIHVzaW5nIHRoZSBhbmRyb2lkLmFwcC5JbnRlbnRTZXJ2aWNlIGNsYXNzLCB3aGljaCB0YWtlcyBjYXJlIG9mIGFsbCB0aGUKKyAqIHVzaW5nIHRoZSB7QGxpbmsgYW5kcm9pZC5hcHAuSW50ZW50U2VydmljZX0gY2xhc3MsIHdoaWNoIHRha2VzIGNhcmUgb2YgYWxsIHRoZQogICogd29yayBvZiBjcmVhdGluZyB0aGUgZXh0cmEgdGhyZWFkIGFuZCBkaXNwYXRjaGluZyBjb21tYW5kcyB0byBpdC4KICAqLwogcHVibGljIGNsYXNzIFNlcnZpY2VTdGFydEFyZ3VtZW50cyBleHRlbmRzIFNlcnZpY2UgewpAQCAtNTksOCArNjMsNyBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykKLSAgICAgICAgeworICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgICAgICBCdW5kbGUgYXJndW1lbnRzID0gKEJ1bmRsZSltc2cub2JqOwogICAgICAgICAKICAgICAgICAgICAgIFN0cmluZyB0eHQgPSBhcmd1bWVudHMuZ2V0U3RyaW5nKCJuYW1lIik7CkBAIC0xMDUsNyArMTA4LDcgQEAKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgd2hvIHNob3VsZCBiZSBsYXVuY2hlZCBpZiB0aGUgdXNlciBzZWxlY3RzIG91ciBwZXJzaXN0ZW50CiAgICAgICAgIC8vIG5vdGlmaWNhdGlvbi4KLSAgICAgICAgbUludm9rZUludGVudCA9IG5ldyBJbnRlbnQodGhpcywgU2VydmljZVN0YXJ0QXJndW1lbnRzQ29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIG1JbnZva2VJbnRlbnQgPSBuZXcgSW50ZW50KHRoaXMsIENvbnRyb2xsZXIuY2xhc3MpOwogCiAgICAgICAgIC8vIFN0YXJ0IHVwIHRoZSB0aHJlYWQgcnVubmluZyB0aGUgc2VydmljZS4gIE5vdGUgdGhhdCB3ZSBjcmVhdGUgYQogICAgICAgICAvLyBzZXBhcmF0ZSB0aHJlYWQgYmVjYXVzZSB0aGUgc2VydmljZSBub3JtYWxseSBydW5zIGluIHRoZSBwcm9jZXNzJ3MKQEAgLTE3Nyw3ICsxODAsNyBAQAogCiAgICAgICAgIC8vIFRoZSBQZW5kaW5nSW50ZW50IHRvIGxhdW5jaCBvdXIgYWN0aXZpdHkgaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGlzIG5vdGlmaWNhdGlvbgogICAgICAgICBQZW5kaW5nSW50ZW50IGNvbnRlbnRJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KHRoaXMsIDAsCi0gICAgICAgICAgICAgICAgbmV3IEludGVudCh0aGlzLCBBbGFybVNlcnZpY2UuY2xhc3MpLCAwKTsKKyAgICAgICAgICAgICAgICBuZXcgSW50ZW50KHRoaXMsIENvbnRyb2xsZXIuY2xhc3MpLCAwKTsKIAogICAgICAgICAvLyBTZXQgdGhlIGluZm8gZm9yIHRoZSB2aWV3cyB0aGF0IHNob3cgaW4gdGhlIG5vdGlmaWNhdGlvbiBwYW5lbC4KICAgICAgICAgbm90aWZpY2F0aW9uLnNldExhdGVzdEV2ZW50SW5mbyh0aGlzLCBnZXRUZXh0KFIuc3RyaW5nLnNlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2xhYmVsKSwKQEAgLTE5NCw1ICsxOTcsNzYgQEAKICAgICBwcml2YXRlIHZvaWQgaGlkZU5vdGlmaWNhdGlvbigpIHsKICAgICAgICAgbU5NLmNhbmNlbChSLnN0cmluZy5zZXJ2aWNlX2NyZWF0ZWQpOwogICAgIH0KKyAgICAKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBFeGFtcGxlIG9mIGV4cGxpY2l0bHkgc3RhcnRpbmcgdGhlIHtAbGluayBTZXJ2aWNlU3RhcnRBcmd1bWVudHN9LgorICAgICAqIAorICAgICAqIDxwPk5vdGUgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGFuIGlubmVyIGNsYXNzIG9ubHkga2VlcCB0aGUgc2FtcGxlCisgICAgICogYWxsIHRvZ2V0aGVyOyB0eXBpY2FsbHkgdGhpcyBjb2RlIHdvdWxkIGFwcGVhciBpbiBzb21lIHNlcGFyYXRlIGNsYXNzLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisKKyAgICAgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnNlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIpOworCisgICAgICAgICAgICAvLyBXYXRjaCBmb3IgYnV0dG9uIGNsaWNrcy4KKyAgICAgICAgICAgIEJ1dHRvbiBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0MSk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydDFMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0Mik7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydDJMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0Myk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydDNMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0ZmFpbCk7CisgICAgICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydEZhaWxMaXN0ZW5lcik7CisgICAgICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmtpbGwpOworICAgICAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtS2lsbExpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1TdGFydDFMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KENvbnRyb2xsZXIudGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VTdGFydEFyZ3VtZW50cy5jbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnB1dEV4dHJhKCJuYW1lIiwgIk9uZSIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RhcnQyTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChDb250cm9sbGVyLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlU3RhcnRBcmd1bWVudHMuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJUd28iKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0M0xpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgc3RhcnRTZXJ2aWNlKG5ldyBJbnRlbnQoQ29udHJvbGxlci50aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoIm5hbWUiLCAiVGhyZWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoInJlZGVsaXZlciIsIHRydWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBwcml2YXRlIE9uQ2xpY2tMaXN0ZW5lciBtU3RhcnRGYWlsTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICBzdGFydFNlcnZpY2UobmV3IEludGVudChDb250cm9sbGVyLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlU3RhcnRBcmd1bWVudHMuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJGYWlsdXJlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnB1dEV4dHJhKCJmYWlsIiwgdHJ1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1LaWxsTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHNpbXVsYXRlIHRoZSBzZXJ2aWNlIGJlaW5nIGtpbGxlZCB3aGlsZSBpdCBpcworICAgICAgICAgICAgICAgIC8vIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQuCisgICAgICAgICAgICAgICAgUHJvY2Vzcy5raWxsUHJvY2VzcyhQcm9jZXNzLm15UGlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9TZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1NlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ3OWUyZS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL1NlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5hcHA7Ci0KLS8vIE5lZWQgdGhlIGZvbGxvd2luZyBpbXBvcnQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgYXBwIHJlc291cmNlcywgc2luY2UgdGhpcwotLy8gY2xhc3MgaXMgaW4gYSBzdWItcGFja2FnZS4KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotCi1pbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7Ci0KLS8qKgotICogRXhhbXBsZSBvZiBleHBsaWNpdGx5IHN0YXJ0aW5nIHRoZSB7QGxpbmsgU2VydmljZVN0YXJ0QXJndW1lbnRzfS4KLSAqLwotcHVibGljIGNsYXNzIFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LnNlcnZpY2Vfc3RhcnRfYXJndW1lbnRzX2NvbnRyb2xsZXIpOwotCi0gICAgICAgIC8vIFdhdGNoIGZvciBidXR0b24gY2xpY2tzLgotICAgICAgICBCdXR0b24gYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydDEpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydDFMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuc3RhcnQyKTsKLSAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtU3RhcnQyTGlzdGVuZXIpOwotICAgICAgICBidXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLnN0YXJ0Myk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobVN0YXJ0M0xpc3RlbmVyKTsKLSAgICAgICAgYnV0dG9uID0gKEJ1dHRvbilmaW5kVmlld0J5SWQoUi5pZC5zdGFydGZhaWwpOwotICAgICAgICBidXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1TdGFydEZhaWxMaXN0ZW5lcik7Ci0gICAgICAgIGJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQua2lsbCk7Ci0gICAgICAgIGJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobUtpbGxMaXN0ZW5lcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0MUxpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIudGhpcywKLSAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJPbmUiKSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0Mkxpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIudGhpcywKLSAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJUd28iKSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0M0xpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIudGhpcywKLSAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJUaHJlZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnB1dEV4dHJhKCJyZWRlbGl2ZXIiLCB0cnVlKSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbVN0YXJ0RmFpbExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIHN0YXJ0U2VydmljZShuZXcgSW50ZW50KFNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIudGhpcywKLSAgICAgICAgICAgICAgICAgICAgU2VydmljZVN0YXJ0QXJndW1lbnRzLmNsYXNzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYSgibmFtZSIsICJGYWlsdXJlIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHV0RXh0cmEoImZhaWwiLCB0cnVlKSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUtpbGxMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHNpbXVsYXRlIHRoZSBzZXJ2aWNlIGJlaW5nIGtpbGxlZCB3aGlsZSBpdCBpcwotICAgICAgICAgICAgLy8gcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC4KLSAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MoUHJvY2Vzcy5teVBpZCgpKTsKLSAgICAgICAgfQotICAgIH07Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL19pbmRleC5odG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2FwcC9faW5kZXguaHRtbAppbmRleCAyNDU0YmFkLi5mZmY1Y2UyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvYXBwL19pbmRleC5odG1sCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9hcHAvX2luZGV4Lmh0bWwKQEAgLTQxLDU1ICs0MSw0NCBAQAogCiA8aDM+U2VydmljZTwvaDM+CiA8ZGw+Ci0gIDxkdD48YSBocmVmPSJMb2NhbFNlcnZpY2VDb250cm9sbGVyLmh0bWwiPkxvY2FsIFNlcnZpY2UgQ29udHJvbGxlcjwvYT48L2R0PgotICA8ZGQ+U3RhcnRzIGFuZCBzdG9wcyB0aGUgc2VydmljZSBjbGFzcwotICA8YSBocmVmPSJMb2NhbFNlcnZpY2UuaHRtbCI+TG9jYWxTZXJ2aWNlPC9hPiB0aGF0IHJ1bnMgaW4gdGhlIHNhbWUKLSAgcHJvY2VzcyBhcyB0aGUgYWN0aXZpdHksIHRvIGRlbW9uc3RyYXRlIGEgc2VydmljZSdzCi0gIGxpZmVjeWNsZSB3aGVuIHVzaW5nIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNzdGFydFNlcnZpY2UKKyAgPGR0PjxhIGhyZWY9IkxvY2FsU2VydmljZS5odG1sIj5Mb2NhbCBTZXJ2aWNlIENvbnRyb2xsZXIgYW5kCisgICAgICAgIExvY2FsIFNlcnZpY2UgQmluZGluZzwvYT48L2R0PgorICA8ZGQ+RGVtb25zdHJhdGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgc2VydmljZSB0aGF0IHJ1bnMgaW4gdGhlIHNhbWUKKyAgcHJvY2VzcyBhcyBpdHMgY2xpZW50KHMpLiAgU2hvd3MgaG93IHRob3NlIGNsaWVudHMgY2FuIGVpdGhlciBzdGFydC9zdG9wIGl0CisgIHdpdGgge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I3N0YXJ0U2VydmljZQogICBDb250ZXh0LnN0YXJ0U2VydmljZX0gYW5kIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNzdG9wU2VydmljZQotICBDb250ZXh0LnN0b3BTZXJ2aWNlfS48L2RkPgotCi0gIDxkdD48YSBocmVmPSJMb2NhbFNlcnZpY2VCaW5kaW5nLmh0bWwiPkxvY2FsIFNlcnZpY2UgQmluZGluZzwvYT48L2R0PgotICA8ZGQ+RGVtb25zdHJhdGVzIGJpbmRpbmcgdG8gYSBzZXJ2aWNlIGNsYXNzCi0gIDxhIGhyZWY9IkxvY2FsU2VydmljZS5odG1sIj5Mb2NhbFNlcnZpY2U8L2E+IHRoYXQgcnVucyBpbiB0aGUgc2FtZQotICBwcm9jZXNzIGFzIHRoZSBhY3Rpdml0eSwgdG8gZGVtb25zdHJhdGUgdXNpbmcgdGhlCisgIENvbnRleHQuc3RvcFNlcnZpY2V9LCBvciBiaW5kIGFuZCBjYWxsIGl0IHdpdGgKICAge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I2JpbmRTZXJ2aWNlIENvbnRleHQuYmluZFNlcnZpY2V9IGFuZAotICB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjdW5iaW5kU2VydmljZSBDb250ZXh0LnVuaW5kU2VydmljZX0KLSAgbWV0aG9kcyB3aXRoIGEgc2VydmljZS4gIFRoaXMgYWxzbyBzaG93cyBob3cgeW91IGNhbiBzaW1wbGlmeSB3b3JraW5nCisgIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCN1bmJpbmRTZXJ2aWNlIENvbnRleHQudW5pbmRTZXJ2aWNlfS4KKyAgVGhpcyBhbHNvIHNob3dzIGhvdyB5b3UgY2FuIHNpbXBsaWZ5IHdvcmtpbmcKICAgd2l0aCBhIHNlcnZpY2Ugd2hlbiB5b3Uga25vdyBpdCB3aWxsIG9ubHkgcnVuIGluIHlvdXIgb3duIHByb2Nlc3MuPC9kZD4KLQotICA8ZHQ+PGEgaHJlZj0iUmVtb3RlU2VydmljZUNvbnRyb2xsZXIuaHRtbCI+UmVtb3RlIFNlcnZpY2UgQ29udHJvbGxlcjwvYT48L2R0PgorICAKKyAgPGR0PjxhIGhyZWY9IlJlbW90ZVNlcnZpY2UuaHRtbCI+UmVtb3RlIFNlcnZpY2UgQ29udHJvbGxlciBhbmQKKyAgICAgICAgUmVtb3ZlIFNlcnZpY2UgQmluZGluZzwvYT48L2R0PgogICA8ZGQ+RGVtb25zdHJhdGVzIHN0YXJ0aW5nIGEgc2VydmljZSBpbiBhIHNlcGFyYXRlIHByb2Nlc3MsIGJ5IGFzc2lnbmluZwogICA8Y29kZT5hbmRyb2lkOnByb2Nlc3M9JnF1b3Q7OnJlbW90ZSZxdW90OzwvY29kZT4gdG8gdGhlIHNlcnZpY2UgaW4gdGhlCi0gIEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZS4gPC9kZD4KLQotICA8ZHQ+PGEgaHJlZj0iUmVtb3RlU2VydmljZUJpbmRpbmcuaHRtbCI+UmVtb3RlIFNlcnZpY2UgQmluZGluZzwvYT48L2R0PgotICA8ZGQ+RGVtb25zdHJhdGVzIGJpbmRpbmcgdG8gYSByZW1vdGUgc2VydmljZSwgc2ltaWxhciB0byB0aGUgTG9jYWwgU2VydmljZQotICBCaW5kaW5nIHNhbXBsZSwgYnV0IGlsbHVzdHJhdGluZyB0aGUgYWRkaXRpb25hbCB3b3JrIChkZWZpbmluZyBhaWRsCisgIEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZS4gIFNob3dzIGhvdyB0aG9zZSBjbGllbnRzIGNhbiBlaXRoZXIgc3RhcnQvc3RvcCBpdAorICB3aXRoIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCNzdGFydFNlcnZpY2UKKyAgQ29udGV4dC5zdGFydFNlcnZpY2V9IGFuZCB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjc3RvcFNlcnZpY2UKKyAgQ29udGV4dC5zdG9wU2VydmljZX0sIG9yIGJpbmQgYW5kIGNhbGwgaXQgd2l0aAorICB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRleHQjYmluZFNlcnZpY2UgQ29udGV4dC5iaW5kU2VydmljZX0gYW5kCisgIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCN1bmJpbmRTZXJ2aWNlIENvbnRleHQudW5pbmRTZXJ2aWNlfS4KKyAgQmluZGluZyBpcyBzaW1pbGFyIHRvIHRoZSBsb2NhbCBzZXJ2aWNlIHNhbXBsZSwKKyAgYnV0IGlsbHVzdHJhdGVzIHRoZSBhZGRpdGlvbmFsIHdvcmsgKGRlZmluaW5nIGFpZGwKICAgaW50ZXJmYWNlcykgbmVlZGVkIHRvIGludGVyYWN0IHdpdGggYSBzZXJ2aWNlIGluIGFub3RoZXIgcHJvY2Vzcy4gIEFsc28KICAgc2hvd3MgaG93IGEgc2VydmljZSBjYW4gcHVibGlzaCBtdWx0aXBsZSBpbnRlcmZhY2VzIGFuZCBpbXBsZW1lbnQKICAgY2FsbGJhY2tzIHRvIGl0cyBjbGllbnRzLjwvZGQ+CiAKLSAgPGR0PjxhIGhyZWY9IlNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIuaHRtbCI+U2VydmljZSBTdGFydCBBcmd1bWVudHMgQ29udHJvbGxlcjwvYT48L2R0PgorICA8ZHQ+PGEgaHJlZj0iU2VydmljZVN0YXJ0QXJndW1lbnRzLmh0bWwiPlNlcnZpY2UgU3RhcnQgQXJndW1lbnRzIENvbnRyb2xsZXI8L2E+PC9kdD4KICAgPGRkPkRlbW9uc3RyYXRlcyBob3cgeW91IGNhbiB1c2UgYSBTZXJ2aWNlIGFzIGEgam9iIHF1ZXVlLCB3aGVyZSB5b3UgCiAgIHN1Ym1pdCBqb2JzIHRvIGl0IHdpdGgge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I3N0YXJ0U2VydmljZQogICBDb250ZXh0LnN0YXJ0U2VydmljZX0gaW5zdGVhZCBvZiBiaW5kaW5nIHRvIHRoZSBzZXJ2aWNlLiAgU3VjaCBhIHNlcnZpY2UKICAgYXV0b21hdGljYWxseSBzdG9wcyBpdHNlbGYgb25jZSBhbGwgam9icyBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgVGhpcyBjYW4gYmUKICAgYSB2ZXJ5IGNvbnZlbmllbnQgd2F5IHRvIGludGVyYWN0IHdpdGggYSBzZXJ2aWNlIHdoZW4geW91IGRvIG5vdCBuZWVkCi0gIGEgcmVzdWx0IGJhY2sgZnJvbSBpdC4KLSAgPGRsPgotICA8ZHQ+Q29kZToKLSAgPGRkPiA8YSBocmVmPSJTZXJ2aWNlU3RhcnRBcmd1bWVudHNDb250cm9sbGVyLmh0bWwiPlNlcnZpY2VTdGFydEFyZ3VtZW50c0NvbnRyb2xsZXIuamF2YTwvYT4KLSAgPGRkPiA8YSBocmVmPSJTZXJ2aWNlU3RhcnRBcmd1bWVudHMuaHRtbCI+U2VydmljZVN0YXJ0QXJndW1lbnRzLmphdmE8L2E+Ci0gIDxkdD5MYXlvdXQ6Ci0gIDxkZD4gPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vcmVzL2xheW91dC9zZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyLmh0bWwiPgotICBzZXJ2aWNlX3N0YXJ0X2FyZ3VtZW50c19jb250cm9sbGVyLnhtbDwvYT4KLSAgPC9kbD4KLSAgPC9kZD4KKyAgYSByZXN1bHQgYmFjayBmcm9tIGl0LjwvZGQ+CiAgIAotICA8ZHQ+PGEgaHJlZj0iRm9yZWdyb3VuZFNlcnZpY2VDb250cm9sbGVyLmh0bWwiPkZvcmVncm91bmQgU2VydmljZSBDb250cm9sbGVyPC9hPjwvZHQ+Ci0gIDxkZD5Db250cm9scyB0aGUgc2VydmljZSBjbGFzcyAKLSAgPGEgaHJlZj0iRm9yZWdyb3VuZFNlcnZpY2UuaHRtbCI+Rm9yZWdyb3VuZFNlcnZpY2U8L2E+LCB3aGljaCBzaG93cyBob3cgeW91CisgIDxkdD48YSBocmVmPSJGb3JlZ3JvdW5kU2VydmljZS5odG1sIj5Gb3JlZ3JvdW5kIFNlcnZpY2UgQ29udHJvbGxlcjwvYT48L2R0PgorICA8ZGQ+U2hvd3MgaG93IHlvdQogICBjYW4gd3JpdGUgYSBTZXJ2aWNlIHRoYXQgcnVucyBpbiB0aGUgZm9yZWdyb3VuZCBhbmQgd29ya3Mgb24gYm90aCBwcmUtMi4wCiAgIGFuZCBwb3N0LTIuMCB2ZXJzaW9ucyBvZiB0aGUgcGxhdGZvcm0uICBUaGlzIGV4YW1wbGUgd2lsbCBzZWxlY3RpdmVseSB1c2UKICAgdGhlIG5ldyBmb3JlZ3JvdW5kIEFQSXMgdGhhdCB3ZXJlIGludHJvZHVjZWQgaW4gQW5kcm9pZCAyLjAgaWYgdGhleSBhcmUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L0V4dGVybmFsU3RvcmFnZS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2NvbnRlbnQvRXh0ZXJuYWxTdG9yYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk1MGEyYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L0V4dGVybmFsU3RvcmFnZS5qYXZhCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuY29udGVudDsKKworLy9OZWVkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGFwcCByZXNvdXJjZXMsIHNpbmNlIHRoaXMKKy8vY2xhc3MgaXMgaW4gYSBzdWItcGFja2FnZS4KK2ltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYVNjYW5uZXJDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CisKKworLyoqCisqIERlbW9uc3RyYXRpb24gb2Ygc3R5bGVkIHRleHQgcmVzb3VyY2VzLgorKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbFN0b3JhZ2UgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgVmlld0dyb3VwIG1MYXlvdXQ7CisgICAgCisgICAgc3RhdGljIGNsYXNzIEl0ZW0geworICAgICAgICBWaWV3IG1Sb290OworICAgICAgICBCdXR0b24gbUNyZWF0ZTsKKyAgICAgICAgQnV0dG9uIG1EZWxldGU7CisgICAgfQorICAgIAorICAgIEl0ZW0gbUV4dGVybmFsU3RvcmFnZVB1YmxpY1BpY3R1cmU7CisgICAgSXRlbSBtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmU7CisgICAgSXRlbSBtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGU7CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCisgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmV4dGVybmFsX3N0b3JhZ2UpOworICAgICAgICBtTGF5b3V0ID0gKFZpZXdHcm91cClmaW5kVmlld0J5SWQoUi5pZC5sYXlvdXQpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHVibGljUGljdHVyZSA9IGNyZWF0ZVN0b3JhZ2VDb250cm9scygKKyAgICAgICAgICAgICAgICAiUGljdHVyZTogZ2V0RXh0ZXJuYWxTdG9yYWdlUHVibGljRGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VQdWJsaWNEaXJlY3RvcnkoCisgICAgICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpLAorICAgICAgICAgICAgICAgIG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4dGVybmFsU3RvcmFnZVB1YmxpY1BpY3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUV4dGVybmFsU3RvcmFnZVB1YmxpY1BpY3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgbUxheW91dC5hZGRWaWV3KG1FeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlLm1Sb290KTsKKyAgICAgICAgbUV4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlID0gY3JlYXRlU3RvcmFnZUNvbnRyb2xzKAorICAgICAgICAgICAgICAgICJQaWN0dXJlIGdldEV4dGVybmFsRmlsZXNEaXIiLAorICAgICAgICAgICAgICAgIGdldEV4dGVybmFsRmlsZXNEaXIoRW52aXJvbm1lbnQuRElSRUNUT1JZX1BJQ1RVUkVTKSwKKyAgICAgICAgICAgICAgICBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXh0ZXJuYWxTdG9yYWdlU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgbUxheW91dC5hZGRWaWV3KG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZS5tUm9vdCk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZSA9IGNyZWF0ZVN0b3JhZ2VDb250cm9scygKKyAgICAgICAgICAgICAgICAiRmlsZSBnZXRFeHRlcm5hbEZpbGVzRGlyIiwKKyAgICAgICAgICAgICAgICBnZXRFeHRlcm5hbEZpbGVzRGlyKG51bGwpLAorICAgICAgICAgICAgICAgIG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVFeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRXh0ZXJuYWxTdG9yYWdlU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICBtTGF5b3V0LmFkZFZpZXcobUV4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlLm1Sb290KTsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0V2F0Y2hpbmdFeHRlcm5hbFN0b3JhZ2UoKTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25EZXN0cm95KCkgeworICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTsKKyAgICAgICAgc3RvcFdhdGNoaW5nRXh0ZXJuYWxTdG9yYWdlKCk7CisgICAgfQorCisgICAgdm9pZCBoYW5kbGVFeHRlcm5hbFN0b3JhZ2VTdGF0ZShib29sZWFuIGF2YWlsYWJsZSwgYm9vbGVhbiB3cml0ZWFibGUpIHsKKyAgICAgICAgYm9vbGVhbiBoYXMgPSBoYXNFeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlKCk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlLm1DcmVhdGUuc2V0RW5hYmxlZCh3cml0ZWFibGUgJiYgIWhhcyk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlLm1EZWxldGUuc2V0RW5hYmxlZCh3cml0ZWFibGUgJiYgaGFzKTsKKyAgICAgICAgaGFzID0gaGFzRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmUoKTsKKyAgICAgICAgbUV4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlLm1DcmVhdGUuc2V0RW5hYmxlZCh3cml0ZWFibGUgJiYgIWhhcyk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlUGljdHVyZS5tRGVsZXRlLnNldEVuYWJsZWQod3JpdGVhYmxlICYmIGhhcyk7CisgICAgICAgIGhhcyA9IGhhc0V4dGVybmFsU3RvcmFnZVByaXZhdGVGaWxlKCk7CisgICAgICAgIG1FeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZS5tQ3JlYXRlLnNldEVuYWJsZWQod3JpdGVhYmxlICYmICFoYXMpOworICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUubURlbGV0ZS5zZXRFbmFibGVkKHdyaXRlYWJsZSAmJiBoYXMpOworICAgIH0KKyAgICAKKy8vIEJFR0lOX0lOQ0xVREUobW9uaXRvcl9zdG9yYWdlKQorICAgIEJyb2FkY2FzdFJlY2VpdmVyIG1FeHRlcm5hbFN0b3JhZ2VSZWNlaXZlcjsKKyAgICBib29sZWFuIG1FeHRlcm5hbFN0b3JhZ2VBdmFpbGFibGUgPSBmYWxzZTsKKyAgICBib29sZWFuIG1FeHRlcm5hbFN0b3JhZ2VXcml0ZWFibGUgPSBmYWxzZTsKKyAgICAKKyAgICB2b2lkIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCkgeworICAgICAgICBTdHJpbmcgc3RhdGUgPSBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOworICAgICAgICBpZiAoRW52aXJvbm1lbnQuTUVESUFfTU9VTlRFRC5lcXVhbHMoc3RhdGUpKSB7CisgICAgICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlQXZhaWxhYmxlID0gbUV4dGVybmFsU3RvcmFnZVdyaXRlYWJsZSA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoRW52aXJvbm1lbnQuTUVESUFfTU9VTlRFRF9SRUFEX09OTFkuZXF1YWxzKHN0YXRlKSkgeworICAgICAgICAgICAgbUV4dGVybmFsU3RvcmFnZUF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlV3JpdGVhYmxlID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtRXh0ZXJuYWxTdG9yYWdlQXZhaWxhYmxlID0gbUV4dGVybmFsU3RvcmFnZVdyaXRlYWJsZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGhhbmRsZUV4dGVybmFsU3RvcmFnZVN0YXRlKG1FeHRlcm5hbFN0b3JhZ2VBdmFpbGFibGUsCisgICAgICAgICAgICAgICAgbUV4dGVybmFsU3RvcmFnZVdyaXRlYWJsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRXYXRjaGluZ0V4dGVybmFsU3RvcmFnZSgpIHsKKyAgICAgICAgbUV4dGVybmFsU3RvcmFnZVJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICAgICAgTG9nLmkoInRlc3QiLCAiU3RvcmFnZTogIiArIGludGVudC5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZUV4dGVybmFsU3RvcmFnZVN0YXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7CisgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9NRURJQV9NT1VOVEVEKTsKKyAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX01FRElBX1JFTU9WRUQpOworICAgICAgICByZWdpc3RlclJlY2VpdmVyKG1FeHRlcm5hbFN0b3JhZ2VSZWNlaXZlciwgZmlsdGVyKTsKKyAgICAgICAgdXBkYXRlRXh0ZXJuYWxTdG9yYWdlU3RhdGUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9wV2F0Y2hpbmdFeHRlcm5hbFN0b3JhZ2UoKSB7CisgICAgICAgIHVucmVnaXN0ZXJSZWNlaXZlcihtRXh0ZXJuYWxTdG9yYWdlUmVjZWl2ZXIpOworICAgIH0KKyAvLyBFTkRfSU5DTFVERShtb25pdG9yX3N0b3JhZ2UpCisgICAgCisgLy8gQkVHSU5fSU5DTFVERShwdWJsaWNfcGljdHVyZSkKKyAgICB2b2lkIGNyZWF0ZUV4dGVybmFsU3RvcmFnZVB1YmxpY1BpY3R1cmUoKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHBhdGggd2hlcmUgd2Ugd2lsbCBwbGFjZSBvdXIgcGljdHVyZSBpbiB0aGUgdXNlcidzCisgICAgICAgIC8vIHB1YmxpYyBwaWN0dXJlcyBkaXJlY3RvcnkuICBOb3RlIHRoYXQgeW91IHNob3VsZCBiZSBjYXJlZnVsIGFib3V0CisgICAgICAgIC8vIHdoYXQgeW91IHBsYWNlIGhlcmUsIHNpbmNlIHRoZSB1c2VyIG9mdGVuIG1hbmFnZXMgdGhlc2UgZmlsZXMuICBGb3IKKyAgICAgICAgLy8gcGljdHVyZXMgYW5kIG90aGVyIG1lZGlhIG93bmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgY29uc2lkZXIKKyAgICAgICAgLy8gQ29udGV4dC5nZXRFeHRlcm5hbE1lZGlhRGlyKCkuCisgICAgICAgIEZpbGUgcGF0aCA9IEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZVB1YmxpY0RpcmVjdG9yeSgKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpOworICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLCAiRGVtb1BpY3R1cmUuanBnIik7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBQaWN0dXJlcyBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgICAgICAgcGF0aC5ta2RpcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVmVyeSBzaW1wbGUgY29kZSB0byBjb3B5IGEgcGljdHVyZSBmcm9tIHRoZSBhcHBsaWNhdGlvbidzCisgICAgICAgICAgICAvLyByZXNvdXJjZSBpbnRvIHRoZSBleHRlcm5hbCBmaWxlLiAgTm90ZSB0aGF0IHRoaXMgY29kZSBkb2VzCisgICAgICAgICAgICAvLyBubyBlcnJvciBjaGVja2luZywgYW5kIGFzc3VtZXMgdGhlIHBpY3R1cmUgaXMgc21hbGwgKGRvZXMgbm90CisgICAgICAgICAgICAvLyB0cnkgdG8gY29weSBpdCBpbiBjaHVua3MpLiAgTm90ZSB0aGF0IGlmIGV4dGVybmFsIHN0b3JhZ2UgaXMKKyAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgc2lsZW50bHkgZmFpbC4KKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gZ2V0UmVzb3VyY2VzKCkub3BlblJhd1Jlc291cmNlKFIuZHJhd2FibGUuYmFsbG9vbnMpOworICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7CisgICAgICAgICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2lzLmF2YWlsYWJsZSgpXTsKKyAgICAgICAgICAgIGlzLnJlYWQoZGF0YSk7CisgICAgICAgICAgICBvcy53cml0ZShkYXRhKTsKKyAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICBvcy5jbG9zZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUZWxsIHRoZSBtZWRpYSBzY2FubmVyIGFib3V0IHRoZSBuZXcgZmlsZSBzbyB0aGF0IGl0IGlzCisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBhdmFpbGFibGUgdG8gdGhlIHVzZXIuCisgICAgICAgICAgICBNZWRpYVNjYW5uZXJDb25uZWN0aW9uLnNjYW5GaWxlKHRoaXMsCisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IGZpbGUudG9TdHJpbmcoKSB9LCBudWxsLAorICAgICAgICAgICAgICAgICAgICBuZXcgTWVkaWFTY2FubmVyQ29ubmVjdGlvbi5TY2FuUmVzdWx0TGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TY2FuQ29tcGxldGVkKFN0cmluZyBwYXRoLCBVcmkgdXJpKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5pKCJFeHRlcm5hbFN0b3JhZ2UiLCAiU2Nhbm5lZCAiICsgcGF0aCArICI6Iik7CisgICAgICAgICAgICAgICAgICAgIExvZy5pKCJFeHRlcm5hbFN0b3JhZ2UiLCAiLT4gdXJpPSIgKyB1cmkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBVbmFibGUgdG8gY3JlYXRlIGZpbGUsIGxpa2VseSBiZWNhdXNlIGV4dGVybmFsIHN0b3JhZ2UgaXMKKyAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgbW91bnRlZC4KKyAgICAgICAgICAgIExvZy53KCJFeHRlcm5hbFN0b3JhZ2UiLCAiRXJyb3Igd3JpdGluZyAiICsgZmlsZSwgZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVFeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlKCkgeworICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHBpY3R1cmUgaW4gdGhlIHVzZXIncworICAgICAgICAvLyBwdWJsaWMgcGljdHVyZXMgZGlyZWN0b3J5IGFuZCBkZWxldGUgdGhlIGZpbGUuICBJZiBleHRlcm5hbAorICAgICAgICAvLyBzdG9yYWdlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgZmFpbC4KKyAgICAgICAgRmlsZSBwYXRoID0gRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlUHVibGljRGlyZWN0b3J5KAorICAgICAgICAgICAgICAgIEVudmlyb25tZW50LkRJUkVDVE9SWV9QSUNUVVJFUyk7CisgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGgsICJEZW1vUGljdHVyZS5qcGciKTsKKyAgICAgICAgZmlsZS5kZWxldGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbGVhbiBoYXNFeHRlcm5hbFN0b3JhZ2VQdWJsaWNQaWN0dXJlKCkgeworICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHBpY3R1cmUgaW4gdGhlIHVzZXIncworICAgICAgICAvLyBwdWJsaWMgcGljdHVyZXMgZGlyZWN0b3J5IGFuZCBjaGVjayBpZiB0aGUgZmlsZSBleGlzdHMuICBJZgorICAgICAgICAvLyBleHRlcm5hbCBzdG9yYWdlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgdGhpbmsgdGhlCisgICAgICAgIC8vIHBpY3R1cmUgZG9lc24ndCBleGlzdC4KKyAgICAgICAgRmlsZSBwYXRoID0gRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlUHVibGljRGlyZWN0b3J5KAorICAgICAgICAgICAgICAgIEVudmlyb25tZW50LkRJUkVDVE9SWV9QSUNUVVJFUyk7CisgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGgsICJEZW1vUGljdHVyZS5qcGciKTsKKyAgICAgICAgcmV0dXJuIGZpbGUuZXhpc3RzKCk7CisgICAgfQorLy8gRU5EX0lOQ0xVREUocHVibGljX3BpY3R1cmUpCisgICAgCisvLyBCRUdJTl9JTkNMVURFKHByaXZhdGVfcGljdHVyZSkKKyAgICB2b2lkIGNyZWF0ZUV4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlKCkgeworICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHBpY3R1cmUgaW4gb3VyIG93biBwcml2YXRlCisgICAgICAgIC8vIHBpY3R1cmVzIGRpcmVjdG9yeS4gIE5vdGUgdGhhdCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwbGFjZSBhCisgICAgICAgIC8vIHBpY3R1cmUgaW4gRElSRUNUT1JZX1BJQ1RVUkVTLCBzaW5jZSB0aGUgbWVkaWEgc2Nhbm5lciB3aWxsIHNlZQorICAgICAgICAvLyBhbGwgbWVkaWEgaW4gdGhlc2UgZGlyZWN0b3JpZXM7IHRoaXMgbWF5IGJlIHVzZWZ1bCB3aXRoIG90aGVyCisgICAgICAgIC8vIG1lZGlhIHR5cGVzIHN1Y2ggYXMgRElSRUNUT1JZX01VU0lDIGhvd2V2ZXIgdG8gaGVscCBpdCBjbGFzc2lmeQorICAgICAgICAvLyB5b3VyIG1lZGlhIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLgorICAgICAgICBGaWxlIHBhdGggPSBnZXRFeHRlcm5hbEZpbGVzRGlyKEVudmlyb25tZW50LkRJUkVDVE9SWV9QSUNUVVJFUyk7CisgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGgsICJEZW1vUGljdHVyZS5qcGciKTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBWZXJ5IHNpbXBsZSBjb2RlIHRvIGNvcHkgYSBwaWN0dXJlIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MKKyAgICAgICAgICAgIC8vIHJlc291cmNlIGludG8gdGhlIGV4dGVybmFsIGZpbGUuICBOb3RlIHRoYXQgdGhpcyBjb2RlIGRvZXMKKyAgICAgICAgICAgIC8vIG5vIGVycm9yIGNoZWNraW5nLCBhbmQgYXNzdW1lcyB0aGUgcGljdHVyZSBpcyBzbWFsbCAoZG9lcyBub3QKKyAgICAgICAgICAgIC8vIHRyeSB0byBjb3B5IGl0IGluIGNodW5rcykuICBOb3RlIHRoYXQgaWYgZXh0ZXJuYWwgc3RvcmFnZSBpcworICAgICAgICAgICAgLy8gbm90IGN1cnJlbnRseSBtb3VudGVkIHRoaXMgd2lsbCBzaWxlbnRseSBmYWlsLgorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBnZXRSZXNvdXJjZXMoKS5vcGVuUmF3UmVzb3VyY2UoUi5kcmF3YWJsZS5iYWxsb29ucyk7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKKyAgICAgICAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbaXMuYXZhaWxhYmxlKCldOworICAgICAgICAgICAgaXMucmVhZChkYXRhKTsKKyAgICAgICAgICAgIG9zLndyaXRlKGRhdGEpOworICAgICAgICAgICAgaXMuY2xvc2UoKTsKKyAgICAgICAgICAgIG9zLmNsb3NlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRlbGwgdGhlIG1lZGlhIHNjYW5uZXIgYWJvdXQgdGhlIG5ldyBmaWxlIHNvIHRoYXQgaXQgaXMKKyAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0byB0aGUgdXNlci4KKyAgICAgICAgICAgIE1lZGlhU2Nhbm5lckNvbm5lY3Rpb24uc2NhbkZpbGUodGhpcywKKyAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgZmlsZS50b1N0cmluZygpIH0sIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG5ldyBNZWRpYVNjYW5uZXJDb25uZWN0aW9uLlNjYW5SZXN1bHRMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNjYW5Db21wbGV0ZWQoU3RyaW5nIHBhdGgsIFVyaSB1cmkpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmkoIkV4dGVybmFsU3RvcmFnZSIsICJTY2FubmVkICIgKyBwYXRoICsgIjoiKTsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmkoIkV4dGVybmFsU3RvcmFnZSIsICItPiB1cmk9IiArIHVyaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFVuYWJsZSB0byBjcmVhdGUgZmlsZSwgbGlrZWx5IGJlY2F1c2UgZXh0ZXJuYWwgc3RvcmFnZSBpcworICAgICAgICAgICAgLy8gbm90IGN1cnJlbnRseSBtb3VudGVkLgorICAgICAgICAgICAgTG9nLncoIkV4dGVybmFsU3RvcmFnZSIsICJFcnJvciB3cml0aW5nICIgKyBmaWxlLCBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZUV4dGVybmFsU3RvcmFnZVByaXZhdGVQaWN0dXJlKCkgeworICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHBpY3R1cmUgaW4gdGhlIHVzZXIncworICAgICAgICAvLyBwdWJsaWMgcGljdHVyZXMgZGlyZWN0b3J5IGFuZCBkZWxldGUgdGhlIGZpbGUuICBJZiBleHRlcm5hbAorICAgICAgICAvLyBzdG9yYWdlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgZmFpbC4KKyAgICAgICAgRmlsZSBwYXRoID0gZ2V0RXh0ZXJuYWxGaWxlc0RpcihFbnZpcm9ubWVudC5ESVJFQ1RPUllfUElDVFVSRVMpOworICAgICAgICBpZiAocGF0aCAhPSBudWxsKSB7CisgICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoLCAiRGVtb1BpY3R1cmUuanBnIik7CisgICAgICAgICAgICBmaWxlLmRlbGV0ZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2xlYW4gaGFzRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZVBpY3R1cmUoKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHBhdGggd2hlcmUgd2Ugd2lsbCBwbGFjZSBvdXIgcGljdHVyZSBpbiB0aGUgdXNlcidzCisgICAgICAgIC8vIHB1YmxpYyBwaWN0dXJlcyBkaXJlY3RvcnkgYW5kIGNoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cy4gIElmCisgICAgICAgIC8vIGV4dGVybmFsIHN0b3JhZ2UgaXMgbm90IGN1cnJlbnRseSBtb3VudGVkIHRoaXMgd2lsbCB0aGluayB0aGUKKyAgICAgICAgLy8gcGljdHVyZSBkb2Vzbid0IGV4aXN0LgorICAgICAgICBGaWxlIHBhdGggPSBnZXRFeHRlcm5hbEZpbGVzRGlyKEVudmlyb25tZW50LkRJUkVDVE9SWV9QSUNUVVJFUyk7CisgICAgICAgIGlmIChwYXRoICE9IG51bGwpIHsKKyAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGgsICJEZW1vUGljdHVyZS5qcGciKTsKKyAgICAgICAgICAgIHJldHVybiBmaWxlLmV4aXN0cygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisvLyBFTkRfSU5DTFVERShwcml2YXRlX3BpY3R1cmUpCisgICAgICAgIAorLy8gQkVHSU5fSU5DTFVERShwcml2YXRlX2ZpbGUpCisgICAgIHZvaWQgY3JlYXRlRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUoKSB7CisgICAgICAgICAvLyBDcmVhdGUgYSBwYXRoIHdoZXJlIHdlIHdpbGwgcGxhY2Ugb3VyIHByaXZhdGUgZmlsZSBvbiBleHRlcm5hbAorICAgICAgICAgLy8gc3RvcmFnZS4KKyAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldEV4dGVybmFsRmlsZXNEaXIobnVsbCksICJEZW1vRmlsZS5qcGciKTsKKyAgICAgICAgIAorICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAvLyBWZXJ5IHNpbXBsZSBjb2RlIHRvIGNvcHkgYSBwaWN0dXJlIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MKKyAgICAgICAgICAgICAvLyByZXNvdXJjZSBpbnRvIHRoZSBleHRlcm5hbCBmaWxlLiAgTm90ZSB0aGF0IHRoaXMgY29kZSBkb2VzCisgICAgICAgICAgICAgLy8gbm8gZXJyb3IgY2hlY2tpbmcsIGFuZCBhc3N1bWVzIHRoZSBwaWN0dXJlIGlzIHNtYWxsIChkb2VzIG5vdAorICAgICAgICAgICAgIC8vIHRyeSB0byBjb3B5IGl0IGluIGNodW5rcykuICBOb3RlIHRoYXQgaWYgZXh0ZXJuYWwgc3RvcmFnZSBpcworICAgICAgICAgICAgIC8vIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgc2lsZW50bHkgZmFpbC4KKyAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGdldFJlc291cmNlcygpLm9wZW5SYXdSZXNvdXJjZShSLmRyYXdhYmxlLmJhbGxvb25zKTsKKyAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKKyAgICAgICAgICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2lzLmF2YWlsYWJsZSgpXTsKKyAgICAgICAgICAgICBpcy5yZWFkKGRhdGEpOworICAgICAgICAgICAgIG9zLndyaXRlKGRhdGEpOworICAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICAgb3MuY2xvc2UoKTsKKyAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAvLyBVbmFibGUgdG8gY3JlYXRlIGZpbGUsIGxpa2VseSBiZWNhdXNlIGV4dGVybmFsIHN0b3JhZ2UgaXMKKyAgICAgICAgICAgICAvLyBub3QgY3VycmVudGx5IG1vdW50ZWQuCisgICAgICAgICAgICAgTG9nLncoIkV4dGVybmFsU3RvcmFnZSIsICJFcnJvciB3cml0aW5nICIgKyBmaWxlLCBlKTsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICAKKyAgICAgdm9pZCBkZWxldGVFeHRlcm5hbFN0b3JhZ2VQcml2YXRlRmlsZSgpIHsKKyAgICAgICAgIC8vIEdldCBwYXRoIGZvciB0aGUgZmlsZSBvbiBleHRlcm5hbCBzdG9yYWdlLiAgSWYgZXh0ZXJuYWwKKyAgICAgICAgIC8vIHN0b3JhZ2UgaXMgbm90IGN1cnJlbnRseSBtb3VudGVkIHRoaXMgd2lsbCBmYWlsLgorICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZ2V0RXh0ZXJuYWxGaWxlc0RpcihudWxsKSwgIkRlbW9GaWxlLmpwZyIpOworICAgICAgICAgaWYgKGZpbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgIGZpbGUuZGVsZXRlKCk7CisgICAgICAgICB9CisgICAgIH0KKyAgICAgCisgICAgIGJvb2xlYW4gaGFzRXh0ZXJuYWxTdG9yYWdlUHJpdmF0ZUZpbGUoKSB7CisgICAgICAgICAvLyBHZXQgcGF0aCBmb3IgdGhlIGZpbGUgb24gZXh0ZXJuYWwgc3RvcmFnZS4gIElmIGV4dGVybmFsCisgICAgICAgICAvLyBzdG9yYWdlIGlzIG5vdCBjdXJyZW50bHkgbW91bnRlZCB0aGlzIHdpbGwgZmFpbC4KKyAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldEV4dGVybmFsRmlsZXNEaXIobnVsbCksICJEZW1vRmlsZS5qcGciKTsKKyAgICAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICByZXR1cm4gZmlsZS5leGlzdHMoKTsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorIC8vIEVORF9JTkNMVURFKHByaXZhdGVfZmlsZSkKKyAgICAgCisgICAgSXRlbSBjcmVhdGVTdG9yYWdlQ29udHJvbHMoQ2hhclNlcXVlbmNlIGxhYmVsLCBGaWxlIHBhdGgsCisgICAgICAgICAgICBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBjcmVhdGVDbGljaywKKyAgICAgICAgICAgIFZpZXcuT25DbGlja0xpc3RlbmVyIGRlbGV0ZUNsaWNrKSB7CisgICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKWdldFN5c3RlbVNlcnZpY2UoTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOworICAgICAgICBJdGVtIGl0ZW0gPSBuZXcgSXRlbSgpOworICAgICAgICBpdGVtLm1Sb290ID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5leHRlcm5hbF9zdG9yYWdlX2l0ZW0sIG51bGwpOworICAgICAgICBUZXh0VmlldyB0diA9IChUZXh0VmlldylpdGVtLm1Sb290LmZpbmRWaWV3QnlJZChSLmlkLmxhYmVsKTsKKyAgICAgICAgdHYuc2V0VGV4dChsYWJlbCk7CisgICAgICAgIGlmIChwYXRoICE9IG51bGwpIHsKKyAgICAgICAgICAgIHR2ID0gKFRleHRWaWV3KWl0ZW0ubVJvb3QuZmluZFZpZXdCeUlkKFIuaWQucGF0aCk7CisgICAgICAgICAgICB0di5zZXRUZXh0KHBhdGgudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgaXRlbS5tQ3JlYXRlID0gKEJ1dHRvbilpdGVtLm1Sb290LmZpbmRWaWV3QnlJZChSLmlkLmNyZWF0ZSk7CisgICAgICAgIGl0ZW0ubUNyZWF0ZS5zZXRPbkNsaWNrTGlzdGVuZXIoY3JlYXRlQ2xpY2spOworICAgICAgICBpdGVtLm1EZWxldGUgPSAoQnV0dG9uKWl0ZW0ubVJvb3QuZmluZFZpZXdCeUlkKFIuaWQuZGVsZXRlKTsKKyAgICAgICAgaXRlbS5tRGVsZXRlLnNldE9uQ2xpY2tMaXN0ZW5lcihkZWxldGVDbGljayk7CisgICAgICAgIHJldHVybiBpdGVtOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9jb250ZW50L19pbmRleC5odG1sIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2NvbnRlbnQvX2luZGV4Lmh0bWwKaW5kZXggMWFhNTJiMy4uNzY5YTkyNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2NvbnRlbnQvX2luZGV4Lmh0bWwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2NvbnRlbnQvX2luZGV4Lmh0bWwKQEAgLTEsNSArMSw4IEBACiA8aDM+UmVzb3VyY2VzPC9oMz4KIDxkbD4KKyAgPGR0PjxhIGhyZWY9IlN0eWxlZFRleHQuaHRtbCI+RXh0ZXJuYWwgU3RvcmFnZTwvYT48L2R0PgorICA8ZGQ+RGVtb25zdHJhdGVzIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgaW4gZXh0ZXJuYWwgc3RvcmFnZS4gPC9kZD4KKwogICA8ZHQ+PGEgaHJlZj0iU3R5bGVkVGV4dC5odG1sIj5TdHlsZWQgVGV4dDwvYT48L2R0PgogICA8ZGQ+RGVtb25zdHJhdGVzIGxvYWRpbmcgc3R5bGVkIHRleHQgKGJvbGQsIGl0YWxpYykgZGVmaW5lZCBpbiBhIHJlc291cmNlIGZpbGUuIDwvZGQ+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9DYW1lcmFQcmV2aWV3LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ2FtZXJhUHJldmlldy5qYXZhCmluZGV4IGUzY2Y5NzYuLjE3MWM4ODUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9DYW1lcmFQcmV2aWV3LmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0NhbWVyYVByZXZpZXcuamF2YQpAQCAtMTksMjQgKzE5LDI3IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmE7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuU2l6ZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKKwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotcHVibGljIGNsYXNzIENhbWVyYVByZXZpZXcgZXh0ZW5kcyBBY3Rpdml0eSB7ICAgIAorcHVibGljIGNsYXNzIENhbWVyYVByZXZpZXcgZXh0ZW5kcyBBY3Rpdml0eSB7CiAgICAgcHJpdmF0ZSBQcmV2aWV3IG1QcmV2aWV3OwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAJcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotICAgICAgICAKKwogICAgICAgICAvLyBIaWRlIHRoZSB3aW5kb3cgdGl0bGUuCiAgICAgICAgIHJlcXVlc3RXaW5kb3dGZWF0dXJlKFdpbmRvdy5GRUFUVVJFX05PX1RJVExFKTsKLSAgICAKKwogICAgICAgICAvLyBDcmVhdGUgb3VyIFByZXZpZXcgdmlldyBhbmQgc2V0IGl0IGFzIHRoZSBjb250ZW50IG9mIG91ciBhY3Rpdml0eS4KICAgICAgICAgbVByZXZpZXcgPSBuZXcgUHJldmlldyh0aGlzKTsKICAgICAgICAgc2V0Q29udGVudFZpZXcobVByZXZpZXcpOwpAQCAtNDksMTAgKzUyLDEwIEBACiBjbGFzcyBQcmV2aWV3IGV4dGVuZHMgU3VyZmFjZVZpZXcgaW1wbGVtZW50cyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIHsKICAgICBTdXJmYWNlSG9sZGVyIG1Ib2xkZXI7CiAgICAgQ2FtZXJhIG1DYW1lcmE7Ci0gICAgCisKICAgICBQcmV2aWV3KENvbnRleHQgY29udGV4dCkgewogICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSW5zdGFsbCBhIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgc28gd2UgZ2V0IG5vdGlmaWVkIHdoZW4gdGhlCiAgICAgICAgIC8vIHVuZGVybHlpbmcgc3VyZmFjZSBpcyBjcmVhdGVkIGFuZCBkZXN0cm95ZWQuCiAgICAgICAgIG1Ib2xkZXIgPSBnZXRIb2xkZXIoKTsKQEAgLTgyLDExICs4NSw0OSBAQAogICAgICAgICBtQ2FtZXJhID0gbnVsbDsKICAgICB9CiAKKworICAgIHByaXZhdGUgU2l6ZSBnZXRPcHRpbWFsUHJldmlld1NpemUoTGlzdDxTaXplPiBzaXplcywgaW50IHcsIGludCBoKSB7CisgICAgICAgIGZpbmFsIGRvdWJsZSBBU1BFQ1RfVE9MRVJBTkNFID0gMC4wNTsKKyAgICAgICAgZG91YmxlIHRhcmdldFJhdGlvID0gKGRvdWJsZSkgdyAvIGg7CisgICAgICAgIGlmIChzaXplcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKworICAgICAgICBTaXplIG9wdGltYWxTaXplID0gbnVsbDsKKyAgICAgICAgZG91YmxlIG1pbkRpZmYgPSBEb3VibGUuTUFYX1ZBTFVFOworCisgICAgICAgIGludCB0YXJnZXRIZWlnaHQgPSBoOworCisgICAgICAgIC8vIFRyeSB0byBmaW5kIGFuIHNpemUgbWF0Y2ggYXNwZWN0IHJhdGlvIGFuZCBzaXplCisgICAgICAgIGZvciAoU2l6ZSBzaXplIDogc2l6ZXMpIHsKKyAgICAgICAgICAgIGRvdWJsZSByYXRpbyA9IChkb3VibGUpIHNpemUud2lkdGggLyBzaXplLmhlaWdodDsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhyYXRpbyAtIHRhcmdldFJhdGlvKSA+IEFTUEVDVF9UT0xFUkFOQ0UpIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKE1hdGguYWJzKHNpemUuaGVpZ2h0IC0gdGFyZ2V0SGVpZ2h0KSA8IG1pbkRpZmYpIHsKKyAgICAgICAgICAgICAgICBvcHRpbWFsU2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgbWluRGlmZiA9IE1hdGguYWJzKHNpemUuaGVpZ2h0IC0gdGFyZ2V0SGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbm5vdCBmaW5kIHRoZSBvbmUgbWF0Y2ggdGhlIGFzcGVjdCByYXRpbywgaWdub3JlIHRoZSByZXF1aXJlbWVudAorICAgICAgICBpZiAob3B0aW1hbFNpemUgPT0gbnVsbCkgeworICAgICAgICAgICAgbWluRGlmZiA9IERvdWJsZS5NQVhfVkFMVUU7CisgICAgICAgICAgICBmb3IgKFNpemUgc2l6ZSA6IHNpemVzKSB7CisgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHNpemUuaGVpZ2h0IC0gdGFyZ2V0SGVpZ2h0KSA8IG1pbkRpZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW1hbFNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICBtaW5EaWZmID0gTWF0aC5hYnMoc2l6ZS5oZWlnaHQgLSB0YXJnZXRIZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3B0aW1hbFNpemU7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCkgewogICAgICAgICAvLyBOb3cgdGhhdCB0aGUgc2l6ZSBpcyBrbm93biwgc2V0IHVwIHRoZSBjYW1lcmEgcGFyYW1ldGVycyBhbmQgYmVnaW4KICAgICAgICAgLy8gdGhlIHByZXZpZXcuCiAgICAgICAgIENhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBtQ2FtZXJhLmdldFBhcmFtZXRlcnMoKTsKLSAgICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3U2l6ZSh3LCBoKTsKKworICAgICAgICBMaXN0PFNpemU+IHNpemVzID0gcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3U2l6ZXMoKTsKKyAgICAgICAgU2l6ZSBvcHRpbWFsU2l6ZSA9IGdldE9wdGltYWxQcmV2aWV3U2l6ZShzaXplcywgdywgaCk7CisgICAgICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld1NpemUob3B0aW1hbFNpemUud2lkdGgsIG9wdGltYWxTaXplLmhlaWdodCk7CisKICAgICAgICAgbUNhbWVyYS5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogICAgICAgICBtQ2FtZXJhLnN0YXJ0UHJldmlldygpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9Db21wcmVzc2VkVGV4dHVyZUFjdGl2aXR5LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ29tcHJlc3NlZFRleHR1cmVBY3Rpdml0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjU0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvQ29tcHJlc3NlZFRleHR1cmVBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuZ3JhcGhpY3M7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5CdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7CisKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDEwOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRVRDMVV0aWw7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzEwOworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMU3VyZmFjZVZpZXc7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOworCisvKioKKyAqIERlbW9uc3RyYXRlIGhvdyB0byB1c2UgRVRDMSBmb3JtYXQgY29tcHJlc3NlZCB0ZXh0dXJlcy4KKyAqIFRoaXMgc2FtcGxlIGNhbiBiZSByZWNvbXBpbGVkIHRvIHVzZSBlaXRoZXIgcmVzb3VyY2UtYmFzZWQKKyAqIHRleHR1cmVzIChjb21wcmVzc2VkIG9mZmxpbmUgdXNpbmcgdGhlIGV0YzF0b29sKSwgb3IKKyAqIHRleHR1cmVzIGNyZWF0ZWQgb24gdGhlIGZseSBieSBjb21wcmVzc2luZyBpbWFnZXMuCisgKgorICovCitwdWJsaWMgY2xhc3MgQ29tcHJlc3NlZFRleHR1cmVBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNvbXByZXNzZWRUZXh0dXJlQWN0aXZpdHkiOworICAgIC8qKgorICAgICAqIENob29zZSBiZXR3ZWVuIGNyZWF0aW5nIGEgY29tcHJlc3NlZCB0ZXh0dXJlIG9uIHRoZSBmbHkgb3IKKyAgICAgKiBsb2FkaW5nIGEgY29tcHJlc3NlZCB0ZXh0dXJlIGZyb20gYSByZXNvdXJjZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIFRFU1RfQ1JFQVRFX1RFWFRVUkUgPSBmYWxzZTsKKyAgICAvKioKKyAgICAgKiBXaGVuIGNyZWF0aW5nIGEgY29tcHJlc3NlZCB0ZXh0dXJlIG9uIHRoZSBmbHksIGNob29zZQorICAgICAqIHdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgaS9vIHN0cmVhbSBBUElzLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gVVNFX1NUUkVBTV9JTyA9IGZhbHNlOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBtR0xWaWV3ID0gbmV3IEdMU3VyZmFjZVZpZXcodGhpcyk7CisgICAgICAgIG1HTFZpZXcuc2V0RUdMQ29uZmlnQ2hvb3NlcihmYWxzZSk7CisgICAgICAgIFN0YXRpY1RyaWFuZ2xlUmVuZGVyZXIuVGV4dHVyZUxvYWRlciBsb2FkZXI7CisgICAgICAgIGlmIChURVNUX0NSRUFURV9URVhUVVJFKSB7CisgICAgICAgICAgICBsb2FkZXIgPSBuZXcgU3ludGhldGljQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRlciA9IG5ldyBDb21wcmVzc2VkVGV4dHVyZUxvYWRlcigpOworICAgICAgICB9CisgICAgICAgIG1HTFZpZXcuc2V0UmVuZGVyZXIobmV3IFN0YXRpY1RyaWFuZ2xlUmVuZGVyZXIodGhpcywgbG9hZGVyKSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KG1HTFZpZXcpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKKyAgICAgICAgbUdMVmlldy5vblBhdXNlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7CisgICAgICAgIG1HTFZpZXcub25SZXN1bWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZW1vbnN0cmF0ZSBob3cgdG8gbG9hZCBhIGNvbXByZXNzZWQgdGV4dHVyZSBmcm9tIGFuIEFQSyByZXNvdXJjZS4KKyAgICAgKgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIgaW1wbGVtZW50cyBTdGF0aWNUcmlhbmdsZVJlbmRlcmVyLlRleHR1cmVMb2FkZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBsb2FkKEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIkVUQzEgdGV4dHVyZSBzdXBwb3J0OiAiICsgRVRDMVV0aWwuaXNFVEMxU3VwcG9ydGVkKCkpOworICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXQgPSBnZXRSZXNvdXJjZXMoKS5vcGVuUmF3UmVzb3VyY2UoUi5yYXcuYW5kcm9pZHMpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBFVEMxVXRpbC5sb2FkVGV4dHVyZShHTEVTMTAuR0xfVEVYVFVSRV8yRCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMRVMxMC5HTF9SR0IsIEdMRVMxMC5HTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgaW5wdXQpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBsb2FkIHRleHR1cmU6ICIgKyBlKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBleGNlcHRpb24gdGhyb3duIGZyb20gY2xvc2UuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVtb25zdHJhdGUgaG93IHRvIGNyZWF0ZSBhIGNvbXByZXNzZWQgdGV4dHVyZSBvbiB0aGUgZmx5LgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgU3ludGhldGljQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIgaW1wbGVtZW50cyBTdGF0aWNUcmlhbmdsZVJlbmRlcmVyLlRleHR1cmVMb2FkZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBsb2FkKEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IDEyODsKKyAgICAgICAgICAgIGludCBoZWlnaHQgPSAxMjg7CisgICAgICAgICAgICBCdWZmZXIgaW1hZ2UgPSBjcmVhdGVJbWFnZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIEVUQzFVdGlsLkVUQzFUZXh0dXJlIGV0YzFUZXh0dXJlID0gRVRDMVV0aWwuY29tcHJlc3NUZXh0dXJlKGltYWdlLCB3aWR0aCwgaGVpZ2h0LCAzLCAzICogd2lkdGgpOworICAgICAgICAgICAgaWYgKFVTRV9TVFJFQU1fSU8pIHsKKyAgICAgICAgICAgICAgICAvLyBUZXN0IHRoZSBFVEMxVXRpbCBBUElzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGNvbXByZXNzZWQgdGV4dHVyZXMgdG8gSS9PIHN0cmVhbXMuCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgICAgICAgICAgICAgRVRDMVV0aWwud3JpdGVUZXh0dXJlKGV0YzFUZXh0dXJlLCBib3MpOworICAgICAgICAgICAgICAgICAgICBCeXRlQXJyYXlJbnB1dFN0cmVhbSBiaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm9zLnRvQnl0ZUFycmF5KCkpOworICAgICAgICAgICAgICAgICAgICBFVEMxVXRpbC5sb2FkVGV4dHVyZShHTEVTMTAuR0xfVEVYVFVSRV8yRCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTEVTMTAuR0xfUkdCLCBHTEVTMTAuR0xfVU5TSUdORURfU0hPUlRfNV82XzUsIGJpcyk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgbG9hZCB0ZXh0dXJlOiAiICsgZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBFVEMxVXRpbC5sb2FkVGV4dHVyZShHTEVTMTAuR0xfVEVYVFVSRV8yRCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMRVMxMC5HTF9SR0IsIEdMRVMxMC5HTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgZXRjMVRleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBCdWZmZXIgY3JlYXRlSW1hZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICBpbnQgc3RyaWRlID0gMyAqIHdpZHRoOworICAgICAgICAgICAgQnl0ZUJ1ZmZlciBpbWFnZSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoaGVpZ2h0ICogc3RyaWRlKQorICAgICAgICAgICAgICAgIC5vcmRlcihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSk7CisKKyAgICAgICAgICAgIC8vIEZpbGwgd2l0aCBhIHByZXR0eSAibXVuY2hpbmcgc3F1YXJlcyIgcGF0dGVybjoKKyAgICAgICAgICAgIGZvciAoaW50IHQgPSAwOyB0IDwgaGVpZ2h0OyB0KyspIHsKKyAgICAgICAgICAgICAgICBieXRlIHJlZCA9IChieXRlKSgyNTUtMip0KTsKKyAgICAgICAgICAgICAgICBieXRlIGdyZWVuID0gKGJ5dGUpKDIqdCk7CisgICAgICAgICAgICAgICAgYnl0ZSBibHVlID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHkgPSB4IF4gdDsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UucG9zaXRpb24oc3RyaWRlKnkreCozKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UucHV0KHJlZCk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlLnB1dChncmVlbik7CisgICAgICAgICAgICAgICAgICAgIGltYWdlLnB1dChibHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbWFnZS5wb3NpdGlvbigwKTsKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgbUdMVmlldzsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9DdWJlTWFwQWN0aXZpdHkuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9DdWJlTWFwQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTNlMGZkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0N1YmVNYXBBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuZ3JhcGhpY3M7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7CitpbXBvcnQgamF2YS5uaW8uQ2hhckJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKKworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb25maWc7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0w7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMDsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDExOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTFFeHQ7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMUV4dGVuc2lvblBhY2s7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFU7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVdGlsczsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CisKKy8qKgorICogRGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUgT0VTX3RleHR1cmVfY3ViZV9tYXAgZXh0ZW5zaW9uLCBhdmFpbGFibGUgb24gc29tZQorICogaGlnaC1lbmQgT3BlbkdMIEVTIDEueCBHUFVzLgorICovCitwdWJsaWMgY2xhc3MgQ3ViZU1hcEFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIHByaXZhdGUgR0xTdXJmYWNlVmlldyBtR0xTdXJmYWNlVmlldzsKKyAgICBwcml2YXRlIGNsYXNzIFJlbmRlcmVyIGltcGxlbWVudHMgR0xTdXJmYWNlVmlldy5SZW5kZXJlciB7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQ29udGV4dFN1cHBvcnRzQ3ViZU1hcDsKKyAgICAgICAgcHJpdmF0ZSBHcmlkIG1HcmlkOworICAgICAgICBwcml2YXRlIGludCBtQ3ViZU1hcFRleHR1cmVJRDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Vc2VUZXhHZW4gPSBmYWxzZTsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtQW5nbGU7CisKKyAgICAgICAgcHVibGljIHZvaWQgb25EcmF3RnJhbWUoR0wxMCBnbCkgeworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgIGlmIChtQ29udGV4dFN1cHBvcnRzQ3ViZU1hcCkgeworICAgICAgICAgICAgICAgIGdsLmdsQ2xlYXJDb2xvcigwLDAsMSwwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQ3VycmVudCBjb250ZXh0IGRvZXNuJ3Qgc3VwcG9ydCBjdWJlIG1hcHMuCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhpcyBieSBkcmF3aW5nIGEgcmVkIGJhY2tncm91bmQuCisgICAgICAgICAgICAgICAgZ2wuZ2xDbGVhckNvbG9yKDEsMCwwLDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2wuZ2xDbGVhcihHTDEwLkdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTDEwLkdMX0RFUFRIX0JVRkZFUl9CSVQpOworICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMC5HTF9ERVBUSF9URVNUKTsKKyAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX01PREVMVklFVyk7CisgICAgICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOworCisgICAgICAgICAgICBHTFUuZ2x1TG9va0F0KGdsLCAwLCAwLCAtNSwgMGYsIDBmLCAwZiwgMGYsIDEuMGYsIDAuMGYpOworICAgICAgICAgICAgZ2wuZ2xSb3RhdGVmKG1BbmdsZSwgICAgICAgIDAsIDEsIDApOworICAgICAgICAgICAgZ2wuZ2xSb3RhdGVmKG1BbmdsZSowLjI1ZiwgIDEsIDAsIDApOworCisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKworICAgICAgICAgICAgaWYgKG1Db250ZXh0U3VwcG9ydHNDdWJlTWFwKSB7CisgICAgICAgICAgICAgICAgZ2wuZ2xBY3RpdmVUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRTApOworICAgICAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9DVUJFX01BUCk7CisgICAgICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfQ1VCRV9NQVAsIG1DdWJlTWFwVGV4dHVyZUlEKTsKKyAgICAgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgICAgIEdMMTFFeHRlbnNpb25QYWNrIGdsMTFlcCA9IChHTDExRXh0ZW5zaW9uUGFjaykgZ2w7CisgICAgICAgICAgICAgICAgZ2wxMWVwLmdsVGV4R2VuaShHTDExRXh0ZW5zaW9uUGFjay5HTF9URVhUVVJFX0dFTl9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICBHTDExRXh0ZW5zaW9uUGFjay5HTF9URVhUVVJFX0dFTl9NT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgR0wxMUV4dGVuc2lvblBhY2suR0xfUkVGTEVDVElPTl9NQVApOworICAgICAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9HRU5fU1RSKTsKKyAgICAgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgICAgIGdsLmdsVGV4RW52eChHTDEwLkdMX1RFWFRVUkVfRU5WLCBHTDEwLkdMX1RFWFRVUkVfRU5WX01PREUsIEdMMTAuR0xfREVDQUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgbUdyaWQuZHJhdyhnbCk7CisKKyAgICAgICAgICAgIGlmIChtQ29udGV4dFN1cHBvcnRzQ3ViZU1hcCkgeworICAgICAgICAgICAgICAgIGdsLmdsRGlzYWJsZShHTDExRXh0ZW5zaW9uUGFjay5HTF9URVhUVVJFX0dFTl9TVFIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKworICAgICAgICAgICAgbUFuZ2xlICs9IDEuMmY7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDaGFuZ2VkKEdMMTAgZ2wsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgIGdsLmdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBmbG9hdCByYXRpbyA9IChmbG9hdCkgd2lkdGggLyBoZWlnaHQ7CisgICAgICAgICAgICBnbC5nbE1hdHJpeE1vZGUoR0wxMC5HTF9QUk9KRUNUSU9OKTsKKyAgICAgICAgICAgIGdsLmdsTG9hZElkZW50aXR5KCk7CisgICAgICAgICAgICBnbC5nbEZydXN0dW1mKC1yYXRpbywgcmF0aW8sIC0xLCAxLCAxLCAxMCk7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRlZChHTDEwIGdsLCBFR0xDb25maWcgY29uZmlnKSB7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgLy8gVGhpcyB0ZXN0IG5lZWRzIHRvIGJlIGRvbmUgZWFjaCB0aW1lIGEgY29udGV4dCBpcyBjcmVhdGVkLAorICAgICAgICAgICAgLy8gYmVjYXVzZSBkaWZmZXJlbnQgY29udGV4dHMgbWF5IHN1cHBvcnQgZGlmZmVyZW50IGV4dGVuc2lvbnMuCisgICAgICAgICAgICBtQ29udGV4dFN1cHBvcnRzQ3ViZU1hcCA9IGNoZWNrSWZDb250ZXh0U3VwcG9ydHNDdWJlTWFwKGdsKTsKKworICAgICAgICAgICAgbUdyaWQgPSBnZW5lcmF0ZVRvcnVzR3JpZChnbCwgNjAsIDYwLCAzLjBmLCAwLjc1Zik7CisKKyAgICAgICAgICAgIGlmIChtQ29udGV4dFN1cHBvcnRzQ3ViZU1hcCkgeworICAgICAgICAgICAgICAgIGludFtdIGN1YmVNYXBSZXNvdXJjZUlkcyA9IG5ldyBpbnRbXXsKKyAgICAgICAgICAgICAgICAgICAgICAgIFIucmF3LnNreWN1YmVtYXAwLCBSLnJhdy5za3ljdWJlbWFwMSwgUi5yYXcuc2t5Y3ViZW1hcDIsCisgICAgICAgICAgICAgICAgICAgICAgICBSLnJhdy5za3ljdWJlbWFwMywgUi5yYXcuc2t5Y3ViZW1hcDQsIFIucmF3LnNreWN1YmVtYXA1fTsKKyAgICAgICAgICAgICAgICBtQ3ViZU1hcFRleHR1cmVJRCA9IGdlbmVyYXRlQ3ViZU1hcChnbCwgY3ViZU1hcFJlc291cmNlSWRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGludCBnZW5lcmF0ZUN1YmVNYXAoR0wxMCBnbCwgaW50W10gcmVzb3VyY2VJZHMpIHsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICBpbnRbXSBpZHMgPSBuZXcgaW50WzFdOworICAgICAgICAgICAgZ2wuZ2xHZW5UZXh0dXJlcygxLCBpZHMsIDApOworICAgICAgICAgICAgaW50IGN1YmVNYXBUZXh0dXJlSWQgPSBpZHNbMF07CisgICAgICAgICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfQ1VCRV9NQVAsIGN1YmVNYXBUZXh0dXJlSWQpOworICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJmKEdMMTFFeHRlbnNpb25QYWNrLkdMX1RFWFRVUkVfQ1VCRV9NQVAsCisgICAgICAgICAgICAgICAgICAgIEdMMTAuR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTDEwLkdMX0xJTkVBUik7CisgICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9DVUJFX01BUCwKKyAgICAgICAgICAgICAgICAgICAgR0wxMC5HTF9URVhUVVJFX01BR19GSUxURVIsIEdMMTAuR0xfTElORUFSKTsKKworICAgICAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspIHsKKyAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGdldFJlc291cmNlcygpLm9wZW5SYXdSZXNvdXJjZShyZXNvdXJjZUlkc1tmYWNlXSk7CisgICAgICAgICAgICAgICAgQml0bWFwIGJpdG1hcDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBiaXRtYXAgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpcyk7CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoIkN1YmVNYXAiLCAiQ291bGQgbm90IGRlY29kZSB0ZXh0dXJlIGZvciBmYWNlICIgKyBJbnRlZ2VyLnRvU3RyaW5nKGZhY2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBHTFV0aWxzLnRleEltYWdlMkQoR0wxMUV4dGVuc2lvblBhY2suR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCwgMCk7CisgICAgICAgICAgICAgICAgYml0bWFwLnJlY3ljbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICByZXR1cm4gY3ViZU1hcFRleHR1cmVJZDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgR3JpZCBnZW5lcmF0ZVRvcnVzR3JpZChHTCBnbCwgaW50IHVTdGVwcywgaW50IHZTdGVwcywgZmxvYXQgbWFqb3JSYWRpdXMsIGZsb2F0IG1pbm9yUmFkaXVzKSB7CisgICAgICAgICAgICBHcmlkIGdyaWQgPSBuZXcgR3JpZCh1U3RlcHMgKyAxLCB2U3RlcHMgKyAxKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHZTdGVwczsgaisrKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlViA9IE1hdGguUEkgKiAyICogaiAvIHZTdGVwczsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb3NWID0gKGZsb2F0KSBNYXRoLmNvcyhhbmdsZVYpOworICAgICAgICAgICAgICAgIGZsb2F0IHNpblYgPSAoZmxvYXQpIE1hdGguc2luKGFuZ2xlVik7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdVN0ZXBzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlVSA9IE1hdGguUEkgKiAyICogaSAvIHVTdGVwczsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29zVSA9IChmbG9hdCkgTWF0aC5jb3MoYW5nbGVVKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2luVSA9IChmbG9hdCkgTWF0aC5zaW4oYW5nbGVVKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZCA9IG1ham9yUmFkaXVzK21pbm9yUmFkaXVzKmNvc1U7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHggPSBkKmNvc1Y7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHkgPSBkKigtc2luVik7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHogPSBtaW5vclJhZGl1cyAqIHNpblU7CisKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbnggPSBjb3NWICogY29zVTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbnkgPSAtc2luViAqIGNvc1U7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG56ID0gc2luVTsKKworICAgICAgICAgICAgICAgICAgICBmbG9hdCBsZW5ndGggPSAoZmxvYXQpIE1hdGguc3FydChueCpueCArIG55Km55ICsgbnoqbnopOworICAgICAgICAgICAgICAgICAgICBueCAvPSBsZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIG55IC89IGxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgbnogLz0gbGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIGdyaWQuc2V0KGksIGosIHgsIHksIHosIG54LCBueSwgbnopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyaWQuY3JlYXRlQnVmZmVyT2JqZWN0cyhnbCk7CisgICAgICAgICAgICByZXR1cm4gZ3JpZDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0lmQ29udGV4dFN1cHBvcnRzQ3ViZU1hcChHTDEwIGdsKSB7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tJZkNvbnRleHRTdXBwb3J0c0V4dGVuc2lvbihnbCwgIkdMX09FU190ZXh0dXJlX2N1YmVfbWFwIik7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBpcyBub3QgdGhlIGZhc3Rlc3Qgd2F5IHRvIGNoZWNrIGZvciBhbiBleHRlbnNpb24sIGJ1dCBmaW5lIGlmCisgICAgICAgICAqIHdlIGFyZSBvbmx5IGNoZWNraW5nIGZvciBhIGZldyBleHRlbnNpb25zIGVhY2ggdGltZSBhIGNvbnRleHQgaXMgY3JlYXRlZC4KKyAgICAgICAgICogQHBhcmFtIGdsCisgICAgICAgICAqIEBwYXJhbSBleHRlbnNpb24KKyAgICAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBleHRlbnNpb24gaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBjb250ZXh0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrSWZDb250ZXh0U3VwcG9ydHNFeHRlbnNpb24oR0wxMCBnbCwgU3RyaW5nIGV4dGVuc2lvbikgeworICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnMgPSAiICIgKyBnbC5nbEdldFN0cmluZyhHTDEwLkdMX0VYVEVOU0lPTlMpICsgIiAiOworICAgICAgICAgICAgLy8gVGhlIGV4dGVuc2lvbnMgc3RyaW5nIGlzIHBhZGRlZCB3aXRoIHNwYWNlcyBiZXR3ZWVuIGV4dGVuc2lvbnMsIGJ1dCBub3QKKyAgICAgICAgICAgIC8vIG5lY2Vzc2FyaWx5IGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kLiBGb3Igc2ltcGxpY2l0eSwgYWRkIHNwYWNlcyBhdCB0aGUKKyAgICAgICAgICAgIC8vIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBleHRlbnNpb25zIHN0cmluZyBhbmQgdGhlIGV4dGVuc2lvbiBzdHJpbmcuCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbiBhdm9pZCBzcGVjaWFsLWNhc2UgY2hlY2tzIGZvciB0aGUgZmlyc3Qgb3IgbGFzdAorICAgICAgICAgICAgLy8gZXh0ZW5zaW9uLCBhcyB3ZWxsIGFzIGF2b2lkIHNwZWNpYWwtY2FzZSBjaGVja3Mgd2hlbiBhbiBleHRlbnNpb24gbmFtZQorICAgICAgICAgICAgLy8gaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcnQgb2YgYW5vdGhlciBleHRlbnNpb24gbmFtZS4KKyAgICAgICAgICAgIHJldHVybiBleHRlbnNpb25zLmluZGV4T2YoIiAiICsgZXh0ZW5zaW9uICsgIiAiKSA+PSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqIEEgZ3JpZCBpcyBhIHRvcG9sb2dpY2FsbHkgcmVjdGFuZ3VsYXIgYXJyYXkgb2YgdmVydGljZXMuCisgICAgICoKKyAgICAgKiBUaGlzIGdyaWQgY2xhc3MgaXMgY3VzdG9taXplZCBmb3IgdGhlIHZlcnRleCBkYXRhIHJlcXVpcmVkIGZvciB0aGlzCisgICAgICogZXhhbXBsZS4KKyAgICAgKgorICAgICAqIFRoZSB2ZXJ0ZXggYW5kIGluZGV4IGRhdGEgYXJlIGhlbGQgaW4gVkJPIG9iamVjdHMgYmVjYXVzZSBvbiBtb3N0CisgICAgICogR1BVcyBWQk8gb2JqZWN0cyBhcmUgdGhlIGZhc3Rlc3Qgd2F5IG9mIHJlbmRlcmluZyBzdGF0aWMgdmVydGV4CisgICAgICogYW5kIGluZGV4IGRhdGEuCisgICAgICoKKyAgICAgKi8KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEdyaWQgeworICAgICAgICAvLyBTaXplIG9mIHZlcnRleCBkYXRhIGVsZW1lbnRzIGluIGJ5dGVzOgorICAgICAgICBmaW5hbCBzdGF0aWMgaW50IEZMT0FUX1NJWkUgPSA0OworICAgICAgICBmaW5hbCBzdGF0aWMgaW50IENIQVJfU0laRSA9IDI7CisKKyAgICAgICAgLy8gVmVydGV4IHN0cnVjdHVyZToKKyAgICAgICAgLy8gZmxvYXQgeCwgeSwgejsKKyAgICAgICAgLy8gZmxvYXQgbngsIG55LCBueDsKKworICAgICAgICBmaW5hbCBzdGF0aWMgaW50IFZFUlRFWF9TSVpFID0gNiAqIEZMT0FUX1NJWkU7CisgICAgICAgIGZpbmFsIHN0YXRpYyBpbnQgVkVSVEVYX05PUk1BTF9CVUZGRVJfSU5ERVhfT0ZGU0VUID0gMzsKKworICAgICAgICBwcml2YXRlIGludCBtVmVydGV4QnVmZmVyT2JqZWN0SWQ7CisgICAgICAgIHByaXZhdGUgaW50IG1FbGVtZW50QnVmZmVyT2JqZWN0SWQ7CisKKyAgICAgICAgLy8gVGhlc2UgYnVmZmVycyBhcmUgdXNlZCB0byBob2xkIHRoZSB2ZXJ0ZXggYW5kIGluZGV4IGRhdGEgd2hpbGUKKyAgICAgICAgLy8gY29uc3RydWN0aW5nIHRoZSBncmlkLiBPbmNlIGNyZWF0ZUJ1ZmZlck9iamVjdHMoKSBpcyBjYWxsZWQKKyAgICAgICAgLy8gdGhlIGJ1ZmZlcnMgYXJlIG51bGxlZCBvdXQgdG8gc2F2ZSBtZW1vcnkuCisKKyAgICAgICAgcHJpdmF0ZSBCeXRlQnVmZmVyIG1WZXJ0ZXhCeXRlQnVmZmVyOworICAgICAgICBwcml2YXRlIEZsb2F0QnVmZmVyIG1WZXJ0ZXhCdWZmZXI7CisgICAgICAgIHByaXZhdGUgQ2hhckJ1ZmZlciBtSW5kZXhCdWZmZXI7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVc7CisgICAgICAgIHByaXZhdGUgaW50IG1IOworICAgICAgICBwcml2YXRlIGludCBtSW5kZXhDb3VudDsKKworICAgICAgICBwdWJsaWMgR3JpZChpbnQgdywgaW50IGgpIHsKKyAgICAgICAgICAgIGlmICh3IDwgMCB8fCB3ID49IDY1NTM2KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGggPCAwIHx8IGggPj0gNjU1MzYpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJoIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodyAqIGggPj0gNjU1MzYpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ3ICogaCA+PSA2NTUzNiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtVyA9IHc7CisgICAgICAgICAgICBtSCA9IGg7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IHcgKiBoOworCisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoVkVSVEVYX1NJWkUgKiBzaXplKQorICAgICAgICAgICAgLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBtVmVydGV4Qnl0ZUJ1ZmZlci5hc0Zsb2F0QnVmZmVyKCk7CisKKyAgICAgICAgICAgIGludCBxdWFkVyA9IG1XIC0gMTsKKyAgICAgICAgICAgIGludCBxdWFkSCA9IG1IIC0gMTsKKyAgICAgICAgICAgIGludCBxdWFkQ291bnQgPSBxdWFkVyAqIHF1YWRIOworICAgICAgICAgICAgaW50IGluZGV4Q291bnQgPSBxdWFkQ291bnQgKiA2OworICAgICAgICAgICAgbUluZGV4Q291bnQgPSBpbmRleENvdW50OworICAgICAgICAgICAgbUluZGV4QnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChDSEFSX1NJWkUgKiBpbmRleENvdW50KQorICAgICAgICAgICAgLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKS5hc0NoYXJCdWZmZXIoKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEluaXRpYWxpemUgdHJpYW5nbGUgbGlzdCBtZXNoLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICAgICBbMF0tLS0tLVsgIDFdIC4uLgorICAgICAgICAgICAgICogICAgICB8ICAgIC8gICB8CisgICAgICAgICAgICAgKiAgICAgIHwgICAvICAgIHwKKyAgICAgICAgICAgICAqICAgICAgfCAgLyAgICAgfAorICAgICAgICAgICAgICogICAgIFt3XS0tLS0tW3crMV0gLi4uCisgICAgICAgICAgICAgKiAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcXVhZEg7IHkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHF1YWRXOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYSA9IChjaGFyKSAoeSAqIG1XICsgeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGIgPSAoY2hhcikgKHkgKiBtVyArIHggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IChjaGFyKSAoKHkgKyAxKSAqIG1XICsgeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGQgPSAoY2hhcikgKCh5ICsgMSkgKiBtVyArIHggKyAxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtSW5kZXhCdWZmZXIucHV0KGkrKywgYik7CisgICAgICAgICAgICAgICAgICAgICAgICBtSW5kZXhCdWZmZXIucHV0KGkrKywgYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtSW5kZXhCdWZmZXIucHV0KGkrKywgZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXQoaW50IGksIGludCBqLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCBueCwgZmxvYXQgbnksIGZsb2F0IG56KSB7CisgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBtVykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IG1IKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgaW5kZXggPSBtVyAqIGogKyBpOworCisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnBvc2l0aW9uKGluZGV4ICogVkVSVEVYX1NJWkUgLyBGTE9BVF9TSVpFKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHgpOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wdXQoeSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh6KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KG54KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KG55KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KG56KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUJ1ZmZlck9iamVjdHMoR0wgZ2wpIHsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIHRoZSB2ZXJ0ZXggYW5kIGVsZW1lbnQgYnVmZmVyIElEcworICAgICAgICAgICAgaW50W10gdmJvSWRzID0gbmV3IGludFsyXTsKKyAgICAgICAgICAgIEdMMTEgZ2wxMSA9IChHTDExKSBnbDsKKyAgICAgICAgICAgIGdsMTEuZ2xHZW5CdWZmZXJzKDIsIHZib0lkcywgMCk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyT2JqZWN0SWQgPSB2Ym9JZHNbMF07CisgICAgICAgICAgICBtRWxlbWVudEJ1ZmZlck9iamVjdElkID0gdmJvSWRzWzFdOworCisgICAgICAgICAgICAvLyBVcGxvYWQgdGhlIHZlcnRleCBkYXRhCisgICAgICAgICAgICBnbDExLmdsQmluZEJ1ZmZlcihHTDExLkdMX0FSUkFZX0JVRkZFUiwgbVZlcnRleEJ1ZmZlck9iamVjdElkKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCeXRlQnVmZmVyLnBvc2l0aW9uKDApOworICAgICAgICAgICAgZ2wxMS5nbEJ1ZmZlckRhdGEoR0wxMS5HTF9BUlJBWV9CVUZGRVIsIG1WZXJ0ZXhCeXRlQnVmZmVyLmNhcGFjaXR5KCksIG1WZXJ0ZXhCeXRlQnVmZmVyLCBHTDExLkdMX1NUQVRJQ19EUkFXKTsKKworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbUVsZW1lbnRCdWZmZXJPYmplY3RJZCk7CisgICAgICAgICAgICBtSW5kZXhCdWZmZXIucG9zaXRpb24oMCk7CisgICAgICAgICAgICBnbDExLmdsQnVmZmVyRGF0YShHTDExLkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtSW5kZXhCdWZmZXIuY2FwYWNpdHkoKSAqIENIQVJfU0laRSwgbUluZGV4QnVmZmVyLCBHTDExLkdMX1NUQVRJQ19EUkFXKTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgaW4tbWVtb3J5IGRhdGEgYW55IG1vcmUKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBudWxsOworICAgICAgICAgICAgbVZlcnRleEJ5dGVCdWZmZXIgPSBudWxsOworICAgICAgICAgICAgbUluZGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIGNoZWNrR0xFcnJvcihnbCk7CisgICAgICAgICAgICBHTDExIGdsMTEgPSAoR0wxMSkgZ2w7CisKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9WRVJURVhfQVJSQVkpOworCisgICAgICAgICAgICBnbDExLmdsQmluZEJ1ZmZlcihHTDExLkdMX0FSUkFZX0JVRkZFUiwgbVZlcnRleEJ1ZmZlck9iamVjdElkKTsKKyAgICAgICAgICAgIGdsMTEuZ2xWZXJ0ZXhQb2ludGVyKDMsIEdMMTAuR0xfRkxPQVQsIFZFUlRFWF9TSVpFLCAwKTsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDEwLkdMX05PUk1BTF9BUlJBWSk7CisgICAgICAgICAgICBnbDExLmdsTm9ybWFsUG9pbnRlcihHTDEwLkdMX0ZMT0FULCBWRVJURVhfU0laRSwgVkVSVEVYX05PUk1BTF9CVUZGRVJfSU5ERVhfT0ZGU0VUICogRkxPQVRfU0laRSk7CisKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1FbGVtZW50QnVmZmVyT2JqZWN0SWQpOworICAgICAgICAgICAgZ2wxMS5nbERyYXdFbGVtZW50cyhHTDEwLkdMX1RSSUFOR0xFUywgbUluZGV4Q291bnQsIEdMMTAuR0xfVU5TSUdORURfU0hPUlQsIDApOworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9WRVJURVhfQVJSQVkpOworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9OT1JNQUxfQVJSQVkpOworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9BUlJBWV9CVUZGRVIsIDApOworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCk7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hlY2tHTEVycm9yKEdMIGdsKSB7CisgICAgICAgIGludCBlcnJvciA9ICgoR0wxMCkgZ2wpLmdsR2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdMMTAuR0xfTk9fRVJST1IpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJHTEVycm9yIDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZXJyb3IpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICAvLyBDcmVhdGUgb3VyIHN1cmZhY2UgdmlldyBhbmQgc2V0IGl0IGFzIHRoZSBjb250ZW50IG9mIG91cgorICAgICAgICAvLyBBY3Rpdml0eQorICAgICAgICBtR0xTdXJmYWNlVmlldyA9IG5ldyBHTFN1cmZhY2VWaWV3KHRoaXMpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5zZXRSZW5kZXJlcihuZXcgUmVuZGVyZXIoKSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KG1HTFN1cmZhY2VWaWV3KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKKyAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKKyAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCisgICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3Lm9uUmVzdW1lKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25QYXVzZSgpIHsKKyAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKKyAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCisgICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcub25QYXVzZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9EZW5zaXR5QWN0aXZpdHkuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9EZW5zaXR5QWN0aXZpdHkuamF2YQppbmRleCAxMGM0MmE3Li44YzVjOTNhIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvRGVuc2l0eUFjdGl2aXR5LmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0RlbnNpdHlBY3Rpdml0eS5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BcHBsaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CkBAIC0zNCw4ICszMyw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCkBAIC0xMTcsMjAgKzExNCwyMCBAQAogCiAgICAgcHJpdmF0ZSBWaWV3IHNjcm9sbFdyYXAoVmlldyB2aWV3KSB7CiAgICAgICAgIFNjcm9sbFZpZXcgc2Nyb2xsZXIgPSBuZXcgU2Nyb2xsVmlldyh0aGlzKTsKLSAgICAgICAgc2Nyb2xsZXIuYWRkVmlldyh2aWV3LCBuZXcgU2Nyb2xsVmlldy5MYXlvdXRQYXJhbXMoU2Nyb2xsVmlldy5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCi0gICAgICAgICAgICAgICAgU2Nyb2xsVmlldy5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpKTsKKyAgICAgICAgc2Nyb2xsZXIuYWRkVmlldyh2aWV3LCBuZXcgU2Nyb2xsVmlldy5MYXlvdXRQYXJhbXMoU2Nyb2xsVmlldy5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAorICAgICAgICAgICAgICAgIFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkpOwogICAgICAgICByZXR1cm4gc2Nyb2xsZXI7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZExhYmVsVG9Sb290KExpbmVhckxheW91dCByb290LCBTdHJpbmcgdGV4dCkgewogICAgICAgICBUZXh0VmlldyBsYWJlbCA9IG5ldyBUZXh0Vmlldyh0aGlzKTsKICAgICAgICAgbGFiZWwuc2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgcm9vdC5hZGRWaWV3KGxhYmVsLCBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyhMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICByb290LmFkZFZpZXcobGFiZWwsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAogICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZENoaWxkVG9Sb290KExpbmVhckxheW91dCByb290LCBMaW5lYXJMYXlvdXQgbGF5b3V0KSB7Ci0gICAgICAgIHJvb3QuYWRkVmlldyhsYXlvdXQsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgIHJvb3QuYWRkVmlldyhsYXlvdXQsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAogICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvRnJhbWVCdWZmZXJPYmplY3RBY3Rpdml0eS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0ZyYW1lQnVmZmVyT2JqZWN0QWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Q0YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0ZyYW1lQnVmZmVyT2JqZWN0QWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDEwOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTFFeHRlbnNpb25QYWNrOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFU7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKKworLyoqCisgKiBEZW1vbnN0cmF0ZSB0aGUgRnJhbWUgQnVmZmVyIE9iamVjdCBPcGVuR0wgRVMgZXh0ZW5zaW9uLgorICogPHA+CisgKiBUaGlzIHNhbXBsZSByZW5kZXJzIGEgc2NlbmUgaW50byBhbiBvZmZzY3JlZW4gZnJhbWUgYnVmZmVyLCBhbmQgdGhlbgorICogdXNlcyB0aGUgcmVzdWx0aW5nIGltYWdlIGFzIGEgdGV4dHVyZSB0byByZW5kZXIgYW4gb25zY3JlZW4gc2NlbmUuCisgKi8KK3B1YmxpYyBjbGFzcyBGcmFtZUJ1ZmZlck9iamVjdEFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIHByaXZhdGUgR0xTdXJmYWNlVmlldyBtR0xTdXJmYWNlVmlldzsKKworICAgIHByaXZhdGUgY2xhc3MgUmVuZGVyZXIgaW1wbGVtZW50cyBHTFN1cmZhY2VWaWV3LlJlbmRlcmVyIHsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Db250ZXh0U3VwcG9ydHNGcmFtZUJ1ZmZlck9iamVjdDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVRhcmdldFRleHR1cmU7CisgICAgICAgIHByaXZhdGUgaW50IG1GcmFtZWJ1ZmZlcjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUZyYW1lYnVmZmVyV2lkdGggPSAyNTY7CisgICAgICAgIHByaXZhdGUgaW50IG1GcmFtZWJ1ZmZlckhlaWdodCA9IDI1NjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVN1cmZhY2VXaWR0aDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVN1cmZhY2VIZWlnaHQ7CisKKyAgICAgICAgcHJpdmF0ZSBUcmlhbmdsZSBtVHJpYW5nbGU7CisgICAgICAgIHByaXZhdGUgQ3ViZSBtQ3ViZTsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdCBtQW5nbGU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3IgIG9mIHRoaXMgc2FtcGxlLiBJdAorICAgICAgICAgKiB3aWxsIHN1cHByZXNzIHRoZSBub3JtYWxseSBvbnNjcmVlbiByZW5kZXJpbmcsIGFuZCBpdCB3aWxsIGNhdXNlIHRoZQorICAgICAgICAgKiByZW5kZXJpbmcgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBkb25lIHRvIHRoZSBvZmZzY3JlZW4gRkJPCisgICAgICAgICAqIGJlIHJlbmRlcmVkIG9uc2NyZWVuIGluc3RlYWQuIFRoaXMgY2FuIGJlIGhlbHBmdWwgaW4gZGVidWdnaW5nIHRoZQorICAgICAgICAgKiByZW5kZXJpbmcgYWxnb3JpdGhtLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19SRU5ERVJfT0ZGU0NSRUVOX09OU0NSRUVOID0gZmFsc2U7CisKKyAgICAgICAgcHVibGljIHZvaWQgb25EcmF3RnJhbWUoR0wxMCBnbCkgeworICAgICAgICAgICAgY2hlY2tHTEVycm9yKGdsKTsKKyAgICAgICAgICAgIGlmIChtQ29udGV4dFN1cHBvcnRzRnJhbWVCdWZmZXJPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBHTDExRXh0ZW5zaW9uUGFjayBnbDExZXAgPSAoR0wxMUV4dGVuc2lvblBhY2spIGdsOworICAgICAgICAgICAgICAgIGlmIChERUJVR19SRU5ERVJfT0ZGU0NSRUVOX09OU0NSRUVOKSB7CisgICAgICAgICAgICAgICAgICAgIGRyYXdPZmZzY3JlZW5JbWFnZShnbCwgbVN1cmZhY2VXaWR0aCwgbVN1cmZhY2VIZWlnaHQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdsMTFlcC5nbEJpbmRGcmFtZWJ1ZmZlck9FUyhHTDExRXh0ZW5zaW9uUGFjay5HTF9GUkFNRUJVRkZFUl9PRVMsIG1GcmFtZWJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGRyYXdPZmZzY3JlZW5JbWFnZShnbCwgbUZyYW1lYnVmZmVyV2lkdGgsIG1GcmFtZWJ1ZmZlckhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGdsMTFlcC5nbEJpbmRGcmFtZWJ1ZmZlck9FUyhHTDExRXh0ZW5zaW9uUGFjay5HTF9GUkFNRUJVRkZFUl9PRVMsIDApOworICAgICAgICAgICAgICAgICAgICBkcmF3T25zY3JlZW4oZ2wsIG1TdXJmYWNlV2lkdGgsIG1TdXJmYWNlSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQgY29udGV4dCBkb2Vzbid0IHN1cHBvcnQgZnJhbWUgYnVmZmVyIG9iamVjdHMuCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhpcyBieSBkcmF3aW5nIGEgcmVkIGJhY2tncm91bmQuCisgICAgICAgICAgICAgICAgZ2wuZ2xDbGVhckNvbG9yKDEsMCwwLDApOworICAgICAgICAgICAgICAgIGdsLmdsQ2xlYXIoR0wxMC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wxMC5HTF9ERVBUSF9CVUZGRVJfQklUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNoYW5nZWQoR0wxMCBnbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICBjaGVja0dMRXJyb3IoZ2wpOworICAgICAgICAgICAgbVN1cmZhY2VXaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgbVN1cmZhY2VIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBnbC5nbFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRlZChHTDEwIGdsLCBFR0xDb25maWcgY29uZmlnKSB7CisgICAgICAgICAgICBtQ29udGV4dFN1cHBvcnRzRnJhbWVCdWZmZXJPYmplY3QgPSBjaGVja0lmQ29udGV4dFN1cHBvcnRzRnJhbWVCdWZmZXJPYmplY3QoZ2wpOworICAgICAgICAgICAgaWYgKG1Db250ZXh0U3VwcG9ydHNGcmFtZUJ1ZmZlck9iamVjdCkgeworICAgICAgICAgICAgICAgIG1UYXJnZXRUZXh0dXJlID0gY3JlYXRlVGFyZ2V0VGV4dHVyZShnbCwgbUZyYW1lYnVmZmVyV2lkdGgsIG1GcmFtZWJ1ZmZlckhlaWdodCk7CisgICAgICAgICAgICAgICAgbUZyYW1lYnVmZmVyID0gY3JlYXRlRnJhbWVCdWZmZXIoZ2wsIG1GcmFtZWJ1ZmZlcldpZHRoLCBtRnJhbWVidWZmZXJIZWlnaHQsIG1UYXJnZXRUZXh0dXJlKTsKKworICAgICAgICAgICAgICAgIG1DdWJlID0gbmV3IEN1YmUoKTsKKyAgICAgICAgICAgICAgICBtVHJpYW5nbGUgPSBuZXcgVHJpYW5nbGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBkcmF3T25zY3JlZW4oR0wxMCBnbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICBnbC5nbFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgZmxvYXQgcmF0aW8gPSAoZmxvYXQpIHdpZHRoIC8gaGVpZ2h0OworICAgICAgICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMMTAuR0xfUFJPSkVDVElPTik7CisgICAgICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOworICAgICAgICAgICAgZ2wuZ2xGcnVzdHVtZigtcmF0aW8sIHJhdGlvLCAtMSwgMSwgMywgNyk7CisKKyAgICAgICAgICAgIGdsLmdsQ2xlYXJDb2xvcigwLDAsMSwwKTsKKyAgICAgICAgICAgIGdsLmdsQ2xlYXIoR0wxMC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wxMC5HTF9ERVBUSF9CVUZGRVJfQklUKTsKKyAgICAgICAgICAgIGdsLmdsQmluZFRleHR1cmUoR0wxMC5HTF9URVhUVVJFXzJELCBtVGFyZ2V0VGV4dHVyZSk7CisKKyAgICAgICAgICAgIGdsLmdsVGV4RW52ZihHTDEwLkdMX1RFWFRVUkVfRU5WLCBHTDEwLkdMX1RFWFRVUkVfRU5WX01PREUsCisgICAgICAgICAgICAgICAgICAgIEdMMTAuR0xfUkVQTEFDRSk7CisKKyAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX01PREVMVklFVyk7CisgICAgICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOworCisgICAgICAgICAgICBHTFUuZ2x1TG9va0F0KGdsLCAwLCAwLCAtNSwgMGYsIDBmLCAwZiwgMGYsIDEuMGYsIDAuMGYpOworCisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKworICAgICAgICAgICAgZ2wuZ2xBY3RpdmVUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRTApOworCisgICAgICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAlIDQwMDBMOworICAgICAgICAgICAgZmxvYXQgYW5nbGUgPSAwLjA5MGYgKiAoKGludCkgdGltZSk7CisKKyAgICAgICAgICAgIGdsLmdsUm90YXRlZihhbmdsZSwgMCwgMCwgMS4wZik7CisKKyAgICAgICAgICAgIG1UcmlhbmdsZS5kcmF3KGdsKTsKKworICAgICAgICAgICAgLy8gUmVzdG9yZSBkZWZhdWx0IHN0YXRlIHNvIHRoZSBvdGhlciByZW5kZXJlciBpcyBub3QgYWZmZWN0ZWQuCisKKyAgICAgICAgICAgIGdsLmdsQmluZFRleHR1cmUoR0wxMC5HTF9URVhUVVJFXzJELCAwKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgZHJhd09mZnNjcmVlbkltYWdlKEdMMTAgZ2wsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgICAgICAgICAgZ2wuZ2xWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGZsb2F0IHJhdGlvID0gKGZsb2F0KSB3aWR0aCAvIGhlaWdodDsKKyAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDEwLkdMX1BST0pFQ1RJT04pOworICAgICAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIGdsLmdsRnJ1c3R1bWYoLXJhdGlvLCByYXRpbywgLTEsIDEsIDEsIDEwKTsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMC5HTF9DVUxMX0ZBQ0UpOworICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wxMC5HTF9ERVBUSF9URVNUKTsKKworICAgICAgICAgICAgZ2wuZ2xDbGVhckNvbG9yKDAsMC41ZiwxLDApOworICAgICAgICAgICAgZ2wuZ2xDbGVhcihHTDEwLkdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTDEwLkdMX0RFUFRIX0JVRkZFUl9CSVQpOworICAgICAgICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMMTAuR0xfTU9ERUxWSUVXKTsKKyAgICAgICAgICAgIGdsLmdsTG9hZElkZW50aXR5KCk7CisgICAgICAgICAgICBnbC5nbFRyYW5zbGF0ZWYoMCwgMCwgLTMuMGYpOworICAgICAgICAgICAgZ2wuZ2xSb3RhdGVmKG1BbmdsZSwgICAgICAgIDAsIDEsIDApOworICAgICAgICAgICAgZ2wuZ2xSb3RhdGVmKG1BbmdsZSowLjI1ZiwgIDEsIDAsIDApOworCisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgICAgIGdsLmdsRW5hYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9DT0xPUl9BUlJBWSk7CisKKyAgICAgICAgICAgIG1DdWJlLmRyYXcoZ2wpOworCisgICAgICAgICAgICBnbC5nbFJvdGF0ZWYobUFuZ2xlKjIuMGYsIDAsIDEsIDEpOworICAgICAgICAgICAgZ2wuZ2xUcmFuc2xhdGVmKDAuNWYsIDAuNWYsIDAuNWYpOworCisgICAgICAgICAgICBtQ3ViZS5kcmF3KGdsKTsKKworICAgICAgICAgICAgbUFuZ2xlICs9IDEuMmY7CisKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgZGVmYXVsdCBzdGF0ZSBzbyB0aGUgb3RoZXIgcmVuZGVyZXIgaXMgbm90IGFmZmVjdGVkLgorCisgICAgICAgICAgICBnbC5nbERpc2FibGUoR0wxMC5HTF9DVUxMX0ZBQ0UpOworICAgICAgICAgICAgZ2wuZ2xEaXNhYmxlKEdMMTAuR0xfREVQVEhfVEVTVCk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDEwLkdMX0NPTE9SX0FSUkFZKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgaW50IGNyZWF0ZVRhcmdldFRleHR1cmUoR0wxMCBnbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICBpbnQgdGV4dHVyZTsKKyAgICAgICAgICAgIGludFtdIHRleHR1cmVzID0gbmV3IGludFsxXTsKKyAgICAgICAgICAgIGdsLmdsR2VuVGV4dHVyZXMoMSwgdGV4dHVyZXMsIDApOworICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVzWzBdOworICAgICAgICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTDEwLkdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgICAgICAgICAgZ2wuZ2xUZXhJbWFnZTJEKEdMMTAuR0xfVEVYVFVSRV8yRCwgMCwgR0wxMC5HTF9SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX1JHQkEsIEdMMTAuR0xfVU5TSUdORURfQllURSwgbnVsbCk7CisgICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgR0wxMC5HTF9ORUFSRVNUKTsKKyAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyZihHTDEwLkdMX1RFWFRVUkVfMkQsCisgICAgICAgICAgICAgICAgICAgIEdMMTAuR0xfVEVYVFVSRV9NQUdfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX0xJTkVBUik7CisgICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcngoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9TLAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUEVBVCk7CisgICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcngoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9ULAorICAgICAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUEVBVCk7Cis7ICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGludCBjcmVhdGVGcmFtZUJ1ZmZlcihHTDEwIGdsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB0YXJnZXRUZXh0dXJlSWQpIHsKKyAgICAgICAgICAgIEdMMTFFeHRlbnNpb25QYWNrIGdsMTFlcCA9IChHTDExRXh0ZW5zaW9uUGFjaykgZ2w7CisgICAgICAgICAgICBpbnQgZnJhbWVidWZmZXI7CisgICAgICAgICAgICBpbnRbXSBmcmFtZWJ1ZmZlcnMgPSBuZXcgaW50WzFdOworICAgICAgICAgICAgZ2wxMWVwLmdsR2VuRnJhbWVidWZmZXJzT0VTKDEsIGZyYW1lYnVmZmVycywgMCk7CisgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyc1swXTsKKyAgICAgICAgICAgIGdsMTFlcC5nbEJpbmRGcmFtZWJ1ZmZlck9FUyhHTDExRXh0ZW5zaW9uUGFjay5HTF9GUkFNRUJVRkZFUl9PRVMsIGZyYW1lYnVmZmVyKTsKKworICAgICAgICAgICAgaW50IGRlcHRoYnVmZmVyOworICAgICAgICAgICAgaW50W10gcmVuZGVyYnVmZmVycyA9IG5ldyBpbnRbMV07CisgICAgICAgICAgICBnbDExZXAuZ2xHZW5SZW5kZXJidWZmZXJzT0VTKDEsIHJlbmRlcmJ1ZmZlcnMsIDApOworICAgICAgICAgICAgZGVwdGhidWZmZXIgPSByZW5kZXJidWZmZXJzWzBdOworCisgICAgICAgICAgICBnbDExZXAuZ2xCaW5kUmVuZGVyYnVmZmVyT0VTKEdMMTFFeHRlbnNpb25QYWNrLkdMX1JFTkRFUkJVRkZFUl9PRVMsIGRlcHRoYnVmZmVyKTsKKyAgICAgICAgICAgIGdsMTFlcC5nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfUkVOREVSQlVGRkVSX09FUywKKyAgICAgICAgICAgICAgICAgICAgR0wxMUV4dGVuc2lvblBhY2suR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgZ2wxMWVwLmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfT0VTLAorICAgICAgICAgICAgICAgICAgICBHTDExRXh0ZW5zaW9uUGFjay5HTF9ERVBUSF9BVFRBQ0hNRU5UX09FUywKKyAgICAgICAgICAgICAgICAgICAgR0wxMUV4dGVuc2lvblBhY2suR0xfUkVOREVSQlVGRkVSX09FUywgZGVwdGhidWZmZXIpOworCisgICAgICAgICAgICBnbDExZXAuZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE9FUyhHTDExRXh0ZW5zaW9uUGFjay5HTF9GUkFNRUJVRkZFUl9PRVMsCisgICAgICAgICAgICAgICAgICAgIEdMMTFFeHRlbnNpb25QYWNrLkdMX0NPTE9SX0FUVEFDSE1FTlQwX09FUywgR0wxMC5HTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICB0YXJnZXRUZXh0dXJlSWQsIDApOworICAgICAgICAgICAgaW50IHN0YXR1cyA9IGdsMTFlcC5nbENoZWNrRnJhbWVidWZmZXJTdGF0dXNPRVMoR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfT0VTKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gR0wxMUV4dGVuc2lvblBhY2suR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfT0VTKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZTogIiArCisgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nKHN0YXR1cykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2wxMWVwLmdsQmluZEZyYW1lYnVmZmVyT0VTKEdMMTFFeHRlbnNpb25QYWNrLkdMX0ZSQU1FQlVGRkVSX09FUywgMCk7CisgICAgICAgICAgICByZXR1cm4gZnJhbWVidWZmZXI7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tJZkNvbnRleHRTdXBwb3J0c0ZyYW1lQnVmZmVyT2JqZWN0KEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIHJldHVybiBjaGVja0lmQ29udGV4dFN1cHBvcnRzRXh0ZW5zaW9uKGdsLCAiR0xfT0VTX2ZyYW1lYnVmZmVyX29iamVjdCIpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0IHdheSB0byBjaGVjayBmb3IgYW4gZXh0ZW5zaW9uLCBidXQgZmluZSBpZgorICAgICAgICAgKiB3ZSBhcmUgb25seSBjaGVja2luZyBmb3IgYSBmZXcgZXh0ZW5zaW9ucyBlYWNoIHRpbWUgYSBjb250ZXh0IGlzIGNyZWF0ZWQuCisgICAgICAgICAqIEBwYXJhbSBnbAorICAgICAgICAgKiBAcGFyYW0gZXh0ZW5zaW9uCisgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXh0ZW5zaW9uIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0lmQ29udGV4dFN1cHBvcnRzRXh0ZW5zaW9uKEdMMTAgZ2wsIFN0cmluZyBleHRlbnNpb24pIHsKKyAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zID0gIiAiICsgZ2wuZ2xHZXRTdHJpbmcoR0wxMC5HTF9FWFRFTlNJT05TKSArICIgIjsKKyAgICAgICAgICAgIC8vIFRoZSBleHRlbnNpb25zIHN0cmluZyBpcyBwYWRkZWQgd2l0aCBzcGFjZXMgYmV0d2VlbiBleHRlbnNpb25zLCBidXQgbm90CisgICAgICAgICAgICAvLyBuZWNlc3NhcmlseSBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZC4gRm9yIHNpbXBsaWNpdHksIGFkZCBzcGFjZXMgYXQgdGhlCisgICAgICAgICAgICAvLyBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgZXh0ZW5zaW9ucyBzdHJpbmcgYW5kIHRoZSBleHRlbnNpb24gc3RyaW5nLgorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW4gYXZvaWQgc3BlY2lhbC1jYXNlIGNoZWNrcyBmb3IgdGhlIGZpcnN0IG9yIGxhc3QKKyAgICAgICAgICAgIC8vIGV4dGVuc2lvbiwgYXMgd2VsbCBhcyBhdm9pZCBzcGVjaWFsLWNhc2UgY2hlY2tzIHdoZW4gYW4gZXh0ZW5zaW9uIG5hbWUKKyAgICAgICAgICAgIC8vIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJ0IG9mIGFub3RoZXIgZXh0ZW5zaW9uIG5hbWUuCisgICAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9ucy5pbmRleE9mKCIgIiArIGV4dGVuc2lvbiArICIgIikgPj0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNoZWNrR0xFcnJvcihHTCBnbCkgeworICAgICAgICBpbnQgZXJyb3IgPSAoKEdMMTApIGdsKS5nbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciAhPSBHTDEwLkdMX05PX0VSUk9SKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiR0xFcnJvciAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVycm9yKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIG91ciBzdXJmYWNlIHZpZXcgYW5kIHNldCBpdCBhcyB0aGUgY29udGVudCBvZiBvdXIKKyAgICAgICAgLy8gQWN0aXZpdHkKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcgPSBuZXcgR0xTdXJmYWNlVmlldyh0aGlzKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcuc2V0UmVuZGVyZXIobmV3IFJlbmRlcmVyKCkpOworICAgICAgICBzZXRDb250ZW50VmlldyhtR0xTdXJmYWNlVmlldyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5vblJlc3VtZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblBhdXNlKCk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3Lm9uUGF1c2UoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvR0xFUzIwQWN0aXZpdHkuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9HTEVTMjBBY3Rpdml0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTczY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvR0xFUzIwQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuZ3JhcGhpY3M7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkNvbmZpZ3VyYXRpb25JbmZvOworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMU3VyZmFjZVZpZXc7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CisKKy8qKgorICogVGhpcyBzYW1wbGUgc2hvd3MgaG93IHRvIGNoZWNrIGZvciBPcGVuR0wgRVMgMi4wIHN1cHBvcnQgYXQgcnVudGltZSwgYW5kIHRoZW4KKyAqIHVzZSBlaXRoZXIgT3BlbkdMIEVTIDEuMCBvciBPcGVuR0wgRVMgMi4wLCBhcyBhcHByb3ByaWF0ZS4KKyAqLworcHVibGljIGNsYXNzIEdMRVMyMEFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcgPSBuZXcgR0xTdXJmYWNlVmlldyh0aGlzKTsKKyAgICAgICAgaWYgKGRldGVjdE9wZW5HTEVTMjAoKSkgeworICAgICAgICAgICAgLy8gVGVsbCB0aGUgc3VyZmFjZSB2aWV3IHdlIHdhbnQgdG8gY3JlYXRlIGFuIE9wZW5HTCBFUyAyLjAtY29tcGF0aWJsZQorICAgICAgICAgICAgLy8gY29udGV4dCwgYW5kIHNldCBhbiBPcGVuR0wgRVMgMi4wLWNvbXBhdGlibGUgcmVuZGVyZXIuCisgICAgICAgICAgICBtR0xTdXJmYWNlVmlldy5zZXRFR0xDb250ZXh0Q2xpZW50VmVyc2lvbigyKTsKKyAgICAgICAgICAgIG1HTFN1cmZhY2VWaWV3LnNldFJlbmRlcmVyKG5ldyBHTEVTMjBUcmlhbmdsZVJlbmRlcmVyKHRoaXMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNldCBhbiBPcGVuR0wgRVMgMS54LWNvbXBhdGlibGUgcmVuZGVyZXIuIEluIGEgcmVhbCBhcHBsaWNhdGlvbgorICAgICAgICAgICAgLy8gdGhpcyByZW5kZXJlciBtaWdodCBhcHByb3hpbWF0ZSB0aGUgc2FtZSBvdXRwdXQgYXMgdGhlIDIuMCByZW5kZXJlci4KKyAgICAgICAgICAgIG1HTFN1cmZhY2VWaWV3LnNldFJlbmRlcmVyKG5ldyBUcmlhbmdsZVJlbmRlcmVyKHRoaXMpKTsKKyAgICAgICAgfQorICAgICAgICBzZXRDb250ZW50VmlldyhtR0xTdXJmYWNlVmlldyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGRldGVjdE9wZW5HTEVTMjAoKSB7CisgICAgICAgIEFjdGl2aXR5TWFuYWdlciBhbSA9CisgICAgICAgICAgICAoQWN0aXZpdHlNYW5hZ2VyKSBnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQUNUSVZJVFlfU0VSVklDRSk7CisgICAgICAgIENvbmZpZ3VyYXRpb25JbmZvIGluZm8gPSBhbS5nZXREZXZpY2VDb25maWd1cmF0aW9uSW5mbygpOworICAgICAgICByZXR1cm4gKGluZm8ucmVxR2xFc1ZlcnNpb24gPj0gMHgyMDAwMCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBtR0xTdXJmYWNlVmlldy5vblJlc3VtZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCisgICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cworICAgICAgICBzdXBlci5vblBhdXNlKCk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3Lm9uUGF1c2UoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgbUdMU3VyZmFjZVZpZXc7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvR0xFUzIwVHJpYW5nbGVSZW5kZXJlci5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0dMRVMyMFRyaWFuZ2xlUmVuZGVyZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTZlYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL0dMRVMyMFRyaWFuZ2xlUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLmdyYXBoaWNzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOworaW1wb3J0IGphdmEubmlvLkZsb2F0QnVmZmVyOworCitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDEwOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OworaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMVXRpbHM7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5leGFtcGxlLmFuZHJvaWQuYXBpcy5SOworCitjbGFzcyBHTEVTMjBUcmlhbmdsZVJlbmRlcmVyIGltcGxlbWVudHMgR0xTdXJmYWNlVmlldy5SZW5kZXJlciB7CisKKyAgICBwdWJsaWMgR0xFUzIwVHJpYW5nbGVSZW5kZXJlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtVHJpYW5nbGVWZXJ0aWNlcyA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QobVRyaWFuZ2xlVmVydGljZXNEYXRhLmxlbmd0aAorICAgICAgICAgICAgICAgICogRkxPQVRfU0laRV9CWVRFUykub3JkZXIoQnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCkpLmFzRmxvYXRCdWZmZXIoKTsKKyAgICAgICAgbVRyaWFuZ2xlVmVydGljZXMucHV0KG1UcmlhbmdsZVZlcnRpY2VzRGF0YSkucG9zaXRpb24oMCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25EcmF3RnJhbWUoR0wxMCBnbFVudXNlZCkgeworICAgICAgICAvLyBJZ25vcmUgdGhlIHBhc3NlZC1pbiBHTDEwIGludGVyZmFjZSwgYW5kIHVzZSB0aGUgR0xFUzIwCisgICAgICAgIC8vIGNsYXNzJ3Mgc3RhdGljIG1ldGhvZHMgaW5zdGVhZC4KKyAgICAgICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKKyAgICAgICAgR0xFUzIwLmdsQ2xlYXIoIEdMRVMyMC5HTF9ERVBUSF9CVUZGRVJfQklUIHwgR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOworICAgICAgICBHTEVTMjAuZ2xVc2VQcm9ncmFtKG1Qcm9ncmFtKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbFVzZVByb2dyYW0iKTsKKworICAgICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7CisgICAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCBtVGV4dHVyZUlEKTsKKworICAgICAgICBtVHJpYW5nbGVWZXJ0aWNlcy5wb3NpdGlvbihUUklBTkdMRV9WRVJUSUNFU19EQVRBX1BPU19PRkZTRVQpOworICAgICAgICBHTEVTMjAuZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1hUG9zaXRpb25IYW5kbGUsIDMsIEdMRVMyMC5HTF9GTE9BVCwgZmFsc2UsCisgICAgICAgICAgICAgICAgVFJJQU5HTEVfVkVSVElDRVNfREFUQV9TVFJJREVfQllURVMsIG1UcmlhbmdsZVZlcnRpY2VzKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbFZlcnRleEF0dHJpYlBvaW50ZXIgbWFQb3NpdGlvbiIpOworICAgICAgICBtVHJpYW5nbGVWZXJ0aWNlcy5wb3NpdGlvbihUUklBTkdMRV9WRVJUSUNFU19EQVRBX1VWX09GRlNFVCk7CisgICAgICAgIEdMRVMyMC5nbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1hUG9zaXRpb25IYW5kbGUpOworICAgICAgICBjaGVja0dsRXJyb3IoImdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgbWFQb3NpdGlvbkhhbmRsZSIpOworICAgICAgICBHTEVTMjAuZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1hVGV4dHVyZUhhbmRsZSwgMiwgR0xFUzIwLkdMX0ZMT0FULCBmYWxzZSwKKyAgICAgICAgICAgICAgICBUUklBTkdMRV9WRVJUSUNFU19EQVRBX1NUUklERV9CWVRFUywgbVRyaWFuZ2xlVmVydGljZXMpOworICAgICAgICBjaGVja0dsRXJyb3IoImdsVmVydGV4QXR0cmliUG9pbnRlciBtYVRleHR1cmVIYW5kbGUiKTsKKyAgICAgICAgR0xFUzIwLmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobWFUZXh0dXJlSGFuZGxlKTsKKyAgICAgICAgY2hlY2tHbEVycm9yKCJnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5IG1hVGV4dHVyZUhhbmRsZSIpOworCisgICAgICAgIGxvbmcgdGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpICUgNDAwMEw7CisgICAgICAgIGZsb2F0IGFuZ2xlID0gMC4wOTBmICogKChpbnQpIHRpbWUpOworICAgICAgICBNYXRyaXguc2V0Um90YXRlTShtTU1hdHJpeCwgMCwgYW5nbGUsIDAsIDAsIDEuMGYpOworICAgICAgICBNYXRyaXgubXVsdGlwbHlNTShtTVZQTWF0cml4LCAwLCBtVk1hdHJpeCwgMCwgbU1NYXRyaXgsIDApOworICAgICAgICBNYXRyaXgubXVsdGlwbHlNTShtTVZQTWF0cml4LCAwLCBtUHJvak1hdHJpeCwgMCwgbU1WUE1hdHJpeCwgMCk7CisKKyAgICAgICAgR0xFUzIwLmdsVW5pZm9ybU1hdHJpeDRmdihtdU1WUE1hdHJpeEhhbmRsZSwgMSwgZmFsc2UsIG1NVlBNYXRyaXgsIDApOworICAgICAgICBHTEVTMjAuZ2xEcmF3QXJyYXlzKEdMRVMyMC5HTF9UUklBTkdMRVMsIDAsIDMpOworICAgICAgICBjaGVja0dsRXJyb3IoImdsRHJhd0FycmF5cyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNoYW5nZWQoR0wxMCBnbFVudXNlZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgIC8vIElnbm9yZSB0aGUgcGFzc2VkLWluIEdMMTAgaW50ZXJmYWNlLCBhbmQgdXNlIHRoZSBHTEVTMjAKKyAgICAgICAgLy8gY2xhc3MncyBzdGF0aWMgbWV0aG9kcyBpbnN0ZWFkLgorICAgICAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgcmF0aW8gPSAoZmxvYXQpIHdpZHRoIC8gaGVpZ2h0OworICAgICAgICBNYXRyaXguZnJ1c3R1bU0obVByb2pNYXRyaXgsIDAsIC1yYXRpbywgcmF0aW8sIC0xLCAxLCAzLCA3KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDcmVhdGVkKEdMMTAgZ2xVbnVzZWQsIEVHTENvbmZpZyBjb25maWcpIHsKKyAgICAgICAgLy8gSWdub3JlIHRoZSBwYXNzZWQtaW4gR0wxMCBpbnRlcmZhY2UsIGFuZCB1c2UgdGhlIEdMRVMyMAorICAgICAgICAvLyBjbGFzcydzIHN0YXRpYyBtZXRob2RzIGluc3RlYWQuCisgICAgICAgIG1Qcm9ncmFtID0gY3JlYXRlUHJvZ3JhbShtVmVydGV4U2hhZGVyLCBtRnJhZ21lbnRTaGFkZXIpOworICAgICAgICBpZiAobVByb2dyYW0gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1hUG9zaXRpb25IYW5kbGUgPSBHTEVTMjAuZ2xHZXRBdHRyaWJMb2NhdGlvbihtUHJvZ3JhbSwgImFQb3NpdGlvbiIpOworICAgICAgICBjaGVja0dsRXJyb3IoImdsR2V0QXR0cmliTG9jYXRpb24gYVBvc2l0aW9uIik7CisgICAgICAgIGlmIChtYVBvc2l0aW9uSGFuZGxlID09IC0xKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGdldCBhdHRyaWIgbG9jYXRpb24gZm9yIGFQb3NpdGlvbiIpOworICAgICAgICB9CisgICAgICAgIG1hVGV4dHVyZUhhbmRsZSA9IEdMRVMyMC5nbEdldEF0dHJpYkxvY2F0aW9uKG1Qcm9ncmFtLCAiYVRleHR1cmVDb29yZCIpOworICAgICAgICBjaGVja0dsRXJyb3IoImdsR2V0QXR0cmliTG9jYXRpb24gYVRleHR1cmVDb29yZCIpOworICAgICAgICBpZiAobWFUZXh0dXJlSGFuZGxlID09IC0xKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGdldCBhdHRyaWIgbG9jYXRpb24gZm9yIGFUZXh0dXJlQ29vcmQiKTsKKyAgICAgICAgfQorCisgICAgICAgIG11TVZQTWF0cml4SGFuZGxlID0gR0xFUzIwLmdsR2V0VW5pZm9ybUxvY2F0aW9uKG1Qcm9ncmFtLCAidU1WUE1hdHJpeCIpOworICAgICAgICBjaGVja0dsRXJyb3IoImdsR2V0VW5pZm9ybUxvY2F0aW9uIHVNVlBNYXRyaXgiKTsKKyAgICAgICAgaWYgKG11TVZQTWF0cml4SGFuZGxlID09IC0xKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGdldCBhdHRyaWIgbG9jYXRpb24gZm9yIHVNVlBNYXRyaXgiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIENyZWF0ZSBvdXIgdGV4dHVyZS4gVGhpcyBoYXMgdG8gYmUgZG9uZSBlYWNoIHRpbWUgdGhlCisgICAgICAgICAqIHN1cmZhY2UgaXMgY3JlYXRlZC4KKyAgICAgICAgICovCisKKyAgICAgICAgaW50W10gdGV4dHVyZXMgPSBuZXcgaW50WzFdOworICAgICAgICBHTEVTMjAuZ2xHZW5UZXh0dXJlcygxLCB0ZXh0dXJlcywgMCk7CisKKyAgICAgICAgbVRleHR1cmVJRCA9IHRleHR1cmVzWzBdOworICAgICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgbVRleHR1cmVJRCk7CisKKyAgICAgICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyZihHTEVTMjAuR0xfVEVYVFVSRV8yRCwgR0xFUzIwLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICBHTEVTMjAuR0xfTkVBUkVTVCk7CisgICAgICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYoR0xFUzIwLkdMX1RFWFRVUkVfMkQsCisgICAgICAgICAgICAgICAgR0xFUzIwLkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICBHTEVTMjAuR0xfTElORUFSKTsKKworICAgICAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJpKEdMRVMyMC5HTF9URVhUVVJFXzJELCBHTEVTMjAuR0xfVEVYVFVSRV9XUkFQX1MsCisgICAgICAgICAgICAgICAgR0xFUzIwLkdMX1JFUEVBVCk7CisgICAgICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmkoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIEdMRVMyMC5HTF9URVhUVVJFX1dSQVBfVCwKKyAgICAgICAgICAgICAgICBHTEVTMjAuR0xfUkVQRUFUKTsKKworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpCisgICAgICAgICAgICAub3BlblJhd1Jlc291cmNlKFIucmF3LnJvYm90KTsKKyAgICAgICAgQml0bWFwIGJpdG1hcDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIElnbm9yZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEdMVXRpbHMudGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgYml0bWFwLCAwKTsKKyAgICAgICAgYml0bWFwLnJlY3ljbGUoKTsKKworICAgICAgICBNYXRyaXguc2V0TG9va0F0TShtVk1hdHJpeCwgMCwgMCwgMCwgLTUsIDBmLCAwZiwgMGYsIDBmLCAxLjBmLCAwLjBmKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBsb2FkU2hhZGVyKGludCBzaGFkZXJUeXBlLCBTdHJpbmcgc291cmNlKSB7CisgICAgICAgIGludCBzaGFkZXIgPSBHTEVTMjAuZ2xDcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7CisgICAgICAgIGlmIChzaGFkZXIgIT0gMCkgeworICAgICAgICAgICAgR0xFUzIwLmdsU2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlKTsKKyAgICAgICAgICAgIEdMRVMyMC5nbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgICAgIGludFtdIGNvbXBpbGVkID0gbmV3IGludFsxXTsKKyAgICAgICAgICAgIEdMRVMyMC5nbEdldFNoYWRlcml2KHNoYWRlciwgR0xFUzIwLkdMX0NPTVBJTEVfU1RBVFVTLCBjb21waWxlZCwgMCk7CisgICAgICAgICAgICBpZiAoY29tcGlsZWRbMF0gPT0gMCkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCBjb21waWxlIHNoYWRlciAiICsgc2hhZGVyVHlwZSArICI6Iik7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBHTEVTMjAuZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpOworICAgICAgICAgICAgICAgIEdMRVMyMC5nbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICAgICAgICAgIHNoYWRlciA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNoYWRlcjsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBjcmVhdGVQcm9ncmFtKFN0cmluZyB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyBmcmFnbWVudFNvdXJjZSkgeworICAgICAgICBpbnQgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTEVTMjAuR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U291cmNlKTsKKyAgICAgICAgaWYgKHZlcnRleFNoYWRlciA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwaXhlbFNoYWRlciA9IGxvYWRTaGFkZXIoR0xFUzIwLkdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRTb3VyY2UpOworICAgICAgICBpZiAocGl4ZWxTaGFkZXIgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpbnQgcHJvZ3JhbSA9IEdMRVMyMC5nbENyZWF0ZVByb2dyYW0oKTsKKyAgICAgICAgaWYgKHByb2dyYW0gIT0gMCkgeworICAgICAgICAgICAgR0xFUzIwLmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgICAgICAgICAgICBjaGVja0dsRXJyb3IoImdsQXR0YWNoU2hhZGVyIik7CisgICAgICAgICAgICBHTEVTMjAuZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgcGl4ZWxTaGFkZXIpOworICAgICAgICAgICAgY2hlY2tHbEVycm9yKCJnbEF0dGFjaFNoYWRlciIpOworICAgICAgICAgICAgR0xFUzIwLmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBpbnRbXSBsaW5rU3RhdHVzID0gbmV3IGludFsxXTsKKyAgICAgICAgICAgIEdMRVMyMC5nbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTEVTMjAuR0xfTElOS19TVEFUVVMsIGxpbmtTdGF0dXMsIDApOworICAgICAgICAgICAgaWYgKGxpbmtTdGF0dXNbMF0gIT0gR0xFUzIwLkdMX1RSVUUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZCBub3QgbGluayBwcm9ncmFtOiAiKTsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsIEdMRVMyMC5nbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTsKKyAgICAgICAgICAgICAgICBHTEVTMjAuZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgICAgIHByb2dyYW0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9ncmFtOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja0dsRXJyb3IoU3RyaW5nIG9wKSB7CisgICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgd2hpbGUgKChlcnJvciA9IEdMRVMyMC5nbEdldEVycm9yKCkpICE9IEdMRVMyMC5HTF9OT19FUlJPUikgeworICAgICAgICAgICAgTG9nLmUoVEFHLCBvcCArICI6IGdsRXJyb3IgIiArIGVycm9yKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG9wICsgIjogZ2xFcnJvciAiICsgZXJyb3IpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMT0FUX1NJWkVfQllURVMgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUklBTkdMRV9WRVJUSUNFU19EQVRBX1NUUklERV9CWVRFUyA9IDUgKiBGTE9BVF9TSVpFX0JZVEVTOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUklBTkdMRV9WRVJUSUNFU19EQVRBX1BPU19PRkZTRVQgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUklBTkdMRV9WRVJUSUNFU19EQVRBX1VWX09GRlNFVCA9IDM7CisgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdFtdIG1UcmlhbmdsZVZlcnRpY2VzRGF0YSA9IHsKKyAgICAgICAgICAgIC8vIFgsIFksIFosIFUsIFYKKyAgICAgICAgICAgIC0xLjBmLCAtMC41ZiwgMCwgLTAuNWYsIDAuMGYsCisgICAgICAgICAgICAxLjBmLCAtMC41ZiwgMCwgMS41ZiwgLTAuMGYsCisgICAgICAgICAgICAwLjBmLCAgMS4xMTgwMzM5OWYsIDAsIDAuNWYsICAxLjYxODAzMzk5ZiB9OworCisgICAgcHJpdmF0ZSBGbG9hdEJ1ZmZlciBtVHJpYW5nbGVWZXJ0aWNlczsKKworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1WZXJ0ZXhTaGFkZXIgPQorICAgICAgICAidW5pZm9ybSBtYXQ0IHVNVlBNYXRyaXg7XG4iICsKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFQb3NpdGlvbjtcbiIgKworICAgICAgICAiYXR0cmlidXRlIHZlYzIgYVRleHR1cmVDb29yZDtcbiIgKworICAgICAgICAidmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmQ7XG4iICsKKyAgICAgICAgInZvaWQgbWFpbigpIHtcbiIgKworICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IHVNVlBNYXRyaXggKiBhUG9zaXRpb247XG4iICsKKyAgICAgICAgIiAgdlRleHR1cmVDb29yZCA9IGFUZXh0dXJlQ29vcmQ7XG4iICsKKyAgICAgICAgIn1cbiI7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtRnJhZ21lbnRTaGFkZXIgPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iICsKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkO1xuIiArCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzVGV4dHVyZTtcbiIgKworICAgICAgICAidm9pZCBtYWluKCkge1xuIiArCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChzVGV4dHVyZSwgdlRleHR1cmVDb29yZCk7XG4iICsKKyAgICAgICAgIn1cbiI7CisKKyAgICBwcml2YXRlIGZsb2F0W10gbU1WUE1hdHJpeCA9IG5ldyBmbG9hdFsxNl07CisgICAgcHJpdmF0ZSBmbG9hdFtdIG1Qcm9qTWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKKyAgICBwcml2YXRlIGZsb2F0W10gbU1NYXRyaXggPSBuZXcgZmxvYXRbMTZdOworICAgIHByaXZhdGUgZmxvYXRbXSBtVk1hdHJpeCA9IG5ldyBmbG9hdFsxNl07CisKKyAgICBwcml2YXRlIGludCBtUHJvZ3JhbTsKKyAgICBwcml2YXRlIGludCBtVGV4dHVyZUlEOworICAgIHByaXZhdGUgaW50IG11TVZQTWF0cml4SGFuZGxlOworICAgIHByaXZhdGUgaW50IG1hUG9zaXRpb25IYW5kbGU7CisgICAgcHJpdmF0ZSBpbnQgbWFUZXh0dXJlSGFuZGxlOworCisgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUcgPSAiR0xFUzIwVHJpYW5nbGVSZW5kZXJlciI7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvTWF0cml4UGFsZXR0ZUFjdGl2aXR5LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvTWF0cml4UGFsZXR0ZUFjdGl2aXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwZTBlMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9NYXRyaXhQYWxldHRlQWN0aXZpdHkuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuZ3JhcGhpY3M7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworCisvKioKKyAqIFRoaXMgc2FtcGxlIHNob3dzIGhvdyB0byBpbXBsZW1lbnQgYSBNYXRyaXggUGFsZXR0ZQorICovCitwdWJsaWMgY2xhc3MgTWF0cml4UGFsZXR0ZUFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgeworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcgPSBuZXcgR0xTdXJmYWNlVmlldyh0aGlzKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcuc2V0UmVuZGVyZXIobmV3IE1hdHJpeFBhbGV0dGVSZW5kZXJlcih0aGlzKSk7CisgICAgICAgIHNldENvbnRlbnRWaWV3KG1HTFN1cmZhY2VWaWV3KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKKyAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKKyAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCisgICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7CisgICAgICAgIG1HTFN1cmZhY2VWaWV3Lm9uUmVzdW1lKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25QYXVzZSgpIHsKKyAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKKyAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCisgICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKKyAgICAgICAgbUdMU3VyZmFjZVZpZXcub25QYXVzZSgpOworICAgIH0KKworICAgIHByaXZhdGUgR0xTdXJmYWNlVmlldyBtR0xTdXJmYWNlVmlldzsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9NYXRyaXhQYWxldHRlUmVuZGVyZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9NYXRyaXhQYWxldHRlUmVuZGVyZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGUyZGIxCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL01hdHJpeFBhbGV0dGVSZW5kZXJlci5qYXZhCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuZ3JhcGhpY3M7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7CitpbXBvcnQgamF2YS5uaW8uQ2hhckJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKKworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb25maWc7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0w7CitpbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3BlbmdsZXMuR0wxMDsKK2ltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDExOworaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTFFeHQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFU7CitpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVdGlsczsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworCitpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CisKK3B1YmxpYyBjbGFzcyBNYXRyaXhQYWxldHRlUmVuZGVyZXIgaW1wbGVtZW50cyBHTFN1cmZhY2VWaWV3LlJlbmRlcmVyeworICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIEdyaWQgbUdyaWQ7CisgICAgcHJpdmF0ZSBpbnQgbVRleHR1cmVJRDsKKworICAgIC8qKiBBIGdyaWQgaXMgYSB0b3BvbG9naWNhbGx5IHJlY3Rhbmd1bGFyIGFycmF5IG9mIHZlcnRpY2VzLgorICAgICAqCisgICAgICogVGhpcyBncmlkIGNsYXNzIGlzIGN1c3RvbWl6ZWQgZm9yIHRoZSB2ZXJ0ZXggZGF0YSByZXF1aXJlZCBmb3IgdGhpcworICAgICAqIGV4YW1wbGUuCisgICAgICoKKyAgICAgKiBUaGUgdmVydGV4IGFuZCBpbmRleCBkYXRhIGFyZSBoZWxkIGluIFZCTyBvYmplY3RzIGJlY2F1c2Ugb24gbW9zdAorICAgICAqIEdQVXMgVkJPIG9iamVjdHMgYXJlIHRoZSBmYXN0ZXN0IHdheSBvZiByZW5kZXJpbmcgc3RhdGljIHZlcnRleAorICAgICAqIGFuZCBpbmRleCBkYXRhLgorICAgICAqCisgICAgICovCisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHcmlkIHsKKyAgICAgICAgLy8gU2l6ZSBvZiB2ZXJ0ZXggZGF0YSBlbGVtZW50cyBpbiBieXRlczoKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBGTE9BVF9TSVpFID0gNDsKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBDSEFSX1NJWkUgPSAyOworCisgICAgICAgIC8vIFZlcnRleCBzdHJ1Y3R1cmU6CisgICAgICAgIC8vIGZsb2F0IHgsIHksIHo7CisgICAgICAgIC8vIGZsb2F0IHUsIHY7CisgICAgICAgIC8vIGZsb2F0IHdlaWdodDAsIHdlaWdodDE7CisgICAgICAgIC8vIGJ5dGUgcGFsZXR0ZTAsIHBhbGV0dGUxLCBwYWQwLCBwYWQxOworCisgICAgICAgIGZpbmFsIHN0YXRpYyBpbnQgVkVSVEVYX1NJWkUgPSA4ICogRkxPQVRfU0laRTsKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBWRVJURVhfVEVYVFVSRV9CVUZGRVJfSU5ERVhfT0ZGU0VUID0gMzsKKyAgICAgICAgZmluYWwgc3RhdGljIGludCBWRVJURVhfV0VJR0hUX0JVRkZFUl9JTkRFWF9PRkZTRVQgPSA1OworICAgICAgICBmaW5hbCBzdGF0aWMgaW50IFZFUlRFWF9QQUxFVFRFX0lOREVYX09GRlNFVCA9IDcgKiBGTE9BVF9TSVpFOworCisgICAgICAgIHByaXZhdGUgaW50IG1WZXJ0ZXhCdWZmZXJPYmplY3RJZDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUVsZW1lbnRCdWZmZXJPYmplY3RJZDsKKworICAgICAgICAvLyBUaGVzZSBidWZmZXJzIGFyZSB1c2VkIHRvIGhvbGQgdGhlIHZlcnRleCBhbmQgaW5kZXggZGF0YSB3aGlsZQorICAgICAgICAvLyBjb25zdHJ1Y3RpbmcgdGhlIGdyaWQuIE9uY2UgY3JlYXRlQnVmZmVyT2JqZWN0cygpIGlzIGNhbGxlZAorICAgICAgICAvLyB0aGUgYnVmZmVycyBhcmUgbnVsbGVkIG91dCB0byBzYXZlIG1lbW9yeS4KKworICAgICAgICBwcml2YXRlIEJ5dGVCdWZmZXIgbVZlcnRleEJ5dGVCdWZmZXI7CisgICAgICAgIHByaXZhdGUgRmxvYXRCdWZmZXIgbVZlcnRleEJ1ZmZlcjsKKyAgICAgICAgcHJpdmF0ZSBDaGFyQnVmZmVyIG1JbmRleEJ1ZmZlcjsKKworICAgICAgICBwcml2YXRlIGludCBtVzsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUg7CisgICAgICAgIHByaXZhdGUgaW50IG1JbmRleENvdW50OworCisgICAgICAgIHB1YmxpYyBHcmlkKGludCB3LCBpbnQgaCkgeworICAgICAgICAgICAgaWYgKHcgPCAwIHx8IHcgPj0gNjU1MzYpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ3Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaCA8IDAgfHwgaCA+PSA2NTUzNikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3ICogaCA+PSA2NTUzNikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIncgKiBoID49IDY1NTM2Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1XID0gdzsKKyAgICAgICAgICAgIG1IID0gaDsKKyAgICAgICAgICAgIGludCBzaXplID0gdyAqIGg7CisKKyAgICAgICAgICAgIG1WZXJ0ZXhCeXRlQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChWRVJURVhfU0laRSAqIHNpemUpCisgICAgICAgICAgICAgICAgLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBtVmVydGV4Qnl0ZUJ1ZmZlci5hc0Zsb2F0QnVmZmVyKCk7CisKKyAgICAgICAgICAgIGludCBxdWFkVyA9IG1XIC0gMTsKKyAgICAgICAgICAgIGludCBxdWFkSCA9IG1IIC0gMTsKKyAgICAgICAgICAgIGludCBxdWFkQ291bnQgPSBxdWFkVyAqIHF1YWRIOworICAgICAgICAgICAgaW50IGluZGV4Q291bnQgPSBxdWFkQ291bnQgKiA2OworICAgICAgICAgICAgbUluZGV4Q291bnQgPSBpbmRleENvdW50OworICAgICAgICAgICAgbUluZGV4QnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChDSEFSX1NJWkUgKiBpbmRleENvdW50KQorICAgICAgICAgICAgICAgIC5vcmRlcihCeXRlT3JkZXIubmF0aXZlT3JkZXIoKSkuYXNDaGFyQnVmZmVyKCk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJbml0aWFsaXplIHRyaWFuZ2xlIGxpc3QgbWVzaC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiAgICAgWzBdLS0tLS1bICAxXSAuLi4KKyAgICAgICAgICAgICAqICAgICAgfCAgICAvICAgfAorICAgICAgICAgICAgICogICAgICB8ICAgLyAgICB8CisgICAgICAgICAgICAgKiAgICAgIHwgIC8gICAgIHwKKyAgICAgICAgICAgICAqICAgICBbd10tLS0tLVt3KzFdIC4uLgorICAgICAgICAgICAgICogICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHF1YWRIOyB5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBxdWFkVzsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGEgPSAoY2hhcikgKHkgKiBtVyArIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBiID0gKGNoYXIpICh5ICogbVcgKyB4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGMgPSAoY2hhcikgKCh5ICsgMSkgKiBtVyArIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkID0gKGNoYXIpICgoeSArIDEpICogbVcgKyB4ICsgMSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbmRleEJ1ZmZlci5wdXQoaSsrLCBiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgbUluZGV4QnVmZmVyLnB1dChpKyssIGQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXQoaW50IGksIGludCBqLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAorICAgICAgICAgICAgICAgIGZsb2F0IHUsIGZsb2F0IHYsCisgICAgICAgICAgICAgICAgZmxvYXQgdzAsIGZsb2F0IHcxLAorICAgICAgICAgICAgICAgIGludCBwMCwgaW50IHAxKSB7CisgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBtVykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IG1IKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodzAgKyB3MSAhPSAxLjBmKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiV2VpZ2h0cyBtdXN0IGFkZCB1cCB0byAxLjBmIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBpbmRleCA9IG1XICogaiArIGk7CisKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucG9zaXRpb24oaW5kZXggKiBWRVJURVhfU0laRSAvIEZMT0FUX1NJWkUpOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wdXQoeCk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh5KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHopOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci5wdXQodSk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyLnB1dCh2KTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHcwKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCdWZmZXIucHV0KHcxKTsKKworICAgICAgICAgICAgbVZlcnRleEJ5dGVCdWZmZXIucG9zaXRpb24oaW5kZXggKiBWRVJURVhfU0laRSArIFZFUlRFWF9QQUxFVFRFX0lOREVYX09GRlNFVCk7CisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlci5wdXQoKGJ5dGUpIHAwKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhCeXRlQnVmZmVyLnB1dCgoYnl0ZSkgcDEpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgY3JlYXRlQnVmZmVyT2JqZWN0cyhHTCBnbCkgeworICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSB0aGUgdmVydGV4IGFuZCBlbGVtZW50IGJ1ZmZlciBJRHMKKyAgICAgICAgICAgIGludFtdIHZib0lkcyA9IG5ldyBpbnRbMl07CisgICAgICAgICAgICBHTDExIGdsMTEgPSAoR0wxMSkgZ2w7CisgICAgICAgICAgICBnbDExLmdsR2VuQnVmZmVycygyLCB2Ym9JZHMsIDApOworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlck9iamVjdElkID0gdmJvSWRzWzBdOworICAgICAgICAgICAgbUVsZW1lbnRCdWZmZXJPYmplY3RJZCA9IHZib0lkc1sxXTsKKworICAgICAgICAgICAgLy8gVXBsb2FkIHRoZSB2ZXJ0ZXggZGF0YQorICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9BUlJBWV9CVUZGRVIsIG1WZXJ0ZXhCdWZmZXJPYmplY3RJZCk7CisgICAgICAgICAgICBtVmVydGV4Qnl0ZUJ1ZmZlci5wb3NpdGlvbigwKTsKKyAgICAgICAgICAgIGdsMTEuZ2xCdWZmZXJEYXRhKEdMMTEuR0xfQVJSQVlfQlVGRkVSLCBtVmVydGV4Qnl0ZUJ1ZmZlci5jYXBhY2l0eSgpLCBtVmVydGV4Qnl0ZUJ1ZmZlciwgR0wxMS5HTF9TVEFUSUNfRFJBVyk7CisKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1FbGVtZW50QnVmZmVyT2JqZWN0SWQpOworICAgICAgICAgICAgbUluZGV4QnVmZmVyLnBvc2l0aW9uKDApOworICAgICAgICAgICAgZ2wxMS5nbEJ1ZmZlckRhdGEoR0wxMS5HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbUluZGV4QnVmZmVyLmNhcGFjaXR5KCkgKiBDSEFSX1NJWkUsIG1JbmRleEJ1ZmZlciwgR0wxMS5HTF9TVEFUSUNfRFJBVyk7CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGluLW1lbW9yeSBkYXRhIGFueSBtb3JlCisgICAgICAgICAgICBtVmVydGV4QnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1WZXJ0ZXhCeXRlQnVmZmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KEdMMTAgZ2wpIHsKKyAgICAgICAgICAgIEdMMTEgZ2wxMSA9IChHTDExKSBnbDsKKyAgICAgICAgICAgIEdMMTFFeHQgZ2wxMUV4dCA9IChHTDExRXh0KSBnbDsKKworICAgICAgICAgICAgZ2wuZ2xFbmFibGVDbGllbnRTdGF0ZShHTDEwLkdMX1ZFUlRFWF9BUlJBWSk7CisKKyAgICAgICAgICAgIGdsMTEuZ2xCaW5kQnVmZmVyKEdMMTEuR0xfQVJSQVlfQlVGRkVSLCBtVmVydGV4QnVmZmVyT2JqZWN0SWQpOworICAgICAgICAgICAgZ2wxMS5nbFZlcnRleFBvaW50ZXIoMywgR0wxMC5HTF9GTE9BVCwgVkVSVEVYX1NJWkUsIDApOworICAgICAgICAgICAgZ2wxMS5nbFRleENvb3JkUG9pbnRlcigyLCBHTDEwLkdMX0ZMT0FULCBWRVJURVhfU0laRSwgVkVSVEVYX1RFWFRVUkVfQlVGRkVSX0lOREVYX09GRlNFVCAqIEZMT0FUX1NJWkUpOworCisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTFFeHQuR0xfTUFUUklYX0lOREVYX0FSUkFZX09FUyk7CisgICAgICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTFFeHQuR0xfV0VJR0hUX0FSUkFZX09FUyk7CisKKyAgICAgICAgICAgIGdsMTFFeHQuZ2xXZWlnaHRQb2ludGVyT0VTKDIsIEdMMTAuR0xfRkxPQVQsIFZFUlRFWF9TSVpFLCBWRVJURVhfV0VJR0hUX0JVRkZFUl9JTkRFWF9PRkZTRVQgICogRkxPQVRfU0laRSk7CisgICAgICAgICAgICBnbDExRXh0LmdsTWF0cml4SW5kZXhQb2ludGVyT0VTKDIsIEdMMTAuR0xfVU5TSUdORURfQllURSwgVkVSVEVYX1NJWkUsIFZFUlRFWF9QQUxFVFRFX0lOREVYX09GRlNFVCApOworCisgICAgICAgICAgICBnbDExLmdsQmluZEJ1ZmZlcihHTDExLkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtRWxlbWVudEJ1ZmZlck9iamVjdElkKTsKKyAgICAgICAgICAgIGdsMTEuZ2xEcmF3RWxlbWVudHMoR0wxMC5HTF9UUklBTkdMRVMsIG1JbmRleENvdW50LCBHTDEwLkdMX1VOU0lHTkVEX1NIT1JULCAwKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgICAgIGdsLmdsRGlzYWJsZUNsaWVudFN0YXRlKEdMMTFFeHQuR0xfTUFUUklYX0lOREVYX0FSUkFZX09FUyk7CisgICAgICAgICAgICBnbC5nbERpc2FibGVDbGllbnRTdGF0ZShHTDExRXh0LkdMX1dFSUdIVF9BUlJBWV9PRVMpOworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9BUlJBWV9CVUZGRVIsIDApOworICAgICAgICAgICAgZ2wxMS5nbEJpbmRCdWZmZXIoR0wxMS5HTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTWF0cml4UGFsZXR0ZVJlbmRlcmVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRlZChHTDEwIGdsLCBFR0xDb25maWcgY29uZmlnKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJ5IGRlZmF1bHQsIE9wZW5HTCBlbmFibGVzIGZlYXR1cmVzIHRoYXQgaW1wcm92ZSBxdWFsaXR5CisgICAgICAgICAqIGJ1dCByZWR1Y2UgcGVyZm9ybWFuY2UuIE9uZSBtaWdodCB3YW50IHRvIHR3ZWFrIHRoYXQKKyAgICAgICAgICogZXNwZWNpYWxseSBvbiBzb2Z0d2FyZSByZW5kZXJlci4KKyAgICAgICAgICovCisgICAgICAgIGdsLmdsRGlzYWJsZShHTDEwLkdMX0RJVEhFUik7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU29tZSBvbmUtdGltZSBPcGVuR0wgaW5pdGlhbGl6YXRpb24gY2FuIGJlIG1hZGUgaGVyZQorICAgICAgICAgKiBwcm9iYWJseSBiYXNlZCBvbiBmZWF0dXJlcyBvZiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dAorICAgICAgICAgKi8KKyAgICAgICAgZ2wuZ2xIaW50KEdMMTAuR0xfUEVSU1BFQ1RJVkVfQ09SUkVDVElPTl9ISU5ULAorICAgICAgICAgICAgICAgIEdMMTAuR0xfRkFTVEVTVCk7CisKKyAgICAgICAgZ2wuZ2xDbGVhckNvbG9yKC41ZiwgLjVmLCAuNWYsIDEpOworICAgICAgICBnbC5nbFNoYWRlTW9kZWwoR0wxMC5HTF9TTU9PVEgpOworICAgICAgICBnbC5nbEVuYWJsZShHTDEwLkdMX0RFUFRIX1RFU1QpOworICAgICAgICBnbC5nbEVuYWJsZShHTDEwLkdMX1RFWFRVUkVfMkQpOworCisgICAgICAgIC8qCisgICAgICAgICAqIENyZWF0ZSBvdXIgdGV4dHVyZS4gVGhpcyBoYXMgdG8gYmUgZG9uZSBlYWNoIHRpbWUgdGhlCisgICAgICAgICAqIHN1cmZhY2UgaXMgY3JlYXRlZC4KKyAgICAgICAgICovCisKKyAgICAgICAgaW50W10gdGV4dHVyZXMgPSBuZXcgaW50WzFdOworICAgICAgICBnbC5nbEdlblRleHR1cmVzKDEsIHRleHR1cmVzLCAwKTsKKworICAgICAgICBtVGV4dHVyZUlEID0gdGV4dHVyZXNbMF07CisgICAgICAgIGdsLmdsQmluZFRleHR1cmUoR0wxMC5HTF9URVhUVVJFXzJELCBtVGV4dHVyZUlEKTsKKworICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX05FQVJFU1QpOworICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMC5HTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgIEdMMTAuR0xfVEVYVFVSRV9NQUdfRklMVEVSLAorICAgICAgICAgICAgICAgIEdMMTAuR0xfTElORUFSKTsKKworICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmYoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9TLAorICAgICAgICAgICAgICAgIEdMMTAuR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyZihHTDEwLkdMX1RFWFRVUkVfMkQsIEdMMTAuR0xfVEVYVFVSRV9XUkFQX1QsCisgICAgICAgICAgICAgICAgR0wxMC5HTF9DTEFNUF9UT19FREdFKTsKKworICAgICAgICBnbC5nbFRleEVudmYoR0wxMC5HTF9URVhUVVJFX0VOViwgR0wxMC5HTF9URVhUVVJFX0VOVl9NT0RFLAorICAgICAgICAgICAgICAgIEdMMTAuR0xfUkVQTEFDRSk7CisKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKQorICAgICAgICAgICAgICAgIC5vcGVuUmF3UmVzb3VyY2UoUi5yYXcucm9ib3QpOworICAgICAgICBCaXRtYXAgYml0bWFwOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYml0bWFwID0gQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oaXMpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlLgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgR0xVdGlscy50ZXhJbWFnZTJEKEdMMTAuR0xfVEVYVFVSRV8yRCwgMCwgYml0bWFwLCAwKTsKKyAgICAgICAgYml0bWFwLnJlY3ljbGUoKTsKKworICAgICAgICBtR3JpZCA9IGdlbmVyYXRlV2VpZ2h0ZWRHcmlkKGdsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvbkRyYXdGcmFtZShHTDEwIGdsKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJ5IGRlZmF1bHQsIE9wZW5HTCBlbmFibGVzIGZlYXR1cmVzIHRoYXQgaW1wcm92ZSBxdWFsaXR5CisgICAgICAgICAqIGJ1dCByZWR1Y2UgcGVyZm9ybWFuY2UuIE9uZSBtaWdodCB3YW50IHRvIHR3ZWFrIHRoYXQKKyAgICAgICAgICogZXNwZWNpYWxseSBvbiBzb2Z0d2FyZSByZW5kZXJlci4KKyAgICAgICAgICovCisgICAgICAgIGdsLmdsRGlzYWJsZShHTDEwLkdMX0RJVEhFUik7CisKKyAgICAgICAgZ2wuZ2xUZXhFbnZ4KEdMMTAuR0xfVEVYVFVSRV9FTlYsIEdMMTAuR0xfVEVYVFVSRV9FTlZfTU9ERSwKKyAgICAgICAgICAgICAgICBHTDEwLkdMX01PRFVMQVRFKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBVc3VhbGx5LCB0aGUgZmlyc3QgdGhpbmcgb25lIG1pZ2h0IHdhbnQgdG8gZG8gaXMgdG8gY2xlYXIKKyAgICAgICAgICogdGhlIHNjcmVlbi4gVGhlIG1vc3QgZWZmaWNpZW50IHdheSBvZiBkb2luZyB0aGlzIGlzIHRvIHVzZQorICAgICAgICAgKiBnbENsZWFyKCkuCisgICAgICAgICAqLworCisgICAgICAgIGdsLmdsQ2xlYXIoR0wxMC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wxMC5HTF9ERVBUSF9CVUZGRVJfQklUKTsKKworICAgICAgICBnbC5nbEVuYWJsZShHTDEwLkdMX0RFUFRIX1RFU1QpOworCisgICAgICAgIGdsLmdsRW5hYmxlKEdMMTAuR0xfQ1VMTF9GQUNFKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBOb3cgd2UncmUgcmVhZHkgdG8gZHJhdyBzb21lIDNEIG9iamVjdHMKKyAgICAgICAgICovCisKKyAgICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMMTAuR0xfTU9ERUxWSUVXKTsKKyAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsKKworICAgICAgICBHTFUuZ2x1TG9va0F0KGdsLCAwLCAwLCAtNSwgMGYsIDBmLCAwZiwgMGYsIDEuMGYsIDAuMGYpOworCisgICAgICAgIGdsLmdsRW5hYmxlQ2xpZW50U3RhdGUoR0wxMC5HTF9WRVJURVhfQVJSQVkpOworICAgICAgICBnbC5nbEVuYWJsZUNsaWVudFN0YXRlKEdMMTAuR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CisKKyAgICAgICAgZ2wuZ2xBY3RpdmVUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRTApOworICAgICAgICBnbC5nbEJpbmRUZXh0dXJlKEdMMTAuR0xfVEVYVFVSRV8yRCwgbVRleHR1cmVJRCk7CisgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyeChHTDEwLkdMX1RFWFRVUkVfMkQsIEdMMTAuR0xfVEVYVFVSRV9XUkFQX1MsCisgICAgICAgICAgICAgICAgR0wxMC5HTF9SRVBFQVQpOworICAgICAgICBnbC5nbFRleFBhcmFtZXRlcngoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9ULAorICAgICAgICAgICAgICAgIEdMMTAuR0xfUkVQRUFUKTsKKworICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAlIDQwMDBMOworCisgICAgICAgIC8vIFJvY2sgYmFjayBhbmQgZm9ydGgKKyAgICAgICAgZG91YmxlIGFuaW1hdGlvblVuaXQgPSAoKGRvdWJsZSkgdGltZSkgLyA0MDAwOworICAgICAgICBmbG9hdCB1bml0QW5nbGUgPSAoZmxvYXQpIE1hdGguY29zKGFuaW1hdGlvblVuaXQgKiAyICogTWF0aC5QSSk7CisgICAgICAgIGZsb2F0IGFuZ2xlID0gdW5pdEFuZ2xlICogMTM1ZjsKKworICAgICAgICBnbC5nbEVuYWJsZShHTDExRXh0LkdMX01BVFJJWF9QQUxFVFRFX09FUyk7CisgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTDExRXh0LkdMX01BVFJJWF9QQUxFVFRFX09FUyk7CisKKyAgICAgICAgR0wxMUV4dCBnbDExRXh0ID0gKEdMMTFFeHQpIGdsOworCisgICAgICAgIC8vIG1hdHJpeCAwOiBubyB0cmFuc2Zvcm1hdGlvbgorICAgICAgICBnbDExRXh0LmdsQ3VycmVudFBhbGV0dGVNYXRyaXhPRVMoMCk7CisgICAgICAgIGdsMTFFeHQuZ2xMb2FkUGFsZXR0ZUZyb21Nb2RlbFZpZXdNYXRyaXhPRVMoKTsKKworCisgICAgICAgIC8vIG1hdHJpeCAxOiByb3RhdGUgYnkgImFuZ2xlIgorICAgICAgICBnbC5nbFJvdGF0ZWYoYW5nbGUsIDAsIDAsIDEuMGYpOworCisgICAgICAgIGdsMTFFeHQuZ2xDdXJyZW50UGFsZXR0ZU1hdHJpeE9FUygxKTsKKyAgICAgICAgZ2wxMUV4dC5nbExvYWRQYWxldHRlRnJvbU1vZGVsVmlld01hdHJpeE9FUygpOworCisgICAgICAgIG1HcmlkLmRyYXcoZ2wpOworCisgICAgICAgIGdsLmdsRGlzYWJsZShHTDExRXh0LkdMX01BVFJJWF9QQUxFVFRFX09FUyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgb25TdXJmYWNlQ2hhbmdlZChHTDEwIGdsLCBpbnQgdywgaW50IGgpIHsKKyAgICAgICAgZ2wuZ2xWaWV3cG9ydCgwLCAwLCB3LCBoKTsKKworICAgICAgICAvKgorICAgICAgICAqIFNldCBvdXIgcHJvamVjdGlvbiBtYXRyaXguIFRoaXMgZG9lc24ndCBoYXZlIHRvIGJlIGRvbmUKKyAgICAgICAgKiBlYWNoIHRpbWUgd2UgZHJhdywgYnV0IHVzdWFsbHkgYSBuZXcgcHJvamVjdGlvbiBuZWVkcyB0bworICAgICAgICAqIGJlIHNldCB3aGVuIHRoZSB2aWV3cG9ydCBpcyByZXNpemVkLgorICAgICAgICAqLworCisgICAgICAgIGZsb2F0IHJhdGlvID0gKGZsb2F0KSB3IC8gaDsKKyAgICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMMTAuR0xfUFJPSkVDVElPTik7CisgICAgICAgIGdsLmdsTG9hZElkZW50aXR5KCk7CisgICAgICAgIGdsLmdsRnJ1c3R1bWYoLXJhdGlvLCByYXRpbywgLTEsIDEsIDMsIDcpOworICAgIH0KKworICAgIHByaXZhdGUgR3JpZCBnZW5lcmF0ZVdlaWdodGVkR3JpZChHTCBnbCkgeworICAgICAgICBmaW5hbCBpbnQgdVN0ZXBzID0gMjA7CisgICAgICAgIGZpbmFsIGludCB2U3RlcHMgPSAyMDsKKworICAgICAgICBmbG9hdCByYWRpdXMgPSAwLjI1ZjsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gMi4wZjsKKyAgICAgICAgR3JpZCBncmlkID0gbmV3IEdyaWQodVN0ZXBzICsgMSwgdlN0ZXBzICsgMSk7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gdlN0ZXBzOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHVTdGVwczsgaSsrKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gTWF0aC5QSSAqIDIgKiBpIC8gdVN0ZXBzOworICAgICAgICAgICAgICAgIGZsb2F0IHggPSByYWRpdXMgKiAoZmxvYXQpIE1hdGguY29zKGFuZ2xlKTsKKyAgICAgICAgICAgICAgICBmbG9hdCB5ID0gaGVpZ2h0ICogKChmbG9hdCkgaiAvIHZTdGVwcyAtIDAuNWYpOworICAgICAgICAgICAgICAgIGZsb2F0IHogPSByYWRpdXMgKiAoZmxvYXQpIE1hdGguc2luKGFuZ2xlKTsKKyAgICAgICAgICAgICAgICBmbG9hdCB1ID0gLTQuMGYgKiAoZmxvYXQpIGkgLyB1U3RlcHM7CisgICAgICAgICAgICAgICAgZmxvYXQgdiA9IC00LjBmICogKGZsb2F0KSBqIC8gdlN0ZXBzOworICAgICAgICAgICAgICAgIGZsb2F0IHcwID0gKGZsb2F0KSBqIC8gdlN0ZXBzOworICAgICAgICAgICAgICAgIGZsb2F0IHcxID0gMS4wZiAtIHcwOworICAgICAgICAgICAgICAgIGdyaWQuc2V0KGksIGosIHgsIHksIHosIHUsIHYsIHcwLCB3MSwgMCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBncmlkLmNyZWF0ZUJ1ZmZlck9iamVjdHMoZ2wpOworICAgICAgICByZXR1cm4gZ3JpZDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvUGljdHVyZUxheW91dC5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1BpY3R1cmVMYXlvdXQuamF2YQppbmRleCA5YmRiNDlhLi5jZmEzYzI5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvUGljdHVyZUxheW91dC5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9QaWN0dXJlTGF5b3V0LmphdmEKQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBMYXlvdXRQYXJhbXMgZ2VuZXJhdGVEZWZhdWx0TGF5b3V0UGFyYW1zKCkgewotICAgICAgICByZXR1cm4gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCk7CisgICAgICAgIHJldHVybiBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1N0YXRpY1RyaWFuZ2xlUmVuZGVyZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9TdGF0aWNUcmlhbmdsZVJlbmRlcmVyLmphdmEKaW5kZXggYzQ5MmUzZi4uN2VmMDg0MSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1N0YXRpY1RyaWFuZ2xlUmVuZGVyZXIuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvU3RhdGljVHJpYW5nbGVSZW5kZXJlci5qYXZhCkBAIC01MCw5ICs1MCwyNSBAQAogICovCiBwdWJsaWMgY2xhc3MgU3RhdGljVHJpYW5nbGVSZW5kZXJlciBpbXBsZW1lbnRzIEdMU3VyZmFjZVZpZXcuUmVuZGVyZXJ7CiAKKyAgICBwdWJsaWMgaW50ZXJmYWNlIFRleHR1cmVMb2FkZXIgeworICAgICAgICAvKioKKyAgICAgICAgICogTG9hZCBhIHRleHR1cmUgaW50byB0aGUgY3VycmVudGx5IGJvdW5kIE9wZW5HTCB0ZXh0dXJlLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBsb2FkKEdMMTAgZ2wpOworICAgIH0KKwogICAgIHB1YmxpYyBTdGF0aWNUcmlhbmdsZVJlbmRlcmVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBpbml0KGNvbnRleHQsIG5ldyBSb2JvdFRleHR1cmVMb2FkZXIoKSk7CisgICAgfQorCisgICAgcHVibGljIFN0YXRpY1RyaWFuZ2xlUmVuZGVyZXIoQ29udGV4dCBjb250ZXh0LCBUZXh0dXJlTG9hZGVyIGxvYWRlcikgeworICAgICAgICBpbml0KGNvbnRleHQsIGxvYWRlcik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXQoQ29udGV4dCBjb250ZXh0LCBUZXh0dXJlTG9hZGVyIGxvYWRlcikgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1UcmlhbmdsZSA9IG5ldyBUcmlhbmdsZSgpOworICAgICAgICBtVGV4dHVyZUxvYWRlciA9IGxvYWRlcjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDcmVhdGVkKEdMMTAgZ2wsIEVHTENvbmZpZyBjb25maWcpIHsKQEAgLTk5LDIyICsxMTUsNyBAQAogCiAgICAgICAgIGdsVGV4RW52ZihHTF9URVhUVVJFX0VOViwgR0xfVEVYVFVSRV9FTlZfTU9ERSwKICAgICAgICAgICAgICAgICBHTF9SRVBMQUNFKTsKLQotICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpCi0gICAgICAgICAgICAgICAgLm9wZW5SYXdSZXNvdXJjZShSLmRyYXdhYmxlLnJvYm90KTsKLSAgICAgICAgQml0bWFwIGJpdG1hcDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKLSAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIElnbm9yZS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEdMVXRpbHMudGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBiaXRtYXAsIDApOwotICAgICAgICBiaXRtYXAucmVjeWNsZSgpOworICAgICAgICBtVGV4dHVyZUxvYWRlci5sb2FkKGdsKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbkRyYXdGcmFtZShHTDEwIGdsKSB7CkBAIC0xODEsNiArMTgyLDI3IEBACiAgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwogICAgIHByaXZhdGUgVHJpYW5nbGUgbVRyaWFuZ2xlOwogICAgIHByaXZhdGUgaW50IG1UZXh0dXJlSUQ7CisgICAgcHJpdmF0ZSBUZXh0dXJlTG9hZGVyIG1UZXh0dXJlTG9hZGVyOworCisgICAgcHJpdmF0ZSBjbGFzcyBSb2JvdFRleHR1cmVMb2FkZXIgaW1wbGVtZW50cyBUZXh0dXJlTG9hZGVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgbG9hZChHTDEwIGdsKSB7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLm9wZW5SYXdSZXNvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgUi5yYXcucm9ib3QpOworICAgICAgICAgICAgQml0bWFwIGJpdG1hcDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYml0bWFwID0gQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oaXMpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xVdGlscy50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGJpdG1hcCwgMCk7CisgICAgICAgICAgICBiaXRtYXAucmVjeWNsZSgpOworICAgICAgICB9CisgICAgfQogCiAgICAgc3RhdGljIGNsYXNzIFRyaWFuZ2xlIHsKICAgICAgICAgcHVibGljIFRyaWFuZ2xlKCkgewpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1RyaWFuZ2xlUmVuZGVyZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9UcmlhbmdsZVJlbmRlcmVyLmphdmEKaW5kZXggZTUyOTliMy4uZWRlNmVmNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL1RyaWFuZ2xlUmVuZGVyZXIuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3MvVHJpYW5nbGVSZW5kZXJlci5qYXZhCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgR0wxMC5HTF9SRVBMQUNFKTsKIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpCi0gICAgICAgICAgICAgICAgLm9wZW5SYXdSZXNvdXJjZShSLmRyYXdhYmxlLnJvYm90KTsKKyAgICAgICAgICAgICAgICAub3BlblJhd1Jlc291cmNlKFIucmF3LnJvYm90KTsKICAgICAgICAgQml0bWFwIGJpdG1hcDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9zcHJpdGV0ZXh0L0xhYmVsTWFrZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9zcHJpdGV0ZXh0L0xhYmVsTWFrZXIuamF2YQppbmRleCA0YmY4N2Y3Li42NDgxMzk3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9MYWJlbE1ha2VyLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL2dyYXBoaWNzL3Nwcml0ZXRleHQvTGFiZWxNYWtlci5qYXZhCkBAIC0zNTEsMTcgKzM1MSwxMiBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRyYXcoR0wxMCBnbCwgZmxvYXQgeCwgZmxvYXQgeSwgaW50IGxhYmVsSUQpIHsKICAgICAgICAgY2hlY2tTdGF0ZShTVEFURV9EUkFXSU5HLCBTVEFURV9EUkFXSU5HKTsKLSAgICAgICAgZ2wuZ2xQdXNoTWF0cml4KCk7Ci0gICAgICAgIGZsb2F0IHNuYXBwZWRYID0gKGZsb2F0KSBNYXRoLmZsb29yKHgpOwotICAgICAgICBmbG9hdCBzbmFwcGVkWSA9IChmbG9hdCkgTWF0aC5mbG9vcih5KTsKLSAgICAgICAgZ2wuZ2xUcmFuc2xhdGVmKHNuYXBwZWRYLCBzbmFwcGVkWSwgMC4wZik7CiAgICAgICAgIExhYmVsIGxhYmVsID0gbUxhYmVscy5nZXQobGFiZWxJRCk7CiAgICAgICAgIGdsLmdsRW5hYmxlKEdMMTAuR0xfVEVYVFVSRV8yRCk7CiAgICAgICAgICgoR0wxMSlnbCkuZ2xUZXhQYXJhbWV0ZXJpdihHTDEwLkdMX1RFWFRVUkVfMkQsCiAgICAgICAgICAgICAgICAgR0wxMUV4dC5HTF9URVhUVVJFX0NST1BfUkVDVF9PRVMsIGxhYmVsLm1Dcm9wLCAwKTsKLSAgICAgICAgKChHTDExRXh0KWdsKS5nbERyYXdUZXhpT0VTKChpbnQpIHNuYXBwZWRYLCAoaW50KSBzbmFwcGVkWSwgMCwKKyAgICAgICAgKChHTDExRXh0KWdsKS5nbERyYXdUZXhpT0VTKChpbnQpIHgsIChpbnQpIHksIDAsCiAgICAgICAgICAgICAgICAgKGludCkgbGFiZWwud2lkdGgsIChpbnQpIGxhYmVsLmhlaWdodCk7Ci0gICAgICAgIGdsLmdsUG9wTWF0cml4KCk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvZ3JhcGhpY3Mvc3ByaXRldGV4dC9TcHJpdGVUZXh0UmVuZGVyZXIuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9zcHJpdGV0ZXh0L1Nwcml0ZVRleHRSZW5kZXJlci5qYXZhCmluZGV4IDIyMzMwMGEuLmUwMWQ2ZWYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9zcHJpdGV0ZXh0L1Nwcml0ZVRleHRSZW5kZXJlci5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy9ncmFwaGljcy9zcHJpdGV0ZXh0L1Nwcml0ZVRleHRSZW5kZXJlci5qYXZhCkBAIC0zNSw2ICszNSw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xVOwogaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLlI7CiAKQEAgLTk2LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICBHTDEwLkdMX1JFUExBQ0UpOwogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKLSAgICAgICAgICAgICAgICAub3BlblJhd1Jlc291cmNlKFIuZHJhd2FibGUucm9ib3QpOworICAgICAgICAgICAgICAgIC5vcGVuUmF3UmVzb3VyY2UoUi5yYXcucm9ib3QpOwogICAgICAgICBCaXRtYXAgYml0bWFwOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYml0bWFwID0gQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oaXMpOwpAQCAtMTcyLDYgKzE3MywxNSBAQAogICAgICAgICBnbC5nbFRleFBhcmFtZXRlcngoR0wxMC5HTF9URVhUVVJFXzJELCBHTDEwLkdMX1RFWFRVUkVfV1JBUF9ULAogICAgICAgICAgICAgICAgIEdMMTAuR0xfUkVQRUFUKTsKIAorICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGxvbmcgdGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworICAgICAgICAgICAgaWYgKG1MYXN0VGltZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbG9uZyBkZWx0YSA9IHRpbWUgLSBtTGFzdFRpbWU7CisgICAgICAgICAgICAgICAgTG9nLncoInRpbWUiLCBMb25nLnRvU3RyaW5nKGRlbHRhKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtTGFzdFRpbWUgPSB0aW1lOworICAgICAgICB9CisKICAgICAgICAgbG9uZyB0aW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkgJSA0MDAwTDsKICAgICAgICAgZmxvYXQgYW5nbGUgPSAwLjA5MGYgKiAoKGludCkgdGltZSk7CiAKQEAgLTI2Niw2ICsyNzYsNyBAQAogICAgIHByaXZhdGUgUHJvamVjdG9yIG1Qcm9qZWN0b3I7CiAgICAgcHJpdmF0ZSBOdW1lcmljU3ByaXRlIG1OdW1lcmljU3ByaXRlOwogICAgIHByaXZhdGUgZmxvYXRbXSBtU2NyYXRjaCA9IG5ldyBmbG9hdFs4XTsKKyAgICBwcml2YXRlIGxvbmcgbUxhc3RUaW1lOwogfQogCiBjbGFzcyBUcmlhbmdsZSB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9FeHBhbmRhYmxlTGlzdDEuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0V4cGFuZGFibGVMaXN0MS5qYXZhCmluZGV4IDk0NGRiNjQuLmJkYTM2NmIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0V4cGFuZGFibGVMaXN0MS5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0V4cGFuZGFibGVMaXN0MS5qYXZhCkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnUuQ29udGV4dE1lbnVJbmZvOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTWFyZ2luTGF5b3V0UGFyYW1zOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFic0xpc3RWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJhc2VFeHBhbmRhYmxlTGlzdEFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuRXhwYW5kYWJsZUxpc3RBZGFwdGVyOwpAQCAtMTEyLDcgKzExMSw3IEBACiAgICAgICAgIHB1YmxpYyBUZXh0VmlldyBnZXRHZW5lcmljVmlldygpIHsKICAgICAgICAgICAgIC8vIExheW91dCBwYXJhbWV0ZXJzIGZvciB0aGUgRXhwYW5kYWJsZUxpc3RWaWV3CiAgICAgICAgICAgICBBYnNMaXN0Vmlldy5MYXlvdXRQYXJhbXMgbHAgPSBuZXcgQWJzTGlzdFZpZXcuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULCA2NCk7CisgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCA2NCk7CiAKICAgICAgICAgICAgIFRleHRWaWV3IHRleHRWaWV3ID0gbmV3IFRleHRWaWV3KEV4cGFuZGFibGVMaXN0MS50aGlzKTsKICAgICAgICAgICAgIHRleHRWaWV3LnNldExheW91dFBhcmFtcyhscCk7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbWFnZVN3aXRjaGVyMS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW1hZ2VTd2l0Y2hlcjEuamF2YQppbmRleCBmNzJiNjIzLi42NmVmMjgyIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbWFnZVN3aXRjaGVyMS5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ltYWdlU3dpdGNoZXIxLmphdmEKQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgSW1hZ2VWaWV3IGkgPSBuZXcgSW1hZ2VWaWV3KHRoaXMpOwogICAgICAgICBpLnNldEJhY2tncm91bmRDb2xvcigweEZGMDAwMDAwKTsKICAgICAgICAgaS5zZXRTY2FsZVR5cGUoSW1hZ2VWaWV3LlNjYWxlVHlwZS5GSVRfQ0VOVEVSKTsKLSAgICAgICAgaS5zZXRMYXlvdXRQYXJhbXMobmV3IEltYWdlU3dpdGNoZXIuTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKLSAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpKTsKKyAgICAgICAgaS5zZXRMYXlvdXRQYXJhbXMobmV3IEltYWdlU3dpdGNoZXIuTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkpOwogICAgICAgICByZXR1cm4gaTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ludGVybmFsU2VsZWN0aW9uRm9jdXMuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ludGVybmFsU2VsZWN0aW9uRm9jdXMuamF2YQppbmRleCBhNjY0YWI5Li44NzZhZjhkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbnRlcm5hbFNlbGVjdGlvbkZvY3VzLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW50ZXJuYWxTZWxlY3Rpb25Gb2N1cy5qYXZhCkBAIC00NiwxMSArNDYsMTEgQEAKICAgICAgICAgZmluYWwgTGluZWFyTGF5b3V0IGxheW91dCA9IG5ldyBMaW5lYXJMYXlvdXQodGhpcyk7CiAgICAgICAgIGxheW91dC5zZXRPcmllbnRhdGlvbihMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCk7CiAgICAgICAgIGxheW91dC5zZXRMYXlvdXRQYXJhbXMobmV3IFZpZXdHcm91cC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwKLSAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKSk7CisgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQpKTsKIAogICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIHBhcmFtcyA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKDAsCi0gICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgMSk7CisgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIDEpOwogCiAgICAgICAgIGZpbmFsIEludGVybmFsU2VsZWN0aW9uVmlldyBsZWZ0Q29sdW1uID0gbmV3IEludGVybmFsU2VsZWN0aW9uVmlldyh0aGlzLCA1LCAibGVmdCBjb2x1bW4iKTsKICAgICAgICAgbGVmdENvbHVtbi5zZXRMYXlvdXRQYXJhbXMocGFyYW1zKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ludGVybmFsU2VsZWN0aW9uU2Nyb2xsLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9JbnRlcm5hbFNlbGVjdGlvblNjcm9sbC5qYXZhCmluZGV4IGZlNjA3ZTIuLjk4N2VhZWQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0ludGVybmFsU2VsZWN0aW9uU2Nyb2xsLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvSW50ZXJuYWxTZWxlY3Rpb25TY3JvbGwuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogCiAgICAgICAgIFNjcm9sbFZpZXcgc3YgPSBuZXcgU2Nyb2xsVmlldyh0aGlzKTsKICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcyBzdkxwID0gbmV3IFNjcm9sbFZpZXcuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsCisgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCiAgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOwogCiAgICAgICAgIExpbmVhckxheW91dCBsbCA9IG5ldyBMaW5lYXJMYXlvdXQodGhpcyk7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIEludGVybmFsU2VsZWN0aW9uVmlldyBpc3YgPSBuZXcgSW50ZXJuYWxTZWxlY3Rpb25WaWV3KHRoaXMsIDEwKTsKICAgICAgICAgaW50IHNjcmVlbkhlaWdodCA9IGdldFdpbmRvd01hbmFnZXIoKS5nZXREZWZhdWx0RGlzcGxheSgpLmdldEhlaWdodCgpOwogICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxsTHAgPSBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygKLSAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAogICAgICAgICAgICAgICAgIDIgKiBzY3JlZW5IZWlnaHQpOyAgLy8gMnggc2NyZWVuIGhlaWdodCB0byBlbnN1cmUgc2Nyb2xsaW5nCiAgICAgICAgIGlzdi5zZXRMYXlvdXRQYXJhbXMobGxMcCk7CiAgICAgICAgIGxsLmFkZFZpZXcoaXN2KTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpbmVhckxheW91dDcuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpbmVhckxheW91dDcuamF2YQppbmRleCAzMmM3ODdmLi5hN2VkZjJlIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaW5lYXJMYXlvdXQ3LmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGluZWFyTGF5b3V0Ny5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIAogLyoqCi0gKiBEZW1vbnN0cmF0ZXMgdXNpbmcgZmlsbF9wYXJlbnQgd2l0aGluIGEgbGluZWFyIGxheW91dCB3aG9zZSBzaXplIGlzIG5vdCBmaXhlZC4KKyAqIERlbW9uc3RyYXRlcyB1c2luZyBtYXRjaF9wYXJlbnQgd2l0aGluIGEgbGluZWFyIGxheW91dCB3aG9zZSBzaXplIGlzIG5vdCBmaXhlZC4KICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBMaW5lYXJMYXlvdXQ3IGV4dGVuZHMgQWN0aXZpdHkgewpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDQuamF2YSBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q0LmphdmEKaW5kZXggMmJkNTg5ZC4uYTE0MGU2MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDQuamF2YQorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0NC5qYXZhCkBAIC0zNDYsMTIgKzM0NiwxMiBAQAogICAgICAgICAgICAgbVRpdGxlID0gbmV3IFRleHRWaWV3KGNvbnRleHQpOwogICAgICAgICAgICAgbVRpdGxlLnNldFRleHQodGl0bGUpOwogICAgICAgICAgICAgYWRkVmlldyhtVGl0bGUsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOwogCiAgICAgICAgICAgICBtRGlhbG9ndWUgPSBuZXcgVGV4dFZpZXcoY29udGV4dCk7CiAgICAgICAgICAgICBtRGlhbG9ndWUuc2V0VGV4dCh3b3Jkcyk7CiAgICAgICAgICAgICBhZGRWaWV3KG1EaWFsb2d1ZSwgbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q2LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0Ni5qYXZhCmluZGV4IDliYjViMTQuLjJkNDUzNmYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q2LmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDYuamF2YQpAQCAtMzc0LDExICszNzQsMTEgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgbVRpdGxlID0gbmV3IFRleHRWaWV3KGNvbnRleHQpOwogICAgICAgICAgICAgbVRpdGxlLnNldFRleHQodGl0bGUpOwotICAgICAgICAgICAgYWRkVmlldyhtVGl0bGUsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOworICAgICAgICAgICAgYWRkVmlldyhtVGl0bGUsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbURpYWxvZ3VlID0gbmV3IFRleHRWaWV3KGNvbnRleHQpOwogICAgICAgICAgICAgbURpYWxvZ3VlLnNldFRleHQoZGlhbG9ndWUpOwotICAgICAgICAgICAgYWRkVmlldyhtRGlhbG9ndWUsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkpOworICAgICAgICAgICAgYWRkVmlldyhtRGlhbG9ndWUsIG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsIExheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbURpYWxvZ3VlLnNldFZpc2liaWxpdHkoZXhwYW5kZWQgPyBWSVNJQkxFIDogR09ORSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q3LmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9MaXN0Ny5qYXZhCmluZGV4IGQ0NGVkNTYuLmU3NzNkYjYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L0xpc3Q3LmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvTGlzdDcuamF2YQpAQCAtMTYsMTUgKzE2LDEyIEBACiAKIHBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5hcGlzLnZpZXc7CiAKLS8vIE5lZWQgdGhlIGZvbGxvd2luZyBpbXBvcnQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgYXBwIHJlc291cmNlcywgc2luY2UgdGhpcwotLy8gY2xhc3MgaXMgaW4gYSBzdWItcGFja2FnZS4KIGltcG9ydCBjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMuUjsKIAotCiBpbXBvcnQgYW5kcm9pZC5hcHAuTGlzdEFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHMuUGVvcGxlOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1TZWxlY3RlZExpc3RlbmVyOwpAQCAtMzYsNDYgKzMzLDY5IEBACiAgKiBBIGxpc3QgdmlldyBleGFtcGxlIHdoZXJlIHRoZSBkYXRhIGNvbWVzIGZyb20gYSBjdXJzb3IuCiAgKi8KIHB1YmxpYyBjbGFzcyBMaXN0NyBleHRlbmRzIExpc3RBY3Rpdml0eSBpbXBsZW1lbnRzIE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIgewotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIFBST0pFQ1RJT04gPSBuZXcgU3RyaW5nW10gewotICAgICAgICBQZW9wbGUuX0lELCBQZW9wbGUuTkFNRSwgUGVvcGxlLk5VTUJFUgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFBST0pFQ1RJT04gPSBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgQ29udGFjdHNDb250cmFjdC5Db250YWN0cy5fSUQsCisgICAgICAgICAgICBDb250YWN0c0NvbnRyYWN0LkNvbnRhY3RzLkRJU1BMQVlfTkFNRSwKKyAgICAgICAgICAgIENvbnRhY3RzQ29udHJhY3QuQ29udGFjdHMuSEFTX1BIT05FX05VTUJFUiwKKyAgICAgICAgICAgIENvbnRhY3RzQ29udHJhY3QuQ29udGFjdHMuTE9PS1VQX0tFWQogICAgIH07CiAKKyAgICBwcml2YXRlIGludCBtSWRDb2x1bW5JbmRleDsKKyAgICBwcml2YXRlIGludCBtSGFzUGhvbmVDb2x1bW5JbmRleDsKKworICAgIHByaXZhdGUgVGV4dFZpZXcgbVBob25lOworCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworCiAgICAgICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0Lmxpc3RfNyk7CisKICAgICAgICAgbVBob25lID0gKFRleHRWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5waG9uZSk7CiAgICAgICAgIGdldExpc3RWaWV3KCkuc2V0T25JdGVtU2VsZWN0ZWRMaXN0ZW5lcih0aGlzKTsKIAogICAgICAgICAvLyBHZXQgYSBjdXJzb3Igd2l0aCBhbGwgcGVvcGxlCi0gICAgICAgIEN1cnNvciBjID0gZ2V0Q29udGVudFJlc29sdmVyKCkucXVlcnkoUGVvcGxlLkNPTlRFTlRfVVJJLCBQUk9KRUNUSU9OLCBudWxsLCBudWxsLCBudWxsKTsKLSAgICAgICAgc3RhcnRNYW5hZ2luZ0N1cnNvcihjKTsKLSAgICAgICAgbVBob25lQ29sdW1uSW5kZXggPSBjLmdldENvbHVtbkluZGV4KFBlb3BsZS5OVU1CRVIpOworICAgICAgICBDdXJzb3IgYyA9IG1hbmFnZWRRdWVyeShDb250YWN0c0NvbnRyYWN0LkNvbnRhY3RzLkNPTlRFTlRfVVJJLAorICAgICAgICAgICAgICAgIFBST0pFQ1RJT04sIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBtSWRDb2x1bW5JbmRleCA9IGMuZ2V0Q29sdW1uSW5kZXgoQ29udGFjdHNDb250cmFjdC5Db250YWN0cy5fSUQpOworICAgICAgICBtSGFzUGhvbmVDb2x1bW5JbmRleCA9IGMuZ2V0Q29sdW1uSW5kZXgoQ29udGFjdHNDb250cmFjdC5Db250YWN0cy5IQVNfUEhPTkVfTlVNQkVSKTsKIAogICAgICAgICBMaXN0QWRhcHRlciBhZGFwdGVyID0gbmV3IFNpbXBsZUN1cnNvckFkYXB0ZXIodGhpcywKICAgICAgICAgICAgICAgICBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9saXN0X2l0ZW1fMSwgLy8gVXNlIGEgdGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBkaXNwbGF5cyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgdmlldwotICAgICAgICAgICAgICAgIGMsIC8vIEdpdmUgdGhlIGN1cnNvciB0byB0aGUgbGlzdCBhZGF0cGVyCi0gICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHtQZW9wbGUuTkFNRX0sIC8vIE1hcCB0aGUgTkFNRSBjb2x1bW4gaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlb3BsZSBkYXRhYmFzZSB0by4uLgotICAgICAgICAgICAgICAgIG5ldyBpbnRbXSB7YW5kcm9pZC5SLmlkLnRleHQxfSk7IC8vIFRoZSAidGV4dDEiIHZpZXcgZGVmaW5lZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgWE1MIHRlbXBsYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZGlzcGxheXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0IHZpZXcKKyAgICAgICAgICAgICAgICBjLCAvLyBHaXZlIHRoZSBjdXJzb3IgdG8gdGhlIGxpc3QgYWRhcHRlcgorICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IENvbnRhY3RzQ29udHJhY3QuQ29udGFjdHMuRElTUExBWV9OQU1FIH0sIC8vIE1hcCB0aGUgTkFNRSBjb2x1bW4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVvcGxlIGRhdGFiYXNlIHRvLi4uCisgICAgICAgICAgICAgICAgbmV3IGludFtdIHsgYW5kcm9pZC5SLmlkLnRleHQxIH0pOyAvLyBUaGUgInRleHQxIiB2aWV3IGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBYTUwgdGVtcGxhdGUKICAgICAgICAgc2V0TGlzdEFkYXB0ZXIoYWRhcHRlcik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25JdGVtU2VsZWN0ZWQoQWRhcHRlclZpZXcgcGFyZW50LCBWaWV3IHYsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgewogICAgICAgICBpZiAocG9zaXRpb24gPj0gMCkgewotICAgICAgICAgICAgQ3Vyc29yIGMgPSAoQ3Vyc29yKSBwYXJlbnQuZ2V0SXRlbUF0UG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICAgICAgbVBob25lLnNldFRleHQoYy5nZXRTdHJpbmcobVBob25lQ29sdW1uSW5kZXgpKTsKKyAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjID0gKEN1cnNvcikgcGFyZW50LmdldEl0ZW1BdFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChjLmdldEludChtSGFzUGhvbmVDb2x1bW5JbmRleCkgPiAwKSB7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjb250YWN0SWQgPSBjLmdldExvbmcobUlkQ29sdW1uSW5kZXgpOworICAgICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBwaG9uZXMgPSBnZXRDb250ZW50UmVzb2x2ZXIoKS5xdWVyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3RzQ29udHJhY3QuQ29tbW9uRGF0YUtpbmRzLlBob25lLkNPTlRFTlRfVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgQ29udGFjdHNDb250cmFjdC5Db21tb25EYXRhS2luZHMuUGhvbmUuTlVNQkVSIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBDb250YWN0c0NvbnRyYWN0LkNvbW1vbkRhdGFLaW5kcy5QaG9uZS5DT05UQUNUX0lEICsgIj0iICsgY29udGFjdElkLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFjdHNDb250cmFjdC5Db21tb25EYXRhS2luZHMuUGhvbmUuSVNfU1VQRVJfUFJJTUFSWSArICIgREVTQyIpOworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcGhvbmVzLm1vdmVUb0ZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1QaG9uZS5zZXRUZXh0KHBob25lcy5nZXRTdHJpbmcoMCkpOworICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIHBob25lcy5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVBob25lLnNldFRleHQoUi5zdHJpbmcubGlzdF83X25vdGhpbmcpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uTm90aGluZ1NlbGVjdGVkKEFkYXB0ZXJWaWV3IHBhcmVudCkgewogICAgICAgICBtUGhvbmUuc2V0VGV4dChSLnN0cmluZy5saXN0Xzdfbm90aGluZyk7Ci0KICAgICB9Ci0KLSAgICBwcml2YXRlIGludCBtUGhvbmVDb2x1bW5JbmRleDsKLSAgICBwcml2YXRlIFRleHRWaWV3IG1QaG9uZTsKIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L1Njcm9sbFZpZXcyLmphdmEgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9TY3JvbGxWaWV3Mi5qYXZhCmluZGV4IDg5ZTQwMDMuLjFhZjNjODEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L1Njcm9sbFZpZXcyLmphdmEKKysrIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvU2Nyb2xsVmlldzIuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKQEAgLTQxLDcgKzQwLDcgQEAKICAgICAgICAgICAgIFRleHRWaWV3IHRleHRWaWV3ID0gbmV3IFRleHRWaWV3KHRoaXMpOwogICAgICAgICAgICAgdGV4dFZpZXcuc2V0VGV4dCgiVGV4dCBWaWV3ICIgKyBpKTsKICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMgcCA9IG5ldyBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zKAotICAgICAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULAorICAgICAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKICAgICAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBsYXlvdXQuYWRkVmlldyh0ZXh0VmlldywgcCk7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9TcGlubmVyMS5qYXZhIGIvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvU3Bpbm5lcjEuamF2YQppbmRleCBhMzVhOTA5Li5jNWI0YmQ5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9TcGlubmVyMS5qYXZhCisrKyBiL3NhbXBsZXMvQXBpRGVtb3Mvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvYXBpcy92aWV3L1NwaW5uZXIxLmphdmEKQEAgLTIyLDEyICsyMiwyMCBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQXJyYXlBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNwaW5uZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcjsKIAogCiBwdWJsaWMgY2xhc3MgU3Bpbm5lcjEgZXh0ZW5kcyBBY3Rpdml0eSB7CiAKKyAgICB2b2lkIHNob3dUb2FzdChDaGFyU2VxdWVuY2UgbXNnKSB7CisgICAgICAgIFRvYXN0Lm1ha2VUZXh0KHRoaXMsIG1zZywgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisgICAgfQorICAgIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKQEAgLTM4LDExICs0NiwzMyBAQAogICAgICAgICAgICAgICAgIHRoaXMsIFIuYXJyYXkuY29sb3JzLCBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9zcGlubmVyX2l0ZW0pOwogICAgICAgICBhZGFwdGVyLnNldERyb3BEb3duVmlld1Jlc291cmNlKGFuZHJvaWQuUi5sYXlvdXQuc2ltcGxlX3NwaW5uZXJfZHJvcGRvd25faXRlbSk7CiAgICAgICAgIHMxLnNldEFkYXB0ZXIoYWRhcHRlcik7CisgICAgICAgIHMxLnNldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoCisgICAgICAgICAgICAgICAgbmV3IE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVNlbGVjdGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJWaWV3PD8+IHBhcmVudCwgVmlldyB2aWV3LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUb2FzdCgiU3Bpbm5lcjE6IHBvc2l0aW9uPSIgKyBwb3NpdGlvbiArICIgaWQ9IiArIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aGluZ1NlbGVjdGVkKEFkYXB0ZXJWaWV3PD8+IHBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RvYXN0KCJTcGlubmVyMTogdW5zZWxlY3RlZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgU3Bpbm5lciBzMiA9IChTcGlubmVyKSBmaW5kVmlld0J5SWQoUi5pZC5zcGlubmVyMik7CiAgICAgICAgIGFkYXB0ZXIgPSBBcnJheUFkYXB0ZXIuY3JlYXRlRnJvbVJlc291cmNlKHRoaXMsIFIuYXJyYXkucGxhbmV0cywKICAgICAgICAgICAgICAgICBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9zcGlubmVyX2l0ZW0pOwogICAgICAgICBhZGFwdGVyLnNldERyb3BEb3duVmlld1Jlc291cmNlKGFuZHJvaWQuUi5sYXlvdXQuc2ltcGxlX3NwaW5uZXJfZHJvcGRvd25faXRlbSk7CiAgICAgICAgIHMyLnNldEFkYXB0ZXIoYWRhcHRlcik7CisgICAgICAgIHMyLnNldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoCisgICAgICAgICAgICAgICAgbmV3IE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVNlbGVjdGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXJWaWV3PD8+IHBhcmVudCwgVmlldyB2aWV3LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3dUb2FzdCgiU3Bpbm5lcjI6IHBvc2l0aW9uPSIgKyBwb3NpdGlvbiArICIgaWQ9IiArIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aGluZ1NlbGVjdGVkKEFkYXB0ZXJWaWV3PD8+IHBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RvYXN0KCJTcGlubmVyMjogdW5zZWxlY3RlZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9BcGlEZW1vcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9hcGlzL3ZpZXcvX2luZGV4Lmh0bWwgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9faW5kZXguaHRtbAppbmRleCAxNTYxNzI5Li5hNDYyYmMxIDEwMDY0NAotLS0gYS9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9faW5kZXguaHRtbAorKysgYi9zYW1wbGVzL0FwaURlbW9zL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2FwaXMvdmlldy9faW5kZXguaHRtbApAQCAtMTMsNyArMTMsNyBAQAogICA8ZGQ+RGVtb25zdHJhdGVzIGEgc2ltcGxlIExpbmVhckxheW91dCwgd2l0aCBjaGlsZCB3aWR0aCBzZXQgdG8gV1JBUF9DT05URU5ULiA8L2RkPgogCiAgIDxkdD48YSBocmVmPSJMaW5lYXJMYXlvdXQyLmh0bWwiPjIuIFZlcnRpY2FsIChGaWxsIFNjcmVlbik8L2E+PC9kdD4KLSAgPGRkPkRlbW9uc3RyYXRlcyBhIHNpbXBsZSBMaW5lYXJMYXlvdXQsIHdpdGggY2hpbGQgd2lkdGggc2V0IHRvIEZJTExfUEFSRU5ULjwvZGQ+CisgIDxkZD5EZW1vbnN0cmF0ZXMgYSBzaW1wbGUgTGluZWFyTGF5b3V0LCB3aXRoIGNoaWxkIHdpZHRoIHNldCB0byBNQVRDSF9QQVJFTlQuPC9kZD4KIAogICA8ZHQ+PGEgaHJlZj0iTGluZWFyTGF5b3V0My5odG1sIj4zLiBWZXJ0aWNhbCAoUGFkZGVkKTwvYT48L2R0PgogICA8ZGQ+RGVtb25zdHJhdGVzIGEgTGluZWFyTGF5b3V0IHdoZXJlIG9uZSBvZiB0aGUgZWxlbWVudHMgY2FuIGV4cGFuZCB0byBmaWxsIGFueSByZW1haW5pbmcgc2NyZWVuIHNwYWNlICh3ZWlnaHQ9MSkuIDwvZGQ+CkBAIC0yNSw3ICsyNSw3IEBACiAgIDxkZD5EZW1vbnN0cmF0ZXMgbmVzdGVkIGxheW91dHMgdG8gY3JlYXRlIGEgdXNlciBmb3JtLjwvZGQ+CiAKICAgPGR0PjxhIGhyZWY9IkxpbmVhckxheW91dDYuaHRtbCI+Ni4gVW5pZm9ybSBTaXplPC9hPjwvZHQ+Ci0gIDxkZD5MaW5lYXJMYXlvdXQgd2hpY2ggdXNlcyBhIGNvbWJpbmF0aW9uIG9mIHdyYXBfY29udGVudCBvbiBpdHNlbGYgYW5kIGZpbGxfcGFyZW50IG9uIGl0cyBjaGlsZHJlbiB0byBnZXQgZXZlcnkgaXRlbSB0byBiZSB0aGUgc2FtZSB3aWR0aC48L2RkPgorICA8ZGQ+TGluZWFyTGF5b3V0IHdoaWNoIHVzZXMgYSBjb21iaW5hdGlvbiBvZiB3cmFwX2NvbnRlbnQgb24gaXRzZWxmIGFuZCBtYXRjaF9wYXJlbnQgb24gaXRzIGNoaWxkcmVuIHRvIGdldCBldmVyeSBpdGVtIHRvIGJlIHRoZSBzYW1lIHdpZHRoLjwvZGQ+CiAKICAgPGR0PjxhIGhyZWY9IkxpbmVhckxheW91dDcuaHRtbCI+Ny4gRmlsbCBQYXJlbnQ8L2E+PC9kdD4KICAgPGRkPkRlbW9uc3RyYXRlcyBhIGhvcml6b250YWwgbGluZWFyIGxheW91dCB3aXRoIGVxdWFsbHkgc2l6ZWQgY29sdW1ucy4gU29tZSBjb2x1bW5zIGZvcmNlIHRoZWlyIGhlaWdodCB0byBtYXRjaCB0aGUgcGFyZW50LjwvZGQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sIGIvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvY3VzdG9tX3RpdGxlLnhtbAppbmRleCA2YjdkY2E1Li41N2ViNmI0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9jdXN0b21fdGl0bGUueG1sCisrKyBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2N1c3RvbV90aXRsZS54bWwKQEAgLTE0LDggKzE0LDggQEAKICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAtLT4KIDxSZWxhdGl2ZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKICAgPgogICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90aXRsZV9sZWZ0X3RleHQiCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci93aW5kb3dUaXRsZVN0eWxlIgogICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAvPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX3JpZ2h0X3RleHQiCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCiAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjZmZmIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIAogICAgIC8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9kZXZpY2VfbGlzdC54bWwgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9kZXZpY2VfbGlzdC54bWwKaW5kZXggZTdiODRiOS4uMzk1Njk1ZiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvZGV2aWNlX2xpc3QueG1sCisrKyBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2RldmljZV9saXN0LnhtbApAQCAtMTUsMTEgKzE1LDExIEBACiAtLT4KIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX3BhaXJlZF9kZXZpY2VzIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGl0bGVfcGFpcmVkX2RldmljZXMiCiAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKQEAgLTI4LDEzICsyOCwxMyBAQAogICAgICAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSI1ZHAiCiAgICAgLz4KICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9wYWlyZWRfZGV2aWNlcyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpzdGFja0Zyb21Cb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAvPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX25ld19kZXZpY2VzIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvdGl0bGVfb3RoZXJfZGV2aWNlcyIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgpAQCAtNDMsMTMgKzQzLDEzIEBACiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjVkcCIKICAgICAvPgogICAgIDxMaXN0VmlldyBhbmRyb2lkOmlkPSJAK2lkL25ld19kZXZpY2VzIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnN0YWNrRnJvbUJvdHRvbT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIyIgogICAgIC8+CiAgICAgPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2J1dHRvbl9zY2FuIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYnV0dG9uX3NjYW4iCiAgICAgLz4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2RldmljZV9uYW1lLnhtbCBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L2RldmljZV9uYW1lLnhtbAppbmRleCBjNjkzZjNhLi44ZmEzNThjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9kZXZpY2VfbmFtZS54bWwKKysrIGIvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvZGV2aWNlX25hbWUueG1sCkBAIC0xNCw3ICsxNCw3IEBACiAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE4c3AiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI1ZHAiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tYWluLnhtbCBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L21haW4ueG1sCmluZGV4IDMwN2Y1YTUuLjE3MDI1ZjYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L21haW4ueG1sCisrKyBiL3NhbXBsZXMvQmx1ZXRvb3RoQ2hhdC9yZXMvbGF5b3V0L21haW4ueG1sCkBAIC0xNiwxOSArMTYsMTkgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICA+CiAgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvaW4iCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6c3RhY2tGcm9tQm90dG9tPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOnRyYW5zY3JpcHRNb2RlPSJhbHdheXNTY3JvbGwiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAvPgogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgPgogICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9lZGl0X3RleHRfb3V0IgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9CbHVldG9vdGhDaGF0L3Jlcy9sYXlvdXQvbWVzc2FnZS54bWwgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tZXNzYWdlLnhtbAppbmRleCBjNjkzZjNhLi44ZmEzNThjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tZXNzYWdlLnhtbAorKysgYi9zYW1wbGVzL0JsdWV0b290aENoYXQvcmVzL2xheW91dC9tZXNzYWdlLnhtbApAQCAtMTQsNyArMTQsNyBAQAogICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC0tPgogPFRleHRWaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOnRleHRTaXplPSIxOHNwIgogICAgIGFuZHJvaWQ6cGFkZGluZz0iNWRwIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCBhZTZiNWRiLi5kOTI2NzI5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMjQsMTEgKzI0LDEyIEBACiAgICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2RrVmVyc2lvbj0iMyIgLz4KIAogICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9zYW1wbGVfYnJvd3Nlcl9wbHVnaW4iCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9zYW1wbGVfYnJvd3Nlcl9wbHVnaW4iPgotICAgICAgICA8c2VydmljZSBhbmRyb2lkOm5hbWU9IlNhbXBsZVBsdWdpbiI+CisgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvc2FtcGxlX2Jyb3dzZXJfcGx1Z2luIj4KKyAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSIuU2FtcGxlUGx1Z2luIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLndlYmtpdC5QTFVHSU4iIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0idHlwZSIgYW5kcm9pZDp2YWx1ZT0ibmF0aXZlIiAvPgogICAgICAgICA8L3NlcnZpY2U+CiAgICAgPC9hcHBsaWNhdGlvbj4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL1JFQURNRSBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9SRUFETUUKaW5kZXggMDhiMDRhNS4uMjk3OTdiMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL1JFQURNRQorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vUkVBRE1FCkBAIC01NywxMCArNTcsMTQgQEAKICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJpZXMgdG8gaW5jbHVkZS4KIAogQW5kcm9pZE1hbmlmZXN0LnhtbDogc2ltaWxhciB0byBhIHN0YW5kYXJkIGFuZHJvaWQgbWFuaWZlc3QgZmlsZSwgZXhjZXB0IHRoYXQgaXQKLSAgICAgICAgICAgICAgICAgICAgIG11c3QgY29udGFpbiB0aGUgInVzZXMtcGVybWlzc2lvbiIgYW5kICJpbnRlbnQtZmlsdGVyIgotICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgdGhhdCBhcmUgcGx1Z2luIHNwZWNpZmljLgorICAgICAgICAgICAgICAgICAgICAgbXVzdCBjb250YWluIHRoZSAidXNlcy1wZXJtaXNzaW9uIiBhbmQgInNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyB0aGF0IGFyZSBwbHVnaW4gc3BlY2lmaWMuIFRoZSAic2VydmljZSIgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgc3ViLWVsZW1lbnRzIHRoYXQgZGVzY3JpYmUgdGhlIGphdmEgY29tcG9uZW50IG9mCisgICAgICAgICAgICAgICAgICAgICB0aGUgc2VydmljZS4KIAotc3JjLyo6IGxvY2F0aW9uIG9mIHRoZSBqYXZhIGZpbGVzIHdoaWNoIGluIG91ciBjYXNlIGlzIGp1c3QgYW4gZW1wdHkgc2VydmljZQorc3JjLyo6IGxvY2F0aW9uIG9mIHRoZSBqYXZhIHNvdXJjZSBmaWxlcy4gIFRoaXMgY29udGFpbnMgdGhlIFNhbXBsZVBsdWdpbi5jbGFzcworICAgICAgIHdoaWNoIGlzIHRoZSBqYXZhIGNvbXBvbmVudCBvZiBvdXIgcGx1Z2luLiAgVGhlIGNvbXBvbmVudCBtdXN0IGV4aXN0IGFuZAorICAgICAgIGltcGxlbWVudCB0aGUgcmVxdWlyZWQgaW50ZXJmYWNlcywgdGhvdWdoIHNpbXBseSByZXR1cm5pbmcgbnVsbCBpcyB2YWxpZC4KIAogcmVzLyo6IGxvY2F0aW9uIG9mIHRoZSBzdGF0aWMgcmVzb3VyY2VzIChlLmcuIGFuIGljb24gZm9yIHRoZSBwbHVnaW4pCiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvQW5kcm9pZC5tayBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvQW5kcm9pZC5tawppbmRleCBjYmQ4YTE1Li5kNDQ0YmIwIDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL0FuZHJvaWQubWsKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9BbmRyb2lkLm1rCkBAIC0zNCw3ICszNCw5IEBACiAJYXVkaW8vQXVkaW9QbHVnaW4uY3BwIFwKIAliYWNrZ3JvdW5kL0JhY2tncm91bmRQbHVnaW4uY3BwIFwKIAlmb3JtL0Zvcm1QbHVnaW4uY3BwIFwKKwluYXZpZ2F0aW9uL05hdmlnYXRpb25QbHVnaW4uY3BwIFwKIAlwYWludC9QYWludFBsdWdpbi5jcHAgXAorCXZpZGVvL1ZpZGVvUGx1Z2luLmNwcCBcCiAJam5pLWJyaWRnZS5jcHAgXAogCiBMT0NBTF9DX0lOQ0xVREVTICs9IFwKQEAgLTQ0LDcgKzQ2LDkgQEAKIAkkKExPQ0FMX1BBVEgpL2F1ZGlvIFwKIAkkKExPQ0FMX1BBVEgpL2JhY2tncm91bmQgXAogCSQoTE9DQUxfUEFUSCkvZm9ybSBcCisJJChMT0NBTF9QQVRIKS9uYXZpZ2F0aW9uIFwKIAkkKExPQ0FMX1BBVEgpL3BhaW50IFwKKwkkKExPQ0FMX1BBVEgpL3ZpZGVvIFwKIAlleHRlcm5hbC93ZWJraXQvV2ViQ29yZS9icmlkZ2UgXAogCWV4dGVybmFsL3dlYmtpdC9XZWJDb3JlL3BsdWdpbnMgXAogCWV4dGVybmFsL3dlYmtpdC9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvSmF2YVZNIFwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvUGx1Z2luT2JqZWN0LmNwcCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvUGx1Z2luT2JqZWN0LmNwcAppbmRleCA4MGY1ZTdjLi5kZDBmYmFjIDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL1BsdWdpbk9iamVjdC5jcHAKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9QbHVnaW5PYmplY3QuY3BwCkBAIC02LDcgKzYsNyBAQAogIHJlZGlzdHJpYnV0ZSB0aGlzIEFwcGxlIHNvZnR3YXJlLgogCiAgSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgc3ViamVjdCB0byB0aGVzZQotIHRlcm1zLCBBcHBsZSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdW5kZXIgQXBwbGXVcyBjb3B5cmlnaHRzIGluCisgdGVybXMsIEFwcGxlIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB1bmRlciBBcHBsZcOVcyBjb3B5cmlnaHRzIGluCiAgdGhpcyBvcmlnaW5hbCBBcHBsZSBzb2Z0d2FyZSAodGhlICJBcHBsZSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZAogIHJlZGlzdHJpYnV0ZSB0aGUgQXBwbGUgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQogIGZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIEFwcGxlIFNvZnR3YXJlIGluIGl0cyBlbnRpcmV0eSBhbmQgd2l0aG91dApAQCAtMzUsNiArMzUsNDAgQEAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAiUGx1Z2luT2JqZWN0LmgiCiAKK2ludCBTdWJQbHVnaW46OmdldFBsdWdpbldpZHRoKCkgeworICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3QoKS0+cGRhdGE7CisgICAgcmV0dXJuIG9iai0+d2luZG93LT53aWR0aDsKK30KKworaW50IFN1YlBsdWdpbjo6Z2V0UGx1Z2luSGVpZ2h0KCkgeworICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3QoKS0+cGRhdGE7CisgICAgcmV0dXJuIG9iai0+d2luZG93LT5oZWlnaHQ7Cit9CisKK2Jvb2wgU3VyZmFjZVN1YlBsdWdpbjo6c3VwcG9ydHNEcmF3aW5nTW9kZWwoQU5QRHJhd2luZ01vZGVsIG1vZGVsKSB7CisgICAgcmV0dXJuIChtb2RlbCA9PSBrU3VyZmFjZV9BTlBEcmF3aW5nTW9kZWwpOworfQorCit2b2lkIFN1cmZhY2VTdWJQbHVnaW46OnNldENvbnRleHQoam9iamVjdCBjb250ZXh0KSB7CisgICAgSk5JRW52KiBlbnYgPSBOVUxMOworICAgIGlmIChnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgeworCisgICAgICAgIC8vIGlmIG9uZSBleGlzdHMgdGhlbiBmcmVlIGl0cyBnbG9iYWwgcmVmZXJlbmNlCisgICAgICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgICAgIGVudi0+RGVsZXRlR2xvYmFsUmVmKG1fY29udGV4dCk7CisgICAgICAgICAgICBtX2NvbnRleHQgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGdsb2JhbCByZWYKKyAgICAgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBlbnYtPk5ld0dsb2JhbFJlZihjb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHNldCB0aGUgdmFsdWUKKyAgICAgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHBsdWdpbkludmFsaWRhdGUoTlBPYmplY3QgKm9iaik7CiBzdGF0aWMgYm9vbCBwbHVnaW5IYXNQcm9wZXJ0eShOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7CiBzdGF0aWMgYm9vbCBwbHVnaW5IYXNNZXRob2QoTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG5hbWUpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9QbHVnaW5PYmplY3QuaCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvUGx1Z2luT2JqZWN0LmgKaW5kZXggNjE0ODZkNS4uMGViZWQyOCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9QbHVnaW5PYmplY3QuaAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL1BsdWdpbk9iamVjdC5oCkBAIC02LDcgKzYsNyBAQAogIHJlZGlzdHJpYnV0ZSB0aGlzIEFwcGxlIHNvZnR3YXJlLgogCiAgSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgc3ViamVjdCB0byB0aGVzZQotIHRlcm1zLCBBcHBsZSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdW5kZXIgQXBwbGXVcyBjb3B5cmlnaHRzIGluCisgdGVybXMsIEFwcGxlIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB1bmRlciBBcHBsZe+/vXMgY29weXJpZ2h0cyBpbgogIHRoaXMgb3JpZ2luYWwgQXBwbGUgc29mdHdhcmUgKHRoZSAiQXBwbGUgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQKICByZWRpc3RyaWJ1dGUgdGhlIEFwcGxlIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKICBmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBBcHBsZSBTb2Z0d2FyZSBpbiBpdHMgZW50aXJldHkgYW5kIHdpdGhvdXQKQEAgLTM3LDYgKzM3LDEzIEBACiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgPGpuaS5oPgogCitlbnVtIEN1c3RvbUV2ZW50VHlwZXMgeworICAgIGtTdXJmYWNlQ3JlYXRlZF9DdXN0b21FdmVudCAgICAgPSAwLAorICAgIGtTdXJmYWNlQ2hhbmdlZF9DdXN0b21FdmVudCAgICAgPSAxLAorICAgIGtTdXJmYWNlRGVzdHJveWVkX0N1c3RvbUV2ZW50ICAgPSAyLAorfTsKK3R5cGVkZWYgaW50MzJfdCBDdXN0b21FdmVudFR5cGU7CisKIGNsYXNzIFN1YlBsdWdpbiB7CiBwdWJsaWM6CiAgICAgU3ViUGx1Z2luKE5QUCBpbnN0KSA6IG1faW5zdChpbnN0KSB7fQpAQCAtNDQsNiArNTEsOSBAQAogICAgIHZpcnR1YWwgaW50MTYgaGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwpID0gMDsKIAorICAgIGludCBnZXRQbHVnaW5XaWR0aCgpOworICAgIGludCBnZXRQbHVnaW5IZWlnaHQoKTsKKwogICAgIE5QUCBpbnN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0OyB9CiAKIHByaXZhdGU6CkBAIC01MiwxMiArNjIsMTQgQEAKIAogY2xhc3MgU3VyZmFjZVN1YlBsdWdpbiA6IHB1YmxpYyBTdWJQbHVnaW4gewogcHVibGljOgotICAgIFN1cmZhY2VTdWJQbHVnaW4oTlBQIGluc3QpIDogU3ViUGx1Z2luKGluc3QpIHt9CisgICAgU3VyZmFjZVN1YlBsdWdpbihOUFAgaW5zdCkgOiBTdWJQbHVnaW4oaW5zdCkgeyBtX2NvbnRleHQgPSBOVUxMOyB9CiAgICAgdmlydHVhbCB+U3VyZmFjZVN1YlBsdWdpbigpIHt9Ci0gICAgdmlydHVhbCBib29sIGlzRml4ZWRTdXJmYWNlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlQ3JlYXRlZChKTklFbnYqLCBqb2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VDaGFuZ2VkKGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXJmYWNlRGVzdHJveWVkKCkgPSAwOworICAgIHZpcnR1YWwgam9iamVjdCBnZXRTdXJmYWNlKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwpOworCisgICAgdm9pZCBzZXRDb250ZXh0KGpvYmplY3QgY29udGV4dCk7CisKKyAgICBqb2JqZWN0IG1fY29udGV4dDsKIH07CiAKIGVudW0gUGx1Z2luVHlwZXMgewpAQCAtNjcsNiArNzksOCBAQAogICAgIGtGb3JtX1BsdWdpblR5cGUgICAgICAgPSA0LAogICAgIGtUZXh0X1BsdWdpblR5cGUgICAgICAgPSA1LAogICAgIGtQYWludF9QbHVnaW5UeXBlICAgICAgPSA2LAorICAgIGtWaWRlb19QbHVnaW5UeXBlICAgICAgPSA3LAorICAgIGtOYXZpZ2F0aW9uX1BsdWdpblR5cGUgPSA4LAogfTsKIHR5cGVkZWYgdWludDMyX3QgUGx1Z2luVHlwZTsKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9hbmltYXRpb24vQW5pbWF0aW9uUGx1Z2luLmNwcCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYW5pbWF0aW9uL0FuaW1hdGlvblBsdWdpbi5jcHAKaW5kZXggYjYxNzVjMS4uNzJhMTFjOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9hbmltYXRpb24vQW5pbWF0aW9uUGx1Z2luLmNwcAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2FuaW1hdGlvbi9BbmltYXRpb25QbHVnaW4uY3BwCkBAIC04NSw3ICs4NSw3IEBACiAgICAgQU5QRXZlbnRGbGFncyBmbGFncyA9IGtUb3VjaF9BTlBFdmVudEZsYWc7CiAgICAgTlBFcnJvciBlcnIgPSBicm93c2VyLT5zZXR2YWx1ZShpbnN0LCBrQWNjZXB0RXZlbnRzX0FOUFNldFZhbHVlLCAmZmxhZ3MpOwogICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QsIGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYXVkaW8vQXVkaW9QbHVnaW4uY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9hdWRpby9BdWRpb1BsdWdpbi5jcHAKaW5kZXggNThkMzQwYy4uOTczMWYxOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9hdWRpby9BdWRpb1BsdWdpbi5jcHAKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9hdWRpby9BdWRpb1BsdWdpbi5jcHAKQEAgLTk5LDcgKzk5LDcgQEAKIAogICAgIC8vIG9wZW4gYSBmaWxlIHN0cmVhbQogICAgIEZJTEUqIGYgPSBmb3BlbihwYXRoLCAiciIpOwotICAgIGdMb2dJLmxvZyhpbnN0LCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLSBwYXRoICVzIEZJTEUgJXAiLCBwYXRoLCBmKTsKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0gcGF0aCAlcyBGSUxFICVwIiwgcGF0aCwgZik7CiAKICAgICAvLyBzZXR1cCBvdXIgcHJpdmF0ZSBhdWRpbyBzdHJ1Y3QncyBkZWZhdWx0IHZhbHVlcwogICAgIG1fc291bmRQbGF5ID0gbmV3IFNvdW5kUGxheTsKQEAgLTEyMywxMyArMTIzLDEzIEBACiAgICAgc3RydWN0IHN0YXQgZmlsZVN0YXR1czsKIAogICAgIGlmKGZpbGVEZXNjcmlwdG9yIDw9IDApIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QsIGtFcnJvcl9BTlBMb2dUeXBlLCAiZm9wZW4gZXJyb3IiKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiZm9wZW4gZXJyb3IiKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZnN0YXQoZmlsZURlc2NyaXB0b3IsICZmaWxlU3RhdHVzKSAhPSAwKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRGVidWdfQU5QTG9nVHlwZSwgIkZpbGUgU2l6ZTogJWQiLCBmaWxlU3RhdHVzLnN0X3NpemUpOworICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICJGaWxlIFNpemU6ICVkIiwgZmlsZVN0YXR1cy5zdF9zaXplKTsKICAgICAgICAgbV9zb3VuZFBsYXktPmZpbGVTaXplID0gZmlsZVN0YXR1cy5zdF9zaXplOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRXJyb3JfQU5QTG9nVHlwZSwgImZzdGF0IGVycm9yIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgImZzdGF0IGVycm9yIik7CiAgICAgfQogCiAgICAgLy8gY29uZmlndXJlIHRoZSBVSSBlbGVtZW50cwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgQU5QRXZlbnRGbGFncyBmbGFncyA9IGtUb3VjaF9BTlBFdmVudEZsYWc7CiAgICAgTlBFcnJvciBlcnIgPSBicm93c2VyLT5zZXR2YWx1ZShpbnN0LCBrQWNjZXB0RXZlbnRzX0FOUFNldFZhbHVlLCAmZmxhZ3MpOwogICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QsIGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKICAgICB9CiB9CiAKQEAgLTIwMywxMCArMjAzLDEwIEBACiB9CiAKIHZvaWQgQXVkaW9QbHVnaW46OmRyYXcoQU5QQ2FudmFzKiBjYW52YXMpIHsKLSAgICBOUFAgaW5zdGFuY2UgPSB0aGlzLT5pbnN0KCk7Ci0gICAgUGx1Z2luT2JqZWN0ICpvYmogPSAoUGx1Z2luT2JqZWN0KikgaW5zdGFuY2UtPnBkYXRhOwogCi0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIkRyYXdpbmciKTsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QqKSB0aGlzLT5pbnN0KCktPnBkYXRhOworCisgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiRHJhd2luZyIpOwogCiAgICAgY29uc3QgZmxvYXQgdHJhY2tIZWlnaHQgPSAzMDsKICAgICBjb25zdCBmbG9hdCBidXR0b25XaWR0aCA9IDYwOwpAQCAtMzMyLDcgKzMzMiw3IEBACiAKICAgICAvLyBpZiB0aGUgdHJhY2sgaXMgbnVsbCB0aGVuIHJldHVybgogICAgIGlmIChOVUxMID09IG1fc291bmRQbGF5LT50cmFjaykgewotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSAlcCB1bmFibGUgdG8gY3JlYXRlIHRyYWNrIiwKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLSAlcCB1bmFibGUgdG8gY3JlYXRlIHRyYWNrIiwKICAgICAgICAgICAgICAgICAgIGluc3RhbmNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0NCw3ICszNDQsNyBAQAogCiAgICAgaWYgKGN1cnJlbnRSZWN0ID09ICZtX3BsYXlSZWN0KSB7CiAKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgc3RhcnRpbmcgdHJhY2sgKCVkKSIsCisgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgc3RhcnRpbmcgdHJhY2sgKCVkKSIsCiAgICAgICAgICAgICAgICAgICBtX3NvdW5kUGxheS0+dHJhY2ssIGdTb3VuZEkuaXNTdG9wcGVkKG1fc291bmRQbGF5LT50cmFjaykpOwogCiAgICAgICAgIGlmIChnU291bmRJLmlzU3RvcHBlZChtX3NvdW5kUGxheS0+dHJhY2spKSB7CkBAIC0zNTMsNyArMzUzLDcgQEAKICAgICB9CiAgICAgZWxzZSBpZiAoY3VycmVudFJlY3QgPT0gJm1fcGF1c2VSZWN0KSB7CiAKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgcGF1c2luZyB0cmFjayAoJWQpIiwKKyAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBwYXVzaW5nIHRyYWNrICglZCkiLAogICAgICAgICAgICAgICAgICAgbV9zb3VuZFBsYXktPnRyYWNrLCBnU291bmRJLmlzU3RvcHBlZChtX3NvdW5kUGxheS0+dHJhY2spKTsKIAogICAgICAgICBpZiAoIWdTb3VuZEkuaXNTdG9wcGVkKG1fc291bmRQbGF5LT50cmFjaykpIHsKQEAgLTM2Miw3ICszNjIsNyBAQAogICAgIH0KICAgICBlbHNlIGlmIChjdXJyZW50UmVjdCA9PSAmbV9zdG9wUmVjdCkgewogCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIHN0b3BwaW5nIHRyYWNrICglZCkiLAorICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIHN0b3BwaW5nIHRyYWNrICglZCkiLAogICAgICAgICAgICAgICAgICAgbV9zb3VuZFBsYXktPnRyYWNrLCBnU291bmRJLmlzU3RvcHBlZChtX3NvdW5kUGxheS0+dHJhY2spKTsKIAogICAgICAgICBpZiAoIWdTb3VuZEkuaXNTdG9wcGVkKG1fc291bmRQbGF5LT50cmFjaykpIHsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmNwcCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmNwcAppbmRleCAyYTY1YjRmLi41NzhmZTZkIDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2JhY2tncm91bmQvQmFja2dyb3VuZFBsdWdpbi5jcHAKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9iYWNrZ3JvdW5kL0JhY2tncm91bmRQbHVnaW4uY3BwCkBAIC0zOCw3ICszOCw5IEBACiBleHRlcm4gQU5QTG9nSW50ZXJmYWNlVjAgICAgICAgZ0xvZ0k7CiBleHRlcm4gQU5QUGFpbnRJbnRlcmZhY2VWMCAgICAgZ1BhaW50STsKIGV4dGVybiBBTlBTdXJmYWNlSW50ZXJmYWNlVjAgICBnU3VyZmFjZUk7CitleHRlcm4gQU5QU3lzdGVtSW50ZXJmYWNlVjAgICAgZ1N5c3RlbUk7CiBleHRlcm4gQU5QVHlwZWZhY2VJbnRlcmZhY2VWMCAgZ1R5cGVmYWNlSTsKK2V4dGVybiBBTlBXaW5kb3dJbnRlcmZhY2VWMCAgICBnV2luZG93STsKIAogI2RlZmluZSBBUlJBWV9DT1VOVChhcnJheSkgICAgICAoc2l6ZW9mKGFycmF5KSAvIHNpemVvZihhcnJheVswXSkpCiAKQEAgLTU0LDcgKzU2LDYgQEAKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIGRyYXdpbmcgc3VyZmFjZQogICAgIG1fc3VyZmFjZSA9IE5VTEw7Ci0gICAgbV92bSA9IE5VTEw7CiAKICAgICAvL2luaXRpYWxpemUgYml0bWFwIHRyYW5zcGFyZW5jeSB2YXJpYWJsZXMKICAgICBtRmluaXNoZWRTdGFnZU9uZSAgID0gZmFsc2U7CkBAIC02NywzMCArNjgsNTcgQEAKICAgICB0ZXN0X2JpdG1hcHMoKTsgLy8gYW5kcm9pZCBiaXRtYXBzCiAgICAgdGVzdF9kb21BY2Nlc3MoKTsKICAgICB0ZXN0X2phdmFzY3JpcHQoKTsKKyAgICB0ZXN0X2xvYWRKYXZhQ2xhc3MoKTsKKworICAgIC8vcmVnaXN0ZXIgZm9yIHRvdWNoIGV2ZW50cworICAgIEFOUEV2ZW50RmxhZ3MgZmxhZ3MgPSBrVG91Y2hfQU5QRXZlbnRGbGFnOworICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgfQogfQogCi1CYWNrZ3JvdW5kUGx1Z2luOjp+QmFja2dyb3VuZFBsdWdpbigpIHsgfQotCi1ib29sIEJhY2tncm91bmRQbHVnaW46OnN1cHBvcnRzRHJhd2luZ01vZGVsKEFOUERyYXdpbmdNb2RlbCBtb2RlbCkgewotICAgIHJldHVybiAobW9kZWwgPT0ga1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsKTsKK0JhY2tncm91bmRQbHVnaW46On5CYWNrZ3JvdW5kUGx1Z2luKCkgeworICAgIHNldENvbnRleHQoTlVMTCk7CisgICAgZGVzdHJveVN1cmZhY2UoKTsKIH0KIAotYm9vbCBCYWNrZ3JvdW5kUGx1Z2luOjppc0ZpeGVkU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci19Citqb2JqZWN0IEJhY2tncm91bmRQbHVnaW46OmdldFN1cmZhY2UoKSB7CiAKLXZvaWQgQmFja2dyb3VuZFBsdWdpbjo6c3VyZmFjZUNyZWF0ZWQoSk5JRW52KiBlbnYsIGpvYmplY3Qgc3VyZmFjZSkgewotICAgIGVudi0+R2V0SmF2YVZNKCZtX3ZtKTsKLSAgICBtX3N1cmZhY2UgPSBlbnYtPk5ld0dsb2JhbFJlZihzdXJmYWNlKTsKLX0KKyAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAgfQogCi12b2lkIEJhY2tncm91bmRQbHVnaW46OnN1cmZhY2VDaGFuZ2VkKGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIGRyYXdQbHVnaW4od2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgQmFja2dyb3VuZFBsdWdpbjo6c3VyZmFjZURlc3Ryb3llZCgpIHsKKyAgICAvLyBsb2FkIHRoZSBhcHByb3ByaWF0ZSBqYXZhIGNsYXNzIGFuZCBpbnN0YW50aWF0ZSBpdAogICAgIEpOSUVudiogZW52ID0gTlVMTDsKLSAgICBpZiAobV9zdXJmYWNlICYmIG1fdm0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgeworICAgIGlmIChnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSykgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBnZXRTdXJmYWNlOiBmYWlsZWQgdG8gZ2V0IGVudiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAiY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luLkJhY2tncm91bmRTdXJmYWNlIjsKKyAgICBqY2xhc3MgYmFja2dyb3VuZENsYXNzID0gZ1N5c3RlbUkubG9hZEphdmFDbGFzcyhpbnN0KCksIGNsYXNzTmFtZSk7CisKKyAgICBpZighYmFja2dyb3VuZENsYXNzKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIGdldFN1cmZhY2U6IGZhaWxlZCB0byBsb2FkIGNsYXNzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvciA9IGVudi0+R2V0TWV0aG9kSUQoYmFja2dyb3VuZENsYXNzLCAiPGluaXQ+IiwgIihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYiKTsKKyAgICBqb2JqZWN0IGJhY2tncm91bmRTdXJmYWNlID0gZW52LT5OZXdPYmplY3QoYmFja2dyb3VuZENsYXNzLCBjb25zdHJ1Y3RvciwgbV9jb250ZXh0KTsKKworICAgIGlmKCFiYWNrZ3JvdW5kU3VyZmFjZSkgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBnZXRTdXJmYWNlOiBmYWlsZWQgdG8gY29uc3RydWN0IG9iamVjdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtX3N1cmZhY2UgPSBlbnYtPk5ld0dsb2JhbFJlZihiYWNrZ3JvdW5kU3VyZmFjZSk7CisgICAgcmV0dXJuIG1fc3VyZmFjZTsKK30KKwordm9pZCBCYWNrZ3JvdW5kUGx1Z2luOjpkZXN0cm95U3VyZmFjZSgpIHsKKyAgICBKTklFbnYqIGVudiA9IE5VTEw7CisgICAgaWYgKG1fc3VyZmFjZSAmJiBnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgewogICAgICAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtX3N1cmZhY2UpOwogICAgICAgICBtX3N1cmZhY2UgPSBOVUxMOwogICAgIH0KQEAgLTEwOSw3ICsxMzcsNyBAQAogCiAgICAgLy8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSB6b29tIGxldmVsIGlzIHVuaWZvcm0KICAgICBpZiAoem9vbUZhY3RvclcgKyAuMDEgPCB6b29tRmFjdG9ySCAmJiB6b29tRmFjdG9yVyAtIC4wMSA+IHpvb21GYWN0b3JIKQotICAgICAgICBnTG9nSS5sb2coaW5zdCgpLCBrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgem9vbSBpcyBvdXQgb2Ygc3luYyAoJWYsJWYpIiwKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB6b29tIGlzIG91dCBvZiBzeW5jICglZiwlZikiLAogICAgICAgICAgICAgICAgICAgaW5zdCgpLCB6b29tRmFjdG9yVywgem9vbUZhY3RvckgpOwogCiAgICAgLy8gc2NhbGUgdGhlIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgem9vbSBsZXZlbApAQCAtMTE5LDkgKzE0Nyw5IEBACiAgICAgLy8gbG9jayB0aGUgc3VyZmFjZQogICAgIEFOUEJpdG1hcCBiaXRtYXA7CiAgICAgSk5JRW52KiBlbnYgPSBOVUxMOwotICAgIGlmICghbV9zdXJmYWNlIHx8IG1fdm0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSyB8fAorICAgIGlmICghbV9zdXJmYWNlIHx8IGdWTS0+R2V0RW52KCh2b2lkKiopICZlbnYsIEpOSV9WRVJTSU9OXzFfNCkgIT0gSk5JX09LIHx8CiAgICAgICAgICFnU3VyZmFjZUkubG9jayhlbnYsIG1fc3VyZmFjZSwgJmJpdG1hcCwgTlVMTCkpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHVuYWJsZSB0byBsb2NrIHRoZSBwbHVnaW4iLCBpbnN0KCkpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHVuYWJsZSB0byBsb2NrIHRoZSBwbHVnaW4iLCBpbnN0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNTQsMTkgKzE4MiwyNiBAQAogaW50MTYgQmFja2dyb3VuZFBsdWdpbjo6aGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCkgewogICAgIHN3aXRjaCAoZXZ0LT5ldmVudFR5cGUpIHsKICAgICAgICAgY2FzZSBrRHJhd19BTlBFdmVudFR5cGU6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdCgpLCBrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiBkaWQgbm90IHJlcXVlc3QgZHJhdyBldmVudHMiLCBpbnN0KCkpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIGRpZCBub3QgcmVxdWVzdCBkcmF3IGV2ZW50cyIsIGluc3QoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBrTGlmZWN5Y2xlX0FOUEV2ZW50VHlwZToKICAgICAgICAgICAgIGlmIChldnQtPmRhdGEubGlmZWN5Y2xlLmFjdGlvbiA9PSBrT25Mb2FkX0FOUExpZmVjeWNsZUFjdGlvbikgewotICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0KCksIGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIHJlY2VpdmVkIGFuIG9uTG9hZCBldmVudCIsIGluc3QoKSk7CisgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIHJlY2VpdmVkIGFuIG9uTG9hZCBldmVudCIsIGluc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBrVG91Y2hfQU5QRXZlbnRUeXBlOgotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHRoZSBwbHVnaW4gZGlkIG5vdCByZXF1ZXN0IHRvdWNoIGV2ZW50cyIsIGluc3QoKSk7CisgICAgICAgICAgICBpZiAoa0Rvd25fQU5QVG91Y2hBY3Rpb24gPT0gZXZ0LT5kYXRhLnRvdWNoLmFjdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4ga0hhbmRsZUxvbmdQcmVzc19BTlBUb3VjaFJlc3VsdCB8IGtIYW5kbGVEb3VibGVUYXBfQU5QVG91Y2hSZXN1bHQ7CisgICAgICAgICAgICBlbHNlIGlmIChrTG9uZ1ByZXNzX0FOUFRvdWNoQWN0aW9uID09IGV2dC0+ZGF0YS50b3VjaC5hY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBicm93c2VyLT5nZXR1cmwoaW5zdCgpLCAiamF2YXNjcmlwdDphbGVydCgnRGV0ZWN0ZWQgbG9uZyBwcmVzcyBldmVudC4nKSIsIDApOworICAgICAgICAgICAgICAgIGdXaW5kb3dJLnJlcXVlc3RGdWxsU2NyZWVuKGluc3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChrRG91YmxlVGFwX0FOUFRvdWNoQWN0aW9uID09IGV2dC0+ZGF0YS50b3VjaC5hY3Rpb24pCisgICAgICAgICAgICAgICAgYnJvd3Nlci0+Z2V0dXJsKGluc3QoKSwgImphdmFzY3JpcHQ6YWxlcnQoJ0RldGVjdGVkIGRvdWJsZSB0YXAgZXZlbnQuJykiLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGtLZXlfQU5QRXZlbnRUeXBlOgotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3QoKSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIHRoZSBwbHVnaW4gZGlkIG5vdCByZXF1ZXN0IGtleSBldmVudHMiLCBpbnN0KCkpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIGRpZCBub3QgcmVxdWVzdCBrZXkgZXZlbnRzIiwgaW5zdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODMsOSArMjE4LDkgQEAKICAgICBOUFAgaW5zdGFuY2UgPSB0aGlzLT5pbnN0KCk7CiAKICAgICAvL0xPR19FUlJPUihpbnN0YW5jZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBMb2cgRXJyb3IiLCBpbnN0YW5jZSk7Ci0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBMb2cgRXJyb3IiLCBpbnN0YW5jZSk7Ci0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrV2FybmluZ19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIExvZyBXYXJuaW5nIiwgaW5zdGFuY2UpOwotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgTG9nIERlYnVnIiwgaW5zdGFuY2UpOworICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBMb2cgRXJyb3IiLCBpbnN0YW5jZSk7CisgICAgZ0xvZ0kubG9nKGtXYXJuaW5nX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgTG9nIFdhcm5pbmciLCBpbnN0YW5jZSk7CisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIExvZyBEZWJ1ZyIsIGluc3RhbmNlKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjIzLDEzICsyNTgsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQgdGltZXJfb25lc2hvdChOUFAgaW5zdGFuY2UsIHVpbnQzMiB0aW1lcklEKSB7Ci0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0tLS0tIG9uZXNob3QgdGltZXJcbiIpOworICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0tLS0tIG9uZXNob3QgdGltZXJcbiIpOwogfQogCiBzdGF0aWMgdm9pZCB0aW1lcl9yZXBlYXQoTlBQIGluc3RhbmNlLCB1aW50MzIgdGltZXJJRCkgewogICAgIEJhY2tncm91bmRQbHVnaW4gKm9iaiA9ICgoQmFja2dyb3VuZFBsdWdpbiopICgoUGx1Z2luT2JqZWN0KikgaW5zdGFuY2UtPnBkYXRhKS0+YWN0aXZlUGx1Z2luKTsKIAotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tLS0tLSByZXBlYXQgdGltZXIgJWRcbiIsCisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLS0tLS0gcmVwZWF0IHRpbWVyICVkXG4iLAogICAgICAgICAgICAgICBvYmotPm1UaW1lclJlcGVhdENvdW50KTsKICAgICBpZiAoLS1vYmotPm1UaW1lclJlcGVhdENvdW50ID09IDApIHsKICAgICAgICAgYnJvd3Nlci0+dW5zY2hlZHVsZXRpbWVyKGluc3RhbmNlLCB0aW1lcklEKTsKQEAgLTIzNyw3ICsyNzIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB0aW1lcl9uZXZlcmZpcmVzKE5QUCBpbnN0YW5jZSwgdWludDMyIHRpbWVySUQpIHsKLSAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLS0tLS0gdGltZXJfbmV2ZXJmaXJlcyEhIVxuIik7CisgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLS0tLS0gdGltZXJfbmV2ZXJmaXJlcyEhIVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHRpbWVyX2xhdGVuY3koTlBQIGluc3RhbmNlLCB1aW50MzIgdGltZXJJRCkgewpAQCAtMjU0LDcgKzI4OSw3IEBACiAKICAgICBvYmotPm1QcmV2VGltZSA9IG5vdzsKIAotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsCisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLAogICAgICAgICAgICAgICAiLS0tLS0tLS0gbGF0ZW5jeSB0ZXN0OiBbJTNkXSBpbnRlcnZhbCAlZCBleHBlY3RlZCAlZCwgdG90YWwgJWQgZXhwZWN0ZWQgJWQsIGRyaWZ0ICVkIGF2ZyAlZFxuIiwKICAgICAgICAgICAgICAgb2JqLT5tVGltZXJMYXRlbmN5Q3VycmVudENvdW50LCBpbnRlcnZhbCwgVElNRVJfSU5URVJWQUwsIGR1ciwKICAgICAgICAgICAgICAgZXhwZWN0ZWREdXIsIGRyaWZ0LCBhdmdEcmlmdCk7CkBAIC0yODksNyArMzI0LDcgQEAKICAgICBBTlBQaXhlbFBhY2tpbmcgcGFja2luZzsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFSUkFZX0NPVU5UKGdSZWNzKTsgaSsrKSB7CiAgICAgICAgIGlmIChnQml0bWFwSS5nZXRQaXhlbFBhY2tpbmcoZ1JlY3NbaV0uZkZvcm1hdCwgJnBhY2tpbmcpKSB7Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLAorICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICJwaXhlbCBmb3JtYXQgWyVkXSAlcyBoYXMgcGFja2luZyBBUkdCIFslZCAlZF0gWyVkICVkXSBbJWQgJWRdIFslZCAlZF1cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgZ1JlY3NbaV0uZkZvcm1hdCwgZ1JlY3NbaV0uZk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZy5BU2hpZnQsIHBhY2tpbmcuQUJpdHMsCkBAIC0yOTcsNyArMzMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nLkdTaGlmdCwgcGFja2luZy5HQml0cywKICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nLkJTaGlmdCwgcGFja2luZy5CQml0cyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLAorICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICJwaXhlbCBmb3JtYXQgWyVkXSAlcyBoYXMgbm8gcGFja2luZ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBnUmVjc1tpXS5mRm9ybWF0LCBnUmVjc1tpXS5mTmFtZSk7CiAgICAgICAgIH0KQEAgLTMxMCwxOCArMzQ1LDE4IEBACiAgICAgLy8gY2hlY2sgZGVmYXVsdCAmIHNldCB0cmFuc3BhcmVudAogICAgIGlmICghbUZpbmlzaGVkU3RhZ2VPbmUpIHsKIAotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiQkVHSU46IHRlc3RpbmcgYml0bWFwIHRyYW5zcGFyZW5jeSIpOworICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICJCRUdJTjogdGVzdGluZyBiaXRtYXAgdHJhbnNwYXJlbmN5Iik7CiAKICAgICAgICAgLy9jaGVjayB0byBtYWtlIHN1cmUgaXQgaXMgbm90IHRyYW5zcGFyZW50CiAgICAgICAgIGlmIChldnQtPmRhdGEuZHJhdy5kYXRhLmJpdG1hcC5mb3JtYXQgPT0ga1JHQkFfODg4OF9BTlBCaXRtYXBGb3JtYXQpIHsKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJiaXRtYXAgZGVmYXVsdCBmb3JtYXQgaXMgdHJhbnNwYXJlbnQiKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgImJpdG1hcCBkZWZhdWx0IGZvcm1hdCBpcyB0cmFuc3BhcmVudCIpOwogICAgICAgICB9CiAKICAgICAgICAgLy9tYWtlIGl0IHRyYW5zcGFyZW50IChhbnkgbm9uLW51bGwgdmFsdWUgd2lsbCBzZXQgaXQgdG8gdHJ1ZSkKICAgICAgICAgYm9vbCB2YWx1ZSA9IHRydWU7CiAgICAgICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdGFuY2UsIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2wsICZ2YWx1ZSk7CiAgICAgICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJFcnJvciBzZXR0aW5nIHRyYW5zcGFyZW5jeS4iKTsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNldHRpbmcgdHJhbnNwYXJlbmN5LiIpOwogICAgICAgICB9CiAKICAgICAgICAgbUZpbmlzaGVkU3RhZ2VPbmUgPSB0cnVlOwpAQCAtMzMyLDEzICszNjcsMTMgQEAKIAogICAgICAgICAvL2NoZWNrIHRvIG1ha2Ugc3VyZSBpdCBpcyB0cmFuc3BhcmVudAogICAgICAgICBpZiAoZXZ0LT5kYXRhLmRyYXcuZGF0YS5iaXRtYXAuZm9ybWF0ICE9IGtSR0JBXzg4ODhfQU5QQml0bWFwRm9ybWF0KSB7Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiYml0bWFwIGRpZCBub3QgY2hhbmdlIHRvIHRyYW5zcGFyZW50IGZvcm1hdCIpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiYml0bWFwIGRpZCBub3QgY2hhbmdlIHRvIHRyYW5zcGFyZW50IGZvcm1hdCIpOwogICAgICAgICB9CiAKICAgICAgICAgLy9tYWtlIGl0IG9wYXF1ZQogICAgICAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPnNldHZhbHVlKGluc3RhbmNlLCBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sLCBOVUxMKTsKICAgICAgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNldHRpbmcgdHJhbnNwYXJlbmN5LiIpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2V0dGluZyB0cmFuc3BhcmVuY3kuIik7CiAgICAgICAgIH0KIAogICAgICAgICBtRmluaXNoZWRTdGFnZVR3byA9IHRydWU7CkBAIC0zNDgsMTAgKzM4MywxMCBAQAogCiAgICAgICAgIC8vY2hlY2sgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCB0cmFuc3BhcmVudAogICAgICAgICBpZiAoZXZ0LT5kYXRhLmRyYXcuZGF0YS5iaXRtYXAuZm9ybWF0ID09IGtSR0JBXzg4ODhfQU5QQml0bWFwRm9ybWF0KSB7Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiYml0bWFwIGRlZmF1bHQgZm9ybWF0IGlzIHRyYW5zcGFyZW50Iik7CisgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJiaXRtYXAgZGVmYXVsdCBmb3JtYXQgaXMgdHJhbnNwYXJlbnQiKTsKICAgICAgICAgfQogCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICJFTkQ6IHRlc3RpbmcgYml0bWFwIHRyYW5zcGFyZW5jeSIpOworICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICJFTkQ6IHRlc3RpbmcgYml0bWFwIHRyYW5zcGFyZW5jeSIpOwogCiAgICAgICAgIG1GaW5pc2hlZFN0YWdlVGhyZWUgPSB0cnVlOwogICAgIH0KQEAgLTM2NCwxNCArMzk5LDE0IEBACiB2b2lkIEJhY2tncm91bmRQbHVnaW46OnRlc3RfZG9tQWNjZXNzKCkgewogICAgIE5QUCBpbnN0YW5jZSA9IHRoaXMtPmluc3QoKTsKIAotICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgRE9NIEFjY2VzcyIsIGluc3RhbmNlKTsKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFRlc3RpbmcgRE9NIEFjY2VzcyIsIGluc3RhbmNlKTsKIAogICAgIC8vIEdldCB0aGUgcGx1Z2luJ3MgRE9NIG9iamVjdAogICAgIE5QT2JqZWN0KiB3aW5kb3dPYmplY3QgPSBOVUxMOwogICAgIGJyb3dzZXItPmdldHZhbHVlKGluc3RhbmNlLCBOUE5WV2luZG93TlBPYmplY3QsICZ3aW5kb3dPYmplY3QpOwogCiAgICAgaWYgKCF3aW5kb3dPYmplY3QpCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFVuYWJsZSB0byByZXRyaWV2ZSBET00gV2luZG93IiwgaW5zdGFuY2UpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFVuYWJsZSB0byByZXRyaWV2ZSBET00gV2luZG93IiwgaW5zdGFuY2UpOwogCiAgICAgLy8gUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIHRoZSBwbHVnaW4ncyBET00gb2JqZWN0CiAgICAgTlBJZGVudGlmaWVyIHRvcElkZW50aWZpZXIgPSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlmaWVyKCJ0b3AiKTsKQEAgLTM3OSw3ICs0MTQsNyBAQAogICAgIGJyb3dzZXItPmdldHByb3BlcnR5KGluc3RhbmNlLCB3aW5kb3dPYmplY3QsIHRvcElkZW50aWZpZXIsICZ0b3BPYmplY3RWYXJpYW50KTsKIAogICAgIGlmICh0b3BPYmplY3RWYXJpYW50LnR5cGUgIT0gTlBWYXJpYW50VHlwZV9PYmplY3QpCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIEludmFsaWQgVmFyaWFudCB0eXBlIGZvciBET00gUHJvcGVydHk6ICVkLCVkIiwgaW5zdGFuY2UsIHRvcE9iamVjdFZhcmlhbnQudHlwZSwgTlBWYXJpYW50VHlwZV9PYmplY3QpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIEludmFsaWQgVmFyaWFudCB0eXBlIGZvciBET00gUHJvcGVydHk6ICVkLCVkIiwgaW5zdGFuY2UsIHRvcE9iamVjdFZhcmlhbnQudHlwZSwgTlBWYXJpYW50VHlwZV9PYmplY3QpOwogfQogCiAKQEAgLTM5MSwxNCArNDI2LDE0IEBACiB2b2lkIEJhY2tncm91bmRQbHVnaW46OnRlc3RfamF2YXNjcmlwdCgpIHsKICAgICBOUFAgaW5zdGFuY2UgPSB0aGlzLT5pbnN0KCk7CiAKLSAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBUZXN0aW5nIEphdmFTY3JpcHQgQWNjZXNzIiwgaW5zdGFuY2UpOworICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVGVzdGluZyBKYXZhU2NyaXB0IEFjY2VzcyIsIGluc3RhbmNlKTsKIAogICAgIC8vIEdldCB0aGUgcGx1Z2luJ3MgRE9NIG9iamVjdAogICAgIE5QT2JqZWN0KiB3aW5kb3dPYmplY3QgPSBOVUxMOwogICAgIGJyb3dzZXItPmdldHZhbHVlKGluc3RhbmNlLCBOUE5WV2luZG93TlBPYmplY3QsICZ3aW5kb3dPYmplY3QpOwogCiAgICAgaWYgKCF3aW5kb3dPYmplY3QpCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFVuYWJsZSB0byByZXRyaWV2ZSBET00gV2luZG93IiwgaW5zdGFuY2UpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFVuYWJsZSB0byByZXRyaWV2ZSBET00gV2luZG93IiwgaW5zdGFuY2UpOwogCiAgICAgLy8gY3JlYXRlIGEgc3RyaW5nIChKUyBjb2RlKSB0aGF0IGlzIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBicm93c2VyCiAgICAgY29uc3QgY2hhcioganNTdHJpbmcgPSAiMTIwMCArIDM0IjsKQEAgLTQwOSwxNSArNDQ0LDUxIEBACiAgICAgTlBTdHJpbmcgc2NyaXB0ID0geyAoY2hhciopc3RyaW5nTWVtLCBzdHJsZW4oanNTdHJpbmcpIH07CiAgICAgTlBWYXJpYW50IHNjcmlwdFZhcmlhbnQ7CiAgICAgaWYgKCFicm93c2VyLT5ldmFsdWF0ZShpbnN0YW5jZSwgd2luZG93T2JqZWN0LCAmc2NyaXB0LCAmc2NyaXB0VmFyaWFudCkpCi0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLS0tICVwIFVuYWJsZSB0byBldmFsIHRoZSBKUy4iLCBpbnN0YW5jZSk7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgVW5hYmxlIHRvIGV2YWwgdGhlIEpTLiIsIGluc3RhbmNlKTsKIAogICAgIGlmIChzY3JpcHRWYXJpYW50LnR5cGUgPT0gTlBWYXJpYW50VHlwZV9JbnQzMikgewogICAgICAgICBpZiAoc2NyaXB0VmFyaWFudC52YWx1ZS5pbnRWYWx1ZSAhPSAxMjM0KQotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgSW52YWxpZCBWYWx1ZSBmb3IgSlMgUmV0dXJuOiAlZCwxMjM0IiwgaW5zdGFuY2UsIHNjcmlwdFZhcmlhbnQudmFsdWUuaW50VmFsdWUpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBJbnZhbGlkIFZhbHVlIGZvciBKUyBSZXR1cm46ICVkLDEyMzQiLCBpbnN0YW5jZSwgc2NyaXB0VmFyaWFudC52YWx1ZS5pbnRWYWx1ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgSW52YWxpZCBWYXJpYW50IHR5cGUgZm9yIEpTIFJldHVybjogJWQsJWQiLCBpbnN0YW5jZSwgc2NyaXB0VmFyaWFudC50eXBlLCBOUFZhcmlhbnRUeXBlX0ludDMyKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCBJbnZhbGlkIFZhcmlhbnQgdHlwZSBmb3IgSlMgUmV0dXJuOiAlZCwlZCIsIGluc3RhbmNlLCBzY3JpcHRWYXJpYW50LnR5cGUsIE5QVmFyaWFudFR5cGVfSW50MzIpOwogICAgIH0KIAogICAgIC8vIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aGluIHRoZSBicm93c2VyCiAgICAgYnJvd3Nlci0+bWVtZnJlZShzdHJpbmdNZW0pOwogfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBMb2FkIEphdmEgQ2xhc3NlcyBUZXN0cworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit2b2lkIEJhY2tncm91bmRQbHVnaW46OnRlc3RfbG9hZEphdmFDbGFzcygpIHsKKworICAgIEpOSUVudiogZW52ID0gTlVMTDsKKyAgICBpZiAoZ1ZNLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gTG9hZEphdmFUZXN0OiBmYWlsZWQgdG8gZ2V0IGVudiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gImNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbi5CYWNrZ3JvdW5kVGVzdCI7CisgICAgamNsYXNzIGJhY2tncm91bmRDbGFzcyA9IGdTeXN0ZW1JLmxvYWRKYXZhQ2xhc3MoaW5zdCgpLCBjbGFzc05hbWUpOworCisgICAgaWYoIWJhY2tncm91bmRDbGFzcykgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBMb2FkSmF2YVRlc3Q6IGZhaWxlZCB0byBsb2FkIGNsYXNzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBqbWV0aG9kSUQgY29uc3RydWN0b3IgPSBlbnYtPkdldE1ldGhvZElEKGJhY2tncm91bmRDbGFzcywgIjxpbml0PiIsICIoKVYiKTsKKyAgICBqbWV0aG9kSUQgYWRkTWV0aG9kID0gZW52LT5HZXRNZXRob2RJRChiYWNrZ3JvdW5kQ2xhc3MsICJhZGRJbnQiLCAiKElJKUkiKTsKKyAgICBqb2JqZWN0IGJhY2tncm91bmRPYmplY3QgPSBlbnYtPk5ld09iamVjdChiYWNrZ3JvdW5kQ2xhc3MsIGNvbnN0cnVjdG9yKTsKKworICAgIGlmKCFiYWNrZ3JvdW5kT2JqZWN0KSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIExvYWRKYXZhVGVzdDogZmFpbGVkIHRvIGNvbnN0cnVjdCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGppbnQgcmVzdWx0ID0gZW52LT5DYWxsSW50TWV0aG9kKGJhY2tncm91bmRPYmplY3QsIGFkZE1ldGhvZCwgMiwgMik7CisKKyAgICBpZiAocmVzdWx0ICE9IDQpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gTG9hZEphdmFUZXN0OiBpbnZhbGlkIHJlc3VsdCAoJWQgIT0gNCkiLCByZXN1bHQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmggYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2JhY2tncm91bmQvQmFja2dyb3VuZFBsdWdpbi5oCmluZGV4IDNiOWM3YmEuLmViZDc3ZDEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvYmFja2dyb3VuZC9CYWNrZ3JvdW5kUGx1Z2luLmgKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9iYWNrZ3JvdW5kL0JhY2tncm91bmRQbHVnaW4uaApAQCAtMzIsMTIgKzMyLDggQEAKIHB1YmxpYzoKICAgICBCYWNrZ3JvdW5kUGx1Z2luKE5QUCBpbnN0KTsKICAgICB2aXJ0dWFsIH5CYWNrZ3JvdW5kUGx1Z2luKCk7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRHJhd2luZ01vZGVsKEFOUERyYXdpbmdNb2RlbCk7CiAgICAgdmlydHVhbCBpbnQxNiBoYW5kbGVFdmVudChjb25zdCBBTlBFdmVudCogZXZ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VyZmFjZUNyZWF0ZWQoSk5JRW52KiBlbnYsIGpvYmplY3Qgc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VDaGFuZ2VkKGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGaXhlZFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIGpvYmplY3QgZ2V0U3VyZmFjZSgpOwogCiAgICAgLy8gVGltZXIgVGVzdGluZyBWYXJpYWJsZXMKICAgICB1aW50MzJfdCBtU3RhcnRUaW1lOwpAQCAtNTMsOSArNDksOSBAQAogCiBwcml2YXRlOgogICAgIHZvaWQgZHJhd1BsdWdpbihpbnQgc3VyZmFjZVdpZHRoLCBpbnQgc3VyZmFjZUhlaWdodCk7CisgICAgdm9pZCBkZXN0cm95U3VyZmFjZSgpOwogCiAgICAgam9iamVjdCAgICAgbV9zdXJmYWNlOwotICAgIEphdmFWTSogICAgIG1fdm07CiAKICAgICB2b2lkIHRlc3RfbG9nZ2luZygpOwogICAgIHZvaWQgdGVzdF90aW1lcnMoKTsKQEAgLTYzLDYgKzU5LDcgQEAKICAgICB2b2lkIHRlc3RfYml0bWFwX3RyYW5zcGFyZW5jeShjb25zdCBBTlBFdmVudCogZXZ0KTsKICAgICB2b2lkIHRlc3RfZG9tQWNjZXNzKCk7CiAgICAgdm9pZCB0ZXN0X2phdmFzY3JpcHQoKTsKKyAgICB2b2lkIHRlc3RfbG9hZEphdmFDbGFzcygpOwogCiB9OwogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2Zvcm0vRm9ybVBsdWdpbi5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2Zvcm0vRm9ybVBsdWdpbi5jcHAKaW5kZXggYTkyZDQ0Ny4uNWE1MzZkOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9mb3JtL0Zvcm1QbHVnaW4uY3BwCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvZm9ybS9Gb3JtUGx1Z2luLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgQU5QRXZlbnRGbGFncyBmbGFncyA9IGtLZXlfQU5QRXZlbnRGbGFnOwogICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKICAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0LCBrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CiAgICAgfQogfQogCkBAIC0yMTUsNyArMjE1LDcgQEAKIAogICAgICAgICBjYXNlIGtMaWZlY3ljbGVfQU5QRXZlbnRUeXBlOgogICAgICAgICAgICAgaWYgKGV2dC0+ZGF0YS5saWZlY3ljbGUuYWN0aW9uID09IGtMb3NlRm9jdXNfQU5QTGlmZWN5Y2xlQWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBMb29zaW5nIEZvY3VzIiwgaW5zdGFuY2UpOworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBMb29zaW5nIEZvY3VzIiwgaW5zdGFuY2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlSW5wdXQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaGlkZSB0aGUga2V5Ym9hcmQKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LT5kYXRhLmxpZmVjeWNsZS5hY3Rpb24gPT0ga0dhaW5Gb2N1c19BTlBMaWZlY3ljbGVBY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSVwIEdhaW5pbmcgRm9jdXMiLCBpbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSVwIEdhaW5pbmcgRm9jdXMiLCBpbnN0YW5jZSk7CiAgICAgICAgICAgICAgICAgbV9oYXNGb2N1cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgaW52YWwoaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMzAwLDcgKzMwMCw3IEBACiBib29sIEZvcm1QbHVnaW46OmhhbmRsZU5hdmlnYXRpb24oQU5QS2V5Q29kZSBrZXlDb2RlKSB7CiAgICAgTlBQIGluc3RhbmNlID0gdGhpcy0+aW5zdCgpOwogCi0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBSZWN2ZCBOYXYgS2V5ICVkIiwgaW5zdGFuY2UsIGtleUNvZGUpOworICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBSZWN2ZCBOYXYgS2V5ICVkIiwgaW5zdGFuY2UsIGtleUNvZGUpOwogCiAgICAgaWYgKCFtX2FjdGl2ZUlucHV0KSB7CiAgICAgICAgIGdXaW5kb3dJLnNob3dLZXlib2FyZChpbnN0YW5jZSwgdHJ1ZSk7CkBAIC0zNTAsNyArMzUwLDcgQEAKICAgICBpbnB1dC0+dGV4dFtpbnB1dC0+Y2hhclB0cl0gPSBzdGF0aWNfY2FzdDxjaGFyPih1bmljaGFyKTsKICAgICBpbnB1dC0+Y2hhclB0cisrOwogCi0gICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBUZXh0OiAgJWMiLCBpbnN0YW5jZSwgdW5pY2hhcik7CisgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSVwIFRleHQ6ICAlYyIsIGluc3RhbmNlLCB1bmljaGFyKTsKIH0KIAogdm9pZCBGb3JtUGx1Z2luOjpzY3JvbGxJbnRvVmlldyhUZXh0SW5wdXQqIGlucHV0KSB7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2hlbGxvLWpuaS5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2hlbGxvLWpuaS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODliN2UuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9oZWxsby1qbmkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGpuaS5oPgotI2luY2x1ZGUgPEpOSUhlbHAuaD4KLSNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KLQotI2RlZmluZSBFWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotc3RhdGljIGpzdHJpbmcgc3RyaW5nRnJvbUpOSSggSk5JRW52KiBlbnYsIGpvYmplY3QgdGhpeiApCi17Ci0gICAgcmV0dXJuIGVudi0+TmV3U3RyaW5nVVRGKCJIZWxsbyBmcm9tIEpOSSAhIik7Ci19Ci0KLS8qCi0gKiBKTkkgcmVnaXN0cmF0aW9uLgotICovCi1zdGF0aWMgSk5JTmF0aXZlTWV0aG9kIGdKYXZhU2FtcGxlUGx1Z2luU3R1Yk1ldGhvZHNbXSA9IHsKLSAgICB7ICJuYXRpdmVTdHJpbmdGcm9tSk5JIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQqKSBzdHJpbmdGcm9tSk5JIH0sCi19OwotCi1FWFBPUlQgamludCBKTklfT25Mb2FkKEphdmFWTSogdm0sIHZvaWQqIHJlc2VydmVkKSB7Ci0KLSAgICBKTklFbnYqIGVudiA9IE5VTEw7Ci0KLSAgICBpZiAodm0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSykgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgam5pUmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwgImNvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9TYW1wbGVQbHVnaW5TdHViIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0phdmFTYW1wbGVQbHVnaW5TdHViTWV0aG9kcywgTkVMRU0oZ0phdmFTYW1wbGVQbHVnaW5TdHViTWV0aG9kcykpOwotCi0gICAgcmV0dXJuIEpOSV9WRVJTSU9OXzFfNDsKLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvam5pLWJyaWRnZS5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL2puaS1icmlkZ2UuY3BwCmluZGV4IDQ1ZWNkNTQuLjliYThhMzIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvam5pLWJyaWRnZS5jcHAKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9qbmktYnJpZGdlLmNwcApAQCAtMjMsNTEgKzIzLDQ4IEBACiAKICNkZWZpbmUgRVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCiAKLXN0YXRpYyBTdXJmYWNlU3ViUGx1Z2luKiBnZXRQbHVnaW5PYmplY3QoaW50IG5wcCkgewotICAgIE5QUCBpbnN0YW5jZSA9IChOUFApbnBwOwotICAgIFBsdWdpbk9iamVjdCogb2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luT2JqZWN0Kj4oaW5zdGFuY2UtPnBkYXRhKTsKLSAgICBpZiAob2JqICYmIG9iai0+YWN0aXZlUGx1Z2luCi0gICAgICAgICAgICAmJiBvYmotPmFjdGl2ZVBsdWdpbi0+c3VwcG9ydHNEcmF3aW5nTW9kZWwoa1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsKSkgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZVN1YlBsdWdpbio+KG9iai0+YWN0aXZlUGx1Z2luKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19CitleHRlcm4gQU5QRXZlbnRJbnRlcmZhY2VWMCAgICAgICAgIGdFdmVudEk7CiAKIHN0YXRpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKEpOSUVudiogZW52LCBqb2JqZWN0IHRoaXosIGppbnQgbnBwLCBqb2JqZWN0IHN1cmZhY2UpIHsKLSAgICBTdXJmYWNlU3ViUGx1Z2luKiBvYmogPSBnZXRQbHVnaW5PYmplY3QobnBwKTsKIAotICAgIC8vVE9ETyB3aHkgaXMgdGhpcyBWTSBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGluIE5QX0lOSVQuLi4KLSAgICBKYXZhVk0qIHZtID0gTlVMTDsKLSAgICBlbnYtPkdldEphdmFWTSgmdm0pOworICAgIC8vIHNlbmQgY3VzdG9tIGV2ZW50CisgICAgQU5QRXZlbnQgZXZlbnQ7CisgICAgZXZlbnQuaW5TaXplID0gc2l6ZW9mKEFOUEV2ZW50KTsKKyAgICBldmVudC5ldmVudFR5cGUgPSBrQ3VzdG9tX0FOUEV2ZW50VHlwZTsKKyAgICBldmVudC5kYXRhLm90aGVyWzBdID0ga1N1cmZhY2VDcmVhdGVkX0N1c3RvbUV2ZW50OwogCi0gICAgb2JqLT5zdXJmYWNlQ3JlYXRlZChlbnYsIHN1cmZhY2UpOworICAgIGdFdmVudEkucG9zdEV2ZW50KChOUFApbnBwLCAmZXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChKTklFbnYqIGVudiwgam9iamVjdCB0aGl6LCBqaW50IG5wcCwgamludCBmb3JtYXQsIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0KSB7Ci0gICAgU3VyZmFjZVN1YlBsdWdpbiogb2JqID0gZ2V0UGx1Z2luT2JqZWN0KG5wcCk7Ci0gICAgb2JqLT5zdXJmYWNlQ2hhbmdlZChmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIC8vIHNlbmQgY3VzdG9tIGV2ZW50CisgICAgQU5QRXZlbnQgZXZlbnQ7CisgICAgZXZlbnQuaW5TaXplID0gc2l6ZW9mKEFOUEV2ZW50KTsKKyAgICBldmVudC5ldmVudFR5cGUgPSBrQ3VzdG9tX0FOUEV2ZW50VHlwZTsKKyAgICBldmVudC5kYXRhLm90aGVyWzBdID0ga1N1cmZhY2VDaGFuZ2VkX0N1c3RvbUV2ZW50OworICAgIGV2ZW50LmRhdGEub3RoZXJbMV0gPSB3aWR0aDsKKyAgICBldmVudC5kYXRhLm90aGVyWzJdID0gaGVpZ2h0OworCisgICAgZ0V2ZW50SS5wb3N0RXZlbnQoKE5QUClucHAsICZldmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN1cmZhY2VEZXN0cm95ZWQoSk5JRW52KiBlbnYsIGpvYmplY3QgdGhpeiwgamludCBucHApIHsKLSAgICBTdXJmYWNlU3ViUGx1Z2luKiBvYmogPSBnZXRQbHVnaW5PYmplY3QobnBwKTsKLSAgICBpZiAob2JqKSB7Ci0gICAgICAgIG9iai0+c3VyZmFjZURlc3Ryb3llZCgpOwotICAgIH0KLX0KKyAgICAvLyBzZW5kIGN1c3RvbSBldmVudAorICAgIEFOUEV2ZW50IGV2ZW50OworICAgIGV2ZW50LmluU2l6ZSA9IHNpemVvZihBTlBFdmVudCk7CisgICAgZXZlbnQuZXZlbnRUeXBlID0ga0N1c3RvbV9BTlBFdmVudFR5cGU7CisgICAgZXZlbnQuZGF0YS5vdGhlclswXSA9IGtTdXJmYWNlRGVzdHJveWVkX0N1c3RvbUV2ZW50OwogCi1zdGF0aWMgamJvb2xlYW4gaXNGaXhlZFN1cmZhY2UoSk5JRW52KiBlbnYsIGpvYmplY3QgdGhpeiwgamludCBucHApIHsKLSAgICBTdXJmYWNlU3ViUGx1Z2luKiBvYmogPSBnZXRQbHVnaW5PYmplY3QobnBwKTsKLSAgICByZXR1cm4gb2JqLT5pc0ZpeGVkU3VyZmFjZSgpOworICAgIGdFdmVudEkucG9zdEV2ZW50KChOUFApbnBwLCAmZXZlbnQpOwogfQogCiAvKgogICogSk5JIHJlZ2lzdHJhdGlvbi4KICAqLwotc3RhdGljIEpOSU5hdGl2ZU1ldGhvZCBnSmF2YVNhbXBsZVBsdWdpblN0dWJNZXRob2RzW10gPSB7Ci0gICAgeyAibmF0aXZlU3VyZmFjZUNyZWF0ZWQiLCAiKElMYW5kcm9pZC92aWV3L1ZpZXc7KVYiLCAodm9pZCopIHN1cmZhY2VDcmVhdGVkIH0sCitzdGF0aWMgSk5JTmF0aXZlTWV0aG9kIGdQYWludFN1cmZhY2VNZXRob2RzW10gPSB7CisgICAgeyAibmF0aXZlU3VyZmFjZUNyZWF0ZWQiLCAiKEkpViIsICh2b2lkKikgc3VyZmFjZUNyZWF0ZWQgfSwKICAgICB7ICJuYXRpdmVTdXJmYWNlQ2hhbmdlZCIsICIoSUlJSSlWIiwgKHZvaWQqKSBzdXJmYWNlQ2hhbmdlZCB9LAogICAgIHsgIm5hdGl2ZVN1cmZhY2VEZXN0cm95ZWQiLCAiKEkpViIsICh2b2lkKikgc3VyZmFjZURlc3Ryb3llZCB9LAotICAgIHsgIm5hdGl2ZUlzRml4ZWRTdXJmYWNlIiwgIihJKVoiLCAodm9pZCopIGlzRml4ZWRTdXJmYWNlIH0sCiB9OwogCiBFWFBPUlQgamludCBKTklfT25Mb2FkKEphdmFWTSogdm0sIHZvaWQqIHJlc2VydmVkKSB7CkBAIC03OCw4ICs3NSw4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBqbmlSZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LCAiY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpblN0dWIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSmF2YVNhbXBsZVBsdWdpblN0dWJNZXRob2RzLCBORUxFTShnSmF2YVNhbXBsZVBsdWdpblN0dWJNZXRob2RzKSk7CisgICAgam5pUmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwgImNvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9QYWludFN1cmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnUGFpbnRTdXJmYWNlTWV0aG9kcywgTkVMRU0oZ1BhaW50U3VyZmFjZU1ldGhvZHMpKTsKIAogICAgIHJldHVybiBKTklfVkVSU0lPTl8xXzQ7CiB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uY3BwIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9tYWluLmNwcAppbmRleCBkMDAwOTFmLi4zZThmZWU3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uY3BwCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbWFpbi5jcHAKQEAgLTMyLDkgKzMyLDEzIEBACiAjaW5jbHVkZSAiQXVkaW9QbHVnaW4uaCIKICNpbmNsdWRlICJCYWNrZ3JvdW5kUGx1Z2luLmgiCiAjaW5jbHVkZSAiRm9ybVBsdWdpbi5oIgorI2luY2x1ZGUgIk5hdmlnYXRpb25QbHVnaW4uaCIKICNpbmNsdWRlICJQYWludFBsdWdpbi5oIgorI2luY2x1ZGUgIlZpZGVvUGx1Z2luLmgiCiAKIE5QTmV0c2NhcGVGdW5jcyogYnJvd3NlcjsKK0phdmFWTSogZ1ZNOworCiAjZGVmaW5lIEVYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQogCiBOUEVycm9yIE5QUF9OZXcoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLApAQCAtNTYsNyArNjAsNyBAQAogTlBFcnJvciBOUFBfU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwogCiBleHRlcm4gIkMiIHsKLUVYUE9SVCBOUEVycm9yIE5QX0luaXRpYWxpemUoTlBOZXRzY2FwZUZ1bmNzKiBicm93c2VyRnVuY3MsIE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCB2b2lkICpqYXZhX2Vudiwgdm9pZCAqYXBwbGljYXRpb25fY29udGV4dCk7CitFWFBPUlQgTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVGdW5jcyogYnJvd3NlckZ1bmNzLCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcywgdm9pZCAqamF2YV9lbnYpOwogRVhQT1JUIE5QRXJyb3IgTlBfR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwogRVhQT1JUIGNvbnN0IGNoYXIqIE5QX0dldE1JTUVEZXNjcmlwdGlvbih2b2lkKTsKIEVYUE9SVCB2b2lkIE5QX1NodXRkb3duKHZvaWQpOwpAQCAtNjUsNiArNjksNyBAQAogQU5QQXVkaW9UcmFja0ludGVyZmFjZVYwICAgIGdTb3VuZEk7CiBBTlBCaXRtYXBJbnRlcmZhY2VWMCAgICAgICAgZ0JpdG1hcEk7CiBBTlBDYW52YXNJbnRlcmZhY2VWMCAgICAgICAgZ0NhbnZhc0k7CitBTlBFdmVudEludGVyZmFjZVYwICAgICAgICAgZ0V2ZW50STsKIEFOUExvZ0ludGVyZmFjZVYwICAgICAgICAgICBnTG9nSTsKIEFOUFBhaW50SW50ZXJmYWNlVjAgICAgICAgICBnUGFpbnRJOwogQU5QUGF0aEludGVyZmFjZVYwICAgICAgICAgIGdQYXRoSTsKQEAgLTc2LDcgKzgxLDcgQEAKICNkZWZpbmUgQVJSQVlfQ09VTlQoYXJyYXkpICAgICAgKHNpemVvZihhcnJheSkgLyBzaXplb2YoYXJyYXlbMF0pKQogI2RlZmluZSBERUJVR19QTFVHSU5fRVZFTlRTICAgICAwCiAKLU5QRXJyb3IgTlBfSW5pdGlhbGl6ZShOUE5ldHNjYXBlRnVuY3MqIGJyb3dzZXJGdW5jcywgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MsIHZvaWQgKmphdmFfZW52LCB2b2lkICphcHBsaWNhdGlvbl9jb250ZXh0KQorTlBFcnJvciBOUF9Jbml0aWFsaXplKE5QTmV0c2NhcGVGdW5jcyogYnJvd3NlckZ1bmNzLCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcywgdm9pZCAqamF2YV9lbnYpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBmdW5jdGlvbiB0YWJsZSBlcXVhbCBvciBsYXJnZXIgdGhhbiB3ZSBhcmUgYnVpbHQgYWdhaW5zdC4KICAgICBpZiAoYnJvd3NlckZ1bmNzLT5zaXplIDwgc2l6ZW9mKE5QTmV0c2NhcGVGdW5jcykpIHsKQEAgLTExMiw2ICsxMTcsNyBAQAogICAgICAgICB7IGtBdWRpb1RyYWNrSW50ZXJmYWNlVjBfQU5QR2V0VmFsdWUsICAgc2l6ZW9mKGdTb3VuZEkpLCAgICAmZ1NvdW5kSSB9LAogICAgICAgICB7IGtCaXRtYXBJbnRlcmZhY2VWMF9BTlBHZXRWYWx1ZSwgICAgICAgc2l6ZW9mKGdCaXRtYXBJKSwgICAmZ0JpdG1hcEkgfSwKICAgICAgICAgeyBrQ2FudmFzSW50ZXJmYWNlVjBfQU5QR2V0VmFsdWUsICAgICAgIHNpemVvZihnQ2FudmFzSSksICAgJmdDYW52YXNJIH0sCisgICAgICAgIHsga0V2ZW50SW50ZXJmYWNlVjBfQU5QR2V0VmFsdWUsICAgICAgICBzaXplb2YoZ0V2ZW50SSksICAgICZnRXZlbnRJIH0sCiAgICAgICAgIHsga0xvZ0ludGVyZmFjZVYwX0FOUEdldFZhbHVlLCAgICAgICAgICBzaXplb2YoZ0xvZ0kpLCAgICAgICZnTG9nSSB9LAogICAgICAgICB7IGtQYWludEludGVyZmFjZVYwX0FOUEdldFZhbHVlLCAgICAgICAgc2l6ZW9mKGdQYWludEkpLCAgICAmZ1BhaW50SSB9LAogICAgICAgICB7IGtQYXRoSW50ZXJmYWNlVjBfQU5QR2V0VmFsdWUsICAgICAgICAgc2l6ZW9mKGdQYXRoSSksICAgICAmZ1BhdGhJIH0sCkBAIC0xMjgsNiArMTM0LDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBzdG9yZSB0aGUgSmF2YVZNIGZvciB0aGUgcGx1Z2luCisgICAgSk5JRW52KiBlbnYgPSAoSk5JRW52KilqYXZhX2VudjsKKyAgICBlbnYtPkdldEphdmFWTSgmZ1ZNKTsKKwogICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKIH0KIApAQCAtMTUwLDkgKzE2MCw4IEBACiAKICAgICAvLyBTY3JpcHRpbmcgZnVuY3Rpb25zIGFwcGVhcmVkIGluIE5QQVBJIHZlcnNpb24gMTQKICAgICBpZiAoYnJvd3Nlci0+dmVyc2lvbiA+PSAxNCkgewotICAgIGluc3RhbmNlLT5wZGF0YSA9IGJyb3dzZXItPmNyZWF0ZW9iamVjdCAoaW5zdGFuY2UsIGdldFBsdWdpbkNsYXNzKCkpOwotICAgIG9iaiA9IHN0YXRpY19jYXN0PFBsdWdpbk9iamVjdCo+KGluc3RhbmNlLT5wZGF0YSk7Ci0gICAgYnplcm8ob2JqLCBzaXplb2YoKm9iaikpOworICAgICAgICBpbnN0YW5jZS0+cGRhdGEgPSBicm93c2VyLT5jcmVhdGVvYmplY3QgKGluc3RhbmNlLCBnZXRQbHVnaW5DbGFzcygpKTsKKyAgICAgICAgb2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luT2JqZWN0Kj4oaW5zdGFuY2UtPnBkYXRhKTsKICAgICB9CiAgICAgLyogRU5EOiBTVEFOREFSRCBQTFVHSU4gRlJBTUVXT1JLICovCiAKQEAgLTE2NywzNCArMTc2LDI1IEBACiAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICJTdXJmYWNlIikpIHsKICAgICAgICAgICAgICAgIG1vZGVsID0ga1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBEcmF3aW5nTW9kZWwgaXMgJWQiLCBpbnN0YW5jZSwgbW9kZWwpOworICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLS0tICVwIERyYXdpbmdNb2RlbCBpcyAlZCIsIGluc3RhbmNlLCBtb2RlbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIG5vdGlmeSB0aGUgcGx1Z2luIEFQSSBvZiB0aGUgbG9jYXRpb24gb2YgdGhlIGphdmEgaW50ZXJmYWNlCi0gICAgY2hhciogY2xhc3NOYW1lID0gImNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbi5TYW1wbGVQbHVnaW5TdHViIjsKLSAgICBOUEVycm9yIG5wRXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdGFuY2UsIGtTZXRQbHVnaW5TdHViSmF2YUNsYXNzTmFtZV9BTlBTZXRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2xhc3NOYW1lKSk7Ci0gICAgaWYgKG5wRXJyKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJzZXQgY2xhc3MgZXJyICVkIiwgbnBFcnIpOwotICAgICAgICByZXR1cm4gbnBFcnI7Ci0gICAgfQotCiAgICAgLy8gbm90aWZ5IHRoZSBwbHVnaW4gQVBJIG9mIHRoZSBkcmF3aW5nIG1vZGVsIHdlIHdpc2ggdG8gdXNlLiBUaGlzIG11c3QgYmUKICAgICAvLyBkb25lIHByaW9yIHRvIGNyZWF0aW5nIGNlcnRhaW4gc3ViUGx1Z2luIG9iamVjdHMgKGUuZy4gc3VyZmFjZVZpZXdzKQogICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdGFuY2UsIGtSZXF1ZXN0RHJhd2luZ01vZGVsX0FOUFNldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1vZGVsKSk7CiAgICAgaWYgKGVycikgewotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAicmVxdWVzdCBtb2RlbCAlZCBlcnIgJWQiLCBtb2RlbCwgZXJyKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAicmVxdWVzdCBtb2RlbCAlZCBlcnIgJWQiLCBtb2RlbCwgZXJyKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiBwYXRoID0gZ1N5c3RlbUkuZ2V0QXBwbGljYXRpb25EYXRhRGlyZWN0b3J5KCk7CiAgICAgaWYgKHBhdGgpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIkFwcGxpY2F0aW9uIGRhdGEgZGlyIGlzICVzIiwgcGF0aCk7CisgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIkFwcGxpY2F0aW9uIGRhdGEgZGlyIGlzICVzIiwgcGF0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIkNhbid0IGZpbmQgQXBwbGljYXRpb24gZGF0YSBkaXIiKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiQ2FuJ3QgZmluZCBBcHBsaWNhdGlvbiBkYXRhIGRpciIpOwogICAgIH0KIAogICAgIC8vIHNlbGVjdCB0aGUgcGx1Z2luVHlwZQpAQCAtMjE2LDM1ICsyMTYsNjIgQEAKICAgICAgICAgICAgICAgICBvYmotPnBsdWdpblR5cGUgPSBrRm9ybV9QbHVnaW5UeXBlOwogICAgICAgICAgICAgICAgIG9iai0+YWN0aXZlUGx1Z2luID0gbmV3IEZvcm1QbHVnaW4oaW5zdGFuY2UpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiTmF2aWdhdGlvbiIpKSB7CisgICAgICAgICAgICAgICAgb2JqLT5wbHVnaW5UeXBlID0ga05hdmlnYXRpb25fUGx1Z2luVHlwZTsKKyAgICAgICAgICAgICAgICBvYmotPmFjdGl2ZVBsdWdpbiA9IG5ldyBOYXZpZ2F0aW9uUGx1Z2luKGluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIlBhaW50IikpIHsKICAgICAgICAgICAgICAgICBvYmotPnBsdWdpblR5cGUgPSBrUGFpbnRfUGx1Z2luVHlwZTsKICAgICAgICAgICAgICAgICBvYmotPmFjdGl2ZVBsdWdpbiA9IG5ldyBQYWludFBsdWdpbihpbnN0YW5jZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLS0tICVwIFBsdWdpblR5cGUgaXMgJWQiLCBpbnN0YW5jZSwgb2JqLT5wbHVnaW5UeXBlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIlZpZGVvIikpIHsKKyAgICAgICAgICAgICAgICBvYmotPnBsdWdpblR5cGUgPSBrVmlkZW9fUGx1Z2luVHlwZTsKKyAgICAgICAgICAgICAgICBvYmotPmFjdGl2ZVBsdWdpbiA9IG5ldyBWaWRlb1BsdWdpbihpbnN0YW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tLS0gJXAgUGx1Z2luVHlwZSBpcyAlZCIsIGluc3RhbmNlLCBvYmotPnBsdWdpblR5cGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBpZiBubyBwbHVnaW5UeXBlIGlzIHNwZWNpZmllZCB0aGVuIGRlZmF1bHQgdG8gQW5pbWF0aW9uCiAgICAgaWYgKCFvYmotPnBsdWdpblR5cGUpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBObyBQbHVnaW5UeXBlIGF0dHJpYnV0ZSB3YXMgZm91bmQiLCBpbnN0YW5jZSk7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0tLSAlcCBObyBQbHVnaW5UeXBlIGF0dHJpYnV0ZSB3YXMgZm91bmQiLCBpbnN0YW5jZSk7CiAgICAgICAgIG9iai0+cGx1Z2luVHlwZSA9IGtBbmltYXRpb25fUGx1Z2luVHlwZTsKICAgICAgICAgb2JqLT5hY3RpdmVQbHVnaW4gPSBuZXcgQmFsbEFuaW1hdGlvbihpbnN0YW5jZSk7CiAgICAgfQogCiAgICAgLy8gY2hlY2sgdG8gZW5zdXJlIHRoZSBwbHVnaW5UeXBlIHN1cHBvcnRzIHRoZSBtb2RlbAogICAgIGlmICghb2JqLT5hY3RpdmVQbHVnaW4tPnN1cHBvcnRzRHJhd2luZ01vZGVsKG1vZGVsKSkgewotICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLS0tICVwIFVuc3VwcG9ydGVkIERyYXdpbmdNb2RlbCAoJWQpIiwgaW5zdGFuY2UsIG1vZGVsKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiLS0tLS0tICVwIFVuc3VwcG9ydGVkIERyYXdpbmdNb2RlbCAoJWQpIiwgaW5zdGFuY2UsIG1vZGVsKTsKICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICAgfQogCisgICAgLy8gaWYgdGhlIHBsdWdpbiB1c2VzIHRoZSBzdXJmYWNlIGRyYXdpbmcgbW9kZWwgdGhlbiBzZXQgdGhlIGphdmEgY29udGV4dAorICAgIGlmIChtb2RlbCA9PSBrU3VyZmFjZV9BTlBEcmF3aW5nTW9kZWwpIHsKKyAgICAgICAgU3VyZmFjZVN1YlBsdWdpbiogc3VyZmFjZVBsdWdpbiA9IHN0YXRpY19jYXN0PFN1cmZhY2VTdWJQbHVnaW4qPihvYmotPmFjdGl2ZVBsdWdpbik7CisKKyAgICAgICAgam9iamVjdCBjb250ZXh0OworICAgICAgICBOUEVycm9yIGVyciA9IGJyb3dzZXItPmdldHZhbHVlKGluc3RhbmNlLCBrSmF2YUNvbnRleHRfQU5QR2V0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KCZjb250ZXh0KSk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgInJlcXVlc3QgY29udGV4dCBlcnI6ICVkIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgICBzdXJmYWNlUGx1Z2luLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIH0KKworCiAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogfQogCiBOUEVycm9yIE5QUF9EZXN0cm95KE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKQogewogICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3RhbmNlLT5wZGF0YTsKLSAgICBkZWxldGUgb2JqLT5hY3RpdmVQbHVnaW47CisgICAgaWYgKG9iaikgeworICAgICAgICBkZWxldGUgb2JqLT5hY3RpdmVQbHVnaW47CisgICAgICAgIGJyb3dzZXItPnJlbGVhc2VvYmplY3QoJm9iai0+aGVhZGVyKTsKKyAgICB9CiAKICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CkBAIC0zMDYsNyArMzMzLDcgQEAKICAgICAgICAgICAgICAgICBzdGF0aWMgQU5QQml0bWFwRm9ybWF0IGN1cnJlbnRGb3JtYXQgPSAtMTsKICAgICAgICAgICAgICAgICBpZiAoZXZ0LT5kYXRhLmRyYXcuZGF0YS5iaXRtYXAuZm9ybWF0ICE9IGN1cnJlbnRGb3JtYXQpIHsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1hdCA9IGV2dC0+ZGF0YS5kcmF3LmRhdGEuYml0bWFwLmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGluc3RhbmNlLCBrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgRHJhdyAoYml0bWFwKSIKKyAgICAgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBEcmF3IChiaXRtYXApIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGlwPSVkLCVkLCVkLCVkIGZvcm1hdD0lZCIsIGluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LT5kYXRhLmRyYXcuY2xpcC5sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LT5kYXRhLmRyYXcuY2xpcC50b3AsCkBAIC0zMTgsNyArMzQ1LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Uga0tleV9BTlBFdmVudFR5cGU6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBLZXkgYWN0aW9uPSVkIgorICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBLZXkgYWN0aW9uPSVkIgogICAgICAgICAgICAgICAgICAgICAgICIgY29kZT0lZCB2Y29kZT0lZCB1bmljaGFyPSVkIHJlcGVhdD0lZCBtb2RzPSV4IiwgaW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgZXZ0LT5kYXRhLmtleS5hY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgZXZ0LT5kYXRhLmtleS5uYXRpdmVDb2RlLApAQCAtMzI5LDM3ICszNTYsMzcgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Uga0xpZmVjeWNsZV9BTlBFdmVudFR5cGU6Ci0gICAgICAgICAgICBnTG9nSS5sb2coaW5zdGFuY2UsIGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBMaWZlY3ljbGUgYWN0aW9uPSVkIiwKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgTGlmZWN5Y2xlIGFjdGlvbj0lZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCBldnQtPmRhdGEubGlmZWN5Y2xlLmFjdGlvbik7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgIGNhc2Uga1RvdWNoX0FOUEV2ZW50VHlwZToKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIFRvdWNoIGFjdGlvbj0lZCBbJWQgJWRdIiwKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgVG91Y2ggYWN0aW9uPSVkIFslZCAlZF0iLAogICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCBldnQtPmRhdGEudG91Y2guYWN0aW9uLCBldnQtPmRhdGEudG91Y2gueCwKICAgICAgICAgICAgICAgICAgICAgICBldnQtPmRhdGEudG91Y2gueSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgIGNhc2Uga01vdXNlX0FOUEV2ZW50VHlwZToKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIE1vdXNlIGFjdGlvbj0lZCBbJWQgJWRdIiwKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0gJXAgTW91c2UgYWN0aW9uPSVkIFslZCAlZF0iLAogICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCBldnQtPmRhdGEubW91c2UuYWN0aW9uLCBldnQtPmRhdGEubW91c2UueCwKICAgICAgICAgICAgICAgICAgICAgICBldnQtPmRhdGEubW91c2UueSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgIGNhc2Uga1Zpc2libGVSZWN0X0FOUEV2ZW50VHlwZToKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0RlYnVnX0FOUExvZ1R5cGUsICItLS0tICVwIFZpc2libGVSZWN0IFslZCAlZCAlZCAlZF0iLAorICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSAlcCBWaXNpYmxlUmVjdCBbJWQgJWQgJWQgJWRdIiwKICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgZXZ0LT5kYXRhLnZpc2libGVSZWN0LnJlY3QubGVmdCwgZXZ0LT5kYXRhLnZpc2libGVSZWN0LnJlY3QudG9wLAogICAgICAgICAgICAgICAgICAgICAgIGV2dC0+ZGF0YS52aXNpYmxlUmVjdC5yZWN0LnJpZ2h0LCBldnQtPmRhdGEudmlzaWJsZVJlY3QucmVjdC5ib3R0b20pOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICItLS0tICVwIFVua25vd24gRXZlbnQgWyVkXSIsCisgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICItLS0tICVwIFVua25vd24gRXZlbnQgWyVkXSIsCiAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsIGV2dC0+ZXZlbnRUeXBlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYoIW9iai0+YWN0aXZlUGx1Z2luKSB7Ci0gICAgICAgIGdMb2dJLmxvZyhpbnN0YW5jZSwga0Vycm9yX0FOUExvZ1R5cGUsICJ0aGUgYWN0aXZlIHBsdWdpbiBpcyBudWxsLiIpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICJ0aGUgYWN0aXZlIHBsdWdpbiBpcyBudWxsLiIpOwogICAgICAgICByZXR1cm4gMDsgLy8gdW5rbm93biBvciB1bmhhbmRsZWQgZXZlbnQKICAgICB9CiAgICAgZWxzZSB7CkBAIC0zODksMTkgKzQxNiwzNyBAQAogICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogfQogCi1OUEVycm9yIE5QUF9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkKK05QRXJyb3IgTlBQX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogewogICAgIGlmICh2YXJpYWJsZSA9PSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KSB7CiAgICAgICAgIHZvaWQgKip2ID0gKHZvaWQgKiopdmFsdWU7CiAgICAgICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3RhbmNlLT5wZGF0YTsKIAogICAgICAgICBpZiAob2JqKQotICAgICAgICAgICAgYnJvd3Nlci0+cmV0YWlub2JqZWN0KChOUE9iamVjdCopb2JqKTsKKyAgICAgICAgICAgIGJyb3dzZXItPnJldGFpbm9iamVjdCgmb2JqLT5oZWFkZXIpOwogCi0gICAgICAgICp2ID0gb2JqOworICAgICAgICAqdiA9ICYob2JqLT5oZWFkZXIpOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAgICAgfQogCisgICAgaWYgKHZhcmlhYmxlID09IGtKYXZhU3VyZmFjZV9BTlBHZXRWYWx1ZSkgeworICAgICAgICAvL2dldCB0aGUgc3VyZmFjZSBzdWItcGx1Z2luCisgICAgICAgIFBsdWdpbk9iamVjdCogb2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luT2JqZWN0Kj4oaW5zdGFuY2UtPnBkYXRhKTsKKyAgICAgICAgaWYgKG9iaiAmJiBvYmotPmFjdGl2ZVBsdWdpbikgeworCisgICAgICAgICAgICBpZihvYmotPmFjdGl2ZVBsdWdpbi0+c3VwcG9ydHNEcmF3aW5nTW9kZWwoa1N1cmZhY2VfQU5QRHJhd2luZ01vZGVsKSkgeworICAgICAgICAgICAgICAgIFN1cmZhY2VTdWJQbHVnaW4qIHBsdWdpbiA9IHN0YXRpY19jYXN0PFN1cmZhY2VTdWJQbHVnaW4qPihvYmotPmFjdGl2ZVBsdWdpbik7CisgICAgICAgICAgICAgICAgam9iamVjdCogc3VyZmFjZSA9IHN0YXRpY19jYXN0PGpvYmplY3QqPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgKnN1cmZhY2UgPSBwbHVnaW4tPmdldFN1cmZhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tICVwIFRyaWVkIHRvIHJldHJpZXZlIHN1cmZhY2UgZm9yIG5vbi1zdXJmYWNlIHBsdWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogfQogCmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL21haW4uaCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbWFpbi5oCmluZGV4IDhhZDJjY2UuLjY2NjI5ZTYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbWFpbi5oCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbWFpbi5oCkBAIC0yOCw1ICsyOCw3IEBACiAjaW5jbHVkZSA8bnBydW50aW1lLmg+CiAjaW5jbHVkZSAiYW5kcm9pZF9ucGFwaS5oIgogI2luY2x1ZGUgIkFOUFN1cmZhY2VfbnBhcGkuaCIKKyNpbmNsdWRlICJBTlBTeXN0ZW1fbnBhcGkuaCIKIAogZXh0ZXJuIE5QTmV0c2NhcGVGdW5jcyogYnJvd3NlcjsKK2V4dGVybiBKYXZhVk0qIGdWTTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uUGx1Z2luLmNwcCBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uUGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY2N2E0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9uYXZpZ2F0aW9uL05hdmlnYXRpb25QbHVnaW4uY3BwCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk5hdmlnYXRpb25QbHVnaW4uaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitleHRlcm4gTlBOZXRzY2FwZUZ1bmNzKiAgICAgICAgIGJyb3dzZXI7CitleHRlcm4gQU5QTG9nSW50ZXJmYWNlVjAgICAgICAgIGdMb2dJOworZXh0ZXJuIEFOUENhbnZhc0ludGVyZmFjZVYwICAgICBnQ2FudmFzSTsKK2V4dGVybiBBTlBQYWludEludGVyZmFjZVYwICAgICAgZ1BhaW50STsKK2V4dGVybiBBTlBUeXBlZmFjZUludGVyZmFjZVYwICAgZ1R5cGVmYWNlSTsKK2V4dGVybiBBTlBXaW5kb3dJbnRlcmZhY2VWMCAgICAgZ1dpbmRvd0k7CisKKworc3RhdGljIHZvaWQgaW52YWwoTlBQIGluc3RhbmNlKSB7CisgICAgYnJvd3Nlci0+aW52YWxpZGF0ZXJlY3QoaW5zdGFuY2UsIE5VTEwpOworfQorCitzdGF0aWMgdWludDE2IHJuZDE2KGZsb2F0IHgsIGludCBpbnNldCkgeworICAgIGludCBpeCA9IChpbnQpcm91bmRmKHgpICsgaW5zZXQ7CisgICAgaWYgKGl4IDwgMCkgeworICAgICAgICBpeCA9IDA7CisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTY+KGl4KTsKK30KKworc3RhdGljIHZvaWQgaW52YWwoTlBQIGluc3RhbmNlLCBjb25zdCBBTlBSZWN0RiYgciwgYm9vbCBkb0FBKSB7CisgICAgY29uc3QgaW50IGluc2V0ID0gZG9BQSA/IC0xIDogMDsKKworICAgIFBsdWdpbk9iamVjdCAqb2JqID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5PYmplY3QqPihpbnN0YW5jZS0+cGRhdGEpOworICAgIE5QUmVjdCBpbnZhbDsKKyAgICBpbnZhbC5sZWZ0ID0gcm5kMTYoci5sZWZ0LCBpbnNldCk7CisgICAgaW52YWwudG9wID0gcm5kMTYoci50b3AsIGluc2V0KTsKKyAgICBpbnZhbC5yaWdodCA9IHJuZDE2KHIucmlnaHQsIC1pbnNldCk7CisgICAgaW52YWwuYm90dG9tID0gcm5kMTYoci5ib3R0b20sIC1pbnNldCk7CisgICAgYnJvd3Nlci0+aW52YWxpZGF0ZXJlY3QoaW5zdGFuY2UsICZpbnZhbCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworTmF2aWdhdGlvblBsdWdpbjo6TmF2aWdhdGlvblBsdWdpbihOUFAgaW5zdCkgOiBTdWJQbHVnaW4oaW5zdCkgeworCisgICAgbV9oYXNGb2N1cyA9IGZhbHNlOworICAgIG1fYWN0aXZlTmF2ID0gTlVMTDsKKworICAgIG1fcGFpbnREaXNhYmxlZCA9IGdQYWludEkubmV3UGFpbnQoKTsKKyAgICBnUGFpbnRJLnNldEZsYWdzKG1fcGFpbnREaXNhYmxlZCwgZ1BhaW50SS5nZXRGbGFncyhtX3BhaW50RGlzYWJsZWQpIHwga0FudGlBbGlhc19BTlBQYWludEZsYWcpOworICAgIGdQYWludEkuc2V0Q29sb3IobV9wYWludERpc2FibGVkLCAweEZGRkZGRkZGKTsKKworICAgIG1fcGFpbnRBY3RpdmUgPSBnUGFpbnRJLm5ld1BhaW50KCk7CisgICAgZ1BhaW50SS5zZXRGbGFncyhtX3BhaW50QWN0aXZlLCBnUGFpbnRJLmdldEZsYWdzKG1fcGFpbnRBY3RpdmUpIHwga0FudGlBbGlhc19BTlBQYWludEZsYWcpOworICAgIGdQYWludEkuc2V0Q29sb3IobV9wYWludEFjdGl2ZSwgMHhGRkZGRkYwMCk7CisKKyAgICAvL3JlZ2lzdGVyIGZvciBrZXkgZXZlbnRzCisgICAgQU5QRXZlbnRGbGFncyBmbGFncyA9IGtLZXlfQU5QRXZlbnRGbGFnOworICAgIE5QRXJyb3IgZXJyID0gYnJvd3Nlci0+c2V0dmFsdWUoaW5zdCwga0FjY2VwdEV2ZW50c19BTlBTZXRWYWx1ZSwgJmZsYWdzKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIkVycm9yIHNlbGVjdGluZyBpbnB1dCBldmVudHMuIik7CisgICAgfQorfQorCitOYXZpZ2F0aW9uUGx1Z2luOjp+TmF2aWdhdGlvblBsdWdpbigpIHsKKyAgICBnUGFpbnRJLmRlbGV0ZVBhaW50KG1fcGFpbnREaXNhYmxlZCk7CisgICAgZ1BhaW50SS5kZWxldGVQYWludChtX3BhaW50QWN0aXZlKTsKK30KKworYm9vbCBOYXZpZ2F0aW9uUGx1Z2luOjpzdXBwb3J0c0RyYXdpbmdNb2RlbChBTlBEcmF3aW5nTW9kZWwgbW9kZWwpIHsKKyAgICByZXR1cm4gKG1vZGVsID09IGtCaXRtYXBfQU5QRHJhd2luZ01vZGVsKTsKK30KKwordm9pZCBOYXZpZ2F0aW9uUGx1Z2luOjpkcmF3UGx1Z2luKGNvbnN0IEFOUEJpdG1hcCYgYml0bWFwLCBjb25zdCBBTlBSZWN0SSYgY2xpcCkgeworICAgIEFOUENhbnZhcyogY2FudmFzID0gZ0NhbnZhc0kubmV3Q2FudmFzKCZiaXRtYXApOworCisgICAgQU5QUmVjdEYgY2xpcFI7CisgICAgY2xpcFIubGVmdCA9IGNsaXAubGVmdDsKKyAgICBjbGlwUi50b3AgPSBjbGlwLnRvcDsKKyAgICBjbGlwUi5yaWdodCA9IGNsaXAucmlnaHQ7CisgICAgY2xpcFIuYm90dG9tID0gY2xpcC5ib3R0b207CisgICAgZ0NhbnZhc0kuY2xpcFJlY3QoY2FudmFzLCAmY2xpcFIpOworCisgICAgZHJhdyhjYW52YXMpOworICAgIGdDYW52YXNJLmRlbGV0ZUNhbnZhcyhjYW52YXMpOworfQorCit2b2lkIE5hdmlnYXRpb25QbHVnaW46OmRyYXcoQU5QQ2FudmFzKiBjYW52YXMpIHsKKyAgICBOUFAgaW5zdGFuY2UgPSB0aGlzLT5pbnN0KCk7CisgICAgUGx1Z2luT2JqZWN0ICpvYmogPSAoUGx1Z2luT2JqZWN0KikgaW5zdGFuY2UtPnBkYXRhOworCisgICAgY29uc3QgaW50IFcgPSBvYmotPndpbmRvdy0+d2lkdGg7CisgICAgY29uc3QgaW50IEggPSBvYmotPndpbmRvdy0+aGVpZ2h0OworICAgIGNvbnN0IGludCBXbSA9IFcvMjsKKyAgICBjb25zdCBpbnQgSG0gPSBILzI7CisKKyAgICAvLyBjb2xvciB0aGUgcGx1Z2luIGNhbnZhcworICAgIGdDYW52YXNJLmRyYXdDb2xvcihjYW52YXMsIChtX2hhc0ZvY3VzKSA/IDB4RkZDRENEQ0QgOiAweEZGNTQ1NDU0KTsKKworICAgIC8vIGRyYXcgdGhlIG5hdiB1cCBib3ggKDUgcHggZnJvbSB0aGUgdG9wIGVkZ2UpCisgICAgbV9uYXZVcC5sZWZ0ID0gV20gLSAxNTsKKyAgICBtX25hdlVwLnRvcCA9IDU7CisgICAgbV9uYXZVcC5yaWdodCA9IG1fbmF2VXAubGVmdCArIDMwOworICAgIG1fbmF2VXAuYm90dG9tID0gbV9uYXZVcC50b3AgKyAzMDsKKyAgICBnQ2FudmFzSS5kcmF3UmVjdChjYW52YXMsICZtX25hdlVwLCBnZXRQYWludCgmbV9uYXZVcCkpOworCisgICAgLy8gZHJhdyB0aGUgbmF2IGRvd24gYm94ICg1IHB4IGZyb20gdGhlIGJvdHRvbSBlZGdlKQorICAgIG1fbmF2RG93bi5sZWZ0ID0gV20gLSAxNTsKKyAgICBtX25hdkRvd24udG9wID0gSCAtICgzMCArIDUpOworICAgIG1fbmF2RG93bi5yaWdodCA9IG1fbmF2RG93bi5sZWZ0ICsgMzA7CisgICAgbV9uYXZEb3duLmJvdHRvbSA9IG1fbmF2RG93bi50b3AgKyAzMDsKKyAgICBnQ2FudmFzSS5kcmF3UmVjdChjYW52YXMsICZtX25hdkRvd24sIGdldFBhaW50KCZtX25hdkRvd24pKTsKKworICAgIC8vIGRyYXcgdGhlIG5hdiBsZWZ0IGJveCAoNSBweCBmcm9tIHRoZSBsZWZ0IGVkZ2UpCisgICAgbV9uYXZMZWZ0LmxlZnQgPSA1OworICAgIG1fbmF2TGVmdC50b3AgPSBIbSAtIDE1OworICAgIG1fbmF2TGVmdC5yaWdodCA9IG1fbmF2TGVmdC5sZWZ0ICsgMzA7CisgICAgbV9uYXZMZWZ0LmJvdHRvbSA9IG1fbmF2TGVmdC50b3AgKyAzMDsKKyAgICBnQ2FudmFzSS5kcmF3UmVjdChjYW52YXMsICZtX25hdkxlZnQsIGdldFBhaW50KCZtX25hdkxlZnQpKTsKKworICAgIC8vIGRyYXcgdGhlIG5hdiByaWdodCBib3ggKDUgcHggZnJvbSB0aGUgcmlnaHQgZWRnZSkKKyAgICBtX25hdlJpZ2h0LmxlZnQgPSBXIC0gKDMwICsgNSk7CisgICAgbV9uYXZSaWdodC50b3AgPSBIbSAtIDE1OworICAgIG1fbmF2UmlnaHQucmlnaHQgPSBtX25hdlJpZ2h0LmxlZnQgKyAzMDsKKyAgICBtX25hdlJpZ2h0LmJvdHRvbSA9IG1fbmF2UmlnaHQudG9wICsgMzA7CisgICAgZ0NhbnZhc0kuZHJhd1JlY3QoY2FudmFzLCAmbV9uYXZSaWdodCwgZ2V0UGFpbnQoJm1fbmF2UmlnaHQpKTsKKworICAgIC8vIGRyYXcgdGhlIG5hdiBjZW50ZXIgYm94CisgICAgbV9uYXZDZW50ZXIubGVmdCA9IFdtIC0gMTU7CisgICAgbV9uYXZDZW50ZXIudG9wID0gSG0gLSAxNTsKKyAgICBtX25hdkNlbnRlci5yaWdodCA9IG1fbmF2Q2VudGVyLmxlZnQgKyAzMDsKKyAgICBtX25hdkNlbnRlci5ib3R0b20gPSBtX25hdkNlbnRlci50b3AgKyAzMDsKKyAgICBnQ2FudmFzSS5kcmF3UmVjdChjYW52YXMsICZtX25hdkNlbnRlciwgZ2V0UGFpbnQoJm1fbmF2Q2VudGVyKSk7CisKKyAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICItLS0tJXAgRHJhd2luZyBQbHVnaW4iLCBpbnN0KCkpOworfQorCitBTlBQYWludCogTmF2aWdhdGlvblBsdWdpbjo6Z2V0UGFpbnQoQU5QUmVjdEYqIGlucHV0KSB7CisgICAgcmV0dXJuIChpbnB1dCA9PSBtX2FjdGl2ZU5hdikgPyBtX3BhaW50QWN0aXZlIDogbV9wYWludERpc2FibGVkOworfQorCitpbnQxNiBOYXZpZ2F0aW9uUGx1Z2luOjpoYW5kbGVFdmVudChjb25zdCBBTlBFdmVudCogZXZ0KSB7CisgICAgTlBQIGluc3RhbmNlID0gdGhpcy0+aW5zdCgpOworCisgICAgc3dpdGNoIChldnQtPmV2ZW50VHlwZSkgeworICAgICAgICBjYXNlIGtEcmF3X0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIHN3aXRjaCAoZXZ0LT5kYXRhLmRyYXcubW9kZWwpIHsKKyAgICAgICAgICAgICAgICBjYXNlIGtCaXRtYXBfQU5QRHJhd2luZ01vZGVsOgorICAgICAgICAgICAgICAgICAgICBkcmF3UGx1Z2luKGV2dC0+ZGF0YS5kcmF3LmRhdGEuYml0bWFwLCBldnQtPmRhdGEuZHJhdy5jbGlwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gdW5rbm93biBkcmF3aW5nIG1vZGVsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtMaWZlY3ljbGVfQU5QRXZlbnRUeXBlOgorICAgICAgICAgICAgaWYgKGV2dC0+ZGF0YS5saWZlY3ljbGUuYWN0aW9uID09IGtMb3NlRm9jdXNfQU5QTGlmZWN5Y2xlQWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSVwIExvb3NpbmcgRm9jdXMiLCBpbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgbV9oYXNGb2N1cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGludmFsKGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGV2dC0+ZGF0YS5saWZlY3ljbGUuYWN0aW9uID09IGtHYWluRm9jdXNfQU5QTGlmZWN5Y2xlQWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiLS0tLSVwIEdhaW5pbmcgRm9jdXMiLCBpbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgbV9oYXNGb2N1cyA9IHRydWU7CisgICAgICAgICAgICAgICAgaW52YWwoaW5zdGFuY2UpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrTW91c2VfQU5QRXZlbnRUeXBlOgorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgY2FzZSBrS2V5X0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIGlmIChldnQtPmRhdGEua2V5LmFjdGlvbiA9PSBrRG93bl9BTlBLZXlBY3Rpb24pIHsKKyAgICAgICAgICAgIAlib29sIHJlc3VsdCA9IGhhbmRsZU5hdmlnYXRpb24oZXZ0LT5kYXRhLmtleS5uYXRpdmVDb2RlKTsKKyAgICAgICAgICAgIAlpbnZhbChpbnN0YW5jZSk7CisgICAgICAgICAgICAJcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7ICAgLy8gdW5rbm93biBvciB1bmhhbmRsZWQgZXZlbnQKK30KKworYm9vbCBOYXZpZ2F0aW9uUGx1Z2luOjpoYW5kbGVOYXZpZ2F0aW9uKEFOUEtleUNvZGUga2V5Q29kZSkgeworICAgIE5QUCBpbnN0YW5jZSA9IHRoaXMtPmluc3QoKTsKKworICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIi0tLS0lcCBSZWNlaXZlZCBLZXkgJWQiLCBpbnN0YW5jZSwga2V5Q29kZSk7CisKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKwkJY2FzZSBrRHBhZFVwX0FOUEtleUNvZGU6CisJCQltX2FjdGl2ZU5hdiA9ICZtX25hdlVwOworCQkJYnJlYWs7CisJCWNhc2Uga0RwYWREb3duX0FOUEtleUNvZGU6CisJCQltX2FjdGl2ZU5hdiA9ICZtX25hdkRvd247CisJCQlicmVhazsKKwkJY2FzZSBrRHBhZExlZnRfQU5QS2V5Q29kZToKKwkJCW1fYWN0aXZlTmF2ID0gJm1fbmF2TGVmdDsKKwkJCWJyZWFrOworCQljYXNlIGtEcGFkUmlnaHRfQU5QS2V5Q29kZToKKwkJCW1fYWN0aXZlTmF2ID0gJm1fbmF2UmlnaHQ7CisJCQlicmVhazsKKwkJY2FzZSBrRHBhZENlbnRlcl9BTlBLZXlDb2RlOgorCQkJbV9hY3RpdmVOYXYgPSAmbV9uYXZDZW50ZXI7CisJCQlicmVhazsKKwkJY2FzZSBrUV9BTlBLZXlDb2RlOgorCQljYXNlIGtEZWxfQU5QS2V5Q29kZToKKwkJCW1fYWN0aXZlTmF2ID0gTlVMTDsKKwkJCXJldHVybiBmYWxzZTsKKwkJZGVmYXVsdDoKKwkJCW1fYWN0aXZlTmF2ID0gTlVMTDsKKwkJCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uUGx1Z2luLmggYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL25hdmlnYXRpb24vTmF2aWdhdGlvblBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTJhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL25hdmlnYXRpb24vTmF2aWdhdGlvblBsdWdpbi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUGx1Z2luT2JqZWN0LmgiCisKKyNpZm5kZWYgbmF2aWdhdGlvblBsdWdpbl9fREVGSU5FRAorI2RlZmluZSBuYXZpZ2F0aW9uUGx1Z2luX19ERUZJTkVECisKK2NsYXNzIE5hdmlnYXRpb25QbHVnaW4gOiBwdWJsaWMgU3ViUGx1Z2luIHsKK3B1YmxpYzoKKwlOYXZpZ2F0aW9uUGx1Z2luKE5QUCBpbnN0KTsKKyAgICB2aXJ0dWFsIH5OYXZpZ2F0aW9uUGx1Z2luKCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRHJhd2luZ01vZGVsKEFOUERyYXdpbmdNb2RlbCk7CisgICAgdmlydHVhbCBpbnQxNiBoYW5kbGVFdmVudChjb25zdCBBTlBFdmVudCogZXZ0KTsKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3KEFOUENhbnZhcyopOworICAgIHZvaWQgZHJhd1BsdWdpbihjb25zdCBBTlBCaXRtYXAmIGJpdG1hcCwgY29uc3QgQU5QUmVjdEkmIGNsaXApOworCisgICAgYm9vbCAgICAgICAgbV9oYXNGb2N1czsKKworICAgIEFOUFJlY3RGKgltX2FjdGl2ZU5hdjsKKyAgICBBTlBSZWN0RgltX25hdlVwOworICAgIEFOUFJlY3RGCW1fbmF2RG93bjsKKyAgICBBTlBSZWN0RgltX25hdkxlZnQ7CisgICAgQU5QUmVjdEYJbV9uYXZSaWdodDsKKyAgICBBTlBSZWN0RgltX25hdkNlbnRlcjsKKworICAgIEFOUFBhaW50KiAgIG1fcGFpbnREaXNhYmxlZDsKKyAgICBBTlBQYWludCogICBtX3BhaW50QWN0aXZlOworCisgICAgYm9vbCBoYW5kbGVOYXZpZ2F0aW9uKEFOUEtleUNvZGUga2V5Q29kZSk7CisgICAgQU5QUGFpbnQqIGdldFBhaW50KEFOUFJlY3RGKik7Cit9OworCisjZW5kaWYgLy8gbmF2aWdhdGlvblBsdWdpbl9fREVGSU5FRApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3BhaW50L1BhaW50UGx1Z2luLmNwcAppbmRleCA1YjAwZGJhLi5lNDc4ODk3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3BhaW50L1BhaW50UGx1Z2luLmNwcAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3BhaW50L1BhaW50UGx1Z2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAogZXh0ZXJuIEFOUFBhaW50SW50ZXJmYWNlVjAgICAgICBnUGFpbnRJOwogZXh0ZXJuIEFOUFBhdGhJbnRlcmZhY2VWMCAgICAgICBnUGF0aEk7CiBleHRlcm4gQU5QU3VyZmFjZUludGVyZmFjZVYwICAgIGdTdXJmYWNlSTsKK2V4dGVybiBBTlBTeXN0ZW1JbnRlcmZhY2VWMCAgICAgZ1N5c3RlbUk7CiBleHRlcm4gQU5QVHlwZWZhY2VJbnRlcmZhY2VWMCAgIGdUeXBlZmFjZUk7CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTUyLDEyICs1MywxMSBAQAogCiAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZHJhd2luZyBzdXJmYWNlCiAgICAgbV9zdXJmYWNlID0gTlVMTDsKLSAgICBtX3ZtID0gTlVMTDsKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIHBhdGgKICAgICBtX3RvdWNoUGF0aCA9IGdQYXRoSS5uZXdQYXRoKCk7CiAgICAgaWYoIW1fdG91Y2hQYXRoKQotICAgICAgICBnTG9nSS5sb2coaW5zdCwga0Vycm9yX0FOUExvZ1R5cGUsICItLS0tJXAgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgdG91Y2ggcGF0aCIsIGluc3QpOworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICItLS0tJXAgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgdG91Y2ggcGF0aCIsIGluc3QpOwogCiAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgcGFpbnQgY29sb3JzCiAgICAgbV9wYWludFN1cmZhY2UgPSBnUGFpbnRJLm5ld1BhaW50KCk7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgQU5QRXZlbnRGbGFncyBmbGFncyA9IGtUb3VjaF9BTlBFdmVudEZsYWc7CiAgICAgTlBFcnJvciBlcnIgPSBicm93c2VyLT5zZXR2YWx1ZShpbnN0LCBrQWNjZXB0RXZlbnRzX0FOUFNldFZhbHVlLCAmZmxhZ3MpOwogICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgZ0xvZ0kubG9nKGluc3QsIGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKICAgICB9CiB9CiAKQEAgLTg2LDE4ICs4NiwxNiBAQAogICAgIGdQYXRoSS5kZWxldGVQYXRoKG1fdG91Y2hQYXRoKTsKICAgICBnUGFpbnRJLmRlbGV0ZVBhaW50KG1fcGFpbnRTdXJmYWNlKTsKICAgICBnUGFpbnRJLmRlbGV0ZVBhaW50KG1fcGFpbnRCdXR0b24pOwotICAgIHN1cmZhY2VEZXN0cm95ZWQoKTsKLX0KIAotYm9vbCBQYWludFBsdWdpbjo6c3VwcG9ydHNEcmF3aW5nTW9kZWwoQU5QRHJhd2luZ01vZGVsIG1vZGVsKSB7Ci0gICAgcmV0dXJuIChtb2RlbCA9PSBrU3VyZmFjZV9BTlBEcmF3aW5nTW9kZWwpOworICAgIHNldENvbnRleHQoTlVMTCk7CisgICAgZGVzdHJveVN1cmZhY2UoKTsKIH0KIAogQU5QQ2FudmFzKiBQYWludFBsdWdpbjo6Z2V0Q2FudmFzKEFOUFJlY3RJKiBkaXJ0eVJlY3QpIHsKIAogICAgIEFOUEJpdG1hcCBiaXRtYXA7CiAgICAgSk5JRW52KiBlbnYgPSBOVUxMOwotICAgIGlmICghbV9zdXJmYWNlIHx8IG1fdm0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSyB8fAorICAgIGlmICghbV9zdXJmYWNlIHx8IGdWTS0+R2V0RW52KCh2b2lkKiopICZlbnYsIEpOSV9WRVJTSU9OXzFfNCkgIT0gSk5JX09LIHx8CiAgICAgICAgICFnU3VyZmFjZUkubG9jayhlbnYsIG1fc3VyZmFjZSwgJmJpdG1hcCwgZGlydHlSZWN0KSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTEzMiw3ICsxMzAsNyBAQAogCiB2b2lkIFBhaW50UGx1Z2luOjpyZWxlYXNlQ2FudmFzKEFOUENhbnZhcyogY2FudmFzKSB7CiAgICAgSk5JRW52KiBlbnYgPSBOVUxMOwotICAgIGlmIChtX3N1cmZhY2UgJiYgbV92bS0+R2V0RW52KCh2b2lkKiopICZlbnYsIEpOSV9WRVJTSU9OXzFfNCkgPT0gSk5JX09LKSB7CisgICAgaWYgKG1fc3VyZmFjZSAmJiBnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgewogICAgICAgICBnU3VyZmFjZUkudW5sb2NrKGVudiwgbV9zdXJmYWNlKTsKICAgICB9CiAgICAgZ0NhbnZhc0kuZGVsZXRlQ2FudmFzKGNhbnZhcyk7CkBAIC0yMTIsMzAgKzIxMCw1MSBAQAogICAgICAgICByZXR1cm4gIlJlZCI7CiB9CiAKLWJvb2wgUGFpbnRQbHVnaW46OmlzRml4ZWRTdXJmYWNlKCkgewotICAgIHJldHVybiB0cnVlOwotfQoram9iamVjdCBQYWludFBsdWdpbjo6Z2V0U3VyZmFjZSgpIHsKKyAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAgfQogCi12b2lkIFBhaW50UGx1Z2luOjpzdXJmYWNlQ3JlYXRlZChKTklFbnYqIGVudiwgam9iamVjdCBzdXJmYWNlKSB7Ci0gICAgZW52LT5HZXRKYXZhVk0oJm1fdm0pOwotICAgIG1fc3VyZmFjZSA9IGVudi0+TmV3R2xvYmFsUmVmKHN1cmZhY2UpOwotICAgIGRyYXdDbGVhblBsdWdpbigpOwotfQorICAgIC8vIGxvYWQgdGhlIGFwcHJvcHJpYXRlIGphdmEgY2xhc3MgYW5kIGluc3RhbnRpYXRlIGl0CisgICAgSk5JRW52KiBlbnYgPSBOVUxMOworICAgIGlmIChnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSykgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBnZXRTdXJmYWNlOiBmYWlsZWQgdG8gZ2V0IGVudiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLXZvaWQgUGFpbnRQbHVnaW46OnN1cmZhY2VDaGFuZ2VkKGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIC8vIGdldCB0aGUgcGx1Z2luJ3MgZGltZW5zaW9ucyBhY2NvcmRpbmcgdG8gdGhlIERPTQorICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9ICJjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW4uUGFpbnRTdXJmYWNlIjsKKyAgICBqY2xhc3MgcGFpbnRDbGFzcyA9IGdTeXN0ZW1JLmxvYWRKYXZhQ2xhc3MoaW5zdCgpLCBjbGFzc05hbWUpOworCisgICAgaWYoIXBhaW50Q2xhc3MpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGxvYWQgY2xhc3MiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgUGx1Z2luT2JqZWN0ICpvYmogPSAoUGx1Z2luT2JqZWN0KikgaW5zdCgpLT5wZGF0YTsKICAgICBjb25zdCBpbnQgcFcgPSBvYmotPndpbmRvdy0+d2lkdGg7CiAgICAgY29uc3QgaW50IHBIID0gb2JqLT53aW5kb3ctPmhlaWdodDsKLSAgICAvLyBjb21wYXJlIHRvIHRoZSBwbHVnaW4ncyBzdXJmYWNlIGRpbWVuc2lvbnMKLSAgICBpZiAocFcgIT0gd2lkdGggfHwgcEggIT0gaGVpZ2h0KQotICAgICAgICBnTG9nSS5sb2coaW5zdCgpLCBrRXJyb3JfQU5QTG9nVHlwZSwKLSAgICAgICAgICAgICAgICAgICItLS0tJXAgSW52YWxpZCBTdXJmYWNlIERpbWVuc2lvbnMgKCVkLCVkKTooJWQsJWQpIiwKLSAgICAgICAgICAgICAgICAgIGluc3QoKSwgcFcsIHBILCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvciA9IGVudi0+R2V0TWV0aG9kSUQocGFpbnRDbGFzcywgIjxpbml0PiIsICIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0O0lJSSlWIik7CisgICAgam9iamVjdCBwYWludFN1cmZhY2UgPSBlbnYtPk5ld09iamVjdChwYWludENsYXNzLCBjb25zdHJ1Y3RvciwgbV9jb250ZXh0LCAoaW50KWluc3QoKSwgcFcsIHBIKTsKKworICAgIGlmKCFwYWludFN1cmZhY2UpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGNvbnN0cnVjdCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbV9zdXJmYWNlID0gZW52LT5OZXdHbG9iYWxSZWYocGFpbnRTdXJmYWNlKTsKKyAgICByZXR1cm4gbV9zdXJmYWNlOwogfQotdm9pZCBQYWludFBsdWdpbjo6c3VyZmFjZURlc3Ryb3llZCgpIHsKKwordm9pZCBQYWludFBsdWdpbjo6ZGVzdHJveVN1cmZhY2UoKSB7CiAgICAgSk5JRW52KiBlbnYgPSBOVUxMOwotICAgIGlmIChtX3N1cmZhY2UgJiYgbV92bS0+R2V0RW52KCh2b2lkKiopICZlbnYsIEpOSV9WRVJTSU9OXzFfNCkgPT0gSk5JX09LKSB7CisgICAgaWYgKG1fc3VyZmFjZSAmJiBnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgeworCisgICAgICAgIC8vIGRldGFjaCB0aGUgbmF0aXZlIGNvZGUgZnJvbSB0aGUgb2JqZWN0CisgICAgICAgIGpjbGFzcyBqYXZhQ2xhc3MgPSBlbnYtPkdldE9iamVjdENsYXNzKG1fc3VyZmFjZSk7CisgICAgICAgIGptZXRob2RJRCBpbnZhbE1ldGhvZCA9IGVudi0+R2V0TWV0aG9kSUQoamF2YUNsYXNzLCAiaW52YWxpZGF0ZU5QUCIsICIoKVYiKTsKKyAgICAgICAgZW52LT5DYWxsVm9pZE1ldGhvZChtX3N1cmZhY2UsIGludmFsTWV0aG9kKTsKKwogICAgICAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtX3N1cmZhY2UpOwogICAgICAgICBtX3N1cmZhY2UgPSBOVUxMOwogICAgIH0KQEAgLTI3Nyw3ICsyOTYsNyBAQAogICAgICAgICBjYXNlIGtNb3VzZV9BTlBFdmVudFR5cGU6IHsKIAogICAgICAgICAgICAgaWYgKG1faXNUb3VjaEFjdGl2ZSkKLSAgICAgICAgICAgICAgICBnTG9nSS5sb2coaW5zdCgpLCBrRXJyb3JfQU5QTG9nVHlwZSwgIi0tLS0lcCBSZWNlaXZlZCB1bmludGVuZGVkIG1vdXNlIGV2ZW50IiwgaW5zdCgpKTsKKyAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICItLS0tJXAgUmVjZWl2ZWQgdW5pbnRlbmRlZCBtb3VzZSBldmVudCIsIGluc3QoKSk7CiAKICAgICAgICAgICAgIGlmIChrRG93bl9BTlBNb3VzZUFjdGlvbiA9PSBldnQtPmRhdGEubW91c2UuYWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgQU5QUmVjdEYqIHJlY3QgPSB2YWxpZFRvdWNoKGV2dC0+ZGF0YS5tb3VzZS54LCBldnQtPmRhdGEubW91c2UueSk7CkBAIC0yOTIsNiArMzExLDM1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQorICAgICAgICBjYXNlIGtDdXN0b21fQU5QRXZlbnRUeXBlOiB7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZXZ0LT5kYXRhLm90aGVyWzBdKSB7CisgICAgICAgICAgICAgICAgY2FzZSBrU3VyZmFjZUNyZWF0ZWRfQ3VzdG9tRXZlbnQ6CisgICAgICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tIGN1c3RvbUV2ZW50OiBzdXJmYWNlQ3JlYXRlZCIpOworICAgICAgICAgICAgICAgICAgICBkcmF3Q2xlYW5QbHVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBrU3VyZmFjZUNoYW5nZWRfQ3VzdG9tRXZlbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0gY3VzdG9tRXZlbnQ6IHN1cmZhY2VDaGFuZ2VkIik7CisKKyAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZXZ0LT5kYXRhLm90aGVyWzFdOworICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gZXZ0LT5kYXRhLm90aGVyWzJdOworCisgICAgICAgICAgICAgICAgICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCopIGluc3QoKS0+cGRhdGE7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBwVyA9IG9iai0+d2luZG93LT53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHBIID0gb2JqLT53aW5kb3ctPmhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGFyZSB0byB0aGUgcGx1Z2luJ3Mgc3VyZmFjZSBkaW1lbnNpb25zCisgICAgICAgICAgICAgICAgICAgIGlmIChwVyAhPSB3aWR0aCB8fCBwSCAhPSBoZWlnaHQpCisgICAgICAgICAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0lcCBJbnZhbGlkIFN1cmZhY2UgRGltZW5zaW9ucyAoJWQsJWQpOiglZCwlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QoKSwgcFcsIHBILCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Uga1N1cmZhY2VEZXN0cm95ZWRfQ3VzdG9tRXZlbnQ6CisgICAgICAgICAgICAgICAgICAgIGdMb2dJLmxvZyhrRGVidWdfQU5QTG9nVHlwZSwgIiAtLS0tIGN1c3RvbUV2ZW50OiBzdXJmYWNlRGVzdHJveWVkIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7IC8vIGVuZCBLQ3VzdG9tX0FOUEV2ZW50VHlwZQorICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3BhaW50L1BhaW50UGx1Z2luLmggYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3BhaW50L1BhaW50UGx1Z2luLmgKaW5kZXggOGZmNTYxYy4uNDg2N2E3MCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS9wYWludC9QYWludFBsdWdpbi5oCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvcGFpbnQvUGFpbnRQbHVnaW4uaApAQCAtMzMsMTggKzMzLDE1IEBACiBwdWJsaWM6CiAgICAgUGFpbnRQbHVnaW4oTlBQIGluc3QpOwogICAgIHZpcnR1YWwgflBhaW50UGx1Z2luKCk7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRHJhd2luZ01vZGVsKEFOUERyYXdpbmdNb2RlbCk7CiAgICAgdmlydHVhbCBpbnQxNiBoYW5kbGVFdmVudChjb25zdCBBTlBFdmVudCogZXZ0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VyZmFjZUNyZWF0ZWQoSk5JRW52KiBlbnYsIGpvYmplY3Qgc3VyZmFjZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VDaGFuZ2VkKGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgdmlydHVhbCB2b2lkIHN1cmZhY2VEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGaXhlZFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIGpvYmplY3QgZ2V0U3VyZmFjZSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgICAgICAgIGRyYXdDbGVhblBsdWdpbihBTlBDYW52YXMqIGNhbnZhcyA9IE5VTEwpOwogICAgIEFOUENhbnZhcyogIGdldENhbnZhcyhBTlBSZWN0SSogZGlydHlSZWN0ID0gTlVMTCk7CiAgICAgQU5QQ2FudmFzKiAgZ2V0Q2FudmFzKEFOUFJlY3RGKiBkaXJ0eVJlY3QpOwogICAgIGNvbnN0IGNoYXIqIGdldENvbG9yVGV4dCgpOworICAgIHZvaWQgICAgICAgIGRlc3Ryb3lTdXJmYWNlKCk7CiAgICAgdm9pZCAgICAgICAgcGFpbnRNb3VzZShpbnQgeCwgaW50IHkpOwogICAgIHZvaWQgICAgICAgIHBhaW50VG91Y2goKTsKICAgICB2b2lkICAgICAgICByZWxlYXNlQ2FudmFzKEFOUENhbnZhcyopOwpAQCAtNTUsNyArNTIsNiBAQAogICAgIGJvb2wgICAgICAgIG1faXNUb3VjaEFjdGl2ZTsKICAgICBib29sICAgICAgICBtX2lzVG91Y2hDdXJyZW50SW5wdXQ7CiAKLSAgICBKYXZhVk0qICAgICBtX3ZtOwogICAgIGpvYmplY3QgICAgIG1fc3VyZmFjZTsKICAgICBBTlBQYXRoKiAgICBtX3RvdWNoUGF0aDsKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS92aWRlby9WaWRlb1BsdWdpbi5jcHAgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3ZpZGVvL1ZpZGVvUGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjQyOTViCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL2puaS92aWRlby9WaWRlb1BsdWdpbi5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVmlkZW9QbHVnaW4uaCIKKyNpbmNsdWRlICJhbmRyb2lkX25wYXBpLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuIE5QTmV0c2NhcGVGdW5jcyogICAgICAgIGJyb3dzZXI7CitleHRlcm4gQU5QQml0bWFwSW50ZXJmYWNlVjAgICAgZ0JpdG1hcEk7CitleHRlcm4gQU5QQ2FudmFzSW50ZXJmYWNlVjAgICAgZ0NhbnZhc0k7CitleHRlcm4gQU5QTG9nSW50ZXJmYWNlVjAgICAgICAgZ0xvZ0k7CitleHRlcm4gQU5QUGFpbnRJbnRlcmZhY2VWMCAgICAgZ1BhaW50STsKK2V4dGVybiBBTlBTdXJmYWNlSW50ZXJmYWNlVjAgICBnU3VyZmFjZUk7CitleHRlcm4gQU5QU3lzdGVtSW50ZXJmYWNlVjAgICAgZ1N5c3RlbUk7CitleHRlcm4gQU5QVHlwZWZhY2VJbnRlcmZhY2VWMCAgZ1R5cGVmYWNlSTsKK2V4dGVybiBBTlBXaW5kb3dJbnRlcmZhY2VWMCAgICBnV2luZG93STsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitWaWRlb1BsdWdpbjo6VmlkZW9QbHVnaW4oTlBQIGluc3QpIDogU3VyZmFjZVN1YlBsdWdpbihpbnN0KSB7CisKKyAgICAvLyBpbml0aWFsaXplIHRoZSBkcmF3aW5nIHN1cmZhY2UKKyAgICBtX3N1cmZhY2UgPSBOVUxMOworCisgICAgLy9yZWdpc3RlciBmb3IgdG91Y2ggZXZlbnRzCisgICAgQU5QRXZlbnRGbGFncyBmbGFncyA9IGtUb3VjaF9BTlBFdmVudEZsYWc7CisgICAgTlBFcnJvciBlcnIgPSBicm93c2VyLT5zZXR2YWx1ZShpbnN0LCBrQWNjZXB0RXZlbnRzX0FOUFNldFZhbHVlLCAmZmxhZ3MpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiRXJyb3Igc2VsZWN0aW5nIGlucHV0IGV2ZW50cy4iKTsKKyAgICB9Cit9CisKK1ZpZGVvUGx1Z2luOjp+VmlkZW9QbHVnaW4oKSB7CisgICAgc2V0Q29udGV4dChOVUxMKTsKKyAgICBkZXN0cm95U3VyZmFjZSgpOworfQorCitqb2JqZWN0IFZpZGVvUGx1Z2luOjpnZXRTdXJmYWNlKCkgeworCisgICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKworICAgIC8vIGxvYWQgdGhlIGFwcHJvcHJpYXRlIGphdmEgY2xhc3MgYW5kIGluc3RhbnRpYXRlIGl0CisgICAgSk5JRW52KiBlbnYgPSBOVUxMOworICAgIGlmIChnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpICE9IEpOSV9PSykgeworICAgICAgICBnTG9nSS5sb2coa0Vycm9yX0FOUExvZ1R5cGUsICIgLS0tLSBnZXRTdXJmYWNlOiBmYWlsZWQgdG8gZ2V0IGVudiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAiY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luLlZpZGVvU3VyZmFjZSI7CisgICAgamNsYXNzIHZpZGVvQ2xhc3MgPSBnU3lzdGVtSS5sb2FkSmF2YUNsYXNzKGluc3QoKSwgY2xhc3NOYW1lKTsKKworICAgIGlmKCF2aWRlb0NsYXNzKSB7CisgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tIGdldFN1cmZhY2U6IGZhaWxlZCB0byBsb2FkIGNsYXNzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvciA9IGVudi0+R2V0TWV0aG9kSUQodmlkZW9DbGFzcywgIjxpbml0PiIsICIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWIik7CisgICAgam9iamVjdCB2aWRlb1N1cmZhY2UgPSBlbnYtPk5ld09iamVjdCh2aWRlb0NsYXNzLCBjb25zdHJ1Y3RvciwgbV9jb250ZXh0KTsKKworICAgIGlmKCF2aWRlb1N1cmZhY2UpIHsKKyAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0gZ2V0U3VyZmFjZTogZmFpbGVkIHRvIGNvbnN0cnVjdCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbV9zdXJmYWNlID0gZW52LT5OZXdHbG9iYWxSZWYodmlkZW9TdXJmYWNlKTsKKyAgICByZXR1cm4gbV9zdXJmYWNlOworfQorCit2b2lkIFZpZGVvUGx1Z2luOjpkZXN0cm95U3VyZmFjZSgpIHsKKyAgICBKTklFbnYqIGVudiA9IE5VTEw7CisgICAgaWYgKG1fc3VyZmFjZSAmJiBnVk0tPkdldEVudigodm9pZCoqKSAmZW52LCBKTklfVkVSU0lPTl8xXzQpID09IEpOSV9PSykgeworICAgICAgICBlbnYtPkRlbGV0ZUdsb2JhbFJlZihtX3N1cmZhY2UpOworICAgICAgICBtX3N1cmZhY2UgPSBOVUxMOworICAgIH0KK30KKworaW50MTYgVmlkZW9QbHVnaW46OmhhbmRsZUV2ZW50KGNvbnN0IEFOUEV2ZW50KiBldnQpIHsKKyAgICBzd2l0Y2ggKGV2dC0+ZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2Uga0xpZmVjeWNsZV9BTlBFdmVudFR5cGU6IHsKKyAgICAgICAgICAgIHN3aXRjaCAoZXZ0LT5kYXRhLmxpZmVjeWNsZS5hY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBjYXNlIGtFbnRlckZ1bGxTY3JlZW5fQU5QTGlmZWN5Y2xlQWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLSAlcCBlbnRlcmluZyBmdWxsc2NyZWVuIiwgaW5zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBrRXhpdEZ1bGxTY3JlZW5fQU5QTGlmZWN5Y2xlQWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBnTG9nSS5sb2coa0RlYnVnX0FOUExvZ1R5cGUsICIgLS0tLSAlcCBleGl0aW5nIGZ1bGxzY3JlZW4iLCBpbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOyAvLyBlbmQga0xpZmVjeWNsZV9BTlBFdmVudFR5cGUKKyAgICAgICAgfQorICAgICAgICBjYXNlIGtEcmF3X0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIGdMb2dJLmxvZyhrRXJyb3JfQU5QTG9nVHlwZSwgIiAtLS0tLS0gJXAgdGhlIHBsdWdpbiBkaWQgbm90IHJlcXVlc3QgZHJhdyBldmVudHMiLCBpbnN0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1RvdWNoX0FOUEV2ZW50VHlwZToKKyAgICAgICAgICAgIGlmIChrRG93bl9BTlBUb3VjaEFjdGlvbiA9PSBldnQtPmRhdGEudG91Y2guYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZ0xvZ0kubG9nKGtEZWJ1Z19BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCByZXF1ZXN0aW5nIGZ1bGxzY3JlZW4gbW9kZSIsIGluc3QoKSk7CisgICAgICAgICAgICAgICAgZ1dpbmRvd0kucmVxdWVzdEZ1bGxTY3JlZW4oaW5zdCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIGtLZXlfQU5QRXZlbnRUeXBlOgorICAgICAgICAgICAgZ0xvZ0kubG9nKGtFcnJvcl9BTlBMb2dUeXBlLCAiIC0tLS0tLSAlcCB0aGUgcGx1Z2luIGRpZCBub3QgcmVxdWVzdCBrZXkgZXZlbnRzIiwgaW5zdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOyAgIC8vIHVua25vd24gb3IgdW5oYW5kbGVkIGV2ZW50Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3ZpZGVvL1ZpZGVvUGx1Z2luLmggYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vam5pL3ZpZGVvL1ZpZGVvUGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZTJkMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9qbmkvdmlkZW8vVmlkZW9QbHVnaW4uaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlBsdWdpbk9iamVjdC5oIgorCisjaWZuZGVmIHZpZGVvUGx1Z2luX19ERUZJTkVECisjZGVmaW5lIHZpZGVvUGx1Z2luX19ERUZJTkVECisKK2NsYXNzIFZpZGVvUGx1Z2luIDogcHVibGljIFN1cmZhY2VTdWJQbHVnaW4geworcHVibGljOgorICAgIFZpZGVvUGx1Z2luKE5QUCBpbnN0KTsKKyAgICB2aXJ0dWFsIH5WaWRlb1BsdWdpbigpOworICAgIHZpcnR1YWwgaW50MTYgaGFuZGxlRXZlbnQoY29uc3QgQU5QRXZlbnQqIGV2dCk7CisgICAgdmlydHVhbCBqb2JqZWN0IGdldFN1cmZhY2UoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKCk7CisKKyAgICBqb2JqZWN0ICAgICBtX3N1cmZhY2U7Cit9OworCisjZW5kaWYgLy8gdmlkZW9QbHVnaW5fX0RFRklORUQKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL0JhY2tncm91bmRTdXJmYWNlLmphdmEgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9CYWNrZ3JvdW5kU3VyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZjhjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9CYWNrZ3JvdW5kU3VyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworcHVibGljIGNsYXNzIEJhY2tncm91bmRTdXJmYWNlIGV4dGVuZHMgVGV4dFZpZXcgeworCisgICAgcHVibGljIEJhY2tncm91bmRTdXJmYWNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBzdXBlcihjb250ZXh0KTsKKworICAgICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcihDb2xvci5CTEFDSyk7CisgICAgICAgIHRoaXMuc2V0VGV4dENvbG9yKENvbG9yLldISVRFKTsKKyAgICAgICAgdGhpcy5zZXRUZXh0KCJUaGlzIGlzIGEgamF2YSBiYWNrZ3JvdW5kIHBsdWdpbiIpOworCisgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB2aWV3IHN5c3RlbSBpcyBhd2FyZSB0aGF0IHdlIHdpbGwgYmUgZHJhd2luZworICAgICAgICB0aGlzLnNldFdpbGxOb3REcmF3KGZhbHNlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9CYWNrZ3JvdW5kVGVzdC5qYXZhIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vQmFja2dyb3VuZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjZiMGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vQmFja2dyb3VuZFRlc3QuamF2YQpAQCAtMCwwICsxLDExIEBACitwYWNrYWdlIGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbjsKKworcHVibGljIGNsYXNzIEJhY2tncm91bmRUZXN0IHsKKworICAgIHB1YmxpYyBCYWNrZ3JvdW5kVGVzdCgpIHt9CisgICAgCisgICAgcHVibGljIGludCBhZGRJbnQoaW50IHgsIGludCB5KSB7CisgICAgICAgIHJldHVybiB4ICsgeTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9QYWludFN1cmZhY2UuamF2YSBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1BhaW50U3VyZmFjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODJiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9QYWludFN1cmZhY2UuamF2YQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zYW1wbGVwbHVnaW47CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlci5DYWxsYmFjazsKKworcHVibGljIGNsYXNzIFBhaW50U3VyZmFjZSBleHRlbmRzIFN1cmZhY2VWaWV3IHsKKworICAgIHN0YXRpYyB7CisgICAgICAgIC8vbmVlZGVkIGZvciBqbmkgY2FsbHMKKyAgICAgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJzYW1wbGVwbHVnaW4iKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIGludCBucHA7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWROUFAgPSB0cnVlOworICAgIHByaXZhdGUgT2JqZWN0IG5wcExvY2sgPSBuZXcgT2JqZWN0KCk7CisKKyAgICBwdWJsaWMgUGFpbnRTdXJmYWNlKENvbnRleHQgY29udGV4dCwgaW50IE5QUCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQpOworCisgICAgICAgIHRoaXMubnBwID0gTlBQOworCisgICAgICAgIHRoaXMuZ2V0SG9sZGVyKCkuc2V0Rm9ybWF0KFBpeGVsRm9ybWF0LlJHQkFfODg4OCk7CisgICAgICAgIHRoaXMuZ2V0SG9sZGVyKCkuYWRkQ2FsbGJhY2sobmV3IENhbGxiYWNrKCkgeworCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChucHBMb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZE5QUCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlU3VyZmFjZUNoYW5nZWQobnBwLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ3JlYXRlZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobnBwTG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWROUFApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZVN1cmZhY2VDcmVhdGVkKG5wcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHN1cmZhY2VEZXN0cm95ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG5wcExvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkTlBQKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVTdXJmYWNlRGVzdHJveWVkKG5wcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIHNldHMgdGhlIHBsdWdpbidzIHN1cmZhY2UgdG8gYSBmaXhlZCBzaXplCisgICAgICAgIHRoaXMuZ2V0SG9sZGVyKCkuc2V0Rml4ZWRTaXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB2aWV3IHN5c3RlbSBpcyBhd2FyZSB0aGF0IHdlIHdpbGwgYmUgZHJhd2luZworICAgICAgICB0aGlzLnNldFdpbGxOb3REcmF3KGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBjYWxsZWQgYnkgSk5JCisgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVOUFAoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobnBwTG9jaykgeworICAgICAgICAgICAgdmFsaWROUFAgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlU3VyZmFjZUNyZWF0ZWQoaW50IG5wcCk7CisgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVTdXJmYWNlQ2hhbmdlZChpbnQgbnBwLCBpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlU3VyZmFjZURlc3Ryb3llZChpbnQgbnBwKTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpbi5qYXZhIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vU2FtcGxlUGx1Z2luLmphdmEKaW5kZXggOWI4Y2U5NS4uYjViNzI4ZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vU2FtcGxlUGx1Z2luLmphdmEKKysrIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vU2FtcGxlUGx1Z2luLmphdmEKQEAgLTEsMyArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KIHBhY2thZ2UgY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKQEAgLTExLDUgKzM1LDQgQEAKICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpblN0dWIuamF2YSBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1NhbXBsZVBsdWdpblN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwYTBjNy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL0Jyb3dzZXJQbHVnaW4vc3JjL2NvbS9hbmRyb2lkL3NhbXBsZXBsdWdpbi9TYW1wbGVQbHVnaW5TdHViLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlci5DYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLndlYmtpdC5QbHVnaW5TdHViOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lk1lZGlhQ29udHJvbGxlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5WaWRlb1ZpZXc7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2FtcGxlcGx1Z2luLmdyYXBoaWNzLkN1YmVSZW5kZXJlcjsKLQotcHVibGljIGNsYXNzIFNhbXBsZVBsdWdpblN0dWIgaW1wbGVtZW50cyBQbHVnaW5TdHViIHsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIC8vbmVlZGVkIGZvciBqbmkgY2FsbHMKLSAgICAgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJzYW1wbGVwbHVnaW4iKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFZpZXcgZ2V0RW1iZWRkZWRWaWV3KGZpbmFsIGludCBucHAsIENvbnRleHQgY29udGV4dCkgewotICAgICAgICAKLSAgICAgICAgZmluYWwgU3VyZmFjZVZpZXcgdmlldyA9IG5ldyBTdXJmYWNlVmlldyhjb250ZXh0KTsKLQotICAgICAgICAvKiBZb3UgY2FuIGRvIGFsbCBzb3J0cyBvZiBpbnRlcmVzdGluZyBvcGVyYXRpb25zIG9uIHRoZSBzdXJmYWNlIHZpZXcKLSAgICAgICAgICogaGVyZS4gV2UgaWxsdXN0cmF0ZSBhIGZldyBvZiB0aGUgaW1wb3J0YW50IG9wZXJhdGlvbnMgYmVsb3cuCi0gICAgICAgICAqLwotICAgICAgICAKLSAgICAgICAgLy9UT0RPIGdldCBwaXhlbCBmb3JtYXQgZnJvbSB0aGUgc3VicGx1Z2luICh2aWEgam5pKQotICAgICAgICB2aWV3LmdldEhvbGRlcigpLnNldEZvcm1hdChQaXhlbEZvcm1hdC5SR0JBXzg4ODgpOwotICAgICAgICB2aWV3LmdldEhvbGRlcigpLmFkZENhbGxiYWNrKG5ldyBDYWxsYmFjaygpIHsKLQotICAgICAgICAgICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAgICAgICAgIG5hdGl2ZVN1cmZhY2VDaGFuZ2VkKG5wcCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKLSAgICAgICAgICAgICAgICBuYXRpdmVTdXJmYWNlQ3JlYXRlZChucHAsIHZpZXcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKFN1cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0gICAgICAgICAgICAgICAgbmF0aXZlU3VyZmFjZURlc3Ryb3llZChucHApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgaWYgKG5hdGl2ZUlzRml4ZWRTdXJmYWNlKG5wcCkpIHsKLSAgICAgICAgICAgIC8vVE9ETyBnZXQgdGhlIGZpeGVkIGRpbWVuc2lvbnMgZnJvbSB0aGUgcGx1Z2luIAotICAgICAgICAgICAgLy92aWV3LmdldEhvbGRlcigpLnNldEZpeGVkU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBWaWV3IGdldEZ1bGxTY3JlZW5WaWV3KGludCBucHAsIENvbnRleHQgY29udGV4dCkgewotICAgICAgICAKLSAgICAgICAgLyogVE9ETyBtYWtlIHRoaXMgYXdhcmUgb2YgdGhlIHBsdWdpbiBpbnN0YW5jZSBhbmQgZ2V0IHRoZSB2aWRlbyBmaWxlCi0gICAgICAgICAqIGZyb20gdGhlIHBsdWdpbi4KLSAgICAgICAgICovCi0gICAgICAgIAotICAgICAgICBGcmFtZUxheW91dCBsYXlvdXQgPSBuZXcgRnJhbWVMYXlvdXQoY29udGV4dCk7Ci0gICAgICAgIExheW91dFBhcmFtcyBmcCA9IG5ldyBMYXlvdXRQYXJhbXMoTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5ULCBMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQpOwotICAgICAgICBsYXlvdXQuc2V0TGF5b3V0UGFyYW1zKGZwKTsKLQotICAgICAgICBWaWRlb1ZpZXcgdmlkZW8gPSBuZXcgVmlkZW9WaWV3KGNvbnRleHQpOwotICAgICAgICBMYXlvdXRQYXJhbXMgdnAgPSBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKTsKLSAgICAgICAgbGF5b3V0LnNldExheW91dFBhcmFtcyh2cCk7Ci0KLSAgICAgICAgR0xTdXJmYWNlVmlldyBnbCA9IG5ldyBHTFN1cmZhY2VWaWV3KGNvbnRleHQpOwotICAgICAgICBMYXlvdXRQYXJhbXMgZ3AgPSBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKTsKLSAgICAgICAgbGF5b3V0LnNldExheW91dFBhcmFtcyhncCk7Ci0gICAgICAgIAotICAgICAgICBsYXlvdXQuYWRkVmlldyh2aWRlbyk7Ci0gICAgICAgIGxheW91dC5hZGRWaWV3KGdsKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIHdhbnQgYW4gODg4OCBwaXhlbCBmb3JtYXQgYmVjYXVzZSB0aGF0J3MgcmVxdWlyZWQgZm9yIGEgdHJhbnNsdWNlbnQgCi0gICAgICAgIC8vIHdpbmRvdy4gQW5kIHdlIHdhbnQgYSBkZXB0aCBidWZmZXIuCi0gICAgICAgIGdsLnNldEVHTENvbmZpZ0Nob29zZXIoOCwgOCwgOCwgOCwgMTYsIDApOwotICAgICAgICAvLyBUZWxsIHRoZSBjdWJlIHJlbmRlcmVyIHRoYXQgd2Ugd2FudCB0byByZW5kZXIgYSB0cmFuc2x1Y2VudCB2ZXJzaW9uCi0gICAgICAgIC8vIG9mIHRoZSBjdWJlOgotICAgICAgICBnbC5zZXRSZW5kZXJlcihuZXcgQ3ViZVJlbmRlcmVyKHRydWUpKTsKLSAgICAgICAgLy8gVXNlIGEgc3VyZmFjZSBmb3JtYXQgd2l0aCBhbiBBbHBoYSBjaGFubmVsOgotICAgICAgICBnbC5nZXRIb2xkZXIoKS5zZXRGb3JtYXQoUGl4ZWxGb3JtYXQuVFJBTlNMVUNFTlQpOwotICAgICAgICBnbC5zZXRXaW5kb3dUeXBlKFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT05fTUVESUFfT1ZFUkxBWSk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgdmlkZW8uc2V0VmlkZW9QYXRoKCIvc2RjYXJkL3Rlc3RfdmlkZW8uM2dwIik7Ci0gICAgICAgIHZpZGVvLnNldE1lZGlhQ29udHJvbGxlcihuZXcgTWVkaWFDb250cm9sbGVyKGNvbnRleHQpKTsKLSAgICAgICAgdmlkZW8ucmVxdWVzdEZvY3VzKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbGF5b3V0OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN1cmZhY2VDcmVhdGVkKGludCBucHAsIFZpZXcgc3VyZmFjZVZpZXcpOwotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlU3VyZmFjZUNoYW5nZWQoaW50IG5wcCwgaW50IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN1cmZhY2VEZXN0cm95ZWQoaW50IG5wcCk7Ci0gICAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVJc0ZpeGVkU3VyZmFjZShpbnQgbnBwKTsKLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1ZpZGVvU3VyZmFjZS5qYXZhIGIvc2FtcGxlcy9Ccm93c2VyUGx1Z2luL3NyYy9jb20vYW5kcm9pZC9zYW1wbGVwbHVnaW4vVmlkZW9TdXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjODBjZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvQnJvd3NlclBsdWdpbi9zcmMvY29tL2FuZHJvaWQvc2FtcGxlcGx1Z2luL1ZpZGVvU3VyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnNhbXBsZXBsdWdpbi5ncmFwaGljcy5DdWJlUmVuZGVyZXI7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lk1lZGlhQ29udHJvbGxlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5WaWRlb1ZpZXc7CisKK3B1YmxpYyBjbGFzcyBWaWRlb1N1cmZhY2UgZXh0ZW5kcyBGcmFtZUxheW91dCB7CisKKyAgICBwdWJsaWMgVmlkZW9TdXJmYWNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICBzdXBlcihjb250ZXh0KTsKKworICAgICAgICBMYXlvdXRQYXJhbXMgZnAgPSBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKTsKKyAgICAgICAgdGhpcy5zZXRMYXlvdXRQYXJhbXMoZnApOworCisvLyAgICAgICAgVmlkZW9WaWV3IHZpZGVvID0gbmV3IFZpZGVvVmlldyhjb250ZXh0KTsKKy8vICAgICAgICBMYXlvdXRQYXJhbXMgdnAgPSBuZXcgTGF5b3V0UGFyYW1zKExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCwgTGF5b3V0UGFyYW1zLkZJTExfUEFSRU5UKTsKKy8vICAgICAgICB2cC5zZXRMYXlvdXRQYXJhbXModnApOworCisgICAgICAgIEdMU3VyZmFjZVZpZXcgZ2wgPSBuZXcgR0xTdXJmYWNlVmlldyhjb250ZXh0KTsKKyAgICAgICAgTGF5b3V0UGFyYW1zIGdwID0gbmV3IExheW91dFBhcmFtcyhMYXlvdXRQYXJhbXMuRklMTF9QQVJFTlQsIExheW91dFBhcmFtcy5GSUxMX1BBUkVOVCk7CisgICAgICAgIGdsLnNldExheW91dFBhcmFtcyhncCk7CisKKyAgICAgICAgdGhpcy5hZGRWaWV3KGdsKTsKKy8vICAgICAgICB0aGlzLmFkZFZpZXcodmlkZW8pOworCisgICAgICAgIC8vIFRlbGwgdGhlIGN1YmUgcmVuZGVyZXIgdGhhdCB3ZSB3YW50IHRvIHJlbmRlciBhIHRyYW5zbHVjZW50IHZlcnNpb24KKyAgICAgICAgLy8gb2YgdGhlIGN1YmU6CisgICAgICAgIGdsLnNldFJlbmRlcmVyKG5ldyBDdWJlUmVuZGVyZXIoZmFsc2UpKTsKKyAgICAgICAgZ2wuc2V0V2luZG93VHlwZShXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FQUExJQ0FUSU9OX01FRElBX09WRVJMQVkpOworCisvLyAgICAgICAgdmlkZW8uc2V0VmlkZW9QYXRoKCIvc2RjYXJkL3Rlc3RfdmlkZW8uM2dwIik7CisvLyAgICAgICAgdmlkZW8uc2V0TWVkaWFDb250cm9sbGVyKG5ldyBNZWRpYUNvbnRyb2xsZXIoY29udGV4dCkpOworLy8gICAgICAgIHZpZGVvLnJlcXVlc3RGb2N1cygpOworCisgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSB2aWV3IHN5c3RlbSBpcyBhd2FyZSB0aGF0IHdlIHdpbGwgYmUgZHJhd2luZworICAgICAgICB0aGlzLnNldFdpbGxOb3REcmF3KGZhbHNlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL0J1c2luZXNzQ2FyZC9yZXMvbGF5b3V0L2J1c2luZXNzX2NhcmQueG1sIGIvc2FtcGxlcy9CdXNpbmVzc0NhcmQvcmVzL2xheW91dC9idXNpbmVzc19jYXJkLnhtbAppbmRleCBjN2NlNzEzLi5mZmIxOGQ0IDEwMDY0NAotLS0gYS9zYW1wbGVzL0J1c2luZXNzQ2FyZC9yZXMvbGF5b3V0L2J1c2luZXNzX2NhcmQueG1sCisrKyBiL3NhbXBsZXMvQnVzaW5lc3NDYXJkL3Jlcy9sYXlvdXQvYnVzaW5lc3NfY2FyZC54bWwKQEAgLTEsMTEgKzEsMTEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UmVsYXRpdmVMYXlvdXQKICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIDxCdXR0b24KICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9waWNrX2NvbnRhY3RfYnV0dG9uIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRpcCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9hY2NvdW50X2VudHJ5LnhtbCBiL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9hY2NvdW50X2VudHJ5LnhtbAppbmRleCA0MzVlNzM3Li45YTRlMTk3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvYWNjb3VudF9lbnRyeS54bWwKKysrIGIvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2FjY291bnRfZW50cnkueG1sCkBAIC0xNSwxOSArMTUsMTkgQEAKIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iP2FuZHJvaWQ6YXR0ci9saXN0UHJlZmVycmVkSXRlbUhlaWdodCIKICAgICBhbmRyb2lkOnBhZGRpbmc9IjZkaXAiPgogICAgIDxJbWFnZVZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hY2NvdW50SWNvbiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50VG9wPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEJvdHRvbT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luUmlnaHQ9IjZkaXAiIC8+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc2Vjb25kQWNjb3VudExpbmUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIyNmRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9SaWdodE9mPSJAaWQvYWNjb3VudEljb24iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGFuZHJvaWQ6Y29sb3Ivc2Vjb25kYXJ5X3RleHRfbGlnaHQiIC8+CiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZmlyc3RBY2NvdW50TGluZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9SaWdodE9mPSJAaWQvYWNjb3VudEljb24iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50UmlnaHQ9InRydWUiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvY29udGFjdF9hZGRlci54bWwgYi9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvY29udGFjdF9hZGRlci54bWwKaW5kZXggOTJkMDZmMy4uOGZiNzI3NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfYWRkZXIueG1sCisrKyBiL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X2FkZGVyLnhtbApAQCAtMTUsMTAgKzE1LDEwIEBACiAtLT4KIAogPFNjcm9sbFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+Ci0gICAgPFRhYmxlTGF5b3V0IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgorICAgIDxUYWJsZUxheW91dCBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgICAgIDxUYWJsZVJvdz4KICAgICAgICAgICAgIDxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICA8L1RhYmxlUm93PgogICAgICAgICA8VGFibGVSb3c+CiAgICAgICAgICAgICA8U3Bpbm5lciBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FjY291bnRTcGlubmVyIi8+CiAgICAgICAgIDwvVGFibGVSb3c+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICA8QnV0dG9uIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2F2ZSIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jb250YWN0U2F2ZUJ1dHRvbiIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KICAgICAgICAgPC9UYWJsZVJvdz4KICAgICA8L1RhYmxlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfZW50cnkueG1sIGIvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfZW50cnkueG1sCmluZGV4IDk5MDkwMjUuLjYxOTNkYjUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X2VudHJ5LnhtbAorKysgYi9zYW1wbGVzL0NvbnRhY3RNYW5hZ2VyL3Jlcy9sYXlvdXQvY29udGFjdF9lbnRyeS54bWwKQEAgLTE5LDYgKzE5LDYgQEAKICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgogICAgIDxUZXh0VmlldyBhbmRyb2lkOnRleHQ9IkAraWQvY29udGFjdEVudHJ5VGV4dCIKICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jb250YWN0RW50cnlUZXh0IgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvQ29udGFjdE1hbmFnZXIvcmVzL2xheW91dC9jb250YWN0X21hbmFnZXIueG1sIGIvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfbWFuYWdlci54bWwKaW5kZXggNzNmNmY4MS4uOGZlMThjNSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfbWFuYWdlci54bWwKKysrIGIvc2FtcGxlcy9Db250YWN0TWFuYWdlci9yZXMvbGF5b3V0L2NvbnRhY3RfbWFuYWdlci54bWwKQEAgLTE2LDkgKzE2LDkgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgotICAgIDxMaXN0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKyAgICA8TGlzdFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jb250YWN0TGlzdCIKICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zaG93SW52aXNpYmxlIgogICAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2hvd0ludmlzaWJsZSIvPgotICAgIDxCdXR0b24gYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIDxCdXR0b24gYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hZGRDb250YWN0QnV0dG9uIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FkZENvbnRhY3RCdXR0b25MYWJlbCIvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9GaXhlZEdyaWRMYXlvdXQvcmVzL2xheW91dC9tYWluLnhtbCBiL3NhbXBsZXMvRml4ZWRHcmlkTGF5b3V0L3Jlcy9sYXlvdXQvbWFpbi54bWwKaW5kZXggOTNlMmQ1ZS4uYzZiYzUyYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9GaXhlZEdyaWRMYXlvdXQvcmVzL2xheW91dC9tYWluLnhtbAorKysgYi9zYW1wbGVzL0ZpeGVkR3JpZExheW91dC9yZXMvbGF5b3V0L21haW4ueG1sCkBAIC0zLDggKzMsOCBAQAogICAgICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIHhtbG5zOmFwcD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9jb20uZXhhbXBsZS5hbmRyb2lkLmZpeGVkZ3JpZGxheW91dCIKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ncmlkIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhcHA6Y2VsbFdpZHRoPSI4MGRwIgogICAgICAgICBhcHA6Y2VsbEhlaWdodD0iMTAwZHAiCiAgICAgICAgID4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvR2xvYmFsVGltZS9yZXMvbGF5b3V0L2dsb2JhbF90aW1lLnhtbCBiL3NhbXBsZXMvR2xvYmFsVGltZS9yZXMvbGF5b3V0L2dsb2JhbF90aW1lLnhtbAppbmRleCAyMzcyMDdmLi42YmIzYzc5IDEwMDY0NAotLS0gYS9zYW1wbGVzL0dsb2JhbFRpbWUvcmVzL2xheW91dC9nbG9iYWxfdGltZS54bWwKKysrIGIvc2FtcGxlcy9HbG9iYWxUaW1lL3Jlcy9sYXlvdXQvZ2xvYmFsX3RpbWUueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAtLT4KIAogPEVkaXRUZXh0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOnRleHRTaXplPSIxOHNwIgogICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9nbG9iYWxfdGltZV90ZXh0X3RleHQiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvSGVsbG9BY3Rpdml0eS9yZXMvbGF5b3V0L2hlbGxvX2FjdGl2aXR5LnhtbCBiL3NhbXBsZXMvSGVsbG9BY3Rpdml0eS9yZXMvbGF5b3V0L2hlbGxvX2FjdGl2aXR5LnhtbAppbmRleCAyYTRkMmRlLi5iYWI5YzljIDEwMDY0NAotLS0gYS9zYW1wbGVzL0hlbGxvQWN0aXZpdHkvcmVzL2xheW91dC9oZWxsb19hY3Rpdml0eS54bWwKKysrIGIvc2FtcGxlcy9IZWxsb0FjdGl2aXR5L3Jlcy9sYXlvdXQvaGVsbG9fYWN0aXZpdHkueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPEVkaXRUZXh0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDppZD0iQCtpZC90ZXh0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMThzcCIKICAgICBhbmRyb2lkOmF1dG9UZXh0PSJ0cnVlIgogICAgIGFuZHJvaWQ6Y2FwaXRhbGl6ZT0ic2VudGVuY2VzIgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQtbGFuZC9ob21lLnhtbCBiL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0LWxhbmQvaG9tZS54bWwKaW5kZXggZDcyM2M2OS4uOGVlY2JkYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQtbGFuZC9ob21lLnhtbAorKysgYi9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC1sYW5kL2hvbWUueG1sCkBAIC0xNyw4ICsxNyw4IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczpob21lPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2NvbS5leGFtcGxlLmFuZHJvaWQuaG9tZSIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8IS0tIEFsbCBhcHBsaWNhdGlvbnMgb24gdGhlIHRvcCBzaWRlIG9mIHRoZSBzY3JlZW4gLS0+CiAgICAgPEdyaWRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYWxsX2FwcHMiCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIGFuZHJvaWQ6c3RyZXRjaE1vZGU9InNwYWNpbmdXaWR0aCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxLjAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnN0YWNrRnJvbUJvdHRvbT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJpbnZpc2libGUiIC8+CiAKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgaG9tZTptYXJnaW5MZWZ0PSIxZGlwIgogICAgICAgICBob21lOm1hcmdpblJpZ2h0PSIxZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI2NWRpcCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYXBwbGljYXRpb25fYmFja2dyb3VuZCIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQtcG9ydC9ob21lLnhtbCBiL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0LXBvcnQvaG9tZS54bWwKaW5kZXggZDcyM2M2OS4uOGVlY2JkYiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQtcG9ydC9ob21lLnhtbAorKysgYi9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC1wb3J0L2hvbWUueG1sCkBAIC0xNyw4ICsxNyw4IEBACiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczpob21lPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2NvbS5leGFtcGxlLmFuZHJvaWQuaG9tZSIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8IS0tIEFsbCBhcHBsaWNhdGlvbnMgb24gdGhlIHRvcCBzaWRlIG9mIHRoZSBzY3JlZW4gLS0+CiAgICAgPEdyaWRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYWxsX2FwcHMiCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIGFuZHJvaWQ6c3RyZXRjaE1vZGU9InNwYWNpbmdXaWR0aCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxLjAiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOnN0YWNrRnJvbUJvdHRvbT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJpbnZpc2libGUiIC8+CiAKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgaG9tZTptYXJnaW5MZWZ0PSIxZGlwIgogICAgICAgICBob21lOm1hcmdpblJpZ2h0PSIxZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjBkaXAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI2NWRpcCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYXBwbGljYXRpb25fYmFja2dyb3VuZCIgLz4KIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQvYWxsX2FwcGxpY2F0aW9uc19idXR0b24ueG1sIGIvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQvYWxsX2FwcGxpY2F0aW9uc19idXR0b24ueG1sCmluZGV4IDg4NDMwYjMuLmJlZDk4ZGQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0L2FsbF9hcHBsaWNhdGlvbnNfYnV0dG9uLnhtbAorKysgYi9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC9hbGxfYXBwbGljYXRpb25zX2J1dHRvbi54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zaG93X2FsbF9hcHBzX2NoZWNrIgogICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0iZmFsc2UiCiAgICAgICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJmYWxzZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYWxsX2FwcGxpY2F0aW9uc19iYWNrZ3JvdW5kIgogICAgICAgICBhbmRyb2lkOmJ1dHRvbj0iQGRyYXdhYmxlL2FsbF9hcHBsaWNhdGlvbnMiCmRpZmYgLS1naXQgYS9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC93YWxscGFwZXIueG1sIGIvc2FtcGxlcy9Ib21lL3Jlcy9sYXlvdXQvd2FsbHBhcGVyLnhtbAppbmRleCA5MmRjNjVlLi43NmY1YWY3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0hvbWUvcmVzL2xheW91dC93YWxscGFwZXIueG1sCisrKyBiL3NhbXBsZXMvSG9tZS9yZXMvbGF5b3V0L3dhbGxwYXBlci54bWwKQEAgLTE5LDggKzE5LDggQEAKIC0tPgogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPiAKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiAKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+IAogICAgIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpAQCAtMzQsNyArMzQsNyBAQAogICAgIAogICAgIDxHYWxsZXJ5IGFuZHJvaWQ6aWQ9IkAraWQvZ2FsbGVyeSIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjNzAwMDAwMDAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI2MGRpcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRCb3R0b209InRydWUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50TGVmdD0idHJ1ZSIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvSmV0Qm95L3Jlcy9sYXlvdXQvbWFpbi54bWwgYi9zYW1wbGVzL0pldEJveS9yZXMvbGF5b3V0L21haW4ueG1sCmluZGV4IGVhMjI3N2YuLmIxMTU0YWQgMTAwNzU1Ci0tLSBhL3NhbXBsZXMvSmV0Qm95L3Jlcy9sYXlvdXQvbWFpbi54bWwKKysrIGIvc2FtcGxlcy9KZXRCb3kvcmVzL2xheW91dC9tYWluLnhtbApAQCAtMSwxMSArMSwxMSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxGcmFtZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0JYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCiAJPGNvbS5leGFtcGxlLmFuZHJvaWQuamV0Ym95LkpldEJveVZpZXcgYW5kcm9pZDppZD0iQCtpZC9KZXRCb3lWaWV3IgotCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0JCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiIC8+CisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiAvPgogCiAJPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2hlbHBUZXh0IgogCQlzdHlsZT0iQHN0eWxlL2hlbHBUZXh0IiBhbmRyb2lkOnZpc2liaWxpdHk9ImludmlzaWJsZSIgCmRpZmYgLS1naXQgYS9zYW1wbGVzL0x1bmFyTGFuZGVyL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9zYW1wbGVzL0x1bmFyTGFuZGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggN2ZkYzU3Mi4uMzAxMjkxYSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9MdW5hckxhbmRlci9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3NhbXBsZXMvTHVuYXJMYW5kZXIvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMjIsMTEgKzIyLDExIEBACiA8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHBhY2thZ2U9ImNvbS5leGFtcGxlLmFuZHJvaWQubHVuYXJsYW5kZXIiPgogICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9hcHBfbHVuYXJfbGFuZGVyIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIj4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iTHVuYXJMYW5kZXIiPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJMdW5hckxhbmRlciIgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTm9UaXRsZUJhciI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CiAgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CiAgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0JCTwvYWN0aXZpdHk+CisgICAgICAgIDwvYWN0aXZpdHk+CiAgICAgPC9hcHBsaWNhdGlvbj4KIDwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL0x1bmFyTGFuZGVyL3Jlcy9sYXlvdXQvbHVuYXJfbGF5b3V0LnhtbCBiL3NhbXBsZXMvTHVuYXJMYW5kZXIvcmVzL2xheW91dC9sdW5hcl9sYXlvdXQueG1sCmluZGV4IDlhZDA1MzYuLmYxYTg5OTAgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTHVuYXJMYW5kZXIvcmVzL2xheW91dC9sdW5hcl9sYXlvdXQueG1sCisrKyBiL3NhbXBsZXMvTHVuYXJMYW5kZXIvcmVzL2xheW91dC9sdW5hcl9sYXlvdXQueG1sCkBAIC0xNSwxNyArMTUsMTcgQEAKIC0tPgogCiA8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICAKICAgICA8Y29tLmV4YW1wbGUuYW5kcm9pZC5sdW5hcmxhbmRlci5MdW5hclZpZXcKICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbHVuYXIiCi0gICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ii8+CisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiLz4KICAgICAKICAgICA8UmVsYXRpdmVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IiA+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiA+CiAgICAgICAgIDxUZXh0VmlldwogICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKIAkJICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbHVuYXJfbGF5b3V0X3RleHRfdGV4dCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTHVuYXJMYW5kZXIvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvbHVuYXJsYW5kZXIvTHVuYXJMYW5kZXIuamF2YSBiL3NhbXBsZXMvTHVuYXJMYW5kZXIvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvbHVuYXJsYW5kZXIvTHVuYXJMYW5kZXIuamF2YQppbmRleCA3ZjU0ZmY2Li5hNGZmZWY1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0x1bmFyTGFuZGVyL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL2x1bmFybGFuZGVyL0x1bmFyTGFuZGVyLmphdmEKKysrIGIvc2FtcGxlcy9MdW5hckxhbmRlci9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9sdW5hcmxhbmRlci9MdW5hckxhbmRlci5qYXZhCkBAIC0xMjQsOSArMTI0LDYgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CiAKLSAgICAgICAgLy8gdHVybiBvZmYgdGhlIHdpbmRvdydzIHRpdGxlIGJhcgotICAgICAgICByZXF1ZXN0V2luZG93RmVhdHVyZShXaW5kb3cuRkVBVFVSRV9OT19USVRMRSk7Ci0KICAgICAgICAgLy8gdGVsbCBzeXN0ZW0gdG8gdXNlIHRoZSBsYXlvdXQgZGVmaW5lZCBpbiBvdXIgWE1MIGZpbGUKICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubHVuYXJfbGF5b3V0KTsKIApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NdWx0aVJlc29sdXRpb24vcmVzL2xheW91dC1sYW5kL21haW4ueG1sIGIvc2FtcGxlcy9NdWx0aVJlc29sdXRpb24vcmVzL2xheW91dC1sYW5kL21haW4ueG1sCmluZGV4IGY3MDQ0MjUuLjUxNTM0OWYgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uL3Jlcy9sYXlvdXQtbGFuZC9tYWluLnhtbAorKysgYi9zYW1wbGVzL011bHRpUmVzb2x1dGlvbi9yZXMvbGF5b3V0LWxhbmQvbWFpbi54bWwKQEAgLTE2LDI4ICsxNiwyOCBAQAogCiA8TGluZWFyTGF5b3V0CiAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmFja2dyb3VuZCI+CiAKICAgPExpbmVhckxheW91dAogICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8IS0tIE5vdGljZSB0aGF0IHdpZGdldCBzaXplcyBhcmUgZXhwcmVzc2VkIGluIGRpcCwgb3IgZGV2aWNlLWluZGVwZW5kZW50CiAgICAgICAgICBwaXhlbHMsIHdoaWxlIHRleHQgc2l6ZXMgYXJlIGV4cHJlc3NlZCBpbiBzcCwgb3Igc2NhbGUtaW5kZXBlbmRlbnQKICAgICAgICAgIHBpeGVscywgdG8gZmFjdG9yIGluIHVzZXItY2hvc2VuIGZvbnQgc2l6ZXMuIC0tPgogICAgIDxGcmFtZUxheW91dAogICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvaW1hZ2VfY29udGFpbmVyIgotICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaW1hZ2VfY29udGFpbmVyIj4KICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9pbWFnZV92aWV3IgogICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iZml0Q2VudGVyIi8+CiAgICAgICA8VGV4dFZpZXcKQEAgLTU3LDcgKzU3LDcgQEAKIAogICA8TGluZWFyTGF5b3V0CiAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkxlZnQ9IjEwZGlwIgogICAgIGFuZHJvaWQ6Z3Jhdml0eT0idG9wIj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uL3Jlcy9sYXlvdXQvbWFpbi54bWwgYi9zYW1wbGVzL011bHRpUmVzb2x1dGlvbi9yZXMvbGF5b3V0L21haW4ueG1sCmluZGV4IDRjMDFlODIuLjk5MTA4NDkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvTXVsdGlSZXNvbHV0aW9uL3Jlcy9sYXlvdXQvbWFpbi54bWwKKysrIGIvc2FtcGxlcy9NdWx0aVJlc29sdXRpb24vcmVzL2xheW91dC9tYWluLnhtbApAQCAtMTYsMjcgKzE2LDI3IEBACiAKIDxMaW5lYXJMYXlvdXQKICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYmFja2dyb3VuZCI+CiAKICAgPExpbmVhckxheW91dAogICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAKICAgICA8IS0tIE5vdGljZSB0aGF0IHdpZGdldCBzaXplcyBhcmUgZXhwcmVzc2VkIGluIGRpcCwgb3IgZGV2aWNlLWluZGVwZW5kZW50CiAgICAgICAgICBwaXhlbHMsIHdoaWxlIHRleHQgc2l6ZXMgYXJlIGV4cHJlc3NlZCBpbiBzcCwgb3Igc2NhbGUtaW5kZXBlbmRlbnQKICAgICAgICAgIHBpeGVscywgdG8gZmFjdG9yIGluIHVzZXItY2hvc2VuIGZvbnQgc2l6ZXMuIC0tPgogICAgIDxGcmFtZUxheW91dAotICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaW1hZ2VfY29udGFpbmVyIgogICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvaW1hZ2VfY29udGFpbmVyIj4KICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9pbWFnZV92aWV3IgogICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iZml0Q2VudGVyIi8+CiAgICAgICA8VGV4dFZpZXcKQEAgLTU1LDcgKzU1LDcgQEAKICAgPC9MaW5lYXJMYXlvdXQ+CiAKICAgPExpbmVhckxheW91dAotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTBkaXAiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L2FkZF9pdGVtLnhtbCBiL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9hZGRfaXRlbS54bWwKaW5kZXggODE5MWJmNS4uODI2MDgyZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L2FkZF9pdGVtLnhtbAorKysgYi9zYW1wbGVzL015U2FtcGxlUnNzL3Jlcy9sYXlvdXQvYWRkX2l0ZW0ueG1sCkBAIC0xNSw4ICsxNSw4IEBACiAtLT4KIAogPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCI+CisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCI+CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGVfbGFiZWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgpAQCAtMjYsMTEgKzI2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hZGRfaXRlbV90aXRsZSIvPgogICAgICAgICAgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlX3RleHRib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQGlkL3RpdGxlX2xhYmVsIi8+CiAgICAgICAgICAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdXJsX3RleHRib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAaWQvdGl0bGVfdGV4dGJveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25MZWZ0PSJAaWQvdGl0bGVfdGV4dGJveCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbi54bWwgYi9zYW1wbGVzL015U2FtcGxlUnNzL3Jlcy9sYXlvdXQvbWFpbl9zY3JlZW4ueG1sCmluZGV4IDUyOTJiYjIuLjNjYWU0ODcgMTAwNzU1Ci0tLSBhL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbi54bWwKKysrIGIvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L21haW5fc2NyZWVuLnhtbApAQCAtMTUsMjEgKzE1LDIxIEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIj4KICAgICAgICAgICAgICAgICAgIAogICAgICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9yc3NMaXN0VmlldyIKICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMHB4IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzAwQ0MwMCIvPgogICAgICAgICAgICAgICAgICAgCiAJCQkJPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC9yc3NXZWJWaWV3IgogCQkJICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iIzc3Q0MwMDAwIgogCQkJCSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMHB4IgotCQkJCSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJCSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgogCiA8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvTXlTYW1wbGVSc3MvcmVzL2xheW91dC9tYWluX3NjcmVlbjIueG1sIGIvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L21haW5fc2NyZWVuMi54bWwKaW5kZXggMzZiMGFmNC4uODI2ZTViYyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L21haW5fc2NyZWVuMi54bWwKKysrIGIvc2FtcGxlcy9NeVNhbXBsZVJzcy9yZXMvbGF5b3V0L21haW5fc2NyZWVuMi54bWwKQEAgLTE1LDE5ICsxNSwxOSBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IiAKLSAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgCisgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIj4KIAkgICAgICAgICAgICAgICAgIAogCSAgICAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9yc3NMaXN0VmlldyIgCiAJICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBweCIKLQkgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAJICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiM5OTAwRkYwMCIvPgogICAgICAgICAgICAgICAgICAgCiAJCQkJPFdlYlZpZXcgYW5kcm9pZDppZD0iQCtpZC9yc3NXZWJWaWV3IgogCQkJCSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMHB4IgotCQkJCSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkJCQkgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogCQkJCSAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMiIvPgogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL05vdGVQYWQvcmVzL2xheW91dC9ub3RlX2VkaXRvci54bWwgYi9zYW1wbGVzL05vdGVQYWQvcmVzL2xheW91dC9ub3RlX2VkaXRvci54bWwKaW5kZXggYzU0YTk2My4uZDdkYTk5ZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ob3RlUGFkL3Jlcy9sYXlvdXQvbm90ZV9lZGl0b3IueG1sCisrKyBiL3NhbXBsZXMvTm90ZVBhZC9yZXMvbGF5b3V0L25vdGVfZWRpdG9yLnhtbApAQCAtMTcsOCArMTcsOCBAQAogPHZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGNsYXNzPSJjb20uZXhhbXBsZS5hbmRyb2lkLm5vdGVwYWQuTm90ZUVkaXRvciRMaW5lZEVkaXRUZXh0IgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90ZSIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6Y29sb3IvdHJhbnNwYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSI1ZGlwIgogICAgIGFuZHJvaWQ6c2Nyb2xsYmFycz0idmVydGljYWwiCmRpZmYgLS1naXQgYS9zYW1wbGVzL05vdGVQYWQvcmVzL2xheW91dC9ub3Rlc2xpc3RfaXRlbS54bWwgYi9zYW1wbGVzL05vdGVQYWQvcmVzL2xheW91dC9ub3Rlc2xpc3RfaXRlbS54bWwKaW5kZXggYjE2NzczNC4uZTExYzVlZSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ob3RlUGFkL3Jlcy9sYXlvdXQvbm90ZXNsaXN0X2l0ZW0ueG1sCisrKyBiL3NhbXBsZXMvTm90ZVBhZC9yZXMvbGF5b3V0L25vdGVzbGlzdF9pdGVtLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8VGV4dFZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RleHQxIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iP2FuZHJvaWQ6YXR0ci9saXN0UHJlZmVycmVkSXRlbUhlaWdodCIKICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTGFyZ2UiCiAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1JTU1JlYWRlci9yZXMvbGF5b3V0L3Jzc19sYXlvdXQueG1sIGIvc2FtcGxlcy9SU1NSZWFkZXIvcmVzL2xheW91dC9yc3NfbGF5b3V0LnhtbAppbmRleCA4NDJmNGY3Li44Mzg2NTZhIDEwMDY0NAotLS0gYS9zYW1wbGVzL1JTU1JlYWRlci9yZXMvbGF5b3V0L3Jzc19sYXlvdXQueG1sCisrKyBiL3NhbXBsZXMvUlNTUmVhZGVyL3Jlcy9sYXlvdXQvcnNzX2xheW91dC54bWwKQEAgLTE1LDEzICsxNSwxMyBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiAKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIAotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIxMGRpcCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKIAk8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC91cmx0ZXh0IgotCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogCSAgICBhbmRyb2lkOnRleHRTaXplPSIxMnNwIgogCSAgICBhbmRyb2lkOmF1dG9UZXh0PSJmYWxzZSIKQEAgLTM0LDcgKzM0LDcgQEAKIAkJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3Jzc19sYXlvdXRfZG93bmxvYWRfdGV4dCIgLz4KIAkKIAk8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9zdGF0dXN0ZXh0IgotCSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisJICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAJICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogCSAgICBhbmRyb2lkOmF1dG9UZXh0PSJmYWxzZSIKIAkgICAgYW5kcm9pZDpjYXBpdGFsaXplPSJub25lIgpAQCAtNDIsNyArNDIsNyBAQAogCSAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcnNzX2xheW91dF9zdGF0dXN0ZXh0X3RleHQiIC8+CiAJCiAJPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2xpc3QiCi0JICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKwkgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKIAkgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogCSAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAJICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9ImZhbHNlIi8+CmRpZmYgLS1naXQgYS9zYW1wbGVzL1NlYXJjaGFibGVEaWN0aW9uYXJ5L3Jlcy9sYXlvdXQvbWFpbi54bWwgYi9zYW1wbGVzL1NlYXJjaGFibGVEaWN0aW9uYXJ5L3Jlcy9sYXlvdXQvbWFpbi54bWwKaW5kZXggZDBkZDUyMi4uNjY2NDE2ZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeS9yZXMvbGF5b3V0L21haW4ueG1sCisrKyBiL3NhbXBsZXMvU2VhcmNoYWJsZURpY3Rpb25hcnkvcmVzL2xheW91dC9tYWluLnhtbApAQCAtMTgsMTggKzE4LDE4IEBACiAtLT4KIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50Ij4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogICAgIDxUZXh0VmlldwogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0RmllbGQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3NlYXJjaF9pbnN0cnVjdGlvbnMiLz4KIAogICAgIDxMaXN0VmlldwogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9saXN0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMGRpcCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgogPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS9zYW1wbGVzL1NlYXJjaGFibGVEaWN0aW9uYXJ5L3Jlcy9sYXlvdXQvd29yZC54bWwgYi9zYW1wbGVzL1NlYXJjaGFibGVEaWN0aW9uYXJ5L3Jlcy9sYXlvdXQvd29yZC54bWwKaW5kZXggYmExYTNkYS4uMjFhNWVkNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9TZWFyY2hhYmxlRGljdGlvbmFyeS9yZXMvbGF5b3V0L3dvcmQueG1sCisrKyBiL3NhbXBsZXMvU2VhcmNoYWJsZURpY3Rpb25hcnkvcmVzL2xheW91dC93b3JkLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCI+CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KICAgICA8VGV4dFZpZXcKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvd29yZCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VMYXJnZSIKQEAgLTMyLDcgKzMyLDcgQEAKICAgICA8VGV4dFZpZXcKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGVmaW5pdGlvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvc2VhcmNoX2luc3RydWN0aW9ucyIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkxlZnQ9IjEwZGlwIiAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Ta2VsZXRvbkFwcC9yZXMvbGF5b3V0L3NrZWxldG9uX2FjdGl2aXR5LnhtbCBiL3NhbXBsZXMvU2tlbGV0b25BcHAvcmVzL2xheW91dC9za2VsZXRvbl9hY3Rpdml0eS54bWwKaW5kZXggYjhkY2FjNy4uMWFhNDlkZCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9Ta2VsZXRvbkFwcC9yZXMvbGF5b3V0L3NrZWxldG9uX2FjdGl2aXR5LnhtbAorKysgYi9zYW1wbGVzL1NrZWxldG9uQXBwL3Jlcy9sYXlvdXQvc2tlbGV0b25fYWN0aXZpdHkueG1sCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgIGEgcm93LCBoZXJlIHNldCB0byBiZSB2ZXJ0aWNhbCAoc28gdGhlIGZpcnN0IGlzIGF0IHRoZSB0b3ApIC0tPgogCiA8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiPgogCiAgICAgPCEtLSBGaXJzdCB2aWV3IGlzIGEgdGV4dCBlZGl0b3IuICBXZSB3YW50IGl0IHRvIHVzZSBhbGwgYXZhaWxhYmxlCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgICBpcyBhdmFpbGFibGUgdG8gaXQuICBOb3RlIHRoZSB1c2Ugb2YgdGhlICJpZCIgYXR0cmlidXRlLCB3aGljaAogICAgICAgICAgYWxsb3dzIHVzIHRvIGZpbmQgdGhpcyBvYmplY3QgZnJvbSB0aGUgSmF2YSBjb2RlLiAtLT4KICAgICA8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC9lZGl0b3IiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IiBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkaXAiCiAgICAgICAgIGFuZHJvaWQ6YXV0b1RleHQ9InRydWUiCiAgICAgICAgIGFuZHJvaWQ6Y2FwaXRhbGl6ZT0ic2VudGVuY2VzIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1NuYWtlL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9zYW1wbGVzL1NuYWtlL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggMTc0ZThiNC4uMzZhOTkzOSAxMDA2NDQKLS0tIGEvc2FtcGxlcy9TbmFrZS9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3NhbXBsZXMvU25ha2UvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMjMsNiArMjMsNyBAQAogICAgIHBhY2thZ2U9ImNvbS5leGFtcGxlLmFuZHJvaWQuc25ha2UiPgogICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmxhYmVsPSJTbmFrZSBvbiBhIFBob25lIj4KICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNuYWtlIgorICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5Ob1RpdGxlQmFyIgogICAgICAgICBhbmRyb2lkOnNjcmVlbk9yaWVudGF0aW9uPSJwb3J0cmFpdCIKICAgICAgICAgYW5kcm9pZDpjb25maWdDaGFuZ2VzPSJrZXlib2FyZEhpZGRlbnxvcmllbnRhdGlvbiI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvU25ha2UvcmVzL2xheW91dC9zbmFrZV9sYXlvdXQueG1sIGIvc2FtcGxlcy9TbmFrZS9yZXMvbGF5b3V0L3NuYWtlX2xheW91dC54bWwKaW5kZXggNTgzYzBjNC4uZWY4YWJlMyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9TbmFrZS9yZXMvbGF5b3V0L3NuYWtlX2xheW91dC54bWwKKysrIGIvc2FtcGxlcy9TbmFrZS9yZXMvbGF5b3V0L3NuYWtlX2xheW91dC54bWwKQEAgLTE1LDE5ICsxNSwxOSBAQAogLS0+CiAKIDxGcmFtZUxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0JYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiPgorCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgogCQogCTxjb20uZXhhbXBsZS5hbmRyb2lkLnNuYWtlLlNuYWtlVmlldwogCSBhbmRyb2lkOmlkPSJAK2lkL3NuYWtlIgotCQlhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJmaWxsX3BhcmVudCIKKwkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgICAgICB0aWxlU2l6ZT0iMjQiCiAgICAgICAgICAgICAgICAgLz4KIAkKIAk8UmVsYXRpdmVMYXlvdXQKLQkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IiA+CisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiA+CiAJCQogCQk8VGV4dFZpZXcKIAkJIGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvU25ha2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvc25ha2UvU25ha2UuamF2YSBiL3NhbXBsZXMvU25ha2Uvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvc25ha2UvU25ha2UuamF2YQppbmRleCA1ZmRjMDI0Li42MzA2NjkzIDEwMDY0NAotLS0gYS9zYW1wbGVzL1NuYWtlL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3NuYWtlL1NuYWtlLmphdmEKKysrIGIvc2FtcGxlcy9TbmFrZS9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9zbmFrZS9TbmFrZS5qYXZhCkBAIC00NSw5ICs0NSw2IEBACiAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwogCi0gICAgICAgIC8vIE5vIFRpdGxlIGJhcgotICAgICAgICByZXF1ZXN0V2luZG93RmVhdHVyZShXaW5kb3cuRkVBVFVSRV9OT19USVRMRSk7Ci0KICAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuc25ha2VfbGF5b3V0KTsKIAogICAgICAgICBtU25ha2VWaWV3ID0gKFNuYWtlVmlldykgZmluZFZpZXdCeUlkKFIuaWQuc25ha2UpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9Tb2Z0S2V5Ym9hcmQvcmVzL2xheW91dC9pbnB1dC54bWwgYi9zYW1wbGVzL1NvZnRLZXlib2FyZC9yZXMvbGF5b3V0L2lucHV0LnhtbAppbmRleCAxYjU3NDY4Li5kNzhhOWYyIDEwMDc1NQotLS0gYS9zYW1wbGVzL1NvZnRLZXlib2FyZC9yZXMvbGF5b3V0L2lucHV0LnhtbAorKysgYi9zYW1wbGVzL1NvZnRLZXlib2FyZC9yZXMvbGF5b3V0L2lucHV0LnhtbApAQCAtMjIsNiArMjIsNiBAQAogICAgICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQva2V5Ym9hcmQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAvPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvYWJvdXQueG1sIGIvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvYWJvdXQueG1sCmluZGV4IDNiMjViMzIuLjdiOTBmZDkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L2Fib3V0LnhtbAorKysgYi9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC9hYm91dC54bWwKQEAgLTE1LDEzICsxNSwxMyBAQAogLS0+CiAKIDxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgYW5kcm9pZDpwYWRkaW5nPSIyMGRpcCI+CiAKICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTZzcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2FwcF9kZXNjcmlwIgpAQCAtMjksNyArMjksNyBAQAogCiAgICAgPFRleHRWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWJvdXRfY3JlZGl0cyIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIyMGRpcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTZzcCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L2xvb2t1cC54bWwgYi9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC9sb29rdXAueG1sCmluZGV4IDQzY2ZmYWEuLjZiN2UzZWEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L2xvb2t1cC54bWwKKysrIGIvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvbG9va3VwLnhtbApAQCAtMTUsMTMgKzE1LDEzIEBACiAtLT4KIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iZmlsbF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAKICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGVfYmFyIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCI+CkBAIC00OSw3ICs0OSw3IEBACiAKICAgICA8V2ViVmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3dlYnZpZXciCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZGlwIgogICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiIC8+CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L3dpZGdldF9tZXNzYWdlLnhtbCBiL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L3dpZGdldF9tZXNzYWdlLnhtbAppbmRleCBiYTk0NzE0Li43YTY3NWI5IDEwMDY0NAotLS0gYS9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC93aWRnZXRfbWVzc2FnZS54bWwKKysrIGIvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvd2lkZ2V0X21lc3NhZ2UueG1sCkBAIC0xNiwxNCArMTYsMTQgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDppZD0iQCtpZC93aWRnZXQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgc3R5bGU9IkBzdHlsZS9XaWRnZXRCYWNrZ3JvdW5kIj4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21lc3NhZ2UiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTJkaXAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC93aWRnZXRfd29yZC54bWwgYi9zYW1wbGVzL1dpa3Rpb25hcnkvcmVzL2xheW91dC93aWRnZXRfd29yZC54bWwKaW5kZXggMGU3NmYwYi4uNGEwMDM4NCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9XaWt0aW9uYXJ5L3Jlcy9sYXlvdXQvd2lkZ2V0X3dvcmQueG1sCisrKyBiL3NhbXBsZXMvV2lrdGlvbmFyeS9yZXMvbGF5b3V0L3dpZGdldF93b3JkLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvd2lkZ2V0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgogICAgIHN0eWxlPSJAc3R5bGUvV2lkZ2V0QmFja2dyb3VuZCI+CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kZWZpbml0aW9uIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3dvcmRfdGl0bGUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQGlkL2J1bGxldCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvV2lrdGlvbmFyeVNpbXBsZS9yZXMvbGF5b3V0L3dpZGdldF9tZXNzYWdlLnhtbCBiL3NhbXBsZXMvV2lrdGlvbmFyeVNpbXBsZS9yZXMvbGF5b3V0L3dpZGdldF9tZXNzYWdlLnhtbAppbmRleCBiYTk0NzE0Li43YTY3NWI5IDEwMDY0NAotLS0gYS9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUvcmVzL2xheW91dC93aWRnZXRfbWVzc2FnZS54bWwKKysrIGIvc2FtcGxlcy9XaWt0aW9uYXJ5U2ltcGxlL3Jlcy9sYXlvdXQvd2lkZ2V0X21lc3NhZ2UueG1sCkBAIC0xNiwxNCArMTYsMTQgQEAKIAogPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgYW5kcm9pZDppZD0iQCtpZC93aWRnZXQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgc3R5bGU9IkBzdHlsZS9XaWRnZXRCYWNrZ3JvdW5kIj4KIAogICAgIDxUZXh0VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21lc3NhZ2UiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMTJkaXAiCiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMTBkaXAiCmRpZmYgLS1naXQgYS9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUvcmVzL2xheW91dC93aWRnZXRfd29yZC54bWwgYi9zYW1wbGVzL1dpa3Rpb25hcnlTaW1wbGUvcmVzL2xheW91dC93aWRnZXRfd29yZC54bWwKaW5kZXggMGU3NmYwYi4uNGEwMDM4NCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9XaWt0aW9uYXJ5U2ltcGxlL3Jlcy9sYXlvdXQvd2lkZ2V0X3dvcmQueG1sCisrKyBiL3NhbXBsZXMvV2lrdGlvbmFyeVNpbXBsZS9yZXMvbGF5b3V0L3dpZGdldF93b3JkLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiA8UmVsYXRpdmVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIGFuZHJvaWQ6aWQ9IkAraWQvd2lkZ2V0IgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgogICAgIHN0eWxlPSJAc3R5bGUvV2lkZ2V0QmFja2dyb3VuZCI+CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICA8VGV4dFZpZXcKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kZWZpbml0aW9uIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iZmlsbF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9iZWxvdz0iQGlkL3dvcmRfdGl0bGUiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvUmlnaHRPZj0iQGlkL2J1bGxldCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc291cmNlLnByb3BlcnRpZXMgYi9zYW1wbGVzL3NvdXJjZS5wcm9wZXJ0aWVzCmluZGV4IDczYzBkNzYuLjY0NTU3YTEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvc291cmNlLnByb3BlcnRpZXMKKysrIGIvc2FtcGxlcy9zb3VyY2UucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKIFBrZy5Vc2VyU3JjPWZhbHNlCi1QbGF0Zm9ybS5WZXJzaW9uPTIuMQogUGtnLlJldmlzaW9uPTEKIEFuZHJvaWRWZXJzaW9uLkFwaUxldmVsPTcKK0FuZHJvaWRWZXJzaW9uLkNvZGVOYW1lPUZyb3lvCiAKZGlmZiAtLWdpdCBhL3Nkay9kb2Nfc291cmNlLnByb3BlcnRpZXMgYi9zZGsvZG9jX3NvdXJjZS5wcm9wZXJ0aWVzCmluZGV4IDczYzBkNzYuLmMzYzdmODEgMTAwNjQ0Ci0tLSBhL3Nkay9kb2Nfc291cmNlLnByb3BlcnRpZXMKKysrIGIvc2RrL2RvY19zb3VyY2UucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKIFBrZy5Vc2VyU3JjPWZhbHNlCi1QbGF0Zm9ybS5WZXJzaW9uPTIuMQogUGtnLlJldmlzaW9uPTEKK0FuZHJvaWRWZXJzaW9uLkNvZGVOYW1lPUZyb3lvCiBBbmRyb2lkVmVyc2lvbi5BcGlMZXZlbD03CiAKZGlmZiAtLWdpdCBhL3Nkay9wbGF0Zm9ybV9zb3VyY2UucHJvcGVydGllcyBiL3Nkay9wbGF0Zm9ybV9zb3VyY2UucHJvcGVydGllcwppbmRleCBkNGZmNzk1Li5lODcyZjliIDEwMDY0NAotLS0gYS9zZGsvcGxhdGZvcm1fc291cmNlLnByb3BlcnRpZXMKKysrIGIvc2RrL3BsYXRmb3JtX3NvdXJjZS5wcm9wZXJ0aWVzCkBAIC0xLDUgKzEsNiBAQAotUGtnLkRlc2M9QW5kcm9pZCBTREsgUGxhdGZvcm0gMi4xX3IxCitQa2cuRGVzYz1BbmRyb2lkIFNESyBQbGF0Zm9ybSBGcm95b19yMQogUGtnLlVzZXJTcmM9ZmFsc2UKLVBsYXRmb3JtLlZlcnNpb249Mi4xCitQbGF0Zm9ybS5WZXJzaW9uPUZyb3lvCiBQa2cuUmV2aXNpb249MQogQW5kcm9pZFZlcnNpb24uQXBpTGV2ZWw9NworQW5kcm9pZFZlcnNpb24uQ29kZU5hbWU9RnJveW8KZGlmZiAtLWdpdCBhL3NpbXVsYXRvci9hcHAvUHJvcGVydHlTZXJ2ZXIuY3BwIGIvc2ltdWxhdG9yL2FwcC9Qcm9wZXJ0eVNlcnZlci5jcHAKaW5kZXggYzk0YWE3NS4uZWIxYmZjMyAxMDA2NDQKLS0tIGEvc2ltdWxhdG9yL2FwcC9Qcm9wZXJ0eVNlcnZlci5jcHAKKysrIGIvc2ltdWxhdG9yL2FwcC9Qcm9wZXJ0eVNlcnZlci5jcHAKQEAgLTEyMSw3ICsxMjEsNiBAQAogICAgICAgICB7ICJpbml0LnN2Yy5kYnVzIiwgInJ1bm5pbmciIH0sCiAgICAgICAgIHsgImluaXQuc3ZjLnBwcGRfZ3BycyIsICJydW5uaW5nIiB9LAogICAgICAgICB7ICJhZGIuY29ubmVjdGVkIiwgIjAiIH0sCi0gICAgICAgIC8veyAidXNlLWFkYi1uZXR3b3JraW5nIiwgIjEiIH0sCiAgICAgICAgIC8qCiAgICAgICAgIHsgInN0YXR1cy5iYXR0ZXJ5LnN0YXRlIiwgIlNsb3ciIH0sCiAgICAgICAgIHsgInN0YXR1cy5iYXR0ZXJ5LmxldmVsIiwgIjUiIH0sCkBAIC0xNDgsNiArMTQ3LDEyIEBACiAgICAgICAgIHsgImRlYnVnLnNmLnNob3diYWNrZ3JvdW5kIiwgIjAiIH0sCiAgICAgICAgIHsgImRlYnVnLnNmLnNob3dmcHMiLCAiMCIgfSwKICAgICAgICAgeyAiZGVmYXVsdCIsICJkZWZhdWx0IiB9LAorCisgICAgICAgIC8qIFN0YWdlZnJpZ2h0IG9wdGlvbnMgKi8KKyAgICAgICAgeyAibWVkaWEuc3RhZ2VmcmlnaHQuZW5hYmxlLXBsYXllciIsICJ0cnVlIiB9LAorICAgICAgICB7ICJtZWRpYS5zdGFnZWZyaWdodC5lbmFibGUtbWV0YSIsICJ0cnVlIiB9LAorICAgICAgICB7ICJtZWRpYS5zdGFnZWZyaWdodC5lbmFibGUtc2NhbiIsICJ0cnVlIiB9LAorICAgICAgICB7ICJtZWRpYS5zdGFnZWZyaWdodC5lbmFibGUtaHR0cCIsICJ0cnVlIiB9LAogICAgIH07CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5FTEVNKHByb3BMaXN0KTsgaSsrKQpkaWZmIC0tZ2l0IGEvc2ltdWxhdG9yL3dyYXBzaW0vQW5kcm9pZC5tayBiL3NpbXVsYXRvci93cmFwc2ltL0FuZHJvaWQubWsKaW5kZXggZjlhMjQxNC4uN2MyY2JmMiAxMDA2NDQKLS0tIGEvc2ltdWxhdG9yL3dyYXBzaW0vQW5kcm9pZC5taworKysgYi9zaW11bGF0b3Ivd3JhcHNpbS9BbmRyb2lkLm1rCkBAIC0yNSw4ICsyNSw2IEBACiAJU3lzUG93ZXIuYyBcCiAJVXRpbC5jCiAKLUxPQ0FMX0NfSU5DTFVERVMgKz0gcHJlYnVpbHQvY29tbW9uL2VzZAotCiBMT0NBTF9NT0RVTEUgOj0gbGlid3JhcHNpbQogCiAjIFJlbHlpbmcgb24gb3RoZXIgQW5kcm9pZCBsaWJyYXJpZXMgaXMgcHJvYmFibHkgYSBiYWQgaWRlYSwgc2luY2UgYW55CkBAIC0zNiw3ICszNCw3IEBACiBpZmVxICgkKEJVSUxEX1NJTV9XSVRIT1VUX0FVRElPKSx0cnVlKQogTE9DQUxfQ0ZMQUdTICs9IC1EQlVJTERfU0lNX1dJVEhPVVRfQVVESU89MQogZWxzZQotTE9DQUxfTERMSUJTICs9IC1sZXNkCitMT0NBTF9MRExJQlMgKz0gLWxhc291bmQKIGVuZGlmCiAKIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL3NpbXVsYXRvci93cmFwc2ltL0RldkF1ZGlvLmMgYi9zaW11bGF0b3Ivd3JhcHNpbS9EZXZBdWRpby5jCmluZGV4IDc1MmVlNjUuLmE4ZjVjMTYgMTAwNjQ0Ci0tLSBhL3NpbXVsYXRvci93cmFwc2ltL0RldkF1ZGlvLmMKKysrIGIvc2ltdWxhdG9yL3dyYXBzaW0vRGV2QXVkaW8uYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVzZC5oPgorI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+CiAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgpAQCAtMTksMTAgKzE5LDcgQEAKICAqIElucHV0IGV2ZW50IGRldmljZSBzdGF0ZS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgQXVkaW9TdGF0ZSB7Ci0gICAgaW50IGZkOwotICAgIGludCBzb3VyY2VJZDsKLSAgICBpbnQgZXNkVm9sOwotICAgIGludCBzdHJlYW1UeXBlOworICAgIHNuZF9wY21fdCAqaGFuZGxlOwogfSBBdWRpb1N0YXRlOwogCiAvKgpAQCAtMzMsNDUgKzMwLDMxIEBACiAjaWYgQlVJTERfU0lNX1dJVEhPVVRfQVVESU8KICAgICByZXR1cm4gMDsKICNlbHNlCi0gICAgZXNkX3BsYXllcl9pbmZvX3QgKnBpOyAKLSAgICBhdWRpb1N0YXRlLT5mZCA9IC0xOwotICAgIGF1ZGlvU3RhdGUtPnNvdXJjZUlkID0gLTE7Ci0gICAgYXVkaW9TdGF0ZS0+ZXNkVm9sID0gLTE7Ci0gICAgYXVkaW9TdGF0ZS0+c3RyZWFtVHlwZSA9IDA7CisgICAgYXVkaW9TdGF0ZS0+aGFuZGxlID0gTlVMTDsKIAotICAgIGludCBmb3JtYXQgPSBFU0RfQklUUzE2IHwgRVNEX1NURVJFTyB8IEVTRF9TVFJFQU0gfCBFU0RfUExBWTsKLSAgICBjaGFyIG5hbWVzdHJpbmdbXSA9ICJBbmRyb2lkIEF1ZGlvIFhYWFhYWFhYIjsKLSAgICBzcHJpbnRmKG5hbWVzdHJpbmcsIkFuZHJvaWQgQXVkaW8gJTA4eCIsICh1bnNpZ25lZCBpbnQpYXVkaW9TdGF0ZSk7Ci0gICAgaW50IGVzZF9mZCA9IGVzZF9wbGF5X3N0cmVhbV9mYWxsYmFjayhmb3JtYXQsIDQ0MTAwLCBOVUxMLCBuYW1lc3RyaW5nKTsKLSAgICBpZiAoZXNkX2ZkID4gMCkgewotICAgICAgICAvLyBmaW5kIHRoZSBzb3VyY2VfaWQgZm9yIHRoaXMgc3RyZWFtCi0gICAgICAgIGludCBtaXggPSBlc2Rfb3Blbl9zb3VuZChOVUxMKTsKLSAgICAgICAgaWYgKG1peCA+IDApIHsKLSAgICAgICAgICAgIGVzZF9pbmZvX3QgKmluZm8gPSBlc2RfZ2V0X2FsbF9pbmZvKG1peCk7CisgICAgc25kX3BjbV9vcGVuKCZhdWRpb1N0YXRlLT5oYW5kbGUsICJkZWZhdWx0IiwgU05EX1BDTV9TVFJFQU1fUExBWUJBQ0ssIDApOwogCi0gICAgICAgICAgICBpZiAoaW5mbykgewotICAgICAgICAgICAgICAgIGZvcihwaSA9IGluZm8tPnBsYXllcl9saXN0OyBwaTsgcGkgPSBwaS0+bmV4dCkgewotICAgICAgICAgICAgICAgICAgICBpZihzdHJjbXAocGktPm5hbWUsIG5hbWVzdHJpbmcpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvU3RhdGUtPnNvdXJjZUlkID0gcGktPnNvdXJjZV9pZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVzZF9mcmVlX2FsbF9pbmZvKGluZm8pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXNkX2Nsb3NlKG1peCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXVkaW9TdGF0ZS0+ZmQgPSBlc2RfZmQ7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChhdWRpb1N0YXRlLT5oYW5kbGUpIHsKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXNfdCAqcGFyYW1zOworICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc19tYWxsb2MoJnBhcmFtcyk7CisgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX2FueShhdWRpb1N0YXRlLT5oYW5kbGUsIHBhcmFtcyk7CisgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX3NldF9hY2Nlc3MoYXVkaW9TdGF0ZS0+aGFuZGxlLCBwYXJhbXMsIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEKTsKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXNfc2V0X2Zvcm1hdChhdWRpb1N0YXRlLT5oYW5kbGUsIHBhcmFtcywgU05EX1BDTV9GT1JNQVRfUzE2X0xFKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHJhdGUgPSA0NDEwMDsKKyAgICAgICAgc25kX3BjbV9od19wYXJhbXNfc2V0X3JhdGVfbmVhcihhdWRpb1N0YXRlLT5oYW5kbGUsIHBhcmFtcywgJnJhdGUsIE5VTEwpOworICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc19zZXRfY2hhbm5lbHMoYXVkaW9TdGF0ZS0+aGFuZGxlLCBwYXJhbXMsIDIpOworICAgICAgICBzbmRfcGNtX2h3X3BhcmFtcyhhdWRpb1N0YXRlLT5oYW5kbGUsIHBhcmFtcyk7CisgICAgICAgIHNuZF9wY21faHdfcGFyYW1zX2ZyZWUocGFyYW1zKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3c0xvZygiQ291bGRuJ3Qgb3BlbiBhdWRpbyBoYXJkd2FyZSwgZmFraW5nIGl0XG4iKTsKICAgICB9Ci0gICAgcHJpbnRmKCJDb3VsZG4ndCBvcGVuIGF1ZGlvIGRldmljZS4gRmFraW5nIGl0LlxuIik7CisKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQogCiAvKgotICogUmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBldmVudC4KLSAqCi0gKiBXZSBqdXN0IHBhc3MgdGhpcyB0aHJvdWdoIHRvIHRoZSByZWFsICJ3cml0ZSIsIHNpbmNlICJmZCIgaXMgcmVhbC4KKyAqIFdyaXRlIGF1ZGlvIGRhdGEuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHdyaXRlQXVkaW8oRmFrZURldiogZGV2LCBpbnQgZmQsIGNvbnN0IHZvaWQqIGJ1Ziwgc2l6ZV90IGNvdW50KQogewpAQCAtNzksMTEgKzYyLDEzIEBACiAgICAgcmV0dXJuIDA7CiAjZWxzZQogICAgIEF1ZGlvU3RhdGUgKnN0YXRlID0gKEF1ZGlvU3RhdGUqKWRldi0+c3RhdGU7Ci0gICAgaWYgKHN0YXRlLT5mZCA+PSAwKQotICAgICAgICByZXR1cm4gX3dzX3dyaXRlKHN0YXRlLT5mZCwgYnVmLCBjb3VudCk7CisgICAgaWYgKHN0YXRlLT5oYW5kbGUgIT0gTlVMTCkgeworICAgICAgICBzbmRfcGNtX3dyaXRlaShzdGF0ZS0+aGFuZGxlLCBidWYsIGNvdW50IC8gNCk7CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CiAKICAgICAvLyBmYWtlIHRpbWluZwotICAgIHVzbGVlcChjb3VudCAqIDEwMDAwIC8gNDQxICogNCk7CisgICAgdXNsZWVwKGNvdW50ICogMTAwMDAgLyAoNDQxICogNCkpOwogICAgIHJldHVybiBjb3VudDsKICNlbmRpZgogfQpAQCAtMTA1LDcgKzkwLDcgQEAKICAgICByZXR1cm4gMDsKICNlbHNlCiAgICAgQXVkaW9TdGF0ZSAqc3RhdGUgPSAoQXVkaW9TdGF0ZSopZGV2LT5zdGF0ZTsKLSAgICBjbG9zZShzdGF0ZS0+ZmQpOworICAgIHNuZF9wY21fY2xvc2Uoc3RhdGUtPmhhbmRsZSk7CiAgICAgZnJlZShzdGF0ZSk7CiAgICAgZGV2LT5zdGF0ZSA9IE5VTEw7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zaW11bGF0b3Ivd3JhcHNpbS9SRUFETUUudHh0IGIvc2ltdWxhdG9yL3dyYXBzaW0vUkVBRE1FLnR4dAppbmRleCAzNThjMDZjLi4zNjRkOTZkIDEwMDY0NAotLS0gYS9zaW11bGF0b3Ivd3JhcHNpbS9SRUFETUUudHh0CisrKyBiL3NpbXVsYXRvci93cmFwc2ltL1JFQURNRS50eHQKQEAgLTE5LDMgKzE5LDYgQEAKIEZvciBtb3JlIHZlcmJvc2UgbG9nZ2luZywgeW91IGNhbiBlbmFibGUgdGhlIHZlcmJvc2UgZm9ybXMgb2YgQ0FMTFRSQUNFCiBhbmQgQ0FMTFRSQUNFViBpbiBJbnRlcmNlcHQuYy4KIAorVG8gYnVpbGQsIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSB0aGUgMzItYml0IGxpYmF1ZGlvMiBkZXZlbG9wbWVudCBwYWNrYWdlCitpbnN0YWxsZWQuIE9uIFVidW50dSBIYXJkeSwgZG8gc29tZXRoaW5nIGxpa2U6CislIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpYjMyYXNvdW5kMi1kZXYKZGlmZiAtLWdpdCBhL3Rlc3RydW5uZXIvY292ZXJhZ2UucHkgYi90ZXN0cnVubmVyL2NvdmVyYWdlLnB5CmluZGV4IGM5NGZjMjYuLjUyZThhOGMgMTAwNzU1Ci0tLSBhL3Rlc3RydW5uZXIvY292ZXJhZ2UucHkKKysrIGIvdGVzdHJ1bm5lci9jb3ZlcmFnZS5weQpAQCAtODYsNyArODYsOCBAQAogCiAgIGRlZiBFeHRyYWN0UmVwb3J0KHNlbGYsIHRlc3Rfc3VpdGUsCiAgICAgICAgICAgICAgICAgICAgIGRldmljZV9jb3ZlcmFnZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9xdWFsaWZpZXI9Tm9uZSk6CiAgICAgIiIiRXh0cmFjdCBydW50aW1lIGNvdmVyYWdlIGRhdGEgYW5kIGdlbmVyYXRlIGNvZGUgY292ZXJhZ2UgcmVwb3J0LgogCiAgICAgQXNzdW1lcyB0ZXN0IGhhcyBqdXN0IGJlZW4gZXhlY3V0ZWQuCkBAIC05NCwyNSArOTUsMzAgQEAKICAgICAgIHRlc3Rfc3VpdGU6IFRlc3RTdWl0ZSB0byBnZW5lcmF0ZSBjb3ZlcmFnZSBkYXRhIGZvcgogICAgICAgZGV2aWNlX2NvdmVyYWdlX3BhdGg6IGxvY2F0aW9uIG9mIGNvdmVyYWdlIGZpbGUgb24gZGV2aWNlCiAgICAgICBvdXRwdXRfcGF0aDogcGF0aCB0byBwbGFjZSBvdXRwdXQgZmlsZXMgaW4uIElmIE5vbmUgd2lsbCB1c2UKLSAgICAgICAgPGFuZHJvaWRfcm9vdF9wYXRoPi88X0NPVkVSQUdFX1JFUE9SVF9QQVRIPi88dGFyZ2V0Pi88dGVzdD4KKyAgICAgICAgPGFuZHJvaWRfcm9vdF9wYXRoPi88X0NPVkVSQUdFX1JFUE9SVF9QQVRIPi88dGFyZ2V0Pi88dGVzdFstcXVhbGlmaWVyXT4KKyAgICAgIHRlc3RfcXVhbGlmaWVyOiBkZXNpZ25hdGVzIG1vZGUgdGVzdCB3YXMgcnVuIHdpdGguIGUuZyBzaXplPXNtYWxsLgorICAgICAgICBJZiBub3QgTm9uZSwgdGhpcyB3aWxsIGJlIHVzZWQgdG8gY3VzdG9taXplIG91dHB1dF9wYXRoIGFzIHNob3duIGFib3ZlLgogCiAgICAgUmV0dXJuczoKICAgICAgIGFic29sdXRlIGZpbGUgcGF0aCBzdHJpbmcgb2YgZ2VuZXJhdGVkIGh0bWwgcmVwb3J0IGZpbGUuCiAgICAgIiIiCiAgICAgaWYgb3V0cHV0X3BhdGggaXMgTm9uZToKKyAgICAgIHJlcG9ydF9uYW1lID0gdGVzdF9zdWl0ZS5HZXROYW1lKCkKKyAgICAgIGlmIHRlc3RfcXVhbGlmaWVyOgorICAgICAgICByZXBvcnRfbmFtZSA9IHJlcG9ydF9uYW1lICsgIi0iICsgdGVzdF9xdWFsaWZpZXIKICAgICAgIG91dHB1dF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3Jvb3RfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX0NPVkVSQUdFX1JFUE9SVF9QQVRILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdWl0ZS5HZXRUYXJnZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1aXRlLkdldE5hbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydF9uYW1lKQogCi0gICAgY292ZXJhZ2VfbG9jYWxfbmFtZSA9ICIlcy4lcyIgJSAodGVzdF9zdWl0ZS5HZXROYW1lKCksCisgICAgY292ZXJhZ2VfbG9jYWxfbmFtZSA9ICIlcy4lcyIgJSAocmVwb3J0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fVEVTVF9DT1ZFUkFHRV9FWFQpCiAgICAgY292ZXJhZ2VfbG9jYWxfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyYWdlX2xvY2FsX25hbWUpCiAgICAgaWYgc2VsZi5fYWRiLlB1bGwoZGV2aWNlX2NvdmVyYWdlX3BhdGgsIGNvdmVyYWdlX2xvY2FsX3BhdGgpOgogCiAgICAgICByZXBvcnRfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VpdGUuR2V0TmFtZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0X25hbWUpCiAgICAgICB0YXJnZXQgPSBzZWxmLl90YXJnZXRzX21hbmlmZXN0LkdldFRhcmdldCh0ZXN0X3N1aXRlLkdldFRhcmdldE5hbWUoKSkKICAgICAgIGlmIHRhcmdldCBpcyBOb25lOgogICAgICAgICBtc2cgPSBbIkVycm9yOiB0ZXN0ICVzIHJlZmVyZW5jZXMgdW5kZWZpbmVkIHRhcmdldCAlcy4iCmRpZmYgLS1naXQgYS90ZXN0cnVubmVyL2NvdmVyYWdlX3RhcmdldHMueG1sIGIvdGVzdHJ1bm5lci9jb3ZlcmFnZV90YXJnZXRzLnhtbAppbmRleCA1ZmUxMjMzLi44NjljOTA1IDEwMDY0NAotLS0gYS90ZXN0cnVubmVyL2NvdmVyYWdlX3RhcmdldHMueG1sCisrKyBiL3Rlc3RydW5uZXIvY292ZXJhZ2VfdGFyZ2V0cy54bWwKQEAgLTU3LDggKzU3LDYgQEAKICAgICA8L2NvdmVyYWdlX3RhcmdldD4KICAgIAogICAgPCEtLSBhcHBzIC0tPgotICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iQWxhcm1DbG9jayIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9BbGFybUNsb2NrIgotICAgICAgICB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iQXBpRGVtb3MiIGJ1aWxkX3BhdGg9ImRldmVsb3BtZW50L3NhbXBsZXMvQXBpRGVtb3MiCiAgICAgICAgIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJCcm93c2VyIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0Jyb3dzZXIiCkBAIC03MSwxMyArNjksMTcgQEAKICAgICAgICAgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkNvbnRhY3RzIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0NvbnRhY3RzIgogICAgICAgICB0eXBlPSJBUFBTIiAvPgorICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iRGVza0Nsb2NrIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0Rlc2tDbG9jayIKKyAgICAgICAgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkVtYWlsIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0VtYWlsIgogICAgICAgICB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iU2V0dGluZ3MiIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvU2V0dGluZ3MiCiAgICAgICAgIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJQaG9uZSIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9QaG9uZSIKICAgICAgICAgdHlwZT0iQVBQUyIgLz4KLSAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkxhdW5jaGVyIiBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0hvbWUiCisgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJRdWlja1NlYXJjaEJveCIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9RdWlja1NlYXJjaEJveCIKKyAgICAgICAgdHlwZT0iQVBQUyIgLz4KKyAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkxhdW5jaGVyMiIgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9MYXVuY2hlcjIiCiAgICAgICAgIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJNbXMiIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvTW1zIiB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iTXVzaWMiIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvTXVzaWMiCkBAIC05MCwxNCArOTIsMTAgQEAKICAgICAgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvcHJvdmlkZXJzL2NhbGVuZGFyIiB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iQ29udGFjdHNQcm92aWRlciIKICAgICAgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvcHJvdmlkZXJzL0NvbnRhY3RzUHJvdmlkZXIiIHR5cGU9IkFQUFMiIC8+Ci0gICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJHb29nbGVDb250YWN0c1Byb3ZpZGVyIgotICAgICAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9wcm92aWRlcnMvR29vZ2xlQ29udGFjdHNQcm92aWRlciIgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IkRvd25sb2FkUHJvdmlkZXIiCiAgICAgICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9Eb3dubG9hZFByb3ZpZGVyIiB0eXBlPSJBUFBTIiAvPgogICAgIDxjb3ZlcmFnZV90YXJnZXQgbmFtZT0iRHJtUHJvdmlkZXIiIGJ1aWxkX3BhdGg9InBhY2thZ2VzL3Byb3ZpZGVycy9kcm0iCiAgICAgICAgIHR5cGU9IkFQUFMiIC8+Ci0gICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJHbWFpbFByb3ZpZGVyIgotICAgICAgICBidWlsZF9wYXRoPSJwYXJ0bmVyL2dvb2dsZS9wcm92aWRlcnMvZ21haWwiIHR5cGU9IkFQUFMiIC8+CiAgICAgPGNvdmVyYWdlX3RhcmdldCBuYW1lPSJNZWRpYVByb3ZpZGVyIgogICAgICAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9wcm92aWRlcnMvTWVkaWFQcm92aWRlciIgdHlwZT0iQVBQUyIgLz4KICAgICA8Y292ZXJhZ2VfdGFyZ2V0IG5hbWU9IlNldHRpbmdzUHJvdmlkZXIiCmRpZmYgLS1naXQgYS90ZXN0cnVubmVyL3J1bnRlc3QucHkgYi90ZXN0cnVubmVyL3J1bnRlc3QucHkKaW5kZXggYTRkNzIzMS4uYTMxMzVkYiAxMDA3NTUKLS0tIGEvdGVzdHJ1bm5lci9ydW50ZXN0LnB5CisrKyBiL3Rlc3RydW5uZXIvcnVudGVzdC5weQpAQCAtMzIwLDcgKzMyMCwxMCBAQAogICAgICAgICBzZWxmLl9Eb0J1aWxkKCkKIAogICAgICAgZm9yIHRlc3Rfc3VpdGUgaW4gc2VsZi5fR2V0VGVzdHNUb1J1bigpOgotICAgICAgICB0ZXN0X3N1aXRlLlJ1bihzZWxmLl9vcHRpb25zLCBzZWxmLl9hZGIpCisgICAgICAgIHRyeToKKyAgICAgICAgICB0ZXN0X3N1aXRlLlJ1bihzZWxmLl9vcHRpb25zLCBzZWxmLl9hZGIpCisgICAgICAgIGV4Y2VwdCBlcnJvcnMuV2FpdEZvclJlc3BvbnNlVGltZWRPdXRFcnJvcjoKKyAgICAgICAgICBsb2dnZXIuTG9nKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzcG9uc2UiKQogCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgbG9nZ2VyLkxvZygiRXhpdGluZy4uLiIpCmRpZmYgLS1naXQgYS90ZXN0cnVubmVyL3Rlc3RfZGVmcy54bWwgYi90ZXN0cnVubmVyL3Rlc3RfZGVmcy54bWwKaW5kZXggNjhhNjJlNC4uNjhlYWI1ZCAxMDA2NDQKLS0tIGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMueG1sCisrKyBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzLnhtbApAQCAtMzMsMjEgKzMzLDcwIEBACiA8dGVzdCBuYW1lPSJmcmFtZXdvcmsiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0ZyYW1ld29ya1Rlc3QiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3JrdGVzdC50ZXN0cyIKLSAgICBjbGFzcz0iY29tLmFuZHJvaWQuZnJhbWV3b3JrdGVzdC5BbGxUZXN0cyIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKICAgICBjb250aW51b3VzPSJ0cnVlIiAvPgogCiA8dGVzdCBuYW1lPSJhbmRyb2lkIgogICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0cy9BbmRyb2lkVGVzdHMiCiAgICAgcGFja2FnZT0iY29tLmFuZHJvaWQudW5pdF90ZXN0cyIKLSAgICBjbGFzcz0iY29tLmFuZHJvaWQudW5pdF90ZXN0cy5BbmRyb2lkVGVzdHMiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCiAgICAgY29udGludW91cz0idHJ1ZSIgLz4KIAorPCEtLSBmcmFtZXdvcmtzIHRlc3RzIC0tPgorPHRlc3QgbmFtZT0iZnJhbWV3b3Jrcy1jb3JlIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cyIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmtzLmNvcmV0ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8dGVzdCBuYW1lPSJmcmFtZXdvcmtzLWdyYXBoaWNzIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9ncmFwaGljcy90ZXN0cy9ncmFwaGljc3Rlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3MuZ3JhcGhpY3N0ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8dGVzdCBuYW1lPSJmcmFtZXdvcmtzLWxvY2F0aW9uIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9sb2NhdGlvbi90ZXN0cy9sb2NhdGlvbnRlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3MubG9jYXRpb250ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8dGVzdCBuYW1lPSJmcmFtZXdvcmtzLXNheCIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvc2F4L3Rlc3RzL3NheHRlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3Muc2F4dGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCisgICAgY29udGludW91cz0idHJ1ZSIgLz4KKworPHRlc3QgbmFtZT0iZnJhbWV3b3Jrcy1zZXJ2aWNlcyIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2Uvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cyIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmtzLnNlcnZpY2VzdGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCisgICAgY29udGludW91cz0idHJ1ZSIgLz4KKworPHRlc3QgbmFtZT0iZnJhbWV3b3Jrcy10ZWxlcGhvbnkiCisgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3RlbGVwaG9ueS90ZXN0cy90ZWxlcGhvbnl0ZXN0cyIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmtzLnRlbGVwaG9ueXRlc3RzIgorICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgorICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CisKKzx0ZXN0IG5hbWU9ImZyYW1ld29ya3MtdnBuIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS92cG4vdGVzdHMvdnBudGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy52cG50ZXN0cyIKKyAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgorCis8IS0tICBlbmQgb2YgZnJhbWV3b3JrIHRlc3RzIC0tPgorCis8IS0tIHN1YnNldCBvZiB0aGUgYW5kcm9pZCB0ZXN0cyBmb3IganVzdCB0aGUgZGF0YWJhc2UgdGVzdHMgLS0+Cis8IS0tdGVzdCBuYW1lPSJkYXRhYmFzZSIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS90ZXN0cy9jb3JldGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5jb3JldGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8tLT4KKwogPHRlc3QgbmFtZT0iYWNjb3VudCIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvQW5kcm9pZFRlc3RzIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnVuaXRfdGVzdHMiCi0gICAgY2xhc3M9ImNvbS5hbmRyb2lkLnVuaXRfdGVzdHMuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJTZXJ2aWNlVGVzdCIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29yZS90ZXN0cy9jb3JldGVzdHMiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5jb3JldGVzdHMiCisgICAgY2xhc3M9ImFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJTZXJ2aWNlVGVzdCIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KIAogPHRlc3QgbmFtZT0ic21va2UiCkBAIC01OSwxNiArMTA4LDkgQEAKIDx0ZXN0IG5hbWU9ImNvcmUiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0NvcmVUZXN0cyIKICAgICBwYWNrYWdlPSJhbmRyb2lkLmNvcmUiCi0gICAgY2xhc3M9ImFuZHJvaWQuY29yZS5Db3JlVGVzdHMiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCiAgICAgY29udGludW91cz0idHJ1ZSIgLz4KIAotPHRlc3QgbmFtZT0ibGliY29yZSIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvQ29yZVRlc3RzIgotICAgIHBhY2thZ2U9ImFuZHJvaWQuY29yZSIKLSAgICBjbGFzcz0iYW5kcm9pZC5jb3JlLkphdmFUZXN0cyIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KLQogPHRlc3QgbmFtZT0iYXBpZGVtb3MiCiAgICAgYnVpbGRfcGF0aD0iZGV2ZWxvcG1lbnQvc2FtcGxlcy9BcGlEZW1vcyIKICAgICBwYWNrYWdlPSJjb20uZXhhbXBsZS5hbmRyb2lkLmFwaXMudGVzdHMiCkBAIC04NywxMSArMTI5LDExIEBACiAgICAgY2xhc3M9ImNvbS5hbmRyb2lkLnVuaXRfdGVzdHMuSGVhcFRlc3QiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8+CiAKLTx0ZXN0IG5hbWU9ImFjdGl2aXR5IgorPCEtLXRlc3QgbmFtZT0iYWN0aXZpdHkiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0FuZHJvaWRUZXN0cyIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzIgogICAgIGNsYXNzPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzLmFjdGl2aXR5LkFjdGl2aXR5VGVzdHMiCi0gICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8+CisgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8tLT4KIAogPHRlc3QgbmFtZT0ia2V5c3RvcmUtdW5pdCIKICAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2Uva2V5c3RvcmUvdGVzdHMiCkBAIC0xMDAsMTMgKzE0Miw2IEBACiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCiAgICAgY29udGludW91cz0idHJ1ZSIgLz4KIAotPHRlc3QgbmFtZT0idnBudGVzdHMiCi0gICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL3Rlc3RzL0FuZHJvaWRUZXN0cyIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzIgotICAgIGNsYXNzPSJjb20uYW5kcm9pZC51bml0X3Rlc3RzLlZwblRlc3QiCi0gICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiCi0gICAgY29udGludW91cz0idHJ1ZSIgLz4KLQogPCEtLSAgb2Jzb2xldGU/CiA8dGVzdCBuYW1lPSJkZWFkbG9jayIKICAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvRGVhZGxvY2siCkBAIC0xMTYsMTUgKzE1MSwxNSBAQAogCiAKIDx0ZXN0IG5hbWU9ImNvbnRlbnRwcm92aWRlcm9wZXJhdGlvbiIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVzdHMvRnJhbWV3b3JrVGVzdCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmt0ZXN0LnRlc3RzIgorICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cyIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5mcmFtZXdvcmtzLmNvcmV0ZXN0cyIKICAgICBjbGFzcz0iYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlck9wZXJhdGlvblRlc3QiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJmcmFtZXdvcmsiIC8+CiAKIDx0ZXN0IG5hbWU9InRhYmxlbWVyZ2VyIgogICAgIGJ1aWxkX3BhdGg9ImZyYW1ld29ya3MvYmFzZS90ZXN0cy9GcmFtZXdvcmtUZXN0IgogICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmZyYW1ld29ya3Rlc3QudGVzdHMiCi0gICAgY2xhc3M9ImFuZHJvaWQuY29udGVudC5BYnN0cmFjdFRhYmxlTWVyZ2VyVGVzdCIKKyAgICBjbGFzcz0iY29tLmdvb2dsZS5hbmRyb2lkLmdzZi5BYnN0cmFjdFRhYmxlTWVyZ2VyVGVzdCIKICAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KIAogPHRlc3QgbmFtZT0iaW1mIgpAQCAtMTQwLDYgKzE3NSwxMCBAQAogICAgIGNvdmVyYWdlX3RhcmdldD0iZnJhbWV3b3JrIgogICAgIGNvbnRpbnVvdXM9InRydWUiIC8+CiAKKzx0ZXN0IG5hbWU9ImNvbW1vbiIKKyAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvY29tbW9uL3Rlc3RzIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmNvbW1vbi50ZXN0cyIgLz4KKwogPCEtLSAgY3RzIHRlc3RzIC0tPgogCiA8dGVzdCBuYW1lPSJjdHMtcGVybWlzc2lvbiIKQEAgLTM1NCw3ICszOTMsOCBAQAogPHRlc3QgbmFtZT0iY2FscHJvdiIKICAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9wcm92aWRlcnMvQ2FsZW5kYXJQcm92aWRlci90ZXN0cyIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5wcm92aWRlcnMuY2FsZW5kYXIudGVzdHMiCi0gICAgY292ZXJhZ2VfdGFyZ2V0PSJDYWxlbmRhclByb3ZpZGVyIiAvPgorICAgIGNvdmVyYWdlX3RhcmdldD0iQ2FsZW5kYXJQcm92aWRlciIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgogCiA8dGVzdCBuYW1lPSJjYW1lcmFzdHJlc3MiCiAgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9DYW1lcmEiCkBAIC00MTgsMjQgKzQ1OCw2IEBACiAgICAgY2xhc3M9ImNvbS5hbmRyb2lkLmVtYWlsLlNtYWxsVGVzdHMiCiAgICAgY292ZXJhZ2VfdGFyZ2V0PSJFbWFpbCIgLz4KIAotPHRlc3QgbmFtZT0iZ2xvYmFsc2VhcmNoIgotICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvR2xvYmFsU2VhcmNoIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmdsb2JhbHNlYXJjaC50ZXN0cyIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9Ikdsb2JhbFNlYXJjaCIKLSAgICBjb250aW51b3VzPSJ0cnVlIiAvPgotCi08dGVzdCBuYW1lPSJnbG9iYWxzZWFyY2gtcGVybWlzc2lvbiIKLSAgICBidWlsZF9wYXRoPSJwYWNrYWdlcy9hcHBzL0dsb2JhbFNlYXJjaCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5nbG9iYWxzZWFyY2gucGVybWlzc2lvbi50ZXN0cyIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9Ikdsb2JhbFNlYXJjaCIKLSAgICBjb250aW51b3VzPSJ0cnVlIiAvPgotCi08dGVzdCBuYW1lPSJpbXByb3ZpZGVyLXBlcm1pc3Npb24iCi0gICAgYnVpbGRfcGF0aD0icGFja2FnZXMvcHJvdmlkZXJzL0ltUHJvdmlkZXIvdGVzdHMvcGVybWlzc2lvbiIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5wcm92aWRlcnMuaW0ucGVybWlzc2lvbi50ZXN0cyIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9IkltUHJvdmlkZXIiCi0gICAgY29udGludW91cz0idHJ1ZSIgLz4KLQogPHRlc3QgbmFtZT0ibWVkaWEiCiAgICAgYnVpbGRfcGF0aD0iZnJhbWV3b3Jrcy9iYXNlL21lZGlhL3Rlc3RzL01lZGlhRnJhbWV3b3JrVGVzdCIKICAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5tZWRpYWZyYW1ld29ya3Rlc3QiCkBAIC01MDAsMTEgKzUyMiwxOCBAQAogICAgIHJ1bm5lcj0iY29tLmFuZHJvaWQubW1zLlNtc0xhdW5jaFBlcmZvcm1hbmNlIgogICAgIGNvdmVyYWdlX3RhcmdldD0iTW1zIiAvPgogCi08dGVzdCBuYW1lPSJ0ZWxlcGhvbnktdW5pdCIKLSAgICBidWlsZF9wYXRoPSJmcmFtZXdvcmtzL2Jhc2UvdGVsZXBob255L3Rlc3RzL1RlbGVwaG9ueVRlc3QiCi0gICAgcGFja2FnZT0iY29tLmFuZHJvaWQudGVsZXBob255dGVzdCIKLSAgICBydW5uZXI9Ii5UZWxlcGhvbnlVbml0VGVzdFJ1bm5lciIKLSAgICBjb3ZlcmFnZV90YXJnZXQ9ImZyYW1ld29yayIgLz4KKzwhLS0gVW5pdCB0ZXN0cyBmb3IgdGhlIHBob25lIGFwcGxpY2F0aW9uLiAtLT4KKzx0ZXN0IG5hbWU9InBob25lLXVuaXQiCisgICAgYnVpbGRfcGF0aD0icGFja2FnZXMvYXBwcy9QaG9uZSIKKyAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5waG9uZS50ZXN0cyIKKyAgICBjb250aW51b3VzPSJ0cnVlIgorICAgIGNvdmVyYWdlX3RhcmdldD0iUGhvbmUiIC8+CisKKzx0ZXN0IG5hbWU9InF1aWNrc2VhcmNoYm94IgorICAgIGJ1aWxkX3BhdGg9InBhY2thZ2VzL2FwcHMvUXVpY2tTZWFyY2hCb3giCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQucXVpY2tzZWFyY2hib3gudGVzdHMiCisgICAgY292ZXJhZ2VfdGFyZ2V0PSJRdWlja1NlYXJjaEJveCIKKyAgICBjb250aW51b3VzPSJ0cnVlIiAvPgogCiA8IS0tIG9ic29sZXRlPwogPHRlc3QgbmFtZT0icmluZ3RvbmUiCkBAIC01MzIsMTIgKzU2MSwxMiBAQAogICAgIGRlc2NyaXB0aW9uPSJBbmRyb2lkIFNUTC4iCiAgICAgZXh0cmFfYnVpbGRfYXJncz0iQVNUTF9URVNUUz0xIiAvPgogCi08IS0tIHBlbmRpbmcgcGF0Y2ggODIwCis8IS0tIEdvb2dsZSBUZXN0IC0tPgogPHRlc3QtbmF0aXZlIG5hbWU9Imd0ZXN0IgogICAgIGJ1aWxkX3BhdGg9ImV4dGVybmFsL2d0ZXN0IgogICAgIGRlc2NyaXB0aW9uPSJHb29nbGUgdGVzdC4iCiAgICAgZXh0cmFfYnVpbGRfYXJncz0iR1RFU1RfVEVTVFM9MSIgLz4KLS0tPgorCiAKIDwhLS0gaG9zdCBqYXZhIHRlc3RzIC0tPgogPHRlc3QtaG9zdCBuYW1lPSJjdHMtYXBwc2VjdXJpdHkiCmRpZmYgLS1naXQgYS90ZXN0cnVubmVyL3Rlc3RfZGVmcy9pbnN0cnVtZW50YXRpb25fdGVzdC5weSBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzL2luc3RydW1lbnRhdGlvbl90ZXN0LnB5CmluZGV4IDQwMWE5ODAuLmM5MzJhMGIgMTAwNjQ0Ci0tLSBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzL2luc3RydW1lbnRhdGlvbl90ZXN0LnB5CisrKyBiL3Rlc3RydW5uZXIvdGVzdF9kZWZzL2luc3RydW1lbnRhdGlvbl90ZXN0LnB5CkBAIC0xNjAsNyArMTYwLDggQEAKICAgICAgICAgbG9nZ2VyLkxvZygiRXJyb3I6IGNvdWxkIG5vdCBmaW5kIGNvdmVyYWdlIGRhdGEgb24gZGV2aWNlIikKICAgICAgICAgcmV0dXJuCiAKLSAgICAgIGNvdmVyYWdlX2ZpbGUgPSBjb3ZlcmFnZV9nZW4uRXh0cmFjdFJlcG9ydChzZWxmLCBkZXZpY2VfY292ZXJhZ2VfcGF0aCkKKyAgICAgIGNvdmVyYWdlX2ZpbGUgPSBjb3ZlcmFnZV9nZW4uRXh0cmFjdFJlcG9ydCgKKyAgICAgICAgICBzZWxmLCBkZXZpY2VfY292ZXJhZ2VfcGF0aCwgdGVzdF9xdWFsaWZpZXI9b3B0aW9ucy50ZXN0X3NpemUpCiAgICAgICBpZiBjb3ZlcmFnZV9maWxlIGlzIG5vdCBOb25lOgogICAgICAgICBsb2dnZXIuTG9nKCJDb3ZlcmFnZSByZXBvcnQgZ2VuZXJhdGVkIGF0ICVzIiAlIGNvdmVyYWdlX2ZpbGUpCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL3Rlc3RydW5uZXIvdGVzdF9kZWZzL25hdGl2ZV90ZXN0LnB5IGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMvbmF0aXZlX3Rlc3QucHkKaW5kZXggZTY5MTdjOS4uZGMyNmM3MyAxMDA2NDQKLS0tIGEvdGVzdHJ1bm5lci90ZXN0X2RlZnMvbmF0aXZlX3Rlc3QucHkKKysrIGIvdGVzdHJ1bm5lci90ZXN0X2RlZnMvbmF0aXZlX3Rlc3QucHkKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgICAgIyBTaW5nbGUgcXVvdGVzIGFyZSBuZWVkZWQgdG8gcHJldmVudCB0aGUgc2hlbGwgc3BsaXR0aW5nIGl0LgogICAgICAgb3V0cHV0ID0gYWRiLlNlbmRTaGVsbENvbW1hbmQoIiclcyAyPiYxO2VjaG8gLW4gZXhpdCBjb2RlOiQ/JyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihjZCAvc2RjYXJkOyVzKSIgJSBmdWxsX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQob3B0aW9ucy50aW1lb3V0KSkKICAgICAgIHN1Y2Nlc3MgPSBvdXRwdXQuZW5kc3dpdGgoImV4aXQgY29kZTowIikKICAgICAgIGxvZ2dlci5Mb2coIiVzLi4uICVzIiAlIChmLCBzdWNjZXNzIGFuZCAib2siIG9yICJmYWlsZWQiKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2V0YzF0b29sL2V0YzF0b29sLmNwcCBiL3Rvb2xzL2V0YzF0b29sL2V0YzF0b29sLmNwcAppbmRleCBlY2Y5NmVjLi40Y2MwMjAyIDEwMDY0NAotLS0gYS90b29scy9ldGMxdG9vbC9ldGMxdG9vbC5jcHAKKysrIGIvdG9vbHMvZXRjMXRvb2wvZXRjMXRvb2wuY3BwCkBAIC0xNDIsOSArMTQyLDkgQEAKICAgICBwbmdfYnl0ZXAqIHJvd19wb2ludGVycyA9IE5VTEw7IC8vIERvZXMgbm90IG5lZWQgdG8gYmUgZGVhbGxvY2F0ZWQuCiAgICAgcG5nX3VpbnRfMzIgd2lkdGggPSAwOwogICAgIHBuZ191aW50XzMyIGhlaWdodCA9IDA7CisgICAgcG5nX3VpbnRfMzIgc3RyaWRlID0gMDsKICAgICBpbnQgcmVzdWx0ID0gLTE7CiAgICAgZXRjMV9ieXRlKiBwU291cmNlSW1hZ2UgPSAwOwotICAgIHBuZ191aW50XzMyIHN0cmlkZSA9IDA7CiAKICAgICBpZiAoKHBJbiA9IGZvcGVuKHBJbnB1dCwgInJiIikpID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlICVzIGZvciByZWFkaW5nOiAlZFxuIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmR1bnVzZWQvZmluZHVudXNlZHJlc291cmNlcyBiL3Rvb2xzL2ZpbmR1bnVzZWQvZmluZHVudXNlZHJlc291cmNlcwppbmRleCA1NGIxNTk2Li4wNzM3NjNlIDEwMDc1NQotLS0gYS90b29scy9maW5kdW51c2VkL2ZpbmR1bnVzZWRyZXNvdXJjZXMKKysrIGIvdG9vbHMvZmluZHVudXNlZC9maW5kdW51c2VkcmVzb3VyY2VzCkBAIC0xLDUgKzEsNyBAQAogIyEvYmluL3NoCiAKK0xBTkc9QworCiBpZiBbICIkMSIgPT0gIi1oIiBdCiB0aGVuCiAgICAgY2F0IDw8LSBFT0gKZGlmZiAtLWdpdCBhL3Rvb2xzL2hvc3R0ZXN0bGliL3NyYy9jb20vYW5kcm9pZC9ob3N0dGVzdC9EZXZpY2VDb25uZWN0b3IuamF2YSBiL3Rvb2xzL2hvc3R0ZXN0bGliL3NyYy9jb20vYW5kcm9pZC9ob3N0dGVzdC9EZXZpY2VDb25uZWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc0ZDcxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaG9zdHRlc3RsaWIvc3JjL2NvbS9hbmRyb2lkL2hvc3R0ZXN0L0RldmljZUNvbm5lY3Rvci5qYXZhCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuaG9zdHRlc3Q7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQW5kcm9pZERlYnVnQnJpZGdlOworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5JRGV2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5BbmRyb2lkRGVidWdCcmlkZ2UuSURldmljZUNoYW5nZUxpc3RlbmVyOworCisKKy8qKgorICogQSBoZWxwZXIgY2xhc3MgdGhhdCBjYW4gY29ubmVjdCB0byBhIGRkbWxpYiB7QGxpbmsgSURldmljZX0KKyAqLworcHVibGljIGNsYXNzIERldmljZUNvbm5lY3RvciB7CisKKyAgICAvKioKKyAgICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGEgZGV2aWNlIHRvIGJlIGNvbm5lY3RlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1dBSVRfREVWSUNFX1RJTUUgPSA1MDAwOworCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZXMgRERNUyBsaWJyYXJ5LCBhbmQgY29ubmVjdHMgdG8gc3BlY2lmaWVkIEFuZHJvaWQgZGV2aWNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGV2aWNlU2VyaWFsIHRoZSBkZXZpY2Ugc2VyaWFsIHRvIGNvbm5lY3QgdG8uIElmIDxjb2RlPm51bGw8L2NvZGU+IGNvbm5lY3QgdG8gZmlyc3QKKyAgICAgKiBkaXNjb3ZlcmVkIGRldmljZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHtAbGluayBJRGV2aWNlfSBmb3VuZAorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIG5vIGRldmljZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICovCisgICAgcHVibGljIElEZXZpY2UgY29ubmVjdFRvRGV2aWNlKFN0cmluZyBkZXZpY2VTZXJpYWwpIHsKKyAgICAgICAgLy8gaW5pdGlhbGl6ZSBERE1TIHdpdGggbm8gY2xpZW50U3VwcG9ydCBha2EgZGVidWdnZXIgc3VwcG9ydAorICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UuaW5pdChmYWxzZSAvKiBjbGllbnRTdXBwb3J0ICovKTsKKyAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlIGFkYkJyaWRnZSA9IEFuZHJvaWREZWJ1Z0JyaWRnZS5jcmVhdGVCcmlkZ2UoKTsKKyAgICAgICAgZm9yIChJRGV2aWNlIGRldmljZSA6IGFkYkJyaWRnZS5nZXREZXZpY2VzKCkpIHsKKyAgICAgICAgICAgIGlmIChkZXZpY2VTZXJpYWwgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRldmljZVNlcmlhbC5lcXVhbHMoZGV2aWNlLmdldFNlcmlhbE51bWJlcigpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogZ2V0IHNvbWUgc29ydCBvZiBsb2dnZXIgaW50ZXJmYWNlIGFzIHBhcmFtIGluc3RlYWQKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBkZXZpY2UuLi4iKTsKKyAgICAgICAgTmV3RGV2aWNlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTmV3RGV2aWNlTGlzdGVuZXIoZGV2aWNlU2VyaWFsKTsKKyAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlLmFkZERldmljZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgSURldmljZSBkZXZpY2UgPSBsaXN0ZW5lci53YWl0Rm9yRGV2aWNlKE1BWF9XQUlUX0RFVklDRV9USU1FKTsKKyAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlLnJlbW92ZURldmljZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb3VsZCBub3QgY29ubmVjdCB0byBkZXZpY2UiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihTdHJpbmcuZm9ybWF0KCJDb25uZWN0ZWQgdG8gJXMiLCBkZXZpY2UuZ2V0U2VyaWFsTnVtYmVyKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGV2aWNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIExpc3RlbmVyIGZvciBuZXcgQW5kcm9pZCBkZXZpY2VzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTmV3RGV2aWNlTGlzdGVuZXIgaW1wbGVtZW50cyBJRGV2aWNlQ2hhbmdlTGlzdGVuZXIgeworICAgICAgICBwcml2YXRlIElEZXZpY2UgbURldmljZTsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVNlcmlhbDsKKworICAgICAgICBwdWJsaWMgTmV3RGV2aWNlTGlzdGVuZXIoU3RyaW5nIHNlcmlhbCkgeworICAgICAgICAgICAgbVNlcmlhbCA9IHNlcmlhbDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGRldmljZUNoYW5nZWQoSURldmljZSBkZXZpY2UsIGludCBjaGFuZ2VNYXNrKSB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VDb25uZWN0ZWQoSURldmljZSBkZXZpY2UpIHsKKyAgICAgICAgICAgIGlmIChtU2VyaWFsID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXREZXZpY2UoZGV2aWNlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobVNlcmlhbC5lcXVhbHMoZGV2aWNlLmdldFNlcmlhbE51bWJlcigpKSkgeworICAgICAgICAgICAgICAgIHNldERldmljZShkZXZpY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZXZpY2UoSURldmljZSBkZXZpY2UpIHsKKyAgICAgICAgICAgIG1EZXZpY2UgPSBkZXZpY2U7CisgICAgICAgICAgICBub3RpZnkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGRldmljZURpc2Nvbm5lY3RlZChJRGV2aWNlIGRldmljZSkgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElEZXZpY2Ugd2FpdEZvckRldmljZShsb25nIHdhaXRUaW1lKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgICAgIGlmIChtRGV2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQod2FpdFRpbWUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIGRldmljZSBpbnRlcnJ1cHRlZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1EZXZpY2U7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9ob3N0dGVzdGxpYi9zcmMvY29tL2FuZHJvaWQvaG9zdHRlc3QvRGV2aWNlVGVzdFJ1bm5lci5qYXZhIGIvdG9vbHMvaG9zdHRlc3RsaWIvc3JjL2NvbS9hbmRyb2lkL2hvc3R0ZXN0L0RldmljZVRlc3RSdW5uZXIuamF2YQppbmRleCBhYjRjZTVmLi4zMWJhMzFjIDEwMDY0NAotLS0gYS90b29scy9ob3N0dGVzdGxpYi9zcmMvY29tL2FuZHJvaWQvaG9zdHRlc3QvRGV2aWNlVGVzdFJ1bm5lci5qYXZhCisrKyBiL3Rvb2xzL2hvc3R0ZXN0bGliL3NyYy9jb20vYW5kcm9pZC9ob3N0dGVzdC9EZXZpY2VUZXN0UnVubmVyLmphdmEKQEAgLTcxLDcgKzcxLDggQEAKICAgICAgICAgICAgICAgICBwYXJlbnRBcmdzLmFkZChhcmdzW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtRGV2aWNlID0gY29ubmVjdFRvRGV2aWNlKG1EZXZpY2VTZXJpYWwpOworICAgICAgICBEZXZpY2VDb25uZWN0b3IgY29ubmVjdG9yID0gbmV3IERldmljZUNvbm5lY3RvcigpOworICAgICAgICBtRGV2aWNlID0gY29ubmVjdG9yLmNvbm5lY3RUb0RldmljZShtRGV2aWNlU2VyaWFsKTsKICAgICAgICAgcmV0dXJuIHN1cGVyLnN0YXJ0KHBhcmVudEFyZ3MudG9BcnJheShuZXcgU3RyaW5nW3BhcmVudEFyZ3Muc2l6ZSgpXSkpOwogICAgIH0KIApAQCAtODMsNzcgKzg0LDYgQEAKICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVzIERETVMgbGlicmFyeSwgYW5kIGNvbm5lY3RzIHRvIHNwZWNpZmllZCBBbmRyb2lkIGRldmljZQotICAgICAqIEBwYXJhbSBkZXZpY2VTZXJpYWwKLSAgICAgKiBAcmV0dXJuIHtAbGluayBJRGV2aWNlfQotICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHNwZWNpZmllZCBkZXZpY2UgY2Fubm90IGJlIGZvdW5kCi0gICAgICovCi0gICAgcHJpdmF0ZSBJRGV2aWNlIGNvbm5lY3RUb0RldmljZShTdHJpbmcgZGV2aWNlU2VyaWFsKSB7Ci0gICAgICAgIC8vIGluaXRpYWxpemUgRERNUyB3aXRoIG5vIGNsaWVudFN1cHBvcnQgYWthIGRlYnVnZ2VyIHN1cHBvcnQKLSAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlLmluaXQoZmFsc2UgLyogY2xpZW50U3VwcG9ydCAqLyk7Ci0gICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZSBhZGJCcmlkZ2UgPSBBbmRyb2lkRGVidWdCcmlkZ2UuY3JlYXRlQnJpZGdlKCk7Ci0gICAgICAgIGZvciAoSURldmljZSBkZXZpY2UgOiBhZGJCcmlkZ2UuZ2V0RGV2aWNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoZGV2aWNlU2VyaWFsID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkZXZpY2VTZXJpYWwuZXF1YWxzKGRldmljZS5nZXRTZXJpYWxOdW1iZXIoKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgZGV2aWNlLi4uIik7Ci0gICAgICAgIE5ld0RldmljZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE5ld0RldmljZUxpc3RlbmVyKGRldmljZVNlcmlhbCk7Ci0gICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZS5hZGREZXZpY2VDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gICAgICAgIElEZXZpY2UgZGV2aWNlID0gbGlzdGVuZXIud2FpdEZvckRldmljZSg1MDAwKTsKLSAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlLnJlbW92ZURldmljZUNoYW5nZUxpc3RlbmVyKGxpc3RlbmVyKTsKLSAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb3VsZCBub3QgY29ubmVjdCB0byBkZXZpY2UiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGV2aWNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExpc3RlbmVyIGZvciBuZXcgQW5kcm9pZCBkZXZpY2VzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTmV3RGV2aWNlTGlzdGVuZXIgaW1wbGVtZW50cyBJRGV2aWNlQ2hhbmdlTGlzdGVuZXIgewotICAgICAgICBwcml2YXRlIElEZXZpY2UgbURldmljZTsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVNlcmlhbDsKLQotICAgICAgICBwdWJsaWMgTmV3RGV2aWNlTGlzdGVuZXIoU3RyaW5nIHNlcmlhbCkgewotICAgICAgICAgICAgbVNlcmlhbCA9IHNlcmlhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGRldmljZUNoYW5nZWQoSURldmljZSBkZXZpY2UsIGludCBjaGFuZ2VNYXNrKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VDb25uZWN0ZWQoSURldmljZSBkZXZpY2UpIHsKLSAgICAgICAgICAgIGlmIChtU2VyaWFsID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzZXREZXZpY2UoZGV2aWNlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobVNlcmlhbC5lcXVhbHMoZGV2aWNlLmdldFNlcmlhbE51bWJlcigpKSkgewotICAgICAgICAgICAgICAgIHNldERldmljZShkZXZpY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZXZpY2UoSURldmljZSBkZXZpY2UpIHsKLSAgICAgICAgICAgIG1EZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgICAgICBub3RpZnkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGRldmljZURpc2Nvbm5lY3RlZChJRGV2aWNlIGRldmljZSkgewotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIElEZXZpY2Ugd2FpdEZvckRldmljZShsb25nIHdhaXRUaW1lKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgewotICAgICAgICAgICAgICAgIGlmIChtRGV2aWNlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQod2FpdFRpbWUpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIGRldmljZSBpbnRlcnJ1cHRlZCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1EZXZpY2U7Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICAvKioKICAgICAgKiBNYWluIGVudHJ5IHBvaW50LgpAQCAtMjAyLDYgKzEzMiw3IEBACiAgICAgLyoqCiAgICAgICogT3ZlcnJpZGUgcGFyZW50IHRvIGNyZWF0ZSBEZXZpY2VUZXN0U3VpdGUgd3JhcHBlciwgaW5zdGVhZCBvZiBUZXN0U3VpdGUKICAgICAgKi8KKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgVGVzdFJlc3VsdCBydW5TaW5nbGVNZXRob2QoU3RyaW5nIHRlc3RDYXNlLCBTdHJpbmcgbWV0aG9kLCBib29sZWFuIHdhaXQpCiAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS90b29scy9tYWtlX2tleSBiL3Rvb2xzL21ha2Vfa2V5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjMDJkMTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9tYWtlX2tleQpAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBHZW5lcmF0ZXMgYSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFpciBzdWl0YWJsZSBmb3IgdXNlIGluIHNpZ25pbmcKKyMgYW5kcm9pZCAuYXBrcyBhbmQgT1RBIHVwZGF0ZSBwYWNrYWdlcy4KKworaWYgWyAiJCMiIC1uZSAyIF07IHRoZW4KKyAgY2F0IDw8RU9GCitVc2FnZTogJDAgPG5hbWU+IDxzdWJqZWN0PgorCitDcmVhdGVzIDxuYW1lPi5wazgga2V5IGFuZCA8bmFtZT4ueDUwOS5wZW0gY2VydC4gIENlcnQgY29udGFpbnMgdGhlCitnaXZlbiA8c3ViamVjdD4uCitFT0YKKyAgZXhpdCAyCitmaQorCitpZiBbWyAtZSAkMS5wazggfHwgLWUgJDEueDUwOS5wZW0gXV07IHRoZW4KKyAgZWNobyAiJDEucGs4IGFuZC9vciAkMS54NTA5LnBlbSBhbHJlYWR5IGV4aXN0OyBwbGVhc2UgZGVsZXRlIHRoZW0gZmlyc3QiCisgIGVjaG8gImlmIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlbS4iCisgIGV4aXQgMQorZmkKKworIyBVc2UgbmFtZWQgcGlwZXMgdG8gY29ubmVjdCBnZXQgdGhlIHJhdyBSU0EgcHJpdmF0ZSBrZXkgdG8gdGhlIGNlcnQtCisjIGFuZCAucGs4LWNyZWF0aW5nIHByb2dyYW1zLCB0byBhdm9pZCBoYXZpbmcgdGhlIHByaXZhdGUga2V5IGV2ZXIKKyMgdG91Y2ggdGhlIGRpc2suCisKK3RtcGRpcj0kKG1rdGVtcCAtZCkKK3RyYXAgJ3JtIC1yZiAke3RtcGRpcn07IGVjaG87IGV4aXQgMScgRVhJVCBJTlQgUVVJVAorCitvbmU9JHt0bXBkaXJ9L29uZQordHdvPSR7dG1wZGlyfS90d28KK21rbm9kICR7b25lfSBwCitta25vZCAke3R3b30gcAorY2htb2QgMDYwMCAke29uZX0gJHt0d299CisKK3JlYWQgLXAgIkVudGVyIHBhc3N3b3JkIGZvciAnJDEnIChibGFuayBmb3Igbm9uZTsgcGFzc3dvcmQgd2lsbCBiZSB2aXNpYmxlKTogIiBcCisgIHBhc3N3b3JkCisKKyggb3BlbnNzbCBnZW5yc2EgLTMgMjA0OCB8IHRlZSAke29uZX0gPiAke3R3b30gKSAmCisKK29wZW5zc2wgcmVxIC1uZXcgLXg1MDkgLXNoYTEgLWtleSAke3R3b30gLW91dCAkMS54NTA5LnBlbSBcCisgIC1kYXlzIDEwMDAwIC1zdWJqICIkMiIgJgorCitpZiBbICIke3Bhc3N3b3JkfSIgPT0gIiIgXTsgdGhlbgorICBlY2hvICJjcmVhdGluZyAkezF9LnBrOCB3aXRoIG5vIHBhc3N3b3JkIgorICBvcGVuc3NsIHBrY3M4IC1pbiAke29uZX0gLXRvcGs4IC1vdXRmb3JtIERFUiAtb3V0ICQxLnBrOCAtbm9jcnlwdAorZWxzZQorICBlY2hvICJjcmVhdGluZyAkezF9LnBrOCB3aXRoIHBhc3N3b3JkIFske3Bhc3N3b3JkfV0iCisgIGVjaG8gJHBhc3N3b3JkIHwgb3BlbnNzbCBwa2NzOCAtaW4gJHtvbmV9IC10b3BrOCAtb3V0Zm9ybSBERVIgLW91dCAkMS5wazggXAorICAgIC1wYXNzb3V0IHN0ZGluCitmaQorCit3YWl0Cit3YWl0CmRpZmYgLS1naXQgYS90b29scy9tb25rZXlydW5uZXIvc3JjL2NvbS9hbmRyb2lkL21vbmtleXJ1bm5lci9Nb25rZXlSZWNvcmRlci5qYXZhIGIvdG9vbHMvbW9ua2V5cnVubmVyL3NyYy9jb20vYW5kcm9pZC9tb25rZXlydW5uZXIvTW9ua2V5UmVjb3JkZXIuamF2YQppbmRleCBlZmMwMDJiLi5mMDZlYWZkIDEwMDY0NAotLS0gYS90b29scy9tb25rZXlydW5uZXIvc3JjL2NvbS9hbmRyb2lkL21vbmtleXJ1bm5lci9Nb25rZXlSZWNvcmRlci5qYXZhCisrKyBiL3Rvb2xzL21vbmtleXJ1bm5lci9zcmMvY29tL2FuZHJvaWQvbW9ua2V5cnVubmVyL01vbmtleVJlY29yZGVyLmphdmEKQEAgLTUyLDEyICs1MiwxMSBAQAogICogICAgbXIuY2xvc2UoKTsKICAqCiAgKiAgV2l0aCBNb25rZXlSdW5uZXIgdGhpcyBzaG91bGQgb3V0cHV0IGFuIHhtbCBmaWxlLCA8c2NyaXB0X25hbWU+LXl5eXlNTWRkLUhIOm1tOnNzLnhtbCwgaW50byB0aGUKLSAqICBkaXJlY3Rvcnkgb3V0LzxzY3JpcHRfbmFtZT4teXl5eU1NZGQtSEg6bW06c3Mgd2l0aCB0aGUgY29udGVudHM6CisgKiAgZGlyZWN0b3J5IG91dC88c2NyaXB0X25hbWU+LXl5eXlNTWRkLUhIOm1tOnNzIHdpdGggdGhlIGNvbnRlbnRzIGxpa2U6CiAgKgogICogIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J1VURi04Jz8+Ci0gKiAgPHNjcmlwdF9ydW4+Ci0gKiAgICBzY3JpcHRfbmFtZT0iZmlsZW5hbWUiCi0gKiAgICBtb25rZXlSdW5uZXJWZXJzaW9uPSIwLjIiCisgKiAgPCEtLSBNb25rZXkgU2NyaXB0IFJlc3VsdHMgLS0+CisgKiAgPHNjcmlwdF9ydW4gc2NyaXB0X25hbWU9ImZpbGVuYW1lIiBtb25rZXlSdW5uZXJWZXJzaW9uPSIwLjIiPgogICogICAgPCEtLSBEZXZpY2Ugc3BlY2lmaWMgdmFyaWFibGVzIC0tPgogICogICAgPGRldmljZV92YXIgdmFyX25hbWU9Im5hbWUiIHZhcl92YWx1ZT0idmFsdWUiIC8+CiAgKiAgICA8ZGV2aWNlX3ZhciBuYW1lPSJidWlsZC5kaXNwbGF5IiB2YWx1ZT0ib3BhbC11c2VyZGVidWcgMS42IERSQzc5IDE0MjA3IHRlc3Qta2V5cyIvPgpAQCAtOTUsMTQgKzk0LDE1IEBACiAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0RJUiA9ICJvdXQiOwogICAKICAgLy8gZm9yIGdldHRpbmcgdGhlIGRhdGUgYW5kIHRpbWUgaW4gbm93KCkKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCBTSU1QTEVfREFURV9USU1FX0ZPUk1BVCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5TU1kZC1ISDptbTpzcyIpOworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IFNJTVBMRV9EQVRFX1RJTUVfRk9STUFUID0KKyAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5TU1kZC1ISDptbTpzcyIpOwogICAKICAgLyoqCiAgICAqIENyZWF0ZSBhIG5ldyBNb25rZXlSZWNvcmRlciB0aGF0IHJlY29yZHMgY29tbWFuZHMgYW5kIHppcHMgdXAgc2NyZWVuc2hvdHMgZm9yIHN1Ym1pdHRhbAogICAgKiAKICAgICogQHBhcmFtIHNjcmlwdE5hbWUgZmlsZXBhdGggb2YgdGhlIG1vbmtleSBzY3JpcHQgd2UgYXJlIHJ1bm5pbmcKICAgICovCi0gIHB1YmxpYyBNb25rZXlSZWNvcmRlcihTdHJpbmcgc2NyaXB0TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgcHVibGljIE1vbmtleVJlY29yZGVyKFN0cmluZyBzY3JpcHROYW1lLCBTdHJpbmcgdmVyc2lvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byBzdG9yZSB4bWwgZmlsZSwgaW1hZ2VzIGFuZCB6aXBzCiAgICAgRmlsZSBzY3JpcHRGaWxlID0gbmV3IEZpbGUoc2NyaXB0TmFtZSk7CiAgICAgc2NyaXB0TmFtZSA9IHNjcmlwdEZpbGUuZ2V0TmFtZSgpOyAgLy8gR2V0IHJpZCBvZiBwYXRoCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAKICAgICAvLyBJbml0aWFsaXplIHhtbCBmaWxlCiAgICAgbVhtbEZpbGVuYW1lID0gc3RhbXBGaWxlbmFtZShzdHJpcFR5cGUoc2NyaXB0TmFtZSkgKyAiLnhtbCIpOwotICAgIGluaXRYbWxGaWxlKHNjcmlwdE5hbWUpOworICAgIGluaXRYbWxGaWxlKHNjcmlwdE5hbWUsIHZlcnNpb24pOwogICB9CiAKICAgLy8gR2V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gYSBzaW1wbGUgc3RyaW5nIGZvcm1hdCAodXNlZCBmb3IgdGltZXN0YW1waW5nIGZpbGVuYW1lcykKQEAgLTEyMywxNCArMTIzLDE2IEBACiAgICAqIEluaXRpYWxpemUgdGhlIHhtbCBmaWxlIHdyaXRlcgogICAgKiAKICAgICogQHBhcmFtIHNjcmlwdE5hbWUgZmlsZW5hbWUgKG5vdCBwYXRoKSBvZiB0aGUgbW9ua2V5IHNjcmlwdCwgc3RvcmVkIGFzIGF0dHJpYnV0ZSBpbiB0aGUgeG1sIGZpbGUKKyAgICogQHBhcmFtIHZlcnNpb24gb2YgdGhlIG1vbmtleSBydW5uZXIgdGVzdCBzeXN0ZW0KICAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdFhtbEZpbGUoU3RyaW5nIHNjcmlwdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5pdFhtbEZpbGUoU3RyaW5nIHNjcmlwdE5hbWUsIFN0cmluZyB2ZXJzaW9uKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIFN0cmluZ1tdIG5hbWVzID0gbmV3IFN0cmluZ1tdIHsgInNjcmlwdF9uYW1lIiwgIm1vbmtleVJ1bm5lclZlcnNpb24iIH07CisgICAgU3RyaW5nW10gdmFsdWVzID0gbmV3IFN0cmluZ1tdIHsgc2NyaXB0TmFtZSwgdmVyc2lvbiB9OwogICAgIG1YbWxGaWxlID0gbmV3IEZpbGVXcml0ZXIobURpcm5hbWUgKyAiLyIgKyBtWG1sRmlsZW5hbWUpOwogICAgIG1YbWxXcml0ZXIgPSBuZXcgWE1MV3JpdGVyKG1YbWxGaWxlKTsKICAgICBtWG1sV3JpdGVyLmJlZ2luKCk7CiAgICAgbVhtbFdyaXRlci5jb21tZW50KCJNb25rZXkgU2NyaXB0IFJlc3VsdHMiKTsKLSAgICBtWG1sV3JpdGVyLnN0YXJ0KCJzY3JpcHRfcnVuIik7Ci0gICAgbVhtbFdyaXRlci5hZGRBdHRyaWJ1dGUoInNjcmlwdF9uYW1lIiwgc2NyaXB0TmFtZSk7CisgICAgbVhtbFdyaXRlci5zdGFydCgic2NyaXB0X3J1biIsIG5hbWVzLCB2YWx1ZXMsIG5hbWVzLmxlbmd0aCk7CiAgIH0KICAgCiAgIC8qKgpAQCAtMTQ2LDggKzE0OCw3IEBACiAgICAqIEJlZ2luIHdyaXRpbmcgYSBjb21tYW5kIHhtbCBlbGVtZW50CiAgICAqLwogICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhcnRDb21tYW5kKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBtWG1sV3JpdGVyLnN0YXJ0KCJjb21tYW5kIik7Ci0gICAgbVhtbFdyaXRlci5hZGRBdHRyaWJ1dGUoImRhdGVUaW1lIiwgbm93KCkpOworICAgIG1YbWxXcml0ZXIuc3RhcnQoImNvbW1hbmQiLCAiZGF0ZVRpbWUiLCBub3coKSk7CiAgIH0KICAgCiAgIC8qKgpAQCAtMTg3LDcgKzE4OCw3IEBACiAgIH0KICAgCiAgIC8qKgotICAgKiBBZGQgYW4gYXR0cmlidXQgdG8gYW4geG1sIGVsZW1lbnQuIG5hbWU9ImVzY2FwZWRfdmFsdWUiCisgICAqIEFkZCBhbiBhdHRyaWJ1dCB0byBhbiBvcGVuIHhtbCBlbGVtZW50LiBuYW1lPSJlc2NhcGVkX3ZhbHVlIgogICAgKiAKICAgICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCiAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlCkBAIC0yNTMsMjAgKzI1NCw2IEBACiAgICAgICByZXR1cm4gZmlsZW5hbWU7CiAgICAgcmV0dXJuIGZpbGVuYW1lLnN1YnN0cmluZygwLCB0eXBlSW5kZXgpOwogICB9Ci0gIAotICAgLyoqCi0gICAqIEFkZCBhIHNpZ25hdHVyZSBlbGVtZW50Ci0gICAqCi0gICAqIEBwYXJhbSBmaWxlbmFtZSBwYXRoIG9mIGZpbGUgdG8gYmUgc2lnbmF0dXJlZAotICAgKi8KLSAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkTUQ1U2lnbmF0dXJlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIFN0cmluZyBzaWduYXR1cmUgPSAiIjsKLSAgICAgIC8vIGZpbmQgc2lnbmF0dXJlLi4uIE1ENSBzaWcgPSBuZXcgTUQ1KGZpbGVuYW1lKTsgc2lnbmF0dXJlID0gc2lnLnRvU3RyaW5nKCk7Ci0gICAgICBTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbXSB7ICJ0eXBlIiwgImZpbGVuYW1lIiwgInNpZ25hdHVyZSIgfTsKLSAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IG5ldyBTdHJpbmdbXSB7ICJtZDUiLCBmaWxlbmFtZSwgc2lnbmF0dXJlIH07Ci0gICAgICBtWG1sV3JpdGVyLnRhZygiU2lnbmF0dXJlIiwgbmFtZXMsIHZhbHVlcywgdmFsdWVzLmxlbmd0aCk7Ci0gICB9Ci0gCiAKICAgLyoqCiAgICAqIENsb3NlIHRoZSBtb25rZXlSZWNvcmRlciBieSBjbG9zaW5nIHRoZSB4bWwgZmlsZSBhbmQgemlwcGluZyBpdCB1cCB3aXRoIHRoZSBzY3JlZW5zaG90cy4KZGlmZiAtLWdpdCBhL3Rvb2xzL21vbmtleXJ1bm5lci9zcmMvY29tL2FuZHJvaWQvbW9ua2V5cnVubmVyL01vbmtleVJ1bm5lci5qYXZhIGIvdG9vbHMvbW9ua2V5cnVubmVyL3NyYy9jb20vYW5kcm9pZC9tb25rZXlydW5uZXIvTW9ua2V5UnVubmVyLmphdmEKaW5kZXggMDdhNDczOS4uNDczNGJhMSAxMDA2NDQKLS0tIGEvdG9vbHMvbW9ua2V5cnVubmVyL3NyYy9jb20vYW5kcm9pZC9tb25rZXlydW5uZXIvTW9ua2V5UnVubmVyLmphdmEKKysrIGIvdG9vbHMvbW9ua2V5cnVubmVyL3NyYy9jb20vYW5kcm9pZC9tb25rZXlydW5uZXIvTW9ua2V5UnVubmVyLmphdmEKQEAgLTY5LDcgKzY5LDcgQEAKICAgZmluYWwgc3RhdGljIGludCBLRVlfSU5QVVRfREVMQVkgPSAxMDAwOwogICAKICAgLy8gdmVyc2lvbiBvZiBtb25rZXkgcnVubmVyCi0gIGZpbmFsIHN0YXRpYyBTdHJpbmcgbW9ua2V5UnVubmVyVmVyc2lvbiA9ICIwLjMxIjsKKyAgZmluYWwgc3RhdGljIFN0cmluZyBtb25rZXlSdW5uZXJWZXJzaW9uID0gIjAuNCI7CiAKICAgLy8gVE9ETzogaW50ZXJmYWNlIGNtZDsgY2xhc3MgeG1sIHRhZ3M7IGZpeCBsb2dnZXI7IHRlc3QgY2xhc3Mvc2NyaXB0CiAKQEAgLTIyMiwxMCArMjIyLDkgQEAKICAgICBwcmVzcygiaG9tZSIsIGZhbHNlKTsKICAgICAKICAgICAvLyBTdGFydCByZWNvcmRpbmcgdGhlIHNjcmlwdCBvdXRwdXQsIG1pZ2h0IHdhbnQgbWQ1IHNpZ25hdHVyZSBvZiBmaWxlIGZvciBjb21wbGV0ZW5lc3MKLSAgICBtb25rZXlSZWNvcmRlciA9IG5ldyBNb25rZXlSZWNvcmRlcihzY3JpcHROYW1lKTsKKyAgICBtb25rZXlSZWNvcmRlciA9IG5ldyBNb25rZXlSZWNvcmRlcihzY3JpcHROYW1lLCBtb25rZXlSdW5uZXJWZXJzaW9uKTsKIAotICAgIC8vIFJlY29yZCB3aGF0IGRldmljZSBhbmQgdmVyc2lvbiBvZiBzb2Z0d2FyZSB3ZSBhcmUgcnVubmluZyBvbgotICAgIG1vbmtleVJlY29yZGVyLmFkZEF0dHJpYnV0ZSgibW9ua2V5UnVubmVyVmVyc2lvbiIsIG1vbmtleVJ1bm5lclZlcnNpb24pOworICAgIC8vIFJlY29yZCB3aGF0IGRldmljZSB3ZSBhcmUgcnVubmluZyBvbgogICAgIGFkZERldmljZVZhcnMoKTsKICAgICBtb25rZXlSZWNvcmRlci5hZGRDb21tZW50KCJTY3JpcHQgY29tbWFuZHMiKTsKICAgfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9BbmRyb2lkLm1rIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYmViMmMKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL0FuZHJvaWQubWsKQEAgLTAsMCArMSwzMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworIyBPbmx5IGJ1aWxkIGFwayBpZiB0aGlzIHBhY2thZ2UgaXMgYWRkZWQgdG8gQ1VTVE9NX01PRExVRVMgaW4gYnVpbGRzcGVjLm1rCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCisjIE9ubHkgY29tcGlsZSBzb3VyY2UgamF2YSBmaWxlcyBpbiB0aGlzIGFway4KK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IE5vdGVwYWR2MQorCisjIE1ha2UgdGhlIGFwcCBidWlsZCBhZ2FpbnN0IHRoZSBjdXJyZW50IFNESworTE9DQUxfU0RLX1ZFUlNJT04gOj0gY3VycmVudAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTAyM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDEiPgorICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY29uIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLk5vdGVwYWR2MSIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisgICAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL2RyYXdhYmxlL2ljb24ucG5nIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9yZXMvZHJhd2FibGUvaWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjRlMzYwMQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL2RyYXdhYmxlL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL2xheW91dC9ub3RlcGFkX2xpc3QueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9yZXMvbGF5b3V0L25vdGVwYWRfbGlzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTU0ODg4ZAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL2xheW91dC9ub3RlcGFkX2xpc3QueG1sCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKzwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Njk4OTYxCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXNvdXJjZXM+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+Tm90ZXBhZCB2MTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fbm90ZXMiPk5vIE5vdGVzIFlldDwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVwYWR2MS5qYXZhIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3RlcGFkdjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjczZjQyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3RlcGFkdjEuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMTsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OworaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKKworcHVibGljIGNsYXNzIE5vdGVwYWR2MSBleHRlbmRzIEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIGludCBtTm90ZU51bWJlciA9IDE7CisKKyAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFjdGl2aXR5IGlzIGZpcnN0IGNyZWF0ZWQuICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUoTWVudSBtZW51KSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uQ3JlYXRlT3B0aW9uc01lbnUobWVudSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25PcHRpb25zSXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICByZXR1cm4gc3VwZXIub25PcHRpb25zSXRlbVNlbGVjdGVkKGl0ZW0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXNEYkFkYXB0ZXIuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjEvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXNEYkFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzI5NWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MS9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3Rlc0RiQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAqIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCisgKiB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDE7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLlNRTEV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZTsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVPcGVuSGVscGVyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKKy8qKgorICogU2ltcGxlIG5vdGVzIGRhdGFiYXNlIGFjY2VzcyBoZWxwZXIgY2xhc3MuIERlZmluZXMgdGhlIGJhc2ljIENSVUQgb3BlcmF0aW9ucworICogZm9yIHRoZSBub3RlcGFkIGV4YW1wbGUsIGFuZCBnaXZlcyB0aGUgYWJpbGl0eSB0byBsaXN0IGFsbCBub3RlcyBhcyB3ZWxsIGFzCisgKiByZXRyaWV2ZSBvciBtb2RpZnkgYSBzcGVjaWZpYyBub3RlLgorICogCisgKiBUaGlzIGhhcyBiZWVuIGltcHJvdmVkIGZyb20gdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhpcyB0dXRvcmlhbCB0aHJvdWdoIHRoZQorICogYWRkaXRpb24gb2YgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCBhbHNvIHVzaW5nIHJldHVybmluZyBhIEN1cnNvciBpbnN0ZWFkCisgKiBvZiB1c2luZyBhIGNvbGxlY3Rpb24gb2YgaW5uZXIgY2xhc3NlcyAod2hpY2ggaXMgbGVzcyBzY2FsYWJsZSBhbmQgbm90CisgKiByZWNvbW1lbmRlZCkuCisgKi8KK3B1YmxpYyBjbGFzcyBOb3Rlc0RiQWRhcHRlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVElUTEUgPSAidGl0bGUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9CT0RZID0gImJvZHkiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ST1dJRCA9ICJfaWQiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOb3Rlc0RiQWRhcHRlciI7CisgICAgcHJpdmF0ZSBEYXRhYmFzZUhlbHBlciBtRGJIZWxwZXI7CisgICAgcHJpdmF0ZSBTUUxpdGVEYXRhYmFzZSBtRGI7CisKKyAgICAvKioKKyAgICAgKiBEYXRhYmFzZSBjcmVhdGlvbiBzcWwgc3RhdGVtZW50CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX0NSRUFURSA9CisgICAgICAgICJjcmVhdGUgdGFibGUgbm90ZXMgKF9pZCBpbnRlZ2VyIHByaW1hcnkga2V5IGF1dG9pbmNyZW1lbnQsICIKKyAgICAgICAgKyAidGl0bGUgdGV4dCBub3QgbnVsbCwgYm9keSB0ZXh0IG5vdCBudWxsKTsiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX05BTUUgPSAiZGF0YSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX1RBQkxFID0gIm5vdGVzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VfVkVSU0lPTiA9IDI7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUN0eDsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERhdGFiYXNlSGVscGVyIGV4dGVuZHMgU1FMaXRlT3BlbkhlbHBlciB7CisKKyAgICAgICAgRGF0YWJhc2VIZWxwZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0LCBEQVRBQkFTRV9OQU1FLCBudWxsLCBEQVRBQkFTRV9WRVJTSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShTUUxpdGVEYXRhYmFzZSBkYikgeworCisgICAgICAgICAgICBkYi5leGVjU1FMKERBVEFCQVNFX0NSRUFURSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25VcGdyYWRlKFNRTGl0ZURhdGFiYXNlIGRiLCBpbnQgb2xkVmVyc2lvbiwgaW50IG5ld1ZlcnNpb24pIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIlVwZ3JhZGluZyBkYXRhYmFzZSBmcm9tIHZlcnNpb24gIiArIG9sZFZlcnNpb24gKyAiIHRvICIKKyAgICAgICAgICAgICAgICAgICAgKyBuZXdWZXJzaW9uICsgIiwgd2hpY2ggd2lsbCBkZXN0cm95IGFsbCBvbGQgZGF0YSIpOworICAgICAgICAgICAgZGIuZXhlY1NRTCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgbm90ZXMiKTsKKyAgICAgICAgICAgIG9uQ3JlYXRlKGRiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIC0gdGFrZXMgdGhlIGNvbnRleHQgdG8gYWxsb3cgdGhlIGRhdGFiYXNlIHRvIGJlCisgICAgICogb3BlbmVkL2NyZWF0ZWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gY3R4IHRoZSBDb250ZXh0IHdpdGhpbiB3aGljaCB0byB3b3JrCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyKENvbnRleHQgY3R4KSB7CisgICAgICAgIHRoaXMubUN0eCA9IGN0eDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPcGVuIHRoZSBub3RlcyBkYXRhYmFzZS4gSWYgaXQgY2Fubm90IGJlIG9wZW5lZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldworICAgICAqIGluc3RhbmNlIG9mIHRoZSBkYXRhYmFzZS4gSWYgaXQgY2Fubm90IGJlIGNyZWF0ZWQsIHRocm93IGFuIGV4Y2VwdGlvbiB0bworICAgICAqIHNpZ25hbCB0aGUgZmFpbHVyZQorICAgICAqIAorICAgICAqIEByZXR1cm4gdGhpcyAoc2VsZiByZWZlcmVuY2UsIGFsbG93aW5nIHRoaXMgdG8gYmUgY2hhaW5lZCBpbiBhbgorICAgICAqICAgICAgICAgaW5pdGlhbGl6YXRpb24gY2FsbCkKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiB0aGUgZGF0YWJhc2UgY291bGQgYmUgbmVpdGhlciBvcGVuZWQgb3IgY3JlYXRlZAorICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlciBvcGVuKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBEYXRhYmFzZUhlbHBlcihtQ3R4KTsKKyAgICAgICAgbURiID0gbURiSGVscGVyLmdldFdyaXRhYmxlRGF0YWJhc2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG1EYkhlbHBlci5jbG9zZSgpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IG5vdGUgdXNpbmcgdGhlIHRpdGxlIGFuZCBib2R5IHByb3ZpZGVkLiBJZiB0aGUgbm90ZSBpcworICAgICAqIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIHJldHVybiB0aGUgbmV3IHJvd0lkIGZvciB0aGF0IG5vdGUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgKiBhIC0xIHRvIGluZGljYXRlIGZhaWx1cmUuCisgICAgICogCisgICAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgbm90ZQorICAgICAqIEBwYXJhbSBib2R5IHRoZSBib2R5IG9mIHRoZSBub3RlCisgICAgICogQHJldHVybiByb3dJZCBvciAtMSBpZiBmYWlsZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgbG9uZyBjcmVhdGVOb3RlKFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBpbml0aWFsVmFsdWVzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLmluc2VydChEQVRBQkFTRV9UQUJMRSwgbnVsbCwgaW5pdGlhbFZhbHVlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVsZXRlIHRoZSBub3RlIHdpdGggdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gZGVsZXRlCisgICAgICogQHJldHVybiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGRlbGV0ZU5vdGUobG9uZyByb3dJZCkgeworCisgICAgICAgIHJldHVybiBtRGIuZGVsZXRlKERBVEFCQVNFX1RBQkxFLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBvdmVyIHRoZSBsaXN0IG9mIGFsbCBub3RlcyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBvdmVyIGFsbCBub3RlcworICAgICAqLworICAgIHB1YmxpYyBDdXJzb3IgZmV0Y2hBbGxOb3RlcygpIHsKKworICAgICAgICByZXR1cm4gbURiLnF1ZXJ5KERBVEFCQVNFX1RBQkxFLCBuZXcgU3RyaW5nW10ge0tFWV9ST1dJRCwgS0VZX1RJVExFLAorICAgICAgICAgICAgICAgIEtFWV9CT0RZfSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIHBvc2l0aW9uZWQgYXQgdGhlIG5vdGUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHJldHJpZXZlCisgICAgICogQHJldHVybiBDdXJzb3IgcG9zaXRpb25lZCB0byBtYXRjaGluZyBub3RlLCBpZiBmb3VuZAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIG5vdGUgY291bGQgbm90IGJlIGZvdW5kL3JldHJpZXZlZAorICAgICAqLworICAgIHB1YmxpYyBDdXJzb3IgZmV0Y2hOb3RlKGxvbmcgcm93SWQpIHRocm93cyBTUUxFeGNlcHRpb24geworCisgICAgICAgIEN1cnNvciBtQ3Vyc29yID0KKworICAgICAgICAgICAgbURiLnF1ZXJ5KHRydWUsIERBVEFCQVNFX1RBQkxFLCBuZXcgU3RyaW5nW10ge0tFWV9ST1dJRCwKKyAgICAgICAgICAgICAgICAgICAgS0VZX1RJVExFLCBLRVlfQk9EWX0sIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsLAorICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgaWYgKG1DdXJzb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUN1cnNvci5tb3ZlVG9GaXJzdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQ3Vyc29yOworCisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBub3RlIHVzaW5nIHRoZSBkZXRhaWxzIHByb3ZpZGVkLiBUaGUgbm90ZSB0byBiZSB1cGRhdGVkIGlzCisgICAgICogc3BlY2lmaWVkIHVzaW5nIHRoZSByb3dJZCwgYW5kIGl0IGlzIGFsdGVyZWQgdG8gdXNlIHRoZSB0aXRsZSBhbmQgYm9keQorICAgICAqIHZhbHVlcyBwYXNzZWQgaW4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byB1cGRhdGUKKyAgICAgKiBAcGFyYW0gdGl0bGUgdmFsdWUgdG8gc2V0IG5vdGUgdGl0bGUgdG8KKyAgICAgKiBAcGFyYW0gYm9keSB2YWx1ZSB0byBzZXQgbm90ZSBib2R5IHRvCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBub3RlIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlTm90ZShsb25nIHJvd0lkLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgYXJncyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBhcmdzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi51cGRhdGUoREFUQUJBU0VfVEFCTEUsIGFyZ3MsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL0FuZHJvaWQubWsgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJjNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL0FuZHJvaWQubWsKQEAgLTAsMCArMSwzMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworIyBPbmx5IGJ1aWxkIGFwayBpZiB0aGlzIHBhY2thZ2UgaXMgYWRkZWQgdG8gQ1VTVE9NX01PRExVRVMgaW4gYnVpbGRzcGVjLm1rCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCisjIE9ubHkgY29tcGlsZSBzb3VyY2UgamF2YSBmaWxlcyBpbiB0aGlzIGFway4KK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKKworTE9DQUxfUEFDS0FHRV9OQU1FIDo9IE5vdGVwYWR2MVNvbHV0aW9uCisKKyMgTWFrZSB0aGUgYXBwIGJ1aWxkIGFnYWluc3QgdGhlIGN1cnJlbnQgU0RLCitMT0NBTF9TREtfVkVSU0lPTiA6PSBjdXJyZW50CisKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTAyM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMSI+CisgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljb24iPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZXBhZHYxIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICA8L2FwcGxpY2F0aW9uPgorPC9tYW5pZmVzdD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3Jlcy9kcmF3YWJsZS9pY29uLnBuZyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvZHJhd2FibGUvaWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjRlMzYwMQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvZHJhd2FibGUvaWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXBhZF9saXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVwYWRfbGlzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGM4ZGJhYgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVwYWRfbGlzdC54bWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisKKwk8TGlzdFZpZXcgYW5kcm9pZDppZD0iQGlkL2FuZHJvaWQ6bGlzdCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KKyAgCTxUZXh0VmlldyBhbmRyb2lkOmlkPSJAaWQvYW5kcm9pZDplbXB0eSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub19ub3RlcyIvPgorICAgICAgICAKKzwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0MDViNTIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxUZXh0VmlldyBhbmRyb2lkOmlkPSJAK2lkL3RleHQxIgorICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2NWJjNjIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8cmVzb3VyY2VzPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPk5vdGVwYWQgdjE8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX25vdGVzIj5ObyBOb3RlcyBZZXQ8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfaW5zZXJ0Ij5BZGQgSXRlbTwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXBhZHYxLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXBhZHYxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTE4MTllZAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjFTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMS9Ob3RlcGFkdjEuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMTsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2ltcGxlQ3Vyc29yQWRhcHRlcjsKKworcHVibGljIGNsYXNzIE5vdGVwYWR2MSBleHRlbmRzIExpc3RBY3Rpdml0eSB7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TRVJUX0lEID0gTWVudS5GSVJTVDsKKwkKKwlwcml2YXRlIGludCBtTm90ZU51bWJlciA9IDE7CisJcHJpdmF0ZSBOb3Rlc0RiQWRhcHRlciBtRGJIZWxwZXI7CisgICAgCisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZXBhZF9saXN0KTsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IE5vdGVzRGJBZGFwdGVyKHRoaXMpOworICAgICAgICBtRGJIZWxwZXIub3BlbigpOworICAgICAgICBmaWxsRGF0YSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUoTWVudSBtZW51KSB7CisgICAgCWJvb2xlYW4gcmVzdWx0ID0gc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKKyAgICAgICAgbWVudS5hZGQoMCwgSU5TRVJUX0lELCAwLCBSLnN0cmluZy5tZW51X2luc2VydCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25PcHRpb25zSXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKKyAgICAJc3dpdGNoIChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgIGNhc2UgSU5TRVJUX0lEOgorICAgICAgICAgICAgY3JlYXRlTm90ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uT3B0aW9uc0l0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU5vdGUoKSB7CisgICAgICAgIFN0cmluZyBub3RlTmFtZSA9ICJOb3RlICIgKyBtTm90ZU51bWJlcisrOworICAgICAgICBtRGJIZWxwZXIuY3JlYXRlTm90ZShub3RlTmFtZSwgIiIpOworICAgICAgICBmaWxsRGF0YSgpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgZmlsbERhdGEoKSB7CisgICAgICAgIC8vIEdldCBhbGwgb2YgdGhlIG5vdGVzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBjcmVhdGUgdGhlIGl0ZW0gbGlzdAorICAgICAgICBDdXJzb3IgYyA9IG1EYkhlbHBlci5mZXRjaEFsbE5vdGVzKCk7CisgICAgICAgIHN0YXJ0TWFuYWdpbmdDdXJzb3IoYyk7CisKKyAgICAgICAgU3RyaW5nW10gZnJvbSA9IG5ldyBTdHJpbmdbXSB7IE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSB9OworICAgICAgICBpbnRbXSB0byA9IG5ldyBpbnRbXSB7IFIuaWQudGV4dDEgfTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjcmVhdGUgYW4gYXJyYXkgYWRhcHRlciBhbmQgc2V0IGl0IHRvIGRpc3BsYXkgdXNpbmcgb3VyIHJvdworICAgICAgICBTaW1wbGVDdXJzb3JBZGFwdGVyIG5vdGVzID0KKyAgICAgICAgICAgIG5ldyBTaW1wbGVDdXJzb3JBZGFwdGVyKHRoaXMsIFIubGF5b3V0Lm5vdGVzX3JvdywgYywgZnJvbSwgdG8pOworICAgICAgICBzZXRMaXN0QWRhcHRlcihub3Rlcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVzRGJBZGFwdGVyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYxU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDEvTm90ZXNEYkFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzI5NWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MVNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQxL05vdGVzRGJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuU1FMRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZU9wZW5IZWxwZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworLyoqCisgKiBTaW1wbGUgbm90ZXMgZGF0YWJhc2UgYWNjZXNzIGhlbHBlciBjbGFzcy4gRGVmaW5lcyB0aGUgYmFzaWMgQ1JVRCBvcGVyYXRpb25zCisgKiBmb3IgdGhlIG5vdGVwYWQgZXhhbXBsZSwgYW5kIGdpdmVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIG5vdGVzIGFzIHdlbGwgYXMKKyAqIHJldHJpZXZlIG9yIG1vZGlmeSBhIHNwZWNpZmljIG5vdGUuCisgKiAKKyAqIFRoaXMgaGFzIGJlZW4gaW1wcm92ZWQgZnJvbSB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGlzIHR1dG9yaWFsIHRocm91Z2ggdGhlCisgKiBhZGRpdGlvbiBvZiBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGFsc28gdXNpbmcgcmV0dXJuaW5nIGEgQ3Vyc29yIGluc3RlYWQKKyAqIG9mIHVzaW5nIGEgY29sbGVjdGlvbiBvZiBpbm5lciBjbGFzc2VzICh3aGljaCBpcyBsZXNzIHNjYWxhYmxlIGFuZCBub3QKKyAqIHJlY29tbWVuZGVkKS4KKyAqLworcHVibGljIGNsYXNzIE5vdGVzRGJBZGFwdGVyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USVRMRSA9ICJ0aXRsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0JPRFkgPSAiYm9keSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1JPV0lEID0gIl9pZCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5vdGVzRGJBZGFwdGVyIjsKKyAgICBwcml2YXRlIERhdGFiYXNlSGVscGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIFNRTGl0ZURhdGFiYXNlIG1EYjsKKworICAgIC8qKgorICAgICAqIERhdGFiYXNlIGNyZWF0aW9uIHNxbCBzdGF0ZW1lbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfQ1JFQVRFID0KKyAgICAgICAgImNyZWF0ZSB0YWJsZSBub3RlcyAoX2lkIGludGVnZXIgcHJpbWFyeSBrZXkgYXV0b2luY3JlbWVudCwgIgorICAgICAgICArICJ0aXRsZSB0ZXh0IG5vdCBudWxsLCBib2R5IHRleHQgbm90IG51bGwpOyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfTkFNRSA9ICJkYXRhIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfVEFCTEUgPSAibm90ZXMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRV9WRVJTSU9OID0gMjsKKworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ3R4OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0YWJhc2VIZWxwZXIgZXh0ZW5kcyBTUUxpdGVPcGVuSGVscGVyIHsKKworICAgICAgICBEYXRhYmFzZUhlbHBlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIERBVEFCQVNFX05BTUUsIG51bGwsIERBVEFCQVNFX1ZFUlNJT04pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKFNRTGl0ZURhdGFiYXNlIGRiKSB7CisKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoREFUQUJBU0VfQ1JFQVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblVwZ3JhZGUoU1FMaXRlRGF0YWJhc2UgZGIsIGludCBvbGRWZXJzaW9uLCBpbnQgbmV3VmVyc2lvbikgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiVXBncmFkaW5nIGRhdGFiYXNlIGZyb20gdmVyc2lvbiAiICsgb2xkVmVyc2lvbiArICIgdG8gIgorICAgICAgICAgICAgICAgICAgICArIG5ld1ZlcnNpb24gKyAiLCB3aGljaCB3aWxsIGRlc3Ryb3kgYWxsIG9sZCBkYXRhIik7CisgICAgICAgICAgICBkYi5leGVjU1FMKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBub3RlcyIpOworICAgICAgICAgICAgb25DcmVhdGUoZGIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgLSB0YWtlcyB0aGUgY29udGV4dCB0byBhbGxvdyB0aGUgZGF0YWJhc2UgdG8gYmUKKyAgICAgKiBvcGVuZWQvY3JlYXRlZAorICAgICAqIAorICAgICAqIEBwYXJhbSBjdHggdGhlIENvbnRleHQgd2l0aGluIHdoaWNoIHRvIHdvcmsKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgdGhpcy5tQ3R4ID0gY3R4OworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW4gdGhlIG5vdGVzIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgb3BlbmVkLCB0cnkgdG8gY3JlYXRlIGEgbmV3CisgICAgICogaW5zdGFuY2Ugb2YgdGhlIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgY3JlYXRlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIHRvCisgICAgICogc2lnbmFsIHRoZSBmYWlsdXJlCisgICAgICogCisgICAgICogQHJldHVybiB0aGlzIChzZWxmIHJlZmVyZW5jZSwgYWxsb3dpbmcgdGhpcyB0byBiZSBjaGFpbmVkIGluIGFuCisgICAgICogICAgICAgICBpbml0aWFsaXphdGlvbiBjYWxsKQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIHRoZSBkYXRhYmFzZSBjb3VsZCBiZSBuZWl0aGVyIG9wZW5lZCBvciBjcmVhdGVkCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyIG9wZW4oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IERhdGFiYXNlSGVscGVyKG1DdHgpOworICAgICAgICBtRGIgPSBtRGJIZWxwZXIuZ2V0V3JpdGFibGVEYXRhYmFzZSgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgbURiSGVscGVyLmNsb3NlKCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbm90ZSB1c2luZyB0aGUgdGl0bGUgYW5kIGJvZHkgcHJvdmlkZWQuIElmIHRoZSBub3RlIGlzCisgICAgICogc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgcmV0dXJuIHRoZSBuZXcgcm93SWQgZm9yIHRoYXQgbm90ZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAqIGEgLTEgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBub3RlCisgICAgICogQHBhcmFtIGJvZHkgdGhlIGJvZHkgb2YgdGhlIG5vdGUKKyAgICAgKiBAcmV0dXJuIHJvd0lkIG9yIC0xIGlmIGZhaWxlZAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGNyZWF0ZU5vdGUoU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGluaXRpYWxWYWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIuaW5zZXJ0KERBVEFCQVNFX1RBQkxFLCBudWxsLCBpbml0aWFsVmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgdGhlIG5vdGUgd2l0aCB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byBkZWxldGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlTm90ZShsb25nIHJvd0lkKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5kZWxldGUoREFUQUJBU0VfVEFCTEUsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIG92ZXIgdGhlIGxpc3Qgb2YgYWxsIG5vdGVzIGluIHRoZSBkYXRhYmFzZQorICAgICAqIAorICAgICAqIEByZXR1cm4gQ3Vyc29yIG92ZXIgYWxsIG5vdGVzCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaEFsbE5vdGVzKCkgeworCisgICAgICAgIHJldHVybiBtRGIucXVlcnkoREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELCBLRVlfVElUTEUsCisgICAgICAgICAgICAgICAgS0VZX0JPRFl9LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3IgcG9zaXRpb25lZCBhdCB0aGUgbm90ZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBwb3NpdGlvbmVkIHRvIG1hdGNoaW5nIG5vdGUsIGlmIGZvdW5kCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgbm90ZSBjb3VsZCBub3QgYmUgZm91bmQvcmV0cmlldmVkCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaE5vdGUobG9uZyByb3dJZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisKKyAgICAgICAgQ3Vyc29yIG1DdXJzb3IgPQorCisgICAgICAgICAgICBtRGIucXVlcnkodHJ1ZSwgREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELAorICAgICAgICAgICAgICAgICAgICBLRVlfVElUTEUsIEtFWV9CT0RZfSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBpZiAobUN1cnNvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ3Vyc29yLm1vdmVUb0ZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DdXJzb3I7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIG5vdGUgdXNpbmcgdGhlIGRldGFpbHMgcHJvdmlkZWQuIFRoZSBub3RlIHRvIGJlIHVwZGF0ZWQgaXMKKyAgICAgKiBzcGVjaWZpZWQgdXNpbmcgdGhlIHJvd0lkLCBhbmQgaXQgaXMgYWx0ZXJlZCB0byB1c2UgdGhlIHRpdGxlIGFuZCBib2R5CisgICAgICogdmFsdWVzIHBhc3NlZCBpbgorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSB0aXRsZSB2YWx1ZSB0byBzZXQgbm90ZSB0aXRsZSB0bworICAgICAqIEBwYXJhbSBib2R5IHZhbHVlIHRvIHNldCBub3RlIGJvZHkgdG8KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vdGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVOb3RlKGxvbmcgcm93SWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBhcmdzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLnVwZGF0ZShEQVRBQkFTRV9UQUJMRSwgYXJncywgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL0FuZHJvaWQubWsgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhMmI0NwotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvQW5kcm9pZC5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCisjIE9ubHkgYnVpbGQgYXBrIGlmIHRoaXMgcGFja2FnZSBpcyBhZGRlZCB0byBDVVNUT01fTU9ETFVFUyBpbiBidWlsZHNwZWMubWsKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKKyMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgYXBrLgorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQorCitMT0NBTF9QQUNLQUdFX05BTUUgOj0gTm90ZXBhZHYyCisKKyMgTWFrZSB0aGUgYXBwIGJ1aWxkIGFnYWluc3QgdGhlIGN1cnJlbnQgU0RLCitMT0NBTF9TREtfVkVSU0lPTiA6PSBjdXJyZW50CisKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczOGZiMmEKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMiI+CisgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljb24iPgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZXBhZHYyIiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIj4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KKyAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KKyAgICAgICAgPC9hY3Rpdml0eT4KKyAgICA8L2FwcGxpY2F0aW9uPgorPC9tYW5pZmVzdD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvZHJhd2FibGUvaWNvbi5wbmcgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGUzNjAxCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvZHJhd2FibGUvaWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9sYXlvdXQvbm90ZV9lZGl0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWY5NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisJYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgorCQorCTxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKwkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCisJCTxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCQkJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RpdGxlIiAvPgorCQk8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC90aXRsZSIgCisJCSAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJCWFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgorCTwvTGluZWFyTGF5b3V0PgorCisJPFRleHRWaWV3IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JvZHkiIC8+CisJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvYm9keSIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKwkJYW5kcm9pZDpzY3JvbGxiYXJzPSJ2ZXJ0aWNhbCIgLz4KKwkKKwk8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvY29uZmlybSIgCisJICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29uZmlybSIKKwkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisKKzwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YWUwNDcyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvbGF5b3V0L25vdGVzX2xpc3QueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAKKyAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hbmRyb2lkOmxpc3QiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CisgIAk8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hbmRyb2lkOmVtcHR5IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub19ub3RlcyIvPgorPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyOGE0MWIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90ZXh0MSIgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzBjM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2Mi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8cmVzb3VyY2VzPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPk5vdGVwYWQgdjI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX25vdGVzIj5ObyBOb3RlcyBZZXQ8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfaW5zZXJ0Ij5BZGQgTm90ZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiPkRlbGV0ZSBOb3RlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZSI+VGl0bGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJvZHkiPkJvZHk8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpcm0iPkNvbmZpcm08L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRfbm90ZSI+RWRpdCBOb3RlPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZXBhZHYyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVwYWR2Mi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMzgxODAKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVwYWR2Mi5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVDdXJzb3JBZGFwdGVyOworCitwdWJsaWMgY2xhc3MgTm90ZXBhZHYyIGV4dGVuZHMgTGlzdEFjdGl2aXR5IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfQ1JFQVRFPTA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElWSVRZX0VESVQ9MTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5TRVJUX0lEID0gTWVudS5GSVJTVDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVMRVRFX0lEID0gTWVudS5GSVJTVCArIDE7CisKKyAgICBwcml2YXRlIE5vdGVzRGJBZGFwdGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIEN1cnNvciBtTm90ZXNDdXJzb3I7CisgICAgCisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZXNfbGlzdCk7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBOb3Rlc0RiQWRhcHRlcih0aGlzKTsKKyAgICAgICAgbURiSGVscGVyLm9wZW4oKTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGZpbGxEYXRhKCkgeworICAgICAgICAvLyBHZXQgYWxsIG9mIHRoZSByb3dzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBjcmVhdGUgdGhlIGl0ZW0gbGlzdAorICAgICAgICBtTm90ZXNDdXJzb3IgPSBtRGJIZWxwZXIuZmV0Y2hBbGxOb3RlcygpOworICAgICAgICBzdGFydE1hbmFnaW5nQ3Vyc29yKG1Ob3Rlc0N1cnNvcik7CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdG8gc3BlY2lmeSB0aGUgZmllbGRzIHdlIHdhbnQgdG8gZGlzcGxheSBpbiB0aGUgbGlzdCAob25seSBUSVRMRSkKKyAgICAgICAgU3RyaW5nW10gZnJvbSA9IG5ldyBTdHJpbmdbXXtOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEV9OworICAgICAgICAKKyAgICAgICAgLy8gYW5kIGFuIGFycmF5IG9mIHRoZSBmaWVsZHMgd2Ugd2FudCB0byBiaW5kIHRob3NlIGZpZWxkcyB0byAoaW4gdGhpcyBjYXNlIGp1c3QgdGV4dDEpCisgICAgICAgIGludFtdIHRvID0gbmV3IGludFtde1IuaWQudGV4dDF9OworICAgICAgICAKKyAgICAgICAgLy8gTm93IGNyZWF0ZSBhIHNpbXBsZSBjdXJzb3IgYWRhcHRlciBhbmQgc2V0IGl0IHRvIGRpc3BsYXkKKyAgICAgICAgU2ltcGxlQ3Vyc29yQWRhcHRlciBub3RlcyA9IAorICAgICAgICAJICAgIG5ldyBTaW1wbGVDdXJzb3JBZGFwdGVyKHRoaXMsIFIubGF5b3V0Lm5vdGVzX3JvdywgbU5vdGVzQ3Vyc29yLCBmcm9tLCB0byk7CisgICAgICAgIHNldExpc3RBZGFwdGVyKG5vdGVzKTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKKyAgICAgICAgbWVudS5hZGQoMCwgSU5TRVJUX0lELDAsIFIuc3RyaW5nLm1lbnVfaW5zZXJ0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25NZW51SXRlbVNlbGVjdGVkKGludCBmZWF0dXJlSWQsIE1lbnVJdGVtIGl0ZW0pIHsKKyAgICAgICAgc3dpdGNoKGl0ZW0uZ2V0SXRlbUlkKCkpIHsKKyAgICAgICAgY2FzZSBJTlNFUlRfSUQ6CisgICAgICAgICAgICBjcmVhdGVOb3RlKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uTWVudUl0ZW1TZWxlY3RlZChmZWF0dXJlSWQsIGl0ZW0pOworICAgIH0KKworICAgIEBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG9uQ3JlYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUgbWVudSwgVmlldyB2LAorCQkJQ29udGV4dE1lbnVJbmZvIG1lbnVJbmZvKSB7CisJCXN1cGVyLm9uQ3JlYXRlQ29udGV4dE1lbnUobWVudSwgdiwgbWVudUluZm8pOworCQkKKyAgICAgICAgLy8gVE9ETzogZmlsbCBpbiByZXN0IG9mIG1ldGhvZAorCX0KKworICAgIEBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIG9uQ29udGV4dEl0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7CisJCXJldHVybiBzdXBlci5vbkNvbnRleHRJdGVtU2VsZWN0ZWQoaXRlbSk7CisJCQorICAgICAgICAvLyBUT0RPOiBmaWxsIGluIHJlc3Qgb2YgbWV0aG9kCisJfQorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU5vdGUoKSB7CisgICAgICAgIC8vIFRPRE86IGZpbGwgaW4gaW1wbGVtZW50YXRpb24KKworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkxpc3RJdGVtQ2xpY2soTGlzdFZpZXcgbCwgVmlldyB2LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKKyAgICAgICAgc3VwZXIub25MaXN0SXRlbUNsaWNrKGwsIHYsIHBvc2l0aW9uLCBpZCk7CisKKyAgICAgICAgLy8gVE9ETzogZmlsbCBpbiByZXN0IG9mIG1ldGhvZAorICAgICAgICAKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc3VwZXIub25BY3Rpdml0eVJlc3VsdChyZXF1ZXN0Q29kZSwgcmVzdWx0Q29kZSwgaW50ZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRPRE86IGZpbGwgaW4gcmVzdCBvZiBtZXRob2QKKyAgICAgICAgCisgICAgfQorCit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVzRGJBZGFwdGVyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVzRGJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTA5OTRhZQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjIvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZXNEYkFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQyOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5TUUxFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2U7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlT3BlbkhlbHBlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisvKioKKyAqIFNpbXBsZSBub3RlcyBkYXRhYmFzZSBhY2Nlc3MgaGVscGVyIGNsYXNzLiBEZWZpbmVzIHRoZSBiYXNpYyBDUlVEIG9wZXJhdGlvbnMKKyAqIGZvciB0aGUgbm90ZXBhZCBleGFtcGxlLCBhbmQgZ2l2ZXMgdGhlIGFiaWxpdHkgdG8gbGlzdCBhbGwgbm90ZXMgYXMgd2VsbCBhcworICogcmV0cmlldmUgb3IgbW9kaWZ5IGEgc3BlY2lmaWMgbm90ZS4KKyAqIAorICogVGhpcyBoYXMgYmVlbiBpbXByb3ZlZCBmcm9tIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoaXMgdHV0b3JpYWwgdGhyb3VnaCB0aGUKKyAqIGFkZGl0aW9uIG9mIGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgYWxzbyB1c2luZyByZXR1cm5pbmcgYSBDdXJzb3IgaW5zdGVhZAorICogb2YgdXNpbmcgYSBjb2xsZWN0aW9uIG9mIGlubmVyIGNsYXNzZXMgKHdoaWNoIGlzIGxlc3Mgc2NhbGFibGUgYW5kIG5vdAorICogcmVjb21tZW5kZWQpLgorICovCitwdWJsaWMgY2xhc3MgTm90ZXNEYkFkYXB0ZXIgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1RJVExFID0gInRpdGxlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQk9EWSA9ICJib2R5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUk9XSUQgPSAiX2lkIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTm90ZXNEYkFkYXB0ZXIiOworICAgIHByaXZhdGUgRGF0YWJhc2VIZWxwZXIgbURiSGVscGVyOworICAgIHByaXZhdGUgU1FMaXRlRGF0YWJhc2UgbURiOworCisgICAgLyoqCisgICAgICogRGF0YWJhc2UgY3JlYXRpb24gc3FsIHN0YXRlbWVudAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9DUkVBVEUgPQorICAgICAgICAiY3JlYXRlIHRhYmxlIG5vdGVzIChfaWQgaW50ZWdlciBwcmltYXJ5IGtleSBhdXRvaW5jcmVtZW50LCAiCisgICAgICAgICsgInRpdGxlIHRleHQgbm90IG51bGwsIGJvZHkgdGV4dCBub3QgbnVsbCk7IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9OQU1FID0gImRhdGEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9UQUJMRSA9ICJub3RlcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFX1ZFUlNJT04gPSAyOworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1DdHg7CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEYXRhYmFzZUhlbHBlciBleHRlbmRzIFNRTGl0ZU9wZW5IZWxwZXIgeworCisgICAgICAgIERhdGFiYXNlSGVscGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgREFUQUJBU0VfTkFNRSwgbnVsbCwgREFUQUJBU0VfVkVSU0lPTik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoU1FMaXRlRGF0YWJhc2UgZGIpIHsKKworICAgICAgICAgICAgZGIuZXhlY1NRTChEQVRBQkFTRV9DUkVBVEUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uVXBncmFkZShTUUxpdGVEYXRhYmFzZSBkYiwgaW50IG9sZFZlcnNpb24sIGludCBuZXdWZXJzaW9uKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJVcGdyYWRpbmcgZGF0YWJhc2UgZnJvbSB2ZXJzaW9uICIgKyBvbGRWZXJzaW9uICsgIiB0byAiCisgICAgICAgICAgICAgICAgICAgICsgbmV3VmVyc2lvbiArICIsIHdoaWNoIHdpbGwgZGVzdHJveSBhbGwgb2xkIGRhdGEiKTsKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIG5vdGVzIik7CisgICAgICAgICAgICBvbkNyZWF0ZShkYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciAtIHRha2VzIHRoZSBjb250ZXh0IHRvIGFsbG93IHRoZSBkYXRhYmFzZSB0byBiZQorICAgICAqIG9wZW5lZC9jcmVhdGVkCisgICAgICogCisgICAgICogQHBhcmFtIGN0eCB0aGUgQ29udGV4dCB3aXRoaW4gd2hpY2ggdG8gd29yaworICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlcihDb250ZXh0IGN0eCkgeworICAgICAgICB0aGlzLm1DdHggPSBjdHg7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbiB0aGUgbm90ZXMgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBvcGVuZWQsIHRyeSB0byBjcmVhdGUgYSBuZXcKKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBjcmVhdGVkLCB0aHJvdyBhbiBleGNlcHRpb24gdG8KKyAgICAgKiBzaWduYWwgdGhlIGZhaWx1cmUKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoaXMgKHNlbGYgcmVmZXJlbmNlLCBhbGxvd2luZyB0aGlzIHRvIGJlIGNoYWluZWQgaW4gYW4KKyAgICAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uIGNhbGwpCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgdGhlIGRhdGFiYXNlIGNvdWxkIGJlIG5laXRoZXIgb3BlbmVkIG9yIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIgb3BlbigpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgRGF0YWJhc2VIZWxwZXIobUN0eCk7CisgICAgICAgIG1EYiA9IG1EYkhlbHBlci5nZXRXcml0YWJsZURhdGFiYXNlKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBtRGJIZWxwZXIuY2xvc2UoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBub3RlIHVzaW5nIHRoZSB0aXRsZSBhbmQgYm9keSBwcm92aWRlZC4gSWYgdGhlIG5vdGUgaXMKKyAgICAgKiBzdWNjZXNzZnVsbHkgY3JlYXRlZCByZXR1cm4gdGhlIG5ldyByb3dJZCBmb3IgdGhhdCBub3RlLCBvdGhlcndpc2UgcmV0dXJuCisgICAgICogYSAtMSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorICAgICAqIAorICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIG5vdGUKKyAgICAgKiBAcGFyYW0gYm9keSB0aGUgYm9keSBvZiB0aGUgbm90ZQorICAgICAqIEByZXR1cm4gcm93SWQgb3IgLTEgaWYgZmFpbGVkCisgICAgICovCisgICAgcHVibGljIGxvbmcgY3JlYXRlTm90ZShTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgaW5pdGlhbFZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi5pbnNlcnQoREFUQUJBU0VfVEFCTEUsIG51bGwsIGluaXRpYWxWYWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlbGV0ZSB0aGUgbm90ZSB3aXRoIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIGRlbGV0ZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkZWxldGVOb3RlKGxvbmcgcm93SWQpIHsKKworICAgICAgICByZXR1cm4gbURiLmRlbGV0ZShEQVRBQkFTRV9UQUJMRSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3Igb3ZlciB0aGUgbGlzdCBvZiBhbGwgbm90ZXMgaW4gdGhlIGRhdGFiYXNlCisgICAgICogCisgICAgICogQHJldHVybiBDdXJzb3Igb3ZlciBhbGwgbm90ZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoQWxsTm90ZXMoKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5xdWVyeShEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsIEtFWV9USVRMRSwKKyAgICAgICAgICAgICAgICBLRVlfQk9EWX0sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBwb3NpdGlvbmVkIGF0IHRoZSBub3RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byByZXRyaWV2ZQorICAgICAqIEByZXR1cm4gQ3Vyc29yIHBvc2l0aW9uZWQgdG8gbWF0Y2hpbmcgbm90ZSwgaWYgZm91bmQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiBub3RlIGNvdWxkIG5vdCBiZSBmb3VuZC9yZXRyaWV2ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoTm90ZShsb25nIHJvd0lkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKworICAgICAgICBDdXJzb3IgbUN1cnNvciA9CisKKyAgICAgICAgICAgIG1EYi5xdWVyeSh0cnVlLCBEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsCisgICAgICAgICAgICAgICAgICAgIEtFWV9USVRMRSwgS0VZX0JPRFl9LCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGlmIChtQ3Vyc29yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUN1cnNvcjsKKworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgbm90ZSB1c2luZyB0aGUgZGV0YWlscyBwcm92aWRlZC4gVGhlIG5vdGUgdG8gYmUgdXBkYXRlZCBpcworICAgICAqIHNwZWNpZmllZCB1c2luZyB0aGUgcm93SWQsIGFuZCBpdCBpcyBhbHRlcmVkIHRvIHVzZSB0aGUgdGl0bGUgYW5kIGJvZHkKKyAgICAgKiB2YWx1ZXMgcGFzc2VkIGluCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHRpdGxlIHZhbHVlIHRvIHNldCBub3RlIHRpdGxlIHRvCisgICAgICogQHBhcmFtIGJvZHkgdmFsdWUgdG8gc2V0IG5vdGUgYm9keSB0bworICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbm90ZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZU5vdGUobG9uZyByb3dJZCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGFyZ3MgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBhcmdzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIudXBkYXRlKERBVEFCQVNFX1RBQkxFLCBhcmdzLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9BbmRyb2lkLm1rIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5NjFhMwotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKKyMgT25seSBidWlsZCBhcGsgaWYgdGhpcyBwYWNrYWdlIGlzIGFkZGVkIHRvIENVU1RPTV9NT0RMVUVTIGluIGJ1aWxkc3BlYy5taworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworIyBPbmx5IGNvbXBpbGUgc291cmNlIGphdmEgZmlsZXMgaW4gdGhpcyBhcGsuCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpCisKK0xPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBOb3RlcGFkdjJTb2x1dGlvbgorCisjIE1ha2UgdGhlIGFwcCBidWlsZCBhZ2FpbnN0IHRoZSBjdXJyZW50IFNESworTE9DQUxfU0RLX1ZFUlNJT04gOj0gY3VycmVudAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjg2YTc0MQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBwYWNrYWdlPSJjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQyIj4KKyAgICA8YXBwbGljYXRpb24gYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNvbiI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5Ob3RlcGFkdjIiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZUVkaXQiIC8+CisgICAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvZHJhd2FibGUvaWNvbi5wbmcgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0ZTM2MDEKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3RlX2VkaXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhZjk3NTQKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3RlX2VkaXQueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKwkKKwk8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworCQk8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy90aXRsZSIgLz4KKwkJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiIAorCQkgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KKwk8L0xpbmVhckxheW91dD4KKworCTxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ib2R5IiAvPgorCTxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2JvZHkiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisJCWFuZHJvaWQ6c2Nyb2xsYmFycz0idmVydGljYWwiIC8+CisJCisJPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NvbmZpcm0iIAorCSAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbmZpcm0iCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorCis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX2xpc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhZTA0NzIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgCisgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDpsaXN0IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgorICAJPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDplbXB0eSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fbm90ZXMiLz4KKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjI4YTQxYgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dDEiIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MGMzZjgKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5Ob3RlcGFkIHYyPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19ub3RlcyI+Tm8gTm90ZXMgWWV0PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2luc2VydCI+QWRkIE5vdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIj5EZWxldGUgTm90ZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGUiPlRpdGxlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJib2R5Ij5Cb2R5PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maXJtIj5Db25maXJtPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0X25vdGUiPkVkaXQgTm90ZTwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZUVkaXQuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3RlRWRpdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjOWRjY2MKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZUVkaXQuamF2YQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworCitwdWJsaWMgY2xhc3MgTm90ZUVkaXQgZXh0ZW5kcyBBY3Rpdml0eSB7CisKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1UaXRsZVRleHQ7CisgICAgcHJpdmF0ZSBFZGl0VGV4dCBtQm9keVRleHQ7CisgICAgcHJpdmF0ZSBMb25nIG1Sb3dJZDsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZV9lZGl0KTsKKworICAgICAgICBtVGl0bGVUZXh0ID0gKEVkaXRUZXh0KSBmaW5kVmlld0J5SWQoUi5pZC50aXRsZSk7CisgICAgICAgIG1Cb2R5VGV4dCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQuYm9keSk7CisKKyAgICAgICAgQnV0dG9uIGNvbmZpcm1CdXR0b24gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5jb25maXJtKTsKKworICAgICAgICBtUm93SWQgPSBudWxsOworICAgICAgICBCdW5kbGUgZXh0cmFzID0gZ2V0SW50ZW50KCkuZ2V0RXh0cmFzKCk7CisgICAgICAgIGlmIChleHRyYXMgIT0gbnVsbCkgeworICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUpOworICAgICAgICAgICAgU3RyaW5nIGJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKTsKKyAgICAgICAgICAgIG1Sb3dJZCA9IGV4dHJhcy5nZXRMb25nKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCk7CisKKyAgICAgICAgICAgIGlmICh0aXRsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVRpdGxlVGV4dC5zZXRUZXh0KHRpdGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChib2R5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtQm9keVRleHQuc2V0VGV4dChib2R5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbmZpcm1CdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKworICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKKyAgICAgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gbmV3IEJ1bmRsZSgpOworCisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUsIG1UaXRsZVRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFksIG1Cb2R5VGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1Sb3dJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5wdXRMb25nKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCwgbVJvd0lkKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBJbnRlbnQgbUludGVudCA9IG5ldyBJbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBtSW50ZW50LnB1dEV4dHJhcyhidW5kbGUpOworICAgICAgICAgICAgICAgIHNldFJlc3VsdChSRVNVTFRfT0ssIG1JbnRlbnQpOworICAgICAgICAgICAgICAgIGZpbmlzaCgpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3RlcGFkdjIuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjJTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMi9Ob3RlcGFkdjIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNjU4MDZiCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVwYWR2Mi5qYXZhCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMjsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVDdXJzb3JBZGFwdGVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm87CisKK3B1YmxpYyBjbGFzcyBOb3RlcGFkdjIgZXh0ZW5kcyBMaXN0QWN0aXZpdHkgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJVklUWV9DUkVBVEU9MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfRURJVD0xOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOU0VSVF9JRCA9IE1lbnUuRklSU1Q7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFTEVURV9JRCA9IE1lbnUuRklSU1QgKyAxOworCisgICAgcHJpdmF0ZSBOb3Rlc0RiQWRhcHRlciBtRGJIZWxwZXI7CisgICAgcHJpdmF0ZSBDdXJzb3IgbU5vdGVzQ3Vyc29yOworCisgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBhY3Rpdml0eSBpcyBmaXJzdCBjcmVhdGVkLiAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZXNfbGlzdCk7CisgICAgICAgIG1EYkhlbHBlciA9IG5ldyBOb3Rlc0RiQWRhcHRlcih0aGlzKTsKKyAgICAgICAgbURiSGVscGVyLm9wZW4oKTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgcmVnaXN0ZXJGb3JDb250ZXh0TWVudShnZXRMaXN0VmlldygpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZmlsbERhdGEoKSB7CisgICAgICAgIC8vIEdldCBhbGwgb2YgdGhlIHJvd3MgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSB0aGUgaXRlbSBsaXN0CisgICAgICAgIG1Ob3Rlc0N1cnNvciA9IG1EYkhlbHBlci5mZXRjaEFsbE5vdGVzKCk7CisgICAgICAgIHN0YXJ0TWFuYWdpbmdDdXJzb3IobU5vdGVzQ3Vyc29yKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdG8gc3BlY2lmeSB0aGUgZmllbGRzIHdlIHdhbnQgdG8gZGlzcGxheSBpbiB0aGUgbGlzdCAob25seSBUSVRMRSkKKyAgICAgICAgU3RyaW5nW10gZnJvbSA9IG5ldyBTdHJpbmdbXXtOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEV9OworCisgICAgICAgIC8vIGFuZCBhbiBhcnJheSBvZiB0aGUgZmllbGRzIHdlIHdhbnQgdG8gYmluZCB0aG9zZSBmaWVsZHMgdG8gKGluIHRoaXMgY2FzZSBqdXN0IHRleHQxKQorICAgICAgICBpbnRbXSB0byA9IG5ldyBpbnRbXXtSLmlkLnRleHQxfTsKKworICAgICAgICAvLyBOb3cgY3JlYXRlIGEgc2ltcGxlIGN1cnNvciBhZGFwdGVyIGFuZCBzZXQgaXQgdG8gZGlzcGxheQorICAgICAgICBTaW1wbGVDdXJzb3JBZGFwdGVyIG5vdGVzID0gCisgICAgICAgICAgICBuZXcgU2ltcGxlQ3Vyc29yQWRhcHRlcih0aGlzLCBSLmxheW91dC5ub3Rlc19yb3csIG1Ob3Rlc0N1cnNvciwgZnJvbSwgdG8pOworICAgICAgICBzZXRMaXN0QWRhcHRlcihub3Rlcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKKyAgICAgICAgbWVudS5hZGQoMCwgSU5TRVJUX0lELCAwLCBSLnN0cmluZy5tZW51X2luc2VydCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1TZWxlY3RlZChpbnQgZmVhdHVyZUlkLCBNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgICAgICBjYXNlIElOU0VSVF9JRDoKKyAgICAgICAgICAgICAgICBjcmVhdGVOb3RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIub25NZW51SXRlbVNlbGVjdGVkKGZlYXR1cmVJZCwgaXRlbSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51LCBWaWV3IHYsCisgICAgICAgICAgICBDb250ZXh0TWVudUluZm8gbWVudUluZm8pIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVDb250ZXh0TWVudShtZW51LCB2LCBtZW51SW5mbyk7CisgICAgICAgIG1lbnUuYWRkKDAsIERFTEVURV9JRCwgMCwgUi5zdHJpbmcubWVudV9kZWxldGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ29udGV4dEl0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgICAgICBjYXNlIERFTEVURV9JRDoKKyAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dE1lbnVJbmZvIGluZm8gPSAoQWRhcHRlckNvbnRleHRNZW51SW5mbykgaXRlbS5nZXRNZW51SW5mbygpOworICAgICAgICAgICAgICAgIG1EYkhlbHBlci5kZWxldGVOb3RlKGluZm8uaWQpOworICAgICAgICAgICAgICAgIGZpbGxEYXRhKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uQ29udGV4dEl0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlTm90ZSgpIHsKKyAgICAgICAgSW50ZW50IGkgPSBuZXcgSW50ZW50KHRoaXMsIE5vdGVFZGl0LmNsYXNzKTsKKyAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpLCBBQ1RJVklUWV9DUkVBVEUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uTGlzdEl0ZW1DbGljayhMaXN0VmlldyBsLCBWaWV3IHYsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgeworICAgICAgICBzdXBlci5vbkxpc3RJdGVtQ2xpY2sobCwgdiwgcG9zaXRpb24sIGlkKTsKKyAgICAgICAgQ3Vyc29yIGMgPSBtTm90ZXNDdXJzb3I7CisgICAgICAgIGMubW92ZVRvUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBJbnRlbnQgaSA9IG5ldyBJbnRlbnQodGhpcywgTm90ZUVkaXQuY2xhc3MpOworICAgICAgICBpLnB1dEV4dHJhKE5vdGVzRGJBZGFwdGVyLktFWV9ST1dJRCwgaWQpOworICAgICAgICBpLnB1dEV4dHJhKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSwgYy5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgYy5nZXRDb2x1bW5JbmRleE9yVGhyb3coTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFKSkpOworICAgICAgICBpLnB1dEV4dHJhKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZLCBjLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjLmdldENvbHVtbkluZGV4T3JUaHJvdyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSkpKTsKKyAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpLCBBQ1RJVklUWV9FRElUKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc3VwZXIub25BY3Rpdml0eVJlc3VsdChyZXF1ZXN0Q29kZSwgcmVzdWx0Q29kZSwgaW50ZW50KTsKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IGludGVudC5nZXRFeHRyYXMoKTsKKyAgICAgICAgc3dpdGNoKHJlcXVlc3RDb2RlKSB7CisgICAgICAgICAgICBjYXNlIEFDVElWSVRZX0NSRUFURToKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKTsKKyAgICAgICAgICAgICAgICBtRGJIZWxwZXIuY3JlYXRlTm90ZSh0aXRsZSwgYm9keSk7CisgICAgICAgICAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUNUSVZJVFlfRURJVDoKKyAgICAgICAgICAgICAgICBMb25nIHJvd0lkID0gZXh0cmFzLmdldExvbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lEKTsKKyAgICAgICAgICAgICAgICBpZiAocm93SWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWRpdFRpdGxlID0gZXh0cmFzLmdldFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWRpdEJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKTsKKyAgICAgICAgICAgICAgICAgICAgbURiSGVscGVyLnVwZGF0ZU5vdGUocm93SWQsIGVkaXRUaXRsZSwgZWRpdEJvZHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVzRGJBZGFwdGVyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYyU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDIvTm90ZXNEYkFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDk5NGFlCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2MlNvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQyL05vdGVzRGJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorICogdGhlIExpY2Vuc2UgYXQKKyAqIAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIKKyAqIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuU1FMRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZU9wZW5IZWxwZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworLyoqCisgKiBTaW1wbGUgbm90ZXMgZGF0YWJhc2UgYWNjZXNzIGhlbHBlciBjbGFzcy4gRGVmaW5lcyB0aGUgYmFzaWMgQ1JVRCBvcGVyYXRpb25zCisgKiBmb3IgdGhlIG5vdGVwYWQgZXhhbXBsZSwgYW5kIGdpdmVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIG5vdGVzIGFzIHdlbGwgYXMKKyAqIHJldHJpZXZlIG9yIG1vZGlmeSBhIHNwZWNpZmljIG5vdGUuCisgKiAKKyAqIFRoaXMgaGFzIGJlZW4gaW1wcm92ZWQgZnJvbSB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGlzIHR1dG9yaWFsIHRocm91Z2ggdGhlCisgKiBhZGRpdGlvbiBvZiBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5kIGFsc28gdXNpbmcgcmV0dXJuaW5nIGEgQ3Vyc29yIGluc3RlYWQKKyAqIG9mIHVzaW5nIGEgY29sbGVjdGlvbiBvZiBpbm5lciBjbGFzc2VzICh3aGljaCBpcyBsZXNzIHNjYWxhYmxlIGFuZCBub3QKKyAqIHJlY29tbWVuZGVkKS4KKyAqLworcHVibGljIGNsYXNzIE5vdGVzRGJBZGFwdGVyIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9USVRMRSA9ICJ0aXRsZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0JPRFkgPSAiYm9keSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1JPV0lEID0gIl9pZCI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5vdGVzRGJBZGFwdGVyIjsKKyAgICBwcml2YXRlIERhdGFiYXNlSGVscGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIFNRTGl0ZURhdGFiYXNlIG1EYjsKKworICAgIC8qKgorICAgICAqIERhdGFiYXNlIGNyZWF0aW9uIHNxbCBzdGF0ZW1lbnQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfQ1JFQVRFID0KKyAgICAgICAgImNyZWF0ZSB0YWJsZSBub3RlcyAoX2lkIGludGVnZXIgcHJpbWFyeSBrZXkgYXV0b2luY3JlbWVudCwgIgorICAgICAgICArICJ0aXRsZSB0ZXh0IG5vdCBudWxsLCBib2R5IHRleHQgbm90IG51bGwpOyI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfTkFNRSA9ICJkYXRhIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfVEFCTEUgPSAibm90ZXMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRV9WRVJTSU9OID0gMjsKKworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ3R4OworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0YWJhc2VIZWxwZXIgZXh0ZW5kcyBTUUxpdGVPcGVuSGVscGVyIHsKKworICAgICAgICBEYXRhYmFzZUhlbHBlcihDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIERBVEFCQVNFX05BTUUsIG51bGwsIERBVEFCQVNFX1ZFUlNJT04pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKFNRTGl0ZURhdGFiYXNlIGRiKSB7CisKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoREFUQUJBU0VfQ1JFQVRFKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblVwZ3JhZGUoU1FMaXRlRGF0YWJhc2UgZGIsIGludCBvbGRWZXJzaW9uLCBpbnQgbmV3VmVyc2lvbikgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiVXBncmFkaW5nIGRhdGFiYXNlIGZyb20gdmVyc2lvbiAiICsgb2xkVmVyc2lvbiArICIgdG8gIgorICAgICAgICAgICAgICAgICAgICArIG5ld1ZlcnNpb24gKyAiLCB3aGljaCB3aWxsIGRlc3Ryb3kgYWxsIG9sZCBkYXRhIik7CisgICAgICAgICAgICBkYi5leGVjU1FMKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBub3RlcyIpOworICAgICAgICAgICAgb25DcmVhdGUoZGIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgLSB0YWtlcyB0aGUgY29udGV4dCB0byBhbGxvdyB0aGUgZGF0YWJhc2UgdG8gYmUKKyAgICAgKiBvcGVuZWQvY3JlYXRlZAorICAgICAqIAorICAgICAqIEBwYXJhbSBjdHggdGhlIENvbnRleHQgd2l0aGluIHdoaWNoIHRvIHdvcmsKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgdGhpcy5tQ3R4ID0gY3R4OworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW4gdGhlIG5vdGVzIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgb3BlbmVkLCB0cnkgdG8gY3JlYXRlIGEgbmV3CisgICAgICogaW5zdGFuY2Ugb2YgdGhlIGRhdGFiYXNlLiBJZiBpdCBjYW5ub3QgYmUgY3JlYXRlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIHRvCisgICAgICogc2lnbmFsIHRoZSBmYWlsdXJlCisgICAgICogCisgICAgICogQHJldHVybiB0aGlzIChzZWxmIHJlZmVyZW5jZSwgYWxsb3dpbmcgdGhpcyB0byBiZSBjaGFpbmVkIGluIGFuCisgICAgICogICAgICAgICBpbml0aWFsaXphdGlvbiBjYWxsKQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIGlmIHRoZSBkYXRhYmFzZSBjb3VsZCBiZSBuZWl0aGVyIG9wZW5lZCBvciBjcmVhdGVkCisgICAgICovCisgICAgcHVibGljIE5vdGVzRGJBZGFwdGVyIG9wZW4oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IERhdGFiYXNlSGVscGVyKG1DdHgpOworICAgICAgICBtRGIgPSBtRGJIZWxwZXIuZ2V0V3JpdGFibGVEYXRhYmFzZSgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgbURiSGVscGVyLmNsb3NlKCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbm90ZSB1c2luZyB0aGUgdGl0bGUgYW5kIGJvZHkgcHJvdmlkZWQuIElmIHRoZSBub3RlIGlzCisgICAgICogc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgcmV0dXJuIHRoZSBuZXcgcm93SWQgZm9yIHRoYXQgbm90ZSwgb3RoZXJ3aXNlIHJldHVybgorICAgICAqIGEgLTEgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBub3RlCisgICAgICogQHBhcmFtIGJvZHkgdGhlIGJvZHkgb2YgdGhlIG5vdGUKKyAgICAgKiBAcmV0dXJuIHJvd0lkIG9yIC0xIGlmIGZhaWxlZAorICAgICAqLworICAgIHB1YmxpYyBsb25nIGNyZWF0ZU5vdGUoU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGluaXRpYWxWYWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgaW5pdGlhbFZhbHVlcy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIuaW5zZXJ0KERBVEFCQVNFX1RBQkxFLCBudWxsLCBpbml0aWFsVmFsdWVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgdGhlIG5vdGUgd2l0aCB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byBkZWxldGUKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZGVsZXRlTm90ZShsb25nIHJvd0lkKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5kZWxldGUoREFUQUJBU0VfVEFCTEUsIEtFWV9ST1dJRCArICI9IiArIHJvd0lkLCBudWxsKSA+IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgQ3Vyc29yIG92ZXIgdGhlIGxpc3Qgb2YgYWxsIG5vdGVzIGluIHRoZSBkYXRhYmFzZQorICAgICAqIAorICAgICAqIEByZXR1cm4gQ3Vyc29yIG92ZXIgYWxsIG5vdGVzCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaEFsbE5vdGVzKCkgeworCisgICAgICAgIHJldHVybiBtRGIucXVlcnkoREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELCBLRVlfVElUTEUsCisgICAgICAgICAgICAgICAgS0VZX0JPRFl9LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3IgcG9zaXRpb25lZCBhdCB0aGUgbm90ZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHJvd0lkCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gcmV0cmlldmUKKyAgICAgKiBAcmV0dXJuIEN1cnNvciBwb3NpdGlvbmVkIHRvIG1hdGNoaW5nIG5vdGUsIGlmIGZvdW5kCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgbm90ZSBjb3VsZCBub3QgYmUgZm91bmQvcmV0cmlldmVkCisgICAgICovCisgICAgcHVibGljIEN1cnNvciBmZXRjaE5vdGUobG9uZyByb3dJZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisKKyAgICAgICAgQ3Vyc29yIG1DdXJzb3IgPQorCisgICAgICAgICAgICBtRGIucXVlcnkodHJ1ZSwgREFUQUJBU0VfVEFCTEUsIG5ldyBTdHJpbmdbXSB7S0VZX1JPV0lELAorICAgICAgICAgICAgICAgICAgICBLRVlfVElUTEUsIEtFWV9CT0RZfSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBpZiAobUN1cnNvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtQ3Vyc29yLm1vdmVUb0ZpcnN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DdXJzb3I7CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIG5vdGUgdXNpbmcgdGhlIGRldGFpbHMgcHJvdmlkZWQuIFRoZSBub3RlIHRvIGJlIHVwZGF0ZWQgaXMKKyAgICAgKiBzcGVjaWZpZWQgdXNpbmcgdGhlIHJvd0lkLCBhbmQgaXQgaXMgYWx0ZXJlZCB0byB1c2UgdGhlIHRpdGxlIGFuZCBib2R5CisgICAgICogdmFsdWVzIHBhc3NlZCBpbgorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSB0aXRsZSB2YWx1ZSB0byBzZXQgbm90ZSB0aXRsZSB0bworICAgICAqIEBwYXJhbSBib2R5IHZhbHVlIHRvIHNldCBub3RlIGJvZHkgdG8KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG5vdGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVOb3RlKGxvbmcgcm93SWQsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGJvZHkpIHsKKyAgICAgICAgQ29udGVudFZhbHVlcyBhcmdzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGFyZ3MucHV0KEtFWV9CT0RZLCBib2R5KTsKKworICAgICAgICByZXR1cm4gbURiLnVwZGF0ZShEQVRBQkFTRV9UQUJMRSwgYXJncywgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL0FuZHJvaWQubWsgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmMzE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCisjIE9ubHkgYnVpbGQgYXBrIGlmIHRoaXMgcGFja2FnZSBpcyBhZGRlZCB0byBDVVNUT01fTU9ETFVFUyBpbiBidWlsZHNwZWMubWsKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKKyMgT25seSBjb21waWxlIHNvdXJjZSBqYXZhIGZpbGVzIGluIHRoaXMgYXBrLgorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKQorCitMT0NBTF9QQUNLQUdFX05BTUUgOj0gTm90ZXBhZHYzCisKKyMgTWFrZSB0aGUgYXBwIGJ1aWxkIGFnYWluc3QgdGhlIGN1cnJlbnQgU0RLCitMT0NBTF9TREtfVkVSU0lPTiA6PSBjdXJyZW50CisKK2luY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZTE2NDUKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIHBhY2thZ2U9ImNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDMiPgorICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY29uIj4KKyAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLk5vdGVwYWR2MyIgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CisgICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5Ob3RlRWRpdCIgLz4KKyAgICA8L2FwcGxpY2F0aW9uPgorPC9tYW5pZmVzdD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvZHJhd2FibGUvaWNvbi5wbmcgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9kcmF3YWJsZS9pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGUzNjAxCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvZHJhd2FibGUvaWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9sYXlvdXQvbm90ZV9lZGl0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWY5NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisJYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgorCQorCTxMaW5lYXJMYXlvdXQgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKKwkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiPgorCisJCTxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIAorCQkJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3RpdGxlIiAvPgorCQk8RWRpdFRleHQgYW5kcm9pZDppZD0iQCtpZC90aXRsZSIgCisJCSAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJCWFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIvPgorCTwvTGluZWFyTGF5b3V0PgorCisJPFRleHRWaWV3IGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2JvZHkiIC8+CisJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvYm9keSIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKwkJYW5kcm9pZDpzY3JvbGxiYXJzPSJ2ZXJ0aWNhbCIgLz4KKwkKKwk8QnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvY29uZmlybSIgCisJICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29uZmlybSIKKwkJYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+CisKKzwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YWUwNDcyCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvbGF5b3V0L25vdGVzX2xpc3QueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICAKKyAgICA8TGlzdFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hbmRyb2lkOmxpc3QiCisgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CisgIAk8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC9hbmRyb2lkOmVtcHR5IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub19ub3RlcyIvPgorPC9MaW5lYXJMYXlvdXQ+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL2xheW91dC9ub3Rlc19yb3cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyOGE0MWIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90ZXh0MSIgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLz4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTYzYjgzCi0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8cmVzb3VyY2VzPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPk5vdGVwYWQgdjM8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX25vdGVzIj5ObyBOb3RlcyBZZXQ8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfaW5zZXJ0Ij5BZGQgTm90ZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiPkRlbGV0ZSBOb3RlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZSI+VGl0bGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJvZHkiPkJvZHk8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbmZpcm0iPkNvbmZpcm08L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVkaXRfbm90ZSI+RWRpdCBOb3RlPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZUVkaXQuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZUVkaXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZWU3ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3RlRWRpdC5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CisKK3B1YmxpYyBjbGFzcyBOb3RlRWRpdCBleHRlbmRzIEFjdGl2aXR5IHsKKworICAgIHByaXZhdGUgRWRpdFRleHQgbVRpdGxlVGV4dDsKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1Cb2R5VGV4dDsKKyAgICBwcml2YXRlIExvbmcgbVJvd0lkOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5ub3RlX2VkaXQpOworCisgICAgICAgIG1UaXRsZVRleHQgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKTsKKyAgICAgICAgbUJvZHlUZXh0ID0gKEVkaXRUZXh0KSBmaW5kVmlld0J5SWQoUi5pZC5ib2R5KTsKKworICAgICAgICBCdXR0b24gY29uZmlybUJ1dHRvbiA9IChCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmNvbmZpcm0pOworCisgICAgICAgIG1Sb3dJZCA9IG51bGw7CisgICAgICAgIEJ1bmRsZSBleHRyYXMgPSBnZXRJbnRlbnQoKS5nZXRFeHRyYXMoKTsKKyAgICAgICAgaWYgKGV4dHJhcyAhPSBudWxsKSB7CisgICAgICAgICAgICBTdHJpbmcgdGl0bGUgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSk7CisgICAgICAgICAgICBTdHJpbmcgYm9keSA9IGV4dHJhcy5nZXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFkpOworICAgICAgICAgICAgbVJvd0lkID0gZXh0cmFzLmdldExvbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lEKTsKKworICAgICAgICAgICAgaWYgKHRpdGxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGl0bGVUZXh0LnNldFRleHQodGl0bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJvZHkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1Cb2R5VGV4dC5zZXRUZXh0KGJvZHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uZmlybUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgeworCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgeworICAgICAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSBuZXcgQnVuZGxlKCk7CisKKyAgICAgICAgICAgICAgICBidW5kbGUucHV0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSwgbVRpdGxlVGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgYnVuZGxlLnB1dFN0cmluZyhOb3Rlc0RiQWRhcHRlci5LRVlfQk9EWSwgbUJvZHlUZXh0LmdldFRleHQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBpZiAobVJvd0lkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVuZGxlLnB1dExvbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lELCBtUm93SWQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEludGVudCBtSW50ZW50ID0gbmV3IEludGVudCgpOworICAgICAgICAgICAgICAgIG1JbnRlbnQucHV0RXh0cmFzKGJ1bmRsZSk7CisgICAgICAgICAgICAgICAgc2V0UmVzdWx0KFJFU1VMVF9PSywgbUludGVudCk7CisgICAgICAgICAgICAgICAgZmluaXNoKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2My9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3RlcGFkdjMuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXBhZHYzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGVkOGVkNgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXBhZHYzLmphdmEKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzOworCitpbXBvcnQgYW5kcm9pZC5hcHAuTGlzdEFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51OworaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OworaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnUuQ29udGV4dE1lbnVJbmZvOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNpbXBsZUN1cnNvckFkYXB0ZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbzsKKworcHVibGljIGNsYXNzIE5vdGVwYWR2MyBleHRlbmRzIExpc3RBY3Rpdml0eSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElWSVRZX0NSRUFURT0wOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJVklUWV9FRElUPTE7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5TRVJUX0lEID0gTWVudS5GSVJTVDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVMRVRFX0lEID0gTWVudS5GSVJTVCArIDE7CisKKyAgICBwcml2YXRlIE5vdGVzRGJBZGFwdGVyIG1EYkhlbHBlcjsKKyAgICBwcml2YXRlIEN1cnNvciBtTm90ZXNDdXJzb3I7CisKKyAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFjdGl2aXR5IGlzIGZpcnN0IGNyZWF0ZWQuICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5ub3Rlc19saXN0KTsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IE5vdGVzRGJBZGFwdGVyKHRoaXMpOworICAgICAgICBtRGJIZWxwZXIub3BlbigpOworICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICByZWdpc3RlckZvckNvbnRleHRNZW51KGdldExpc3RWaWV3KCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmaWxsRGF0YSgpIHsKKyAgICAgICAgLy8gR2V0IGFsbCBvZiB0aGUgcm93cyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgY3JlYXRlIHRoZSBpdGVtIGxpc3QKKyAgICAgICAgbU5vdGVzQ3Vyc29yID0gbURiSGVscGVyLmZldGNoQWxsTm90ZXMoKTsKKyAgICAgICAgc3RhcnRNYW5hZ2luZ0N1cnNvcihtTm90ZXNDdXJzb3IpOworCisgICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSB0byBzcGVjaWZ5IHRoZSBmaWVsZHMgd2Ugd2FudCB0byBkaXNwbGF5IGluIHRoZSBsaXN0IChvbmx5IFRJVExFKQorICAgICAgICBTdHJpbmdbXSBmcm9tID0gbmV3IFN0cmluZ1tde05vdGVzRGJBZGFwdGVyLktFWV9USVRMRX07CisKKyAgICAgICAgLy8gYW5kIGFuIGFycmF5IG9mIHRoZSBmaWVsZHMgd2Ugd2FudCB0byBiaW5kIHRob3NlIGZpZWxkcyB0byAoaW4gdGhpcyBjYXNlIGp1c3QgdGV4dDEpCisgICAgICAgIGludFtdIHRvID0gbmV3IGludFtde1IuaWQudGV4dDF9OworCisgICAgICAgIC8vIE5vdyBjcmVhdGUgYSBzaW1wbGUgY3Vyc29yIGFkYXB0ZXIgYW5kIHNldCBpdCB0byBkaXNwbGF5CisgICAgICAgIFNpbXBsZUN1cnNvckFkYXB0ZXIgbm90ZXMgPSAKKyAgICAgICAgICAgIG5ldyBTaW1wbGVDdXJzb3JBZGFwdGVyKHRoaXMsIFIubGF5b3V0Lm5vdGVzX3JvdywgbU5vdGVzQ3Vyc29yLCBmcm9tLCB0byk7CisgICAgICAgIHNldExpc3RBZGFwdGVyKG5vdGVzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlvbnNNZW51KE1lbnUgbWVudSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZU9wdGlvbnNNZW51KG1lbnUpOworICAgICAgICBtZW51LmFkZCgwLCBJTlNFUlRfSUQsIDAsIFIuc3RyaW5nLm1lbnVfaW5zZXJ0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25NZW51SXRlbVNlbGVjdGVkKGludCBmZWF0dXJlSWQsIE1lbnVJdGVtIGl0ZW0pIHsKKyAgICAgICAgc3dpdGNoKGl0ZW0uZ2V0SXRlbUlkKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSU5TRVJUX0lEOgorICAgICAgICAgICAgICAgIGNyZWF0ZU5vdGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdXBlci5vbk1lbnVJdGVtU2VsZWN0ZWQoZmVhdHVyZUlkLCBpdGVtKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51IG1lbnUsIFZpZXcgdiwKKyAgICAgICAgICAgIENvbnRleHRNZW51SW5mbyBtZW51SW5mbykgeworICAgICAgICBzdXBlci5vbkNyZWF0ZUNvbnRleHRNZW51KG1lbnUsIHYsIG1lbnVJbmZvKTsKKyAgICAgICAgbWVudS5hZGQoMCwgREVMRVRFX0lELCAwLCBSLnN0cmluZy5tZW51X2RlbGV0ZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25Db250ZXh0SXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKKyAgICAgICAgc3dpdGNoKGl0ZW0uZ2V0SXRlbUlkKCkpIHsKKyAgICAgICAgICAgIGNhc2UgREVMRVRFX0lEOgorICAgICAgICAgICAgICAgIEFkYXB0ZXJDb250ZXh0TWVudUluZm8gaW5mbyA9IChBZGFwdGVyQ29udGV4dE1lbnVJbmZvKSBpdGVtLmdldE1lbnVJbmZvKCk7CisgICAgICAgICAgICAgICAgbURiSGVscGVyLmRlbGV0ZU5vdGUoaW5mby5pZCk7CisgICAgICAgICAgICAgICAgZmlsbERhdGEoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIub25Db250ZXh0SXRlbVNlbGVjdGVkKGl0ZW0pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVOb3RlKCkgeworICAgICAgICBJbnRlbnQgaSA9IG5ldyBJbnRlbnQodGhpcywgTm90ZUVkaXQuY2xhc3MpOworICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGksIEFDVElWSVRZX0NSRUFURSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25MaXN0SXRlbUNsaWNrKExpc3RWaWV3IGwsIFZpZXcgdiwgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7CisgICAgICAgIHN1cGVyLm9uTGlzdEl0ZW1DbGljayhsLCB2LCBwb3NpdGlvbiwgaWQpOworICAgICAgICBDdXJzb3IgYyA9IG1Ob3Rlc0N1cnNvcjsKKyAgICAgICAgYy5tb3ZlVG9Qb3NpdGlvbihwb3NpdGlvbik7CisgICAgICAgIEludGVudCBpID0gbmV3IEludGVudCh0aGlzLCBOb3RlRWRpdC5jbGFzcyk7CisgICAgICAgIGkucHV0RXh0cmEoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lELCBpZCk7CisgICAgICAgIGkucHV0RXh0cmEoTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFLCBjLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjLmdldENvbHVtbkluZGV4T3JUaHJvdyhOb3Rlc0RiQWRhcHRlci5LRVlfVElUTEUpKSk7CisgICAgICAgIGkucHV0RXh0cmEoTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFksIGMuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIGMuZ2V0Q29sdW1uSW5kZXhPclRocm93KE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKSkpOworICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGksIEFDVElWSVRZX0VESVQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uQWN0aXZpdHlSZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBpbnQgcmVzdWx0Q29kZSwgSW50ZW50IGludGVudCkgeworICAgICAgICBzdXBlci5vbkFjdGl2aXR5UmVzdWx0KHJlcXVlc3RDb2RlLCByZXN1bHRDb2RlLCBpbnRlbnQpOworICAgICAgICBCdW5kbGUgZXh0cmFzID0gaW50ZW50LmdldEV4dHJhcygpOworICAgICAgICBzd2l0Y2gocmVxdWVzdENvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUNUSVZJVFlfQ1JFQVRFOgorICAgICAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IGV4dHJhcy5nZXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgYm9keSA9IGV4dHJhcy5nZXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFkpOworICAgICAgICAgICAgICAgIG1EYkhlbHBlci5jcmVhdGVOb3RlKHRpdGxlLCBib2R5KTsKKyAgICAgICAgICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBQ1RJVklUWV9FRElUOgorICAgICAgICAgICAgICAgIExvbmcgcm93SWQgPSBleHRyYXMuZ2V0TG9uZyhOb3Rlc0RiQWRhcHRlci5LRVlfUk9XSUQpOworICAgICAgICAgICAgICAgIGlmIChyb3dJZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlZGl0VGl0bGUgPSBleHRyYXMuZ2V0U3RyaW5nKE5vdGVzRGJBZGFwdGVyLktFWV9USVRMRSk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlZGl0Qm9keSA9IGV4dHJhcy5nZXRTdHJpbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX0JPRFkpOworICAgICAgICAgICAgICAgICAgICBtRGJIZWxwZXIudXBkYXRlTm90ZShyb3dJZCwgZWRpdFRpdGxlLCBlZGl0Qm9keSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbGxEYXRhKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVzRGJBZGFwdGVyLmphdmEgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVzRGJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzhlZTFjMAotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjMvc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXNEYkFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5TUUxFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2U7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlT3BlbkhlbHBlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisvKioKKyAqIFNpbXBsZSBub3RlcyBkYXRhYmFzZSBhY2Nlc3MgaGVscGVyIGNsYXNzLiBEZWZpbmVzIHRoZSBiYXNpYyBDUlVEIG9wZXJhdGlvbnMKKyAqIGZvciB0aGUgbm90ZXBhZCBleGFtcGxlLCBhbmQgZ2l2ZXMgdGhlIGFiaWxpdHkgdG8gbGlzdCBhbGwgbm90ZXMgYXMgd2VsbCBhcworICogcmV0cmlldmUgb3IgbW9kaWZ5IGEgc3BlY2lmaWMgbm90ZS4KKyAqIAorICogVGhpcyBoYXMgYmVlbiBpbXByb3ZlZCBmcm9tIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoaXMgdHV0b3JpYWwgdGhyb3VnaCB0aGUKKyAqIGFkZGl0aW9uIG9mIGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgYWxzbyB1c2luZyByZXR1cm5pbmcgYSBDdXJzb3IgaW5zdGVhZAorICogb2YgdXNpbmcgYSBjb2xsZWN0aW9uIG9mIGlubmVyIGNsYXNzZXMgKHdoaWNoIGlzIGxlc3Mgc2NhbGFibGUgYW5kIG5vdAorICogcmVjb21tZW5kZWQpLgorICovCitwdWJsaWMgY2xhc3MgTm90ZXNEYkFkYXB0ZXIgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1RJVExFID0gInRpdGxlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQk9EWSA9ICJib2R5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUk9XSUQgPSAiX2lkIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTm90ZXNEYkFkYXB0ZXIiOworICAgIHByaXZhdGUgRGF0YWJhc2VIZWxwZXIgbURiSGVscGVyOworICAgIHByaXZhdGUgU1FMaXRlRGF0YWJhc2UgbURiOworCisgICAgLyoqCisgICAgICogRGF0YWJhc2UgY3JlYXRpb24gc3FsIHN0YXRlbWVudAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9DUkVBVEUgPQorICAgICAgICAiY3JlYXRlIHRhYmxlIG5vdGVzIChfaWQgaW50ZWdlciBwcmltYXJ5IGtleSBhdXRvaW5jcmVtZW50LCAiCisgICAgICAgICsgInRpdGxlIHRleHQgbm90IG51bGwsIGJvZHkgdGV4dCBub3QgbnVsbCk7IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9OQU1FID0gImRhdGEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9UQUJMRSA9ICJub3RlcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFX1ZFUlNJT04gPSAyOworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1DdHg7CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEYXRhYmFzZUhlbHBlciBleHRlbmRzIFNRTGl0ZU9wZW5IZWxwZXIgeworCisgICAgICAgIERhdGFiYXNlSGVscGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgREFUQUJBU0VfTkFNRSwgbnVsbCwgREFUQUJBU0VfVkVSU0lPTik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoU1FMaXRlRGF0YWJhc2UgZGIpIHsKKworICAgICAgICAgICAgZGIuZXhlY1NRTChEQVRBQkFTRV9DUkVBVEUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uVXBncmFkZShTUUxpdGVEYXRhYmFzZSBkYiwgaW50IG9sZFZlcnNpb24sIGludCBuZXdWZXJzaW9uKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJVcGdyYWRpbmcgZGF0YWJhc2UgZnJvbSB2ZXJzaW9uICIgKyBvbGRWZXJzaW9uICsgIiB0byAiCisgICAgICAgICAgICAgICAgICAgICsgbmV3VmVyc2lvbiArICIsIHdoaWNoIHdpbGwgZGVzdHJveSBhbGwgb2xkIGRhdGEiKTsKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIG5vdGVzIik7CisgICAgICAgICAgICBvbkNyZWF0ZShkYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciAtIHRha2VzIHRoZSBjb250ZXh0IHRvIGFsbG93IHRoZSBkYXRhYmFzZSB0byBiZQorICAgICAqIG9wZW5lZC9jcmVhdGVkCisgICAgICogCisgICAgICogQHBhcmFtIGN0eCB0aGUgQ29udGV4dCB3aXRoaW4gd2hpY2ggdG8gd29yaworICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlcihDb250ZXh0IGN0eCkgeworICAgICAgICB0aGlzLm1DdHggPSBjdHg7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbiB0aGUgbm90ZXMgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBvcGVuZWQsIHRyeSB0byBjcmVhdGUgYSBuZXcKKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBjcmVhdGVkLCB0aHJvdyBhbiBleGNlcHRpb24gdG8KKyAgICAgKiBzaWduYWwgdGhlIGZhaWx1cmUKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoaXMgKHNlbGYgcmVmZXJlbmNlLCBhbGxvd2luZyB0aGlzIHRvIGJlIGNoYWluZWQgaW4gYW4KKyAgICAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uIGNhbGwpCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgdGhlIGRhdGFiYXNlIGNvdWxkIGJlIG5laXRoZXIgb3BlbmVkIG9yIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIgb3BlbigpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgRGF0YWJhc2VIZWxwZXIobUN0eCk7CisgICAgICAgIG1EYiA9IG1EYkhlbHBlci5nZXRXcml0YWJsZURhdGFiYXNlKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBtRGJIZWxwZXIuY2xvc2UoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBub3RlIHVzaW5nIHRoZSB0aXRsZSBhbmQgYm9keSBwcm92aWRlZC4gSWYgdGhlIG5vdGUgaXMKKyAgICAgKiBzdWNjZXNzZnVsbHkgY3JlYXRlZCByZXR1cm4gdGhlIG5ldyByb3dJZCBmb3IgdGhhdCBub3RlLCBvdGhlcndpc2UgcmV0dXJuCisgICAgICogYSAtMSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorICAgICAqIAorICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIG5vdGUKKyAgICAgKiBAcGFyYW0gYm9keSB0aGUgYm9keSBvZiB0aGUgbm90ZQorICAgICAqIEByZXR1cm4gcm93SWQgb3IgLTEgaWYgZmFpbGVkCisgICAgICovCisgICAgcHVibGljIGxvbmcgY3JlYXRlTm90ZShTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgaW5pdGlhbFZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi5pbnNlcnQoREFUQUJBU0VfVEFCTEUsIG51bGwsIGluaXRpYWxWYWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlbGV0ZSB0aGUgbm90ZSB3aXRoIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIGRlbGV0ZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkZWxldGVOb3RlKGxvbmcgcm93SWQpIHsKKworICAgICAgICByZXR1cm4gbURiLmRlbGV0ZShEQVRBQkFTRV9UQUJMRSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3Igb3ZlciB0aGUgbGlzdCBvZiBhbGwgbm90ZXMgaW4gdGhlIGRhdGFiYXNlCisgICAgICogCisgICAgICogQHJldHVybiBDdXJzb3Igb3ZlciBhbGwgbm90ZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoQWxsTm90ZXMoKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5xdWVyeShEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsIEtFWV9USVRMRSwKKyAgICAgICAgICAgICAgICBLRVlfQk9EWX0sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBwb3NpdGlvbmVkIGF0IHRoZSBub3RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byByZXRyaWV2ZQorICAgICAqIEByZXR1cm4gQ3Vyc29yIHBvc2l0aW9uZWQgdG8gbWF0Y2hpbmcgbm90ZSwgaWYgZm91bmQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiBub3RlIGNvdWxkIG5vdCBiZSBmb3VuZC9yZXRyaWV2ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoTm90ZShsb25nIHJvd0lkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKworICAgICAgICBDdXJzb3IgbUN1cnNvciA9CisKKyAgICAgICAgICAgIG1EYi5xdWVyeSh0cnVlLCBEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsCisgICAgICAgICAgICAgICAgICAgIEtFWV9USVRMRSwgS0VZX0JPRFl9LCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGlmIChtQ3Vyc29yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUN1cnNvcjsKKworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgbm90ZSB1c2luZyB0aGUgZGV0YWlscyBwcm92aWRlZC4gVGhlIG5vdGUgdG8gYmUgdXBkYXRlZCBpcworICAgICAqIHNwZWNpZmllZCB1c2luZyB0aGUgcm93SWQsIGFuZCBpdCBpcyBhbHRlcmVkIHRvIHVzZSB0aGUgdGl0bGUgYW5kIGJvZHkKKyAgICAgKiB2YWx1ZXMgcGFzc2VkIGluCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHRpdGxlIHZhbHVlIHRvIHNldCBub3RlIHRpdGxlIHRvCisgICAgICogQHBhcmFtIGJvZHkgdmFsdWUgdG8gc2V0IG5vdGUgYm9keSB0bworICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbm90ZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZU5vdGUobG9uZyByb3dJZCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGFyZ3MgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBhcmdzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIudXBkYXRlKERBVEFCQVNFX1RBQkxFLCBhcmdzLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9BbmRyb2lkLm1rIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNmVhNQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKKyMgT25seSBidWlsZCBhcGsgaWYgdGhpcyBwYWNrYWdlIGlzIGFkZGVkIHRvIENVU1RPTV9NT0RMVUVTIGluIGJ1aWxkc3BlYy5taworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworIyBPbmx5IGNvbXBpbGUgc291cmNlIGphdmEgZmlsZXMgaW4gdGhpcyBhcGsuCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpCisKK0xPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBOb3RlcGFkdjNTb2x1dGlvbgorCisjIE1ha2UgdGhlIGFwcCBidWlsZCBhZ2FpbnN0IHRoZSBjdXJyZW50IFNESworTE9DQUxfU0RLX1ZFUlNJT04gOj0gY3VycmVudAorCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZlMTY0NQotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIiBwYWNrYWdlPSJjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzIj4KKyAgICA8YXBwbGljYXRpb24gYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNvbiI+CisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9Ii5Ob3RlcGFkdjMiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiPgorICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CisgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgorICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgorICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgorICAgICAgICA8L2FjdGl2aXR5PgorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuTm90ZUVkaXQiIC8+CisgICAgPC9hcHBsaWNhdGlvbj4KKzwvbWFuaWZlc3Q+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvZHJhd2FibGUvaWNvbi5wbmcgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0ZTM2MDEKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2RyYXdhYmxlL2ljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVfZWRpdC54bWwgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3RlX2VkaXQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhZjk3NTQKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3RlX2VkaXQueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CisKKzxMaW5lYXJMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorCWFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKwkKKwk8TGluZWFyTGF5b3V0IGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKworCQk8VGV4dFZpZXcgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKwkJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAKKwkJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy90aXRsZSIgLz4KKwkJPEVkaXRUZXh0IGFuZHJvaWQ6aWQ9IkAraWQvdGl0bGUiIAorCQkgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiLz4KKwk8L0xpbmVhckxheW91dD4KKworCTxUZXh0VmlldyBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgCisJCWFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ib2R5IiAvPgorCTxFZGl0VGV4dCBhbmRyb2lkOmlkPSJAK2lkL2JvZHkiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorCQlhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisJCWFuZHJvaWQ6c2Nyb2xsYmFycz0idmVydGljYWwiIC8+CisJCisJPEJ1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2NvbmZpcm0iIAorCSAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbmZpcm0iCisJCWFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisJCWFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgorCis8L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX2xpc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhZTA0NzIKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL2xheW91dC9ub3Rlc19saXN0LnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPExpbmVhckxheW91dCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+CisgICAgCisgICAgPExpc3RWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDpsaXN0IgorICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIvPgorICAJPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYW5kcm9pZDplbXB0eSIKKyAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAJYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIAlhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fbm90ZXMiLz4KKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3Jlcy9sYXlvdXQvbm90ZXNfcm93LnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjI4YTQxYgotLS0gL2Rldi9udWxsCisrKyBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvbGF5b3V0L25vdGVzX3Jvdy54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dDEiIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ii8+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlNjNiODMKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5Ob3RlcGFkIHYzPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19ub3RlcyI+Tm8gTm90ZXMgWWV0PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2luc2VydCI+QWRkIE5vdGU8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZGVsZXRlIj5EZWxldGUgTm90ZTwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGl0bGUiPlRpdGxlPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJib2R5Ij5Cb2R5PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maXJtIj5Db25maXJtPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlZGl0X25vdGUiPkVkaXQgTm90ZTwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZUVkaXQuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3RlRWRpdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4NjQ3ODQKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZUVkaXQuamF2YQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRlbW8ubm90ZXBhZDM7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5CdXR0b247CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7CisKK3B1YmxpYyBjbGFzcyBOb3RlRWRpdCBleHRlbmRzIEFjdGl2aXR5IHsKKworICAgIHByaXZhdGUgRWRpdFRleHQgbVRpdGxlVGV4dDsKKyAgICBwcml2YXRlIEVkaXRUZXh0IG1Cb2R5VGV4dDsKKyAgICBwcml2YXRlIExvbmcgbVJvd0lkOworICAgIHByaXZhdGUgTm90ZXNEYkFkYXB0ZXIgbURiSGVscGVyOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgTm90ZXNEYkFkYXB0ZXIodGhpcyk7CisgICAgICAgIG1EYkhlbHBlci5vcGVuKCk7CisKKyAgICAgICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQubm90ZV9lZGl0KTsKKworICAgICAgICBtVGl0bGVUZXh0ID0gKEVkaXRUZXh0KSBmaW5kVmlld0J5SWQoUi5pZC50aXRsZSk7CisgICAgICAgIG1Cb2R5VGV4dCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQuYm9keSk7CisKKyAgICAgICAgQnV0dG9uIGNvbmZpcm1CdXR0b24gPSAoQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5jb25maXJtKTsKKworICAgICAgICBtUm93SWQgPSAoc2F2ZWRJbnN0YW5jZVN0YXRlID09IG51bGwpID8gbnVsbCA6CisgICAgICAgICAgICAoTG9uZykgc2F2ZWRJbnN0YW5jZVN0YXRlLmdldFNlcmlhbGl6YWJsZShOb3Rlc0RiQWRhcHRlci5LRVlfUk9XSUQpOworCQlpZiAobVJvd0lkID09IG51bGwpIHsKKwkJCUJ1bmRsZSBleHRyYXMgPSBnZXRJbnRlbnQoKS5nZXRFeHRyYXMoKTsKKwkJCW1Sb3dJZCA9IGV4dHJhcyAhPSBudWxsID8gZXh0cmFzLmdldExvbmcoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lEKQorCQkJCQkJCQkJOiBudWxsOworCQl9CisKKwkJcG9wdWxhdGVGaWVsZHMoKTsKKworICAgICAgICBjb25maXJtQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7CisgICAgICAgICAgICAgICAgc2V0UmVzdWx0KFJFU1VMVF9PSyk7CisgICAgICAgICAgICAgICAgZmluaXNoKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRmllbGRzKCkgeworICAgICAgICBpZiAobVJvd0lkICE9IG51bGwpIHsKKyAgICAgICAgICAgIEN1cnNvciBub3RlID0gbURiSGVscGVyLmZldGNoTm90ZShtUm93SWQpOworICAgICAgICAgICAgc3RhcnRNYW5hZ2luZ0N1cnNvcihub3RlKTsKKyAgICAgICAgICAgIG1UaXRsZVRleHQuc2V0VGV4dChub3RlLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgbm90ZS5nZXRDb2x1bW5JbmRleE9yVGhyb3coTm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFKSkpOworICAgICAgICAgICAgbUJvZHlUZXh0LnNldFRleHQobm90ZS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIG5vdGUuZ2V0Q29sdW1uSW5kZXhPclRocm93KE5vdGVzRGJBZGFwdGVyLktFWV9CT0RZKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25TYXZlSW5zdGFuY2VTdGF0ZShCdW5kbGUgb3V0U3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25TYXZlSW5zdGFuY2VTdGF0ZShvdXRTdGF0ZSk7CisgICAgICAgIHNhdmVTdGF0ZSgpOworICAgICAgICBvdXRTdGF0ZS5wdXRTZXJpYWxpemFibGUoTm90ZXNEYkFkYXB0ZXIuS0VZX1JPV0lELCBtUm93SWQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7CisgICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKKyAgICAgICAgc2F2ZVN0YXRlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7CisgICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7CisgICAgICAgIHBvcHVsYXRlRmllbGRzKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNhdmVTdGF0ZSgpIHsKKyAgICAgICAgU3RyaW5nIHRpdGxlID0gbVRpdGxlVGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIGJvZHkgPSBtQm9keVRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKG1Sb3dJZCA9PSBudWxsKSB7CisgICAgICAgICAgICBsb25nIGlkID0gbURiSGVscGVyLmNyZWF0ZU5vdGUodGl0bGUsIGJvZHkpOworICAgICAgICAgICAgaWYgKGlkID4gMCkgeworICAgICAgICAgICAgICAgIG1Sb3dJZCA9IGlkOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbURiSGVscGVyLnVwZGF0ZU5vdGUobVJvd0lkLCB0aXRsZSwgYm9keSk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3RlcGFkdjMuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3RlcGFkdjMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZTE1Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvdHV0b3JpYWxzL05vdGVwYWRDb2RlTGFiL05vdGVwYWR2M1NvbHV0aW9uL3NyYy9jb20vYW5kcm9pZC9kZW1vL25vdGVwYWQzL05vdGVwYWR2My5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZGVtby5ub3RlcGFkMzsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkxpc3RBY3Rpdml0eTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5TaW1wbGVDdXJzb3JBZGFwdGVyOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm87CisKK3B1YmxpYyBjbGFzcyBOb3RlcGFkdjMgZXh0ZW5kcyBMaXN0QWN0aXZpdHkgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJVklUWV9DUkVBVEU9MDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfRURJVD0xOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOU0VSVF9JRCA9IE1lbnUuRklSU1Q7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFTEVURV9JRCA9IE1lbnUuRklSU1QgKyAxOworCisgICAgcHJpdmF0ZSBOb3Rlc0RiQWRhcHRlciBtRGJIZWxwZXI7CisKKyAgICAvKiogQ2FsbGVkIHdoZW4gdGhlIGFjdGl2aXR5IGlzIGZpcnN0IGNyZWF0ZWQuICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5ub3Rlc19saXN0KTsKKyAgICAgICAgbURiSGVscGVyID0gbmV3IE5vdGVzRGJBZGFwdGVyKHRoaXMpOworICAgICAgICBtRGJIZWxwZXIub3BlbigpOworICAgICAgICBmaWxsRGF0YSgpOworICAgICAgICByZWdpc3RlckZvckNvbnRleHRNZW51KGdldExpc3RWaWV3KCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmaWxsRGF0YSgpIHsKKyAgICAgICAgQ3Vyc29yIG5vdGVzQ3Vyc29yID0gbURiSGVscGVyLmZldGNoQWxsTm90ZXMoKTsKKyAgICAgICAgc3RhcnRNYW5hZ2luZ0N1cnNvcihub3Rlc0N1cnNvcik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRvIHNwZWNpZnkgdGhlIGZpZWxkcyB3ZSB3YW50IHRvIGRpc3BsYXkgaW4gdGhlIGxpc3QgKG9ubHkgVElUTEUpCisgICAgICAgIFN0cmluZ1tdIGZyb20gPSBuZXcgU3RyaW5nW117Tm90ZXNEYkFkYXB0ZXIuS0VZX1RJVExFfTsKKworICAgICAgICAvLyBhbmQgYW4gYXJyYXkgb2YgdGhlIGZpZWxkcyB3ZSB3YW50IHRvIGJpbmQgdGhvc2UgZmllbGRzIHRvIChpbiB0aGlzIGNhc2UganVzdCB0ZXh0MSkKKyAgICAgICAgaW50W10gdG8gPSBuZXcgaW50W117Ui5pZC50ZXh0MX07CisKKyAgICAgICAgLy8gTm93IGNyZWF0ZSBhIHNpbXBsZSBjdXJzb3IgYWRhcHRlciBhbmQgc2V0IGl0IHRvIGRpc3BsYXkKKyAgICAgICAgU2ltcGxlQ3Vyc29yQWRhcHRlciBub3RlcyA9IAorICAgICAgICAgICAgbmV3IFNpbXBsZUN1cnNvckFkYXB0ZXIodGhpcywgUi5sYXlvdXQubm90ZXNfcm93LCBub3Rlc0N1cnNvciwgZnJvbSwgdG8pOworICAgICAgICBzZXRMaXN0QWRhcHRlcihub3Rlcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKKyAgICAgICAgbWVudS5hZGQoMCwgSU5TRVJUX0lELCAwLCBSLnN0cmluZy5tZW51X2luc2VydCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1TZWxlY3RlZChpbnQgZmVhdHVyZUlkLCBNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgICAgICBjYXNlIElOU0VSVF9JRDoKKyAgICAgICAgICAgICAgICBjcmVhdGVOb3RlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VwZXIub25NZW51SXRlbVNlbGVjdGVkKGZlYXR1cmVJZCwgaXRlbSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51LCBWaWV3IHYsCisgICAgICAgICAgICBDb250ZXh0TWVudUluZm8gbWVudUluZm8pIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGVDb250ZXh0TWVudShtZW51LCB2LCBtZW51SW5mbyk7CisgICAgICAgIG1lbnUuYWRkKDAsIERFTEVURV9JRCwgMCwgUi5zdHJpbmcubWVudV9kZWxldGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIG9uQ29udGV4dEl0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7CisgICAgICAgIHN3aXRjaChpdGVtLmdldEl0ZW1JZCgpKSB7CisgICAgICAgICAgICBjYXNlIERFTEVURV9JRDoKKyAgICAgICAgICAgICAgICBBZGFwdGVyQ29udGV4dE1lbnVJbmZvIGluZm8gPSAoQWRhcHRlckNvbnRleHRNZW51SW5mbykgaXRlbS5nZXRNZW51SW5mbygpOworICAgICAgICAgICAgICAgIG1EYkhlbHBlci5kZWxldGVOb3RlKGluZm8uaWQpOworICAgICAgICAgICAgICAgIGZpbGxEYXRhKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLm9uQ29udGV4dEl0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlTm90ZSgpIHsKKyAgICAgICAgSW50ZW50IGkgPSBuZXcgSW50ZW50KHRoaXMsIE5vdGVFZGl0LmNsYXNzKTsKKyAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpLCBBQ1RJVklUWV9DUkVBVEUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uTGlzdEl0ZW1DbGljayhMaXN0VmlldyBsLCBWaWV3IHYsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgeworICAgICAgICBzdXBlci5vbkxpc3RJdGVtQ2xpY2sobCwgdiwgcG9zaXRpb24sIGlkKTsKKyAgICAgICAgSW50ZW50IGkgPSBuZXcgSW50ZW50KHRoaXMsIE5vdGVFZGl0LmNsYXNzKTsKKyAgICAgICAgaS5wdXRFeHRyYShOb3Rlc0RiQWRhcHRlci5LRVlfUk9XSUQsIGlkKTsKKyAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpLCBBQ1RJVklUWV9FRElUKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgc3VwZXIub25BY3Rpdml0eVJlc3VsdChyZXF1ZXN0Q29kZSwgcmVzdWx0Q29kZSwgaW50ZW50KTsKKyAgICAgICAgZmlsbERhdGEoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXNEYkFkYXB0ZXIuamF2YSBiL3R1dG9yaWFscy9Ob3RlcGFkQ29kZUxhYi9Ob3RlcGFkdjNTb2x1dGlvbi9zcmMvY29tL2FuZHJvaWQvZGVtby9ub3RlcGFkMy9Ob3Rlc0RiQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ZWUxYzAKLS0tIC9kZXYvbnVsbAorKysgYi90dXRvcmlhbHMvTm90ZXBhZENvZGVMYWIvTm90ZXBhZHYzU29sdXRpb24vc3JjL2NvbS9hbmRyb2lkL2RlbW8vbm90ZXBhZDMvTm90ZXNEYkFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgKiB0aGUgTGljZW5zZSBhdAorICogCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlcgorICogdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kZW1vLm5vdGVwYWQzOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5TUUxFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2U7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlT3BlbkhlbHBlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisvKioKKyAqIFNpbXBsZSBub3RlcyBkYXRhYmFzZSBhY2Nlc3MgaGVscGVyIGNsYXNzLiBEZWZpbmVzIHRoZSBiYXNpYyBDUlVEIG9wZXJhdGlvbnMKKyAqIGZvciB0aGUgbm90ZXBhZCBleGFtcGxlLCBhbmQgZ2l2ZXMgdGhlIGFiaWxpdHkgdG8gbGlzdCBhbGwgbm90ZXMgYXMgd2VsbCBhcworICogcmV0cmlldmUgb3IgbW9kaWZ5IGEgc3BlY2lmaWMgbm90ZS4KKyAqIAorICogVGhpcyBoYXMgYmVlbiBpbXByb3ZlZCBmcm9tIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoaXMgdHV0b3JpYWwgdGhyb3VnaCB0aGUKKyAqIGFkZGl0aW9uIG9mIGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgYWxzbyB1c2luZyByZXR1cm5pbmcgYSBDdXJzb3IgaW5zdGVhZAorICogb2YgdXNpbmcgYSBjb2xsZWN0aW9uIG9mIGlubmVyIGNsYXNzZXMgKHdoaWNoIGlzIGxlc3Mgc2NhbGFibGUgYW5kIG5vdAorICogcmVjb21tZW5kZWQpLgorICovCitwdWJsaWMgY2xhc3MgTm90ZXNEYkFkYXB0ZXIgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1RJVExFID0gInRpdGxlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQk9EWSA9ICJib2R5IjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUk9XSUQgPSAiX2lkIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTm90ZXNEYkFkYXB0ZXIiOworICAgIHByaXZhdGUgRGF0YWJhc2VIZWxwZXIgbURiSGVscGVyOworICAgIHByaXZhdGUgU1FMaXRlRGF0YWJhc2UgbURiOworCisgICAgLyoqCisgICAgICogRGF0YWJhc2UgY3JlYXRpb24gc3FsIHN0YXRlbWVudAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9DUkVBVEUgPQorICAgICAgICAiY3JlYXRlIHRhYmxlIG5vdGVzIChfaWQgaW50ZWdlciBwcmltYXJ5IGtleSBhdXRvaW5jcmVtZW50LCAiCisgICAgICAgICsgInRpdGxlIHRleHQgbm90IG51bGwsIGJvZHkgdGV4dCBub3QgbnVsbCk7IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9OQU1FID0gImRhdGEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBQkFTRV9UQUJMRSA9ICJub3RlcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFX1ZFUlNJT04gPSAyOworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1DdHg7CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEYXRhYmFzZUhlbHBlciBleHRlbmRzIFNRTGl0ZU9wZW5IZWxwZXIgeworCisgICAgICAgIERhdGFiYXNlSGVscGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgREFUQUJBU0VfTkFNRSwgbnVsbCwgREFUQUJBU0VfVkVSU0lPTik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoU1FMaXRlRGF0YWJhc2UgZGIpIHsKKworICAgICAgICAgICAgZGIuZXhlY1NRTChEQVRBQkFTRV9DUkVBVEUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uVXBncmFkZShTUUxpdGVEYXRhYmFzZSBkYiwgaW50IG9sZFZlcnNpb24sIGludCBuZXdWZXJzaW9uKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJVcGdyYWRpbmcgZGF0YWJhc2UgZnJvbSB2ZXJzaW9uICIgKyBvbGRWZXJzaW9uICsgIiB0byAiCisgICAgICAgICAgICAgICAgICAgICsgbmV3VmVyc2lvbiArICIsIHdoaWNoIHdpbGwgZGVzdHJveSBhbGwgb2xkIGRhdGEiKTsKKyAgICAgICAgICAgIGRiLmV4ZWNTUUwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIG5vdGVzIik7CisgICAgICAgICAgICBvbkNyZWF0ZShkYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciAtIHRha2VzIHRoZSBjb250ZXh0IHRvIGFsbG93IHRoZSBkYXRhYmFzZSB0byBiZQorICAgICAqIG9wZW5lZC9jcmVhdGVkCisgICAgICogCisgICAgICogQHBhcmFtIGN0eCB0aGUgQ29udGV4dCB3aXRoaW4gd2hpY2ggdG8gd29yaworICAgICAqLworICAgIHB1YmxpYyBOb3Rlc0RiQWRhcHRlcihDb250ZXh0IGN0eCkgeworICAgICAgICB0aGlzLm1DdHggPSBjdHg7CisgICAgfQorCisgICAgLyoqCisgICAgICogT3BlbiB0aGUgbm90ZXMgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBvcGVuZWQsIHRyeSB0byBjcmVhdGUgYSBuZXcKKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgZGF0YWJhc2UuIElmIGl0IGNhbm5vdCBiZSBjcmVhdGVkLCB0aHJvdyBhbiBleGNlcHRpb24gdG8KKyAgICAgKiBzaWduYWwgdGhlIGZhaWx1cmUKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoaXMgKHNlbGYgcmVmZXJlbmNlLCBhbGxvd2luZyB0aGlzIHRvIGJlIGNoYWluZWQgaW4gYW4KKyAgICAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uIGNhbGwpCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gaWYgdGhlIGRhdGFiYXNlIGNvdWxkIGJlIG5laXRoZXIgb3BlbmVkIG9yIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgTm90ZXNEYkFkYXB0ZXIgb3BlbigpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgICAgICBtRGJIZWxwZXIgPSBuZXcgRGF0YWJhc2VIZWxwZXIobUN0eCk7CisgICAgICAgIG1EYiA9IG1EYkhlbHBlci5nZXRXcml0YWJsZURhdGFiYXNlKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBtRGJIZWxwZXIuY2xvc2UoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBub3RlIHVzaW5nIHRoZSB0aXRsZSBhbmQgYm9keSBwcm92aWRlZC4gSWYgdGhlIG5vdGUgaXMKKyAgICAgKiBzdWNjZXNzZnVsbHkgY3JlYXRlZCByZXR1cm4gdGhlIG5ldyByb3dJZCBmb3IgdGhhdCBub3RlLCBvdGhlcndpc2UgcmV0dXJuCisgICAgICogYSAtMSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorICAgICAqIAorICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIG5vdGUKKyAgICAgKiBAcGFyYW0gYm9keSB0aGUgYm9keSBvZiB0aGUgbm90ZQorICAgICAqIEByZXR1cm4gcm93SWQgb3IgLTEgaWYgZmFpbGVkCisgICAgICovCisgICAgcHVibGljIGxvbmcgY3JlYXRlTm90ZShTdHJpbmcgdGl0bGUsIFN0cmluZyBib2R5KSB7CisgICAgICAgIENvbnRlbnRWYWx1ZXMgaW5pdGlhbFZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgIGluaXRpYWxWYWx1ZXMucHV0KEtFWV9USVRMRSwgdGl0bGUpOworICAgICAgICBpbml0aWFsVmFsdWVzLnB1dChLRVlfQk9EWSwgYm9keSk7CisKKyAgICAgICAgcmV0dXJuIG1EYi5pbnNlcnQoREFUQUJBU0VfVEFCTEUsIG51bGwsIGluaXRpYWxWYWx1ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlbGV0ZSB0aGUgbm90ZSB3aXRoIHRoZSBnaXZlbiByb3dJZAorICAgICAqIAorICAgICAqIEBwYXJhbSByb3dJZCBpZCBvZiBub3RlIHRvIGRlbGV0ZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBkZWxldGVOb3RlKGxvbmcgcm93SWQpIHsKKworICAgICAgICByZXR1cm4gbURiLmRlbGV0ZShEQVRBQkFTRV9UQUJMRSwgS0VZX1JPV0lEICsgIj0iICsgcm93SWQsIG51bGwpID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBDdXJzb3Igb3ZlciB0aGUgbGlzdCBvZiBhbGwgbm90ZXMgaW4gdGhlIGRhdGFiYXNlCisgICAgICogCisgICAgICogQHJldHVybiBDdXJzb3Igb3ZlciBhbGwgbm90ZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoQWxsTm90ZXMoKSB7CisKKyAgICAgICAgcmV0dXJuIG1EYi5xdWVyeShEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsIEtFWV9USVRMRSwKKyAgICAgICAgICAgICAgICBLRVlfQk9EWX0sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIEN1cnNvciBwb3NpdGlvbmVkIGF0IHRoZSBub3RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcm93SWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gcm93SWQgaWQgb2Ygbm90ZSB0byByZXRyaWV2ZQorICAgICAqIEByZXR1cm4gQ3Vyc29yIHBvc2l0aW9uZWQgdG8gbWF0Y2hpbmcgbm90ZSwgaWYgZm91bmQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBpZiBub3RlIGNvdWxkIG5vdCBiZSBmb3VuZC9yZXRyaWV2ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgQ3Vyc29yIGZldGNoTm90ZShsb25nIHJvd0lkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKworICAgICAgICBDdXJzb3IgbUN1cnNvciA9CisKKyAgICAgICAgICAgIG1EYi5xdWVyeSh0cnVlLCBEQVRBQkFTRV9UQUJMRSwgbmV3IFN0cmluZ1tdIHtLRVlfUk9XSUQsCisgICAgICAgICAgICAgICAgICAgIEtFWV9USVRMRSwgS0VZX0JPRFl9LCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGlmIChtQ3Vyc29yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvRmlyc3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbUN1cnNvcjsKKworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgbm90ZSB1c2luZyB0aGUgZGV0YWlscyBwcm92aWRlZC4gVGhlIG5vdGUgdG8gYmUgdXBkYXRlZCBpcworICAgICAqIHNwZWNpZmllZCB1c2luZyB0aGUgcm93SWQsIGFuZCBpdCBpcyBhbHRlcmVkIHRvIHVzZSB0aGUgdGl0bGUgYW5kIGJvZHkKKyAgICAgKiB2YWx1ZXMgcGFzc2VkIGluCisgICAgICogCisgICAgICogQHBhcmFtIHJvd0lkIGlkIG9mIG5vdGUgdG8gdXBkYXRlCisgICAgICogQHBhcmFtIHRpdGxlIHZhbHVlIHRvIHNldCBub3RlIHRpdGxlIHRvCisgICAgICogQHBhcmFtIGJvZHkgdmFsdWUgdG8gc2V0IG5vdGUgYm9keSB0bworICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbm90ZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIGZhbHNlIG90aGVyd2lzZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZU5vdGUobG9uZyByb3dJZCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgYm9keSkgeworICAgICAgICBDb250ZW50VmFsdWVzIGFyZ3MgPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICBhcmdzLnB1dChLRVlfVElUTEUsIHRpdGxlKTsKKyAgICAgICAgYXJncy5wdXQoS0VZX0JPRFksIGJvZHkpOworCisgICAgICAgIHJldHVybiBtRGIudXBkYXRlKERBVEFCQVNFX1RBQkxFLCBhcmdzLCBLRVlfUk9XSUQgKyAiPSIgKyByb3dJZCwgbnVsbCkgPiAwOworICAgIH0KK30K