CiBNdWx0aSBMYW5ndWFnZSBDdXN0b20gRXJyb3IgRG9jdW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogVGhlICdlcnJvcicgZGlyZWN0b3J5IGNvbnRhaW5zIEhUVFAgZXJyb3IgbWVzc2FnZXMgaW4gbXVsdGlwbGUgbGFuZ3VhZ2VzLgogSWYgdGhlIHByZWZlcnJlZCBsYW5ndWFnZSBvZiBhIGNsaWVudCBpcyBhdmFpbGFibGUgaXQgaXMgc2VsZWN0ZWQKIGF1dG9tYXRpY2FsbHkgdmlhIHRoZSBNdWx0aVZpZXdzIGZlYXR1cmUuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkCiBieSBkZWZhdWx0IHZpYSB0aGUgT3B0aW9ucywgTGFuZ3VhZ2UgYW5kIEVycm9yRG9jdW1lbnQgZGlyZWN0aXZlcy4KCiBZb3UgbWF5IGNvbmZpZ3VyZSB0aGUgZGVzaWduIGFuZCBtYXJrdXAgb2YgdGhlIGRvY3VtZW50cyBieSBtb2RpZnlpbmcKIHRoZSBIVE1MIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgJ2Vycm9yL2luY2x1ZGUnLgoKIFN1cHBvcnRlZCBMYW5ndWFnZXM6CiAKICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogIHwgTGFuZ3VhZ2UgICAgICAgICAgICAgIHwgQ29udHJpYnV0ZWQgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICB8IEJyYXppbGlhbiAocHQtYnIpICAgICB8IFJpY2FyZG8gTGVpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogIHwgQ3plY2ggKGNzKSAgICAgICAgICAgIHwgTWFyY2VsIEtvbGFqYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgfCBEdXRjaCAobmwpICAgICAgICAgICAgfCBQZXRlciBWYW4gQmllc2VuICAgICAgICAgICAgICAgICAgICAgICAgIHwKICB8IEVuZ2xpc2ggKGVuKSAgICAgICAgICB8IExhcnMgRWlsZWJyZWNodCAgICAgICAgICAgICAgICAgICAgICAgICAgfAogIHwgRnJlbmNoIChmcikgICAgICAgICAgIHwgQ2VjaWxlIGRlIENyZWN5ICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgfCBHZXJtYW4gKGRlKSAgICAgICAgICAgfCBMYXJzIEVpbGVicmVjaHQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICB8IEl0YWxpYW4gKGl0KSAgICAgICAgICB8IEx1aWdpIFJvc2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogIHwgS29yZWFuIChrbykgICAgICAgICAgIHwgSmFlaG8gU2hpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgfCBQb2xpc2ggKHBsKSAgICAgICAgICAgfCBUb21hc3ogS2VwY3p5bnNraSAgICAgICAgICAgICAgICAgICAgICAgIHwKICB8IFJvbWFuaWFuIChybykgICAgICAgICB8IEFuZHJlaSBCZXNsZWFnYSAgICAgICAgICAgICAgICAgICAgICAgICAgfAogIHwgU3BhbmlzaCAoZXMpICAgICAgICAgIHwgS2FybGEgUXVpbnRlcm8gICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgfCBTd2VkaXNoIChzdikgICAgICAgICAgfCBUaG9tYXMgU2r2Z3JlbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICB8IFR1cmtpc2ggKHRyKSAgICAgICAgICB8IEVtcmUgU29rdWxsdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKFBsZWFzZSBzZWUgaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy1wcm9qZWN0LyBpZiB5b3Ugd291bGQKICAgbGlrZSB0byBjb250cmlidXRlIHRoZSBwYWdlcyBpbiBhbiBhZGRpdGlvbmFsIGxhbmd1YWdlLikKCgogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDQgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo=