PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KCjwhLS0KTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQpvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQp0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLApzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgoiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCnNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgo8cHJvamVjdCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4gIAogIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4gIAogIDxncm91cElkPk5QYW5kYXkuUHJvamVjdDwvZ3JvdXBJZD4gIAogIDxhcnRpZmFjdElkPk5QYW5kYXkuUHJvamVjdDwvYXJ0aWZhY3RJZD4gIAogIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+ICAKICA8dmVyc2lvbj4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+ICAKICA8bmFtZT5OUGFuZGF5LlByb2plY3Q8L25hbWU+ICAKICA8dXJsPmh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZy9ucGFuZGF5PC91cmw+ICAKICA8ZGVzY3JpcHRpb24+TlBhbmRheSBwcm92aWRlcyBNYXZlbiAyLnggcGx1Z2lucyB0byBzdXBwb3J0IGJ1aWxkaW5nIG9mIC5ORVQgYXBwbGljYXRpb25zPC9kZXNjcmlwdGlvbj4gIAogIDxtYWlsaW5nTGlzdHM+IAogICAgPG1haWxpbmdMaXN0PiAKICAgICAgPG5hbWU+TlBhbmRheSBEZXYgTGlzdDwvbmFtZT4gIAogICAgICA8cG9zdD5ucGFuZGF5QGRpc2N1c3Npb25zLmNvZGVwbGV4LmNvbTwvcG9zdD4gIAogICAgICA8b3RoZXJBcmNoaXZlcz4gCiAgICAgICAgPG90aGVyQXJjaGl2ZT5odHRwOi8vbjIubmFiYmxlLmNvbS9OUGFuZGF5LURpc2N1c3Npb25zLWYxNjU3MTMxLmh0bWw8L290aGVyQXJjaGl2ZT4gCiAgICAgIDwvb3RoZXJBcmNoaXZlcz4gCiAgICA8L21haWxpbmdMaXN0PiAgCiAgPC9tYWlsaW5nTGlzdHM+ICAKICA8c2NtPiAKICAgIDx1cmw+aHR0cHM6Ly9ucGFuZGF5LnN2bi5jb2RlcGxleC5jb20vc3ZuLzwvdXJsPiAgCiAgICA8Y29ubmVjdGlvbj5zY206c3ZuOmh0dHBzOi8vbnBhbmRheS5zdm4uY29kZXBsZXguY29tL3N2bi88L2Nvbm5lY3Rpb24+ICAKICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpzdm46aHR0cHM6Ly9ucGFuZGF5LnN2bi5jb2RlcGxleC5jb20vc3ZuLzwvZGV2ZWxvcGVyQ29ubmVjdGlvbj4gIAogICAgPHRhZz5SRUxfMF85X1NOQVBTSE9UPC90YWc+IAogIDwvc2NtPiAgCiAgPG9yZ2FuaXphdGlvbj4gCiAgICA8bmFtZT5OUGFuZGF5PC9uYW1lPiAgCiAgICA8dXJsPmh0dHA6Ly9jb2RlcGxleC5jb20vbnBhbmRheTwvdXJsPiAKICA8L29yZ2FuaXphdGlvbj4gIAogIDxpc3N1ZU1hbmFnZW1lbnQ+IAogICAgPHN5c3RlbT5Db2RlcGxleCBJc3N1ZSBUcmFja2VyPC9zeXN0ZW0+ICAKICAgIDx1cmw+aHR0cDovL3d3dy5jb2RlcGxleC5jb20vbnBhbmRheS9Xb3JrSXRlbS9MaXN0LmFzcHg8L3VybD4gCiAgPC9pc3N1ZU1hbmFnZW1lbnQ+ICAKICA8bGljZW5zZXM+IAogICAgPGxpY2Vuc2U+IAogICAgICA8bmFtZT5BcGFjaGUgMi4wPC9uYW1lPiAgCiAgICAgIDx1cmw+TElDRU5TRS50eHQ8L3VybD4gCiAgICA8L2xpY2Vuc2U+IAogIDwvbGljZW5zZXM+ICAKICA8ZGV2ZWxvcGVycz4gCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+QnJldHQgUG9ydGVyPC9uYW1lPiAgCiAgICAgIDxpZD5icmV0dHBvcnRlcjwvaWQ+ICAKICAgICAgPGVtYWlsPmJyZXR0QGFwYWNoZS5vcmc8L2VtYWlsPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+Y29vcmRpbmF0b3I8L3JvbGU+ICAKICAgICAgPC9yb2xlcz4gCiAgICA8L2RldmVsb3Blcj4gIAogICAgPGRldmVsb3Blcj4gCiAgICAgIDxuYW1lPk1lbHZpbiBTZW1icmFubzwvbmFtZT4gIAogICAgICA8aWQ+bWVsdmluc2VtYnJhbm88L2lkPiAgCiAgICAgIDxlbWFpbD5tZWx2aW5zZW1icmFub0BnbWFpbC5jb208L2VtYWlsPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+Y29vcmRpbmF0b3I8L3JvbGU+ICAKICAgICAgPC9yb2xlcz4gCiAgICA8L2RldmVsb3Blcj4gIAogICAgPGRldmVsb3Blcj4gCiAgICAgIDxuYW1lPkxlb3BvbGRvIEFnZGVwcGE8L25hbWU+ICAKICAgICAgPGlkPmxhZ2RlcHBhPC9pZD4gIAogICAgICA8ZW1haWw+bGFnZGVwcGFAZXhpc3QuY29tPC9lbWFpbD4gIAogICAgICA8cm9sZXM+IAogICAgICAgIDxyb2xlPmRldmVsb3Blcjwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+SmFuIEFuY2FqYXM8L25hbWU+ICAKICAgICAgPGlkPmphbmNhamFzPC9pZD4gIAogICAgICA8ZW1haWw+amFuY2FqYXNAZXhpc3QuY29tPC9lbWFpbD4gIAogICAgICA8cm9sZXM+IAogICAgICAgIDxyb2xlPmRldmVsb3Blcjwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+Sm9lIE9jYWJhPC9uYW1lPiAgCiAgICAgIDxpZD5qb2NhYmE8L2lkPiAgCiAgICAgIDxlbWFpbD5qb2NhYmFAZXhpc3QuY29tPC9lbWFpbD4gIAogICAgICA8cm9sZXM+IAogICAgICAgIDxyb2xlPmRldmVsb3Blcjwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+U2hlaW4gRXJuYWNpbzwvbmFtZT4gIAogICAgICA8aWQ+c2VybmFjaW88L2lkPiAgCiAgICAgIDxlbWFpbD5zZXJuYWNpb0BleGlzdC5jb208L2VtYWlsPiAgCiAgICAgIDxyb2xlcz4gCiAgICAgICAgPHJvbGU+ZGV2ZWxvcGVyPC9yb2xlPiAgCiAgICAgIDwvcm9sZXM+IAogICAgPC9kZXZlbG9wZXI+ICAKICAgIDxkZXZlbG9wZXI+IAogICAgICA8bmFtZT5D6WRyaWM8L25hbWU+ICAKICAgICAgPGlkPm1pbWlsPC9pZD4gIAogICAgICA8cm9sZXM+IAogICAgICAgIDxyb2xlPmRldmVsb3Blcjwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8ZGV2ZWxvcGVyPiAKICAgICAgPG5hbWU+TWFyaWNvciBCYWNsYXk8L25hbWU+ICAKICAgICAgPGlkPm1iYWNsYXk8L2lkPiAgCiAgICAgIDxlbWFpbD5tYmFjbGF5QGV4aXN0LmNvbTwvZW1haWw+ICAKICAgICAgPHJvbGVzPiAKICAgICAgICA8cm9sZT5RQTwvcm9sZT4gIAogICAgICA8L3JvbGVzPiAKICAgIDwvZGV2ZWxvcGVyPiAgCiAgICA8IS0tRW1lcml0dXMgQ29tbWl0dGVycy0tPgogICAgPGRldmVsb3Blcj4gCiAgICAgIDxuYW1lPlNoYW5lIElzYmVsbDwvbmFtZT4gIAogICAgICA8aWQ+c2lzYmVsbDwvaWQ+ICAKICAgICAgPGVtYWlsPnNpc2JlbGxAYXBhY2hlLm9yZzwvZW1haWw+ICAKICAgICAgPHVybD5odHRwOi8vanJvbGxlci5jb20vcGFnZS9yYW5kb203PC91cmw+ICAKICAgIDwvZGV2ZWxvcGVyPiAgICAgIAogICAgPGRldmVsb3Blcj4gCiAgICAgIDxuYW1lPkV2YW4gV29ybGV5PC9uYW1lPiAgCiAgICAgIDxpZD5ld29ybGV5PC9pZD4gIAogICAgICA8ZW1haWw+ZXdvcmxleUBhcGFjaGUub3JnPC9lbWFpbD4gIAogICAgPC9kZXZlbG9wZXI+ICAgICAgICAKICAgIDwhLS1FbWVyaXR1cyBDb21taXR0ZXJzLS0+CiAgPC9kZXZlbG9wZXJzPiAgCiAgPG1vZHVsZXM+IAogICAgPG1vZHVsZT5hc3NlbWJsaWVzPC9tb2R1bGU+ICAKICAgIDxtb2R1bGU+cGx1Z2lucy9uZXRwbHVnaW5zPC9tb2R1bGU+IAogIDwvbW9kdWxlcz4gIAogIDxidWlsZD4gCiAgICA8ZXh0ZW5zaW9ucz4gCiAgICAgIDxleHRlbnNpb24+IAogICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ud2Fnb248L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD53YWdvbi1zc2gtZXh0ZXJuYWw8L2FydGlmYWN0SWQ+ICAKICAgICAgICA8dmVyc2lvbj4xLjAtYmV0YS0yPC92ZXJzaW9uPiAKICAgICAgPC9leHRlbnNpb24+ICAKICAgICAgPGV4dGVuc2lvbj4gCiAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi53YWdvbjwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPndhZ29uLXdlYmRhdjwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx2ZXJzaW9uPjEuMC1iZXRhLTI8L3ZlcnNpb24+IAogICAgICA8L2V4dGVuc2lvbj4gCiAgICA8L2V4dGVuc2lvbnM+ICAKICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjL21haW4vY3NoYXJwPC9zb3VyY2VEaXJlY3Rvcnk+ICAKICAgIDx0ZXN0U291cmNlRGlyZWN0b3J5PnNyYy90ZXN0L2NzaGFycDwvdGVzdFNvdXJjZURpcmVjdG9yeT4gIAogICAgPHBsdWdpbnM+IAogICAgICA8cGx1Z2luPiAKICAgICAgICA8Z3JvdXBJZD5ucGFuZGF5LnBsdWdpbjwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGUtcGx1Z2luPC9hcnRpZmFjdElkPiAgCiAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4gIAogICAgICAgIDxjb25maWd1cmF0aW9uPiAKICAgICAgICAgIDxmcmFtZXdvcmtWZXJzaW9uPjIuMC41MDcyNzwvZnJhbWV3b3JrVmVyc2lvbj4gCiAgICAgICAgPC9jb25maWd1cmF0aW9uPiAKICAgICAgPC9wbHVnaW4+ICAKICAgICAgPHBsdWdpbj4gCiAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcmVsZWFzZS1wbHVnaW48L2FydGlmYWN0SWQ+ICAKICAgICAgICA8Y29uZmlndXJhdGlvbj4gCiAgICAgICAgICA8dGFnQmFzZT5odHRwczovL25wYW5kYXkuc3ZuLmNvZGVwbGV4LmNvbS9zdm4vdGFnczwvdGFnQmFzZT4gCiAgICAgICAgPC9jb25maWd1cmF0aW9uPiAKICAgICAgPC9wbHVnaW4+IAogICAgPC9wbHVnaW5zPiAKICA8L2J1aWxkPiAgCiAgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PiAKICAgIDxkZXBlbmRlbmNpZXM+IAogICAgICA8ZGVwZW5kZW5jeT4gCiAgICAgICAgPGdyb3VwSWQ+TWljcm9zb2Z0LkJ1aWxkLkVuZ2luZTwvZ3JvdXBJZD4gIAogICAgICAgIDxhcnRpZmFjdElkPk1pY3Jvc29mdC5CdWlsZC5FbmdpbmU8L2FydGlmYWN0SWQ+ICAKICAgICAgICA8dHlwZT5nYWNfbXNpbDwvdHlwZT4gIAogICAgICAgIDx2ZXJzaW9uPjIuMC4wLjA8L3ZlcnNpb24+ICAKICAgICAgICA8Y2xhc3NpZmllcj5iMDNmNWY3ZjExZDUwYTNhPC9jbGFzc2lmaWVyPiAKICAgICAgPC9kZXBlbmRlbmN5PiAgCiAgICAgIDxkZXBlbmRlbmN5PiAKICAgICAgICA8Z3JvdXBJZD5FbnZEVEU8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5FbnZEVEU8L2FydGlmYWN0SWQ+ICAKICAgICAgICA8dHlwZT5nYWM8L3R5cGU+ICAKICAgICAgICA8dmVyc2lvbj44LjAuMC4wPC92ZXJzaW9uPiAgCiAgICAgICAgPGNsYXNzaWZpZXI+YjAzZjVmN2YxMWQ1MGEzYTwvY2xhc3NpZmllcj4gCiAgICAgIDwvZGVwZW5kZW5jeT4gIAogICAgICA8ZGVwZW5kZW5jeT4gCiAgICAgICAgPGdyb3VwSWQ+RW52RFRFODA8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5FbnZEVEU4MDwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx0eXBlPmdhYzwvdHlwZT4gIAogICAgICAgIDx2ZXJzaW9uPjguMC4wLjA8L3ZlcnNpb24+ICAKICAgICAgICA8Y2xhc3NpZmllcj5iMDNmNWY3ZjExZDUwYTNhPC9jbGFzc2lmaWVyPiAKICAgICAgPC9kZXBlbmRlbmN5PiAgCiAgICAgIDxkZXBlbmRlbmN5PiAKICAgICAgICA8Z3JvdXBJZD5NaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbW1hbmRCYXJzPC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+TWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Db21tYW5kQmFyczwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx2ZXJzaW9uPjguMC4wLjA8L3ZlcnNpb24+ICAKICAgICAgICA8Y2xhc3NpZmllcj5iMDNmNWY3ZjExZDUwYTNhPC9jbGFzc2lmaWVyPiAgCiAgICAgICAgPHR5cGU+Z2FjPC90eXBlPiAKICAgICAgPC9kZXBlbmRlbmN5PiAgCiAgICAgIDxkZXBlbmRlbmN5PiAKICAgICAgICA8Z3JvdXBJZD5NaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLlRlbXBsYXRlV2l6YXJkSW50ZXJmYWNlPC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+TWljcm9zb2Z0LlZpc3VhbFN0dWRpby5UZW1wbGF0ZVdpemFyZEludGVyZmFjZTwvYXJ0aWZhY3RJZD4gIAogICAgICAgIDx2ZXJzaW9uPjguMC4wLjA8L3ZlcnNpb24+ICAKICAgICAgICA8Y2xhc3NpZmllcj5iMDNmNWY3ZjExZDUwYTNhPC9jbGFzc2lmaWVyPiAgCiAgICAgICAgPHR5cGU+Z2FjX21zaWw8L3R5cGU+IAogICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgPGRlcGVuZGVuY3k+IAogICAgICAgIDxncm91cElkPkV4dGVuc2liaWxpdHk8L2dyb3VwSWQ+ICAKICAgICAgICA8YXJ0aWZhY3RJZD5FeHRlbnNpYmlsaXR5PC9hcnRpZmFjdElkPiAgCiAgICAgICAgPHR5cGU+Z2FjPC90eXBlPiAgCiAgICAgICAgPHZlcnNpb24+Ny4wLjMzMDAuMDwvdmVyc2lvbj4gIAogICAgICAgIDxjbGFzc2lmaWVyPmIwM2Y1ZjdmMTFkNTBhM2E8L2NsYXNzaWZpZXI+IAogICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgPGRlcGVuZGVuY3k+IAogICAgICAgIDxncm91cElkPk5Vbml0PC9ncm91cElkPiAgCiAgICAgICAgPGFydGlmYWN0SWQ+TlVuaXQuRnJhbWV3b3JrPC9hcnRpZmFjdElkPiAgCiAgICAgICAgPHZlcnNpb24+Mi4yLjguMDwvdmVyc2lvbj4gIAogICAgICAgIDx0eXBlPmxpYnJhcnk8L3R5cGU+ICAKICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+IAogICAgICA8L2RlcGVuZGVuY3k+IAogICAgPC9kZXBlbmRlbmNpZXM+IAogIDwvZGVwZW5kZW5jeU1hbmFnZW1lbnQ+IAo8L3Byb2plY3Q+Cg==