CkxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQpjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgpUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAoodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAp0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjEyLjAgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjEyLjAgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBUZXh0LgpBcGFjaGUgQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciB0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nCmFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhIGVudmlyb25tZW50LgoKUmVsZWFzZSAxLjEyLjAuIFJlcXVpcmVzIEphdmEgOCBvciBhYm92ZS4KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KCiogICAgICAgICAgICBBZGQgU3RyaW5nTG9va3VwRmFjdG9yeS5maWxlU3RyaW5nTG9va3VwKFBhdGguLi4pIGFuZCBkZXByZWNhdGVkIGZpbGVTdHJpbmdMb29rdXAoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIEFkZCBTdHJpbmdMb29rdXBGYWN0b3J5LnByb3BlcnRpZXNTdHJpbmdMb29rdXAoUGF0aC4uLikgYW5kIGRlcHJlY2F0ZWQgcHJvcGVydGllc1N0cmluZ0xvb2t1cCgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQWRkIFN0cmluZ0xvb2t1cEZhY3RvcnkueG1sU3RyaW5nTG9va3VwKE1hcCwgUGF0aC4uLikgYW5kIGRlcHJlY2F0ZWQgeG1sU3RyaW5nTG9va3VwKCkgYW5kIHhtbFN0cmluZ0xvb2t1cChNYXApLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQWRkIFN0cmluZ0xvb2t1cEZhY3RvcnkuYnVpbGRlcigpIGZvciBmZW5jaW5nIFBhdGggcmVzb2x1dGlvbiBvZiB0aGUgZmlsZSwgcHJvcGVydGllcyBhbmQgWE1MIGxvb2t1cHMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBBZGQgRG91YmxlRm9ybWF0LkJ1aWxkZXIuZ2V0KCkgYXMgQnVpbGRlciBub3cgaW1wbGVtZW50cyBTdXBwbGllci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoKKiBURVhULTIzMjogIFdvcmRVdGlscy5jb250YWluc0FsbFdvcmRzPygpIG1heSB0aHJvdyBQYXR0ZXJuU3ludGF4RXhjZXB0aW9uLiBUaGFua3MgdG8gQXJub3V0IEVuZ2VsZW4sIEdhcnkgR3JlZ29yeS4KKiBURVhULTE3NTogIEZpeCByZWdyZXNzaW9uIGZvciBkZXRlcm1pbmluZyB3aGl0ZXNwYWNlIGluIFdvcmRVdGlscyAjNTE5LiBUaGFua3MgdG8gRGF2aWQgTGF2YXRpLCBzZWFuZmFicywgR2FyeSBHcmVnb3J5LCBCcnVubyBQLiBLaW5vc2hpdGEuCiogICAgICAgICAgICBEZXByZWNhdGUgQnVpbGRlciBpbiBmYXZvciBvZiBTdXBwbGllci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCkNoYW5nZXMKLS0tLS0tLQoKKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1sYW5nMyBmcm9tIDMuMTMuMCB0byAzLjE0LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBCdW1wIGNvbW1vbnMuYnl0ZWJ1ZGR5LnZlcnNpb24gZnJvbSAxLjE0LjkgdG8gMS4xNC4xMyAjNDc2LCAjNDgyLCAjNTA1LCAjNTIxLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgb3JnLmNvZGVoYXVzLm1vam86ZXhlYy1tYXZlbi1wbHVnaW4gZnJvbSAzLjEuMCB0byAzLjIuMCAjNDc0LCAjNTA4LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1pbyBmcm9tIDIuMTUuMCB0byAyLjE2LjEgIzUyMiwgIzUyNy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1wYXJlbnQgZnJvbSA2NCB0byA2OSAjNTI0LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBvcmcuYXNzZXJ0ajphc3NlcnRqLWNvcmUgZnJvbSAzLjI0LjIgdG8gMy4yNS4zLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2Rvd25sb2FkX3RleHQuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCnRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCgpBcGFjaGUgQ29tbW9ucyBUZXh0IFZlcnNpb24gMS4xMS4wIFJlbGVhc2UgTm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS4xMS4wIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgVGV4dC4KQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciB0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nCmFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhIGVudmlyb25tZW50LgoKQXBhY2hlIENvbW1vbnMgVGV4dCBpcyBhIGxpYnJhcnkgZm9jdXNlZCBvbiBhbGdvcml0aG1zIHdvcmtpbmcgb24gc3RyaW5ncy4KClJlbGVhc2UgMS4xMS4wLiBSZXF1aXJlcyBKYXZhIDggb3IgYWJvdmUuCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCgoqIFRFWFQtMjI0OiAgU2V0IFNlY3VyZVByb2Nlc3NpbmcgZmVhdHVyZSBpbiBYbWxTdHJpbmdMb29rdXAgYnkgZGVmYXVsdC4gVGhhbmtzIHRvIFBKIEZhbm5pbmcsIEdhcnkgR3JlZ29yeS4KKiBURVhULTIyNDogIEFkZCBTdHJpbmdMb29rdXBGYWN0b3J5LnhtbFN0cmluZ0xvb2t1cChNYXA8U3RyaW5nLCBCb29sZWFuPi4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBBZGQgQEZ1bmN0aW9uYWxJbnRlcmZhY2UgdG8gRm9ybWF0RmFjdG9yeS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIEFkZCBSYW5kb21TdHJpbmdHZW5lcmF0b3IuYnVpbGRlcigpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIFRFWFQtMjI5OiAgQWRkIFhtbEVuY29kZXJTdHJpbmdMb29rdXAvWG1sRGVjb2RlclN0cmluZ0xvb2t1cCAjNDQ5LiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YsIEVsbGlvdHRlIFJ1c3R5IEhhcm9sZCwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQWRkIFN0cmluZ1N1YnN0aXR1dG9yLnRvU3RyaW5nKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KCiogVEVYVC0yMTk6ICBGaXggU3RyaW5nVG9rZW5pemVyLmdldFRva2VuTGlzdCB0byByZXR1cm4gYW4gaW5kZXBlbmRlbnQgbW9kaWZpYWJsZSBsaXN0IFRoYW5rcyB0byBKYWFwIFNwZXJsaW5nLgoqICAgICAgICAgICAgRml4IEphdmFkb2MgZm9yIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUh0bWw0ICMzODIgVGhhbmtzIHRvIEphbWVzIE5vcmQuCiogICAgICAgICAgICBUZXh0U3RyaW5nQnVpZGxlciNoYXNoQ29kZSgpIGFsbG9jYXRlcyBhIFN0cmluZyBvbiBlYWNoIGNhbGwgIzM4Ny4gVGhhbmtzIHRvIFBhdmVsIEJlbG91c292LCBHYXJ5IEdyZWdvcnkuCiogVEVYVC0yMjE6ICBGaXggQnVuZGxlLVN5bWJvbGljTmFtZSB0byB1c2UgdGhlIHBhY2thZ2UgbmFtZSBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dCBUaGFua3MgdG8gUmVtY28gUmlzd2ljay4KKiAgICAgICAgICAgIEFkZCBhbmQgdXNlIGEgcGFja2FnZS1wcml2YXRlIHNpbmdsZXRvbiBmb3IgUmVnZXhUb2tlbml6ZXIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBBZGQgYW5kIHVzZSBhIHBhY2thZ2UtcHJpdmF0ZSBzaW5nbGV0b24gZm9yIENvc2luZVNpbWlsYXJpdHkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBBZGQgYW5kIHVzZSBhIHBhY2thZ2UtcHJpdmF0ZSBzaW5nbGV0b24gZm9yIExvbmdlc3RDb21tb25TdWJzZXF1ZW5jZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIEFkZCBhbmQgdXNlIGEgcGFja2FnZS1wcml2YXRlIHNpbmdsZXRvbiBmb3IgSmFyb1dpbmtsZXJTaW1pbGFyaXR5LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQWRkIGFuZCB1c2UgYSBwYWNrYWdlLXByaXZhdGUgc2luZ2xldG9uIGZvciBKYWNjYXJkU2ltaWxhcml0eS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIFtTdGVwU2VjdXJpdHldIGNpOiBIYXJkZW4gR2l0SHViIEFjdGlvbnMgIzQyOC4gVGhhbmtzIHRvIHN0ZXAtc2VjdXJpdHktYm90LCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBJbXByb3ZlIEFscGhhYmV0Q29udmVydGVyIEphdmFkb2MgIzQyOS4gVGhhbmtzIHRvIERpbWl0cmlvcyBFZnRoeW1pb3UuCiogICAgICAgICAgICBGaXggZXhjZXB0aW9uIG1lc3NhZ2UgaW4gSW50ZXJzZWN0aW9uUmVzdWx0IHRvIG1ha2Ugc2V0LXRoZW9yZXRpYyBzZW5zZSAjNDM4LiBUaGFua3MgdG8gRGltaXRyaW9zIEVmdGh5bWlvdS4KKiAgICAgICAgICAgIEFkZCBudWxsLWNoZWNrIGluIFJhbmRvbVN0cmluZ0dlbmVyYXRvciNCdWlsZGVyI3NlbGVjdEZyb20oKSB0byBhdm9pZCBOdWxsUG9pbnRlckV4Y2VwdGlvbiAjNDM0LiBUaGFua3MgdG8gRGltaXRyaW9zIEVmdGh5bWlvdSwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQWRkIG51bGwtY2hlY2sgaW4gUmFuZG9tU3RyaW5nR2VuZXJhdG9yI0J1aWxkZXIjd2l0aGluUmFuZ2UoKSB0byBhdm9pZCBOdWxsUG9pbnRlckV4Y2VwdGlvbi4gVGhhbmtzIHRvIERpbWl0cmlvcyBFZnRoeW1pb3UsIEdhcnkgR3JlZ29yeS4KKiBURVhULTIyODogIEZpeCBUZXh0U3RyaW5nQnVpbGRlciB0byBvdmVyLWFsbG9jYXRlIHdoZW4gZW5zdXJpbmcgY2FwYWNpdHkgIzQ1Mi4gVGhhbmtzIHRvIEFsZXggSGVyYmVydCwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQ29uc3RydWN0b3IgZm9yIFJlc291cmNlQnVuZGxlU3RyaW5nTG9va3VwIHNob3VsZCBiZSBwcml2YXRlIGluc3RlYWQgb2YgcGFja2FnZS1wcml2YXRlLiBUaGFua3MgdG8gRWxsaW90dGUgUnVzdHkgSGFyb2xkLCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBDb25zdHJ1Y3RvciBmb3IgVXJsRGVjb2RlclN0cmluZ0xvb2t1cCBzaG91bGQgYmUgcHJpdmF0ZSBpbnN0ZWFkIG9mIHBhY2thZ2UtcHJpdmF0ZS4gVGhhbmtzIHRvIEVsbGlvdHRlIFJ1c3R5IEhhcm9sZCwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQ29uc3RydWN0b3IgZm9yIFVybEVuY29kZXJTdHJpbmdMb29rdXAgc2hvdWxkIGJlIHByaXZhdGUgaW5zdGVhZCBvZiBwYWNrYWdlLXByaXZhdGUuIFRoYW5rcyB0byBFbGxpb3R0ZSBSdXN0eSBIYXJvbGQsIEdhcnkgR3JlZ29yeS4KKiBURVhULTIzMDogIEphdmFkb2Mgb2Ygb3JnLmFwYWNoZS5jb21tb25zLnRleHQubG9va3VwLkRlZmF1bHRTdHJpbmdMb29rdXAuWE1MIGlzIGluY29ycmVjdC4gVGhhbmtzIHRvIE1pY2hhZWwgT3NpcG92LCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBVcGRhdGUgRG91YmxlRm9ybWF0IHRvIHN0YXRlIGl0IGlzIGJhc2VkIG9uIERvdWJsZS50b1N0cmluZy4gIzQ2Ny4gVGhhbmtzIHRvIEFsZXggSGVyYmVydC4KCkNoYW5nZXMKLS0tLS0tLQoKKiAgICAgICAgICAgIEJ1bXAgYWN0aW9ucy9jYWNoZS4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIGFjdGlvbnMvc2V0dXAtamF2YS4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIGFjdGlvbnMvY2hlY2tvdXQuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBwbWQgZnJvbSA2LjQ5LjAgdG8gNi41Mi4wICMzNjQuIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBCdW1wIGNvbW1vbnMtcm5nLXNpbXBsZSBmcm9tIDEuNCB0byAxLjUgIzM3MC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIHNwb3RidWdzLW1hdmVuLXBsdWdpbiBmcm9tIDQuNy4yLjAgdG8gNC43LjMuNiAjMzcxLCAjMzg1LiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBzcG90YnVncyBmcm9tIDQuNy4yIHRvIDQuNy4zICMzNzMuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBtb2NraXRvLWlubGluZSBmcm9tIDQuOC4wIHRvIDQuMTEuMCAjMzgwLCAjMzg5LCAjMzk2LCAjNDAwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgam1oLnZlcnNpb24gZnJvbSAxLjM1IHRvIDEuMzcgIzM4OC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIGNvbW1vbnMtcGFyZW50IGZyb20gNTQgdG8gNjQgIzM5MiwgIzQwMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIEJ1bXAgYXNzZXJ0ai1jb3JlIGZyb20gMy4yMy4xIHRvIDMuMjQuMiAjNDA1LCAjNDEwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4gZnJvbSAzLjIuMCB0byAzLjIuMSAjNDA3LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1pbyBmcm9tIDIuMTEuMCB0byAyLjE0LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBCdW1wIGNvbW1vbnMtbGFuZzMgZnJvbSAzLjEyLjAgdG8gMy4xMy4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2Rvd25sb2FkX3RleHQuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjEwLjAgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjEwLjAgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBUZXh0LgpDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb2Nlc3NpbmcKYW5kIG1hbmlwdWxhdGluZyB0ZXh0IHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhIEphdmEgZW52aXJvbm1lbnQuCgpBcGFjaGUgQ29tbW9ucyBUZXh0IGlzIGEgbGlicmFyeSBmb2N1c2VkIG9uIGFsZ29yaXRobXMgd29ya2luZyBvbiBzdHJpbmdzLgoKUmVsZWFzZSAxLjEwLjAuIFJlcXVpcmVzIEphdmEgOCBvciBhYm92ZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCgoqIFRFWFQtMjA3OiAgQWRkIERvdWJsZUZvcm1hdCB1dGlsaXR5LgoqIFRFWFQtMTkwOiAgRG9jdW1lbnQgbmVnYXRpdmUgbGltaXQgZm9yIFdvcmRVdGlscyBhYmJyZXZpYXRlIG1ldGhvZCBUaGFua3MgdG8gQmVuamFtaW4gQmluZy4KKiBURVhULTE4ODogIFNwZWVkIHVwIExldmVuc2h0ZWluRGlzdGFuY2Ugd2l0aCB0aHJlc2hvbGQgYnkgZXhpdGluZyBlYXJseSBUaGFua3MgdG8gSmFrb2IgVmVzdGVyc3Ry+G0uCiogVEVYVC0xODU6ICBSZWxlYXNlIE5vdGVzIHBhZ2UgaGFzbid0IGJlZW4gdXBkYXRlZCBmb3IgMS45IHJlbGVhc2UgeWV0LiBUaGFua3MgdG8gTGFycnkgV2VzdCwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQWRkIFN0ckJ1aWxkZXIuaXNOb3RFbXB0eSgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCgoqIFRFWFQtMTg5OiAgRml4IENhc2VVdGlscyB3aGVuIHRoZSBpbnB1dCBzdHJpbmcgY29udGFpbnMgb25seSBkZWxpbWl0ZXJzIFRoYW5rcyB0byBHb25ncHUgWmh1LgoqIFRFWFQtMTg3OiAgQWRkIEdyYWFsVk0gdGVzdCBkZXBlbmRlbmNpZXMgdG8gZml4IHRlc3QgZmFpbHVyZXMgd2l0aCBKYXZhIDE1LgoqIFRFWFQtMTU4OiAgSW5jb3JyZWN0IHZhbHVlcyBmb3IgSmFjY2FyZCBzaW1pbGFyaXR5IHdpdGggZW1wdHkgc3RyaW5ncy4KKiBURVhULTE4NjogIFN0cmluZ1N1YnN0aXR1dG9yIG1hcCBjb25zdHJ1Y3RvciB0aHJvd3MgTlBFIG9uIDEuOSB3aXRoIG51bGwgbWFwLiBUaGFua3MgdG8gR2F1dGFtIEtvcmxhbSwgR2FyeSBHcmVnb3J5LgoqIFRFWFQtMTkxOiAgSmFyb1dpbmtsZXJEaXN0YW5jZSByZXR1cm5zIHRoZSBzYW1lIHZhbHVlcyBhcyBKYXJvV2lua2xlclNpbWlsYXJpdHkuIFRoYW5rcyB0byBCcmFkbGV5IERhdmlkIFJ1bWJhbGwuCiogICAgICAgICAgICBDb3JyZWN0IEphdmFkb2MgaW4gRmlsZVN0cmluZ0xvb2t1cC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIE1pbm9yIEltcHJvdmVtZW50cyAjMTkyLCAjMTk2LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KKiBURVhULTE5NDogIFVzZSBTdHJpbmdVdGlscy5JTkRFWF9OT1RfRk9VTkQgY29uc3RhbnQuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgoqIFRFWFQtMTk5OiAgUmVtb3ZlIHJlZHVuZGFudCBsb2NhbCB2YXJpYWJsZS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogVEVYVC0xOTg6ICBSZXBsYWNlIGxhbWJkYSB3aXRoIG1ldGhvZCByZWZlcmVuY2UuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgoqIFRFWFQtMjAwOiAgU2ltcGxpZnkgc3RhdGVtZW50cy4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogVEVYVC0xOTc6ICBSZXBsYWNlIHN0YXRlbWVudCBsYW1iZGEgd2l0aCBleHByZXNzaW9uIGxhbWJkYS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogVEVYVC0yMDQ6ICBVc2Ugc3RhdGljIGNsYXNzIGlubmVyIGNsYXNzIGluIHRlc3RzLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KKiBURVhULTIwMTogIFNpbXBsaWZ5IGFzc2VydGlvbi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogVEVYVC0yMDI6ICBFeHRyYWN0IGR1cGxpY2F0ZSBjb2RlLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KKiBURVhULTIwNTogIFNldCB2b2lkIHJldHVybiBtZXRob2QuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgoqICAgICAgICAgICAgUmVtb3ZlIHVudXNlZCBleGNlcHRpb24gZnJvbSBUZXh0U3RyaW5nQnVpbGRlci5yZWFkRnJvbShDaGFyQnVmZmVyKS4gVGhpcyBwcmVzZXJ2ZXMgYmluYXJ5IGNvbXBhdGliaWxpdHkgYnV0IG5vdCBzb3VyY2UgY29tcGF0aWJpbGl0eS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIFN0ckJ1aWxkZXIuU3RyQnVpbGRlclJlYWRlci5za2lwKGxvbmcpOiBUaHJvdyBhbiBleGNlcHRpb24gd2hlbiBhbiBpbXBsaWNpdCBuYXJyb3dpbmcgY29udmVyc2lvbiBpbiBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgd291bGQgcmVzdWx0IGluIGluZm9ybWF0aW9uIGxvc3Mgb3IgYSBudW1lcmljIGVycm9yIHN1Y2ggYXMgYW4gb3ZlcmZsb3dzLiBUaGFua3MgdG8gQ29kZVFMLCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBUZXh0U3RyaW5nQnVpbGRlci5UZXh0U3RyaW5nQnVpbGRlclJlYWRlci5za2lwKGxvbmcpOiBUaHJvdyBhbiBleGNlcHRpb24gd2hlbiBhbiBpbXBsaWNpdCBuYXJyb3dpbmcgY29udmVyc2lvbiBpbiBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgd291bGQgcmVzdWx0IGluIGluZm9ybWF0aW9uIGxvc3Mgb3IgYSBudW1lcmljIGVycm9yIHN1Y2ggYXMgYW4gb3ZlcmZsb3dzLiBUaGFua3MgdG8gQ29kZVFMLCBHYXJ5IEdyZWdvcnkuCiogVEVYVC0yMTE6ICBUZXh0U3RyaW5nQnVpbGRlci5lcXVhbHMgd2hhdGV2ZXIgdGhlIGNhcGFjaXR5IGlzICMyODEuIFRoYW5rcyB0byBzZWJ4NTkuCiogVEVYVD0yMTI6ICBBIE1vcmUgRWZmaWNpZW50IEltcGxlbWVudGF0aW9uIGZvciBDYWxjdWxhdGluZyBTaXplIG9mIExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNlLiBUaGFua3MgdG8gQWxpIEdoYW5iYXJpLgoqIFRFWFQtMjA5OiAgTG9va3VwVHJhbnNsYXRvciByZXR1cm5zIGNvdW50IG9mIGNoYXJzIGNvbnN1bWVkLCBub3Qgb2YgY29kZXBvaW50cyBjb25zdW1lZC4gVGhhbmtzIHRvIGZvdXJBamVmZi4KKiBURVhULTIwOTogIFVzZSBNYXRoLm1pbigpIGNhbGwgaW5zdGVhZCBvZiBkb2luZyBpdCBtYW51YWxseS4gIzMzNS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogICAgICAgICAgICBUZXh0U3RyaW5nQnVpbGRlcjogVGhyb3cgT3V0T2ZNZW1vcnlFcnJvciBpbnN0ZWFkIG9mIE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uLiBUaGFua3MgdG8gVmFsZW50aWpudmRCZWVrLCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBUZXh0U3RyaW5nQnVpbGRlcjogQ2FuJ3QgZ3JvdyB0byBzaXplcyB1cCB0byBJbnRlZ2VyLk1BWF9WQUxVRS4gVGhhbmtzIHRvIFZhbGVudGlqbnZkQmVlaywgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgTWFrZSBkZWZhdWx0IHN0cmluZyBsb29rdXBzIGNvbmZpZ3VyYWJsZSB2aWEgc3lzdGVtIHByb3BlcnR5LiBSZW1vdmUgZG5zLCB1cmwsIGFuZCBzY3JpcHQgbG9va3VwcyBmcm9tIGRlZmF1bHRzLiBJZiB0aGVzZSBsb29rdXBzIGFyZSByZXF1aXJlZCBmb3IgdXNlIGluIFN0cmluZ1N1YnN0aXR1dG9yLmNyZWF0ZUludGVycG9sYXRvcigpLCB0aGV5IG11c3QgYmUgZW5hYmxlZCB2aWEgc3lzdGVtIHByb3BlcnR5LiBTZWUgU3RyaW5nTG9va3VwRmFjdG9yeSBmb3IgZGV0YWlscy4KCkNoYW5nZXMKLS0tLS0tLQoKKiAgICAgICAgICAgIEJ1bXAgYWN0aW9ucy9zZXR1cC1qYXZhIGZyb20gdjEuNC4wIHRvIDMgIzE0NywgIzE1NiwgIzE1NSwgIzE3MiwgIzIxNSwgIzMxNC4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIGdpdGh1Yi9jb2RlcWwtYWN0aW9uIGZyb20gMSB0byAyICMzMTkuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBjaGVja3N0eWxlIGZyb20gOC4zNCB0byA5LjMsICMxNDEsICMxNjgsICMxODIsICMxODgsICMxOTMsICMyMDEsICMyMDgsICMyMTEsICMyMjgsICMyMzUsICMyNDUsICMyNTMsICMyNTUsICMyNjIsICMyNzAsICMyODAsICMyODcsICMyOTksICMzMTUsICMzMjEuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBzcG90YnVncy1tYXZlbi1wbHVnaW4gZnJvbSA0LjAuMCB0byA0LjcuMi4wLCAjMTQ0LCAjMTUwLCAjMTY3LCAjMTc2LCAjMTk0LCAjMjEwLCAjMjIzLCAjMjUwLCAjMjY4LCAjMjczLCAjMjc3LCAjMjc4LCAjMjg2LCAjMjkzLCAjMzAzLCAjMzIwLCAjMzI1LCAjMzM4LCAjMzQ0LCAjMzU0LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBzcG90YnVncyBmcm9tIDQuMS4zIHRvIDQuNy4yICMxNzUsIDE4OSwgIzIwOSwgIzIxOCwgIzI0NywgIzI1NiwgIzI2NCwgIzI3NSwgIzI4NCwgIzI4OSwgIzI5NiwgIzMwNiwgIzM1NS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeSwgRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgbW9ja2l0by1pbmxpbmUgZnJvbSAzLjQuNCB0byA0LjguMCwgIzE0MywgIzE0OCwgIzE0OSwgIzE1MiwgIzE1MywgIzE1NCwgIzE1OCwgIzE1OSwgIzE2NiwgIzE3NywgIzE4MCwgIzE4NywgIzE5NSwgIzE5NywgIzIwNywgIzIxNiwgIzIzMSwgIzIzNiwgIzIzNywgIzI0MywgIzI1OCwgIzI1OSwgIzI2MCwgIzI2MSwgIzI3MiwgIzI4NSwgIzI5MSwgIzMwNSwgIzMxNywgIzMzMCwgIzMzMSwgIzM0NywgIzM1Mi4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIGp1bml0LWp1cGl0ZXIgZnJvbSA1LjYuMiB0byA1LjkuMSAjMTYzLCAjMjA0LCAjMjMyLCAjMjY1LCAjMjY5LCAjMjg4LCAjMzQzLCAjMzU3LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgYXNzZXJ0ai1jb3JlIGZyb20gMy4xNi4xIHRvIDMuMjMuMSAjMTUxLCAjMTU3LCAjMTYwLCAjMTc4LCAjMTg0LCAjMTk5LCAjMjQ0LCAjMjY3LCAjMjk0LiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBjb21tb25zLWlvIGZyb20gMi43IHRvIDIuMTEuMCAjMTYxICMyNTEuIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBCdW1wIGNvbW1vbnMtcGFyZW50IGZyb20gNTEgdG8gNTQgIzE0NSwgIzM1OC4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KKiAgICAgICAgICAgIEJ1bXAgbWF2ZW4tcG1kLXBsdWdpbiBmcm9tIDMuMTMuMCB0byAzLjE5LjAgIzE4NiwgIzI2MywgIzMwMiwgIzMzNCwgIzM0OSwgIzM1My4gVGhhbmtzIHRvIERlcGVuZGFib3QuCiogICAgICAgICAgICBCdW1wIHBtZCBmcm9tIDYuNDIuMCB0byA2LjQ2LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBCdW1wIGdyYWFsdm0udmVyc2lvbiBmcm9tIDIwLjIuMCB0byAyMi4wLjAuMiAjMTg1LCAjMTk4LCAjMjA2LCAjMjI3LCAjMjUyLCAjMjc2LCAjMjk1LCAjMzAwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy5qYXBpY21wLnZlcnNpb24gZnJvbSAwLjE0LjMgdG8gMC4xNi4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBjb21tb25zLmphY29jby52ZXJzaW9uIDAuOC41IHRvIDAuOC44OyBmaXhlcyBKYXZhIDE1IGJ1aWxkLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBtYXZlbi1jaGVja3N0eWxlLXBsdWdpbiBmcm9tIDMuMS4xIHRvIDMuMi4wICMyMDIsICMzNDguIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBjb21tb25zLWxhbmczIDMuMTEgLT4gMy4xMi4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBjb21tb25zLmphdmFkb2MudmVyc2lvbiBmcm9tIDMuMi4wIHRvIDMuNC4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqICAgICAgICAgICAgQnVtcCBjb21tb25zLnByb2plY3QtaW5mby52ZXJzaW9uIGZyb20gMy4xLjAgdG8gMy4xLjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogICAgICAgICAgICBCdW1wIGptaC52ZXJzaW9uIGZyb20gMS4zMiB0byAxLjM1ICMyNTQsICMyOTIsICMzMTMuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCBjb21tb25zLXJuZy1zaW1wbGUgZnJvbSAxLjMgdG8gMS40ICMyNjYuIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqICAgICAgICAgICAgQnVtcCB0YWdsaXN0LW1hdmVuLXBsdWdpbiBmcm9tIDIuNCB0byAzLjAuMCAjMjk3LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy5wbWQtaW1wbC52ZXJzaW9uIGZyb20gNi40NC4wIHRvIDYuNDkuMCAjMzIzLCAjMzM2LCAjMzQ1LCAjMzUwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiAgICAgICAgICAgIEJ1bXAgZXhlYy1tYXZlbi1wbHVnaW4gZnJvbSAzLjAuMCB0byAzLjEuMCAjMzQwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4KCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0L2Rvd25sb2FkX3RleHQuY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjkgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjkgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBUZXh0LgpDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb2Nlc3NpbmcKYW5kIG1hbmlwdWxhdGluZyB0ZXh0IHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhIEphdmEgZW52aXJvbm1lbnQuCgpBcGFjaGUgQ29tbW9ucyBUZXh0IGlzIGEgbGlicmFyeSBmb2N1c2VkIG9uIGFsZ29yaXRobXMgd29ya2luZyBvbiBzdHJpbmdzLgoKUmVsZWFzZSAxLjkuIFJlcXVpcmVzIEphdmEgOCBvciBhYm92ZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCgoqIEFkZCBTdHJpbmdNYXRjaGVyLnNpemUoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBSZWZhY3RvciBUZXh0U3RyaW5nQnVpbGRlci5yZWFkRnJvbShSZWFkYWJsZSksIGV4dHJhY3RpbmcgcmVhZEZyb20oQ2hhckJ1ZmZlcikgYW5kIHJlYWRGcm9tKFJlYWRlcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIEJpU3RyaW5nTG9va3VwIGFuZCBpbXBsZW1lbnRhdGlvbiBCaUZ1bmN0aW9uU3RyaW5nTG9va3VwLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdTdWJzdGl0dXRvci5TdHJpbmdTdWJzdGl0dXRvcihTdHJpbmdTdWJzdGl0dXRvcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlRleHRTdHJpbmdCdWlsZGVyLlRleHRTdHJpbmdCdWlsZGVyKENoYXJTZXF1ZW5jZSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlRleHRTdHJpbmdCdWlsZGVyLmRyYWluQ2hhcihpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci5kcmFpbkNoYXJzKGludCwgaW50LCBjaGFyW10uIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlRleHRTdHJpbmdCdWlsZGVyLmlzTm90RW1wdHkoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuVGV4dFN0cmluZ0J1aWxkZXIuaXNSZWFsbG9jYXRlZCgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci5yZWFkRnJvbShSZWFkZXIsIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlRleHRTdHJpbmdCdWlsZGVyLnNldChTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5UZXh0U3RyaW5nQnVpbGRlci53cmFwKGNoYXJbXSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlRleHRTdHJpbmdCdWlsZGVyLndyYXAoY2hhcltdLCBpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5pby5TdHJpbmdTdWJzdGl0dXRvclJlYWRlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubG9va3VwLlN0cmluZ0xvb2t1cEZhY3RvcnkuZnVuY3Rpb25TdHJpbmdMb29rdXAoRnVuY3Rpb248U3RyaW5nLCBWPikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0Lm1hdGNoZXIuU3RyaW5nTWF0Y2hlci5pc01hdGNoKENoYXJTZXF1ZW5jZSwgaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubWF0Y2hlci5TdHJpbmdNYXRjaGVyLmlzTWF0Y2goQ2hhclNlcXVlbmNlLCBpbnQsIGludCwgaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubWF0Y2hlci5TdHJpbmdNYXRjaGVyRmFjdG9yeS5hbmRNYXRjaGVyKFN0cmluZ01hdGNoZXIuLi4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5tYXRjaGVyLlN0cmluZ01hdGNoZXJGYWN0b3J5LnN0cmluZ01hdGNoZXIoY2hhci4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KCiogVEVYVC0xNjY6ICBSZW1vdmVkIG5vbi1leGlzdGluZyBwYXJhbWV0ZXIgZnJvbSBKYXZhZG9jcyBhbmQgc3BlbGxlZCBvdXQgcGFyYW1ldGVycyBpbiB0aHJvd3MuIFRoYW5rcyB0byBNaWtrbyBNYXVudS4KKiBURVhULTE0OTogIFN0cmluZ0VzY2FwZVV0aWxzLnVuZXNjYXBlQ3N2IGRvZXNuJ3QgcmVtb3ZlIHF1b3RlcyBhdCBiZWdpbiBhbmQgZW5kIG9mIHN0cmluZy4gVGhhbmtzIHRvIFl1amkgS29uaXNoaS4KKiBURVhULTE3NDogIFNjcmlwdFN0cmluZ0xvb2t1cCBkb2VzIG5vdCBhY2NlcHQgIjoiICMxMjYuIFRoYW5rcyB0byBmdXJraWxpYy4KKiBURVhULTE3ODogIFN0cmluZ1N1YnN0aXR1dG9yIGluY29ycmVjdGx5IHJlbW92ZXMgc29tZSBlc2NhcGUgY2hhcmFjdGVycy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBURVhULTE4MTogIEZpeCBKYXZhZG9jcyAjMTM1LiBUaGFua3MgdG8gWGVub0FtZXNzLgoqIFRFWFQtMTgyOiAgRml4IHR5cG9zICMxMzcuIFRoYW5rcyB0byBYZW5vQW1lc3MuCiogVEVYVC0xODM6ICBNYWtlIENvbnN0YW50U3RyaW5nTG9va3VwLmNvbnN0YW50Q2FjaGUgZmluYWwgIzEzNi4gVGhhbmtzIHRvIFhlbm9BbWVzcy4KKiBURVhULTE4NDogIFNpbXBsaWZ5IGlmIGluIENhc2VVdGlscyAjMTM0LiBUaGFua3MgdG8gWGVub0FtZXNzLgoKQ2hhbmdlcwotLS0tLS0tCgoqIFtqYXZhZG9jXSBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gSmF2YSBjb2RlIGV4YW1wbGUgaW4gSmF2YWRvYyAjMTI0LiBUaGFua3MgdG8gSm9oYW4gSGFtbWFyLgoqIFRFWFQtMTc3OiAgVXBkYXRlIGZyb20gQXBhY2hlIENvbW1vbnMgTGFuZyAzLjkgdG8gMy4xMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBbYnVpbGRdIFNraXAgY2xpcnIgc2luY2Ugd2UgdXNlIEpBcGlDbXAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogW3Rlc3RdIGp1bml0LWp1cGl0ZXIgNS41LjEgLT4gNS41LjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogW3Rlc3RdIG9yZy5hc3NlcnRqOmFzc2VydGotY29yZSAzLjEzLjIgLT4gMy4xNi4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIFtidWlsZF0gY29tLnB1cHB5Y3Jhd2wudG9vbHM6Y2hlY2tzdHlsZSA4LjIzIC0+IDguMzQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogW2J1aWxkXSBVcGRhdGUgSlVuaXQgZnJvbSA1LjUuMiB0byA1LjYuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBbYnVpbGRdIGNvbW1vbnMuamFjb2NvLnZlcnNpb24gMC44LjQgLT4gMC44LjUuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogW2J1aWxkXSBjb21tb25zLmphdmFkb2MudmVyc2lvbiAzLjEuMSAtPiAzLjIuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBbYnVpbGRdIGNvbW1vbnMuamFwaWNtcC52ZXJzaW9uIDAuMTQuMSAtPiAwLjE0LjMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogW2J1aWxkXSBjaGVja3N0eWxlLnBsdWdpbi52ZXJzaW9uIDMuMS4wIC0+IDMuMS4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIFtidWlsZF0gY2hlY2tzdHlsZS52ZXJzaW9uIDguMjcgLT4gOC4zMy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBbYnVpbGRdIG9yZy5hcGFjaGUuY29tbW9uczpjb21tb25zLXBhcmVudCA0OCAtPiA1MS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBbYnVpbGRdIG1hdmVuLXBtZC1wbHVnaW4gMy4xMi4wIC0+IDMuMTMuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBbYnVpbGRdIG9yZy5tb2NraXRvIDMuMy4zIC0+IDMuNC40LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIFRleHQsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQKCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvZG93bmxvYWRfdGV4dC5jZ2kKCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgVGVhbQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQXBhY2hlIENvbW1vbnMgVGV4dCBWZXJzaW9uIDEuOCBSZWxlYXNlIE5vdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDEuOCB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIFRleHQuCkNvbW1vbnMgVGV4dCBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJvY2Vzc2luZwphbmQgbWFuaXB1bGF0aW5nIHRleHQgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGEgSmF2YSBlbnZpcm9ubWVudC4KCkFwYWNoZSBDb21tb25zIFRleHQgaXMgYSBsaWJyYXJ5IGZvY3VzZWQgb24gYWxnb3JpdGhtcyB3b3JraW5nIG9uIHN0cmluZ3MuCgpSZWxlYXNlIDEuOAoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBGZWF0dXJlcwotLS0tLS0tLS0tLS0KCiogVEVYVC0xNjk6IEFkZCBoZWxwZXIgZmFjdG9yeSBtZXRob2Qgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuU3RyaW5nU3Vic3RpdHV0b3IuY3JlYXRlSW50ZXJwb2xhdG9yKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogVEVYVC0xNzA6IEFkZCBTdHJpbmcgbG9va3VwIGZvciBob3N0IG5hbWVzIGFuZCBJUCBhZGRyZXNzZXMgKERuc1N0cmluZ0xvb2t1cCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiAgICAKRml4ZWQgQnVncwotLS0tLS0tLS0tCgoqIFRFWFQtMTY3OiBjb21tb25zLXRleHQgd2ViIHBhZ2UgbWlzc2luZyAiUkVMRUFTRS1OT1RFUy0xLjcudHh0Ii4gVGhhbmtzIHRvIExhcnJ5IFdlc3QuCiogVEVYVC0xNjg6IChkb2MpIEZpeGVkIHdyb25nIHZhbHVlIGZvciBKYXJvLVdpbmtsZXIgZXhhbXBsZSAjMTE3LiBUaGFua3MgdG8gbHVrc2FuNDcuCiogVEVYVC0xNzE6IFN0cmluZ0xvb2t1cEZhY3RvcnkuYWRkRGVmYXVsdFN0cmluZ0xvb2t1cHMoTWFwKSBkb2VzIG5vdCBjb252ZXJ0IGtleXMgdG8gbG93ZXIgY2FzZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KICAgIApDaGFuZ2VzCi0tLS0tLS0KCiogRXhwYW5kIEphdmFkb2MgZm9yIFN0cmluZ1N1YnN0aXR1dG9yIGFuZCBmcmllbmRzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIFtzaXRlXSBjaGVja3N0eWxlLnZlcnNpb24gOC4yMSAtPiA4LjIzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgogICAgCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtdGV4dGNoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBUZXh0LCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBUZXh0IHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy10ZXh0CgpEb3dubG9hZCBpdCBmcm9tIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvZG93bmxvYWRfdGV4dC5jZ2kKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjcgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjcgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBUZXh0LgpDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb2Nlc3NpbmcKYW5kIG1hbmlwdWxhdGluZyB0ZXh0IHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhIEphdmEgZW52aXJvbm1lbnQuCgpBcGFjaGUgQ29tbW9ucyBUZXh0IGlzIGEgbGlicmFyeSBmb2N1c2VkIG9uIGFsZ29yaXRobXMgd29ya2luZyBvbiBzdHJpbmdzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KCiogVEVYVC0xNDg6ICBBZGQgYW4gZW51bSB0byB0aGUgbG9va3VwIHBhY2thZ2UgdGhhdCBsaXN0cyBhbGwgU3RyaW5nTG9va3VwcwoqIFRFWFQtMTI3OiAgQWRkIGEgdG9nZ2xlIHRvIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGEgdmFyaWFibGUgaXMgdW5rbm93biBpbiBTdHJpbmdTdWJzdGl0dXRvciBUaGFua3MgdG8gSmVhbi1CYXB0aXN0ZSBSRUlDSCwgU2ViYiwgRG9uIEplYmEsIEdhcnkgR3JlZ29yeS4KKiBURVhULTEzODogIFRleHRTdHJpbmdCdWlsZGVyIGFwcGVuZCBzdWItc2VxdWVuY2Ugbm90IGNvbnNpc3RlbnQgd2l0aCBBcHBlbmRhYmxlLiBUaGFua3MgdG8gTmVhbCBKb2huc29uLCBEb24gSmViYS4KKiBURVhULTE1MjogIEZpeCBwb3NzaWJsZSBpbmZpbml0ZSBsb29wIGluIFdvcmRVdGlscy53cmFwIGZvciBhIHJlZ2V4IHBhdHRlcm4gdGhhdCB3b3VsZCB0cmlnZ2VyIG9uIGEgbWF0Y2ggb2YgMCBsZW5ndGggVGhhbmtzIHRvIEBDQVBTNTAuCiogVEVYVC0xNTU6ICBBZGQgYSBnZW5lcmljIEludGVyc2VjdGlvblNpbWlsYXJpdHkgbWVhc3VyZQoKRml4ZWQgQnVncwotLS0tLS0tLS0tCgoqIFRFWFQtMTExOiAgV29yZFV0aWxzLndyYXAgbXVzdCBjYWxjdWxhdGUgb2Zmc2V0IGluY3JlbWVudCBmcm9tIHdyYXBPbiBwYXR0ZXJuIGxlbmd0aCBUaGFua3MgdG8gQENBUFM1MC4KKiBURVhULTE1MTogIEZpeCB0aGUgSmFyb1dpbmtsZXJTaW1pbGFyaXR5IHRvIHVzZSBTdHJpbmdVdGlscy5lcXVhbHMgdG8gdGVzdCBmb3IgQ2hhclNlcXVlbmNlIGVxdWFsaXR5CiogVEVYVC0xNjU6ICBSZXNvdXJjZUJ1bmRsZVN0cmluZ0xvb2t1cC5sb29rdXAoU3RyaW5nKSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGluc3RlYWQgb2YgcmV0dXJuaW5nIG51bGwuCgpDaGFuZ2VzCi0tLS0tLS0KCiogVEVYVC0xMDQ6ICBKYXJvIFdpbmtsZXIgRGlzdGFuY2UgcmVmZXJzIHRvIHNpbWlsYXJpdHkgVGhhbmtzIHRvIFNhc2NoYSBTem90dC4KKiBURVhULTE1MzogIE1ha2UgcHJlZml4U2V0IGluIExvb2t1cFRyYW5zbGF0b3IgYSBCaXRTZXQgVGhhbmtzIHRvIGFtaXJoYWRhZGkuCiogVEVYVC0xNTY6ICBGaXggdGhlIFJlZ2V4VG9rZW5pemVyIHRvIHVzZSBhIHN0YXRpYyBQYXR0ZXJuCiogVEVYVC0xNTc6ICBSZW1vdmUgcm91bmRpbmcgZnJvbSBKYWNjYXJkRGlzdGFuY2UgYW5kIEphY2NhcmRTaW1pbGFyaXR5CiogVEVYVC0xNjI6ICBVcGRhdGUgQXBhY2hlIENvbW1vbnMgTGFuZyBmcm9tIDMuOC4xIHRvIDMuOS4KKiBVcGRhdGUgdGVzdHMgZnJvbSBvcmcuYXNzZXJ0ajphc3NlcnRqLWNvcmUgMy4xMi4xIHRvIDMuMTIuMi4KKiBVcGRhdGUgc2l0ZSBmcm9tIGNvbS5wdXBweWNyYXdsLnRvb2xzOmNoZWNrc3R5bGUgOC4xOCB0byA4LjIxLgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIFRleHQsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQKCkRvd25sb2FkIGl0IGZyb20gaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtdGV4dC9kb3dubG9hZF90ZXh0LmNnaQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQXBhY2hlIENvbW1vbnMgVGV4dCBWZXJzaW9uIDEuNiBSZWxlYXNlIE5vdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjYgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucwpUZXh0LiBDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yCnRoZSBwdXJwb3NlIG9mIHByb2Nlc3NpbmcgYW5kIG1hbmlwdWxhdGluZyB0ZXh0IHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhIEphdmEKZW52aXJvbm1lbnQuCgpUaGlzIHJlbGVhc2UgcmVxdWlyZXMgSmF2YSA4LgoKQ2hhbmdlcwotLS0tLS0tCgoqIFRFWFQtMTQ0OiAgQWRkIHRoZSByZXNvdXJjZSBzdHJpbmcgYnVuZGxlIHN0cmluZyBsb29rdXAgdG8gdGhlIGRlZmF1bHQgc2V0IG9mIGxvb2t1cHMKKiBURVhULTE0NTogIEFkZCBTdHJpbmdMb29rdXBGYWN0b3J5IG1ldGhvZHMgZm9yIHRoZSBVUkwgZW5jb2RlciBhbmQgZGVjb2RlciBzdHJpbmcgbG9va3VwcwoqIFRFWFQtMTQ2OiAgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubG9va3VwLlN0cmluZ0xvb2t1cEZhY3RvcnkuaW50ZXJwb2xhdG9yU3RyaW5nTG9va3VwKCkgc2hvdWxkIHJldXNlIGEgc2luZ2xldG9uIGluc3RhbmNlCiogVEVYVC0xNDc6ICBBZGQgYSBCYXNlNjQgZW5jb2RlciBzdHJpbmcgbG9va3VwLgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIFRleHQsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLXRleHQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjUgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjUgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucwpUZXh0LiBDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIAp0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhCmVudmlyb25tZW50LgoKVGhpcyByZWxlYXNlIHJlcXVpcmVzIEphdmEgOC4KCk5ldyBGZWF0dXJlcwotLS0tLS0tLS0tLS0KCiogVEVYVC0xMzM6ICBBZGQgYSBYTUwgZmlsZSBYUGF0aCBzdHJpbmcgbG9va3VwLgoqIFRFWFQtMTM0OiAgQWRkIGEgUHJvcGVydGllcyBmaWxlIHN0cmluZyBsb29rdXAuCiogVEVYVC0xMzU6ICBBZGQgYSBzY3JpcHQgc3RyaW5nIGxvb2t1cC4KKiBURVhULTEzNjogIEFkZCBhIGZpbGUgc3RyaW5nIGxvb2t1cC4KKiBURVhULTEzNzogIEFkZCBhIFVSTCBzdHJpbmcgbG9va3VwLgoqIFRFWFQtMTQwOiAgQWRkIGEgQmFzZTY0IHN0cmluZyBsb29rdXAuCiogVEVYVC0xNDE6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQubG9va3VwLlN0cmluZ0xvb2t1cEZhY3RvcnkucmVzb3VyY2VCdW5kbGVTdHJpbmdMb29rdXAoU3RyaW5nKS4KKiBURVhULTE0MjogIEFkZCBVUkwgZW5jb2RlciBhbmQgZGVjb2RlciBzdHJpbmcgbG9va3Vwcy4KKiBURVhULTE0MzogIEFkZCBjb25zdGFudCBzdHJpbmcgbG9va3VwIGxpa2UgdGhlIG9uZSBpbiBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uLgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCgoqIFRFWFQtMTM5OiAgSW1wcm92ZSBKYWNjYXJkU2ltaWxhcml0eSBjb21wdXRhdGlvbmFsIGNvc3QgVGhhbmtzIHRvIE5pY2sgV29uZy4KKiBURVhULTExODogIEpTT04gZXNjYXBpbmcgaW5jb3JyZWN0IGZvciB0aGUgZGVsZXRlIGNvbnRyb2wgY2hhcmFjdGVyIFRoYW5rcyB0byBOYW5kb3IgS29sbGFyLgoqIFRFWFQtMTMwOiAgRml4ZXMgSmFyb1dpbmtsZXJEaXN0YW5jZTogV3JvbmcgcmVzdWx0cyBkdWUgdG8gcHJlY2lzaW9uIG9mIHRyYW5zcG9zaXRpb25zIFRoYW5rcyB0byBKYW4gTWFydGluIEtlaWwuCiogVEVYVC0xMzE6ICBKYXJvV2lua2xlckRpc3RhbmNlOiBDYWxjdWxhdGlvbiBkZXZpYXRlcyBmcm9tIGRlZmluaXRpb24gVGhhbmtzIHRvIEphbiBNYXJ0aW4gS2VpbC4KCkNoYW5nZXMKLS0tLS0tLQoKKiBURVhULTEzMjogIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBMYW5nIGZyb20gMy43IHRvIDMuOC4xCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBcGFjaGUgQ29tbW9ucyBUZXh0IFZlcnNpb24gMS40IFJlbGVhc2UgTm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMS40IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMKVGV4dC4gQ29tbW9ucyBUZXh0IGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIGZvciAKdGhlIHB1cnBvc2Ugb2YgcHJvY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRleHQgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGEgSmF2YQplbnZpcm9ubWVudC4KClRoaXMgcmVsZWFzZSByZXF1aXJlcyBKYXZhIDguCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgogICAgCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoKKiBURVhULTEyMDogIFN0cmluZ0VzY2FwZVV0aWxzI3VuZXNjYXBlSnNvbiBkb2VzIG5vdCB1bmVzY2FwZSBkb3VibGUgcXVvdGVzIGFuZCBmb3J3YXJkIHNsYXNoLgoqIFRFWFQtMTE5OiAgUmVtb3ZlIG1lbnRpb24gb2YgU1FMIGVzY2FwaW5nIGZyb20gdXNlciBndWlkZS4KKiBURVhULTEyMzogIFdvcmRVdGlscy53cmFwIHRocm93cyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gd3JhcExlbmd0aCBpcyBJbnRlZ2VyLk1BWF9WQUxVRS4gVGhhbmtzIHRvIFRha2Fub2J1IEFzYW51bWEuCiAgICAgICAgICAgICAgICAKQ2hhbmdlcwotLS0tLS0tCgoqIFRFWFQtMTIxOiAgVXBkYXRlIEphdmEgcmVxdWlyZW1lbnQgZnJvbSB2ZXJzaW9uIDcgdG8gOC4gVGhhbmtzIHRvIHBzY2h1bWFjaGVyLgoqIFRFWFQtMTIyOiAgQWxsb3cgZnVsbCBjdXN0b21pemF0aW9uIHdpdGggbmV3IEFQSSBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5sb29rdXAuU3RyaW5nTG9va3VwRmFjdG9yeS5pbnRlcnBvbGF0b3JTdHJpbmdMb29rdXAoTWFwPFN0cmluZywgU3RyaW5nTG9va3VwPiwgU3RyaW5nTG9va3VwLCBib29sZWFuKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjMgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjMgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucwpUZXh0LiBDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIAp0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhCmVudmlyb25tZW50LgoKVGhpcyByZWxlYXNlIHJlcXVpcmVzIEphdmEgNy4KCk5ldyBGZWF0dXJlcwotLS0tLS0tLS0tLS0KCiogQWRkIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZSBNQU5JRkVTVCBlbnRyeSBmb3IgSmF2YSA5IGNvbXBhdGliaWxpdHkgIElzc3VlOiBURVhULTExMC4gCiogQWRkIGFuIGludGVycG9sYXRvciBzdHJpbmcgbG9va3VwOiBTdHJpbmdMb29rdXBGYWN0b3J5I2ludGVycG9sYXRvclN0cmluZ0xvb2t1cCgpICBJc3N1ZTogVEVYVC0xMTMuIAoqIEFkZCBhIFN0clN1YnN0aXR1dG9yIHJlcGxhY2VtZW50IGJhc2VkIG9uIGludGVyZmFjZXM6IFN0cmluZ1N1YnN0aXR1dG9yICBJc3N1ZTogVEVYVC0xMTQuIAoqIEFkZCBhIFN0ckJ1aWxkZXIgcmVwbGFjZW1lbnQgYmFzZWQgb24gdGhlIFN0cmluZ01hdGNoZXIgaW50ZXJmYWNlOiBUZXh0U3RyaW5nQnVpbGRlciAgSXNzdWU6IFRFWFQtMTE1LiAKKiBBZGQgYSBTdHJUb2tlbml6ZXIgcmVwbGFjZW1lbnQgYmFzZWQgb24gdGhlIFN0cmluZ01hdGNoZXIgaW50ZXJmYWNlOiBTdHJpbmdUb2tlbml6ZXIgIElzc3VlOiBURVhULTExNi4gCiogQWRkIGEgbG9jYWwgaG9zdCBzdHJpbmcgbG9va3VwOiBMb2NhbEhvc3RTdHJpbmdMb29rdXAgIElzc3VlOiBURVhULTExNy4gCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KCiogQnVpbGQgZmFpbHVyZSB3aXRoIGphdmEgOS1lYSsxNTkgIElzc3VlOiBURVhULTcwLiAKKiBTdHJMb29rdXAgQVBJIGNvbmZ1c2luZyAgSXNzdWU6IFRFWFQtODAuIAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQXBhY2hlIENvbW1vbnMgVGV4dCBWZXJzaW9uIDEuMiBSZWxlYXNlIE5vdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAxLjIgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucwpUZXh0LiBDb21tb25zIFRleHQgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgZm9yIAp0aGUgcHVycG9zZSBvZiBwcm9jZXNzaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGV4dCB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYSBKYXZhCmVudmlyb25tZW50LgoKVGhpcyByZWxlYXNlIHJlcXVpcmVzIEphdmEgNy4KCkphdmEgOSBTdXBwb3J0Ci0tLS0tLS0tLS0tLS0tCgpBdCBvdXIgdGltZSBvZiByZWxlYXNlIG9mIDEuMSwgb3VyIGJ1aWxkIHN1Y2NlZWRzIHdpdGggSmF2YSA5LWVhIGJ1aWxkIDE1OSwKYW5kIHdlIGJlbGlldmUgYWxsIG9mIG91ciBmZWF0dXJlcyB0byBiZSBKYXZhIDkgY29tcGF0aWJsZS4gSG93ZXZlciwgd2hlbiB3ZQpydW4gIm12biBjbGVhbiBzaXRlIiB3ZSBoYXZlIGZhaWx1cmVzLgoKTmV3IEZlYXR1cmVzCi0tLS0tLS0tLS0tLQoKKiBURVhULTc0OiAgIFN0clN1YnN0aXR1dG9yOiBBYmlsaXR5IHRvIHR1cm4gb2ZmIHN1YnN0aXR1dGlvbiBpbiB2YWx1ZXMuIFRoYW5rcyB0byBJb2FubmlzIFNlcm1ldHppYWRpcy4KKiBURVhULTk3OiAgIFJhbmRvbVN0cmluZ0dlbmVyYXRvciBhYmxlIHRvIHBhc3MgbXVsdGlwbGUgcmFuZ2VzIHRvIC53aXRoaW5SYW5nZSgpLiBUaGFua3MgdG8gQW1leSBKYWRpeWUuCiogVEVYVC04OTogICBXb3JkVXRpbHMuaW5pdGlhbHMgc3VwcG9ydCBmb3IgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlycy4gVGhhbmtzIHRvIEFydW4gVmludWQgUyBTLgoqIFRFWFQtOTA6ICAgQWRkIENoYXJhY3RlclByZWRpY2F0ZXMgZm9yIEFTQ0lJIGxldHRlcnMgKHVwcGVyY2FzZS9sb3dlcmNhc2UpIGFuZCBhcmFiaWMgbnVtZXJhbHMuCiogVEVYVC04NTogICBBZGRlZCBDYXNlVXRpbHMgY2xhc3Mgd2l0aCBjYW1lbCBjYXNlIGNvbnZlcnNpb24gc3VwcG9ydC4gVGhhbmtzIHRvIEFydW4gVmludWQgUyBTLgoqIFRFWFQtOTE6ICAgUmFuZG9tU3RyaW5nR2VuZXJhdG9yIHNob3VsZCBiZSBhYmxlIHRvIGdlbmVyYXRlIGEgU3RyaW5nIHdpdGggYSByYW5kb20gbGVuZ3RoLgoqIFRFWFQtMTAyOiAgQWRkIFN0ckxvb2t1cC5yZXNvdXJjZUJ1bmRsZUxvb2t1cChSZXNvdXJjZUJ1bmRsZSkuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KCiogVEVYVC0xMDY6ICBFeGNlcHRpb24gdGhyb3duIGluIEV4dGVuZGVkTWVzc2FnZUZvcm1hdCB1c2luZyBxdW90ZXMgd2l0aCBjdXN0b20gcmVnaXN0cnkuIFRoYW5rcyB0byBCZW5vaXQgTW9yZWF1LgoqIFRFWFQtMTAwOiAgU3RyaW5nRXNjYXBlVXRpbHMjVW5Fc2NhcGVKc29uIGRvZXNuJ3QgcmVjb2duaXplIGVzY2FwZSBzaWducyBjb3JyZWN0bHkuIFRoYW5rcyB0byBEb24gSmViYS4KKiBURVhULTEwNTogIFR5cG8gaW4gTG9uZ2VzdENvbW1vblN1YnNlcXVlbmNlI2xvZ2VzdENvbW1vblN1YnNlcXVlbmNlLiBUaGFua3MgdG8gQWJyYXNoYS4KCkNoYW5nZXMKLS0tLS0tLQoKKiBURVhULTEwNzogIFVwdmVyc2lvbiBjb21tb25zLWxhbmcgdG8gMy43LgoqIFRFWFQtOTg6ICAgRGVwcmVjYXRlIGlzRGVsaW1pdGVyIGFuZCB1c2UgSGFzaFNldHMgZm9yIGRlbGltaXRlciBjaGVja3MuIFRoYW5rcyB0byBBcnVuIFZpbnVkIFMgUy4KKiBURVhULTg4OiAgIFdvcmRVdGlscyBzaG91bGQgdHJlYXQgYW4gZW1wdHkgZGVsaW1pdGVyIGFycmF5IGFzIG5vIGRlbGltaXRlcnMuIFRoYW5rcyB0byBBbWV5IEphZGl5ZS4KKiBURVhULTkzOiAgIFVwZGF0ZSBSYW5kb21TdHJpbmdHZW5lcmF0b3IgdG8gYWNjZXB0IGEgbGlzdCBvZiB2YWxpZCBjaGFyYWN0ZXJzLiBUaGFua3MgdG8gQW1leSBKYWRpeWUuCiogVEVYVC05MjogICBVcGRhdGUgY29tbW9ucy1sYW5nIGRlcGVuZGVuY3kgdG8gdmVyc2lvbiAzLjYuCiogVEVYVC04MzogICBEb2N1bWVudCB0aGF0IGNvbW1vbnMtY3N2IHNob3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gQ3N2VHJhbnNsYXRvcnMuIFRoYW5rcyB0byBBbWV5IEphZGl5ZS4KKiBURVhULTY3OiAgIE51bWVyaWNFbnRpdHlVbmVzY2FwZXIub3B0aW9ucyAtIGZpeCBUT0RPLgoqIFRFWFQtODQ6ICAgUmFuZG9tU3RyaW5nR2VuZXJhdG9yIGNsYWltcyB0byBiZSBpbW11dGFibGUsIGJ1dCBpc24ndC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIFRleHQgVmVyc2lvbiAxLjEgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkphdmEgOSBTdXBwb3J0Ci0tLS0tLS0tLS0tLS0tCgpBdCBvdXIgdGltZSBvZiByZWxlYXNlIG9mIDEuMSwgb3VyIGJ1aWxkIHN1Y2NlZWRzIHdpdGggSmF2YSA5LWVhIGJ1aWxkIDE1OSwKYW5kIHdlIGJlbGlldmUgYWxsIG9mIG91ciBmZWF0dXJlcyB0byBiZSBKYXZhIDkgY29tcGF0aWJsZS4gSG93ZXZlciwgd2hlbiB3ZSAKcnVuICJtdm4gY2xlYW4gc2l0ZSIgd2UgaGF2ZSBmYWlsdXJlcy4KCk5ldyBGZWF0dXJlcwotLS0tLS0tLS0tLS0KCiogVEVYVC00MTogICBXb3JkVXRpbHMuYWJicmV2aWF0ZSBzdXBwb3J0IFRoYW5rcyB0byBBbWV5IEphZGl5ZS4KKiBURVhULTgyOiAgIFB1dHRpbmcgV29yZFV0aWxzIGJhY2sgaW4gdG8gdGhlIGNvZGViYXNlIFRoYW5rcyB0byBBbWV5IEphZGl5ZS4KKiBURVhULTgxOiAgIEFkZCBSYW5kb21TdHJpbmdHZW5lcmF0b3IgVGhhbmtzIHRvIGRqb25lcy4KKiBURVhULTM2OiAgIFJhbmRvbVN0cmluZ0dlbmVyYXRvcjogYWxsb3cgdXNlcnMgdG8gcHJvdmlkZSBzb3VyY2Ugb2YgcmFuZG9tbmVzcwogICAgICAgICAgICAgVGhhbmtzIHRvIFJheW1vbmQgRGVDYW1wby4KICAgICAgICAgICAgICAgIApGaXhlZCBCdWdzCi0tLS0tLS0tLS0KCiogVEVYVC03NjogICBDb3JyZWN0IHJvdW5kIGlzc3VlIGluIEphcm8gV2lua2xlciBpbXBsZW1lbnRhdGlvbgoqIFRFWFQtNzI6ICAgU2ltaWxhciB0byBMQU5HLTEwMjUsIGNsaXJyIGZhaWxzIHNpdGUgYnVpbGQuCiAgICAgICAgICAgICAgICAKQ0hBTkdFUwo9PT09PT09CgoqIFRFWFQtMzk6ICAgV29yZFV0aWxzIHNob3VsZCB1c2UgdG9YeHh4Q2FzZShpbnQpIHJhdGhlciB0aGFuIHRvWHh4eENhc2UoY2hhcikgCiAgICAgICAgICAgICBUaGFua3MgdG8gQW1leSBKYWRpeWUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBcGFjaGUgQ29tbW9ucyBUZXh0IFZlcnNpb24gMS4wIFJlbGVhc2UgTm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJbmNvbXBhdGlibGUgQ2hhbmdlcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKQWxsIHBhY2thZ2UgbmFtZXMgY2hhbmdlZCBmcm9tIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LmJldGEgaW4gMS4wLWJldGEtMSB0byBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dCAKaW4gMS4wLgoKTWV0aG9kcyBTdHJpbmdFc2NhcGVVdGlscyNlc2NhcGVIdG1sM09uY2UgYW5kIFN0cmluZ0VzY2FwZVV0aWxzI2VzY2FwZUh0bWw0T25jZQpoYXZlIGJlZW4gcmVtb3ZlZDsgc2VlIFRFWFQtNDAKCkphdmEgOSBTdXBwb3J0Ci0tLS0tLS0tLS0tLS0tCgpBdCBvdXIgdGltZSBvZiByZWxlYXNlIG9mIDEuMCwgb3VyIGJ1aWxkIHN1Y2NlZWRzIHdpdGggSmF2YSA5LWVhIGJ1aWxkIDE1OCwKYW5kIHdlIGJlbGlldmUgYWxsIG9mIG91ciBmZWF0dXJlcyB0byBiZSBKYXZhIDkgY29tcGF0aWJsZS4gSG93ZXZlciwgd2hlbiB3ZSBydW4KIm12biBjbGVhbiBzaXRlIiB3ZSBoYXZlIGZhaWx1cmVzLgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCgoqIFRFWFQtNjQ6ICAgSW52ZXN0aWdhdGUgbG9jYWxlIGlzc3VlIGluIEV4dGVuZGVkTWVzc2FnZUZvcm1hdFRlc3QuIFRoYW5rcyB0bwogICAgICAgICAgICAgY2h0b21wa2kuCiogVEVYVC02OTogICBSZXNvbHZlIFBNRC9DTUQgVmlvbGF0aW9ucwoqIFRFWFQtNjU6ICAgRml4aW5nIHRoZSAyMDAgY2hlY2tzdHlsZSBlcnJvcnMgcHJlc2VudCBpbiAxLjAtYmV0YS0xLgoqIFRFWFQtNjM6ICAgTXV0YWJsZSBmaWVsZHMgc2hvdWxkIGJlIHByaXZhdGUuCgpSZW1vdmVkCi0tLS0tLS0KCiogVEVYVC00MDogICBFc2NhcGUgSFRNTCBjaGFyYWN0ZXJzIG9ubHkgb25jZTogcmV2ZXJ0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQXBhY2hlIENvbW1vbnMgVGV4dCBWZXJzaW9uIDEuMC1iZXRhLTEgUmVsZWFzZSBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBIG5vdGUgb24gdGhlIEhpc3Rvcnkgb2YgdGhlIENvZGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgY29kZWJhc2UgYmVnYW4gaW4gdGhlIGZhbGwgb2YgMjAxNCBhcyBhIGxvY2F0aW9uIGZvciBob3VzaW5nIGFsZ29yaXRobXMgZm9yCipwZXJhdGluZyBvbiBTdHJpbmdzIHRoYXQgc2VlbWVkIHRvIGhhdmUgYSBtb3JlIGNvbXBsZXggbmF0dXJlIHRoYW4gdGhvc2Ugd2hpY2gKd291bGQgYmUgY29uc2lkZXJlZCBhIG5lZWRlZCBleHRlbnNpb24gdG8gamF2YS5sYW5nLiBUaHVzLCBhIG5ldyBjb21wb25lbnQsCmRpZmZlcmVudCBmcm9tIEFwYWNoZSBDb21tb25zIExhbmcgd2FzIHdhcnJhbnRlZC4gQXMgdGhlIHByb2plY3QgZXZvbHZlZCwgaXQgd2FzCm5vdGljZWQgdGhhdCBDb21tb25zIExhbmcgaGFkIGNvbnNpZGVyYWJsZSBtb3JlIHRleHQgbWFuaXB1bGF0aW9uIHRvb2xzIHRoYW4KdGhlIGF2ZXJhZ2UgSmF2YSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgd291bGQgbmVlZCBvciBldmVuIHdhbnQuIFNvLCB3ZSBoYXZlCmRlY2lkZWQgdG8gbW92ZSB0aGUgbW9yZSBlc290ZXJpYyBTdHJpbmcgcHJvY2Vzc2luZyBhbGdvcml0aG1zIG91dCBvZiBDb21tb25zCkxhbmcgaW50byBDb21tb25zIFRleHQuCgpKYXZhIDkgU3VwcG9ydAotLS0tLS0tLS0tLS0tLQoKQXQgb3VyIHRpbWUgb2YgcmVsZWFzZSBvZiAxLjAtYmV0YS0xLCBvdXIgYnVpbGQgc3VjY2VlZHMgd2l0aCBKYXZhIDktZWEgYnVpbGQgMTUzLAphbmQgd2UgYmVsaWV2ZSBhbGwgb2Ygb3VyIGZlYXR1cmVzIHRvIGJlIEphdmEgOSBjb21wYXRpYmxlLgoKTmV3IEZlYXR1cmVzCi0tLS0tLS0tLS0tLQoKKiBURVhULTU2OiAgIE1vdmUgQ3ZzVHJhbnNsYXRvcnMgb3V0IG9mIFN0cmluZ0VzY2FwZVV0aWxzIGFuZCBtYWtlIHRoZW0gRFJZCiAgICAgICAgICAgICBUaGFua3MgdG8gSmFyZWsgU3RyemVsZWNrLgoqIFRFWFQtNDA6ICAgRXNjYXBlIEhUTUwgY2hhcmFjdGVycyBvbmx5IG9uY2UgVGhhbmtzIHRvIFNhbXBhbm5hIEthaHUuCiogVEVYVC0zMjogICBBZGQgTENTIHNpbWlsYXJpdHkgYW5kIGRpc3RhbmNlCiogVEVYVC0zNDogICBBZGQgY2xhc3MgdG8gZ2VuZXJhdGUgcmFuZG9tIHN0cmluZ3MKKiBURVhULTI5OiAgIEFkZCBhIGJ1aWxkZXIgdG8gU3RyaW5nRXNjYXBlVXRpbHMKKiBURVhULTI4OiAgIEFkZCBzaGVsbC9YU0kgZXNjYXBlL3VuZXNjYXBlIHN1cHBvcnQKKiBURVhULTI6ICAgIEFkZCBKYWNjYXJkIEluZGV4IGFuZCBKYWNjYXJkIERpc3RhbmNlIFRoYW5rcyB0byBEb24gSmViYS4KKiBURVhULTI3OiAgIE1vdmUgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ0VzY2FwZVV0aWxzLmphdmEgaW50byB0ZXh0CiogVEVYVC0yMzogICBNb3ZpbmcgZnJvbSBjb21tb25zLWxhbmcsIHRoZSBwYWNrYWdlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50ZXh0CiogVEVYVC0xMDogICBBIG1vcmUgY29tcGxleCBMZXZlbnNodGVpbiBkaXN0YW5jZSBUaGFua3MgdG8gRG9uIEplYmEuCiogVEVYVC0yNDogICBBZGQgY292ZXJhbGxzIGFuZCBUcmF2aXMuY2kgaW50ZWdyYXRpb24KKiBURVhULTE5OiAgIEFkZCBhbHBoYWJldCBjb252ZXJ0ZXIgVGhhbmtzIHRvIEV5YWwgQWxsd2VpbC4KKiBURVhULTEzOiAgIENyZWF0ZSBDb21tb25zIFRleHQgbG9nbwoqIFRFWFQtNzogICAgV3JpdGUgdXNlciBndWlkZQoqIFRFWFQtMTU6ICAgSHVtYW4gbmFtZSBwYXJzZXIKKiBURVhULTM6ICAgIEFkZCBDb3NpbmUgU2ltaWxhcml0eSBhbmQgQ29zaW5lIERpc3RhbmNlCiogVEVYVC00OiAgICBQb3J0IE15ZXJzIGFsZ29yaXRobSBmcm9tIFtjb2xsZWN0aW9uc10KKiBURVhULTE6ICAgIEFkZCBIYW1taW5nIGRpc3RhbmNlCiogVEVYVC05OiAgICBJbmNvcnBvcmF0ZSBTdHJpbmcgYWxnb3JpdGhtcyBmcm9tIENvbW1vbnMgTGFuZyBUaGFua3MgdG8gYnJpdHRlci4KCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoKTm90ZS4gV2UgcmVjb2duaXplIHRoZSBjdXJpb3NpdHkgb2YgYSBuZXcgY29tcG9uZW50IGhhdmluZyAiZml4ZWQgYnVncywiIGJ1dCBhCmNvbnNpZGVyYWJsZSBudW1iZXIgb2YgZmlsZXMgd2VyZSBtaWdyYXRlZCBvdmVyIGZyb20gQ29tbW9ucyBMYW5nLCBzb21lIG9mIHdoaWNoCm5lZWRlZCBmaXhlcy4KCiogVEVYVC02MjogICBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBmcm9tIFJDMiBpbnRvIDEuMCByZWxlYXNlLgoqIFRFWFQtNjA6ICAgVXBncmFkaW5nIEphY29jbyBmb3IgSmF2YSA5LWVhIGNvbXBhdGliaWxpdHkuIFRoYW5rcyB0byBMZWUgQWRjb2NrLgoqIFRFWFQtNTI6ICAgUG9zc2libGUgYXR0YWNrcyB0aHJvdWdoIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUVjbWFTY3JpcCBiZXR0ZXIKICAgICAgICAgICAgIGphdmFkb2MKKiBURVhULTM3OiAgIEdsb2JhbCB2cyBsb2NhbCBzb3VyY2Ugb2YgcmFuZG9tbmVzcwoqIFRFWFQtMzg6ICAgRmx1ZW50IEFQSSBpbiAiUmFuZG9tU3RyaW5nQnVpbGRlciIKKiBURVhULTI2OiAgIEZpeCBKYXJvV2lua2xlckRpc3RhbmNlIGluIHRoZSBtYW5uZXIgb2YgTFVDRU5FLTEyOTcKKiBURVhULTM1OiAgIFVuZmluaXNoZWQgY2xhc3MgSmF2YWRvYyBmb3IgQ29zaW5lRGlzdGFuY2UKKiBURVhULTIyOiAgIExldmVuc2h0ZWluRGlzdGFuY2UgcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbgoqIFRFWFQtNTogICAgSVAgY2xlYXJhbmNlIGZvciB0aGUgbmFtZXMgcGFja2FnZQoqIFRFWFQtMTE6ICAgV29yayBvbiB0aGUgc3RyaW5nIG1ldHJpYywgZGlzdGFuY2UsIGFuZCBzaW1pbGFyaXR5IGRlZmluaXRpb25zIGZvcgogICAgICAgICAgICAgdGhlIHByb2plY3QKKiBURVhULTEyOiAgIENyZWF0ZSBTdHJpbmdEaXN0YW5jZUZyb20gY2xhc3MgdGhhdCBjb250YWlucyBhIFN0cmluZ01ldHJpYyBhbmQKICAgICAgICAgICAgIHRoZSAibGVmdCIgc2lkZSBzdHJpbmcuIFRoaXMgd291bGQgaGF2ZSBhIG1ldGhvZCB0aGF0IGFjY2VwdHMgdGhlCiAgICAgICAgICAgICAicmlnaHQiIHNpZGUgc3RyaW5nIHRvIHRlc3QuIFRoYW5rcyB0byBKb25hdGhhbiBiYWtlci4KKiBURVhULTg6ICAgIENoYW5nZSAoUikgU3RyaW5nTWV0cmljLmNvbXBhcmUoQ1MgbGVmdCwgQ1MgcmlnaHQpIHRvICJhcHBseSIgc28KICAgICAgICAgICAgIHRoYXQgaXQgaXMgY29uc2lzdGVudCB3aXRoIEJpRnVuY3Rpb24uIFRoYW5rcyB0byBKb25hdGhhbiBCYWtlci4KKiBURVhULTY6ICAgIEFsbG93IGV4dHJhIGluZm9ybWF0aW9uIChlLmcuIExldmVuc2h0ZWluIHRocmVzaG9sZCkgdG8gYmUgc3RvcmVkCiAgICAgICAgICAgICBhcyAoZmluYWwpIGZpZWxkcyBpbiB0aGUgU3RyaW5nTWV0cmljIGluc3RhbmNlLiBUaGFua3MgdG8gSm9uYXRoYW4KICAgICAgICAgICAgIEJha2VyLgoKQ2hhbmdlcwotLS0tLS0tCgoqIFRFWFQtNjE6ICAgTmFtaW5nIHBhY2thZ2VzIG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LmJldGEgVGhhbmtzIHRvIExlZSBBZGNvY2suCiogVEVYVC01ODogICBSZWZhY3RvciBFbnRpdHlBcnJheXMgdG8gaGF2ZSB1bm1vZGlmaWFibGVNYXBzIGluIGxldSBvZiBTdHJpbmdbXVtdCiogVEVYVC01MzogICBQcmVwYXJlIHNpdGUgZm9yIDEuMCByZWxlYXNlCiogVEVYVC01MDogICBVcGdyYWRlIGZyb20gY29tbW9ucy1wYXJlbnQgdmVyc2lvbiA0MSB0byB2ZXJzaW9uIDQyCiogVEVYVC0zMzogICBDb25zb2xpZGF0aW5nIHNpbmNlIHRhZ3MgYXQgMS4wLCByZW1vdmluZyBkZXByZWNhdGVkIG1ldGhvZHMKKiBURVhULTE2OiAgIEltcHJvdmUgSHVtYW5OYW1lUGFyc2VyCgpSZW1vdmVkCi0tLS0tLS0KCiogVEVYVC01NTogICBSZW1vdmUgV29yZFV0aWxzIHRvIGJlIGFkZGVkIGJhY2sgaW4gYW4gdXBjb21pbmcgMS5YIHJlbGVhc2UKKiBURVhULTUxOiAgIFJlbW92ZSBSYW5kb21TdHJpbmdHZW5lcmF0b3IgdG8gYmUgYWRkZWQgYmFjayBpbiB0aGUgMS4xIHJlbGVhc2UKKiBURVhULTMxOiAgIFJlbW92ZSBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5uYW1lcywgZm9yIGxhdGVyIHJlbGVhc2UgdGhhbiAxLjAKCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvdGV4dC9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgVGV4dCwgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cKdG8gc3VibWl0IGJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlCkFwYWNoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3RleHQvCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRleHQgdGVhbQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=