U3lzdGVtLkRhdGEuU3FsQ2xpZW50LlNxbEV4Y2VwdGlvbiAoMHg4MDEzMTkwNCk6IEEgbmV0d29yay1yZWxhdGVkIG9yIGluc3RhbmNlLXNwZWNpZmljIGVycm9yIG9jY3VycmVkIHdoaWxlIGVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24gdG8gU1FMIFNlcnZlci4gVGhlIHNlcnZlciB3YXMgbm90IGZvdW5kIG9yIHdhcyBub3QgYWNjZXNzaWJsZS4gVmVyaWZ5IHRoYXQgdGhlIGluc3RhbmNlIG5hbWUgaXMgY29ycmVjdCBhbmQgdGhhdCBTUUwgU2VydmVyIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb3cgcmVtb3RlIGNvbm5lY3Rpb25zLiAocHJvdmlkZXI6IE5hbWVkIFBpcGVzIFByb3ZpZGVyLCBlcnJvcjogNDAgLSBDb3VsZCBub3Qgb3BlbiBhIGNvbm5lY3Rpb24gdG8gU1FMIFNlcnZlcikgLS0tPiBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuV2luMzJFeGNlcHRpb24gKDB4ODAwMDQwMDUpOiBBY2Nlc3MgaXMgZGVuaWVkDQogICBhdCBTeXN0ZW0uRGF0YS5Qcm92aWRlckJhc2UuRGJDb25uZWN0aW9uUG9vbC5UcnlHZXRDb25uZWN0aW9uKERiQ29ubmVjdGlvbiBvd25pbmdPYmplY3QsIFVJbnQzMiB3YWl0Rm9yTXVsdGlwbGVPYmplY3RzVGltZW91dCwgQm9vbGVhbiBhbGxvd0NyZWF0ZSwgQm9vbGVhbiBvbmx5T25lQ2hlY2tDb25uZWN0aW9uLCBEYkNvbm5lY3Rpb25PcHRpb25zIHVzZXJPcHRpb25zLCBEYkNvbm5lY3Rpb25JbnRlcm5hbCYgY29ubmVjdGlvbikNCiAgIGF0IFN5c3RlbS5EYXRhLlByb3ZpZGVyQmFzZS5EYkNvbm5lY3Rpb25Qb29sLlRyeUdldENvbm5lY3Rpb24oRGJDb25uZWN0aW9uIG93bmluZ09iamVjdCwgVGFza0NvbXBsZXRpb25Tb3VyY2VgMSByZXRyeSwgRGJDb25uZWN0aW9uT3B0aW9ucyB1c2VyT3B0aW9ucywgRGJDb25uZWN0aW9uSW50ZXJuYWwmIGNvbm5lY3Rpb24pDQogICBhdCBTeXN0ZW0uRGF0YS5Qcm92aWRlckJhc2UuRGJDb25uZWN0aW9uRmFjdG9yeS5UcnlHZXRDb25uZWN0aW9uKERiQ29ubmVjdGlvbiBvd25pbmdDb25uZWN0aW9uLCBUYXNrQ29tcGxldGlvblNvdXJjZWAxIHJldHJ5LCBEYkNvbm5lY3Rpb25PcHRpb25zIHVzZXJPcHRpb25zLCBEYkNvbm5lY3Rpb25JbnRlcm5hbCBvbGRDb25uZWN0aW9uLCBEYkNvbm5lY3Rpb25JbnRlcm5hbCYgY29ubmVjdGlvbikNCiAgIGF0IFN5c3RlbS5EYXRhLlByb3ZpZGVyQmFzZS5EYkNvbm5lY3Rpb25JbnRlcm5hbC5UcnlPcGVuQ29ubmVjdGlvbkludGVybmFsKERiQ29ubmVjdGlvbiBvdXRlckNvbm5lY3Rpb24sIERiQ29ubmVjdGlvbkZhY3RvcnkgY29ubmVjdGlvbkZhY3RvcnksIFRhc2tDb21wbGV0aW9uU291cmNlYDEgcmV0cnksIERiQ29ubmVjdGlvbk9wdGlvbnMgdXNlck9wdGlvbnMpDQogICBhdCBTeXN0ZW0uRGF0YS5Qcm92aWRlckJhc2UuRGJDb25uZWN0aW9uQ2xvc2VkLlRyeU9wZW5Db25uZWN0aW9uKERiQ29ubmVjdGlvbiBvdXRlckNvbm5lY3Rpb24sIERiQ29ubmVjdGlvbkZhY3RvcnkgY29ubmVjdGlvbkZhY3RvcnksIFRhc2tDb21wbGV0aW9uU291cmNlYDEgcmV0cnksIERiQ29ubmVjdGlvbk9wdGlvbnMgdXNlck9wdGlvbnMpDQogICBhdCBTeXN0ZW0uRGF0YS5TcWxDbGllbnQuU3FsQ29ubmVjdGlvbi5UcnlPcGVuSW5uZXIoVGFza0NvbXBsZXRpb25Tb3VyY2VgMSByZXRyeSkNCiAgIGF0IFN5c3RlbS5EYXRhLlNxbENsaWVudC5TcWxDb25uZWN0aW9uLlRyeU9wZW4oVGFza0NvbXBsZXRpb25Tb3VyY2VgMSByZXRyeSkNCiAgIGF0IFN5c3RlbS5EYXRhLlNxbENsaWVudC5TcWxDb25uZWN0aW9uLk9wZW4oKQ0KICAgYXQgTlBvY28uRGF0YWJhc2UuT3BlblNoYXJlZENvbm5lY3Rpb25JbXAoQm9vbGVhbiBpc0ludGVybmFsKQ0KICAgYXQgTlBvY28uRGF0YWJhc2UuQmVnaW5UcmFuc2FjdGlvbihJc29sYXRpb25MZXZlbCBpc29sYXRpb25MZXZlbCkNCiAgIGF0IFVtYnJhY28uQ29yZS5TY29waW5nLlNjb3BlLmdldF9EYXRhYmFzZSgpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLkNvcmVcU2NvcGluZ1xTY29wZS5jczpsaW5lIDI1Mw0KICAgYXQgU2ltcGxlUmVkaXJlY3RzLkNvcmUuUmVkaXJlY3RSZXBvc2l0b3J5LkZldGNoUmVkaXJlY3RGcm9tRGJCeVF1ZXJ5KEV4cHJlc3Npb25gMSBleHByZXNzaW9uKQ0KICAgYXQgU2ltcGxlUmVkaXJlY3RzLkNvcmUuUmVkaXJlY3RSZXBvc2l0b3J5Ljw+Y19fRGlzcGxheUNsYXNzMTNfMC48RmV0Y2hSZWRpcmVjdEJ5T2xkVXJpPmJfXzAoKQ0KICAgYXQgVW1icmFjby5Db3JlLkNhY2hlLkFwcENhY2hlRXh0ZW5zaW9ucy48PmNfX0Rpc3BsYXlDbGFzczBfMGAxLjxHZXRDYWNoZUl0ZW0+Yl9fMCgpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLkNvcmVcQ2FjaGVcQXBwQ2FjaGVFeHRlbnNpb25zLmNzOmxpbmUgMjINCiAgIGF0IFVtYnJhY28uQ29yZS5DYWNoZS5GYXN0RGljdGlvbmFyeUFwcENhY2hlQmFzZS48PmNfX0Rpc3BsYXlDbGFzczIxXzAuPEdldFNhZmVMYXp5PmJfXzAoKSBpbiBEOlxhXDFcc1xzcmNcVW1icmFjby5Db3JlXENhY2hlXEZhc3REaWN0aW9uYXJ5QXBwQ2FjaGVCYXNlLmNzOmxpbmUgMjg1DQotLS0gRW5kIG9mIHN0YWNrIHRyYWNlIGZyb20gcHJldmlvdXMgbG9jYXRpb24gd2hlcmUgZXhjZXB0aW9uIHdhcyB0aHJvd24gLS0tDQogICBhdCBVbWJyYWNvLkNvcmUuQ2FjaGUuV2ViQ2FjaGluZ0FwcENhY2hlLkdldEludGVybmFsKFN0cmluZyBrZXksIEZ1bmNgMSBmYWN0b3J5LCBOdWxsYWJsZWAxIHRpbWVvdXQsIEJvb2xlYW4gaXNTbGlkaW5nLCBDYWNoZUl0ZW1Qcmlvcml0eSBwcmlvcml0eSwgQ2FjaGVJdGVtUmVtb3ZlZENhbGxiYWNrIHJlbW92ZWRDYWxsYmFjaywgU3RyaW5nW10gZGVwZW5kZW50RmlsZXMpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLkNvcmVcQ2FjaGVcV2ViQ2FjaGluZ0FwcENhY2hlLmNzOmxpbmUgMTg5DQogICBhdCBVbWJyYWNvLkNvcmUuQ2FjaGUuV2ViQ2FjaGluZ0FwcENhY2hlLkdldChTdHJpbmcga2V5LCBGdW5jYDEgZmFjdG9yeSwgTnVsbGFibGVgMSB0aW1lb3V0LCBCb29sZWFuIGlzU2xpZGluZywgQ2FjaGVJdGVtUHJpb3JpdHkgcHJpb3JpdHksIENhY2hlSXRlbVJlbW92ZWRDYWxsYmFjayByZW1vdmVkQ2FsbGJhY2ssIFN0cmluZ1tdIGRlcGVuZGVudEZpbGVzKSBpbiBEOlxhXDFcc1xzcmNcVW1icmFjby5Db3JlXENhY2hlXFdlYkNhY2hpbmdBcHBDYWNoZS5jczpsaW5lIDQxDQogICBhdCBVbWJyYWNvLkNvcmUuQ2FjaGUuRGVlcENsb25lQXBwQ2FjaGUuR2V0KFN0cmluZyBrZXksIEZ1bmNgMSBmYWN0b3J5LCBOdWxsYWJsZWAxIHRpbWVvdXQsIEJvb2xlYW4gaXNTbGlkaW5nLCBDYWNoZUl0ZW1Qcmlvcml0eSBwcmlvcml0eSwgQ2FjaGVJdGVtUmVtb3ZlZENhbGxiYWNrIHJlbW92ZWRDYWxsYmFjaywgU3RyaW5nW10gZGVwZW5kZW50RmlsZXMpDQogICBhdCBVbWJyYWNvLkNvcmUuQ2FjaGUuQXBwQ2FjaGVFeHRlbnNpb25zLkdldENhY2hlSXRlbVtUXShJQXBwUG9saWN5Q2FjaGUgcHJvdmlkZXIsIFN0cmluZyBjYWNoZUtleSwgRnVuY2AxIGdldENhY2hlSXRlbSwgTnVsbGFibGVgMSB0aW1lb3V0LCBCb29sZWFuIGlzU2xpZGluZywgQ2FjaGVJdGVtUHJpb3JpdHkgcHJpb3JpdHksIENhY2hlSXRlbVJlbW92ZWRDYWxsYmFjayByZW1vdmVkQ2FsbGJhY2ssIFN0cmluZ1tdIGRlcGVuZGVudEZpbGVzKSBpbiBEOlxhXDFcc1xzcmNcVW1icmFjby5Db3JlXENhY2hlXEFwcENhY2hlRXh0ZW5zaW9ucy5jczpsaW5lIDIyDQogICBhdCBTaW1wbGVSZWRpcmVjdHMuQ29yZS5VdGlsaXRpZXMuQ2FjaGluZy5DYWNoZU1hbmFnZXIuR2V0Q2FjaGVJdGVtW1RdKFN0cmluZyBrZXksIEZ1bmNgMSBnZXRDYWNoZUl0ZW0pDQogICBhdCBTaW1wbGVSZWRpcmVjdHMuQ29yZS5SZWRpcmVjdFJlcG9zaXRvcnkuRmV0Y2hSZWRpcmVjdEJ5T2xkVXJpKFVyaSBvbGRVcmwsIEJvb2xlYW4gZnJvbUNhY2hlKQ0KICAgYXQgU2ltcGxlUmVkaXJlY3RzLkNvcmUuUmVkaXJlY3RSZXBvc2l0b3J5LkZpbmRSZWRpcmVjdChVcmkgb2xkVXJsKQ0KICAgYXQgU2ltcGxlUmVkaXJlY3RzLkNvcmUuUmVkaXJlY3RDb250ZW50RmluZGVyLlRyeUZpbmRDb250ZW50KFB1Ymxpc2hlZFJlcXVlc3QgcmVxdWVzdCkNCiAgIGF0IFVtYnJhY28uV2ViLlJvdXRpbmcuUHVibGlzaGVkUm91dGVyLjw+Y19fRGlzcGxheUNsYXNzMTlfMC48RmluZFB1Ymxpc2hlZENvbnRlbnQ+Yl9fMChJQ29udGVudEZpbmRlciBmaW5kZXIpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLldlYlxSb3V0aW5nXFB1Ymxpc2hlZFJvdXRlci5jczpsaW5lIDQyNw0KICAgYXQgU3lzdGVtLkxpbnEuRW51bWVyYWJsZS5BbnlbVFNvdXJjZV0oSUVudW1lcmFibGVgMSBzb3VyY2UsIEZ1bmNgMiBwcmVkaWNhdGUpDQogICBhdCBVbWJyYWNvLldlYi5Sb3V0aW5nLlB1Ymxpc2hlZFJvdXRlci5GaW5kUHVibGlzaGVkQ29udGVudChQdWJsaXNoZWRSZXF1ZXN0IHJlcXVlc3QpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLldlYlxSb3V0aW5nXFB1Ymxpc2hlZFJvdXRlci5jczpsaW5lIDQyNA0KICAgYXQgVW1icmFjby5XZWIuUm91dGluZy5QdWJsaXNoZWRSb3V0ZXIuRmluZFB1Ymxpc2hlZENvbnRlbnRBbmRUZW1wbGF0ZShQdWJsaXNoZWRSZXF1ZXN0IHJlcXVlc3QpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLldlYlxSb3V0aW5nXFB1Ymxpc2hlZFJvdXRlci5jczpsaW5lIDM4Ng0KICAgYXQgVW1icmFjby5XZWIuUm91dGluZy5QdWJsaXNoZWRSb3V0ZXIuUHJlcGFyZVJlcXVlc3QoUHVibGlzaGVkUmVxdWVzdCByZXF1ZXN0KSBpbiBEOlxhXDFcc1xzcmNcVW1icmFjby5XZWJcUm91dGluZ1xQdWJsaXNoZWRSb3V0ZXIuY3M6bGluZSAxMzENCiAgIGF0IFVtYnJhY28uV2ViLlVtYnJhY29JbmplY3RlZE1vZHVsZS5Qcm9jZXNzUmVxdWVzdChIdHRwQ29udGV4dEJhc2UgaHR0cENvbnRleHQpIGluIEQ6XGFcMVxzXHNyY1xVbWJyYWNvLldlYlxVbWJyYWNvSW5qZWN0ZWRNb2R1bGUuY3M6bGluZSAxMzQNCiAgIGF0IFVtYnJhY28uV2ViLlVtYnJhY29JbmplY3RlZE1vZHVsZS48SW5pdD5iX18xOF80KE9iamVjdCBzZW5kZXIsIEV2ZW50QXJncyBlKSBpbiBEOlxhXDFcc1xzcmNcVW1icmFjby5XZWJcVW1icmFjb0luamVjdGVkTW9kdWxlLmNzOmxpbmUgNDEyDQogICBhdCBTeXN0ZW0uV2ViLkh0dHBBcHBsaWNhdGlvbi5TeW5jRXZlbnRFeGVjdXRpb25TdGVwLlN5c3RlbS5XZWIuSHR0cEFwcGxpY2F0aW9uLklFeGVjdXRpb25TdGVwLkV4ZWN1dGUoKQ0KICAgYXQgU3lzdGVtLldlYi5IdHRwQXBwbGljYXRpb24uRXhlY3V0ZVN0ZXBJbXBsKElFeGVjdXRpb25TdGVwIHN0ZXApDQogICBhdCBTeXN0ZW0uV2ViLkh0dHBBcHBsaWNhdGlvbi5FeGVjdXRlU3RlcChJRXhlY3V0aW9uU3RlcCBzdGVwLCBCb29sZWFuJiBjb21wbGV0ZWRTeW5jaHJvbm91c2x5KQ0KQ2xpZW50Q29ubmVjdGlvbklkOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMA0KRXJyb3IgTnVtYmVyOjUsU3RhdGU6MCxDbGFzczoyMA==U3lzdGVtLkNvbXBvbmVudE1vZGVsLldpbjMyRXhjZXB0aW9uICgweDgwMDA0MDA1KTogQWNjZXNzIGlzIGRlbmllZA==